' : '';\r\n }.bind(this), this, {deferEvaluation: true});\r\n}\r\nUtils.extend(UIPBoolFontPreview, UIProvider);"
},
"UIPBorderColor.js": {
"type": "text",
"content": "/*exported UIPBorderColor */\n/*global Unit, Utils, UIProvider, koObservableController */\n\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPBorderColor(data) {\n 'use strict';\n\n UIPBorderColor.superclass.constructor.call(this, data);\n\n var side, sides = ['top', 'left', 'bottom', 'right'];\n if (!data.options || !data.options.attr) side = \"optional\";\n else side = data.options.attr;\n\n var all = side === \"all\";\n if (all) side = \"top\";\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n\n if (!this._valueChangeNotifier) {\n this._valueChangeNotifier = koObservableController.koBind(this.control(), \"\", function (control) {\n var topColor = control.css(\"border-top-color\"),\n bottomColor = control.css(\"border-bottom-color\"),\n leftColor = control.css(\"border-left-color\"),\n rightColor = control.css(\"border-right-color\");\n\n if (side === 'optional') {\n var existingBorderColors = [], flag = 1;\n sides.forEach(function (item) {\n if (parseInt(control.css(\"border-\" + item + \"-width\")) && control.css(\"border-\" + item + \"-color\")) {\n existingBorderColors.push(control.css(\"border-\" + item + \"-color\"));\n if ((existingBorderColors.length > 1) && (existingBorderColors[existingBorderColors.length - 1] !== existingBorderColors[existingBorderColors.length - 2])) {\n flag = 0;\n }\n }\n }.bind(this));\n\n if (flag) {\n return existingBorderColors[0];\n }\n\n }\n\n if (all) {\n if (!(topColor === bottomColor && bottomColor === leftColor && leftColor === rightColor)) return \"\";\n }\n return control.css(\"border-\" + side + \"-color\");\n });\n }\n return this._valueChangeNotifier();\n },\n write: function (value) {\n\n var control = this.control();\n\n var existingBorderSides = [];\n sides.forEach(function (item) {\n if (parseInt(control.css(\"border-\" + item + \"-width\"))) {\n existingBorderSides.push(item);\n }\n }.bind(this));\n\n\n if ((side === \"optional\") && (existingBorderSides.length)) {\n existingBorderSides.forEach(function (item) {\n control.css(\"border-\" + item + \"-color\", value);\n }.bind(this));\n }\n\n if (side === \"optional\" && !existingBorderSides.length) {\n side = \"top\";\n all = true;\n }\n\n if (side !== \"optional\") {\n control.css(\"border-\" + side + \"-color\", value);\n if (all) {\n control.css(\"border-bottom-color\", value);\n control.css(\"border-left-color\", value);\n control.css(\"border-right-color\", value);\n }\n\n\n var style = control.css(\"border-\" + side + \"-style\");\n\n if (value && (!style || style === \"none\")) {\n control.css(\"border-\" + side + \"-style\", \"solid\");\n if (all) {\n control.css(\"border-bottom-style\", \"solid\");\n control.css(\"border-left-style\", \"solid\");\n control.css(\"border-right-style\", \"solid\");\n }\n }\n\n //set width to 1 if it is not set yet\n var width = Unit.parse(control.css(\"border-\" + side + \"-width\")).size;\n if (value && (!width || width === \"0\")) {\n control.css(\"border-\" + side + \"-width\", \"1px\");\n if (all) {\n control.css(\"border-bottom-width\", \"1px\");\n control.css(\"border-left-width\", \"1px\");\n control.css(\"border-right-width\", \"1px\");\n }\n }\n\n }\n\n },\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPBorderColor, UIProvider);\n"
},
"UIPBorderRadius.js": {
"type": "text",
"content": "/*exported UIPBorderRadius*/\r\n/*global Utils, UIPCssProperty */\r\n\r\nfunction UIPBorderRadius(data) {\r\n 'use strict';\r\n // Should be defined before superclass constructor call\r\n this.sides = {\r\n 'all': 'border-radius',\r\n 'top-left': 'border-top-left-radius',\r\n 0: 'border-top-left-radius',\r\n 'top-right': 'border-top-right-radius',\r\n 1: 'border-top-right-radius',\r\n 'bottom-right': 'border-bottom-right-radius',\r\n 2: 'border-bottom-right-radius',\r\n 'bottom-left': 'border-bottom-left-radius',\r\n 3: 'border-bottom-left-radius'\r\n };\r\n\r\n UIPBorderRadius.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPBorderRadius, UIPCssProperty);\r\n"
},
"UIPBorderStyle.js": {
"type": "text",
"content": "/*exported UIPBorderStyle*/\n/*global Unit, Utils, UIPStyle, koObservableController, ProviderPresetStorage */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPBorderStyle(data) {\n 'use strict';\n\n UIPBorderStyle.superclass.constructor.call(this, data);\n\n var side, sides = ['top', 'left', 'bottom', 'right'];\n if (!data.options || !data.options.attr) side = \"optional\";\n else side = data.options.attr;\n\n var all = side === \"all\";\n if (all) side = \"top\";\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n if (!this._valueChangeNotifier) {\n this._valueChangeNotifier = koObservableController.koBind(this.control(), \"\", function (control) {\n var style;\n if (side === 'optional') {\n var existingBorderWidths = [], flag = 1;\n sides.forEach(function (item) {\n if (control.css(\"border-\" + item + \"-width\")) {\n existingBorderWidths.push(control.css(\"border-\" + item + \"-style\"));\n if ((existingBorderWidths.length > 1) && (existingBorderWidths[existingBorderWidths.length - 1] !== existingBorderWidths[existingBorderWidths.length - 2])) {\n flag = 0;\n }\n }\n }.bind(this));\n\n style = flag ? existingBorderWidths[0] : '';\n }\n else if (!all) {\n style = control.css(\"border-\" + side + \"-style\");\n }\n else {\n var topStyle = control.css(\"border-top-style\");\n var bottomStyle = control.css(\"border-bottom-style\");\n var leftStyle = control.css(\"border-left-style\");\n var rightStyle = control.css(\"border-right-style\");\n if (!(topStyle === bottomStyle && bottomStyle === leftStyle && leftStyle === rightStyle)) return '';\n else style = topStyle;\n }\n return style || \"\";\n });\n }\n return this._valueChangeNotifier();\n },\n write: function (value) {\n var style = value;\n var control = this.control();\n\n\n var existingBorderSides = [];\n sides.forEach(function (item) {\n if (control.css(\"border-\" + item + \"-width\")) {\n existingBorderSides.push(item);\n }\n }.bind(this));\n\n\n if ((side === \"optional\") && (existingBorderSides.length)) {\n existingBorderSides.forEach(function (item) {\n control.css(\"border-\" + item + \"-style\", value);\n if (value === 'double' && Unit.parse(control.css(\"border-\" + item + \"-width\")).size < 3) {\n control.css(\"border-\" + item + \"-width\", '3px');\n }\n }.bind(this));\n }\n\n if (side === \"optional\" && !existingBorderSides.length) {\n side = \"top\";\n all = true;\n }\n\n if (side !== \"optional\") {\n var color = control.css(\"border-\" + side + \"-color\");\n var width = Unit.parse(control.css(\"border-\" + side + \"-width\")).size;\n if (isNaN(width)) width = 0;\n\n // set the style always\n control.css(\"border-\" + side + \"-style\", style);\n if (all) {\n control.css(\"border-bottom-style\", style);\n control.css(\"border-left-style\", style);\n control.css(\"border-right-style\", style);\n }\n\n switch (style.toLowerCase()) {\n case \"none\":\n break;\n case \"double\":\n //set width to 3 if it is empty or less then 3\n if (style && width < 3) {\n control.css(\"border-\" + side + \"-width\", \"3px\");\n if (all) {\n control.css(\"border-bottom-width\", \"3px\");\n control.css(\"border-left-width\", \"3px\");\n control.css(\"border-right-width\", \"3px\");\n }\n }\n //and color to black if it has no color yet\n if (style && !color) {\n control.css(\"border-\" + side + \"-color\", \"@bd-gray-darker\");\n if (all) {\n control.css(\"border-bottom-color\", \"@bd-gray-darker\");\n control.css(\"border-left-color\", \"@bd-gray-darker\");\n control.css(\"border-right-color\", \"@bd-gray-darker\");\n }\n }\n break;\n default:\n //set width to 1 if it is empty or is 0\n if (style && (!width || width === \"0\")) {\n control.css(\"border-\" + side + \"-width\", \"1px\");\n if (all) {\n control.css(\"border-bottom-width\", \"1px\");\n control.css(\"border-left-width\", \"1px\");\n control.css(\"border-right-width\", \"1px\");\n }\n }\n //and color to black if it has no color yet\n if (style && !color) {\n control.css(\"border-\" + side + \"-color\", \"@bd-gray-darker\");\n if (all) {\n control.css(\"border-bottom-color\", \"@bd-gray-darker\");\n control.css(\"border-left-color\", \"@bd-gray-darker\");\n control.css(\"border-right-color\", \"@bd-gray-darker\");\n }\n }\n break;\n }\n }\n },\n owner: this,\n deferEvaluation: true\n });\n\n this.toString = this.value;\n}\n\nUtils.extend(UIPBorderStyle, UIPStyle);\n\nUIPBorderStyle.prototype.getItems = function (callback) {\n 'use strict';\n var items = [], i;\n\n var presets = ProviderPresetStorage.getPresets(UIPBorderStyle.superclass.constructor);\n var keys = Object.keys(presets).sort(function (str1, str2) {\n return str1.localeCompare(str2, {}, {numeric: true});\n });\n for (i = 0; i < keys.length; i++) {\n var presetName = keys[i];\n if (presets.hasOwnProperty(presetName)) {\n items.push(presets[presetName]);\n }\n }\n\n if (callback) {\n callback(null, items);\n }\n};"
},
"UIPBorderView.js": {
"type": "text",
"content": "/*exported UIPBorderView*/\r\n/*global Utils, LessController, UIProvider, ko, koObservableController, Color, Unit */\r\n\r\nfunction UIPBorderView(data) {\r\n 'use strict';\r\n UIPBorderView.superclass.constructor.call(this, data);\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n if (!this._valueChangeNotifier) {\r\n this._valueChangeNotifier = koObservableController.koBind(this.control(), \"\", function (control) {\r\n var values = {};\r\n values[\"border-left\"] = combineSide(control, \"border-left\");\r\n values[\"border-bottom\"] = combineSide(control, \"border-bottom\");\r\n values[\"border-right\"] = combineSide(control, \"border-right\");\r\n values[\"border-top\"] = combineSide(control, \"border-top\");\r\n if (values[\"border-left\"] || values[\"border-bottom\"] || values[\"border-right\"] || values[\"border-top\"])\r\n return values;\r\n return \"\";\r\n\r\n });\r\n }\r\n return this._valueChangeNotifier();\r\n },\r\n write: function (value) {\r\n var control = this.control();\r\n Object.keys(value).forEach(function (side) {\r\n var val = unCombineNones(value[side]);\r\n control.css(side + '-width', val[0]);\r\n control.css(side + '-style', val[1]);\r\n control.css(side + '-color', val[2]);\r\n });\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n function combineSide(control, side, resolveLess) {\r\n return combineNones(control.css(side + \"-width\"), control.css(side + \"-style\"), resolveLess ? LessController.lessColorFontToCss(control.css(side + \"-color\")) : control.css(side + \"-color\"));\r\n }\r\n\r\n function combineNones(width, style, color) {\r\n if (isNoValue(width) && isNoValue(style) && isNoValue(color)) {\r\n return '';\r\n }\r\n else if (width === \"0px\" && isNone(style) && isNoValue(color)) {\r\n return 'none';\r\n }\r\n else {\r\n var intWidth = parseInt(width, 10);\r\n if (intWidth > 8) width = '8px';\r\n return width + \" \" + style + \" \" + color;\r\n }\r\n }\r\n\r\n function unCombineNones(values) {\r\n var sideVal = values.split(' ');\r\n\r\n if (sideVal.length === 1) {\r\n if (isNone(sideVal[0])) {\r\n sideVal[0] = '0px';\r\n sideVal[1] = 'none';\r\n sideVal[2] = '';\r\n }\r\n else if (isNoValue(sideVal[0])) {\r\n sideVal[1] = sideVal[2] = sideVal[0] = '';\r\n }\r\n }\r\n\r\n return sideVal;\r\n }\r\n\r\n function isNoValue(attr) {\r\n return attr === '';\r\n }\r\n\r\n function isNone(attr) {\r\n return attr === 'none';\r\n }\r\n\r\n function isWhite(attr) {\r\n return (attr.indexOf('#ffffff') !== -1 || attr.indexOf('rgba(255, 255, 255,') !== -1);\r\n }\r\n\r\n function isNoWidth(attr) {\r\n return (attr.indexOf('0px') === 0);\r\n }\r\n\r\n this.toString = ko.computed(function () {\r\n //Add dependency from value\r\n this.value();\r\n var control = this.control();\r\n var left = combineSide(control, \"border-left\", true);\r\n var right = combineSide(control, \"border-right\", true);\r\n var top = combineSide(control, \"border-top\", true);\r\n var bottom = combineSide(control, \"border-bottom\", true);\r\n var size = this.options.iconSize || '20px';\r\n if (isNone(left) && isNone(right) && isNone(top) && isNone(bottom)) {\r\n var diagSize = Math.floor(Unit.parse(size).size * Math.sqrt(2)) + 'px';\r\n return '
';\r\n }\r\n else if (isNoValue(left) && isNoValue(right) && isNoValue(top) && isNoValue(bottom) ||\r\n isNoWidth(left) && isNoWidth(right) && isNoWidth(top) && isNoWidth(bottom)) {\r\n return '';\r\n }\r\n\r\n var bg = '';\r\n if (isWhite(left) || isWhite(right) || isWhite(top) || isWhite(bottom)) {\r\n bg = 'background-color: #e5e5e5;';\r\n }\r\n\r\n var borderStyle = 'border-left: ' + left + ';border-right: ' + right + ';border-top: ' + top + ';border-bottom: ' + bottom + ';';\r\n\r\n var res = '
';\r\n if (bg) res = '
' + res + '
';\r\n return res;\r\n }, this, {deferEvaluation: true});\r\n}\r\n\r\nUtils.extend(UIPBorderView, UIProvider);"
},
"UIPBorderWidth.js": {
"type": "text",
"content": "/*exported UIPBorderWidth */\r\n/*global Utils, Unit, UIProvider, koObservableController, ProviderPresetStorage*/\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPBorderWidth(data) {\r\n 'use strict';\r\n\r\n UIPBorderWidth.superclass.constructor.call(this, data);\r\n var side = data.options.attr, sides = ['top', 'left', 'bottom', 'right'];\r\n\r\n var all = side === \"all\";\r\n var onlyVisible = side === \"visible\";\r\n\r\n var getBordersToChange = function () {\r\n var bordersToChange;\r\n var control = this.control();\r\n if (onlyVisible) {\r\n var existingBorderSides = [];\r\n for (var i = 0; i < sides.length; i++) {\r\n var width = control.css(\"border-\" + sides[i] + \"-width\");\r\n var style = control.css(\"border-\" + sides[i] + \"-style\");\r\n if (width !== \"\" && width !== \"0\" && style !== \"\" && style !== \"none\")\r\n existingBorderSides.push(sides[i]);\r\n }\r\n bordersToChange = existingBorderSides.length ? existingBorderSides : sides;\r\n }\r\n else if (all)\r\n bordersToChange = sides;\r\n else bordersToChange = [side];\r\n return bordersToChange;\r\n }.bind(this);\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n if (!this._valueChangeNotifier) {\r\n this._valueChangeNotifier = koObservableController.koBind(this.control(), \"\", function (control) {\r\n var bordersToChange = getBordersToChange();\r\n var ans = control.css(\"border-\" + bordersToChange[0] + \"-width\");\r\n for (var i = 1; i < bordersToChange.length; i++)\r\n if (control.css(\"border-\" + bordersToChange[i] + \"-width\") !== ans)return \"\";\r\n return Unit.parse(ans).toString();\r\n });\r\n }\r\n return this._valueChangeNotifier();\r\n },\r\n write: function (value) {\r\n var obj = Unit.parse(value);\r\n var width = obj.size + obj.type;\r\n var control = this.control();\r\n var bordersToChange = getBordersToChange(), i;\r\n\r\n switch (obj.size) {\r\n //set to no-style\r\n case \"\":\r\n for (i = 0; i < bordersToChange.length; i++) {\r\n control.css(\"border-\" + bordersToChange[i] + \"-style\", \"\");\r\n control.css(\"border-\" + bordersToChange[i] + \"-color\", \"\");\r\n }\r\n break;\r\n //do nothing\r\n case \"0\":\r\n break;\r\n //set to solid if control has no style\r\n default:\r\n for (i = 0; i < bordersToChange.length; i++) {\r\n var style = control.css(\"border-\" + bordersToChange[i] + \"-style\");\r\n\r\n if (style === \"\" || style === \"none\")\r\n control.css(\"border-\" + bordersToChange[i] + \"-style\", \"solid\");\r\n\r\n //set color to black if it has no color yet\r\n var color = control.css(\"border-\" + bordersToChange[i] + \"-color\");\r\n if (!color)\r\n control.css(\"border-\" + bordersToChange[i] + \"-color\", \"@bd-gray-darker\");\r\n }\r\n break;\r\n }\r\n\r\n //update control's width\r\n for (i = 0; i < bordersToChange.length; i++)\r\n control.css(\"border-\" + bordersToChange[i] + \"-width\", width);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n this.toString = this.value;\r\n}\r\n\r\nUtils.extend(UIPBorderWidth, UIProvider);\r\n\r\nUIPBorderWidth.prototype.getItems = function (callback) {\r\n 'use strict';\r\n var items = [], i;\r\n\r\n var presets = ProviderPresetStorage.getPresets(this.constructor);\r\n var keys = Object.keys(presets).sort(function (str1, str2) {\r\n return str1.localeCompare(str2, {}, {numeric: true});\r\n });\r\n for (i = 0; i < keys.length; i++) {\r\n var presetName = keys[i];\r\n if (presets.hasOwnProperty(presetName)) {\r\n items.push(presets[presetName]);\r\n }\r\n }\r\n\r\n if (callback) {\r\n callback(null, items);\r\n }\r\n};"
},
"UIPBringToFront.js": {
"type": "text",
"content": "/*exported UIPBringToFront*/\r\n/*global Utils, UIProvider, TransformHelpers*/\r\nfunction UIPBringToFront(data) {\r\n 'use strict';\r\n UIPBringToFront.superclass.constructor.call(this, data);\r\n this.zIndexControlId = TransformHelpers.getZIndexControlId(this.control());\r\n if (!this.zIndexControlId)\r\n this.visible(false);\r\n else\r\n this.visible(TransformHelpers.validateItemOrder(this.zIndexControlId, true));\r\n}\r\n\r\nUtils.extend(UIPBringToFront, UIProvider);\r\n\r\nUIPBringToFront.prototype.click = function () {\r\n 'use strict';\r\n if (this.zIndexControlId)\r\n TransformHelpers.bringToFront(this.zIndexControlId);\r\n};"
},
"UIPCanBeChild.js": {
"type": "text",
"content": "/*exported UIPCanBeChild*/\n/*globals Utils, UIProvider, HooksHelper, ControlMetadataProvider, editor, DataProviderFacade, PubSubController,\n Channels*/\nfunction UIPCanBeChild(data) {\n 'use strict';\n UIPCanBeChild.superclass.constructor.call(this, data);\n this._canBeChild_updateVisible = function _canBeChild_updateVisible() {\n if (!(editor.templatesController && editor.templatesController.currentTemplate)) {\n this.visible(false);\n } else {\n this.visible(\n HooksHelper.canBeTemplateChild(\n HooksHelper.fixEditorJsonWithCmsHooks(\n ControlMetadataProvider.getEditor(this.options.value),\n DataProviderFacade.getCmsInfo().cmsName),\n [HooksHelper.fixEditorJsonWithCmsHooks(\n ControlMetadataProvider.getEditor(editor.templatesController.currentTemplate.constructorName),\n DataProviderFacade.getCmsInfo().cmsName)])\n );\n }\n }.bind(this);\n this._canBeChild_updateVisible();\n PubSubController.subscribe(Channels.previewEvents.loaded, this._canBeChild_updateVisible);\n}\n\nUtils.extend(UIPCanBeChild, UIProvider);\n\nUIPCanBeChild.prototype.dispose = function () {\n 'use strict';\n UIPCanBeChild.superclass.dispose.call(this);\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this._canBeChild_updateVisible);\n};\n\n"
},
"UIPCanEditContent.js": {
"type": "text",
"content": "/*global Utils, UIProvider, designer*/\n/*exported UIPCanEditContent*/\n\nfunction UIPCanEditContent(data) {\n 'use strict';\n UIPCanEditContent.superclass.constructor.call(this, data);\n this.visible(designer.projectFacade.canEditContent());\n}\n\nUtils.extend(UIPCanEditContent, UIProvider);"
},
"UIPCanPositionAbsolute.js": {
"type": "text",
"content": "/*exported UIPCanPositionAbsolute*/\r\n/*global Utils, UIPLayoutProperty, koObservableController, editor*/\r\n\r\nfunction UIPCanPositionAbsolute(data) {\r\n 'use strict';\r\n UIPCanPositionAbsolute.superclass.constructor.call(this, data);\r\n\r\n var editorJson = editor.themeController.getEditor(this.control());\r\n if (editorJson.canPositionAbsolute === true || editorJson.canPositionFixed === true)\r\n this.enabled = koObservableController.koBind(this.control(), 'position', function (value) {\r\n return value === 'absolute' || value === 'fixed';\r\n });\r\n else this.enabled(false);\r\n}\r\n\r\nUtils.extend(UIPCanPositionAbsolute, UIPLayoutProperty);"
},
"UIPChangeLang.js": {
"type": "text",
"content": "/*exported UIPChangeLang*/\n/*global Utils, UIProvider, Translations */\n\nfunction UIPChangeLang(data) {\n 'use strict';\n UIPChangeLang.superclass.constructor.call(this, data);\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n return Translations.currentLanguage;\n },\n write: function (value) {\n if (Translations.currentLanguage !== value) {\n Translations.setLanguage(value);\n window.location.reload();\n }\n },\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPChangeLang, UIProvider);\n\nUIPChangeLang.prototype.getItems = function (callback) {\n 'use strict';\n var items = [];\n var languagesData = Translations.languagesData;\n Object.keys(languagesData).forEach(function (key) {\n items.push({\n name: key,\n value: key,\n caption: languagesData[key].caption,\n //icon: 'url(' + ImageController.getIconUrl(this.defaultIcon) + ')',\n //category: category ? category : defaultCategory,\n //order: editorJson.UIOrder ? ('' + editorJson.UIOrder) : ''\n });\n }.bind(this));\n callback(null, items);\n};"
},
"UIPChangeLayout.js": {
"type": "text",
"content": "/* exported UIPToLayoutBase */\n/* global Utils, UIProvider, ContainerEffectProvider */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPChangeLayout(data) {\n 'use strict';\n\n UIPChangeLayout.superclass.constructor.call(this, data);\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n return ContainerEffectProvider.getThemeLength();\n },\n write: function (value) {\n ContainerEffectProvider.setThemeLength(value);\n },\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPChangeLayout, UIProvider);"
},
"UIPChangeSection.js": {
"type": "text",
"content": "/*exported UIPChangeSection*/\r\n/*globals UIPSectionApplyFromLibrary, Utils, _$, editor, BlogTemplate, PWStackHelper, PubSubController, Channels,\r\n SinglePostTemplate */\r\n/**\r\n *\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPChangeSection(data) {\r\n 'use strict';\r\n UIPChangeSection.superclass.constructor.call(this, data);\r\n\r\n this.___baseControl = this.control;\r\n this.control = ko.observable(this.___baseControl());\r\n var sectionAppyingProcess = false;\r\n\r\n var updateControl = function updateControl() {\r\n var sectionControl,\r\n _$sectionControl,\r\n changableControls = ['Section', 'Blog']\r\n ;\r\n if (changableControls.indexOf(this.___baseControl().prop('constructorName')) !== -1) {\r\n sectionControl = this.___baseControl();\r\n } else {\r\n sectionControl = editor.themeController.getAllControlsForTarget(this.___baseControl().getModelControl(), editor.themeController.getAllControls()).find(function (element) {\r\n return changableControls.indexOf(element.constructorName) !== -1;\r\n });\r\n sectionControl = sectionControl || this.___baseControl(); // For empty header\r\n }\r\n _$sectionControl = _$(sectionControl);\r\n var isBlogTemplate = editor.templatesController.currentTemplate instanceof BlogTemplate;\r\n var isPostTemplate = editor.templatesController.currentTemplate instanceof SinglePostTemplate;\r\n this.control(_$sectionControl);\r\n var enabled = _$sectionControl && (_$sectionControl.instanceOf(window.HeaderArea) || _$sectionControl.instanceOf(window.FooterArea) ||\r\n _$sectionControl.instanceOf(window.Section) || (_$sectionControl.instanceOf(window.Blog) && (isBlogTemplate || isPostTemplate)));\r\n if (this.options.disableOnlyOnTemplate && editor.templatesController.currentTemplate && editor.templatesController.currentTemplate.constructorName !== this.options.disableOnlyOnTemplate) {\r\n enabled = true;\r\n }\r\n this.enabled(!!enabled && !sectionAppyingProcess);\r\n this.visible(!!(this.options.alwaysVisible || enabled));\r\n }.bind(this);\r\n\r\n this.enableOnLoaded = function () {\r\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this.enableOnLoaded);\r\n updateControl();\r\n }.bind(this);\r\n\r\n this._controlSubscrpiption = this.___baseControl.subscribe(updateControl);\r\n\r\n if (editor.templatesController.currentTemplateKey) {\r\n this.enableOnLoaded();\r\n } else {\r\n PubSubController.once(Channels.previewEvents.loaded, this.enableOnLoaded);\r\n }\r\n\r\n this.onStartApply = function () {\r\n sectionAppyingProcess = true;\r\n this.enabled(false);\r\n }.bind(this);\r\n\r\n this.onStopApply = function () {\r\n sectionAppyingProcess = false;\r\n editor.previewController.whenReady(this.enableOnLoaded);\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.previewEvents.startApplySections, this.onStartApply);\r\n PubSubController.subscribe(Channels.previewEvents.stopApplySections, this.onStopApply);\r\n}\r\n\r\nUtils.extend(UIPChangeSection, UIPSectionApplyFromLibrary);\r\n\r\n\r\nUIPChangeSection.prototype.click = function click() {\r\n 'use strict';\r\n if (this.control().instanceOf(window.HeaderArea) || this.control().instanceOf(window.FooterArea)) {\r\n // Empty section -> Add section\r\n var addProvider = PWStackHelper.getProvider(this.control(), {\"provider\": $.extend({}, this.options, { name: \"SectionAddFromLibrary\" })});\r\n addProvider.click();\r\n addProvider.dispose();\r\n } else {\r\n if (!this.options.disableOnlyOnTemplate || (editor.templatesController.currentTemplate && editor.templatesController.currentTemplate.constructorName === this.options.disableOnlyOnTemplate)) {\r\n UIPChangeSection.superclass.click.call(this);\r\n } else {\r\n var switchToTemplate = PWStackHelper.getProvider(this.control(), {\r\n \"provider\": {\r\n \"name\": \"LookupTemplate\",\r\n \"caption\": \"\",\r\n \"constructorName\": this.options.disableOnlyOnTemplate\r\n }});\r\n switchToTemplate.click();\r\n switchToTemplate.dispose();\r\n this.startAsync();\r\n this.showWait();\r\n PubSubController.once(Channels.template.changed, function() {\r\n PubSubController.once(Channels.previewEvents.loaded, function() {\r\n UIPChangeSection.superclass.click.call(this);\r\n this.hideWait();\r\n this.stopAsync();\r\n }.bind(this));\r\n }.bind(this));\r\n }\r\n }\r\n};\r\n\r\nUIPChangeSection.prototype.dispose = function () {\r\n 'use strict';\r\n if (this._controlSubscrpiption.dispose)\r\n this._controlSubscrpiption.dispose();\r\n if (this.___baseControl.dispose)\r\n this.___baseControl.dispose();\r\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this.enableOnLoaded);\r\n PubSubController.unsubscribe(Channels.previewEvents.startApplySections, this.onStartApply);\r\n PubSubController.unsubscribe(Channels.previewEvents.stopApplySections, this.onStopApply);\r\n UIPChangeSection.superclass.dispose.call(this);\r\n};\r\n"
},
"UIPCheckComputedEnable.js": {
"type": "text",
"content": "/*exported UIPCheckComputedEnable */\r\n/*global UIProvider, Utils, ComputedControlFacade, Channels, PubSubController, PreviewHelper*/\r\n\r\nfunction UIPCheckComputedEnable(data) {\r\n 'use strict';\r\n UIPCheckComputedEnable.superclass.constructor.call(this, data);\r\n\r\n var _refreshHighlight = ko.observable(false);\r\n this.highlight = ko.computed(function () {\r\n if (PreviewHelper.isDefaultStylesActive())return false;\r\n var control = this.control();\r\n var active = this.enabled() && this.visible();\r\n var val = false;\r\n var attr = this.options.attr || this.CONST && (this.CONST.controlPropertyName || this.CONST.propertyName);\r\n if ((attr || this._childProvider) && active) {\r\n val = !!this.value();\r\n }\r\n if (control instanceof ComputedControlFacade) {\r\n if (active && attr) {\r\n var data = control.getControlDataByProperty(attr);\r\n return !!(data && data.value && data.controlFacade.getTopLevelFacade().isSameFacade(control.getTopSelectedControl()));\r\n }\r\n return false;\r\n } else {\r\n return val;\r\n }\r\n }, this, {deferEvaluation: true});\r\n\r\n this.checkEnabled = function (newControlFacade) {\r\n var control = this.control();\r\n if (control instanceof ComputedControlFacade && newControlFacade === control) {\r\n var enable = !!this.isEnabledComputed(control, this.options.check);\r\n this.enabled(enable);\r\n if (this.options.hideOnDisabled) {\r\n this.visible(enable);\r\n }\r\n _refreshHighlight(!_refreshHighlight());\r\n }\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.propertyWindow.computedFacadeUpdated, this.checkEnabled);\r\n\r\n this.checkEnabled(data.control);\r\n}\r\n\r\nUtils.extend(UIPCheckComputedEnable, UIProvider);\r\n\r\nUIPCheckComputedEnable.prototype.isEnabledComputed = function (control, checkProperty) {\r\n 'use strict';\r\n return !!(control.getEditorControlFacadeByPath(checkProperty));\r\n};\r\n\r\nUIPCheckComputedEnable.prototype.dispose = function () {\r\n 'use strict';\r\n UIPCheckComputedEnable.superclass.dispose.call(this);\r\n if (this.highlight.dispose)\r\n this.highlight.dispose();\r\n PubSubController.unsubscribe(Channels.propertyWindow.computedFacadeUpdated, this.checkEnabled);\r\n};"
},
"UIPCheckedCustomDialog.js": {
"type": "text",
"content": "/*global designer, UIProvider, Utils, PWStackHelper, PubSubController, Channels */\n\nfunction UIPCheckedCustomDialog(data) {\n 'use strict';\n\n UIPCheckedCustomDialog.superclass.constructor.call(this, data);\n\n this.__updateChecked = ko.observable();\n\n this.checked = ko.computed(function () {\n this.__updateChecked();\n return designer.ui.dialog.customDialog.isShown();\n }, this, {deferEvaluation: true});\n\n this.provider = PWStackHelper.getProvider(this.control(), {\"provider\": this.options.provider});\n\n PubSubController.subscribe(Channels.customDialog.show, function () {\n this.__updateChecked(!this.__updateChecked());\n }.bind(this));\n\n PubSubController.subscribe(Channels.customDialog.hide, function () {\n this.__updateChecked(!this.__updateChecked());\n }.bind(this));\n}\n\nUtils.extend(UIPCheckedCustomDialog, UIProvider);\n\nUIPCheckedCustomDialog.prototype.click = function (event) {\n 'use strict';\n\n if (this.provider) {\n this.provider.click(event);\n this.__updateChecked(!this.__updateChecked());\n }\n};\n"
},
"UIPCheckedType.js": {
"type": "text",
"content": "/* global Utils, UIProvider */\n/**\n * Created by oksana on 11.02.2016.\n */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPCheckedType(data) {\n 'use strict';\n UIPCheckedType.superclass.constructor.call(this, data);\n\n this.checked = ko.computed(function () {\n var value = this.value();\n var expected = this.options.checkedValue;\n if (Array.isArray(expected)) {\n return expected.indexOf(value) !== -1;\n }\n return expected === value;\n }, this, {deferEvaluation: true});\n}\n\nUtils.extend(UIPCheckedType, UIProvider);\n\nUIPCheckedType.prototype.click = function () {\n 'use strict';\n var value = this.options.checkedValue;\n if (Array.isArray(value)) {\n this.value(value[0]);\n } else {\n this.value(value);\n }\n};"
},
"UIPCheckForUpdates.js": {
"type": "text",
"content": "/*global Utils, designer, l, UIProvider, ManifestController, ErrorUtility, async, DataProviderFacade, AppSettings, ProfileHelper */\n/*exported UIPCheckForUpdates */\n\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPCheckForUpdates(data) {\n 'use strict';\n UIPCheckForUpdates.superclass.constructor.call(this, data);\n\n this.visible(false);\n this.checkForUpdates();\n}\n\nUtils.extend(UIPCheckForUpdates, UIProvider);\n\nUIPCheckForUpdates.prototype.runUpgrade = function runUpgrade() {\n 'use strict';\n this.enabled(false);\n ManifestController.runUpgrade(this.manifestVersionToUpdate, function () {\n $('html').css('cursor', '');\n this.enabled(true);\n }.bind(this));\n};\n\nUIPCheckForUpdates.prototype.checkForUpdates = function checkForUpdates() {\n 'use strict';\n ManifestController.checkForUpdates(function (error, updateData) {\n ErrorUtility.logWarning(error);\n updateData = updateData || {};\n this.changeLog = updateData.changeLog;\n this.manifestVersionToUpdate = updateData.manifestVersionByUser || updateData.manifestLastVersion;\n this.caption(updateData.isBeta ? '#BetaUpdates' : 'Updates');\n this.visible(!!this.manifestVersionToUpdate);\n }.bind(this));\n};\n\nUIPCheckForUpdates.prototype.click = function () {\n 'use strict';\n this.enabled(false);\n ProfileHelper.doAuthorized(function () {\n var message = l('#UPDATE_MESSAGE', this.changeLog ? this.changeLog.join(\"
\") : \"\");\n var okButtonName = 'Upgrade';\n var okCallback = this.runUpgrade.bind(this);\n if (!AppSettings.isFarm || AppSettings.isDebug) {\n okButtonName = 'Backup and ' + okButtonName;\n okCallback = this.backup.bind(this, okCallback);\n }\n designer.ui.dialog.messageBox.showUntranslated(l('#UPDATE_TITLE'), message,\n [okButtonName, 'Cancel'], true, function (error, button) {\n switch (button) {\n case okButtonName:\n this.enabled(false);\n $('html').css('cursor', 'progress');\n okCallback();\n break;\n case 'Cancel':\n this.enabled(true);\n break;\n }\n }.bind(this));\n }.bind(this), function () {\n this.enabled(true);\n }.bind(this));\n};\n\nUIPCheckForUpdates.prototype.backup = function (callback) {\n 'use strict';\n var today = new Date();\n var dd = today.getDate();\n var mm = today.getMonth() + 1;\n var yy = today.getFullYear() % 100;\n\n if (dd < 10) dd = '0' + dd;\n if (mm < 10) mm = '0' + mm;\n\n var backupThemeName = DataProviderFacade.getCmsInfo().themeName.replace(/[^a-zA-Z0-9_]/gi, \"\") + '_' + yy + mm + dd;\n\n function combine(themeName, id) {\n var maxLength = DataProviderFacade.themeNameMaxLength - 1;\n var suffix = id ? '_' + id : '';\n var newThemeName = themeName;\n if (newThemeName.length + suffix.length > maxLength)\n newThemeName = newThemeName.substr(0, maxLength - suffix.length);\n return newThemeName + suffix;\n }\n\n var id = 0;\n var can = false;\n async.whilst(function () {\n return !can;\n }, function (cb) {\n DataProviderFacade.themeNameValidation(combine(backupThemeName, id), 'success', true, function (error, result) {\n ErrorUtility.logError(error);\n if (result !== 'success')\n id++;\n else\n can = true;\n cb(null);\n });\n }, function () {\n DataProviderFacade.reloadThemesInfo(function (error, data) {\n if (!ErrorUtility.logError(error) && data) {\n var themes = JSON.parse(data).themes,\n keys = Object.keys(themes);\n\n var themeName = DataProviderFacade.getCmsInfo().themeName;\n for (var i = 0; i < keys.length; i++)\n if (themes[keys[i]].themeName === themeName) {\n DataProviderFacade.copyTheme(keys[i], combine(backupThemeName, id), callback);\n return;\n }\n }\n callback(null);\n });\n });\n};"
},
"UIPCheckOnDefaultStyles.js": {
"type": "text",
"content": "/*global Utils, UIProvider, PubSubController, Channels*/\r\nfunction UIPCheckOnDefaultStyles(data) {\r\n 'use strict';\r\n UIPCheckOnDefaultStyles.superclass.constructor.call(this, data);\r\n\r\n this.checkOn = this.checked.bind(this, true);\r\n this.checkOff = this.checked.bind(this, false);\r\n\r\n PubSubController.subscribe(Channels.previewEvents.stylingLoaded, this.checkOn);\r\n PubSubController.subscribe(Channels.previewEvents.stylingHided, this.checkOff);\r\n}\r\n\r\nUtils.extend(UIPCheckOnDefaultStyles, UIProvider);\r\n\r\nUIPCheckOnDefaultStyles.prototype.dispose = function () {\r\n 'use strict';\r\n UIPCheckOnDefaultStyles.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.previewEvents.stylingLoaded, this.checkOn);\r\n PubSubController.unsubscribe(Channels.previewEvents.stylingHided, this.checkOff);\r\n};"
},
"UIPClearAllTextFormatting.js": {
"type": "text",
"content": "/*exported UIPClearAllTextFormatting*/\r\n/*global UIPCheckComputedEnable, Utils, ComputedControlFacade*/\r\n\r\nfunction UIPClearAllTextFormatting(data) {\r\n 'use strict';\r\n data.options.check = \"allowTypographyEditing\"; // for UIPCheckComputedEnable\r\n UIPClearAllTextFormatting.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPClearAllTextFormatting, UIPCheckComputedEnable);\r\n\r\nUIPClearAllTextFormatting.prototype.click = function click() {\r\n 'use strict';\r\n var control = this.control();\r\n if (control && control instanceof ComputedControlFacade) {\r\n control.clearAllTextFormatting();\r\n }\r\n};\r\n"
},
"UIPClearAttribute.js": {
"type": "text",
"content": "/*global Utils, UIProvider, SelectionResolver, koObservableController, CleanupController*/\n\nfunction UIPClearAttribute(data) {\n 'use strict';\n data.options.allCss = true;\n UIPClearAttribute.superclass.constructor.call(this, data);\n\n if (this.options.disableWhenEmpty) {\n\n this.valueListener = ko.computed(function () {\n this.value();\n this.enabled(this.getEnabled());\n }, this, {deferEvaluation: true});\n\n this.valueListener();\n\n this.historyListener = koObservableController.koBind(this.control(), '', function () {\n this.enabled(this.getEnabled());\n }.bind(this));\n\n this.historyListener();\n }\n\n this.attrs = null;\n if (this.options.attrs) {\n this.attrs = this.options.attrs.split(',');\n }\n}\n\nUtils.extend(UIPClearAttribute, UIProvider);\n\nUIPClearAttribute.prototype.click = function () {\n 'use strict';\n if (this.attrs && this.attrs.length) {\n for (var i = 0; i < this.attrs.length; i++) {\n this.options.attr = this.attrs[i];\n this.value('');\n }\n } else {\n this.value('');\n if (this.options.attr === 'margin' && !this.control().isTopControl() && (this.control().css('margin-left') || this.control().css('margin-right'))) {\n // Обновляем темплейт верхнеуровнего контрола, тк мог добавится bd-no-margins в classnames у подконтрола\n CleanupController.cleanControl(this.control().getTopLevelFacade());\n }\n }\n};\n\nUIPClearAttribute.prototype.attrsAreEmpty = function (attrNames) {\n 'use strict';\n var facade = this.control();\n var typographySelector = SelectionResolver.getTypographyStylesSelector(facade.prop('dataId'));\n\n for (var i = 0; i < attrNames.length; i++) {\n var params = [];\n if (typographySelector) {\n // When typography element selected on default styles => apply to typography\n params.push(typographySelector);\n }\n params.push(attrNames[i]);\n if (facade.css.apply(facade, params)) {\n return false;\n }\n }\n return true;\n};\n\nUIPClearAttribute.prototype.getEnabled = function() {\n 'use strict';\n\n var enabled = !!this.value();\n switch (this.options.attr) {\n case 'background':\n enabled = !this.attrsAreEmpty(['background-color', 'background-image', 'background-repeat', 'background-position', 'background-clip', 'background-origin']);\n break;\n case 'border':\n enabled = !this.attrsAreEmpty([\n 'border-bottom-color', 'border-bottom-style', 'border-bottom-width',\n 'border-left-color', 'border-left-style', 'border-left-width',\n 'border-right-color', 'border-right-style', 'border-right-width',\n 'border-top-color', 'border-top-style', 'border-top-width']);\n break;\n case 'border-radius':\n enabled = !this.attrsAreEmpty(['border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius']);\n break;\n case 'margin':\n enabled = !this.attrsAreEmpty(['margin-left', 'margin-right', 'margin-top', 'margin-bottom']);\n break;\n case 'padding':\n enabled = !this.attrsAreEmpty(['padding-left', 'padding-right', 'padding-top', 'padding-bottom']);\n break;\n }\n if (this.attrs) {\n enabled = !this.attrsAreEmpty(this.attrs);\n }\n return enabled;\n};\n\nUIPClearAttribute.prototype.dispose = function () {\n 'use strict';\n UIPClearAttribute.superclass.dispose.call(this);\n if (this.valueListener) this.valueListener.dispose();\n if (this.historyListener) this.historyListener.dispose();\n};"
},
"UIPClearGradient.js": {
"type": "text",
"content": "/*global Utils, UIPGradientPoints*/\n\nfunction UIPClearGradient(data) {\n 'use strict';\n UIPClearGradient.superclass.constructor.call(this, data);\n\n this.enabled(this.modelGradient().stops.length > 0);\n\n this.enabledSubscription = this.modelGradient.subscribe(function (gradient) {\n this.enabled(gradient.stops.length > 0);\n }, this);\n}\n\nUtils.extend(UIPClearGradient, UIPGradientPoints);\n\nUIPClearGradient.prototype.click = function () {\n 'use strict';\n if (!this.enabled())\n return;\n\n var bg = this.background();\n bg.gradient().clear();\n bg.applyControl(this.control());\n};\n\nUIPClearGradient.prototype.dispose = function () {\n 'use strict';\n UIPClearGradient.superclass.dispose.call(this);\n this.enabledSubscription.dispose();\n};"
},
"UIPClearStyle.js": {
"type": "text",
"content": "/**\n * Created by san0k on 17.10.2014.\n */\n/* globals Utils, UIProvider, PubSubController, Channels, MixinsController2, PWStackHelper, editor */\n/* exported UIPClearStyle */\n\nvar UIPClearStyle = (function () {\n 'use strict';\n\n function UIPClearStyle(data) {\n UIPClearStyle.superclass.constructor.call(this, data);\n\n this.enable = this.enable.bind(this);\n PubSubController.subscribe(Channels.selection.selectionChanged, this.enable);\n\n this.enable();\n }\n\n Utils.extend(UIPClearStyle, UIProvider);\n\n UIPClearStyle.prototype.enable = function () {\n var control = this.control();\n if (!control) {\n this.enabled(false);\n return;\n }\n\n var dataId = control.prop('dataId');\n this.enabled(!!dataId);\n };\n\n var cssAttributes = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'position',\n 'width',\n 'height',\n 'max-width',\n 'max-height',\n 'min-width',\n 'min-height',\n 'transform',\n 'display',\n 'z-index',\n 'float',\n 'overflow'\n ];\n\n UIPClearStyle.prototype.click = function () {\n var control = this.control();\n if (control.hasSubControl('imageStyle')) control = control.find('imageStyle');\n\n var isProxy = MixinsController2.isCustomProxy(control);\n if (isProxy) {\n var rootProxy = MixinsController2.getRootProxy(control);\n var revert = PWStackHelper.getProvider(rootProxy, {provider: 'RevertToDefault'});\n if (revert.visible() && revert.enabled()) {\n revert.click();\n return;\n }\n }\n\n if (control.prop('constructorName') === 'Theme') {\n var typoStyle = editor.selection.selectedItem.resolved.typography;\n if (typoStyle) {\n control.css(typoStyle, {});\n control.css(typoStyle + 'LinkHovered', {});\n control.css(typoStyle + 'LinkPassive', {});\n return;\n }\n }\n\n var initialCssProperties = control.rawCss();\n var newProperties = {};\n\n // Copy ignored properties\n if (initialCssProperties) {\n for (var i = 0; i < cssAttributes.length; i++) {\n var pName = cssAttributes[i];\n if (initialCssProperties[pName]) {\n newProperties[pName] = initialCssProperties[pName];\n }\n }\n }\n\n control.rawCss(newProperties);\n };\n\n UIPClearStyle.prototype.dispose = function () {\n PubSubController.unsubscribe(Channels.selection.selectionChanged, this.enable);\n UIPClearStyle.superclass.dispose.call(this);\n };\n\n return UIPClearStyle;\n})();"
},
"UIPClearTypography.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 25.08.2015.\r\n */\r\n/*global UIProvider, Utils, TypographyHelper */\r\nfunction UIPClearTypography(data) {\r\n 'use strict';\r\n UIPClearTypography.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPClearTypography, UIProvider);\r\n\r\nUIPClearTypography.prototype.click = function click(){\r\n 'use strict';\r\n\r\n var control = this.control();\r\n var typographyInfo = TypographyHelper.parseTypography(this.options.typography, control);\r\n control.allCss(typographyInfo.typographyStyle, {});\r\n};\r\n"
},
"UIPClose.js": {
"type": "text",
"content": "/*global Utils, UIProvider*/\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPClose(data) {\r\n 'use strict';\r\n UIPClose.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPClose, UIProvider);\r\n\r\nUIPClose.prototype.click = function () {\r\n};"
},
"UIPCloseApplication.js": {
"type": "text",
"content": "/*global Utils, UIProvider, designer*/\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPCloseApplication(data) {\n 'use strict';\n UIPCloseApplication.superclass.constructor.call(this, data);\n this.enabled(false);\n this.visible(false);\n}\n\nUtils.extend(UIPCloseApplication, UIProvider);\n\nUIPCloseApplication.prototype.click = function () {\n 'use strict';\n designer.projectFacade.close();\n};"
},
"UIPCMS.js": {
"type": "text",
"content": "/*global Utils, UIProvider*/\r\n\r\nfunction UIPCMS(data) {\r\n 'use strict';\r\n UIPCMS.superclass.constructor.call(this, data);\r\n var cmsName = window.DataProviderFacade.getCmsInfo().cmsName.toLowerCase();\r\n var isValidCms;\r\n if (this.options.excludeCms) {\r\n isValidCms = this.options.excludeCms.toLowerCase().indexOf(cmsName) === -1;\r\n } else {\r\n isValidCms = this.options.cms.toLowerCase().indexOf(cmsName) !== -1;\r\n }\r\n this.visible(isValidCms);\r\n}\r\n\r\nUtils.extend(UIPCMS, UIProvider);"
},
"UIPCodeMirror.js": {
"type": "text",
"content": "/* global Utils, UIProvider, designer */\n/* exported UIPCodeMirror */\n\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPCodeMirror(data) {\n 'use strict';\n UIPCodeMirror.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPCodeMirror, UIProvider);\n\nUIPCodeMirror.prototype.click = function () {\n 'use strict';\n\n this.startAsync();\n designer.ui.dialog.codeMirrorDialog.show(this.value(), this.options.mode, this.options.title || '', function (error, buttonName, newContent) {\n if (buttonName !== 'OK') {\n this.stopAsync();\n return;\n }\n\n var errorMsg;\n\n if (this.validator) {\n var data = this.validator.validate(newContent);\n errorMsg = data.errorMsg;\n if('undefined' !== typeof data.fixedValue)\n newContent = data.fixedValue;\n }\n\n if (errorMsg) {\n /*No stopAsync - dialog is still opened!*/\n return errorMsg;\n }\n\n if (this.value) {\n this.value(newContent);\n }\n\n this.stopAsync();\n return false; /* No error. */\n }.bind(this));\n};\n\n"
},
"UIPCollectBoxes.js": {
"type": "text",
"content": "/*global Utils, UIProvider, ControlStorageController, Picture, BasicTags, UIHelper, l, ImageController, PubSubController, Channels, Theme, ComputedControlFacade*/\r\n\r\nfunction UIPCollectBoxes(data) {\r\n 'use strict';\r\n var baseControl = data.control;\r\n data.control = UIHelper.getTopSelectable(data.control);\r\n\r\n UIPCollectBoxes.superclass.constructor.call(this, data);\r\n\r\n if (this.options.isStatic === false) {\r\n this.__baseControl = this.control;\r\n UIPCollectBoxes.prototype.selectedControl(baseControl);\r\n this.control = ko.computed(function () {\r\n return UIPCollectBoxes.prototype.selectedControl() || this.__baseControl();\r\n }, this, {deferEvaluation: true});\r\n }\r\n\r\n if (this.options.hideIfOneItem) {\r\n if (baseControl instanceof ComputedControlFacade) {\r\n this.visible(false);\r\n } else {\r\n if (this.visible.dispose)this.visible.dispose();\r\n this.visible = ko.computed(function () {\r\n return this.items()[0] && this.items()[0].items.length;\r\n }, this, {deferEvaluation: true});\r\n }\r\n }\r\n\r\n if (this.options.selectValueOnStart) {\r\n var topControl = this.control();\r\n this.traverseItems(this.items(), function (item) {\r\n if (baseControl.isSameFacade(item.data ? topControl.find(item.data) : topControl)) {\r\n UIPCollectBoxes.prototype.selectedValue(item.value);\r\n return true;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n return UIPCollectBoxes.prototype.selectedValue();\r\n },\r\n write: function (val) {\r\n val = val || \"\";\r\n UIPCollectBoxes.prototype.selectedValue(val);\r\n this.startAsync();\r\n window.requestAnimationFrame(function () {\r\n window.requestAnimationFrame(function () {\r\n this.traverseItems(this.items(), function (item) {\r\n if (item.value === val) {\r\n var topControl = this.control();\r\n UIPCollectBoxes.prototype.selectedControl(item.data ? topControl.find(item.data) : topControl);\r\n return true;\r\n }\r\n return false;\r\n }.bind(this));\r\n this.stopAsync();\r\n }.bind(this));\r\n }.bind(this));\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n this.updateItems = function () {\r\n this.getItems(function (error, items) {\r\n this.items(items);\r\n }.bind(this));\r\n }.bind(this);\r\n\r\n if (this.options.isStatic) {\r\n PubSubController.subscribe(Channels.history.controlAdd, this.updateItems);\r\n PubSubController.subscribe(Channels.history.controlRemove, this.updateItems);\r\n }\r\n}\r\n\r\nUtils.extend(UIPCollectBoxes, UIProvider);\r\n\r\nUIPCollectBoxes.prototype.traverseItems = function (items, callback) {\r\n 'use strict';\r\n for (var i = 0; i < items.length; i++)\r\n if (callback(items[i]) || this.traverseItems(items[i].items, callback))return;\r\n};\r\n\r\nUIPCollectBoxes.prototype.dispose = function () {\r\n 'use strict';\r\n UIPCollectBoxes.superclass.dispose.call(this);\r\n if (this.__baseControl && this.__baseControl.dispose)\r\n this.__baseControl.dispose();\r\n PubSubController.unsubscribe(Channels.history.controlAdd, this.updateItems);\r\n PubSubController.unsubscribe(Channels.history.controlRemove, this.updateItems);\r\n};\r\n\r\n\r\nUIPCollectBoxes.prototype.fillNode = function fillNode(info, key, itemsDict, isRoot) {\r\n 'use strict';\r\n var stack, baseIcon, elem;\r\n stack = this.control().find(info.data).getPseudoStack();\r\n baseIcon = ControlStorageController.getBaseIcon(stack);\r\n elem = isRoot ? {} : info;\r\n elem.icon = baseIcon ? 'url(' + ImageController.base64ToDataUrl(baseIcon) + ')' : '';\r\n elem.items = this.buildTree(key, itemsDict);\r\n return elem;\r\n};\r\n\r\nUIPCollectBoxes.prototype.buildTree = function buildTree(key, itemsDict) {\r\n 'use strict';\r\n var newItems = [];\r\n if (itemsDict.hasOwnProperty(key)) {\r\n var items = itemsDict[key].items;\r\n for (var i = 0; i < items.length; i++) {\r\n var elem = this.fillNode(items[i].value, items[i].key, itemsDict, false);\r\n newItems.push(elem);\r\n }\r\n }\r\n return newItems;\r\n};\r\n\r\nUIPCollectBoxes.prototype.buildDictionary = function buildDictionary(items) {\r\n 'use strict';\r\n var nodeDictionary = {};\r\n\r\n function compare(a, b) {\r\n if (a.data < b.data) {\r\n return -1;\r\n }\r\n if (a.data > b.data) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n items.sort(compare);\r\n for (var i = 1; i < items.length; i++) {\r\n var node = items[i];\r\n var info = items[i].data;\r\n var added = false;\r\n for (var k = info.length - 1; k >= 0; k--) {\r\n if (info[k] === '.') {\r\n var currentLevelKey = info.substring(0, k);\r\n if (nodeDictionary.hasOwnProperty(currentLevelKey)) {\r\n nodeDictionary[info] = {\r\n level: nodeDictionary[currentLevelKey].level + 1,\r\n items: []\r\n };\r\n nodeDictionary[currentLevelKey].items.push({\r\n key: info,\r\n value: node\r\n });\r\n added = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!added)\r\n nodeDictionary[info] = {\r\n level: 0,\r\n items: [],\r\n value: node\r\n };\r\n }\r\n return nodeDictionary;\r\n};\r\n\r\nUIPCollectBoxes.prototype.fillTree = function fillTree(nodeDictionary, root) {\r\n 'use strict';\r\n var secondLevelItems = [],\r\n key,\r\n secondLevelRoot,\r\n icon,\r\n firstLevelRootInfo,\r\n firstLevelRoot,\r\n defaultIcon,\r\n firstLevelItems\r\n ;\r\n for (key in nodeDictionary) {\r\n if (nodeDictionary.hasOwnProperty(key) && nodeDictionary[key].level === 0) {\r\n secondLevelRoot = this.fillNode(nodeDictionary[key].value, key, nodeDictionary, true);\r\n secondLevelRoot.caption = nodeDictionary[key].value.caption;\r\n secondLevelRoot.data = nodeDictionary[key].value.data;\r\n secondLevelRoot.translate = nodeDictionary[key].value.translate;\r\n secondLevelRoot.value = nodeDictionary[key].value.value;\r\n secondLevelItems.push(secondLevelRoot);\r\n }\r\n }\r\n firstLevelRootInfo = root.value;\r\n if (firstLevelRootInfo) {\r\n defaultIcon = \"{images}UIIcons/default.png\";\r\n icon = 'url(' + defaultIcon + ')';\r\n }\r\n\r\n firstLevelRoot = root;\r\n firstLevelRoot.icon = icon;\r\n firstLevelRoot.items = secondLevelItems;\r\n firstLevelItems = [];\r\n firstLevelItems.push(firstLevelRoot);\r\n return firstLevelItems;\r\n};\r\n\r\nUIPCollectBoxes.prototype.plainify = function (treeItems, resultItems) {\r\n 'use strict';\r\n if (!resultItems)resultItems = [];\r\n for (var i = 0; i < treeItems.length; i++) {\r\n resultItems.push(treeItems[i]);\r\n this.plainify(treeItems[i].items, resultItems);\r\n }\r\n return resultItems;\r\n};\r\n\r\nUIPCollectBoxes.prototype.getItems = function (callback) {\r\n 'use strict';\r\n\r\n function getDataFromStack(topLevel, facade) {\r\n var result = facade._path.slice(topLevel._path.length).join('.');\r\n return {\r\n caption: l(UIHelper.getCaption(facade)),\r\n data: result,\r\n value: result,\r\n translate: false\r\n };\r\n }\r\n\r\n var items = [];\r\n var control = this.control();\r\n if (control.instanceOf(Theme)) {\r\n callback(null, []);\r\n return;\r\n }\r\n control.traverse(function (facade) {\r\n if (facade.instanceOf(BasicTags))return false;\r\n var editorJson = ControlStorageController.getEditorJson(facade.getPseudoStack());\r\n if (editorJson.canEditOptions || editorJson.canEditOptions !== false && editorJson.selectable !== false && !facade.instanceOf(Picture))\r\n items.push(getDataFromStack(control, facade));\r\n });\r\n if (!items.length) {\r\n callback(null, items);\r\n return;\r\n }\r\n var treeItems = this.fillTree(this.buildDictionary(items), items[0]);\r\n callback(null, this.options.plain ? this.plainify(treeItems) : treeItems);\r\n};\r\n\r\nUIPCollectBoxes.prototype.selectedControl = ko.observable(null);\r\nUIPCollectBoxes.prototype.selectedValue = ko.observable(null);"
},
"UIPColorHex.js": {
"type": "text",
"content": "/*exported UIPColorHex */\n/*global Utils, UIProvider, Color, HexValidator */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPColorHex(data) {\n 'use strict';\n\n UIPColorHex.superclass.constructor.call(this, data);\n\n var baseValue = this.value.bind(this);\n this.value = ko.computed({\n read: function () {\n var colorValue = baseValue();\n if (colorValue) {\n var color = new Color(colorValue);\n return color.toModel(\"Hex\").toLowerCase().substr(1);\n }\n return \"\";\n },\n write: function (value) {\n if (value)\n value = '#' + value.replace('#', '');\n var colorValue = baseValue();\n if (colorValue) {\n var color = new Color(colorValue);\n var alpha = color.alpha;\n color = new Color(value);\n color.alpha = alpha;\n baseValue(color.toString());\n }\n else baseValue(value);\n },\n owner: this,\n deferEvaluation: true\n });\n\n this.validator = new HexValidator();\n}\n\nUtils.extend(UIPColorHex, UIProvider);\n"
},
"UIPColorPalette.js": {
"type": "text",
"content": "/*exported UIPColorPalette*/\n/*global Utils, UIProvider, Color */\n\n\nfunction UIPColorPalette(data) {\n 'use strict';\n if (typeof data.options.canEditTransparency === 'undefined' && data.options.provider)\n data.options.canEditTransparency = data.options.provider.canEditTransparency;\n UIPColorPalette.superclass.constructor.call(this, data);\n\n this.baseValue = this.value;\n this.value = ko.computed({\n read: function () {\n return this.baseValue();\n },\n write: function (value) {\n var oldColor = this.baseValue.peek();\n var color = new Color(oldColor || '#fff');\n var alpha = color.alpha;\n\n if (alpha === 1 && value.indexOf('@') !== -1) {\n this.baseValue(value);\n return;\n }\n color = new Color(value);\n if (color.alpha === 1 && alpha !== 0) {\n color.alpha = alpha;\n }\n this.baseValue(color.value.toString());\n },\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPColorPalette, UIProvider);\n\nUIPColorPalette.prototype.dispose = function () {\n 'use strict';\n UIPColorPalette.superclass.dispose.call(this);\n this.baseValue.dispose();\n};\n\nUIPColorPalette.prototype.appendStyles = function (htmlTemplate, selector, classNames) {\n 'use strict';\n var node = $('
' + htmlTemplate + '
');\n node.find(selector).addClass(classNames);\n return node.html();\n};\n\nUIPColorPalette.prototype.getItems = function (callback) {\n 'use strict';\n UIPColorPalette.superclass.getItems.call(UIPColorPalette.prototype, function (error, itemsWithPresets) {\n if (!itemsWithPresets || itemsWithPresets.length > 1) {\n if (callback) callback(error, itemsWithPresets);\n return;\n }\n\n var template = {html: ''};\n if (itemsWithPresets && itemsWithPresets.length !== 0) {\n template.html = itemsWithPresets[0].html;\n }\n\n var items = [];\n\n var schemeColors = ['linkColorDarker', 'linkColor', 'linkColorLighter'];\n if (window.bootstrap.variables.invertPalette) {\n schemeColors.reverse();\n }\n schemeColors.push('textColor');\n\n this.appendVariables(items, schemeColors, 'Base Colors', template);\n\n this.appendPaletteColors(items, template);\n\n var paletteColors = ['black', 'grayDarker',\n 'grayDark', 'gray',\n 'grayLight', 'grayLighter', 'white'];\n\n if (window.bootstrap.variables.invertPalette) {\n paletteColors.reverse();\n }\n this.appendVariables(items, paletteColors, 'Palette', template);\n\n if (this.options.canEditTransparency !== false) {\n var item = {\n value: 'transparent',\n category: 'Palette',\n html: this.appendStyles(template.html.replace('[value]', 'transparent'), '.color-picker-color-preview', 'transparent'),\n id: itemsWithPresets[0].id,\n json: {\n value: 'transparent'\n }\n };\n items.push(item);\n }\n var accentColors = ['customColor1', 'customColor2',\n 'customColor3', 'customColor4',\n 'customColor5', 'customColor6',\n 'customColor7', 'customColor8'];\n\n this.appendVariables(items, accentColors, 'Additional Colors', template);\n\n if (callback) callback(null, items);\n }.bind(this));\n};\n\nUIPColorPalette.prototype.appendVariables = function (items, variables, category, htmlTemplate) {\n 'use strict';\n $.each(variables, function (index, value) {\n var hex = window.bootstrap.variables[value];\n var html = htmlTemplate.html.replace('[value]', hex);\n\n if (hex.toLowerCase() === \"#ffffff\")\n html = this.appendStyles(html, '.color-picker-item', 'white');\n\n var item = {\n value: '@bd-' + window.bootstrap.variables._lessVars[value],\n category: category,\n html: html,\n id: 'palette-preview-' + value + index,\n json: {\n value: '@bd-' + window.bootstrap.variables._lessVars[value]\n }\n };\n items.push(item);\n }.bind(this));\n};\n\nUIPColorPalette.prototype.hslCache = {};\n\nUIPColorPalette.prototype.getHslColor = function (hex) {\n 'use strict';\n if (!UIPColorPalette.prototype.hslCache.hasOwnProperty(hex)) {\n UIPColorPalette.prototype.hslCache[hex] = new Color(hex).toModel(\"HSL\");\n }\n var hsl = UIPColorPalette.prototype.hslCache[hex];\n return $.extend({}, hsl);\n};\n\nUIPColorPalette.prototype.appendPaletteColors = function (items, htmlTemplate) {\n 'use strict';\n var variables = window.bootstrap.variables;\n\n function hueInRange(hue1, hue2) {\n var hueDiff = Math.abs(hue1 - hue2);\n return Math.min(hueDiff, 360 - hueDiff) < 15;\n }\n\n var lumValues = [15, 26, 38, 49, 60, 72, 84, 95];\n var hslaLinkColor = this.getHslColor(variables.linkColor);\n var hslaLinkColorDarker = this.getHslColor(variables.linkColorDarker);\n\n var paletteColorsLum = [];\n if (!hueInRange(hslaLinkColor.h, hslaLinkColorDarker.h)) {\n paletteColorsLum.push({value: '@bd-link-color-darker', color: hslaLinkColorDarker});\n }\n\n paletteColorsLum.push({value: '@bd-link-color', color: hslaLinkColor});\n\n var hslaLinkColorLighter = this.getHslColor(variables.linkColorLighter);\n if (!hueInRange(hslaLinkColor.h, hslaLinkColorLighter.h) && !hueInRange(hslaLinkColorDarker.h, hslaLinkColorLighter.h)) {\n paletteColorsLum.push({value: '@bd-link-color-lighter', color: hslaLinkColorLighter});\n }\n\n var hslaTextColor = this.getHslColor(variables.textColor);\n if (hslaTextColor.s !== 0) // if not gray\n paletteColorsLum.push({value: '@bd-text-color', color: hslaTextColor});\n\n $.each(paletteColorsLum, function (index, colorInScheme) {\n var hslaColor = colorInScheme.color;\n var linkLum = hslaColor.l;\n\n $.each(lumValues, function (index, lumValue1) {\n var lumValue = lumValue1 - linkLum;\n hslaColor.l = lumValue1;\n var value = 'adjustColor(' + colorInScheme.value + ', 0, 0%, ' + lumValue + '%, 0%)';\n var item = {\n value: value,\n category: 'Palette',\n html: htmlTemplate.html.replace('[value]', 'hsla(' + hslaColor.h + ',' + hslaColor.s + '%,' + hslaColor.l + '%,' + hslaColor.a + ')'),\n id: 'palette-preview' + index,\n json: {\n value: value\n }\n };\n items.push(item);\n }.bind(this));\n\n });\n};\n"
},
"UIPColorPreview.js": {
"type": "text",
"content": "/*exported UIPColorPreview */\n/*global ko, Utils, UIProvider, Color, ImageController, ColorUtility */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPColorPreview(data) {\n 'use strict';\n\n UIPColorPreview.superclass.constructor.call(this, data);\n this.hideCaption = ko.observable(data.options.hideCaption);\n this.allowLarge = data.options.allowLarge !== false;\n\n if (this._childProvider && this._childProvider.highlight) {\n this.highlight = this._childProvider.highlight;\n }\n\n this.caption = ko.computed(function () {\n if (this.hideCaption()) return '';\n var colorValue = this.value();\n if (colorValue) {\n var color = new Color(colorValue);\n var result = color.toModel(\"Hex\");\n\n if (this.options.hideTransparency) {\n return result;\n }\n\n if (color.alpha === 1) {\n return result;\n }\n\n if (color.alpha === 0) {\n return 'transparent';\n }\n\n return result + ' ' + ColorUtility.getTransparency(color.alpha) + '%';\n }\n return '';\n }, this, {deferEvaluation: true}\n );\n\n this.toString = ko.computed(function () {\n var val = this.value();\n var borderColor = val ? \"#ccc\" : (this.hideCaption() ? \"#e9e9e9\" : \"transparent\");\n if (!val && borderColor === \"transparent\") {\n return '';\n }\n var transpBgImage = \"\";\n if (val) {\n var color = new Color(val);\n var rgb = color.toModel(\"RGB\");\n transpBgImage = \"background:linear-gradient(\" + rgb + \",\" + rgb + \" 100%),url('\" + ImageController.getIconUrl('transparency-small.png') + \"')\";\n }\n /* px */\n var size = this.allowLarge && this.hideCaption() ? '20' : '10';\n\n return \"
\";\n }, this, {deferEvaluation: true});\n}\n\nUtils.extend(UIPColorPreview, UIProvider);"
},
"UIPColorSchema.js": {
"type": "text",
"content": "/*global Utils, ErrorUtility, UIPPresets, Color, koObservableController */\r\n\r\nfunction UIPColorSchema(data) {\r\n 'use strict';\r\n UIPColorSchema.superclass.constructor.call(this, data);\r\n\r\n this.baseValue = this.value;\r\n this.value = ko.computed({\r\n read: function () {\r\n if (!this._valueChangeNotifier) {\r\n this._valueChangeNotifier = koObservableController.koBind(this.control(), null, function (control) {\r\n return {\r\n color1: control.prop('color1'),\r\n color2: control.prop('color2'),\r\n color3: control.prop('color3')\r\n };\r\n }.bind(this));\r\n }\r\n return this._valueChangeNotifier();\r\n },\r\n write: function (value) {\r\n this.baseValue(value);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPColorSchema, UIPPresets);\r\n\r\nUIPColorSchema.prototype.getItems = function (callback) {\r\n 'use strict';\r\n UIPColorSchema.superclass.getItems.call(this, function (error, items) {\r\n\r\n ErrorUtility.logError(error);\r\n for (var i = 0; i < items.length; i++) {\r\n var item = items[i];\r\n\r\n item.html = \"
\" +\r\n \"
\" +\r\n \"
\" +\r\n \"
\" +\r\n \"
\";\r\n item.caption = \"\";\r\n item.css = \".ColorSchemaItem { position: relative; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box;padding: 0 6px;height: 49px;border: 1px solid transparent;vertical-align: middle; line-height: 47px;cursor: default;} \" +\r\n \".ColorSchemaItem .color { display: inline-block; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; margin: -3px 1px 0 1px; width: 26px; height: 26px; border-radius: 4px; vertical-align: middle; }\" +\r\n \".ColorSchemaItem.active { border-color: #7FCEFA; }\";\r\n\r\n }\r\n\r\n items.sort(function (a, b) {\r\n var hsb1 = new Color(a.value.color1).toModel(\"HSB\");\r\n var hsb2 = new Color(b.value.color1).toModel(\"HSB\");\r\n return hsb1.h - hsb2.h;\r\n }.bind(this));\r\n callback(null, items);\r\n }.bind(this));\r\n};\r\n\r\nUIPColorSchema.prototype.dispose = function () {\r\n 'use strict';\r\n UIPColorSchema.superclass.dispose.call(this);\r\n this.baseValue.dispose();\r\n};"
},
"UIPColumnAdd.js": {
"type": "text",
"content": "/*exported UIPColumnAdd*/\n/* global Utils, UIProvider, PreviewHelper, designer, editor, ErrorUtility, PubSubController, Channels, TransformHelpers */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPColumnAdd(data) {\n 'use strict';\n\n UIPColumnAdd.superclass.constructor.call(this, data);\n\n var column = PreviewHelper.getClosestColumn(data.control);\n var columnInfo = column ? PreviewHelper.getControlInfo(column.control) : null;\n\n var container = PreviewHelper.getContainerWithColumns(data.control);\n var containerInfo = container ? PreviewHelper.getControlInfo(container.control) : null;\n\n if (columnInfo) {\n data.control = columnInfo.control;\n } else if (containerInfo) {\n data.control = containerInfo.control;\n }\n this.visible(!!columnInfo || !!containerInfo);\n column = data.control;\n\n this.click = function () {\n var position = this.options.position ? this.options.position : 'right';\n this.enabled(false);\n PubSubController.publish(Channels.loadIcon.show);\n designer.projectFacade.createControl('LayoutColumn', null, (function (error, control) {\n ErrorUtility.logError(error);\n\n designer.projectFacade.getNewControlInfo(control, function (err, controlInfo) {\n ErrorUtility.logError(err);\n var containerCollection = editor.themeController.getControlCollection(containerInfo.control.getModelControl());\n var beforeInfo;\n var beforeControl;\n var columnIndex = containerCollection.indexOf(column.getModelControl());\n switch (position) {\n case 'left':\n beforeInfo = columnInfo;\n break;\n case 'right':\n if (containerCollection.length - 1 !== columnIndex) {\n beforeControl = containerCollection[columnIndex + 1];\n beforeInfo = PreviewHelper.getControlInfo(beforeControl);\n }\n break;\n }\n containerInfo = PreviewHelper.getControlInfo(containerInfo.control);\n designer.projectFacade.paste(controlInfo, containerInfo, {\n isPasteMode: true,\n before: beforeInfo\n }, function (error) {\n ErrorUtility.logError(error);\n\n containerCollection = editor.themeController.getControlCollection(containerInfo.control.getModelControl());\n TransformHelpers.setColumnsClasses(containerCollection);\n this.enabled(true);\n }.bind(this));\n }.bind(this));\n }.bind(this)));\n };\n}\n\nUtils.extend(UIPColumnAdd, UIProvider);"
},
"UIPColumnOrColumns.js": {
"type": "text",
"content": "/*exported UIPColumnOrColumns*/\r\n/*global Utils, UIProvider, PreviewHelper */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPColumnOrColumns(data) {\r\n 'use strict';\r\n\r\n var info = PreviewHelper.getClosestColumn(data.control);\r\n\r\n if (!info) {\r\n info = PreviewHelper.getContainerWithColumns(data.control);\r\n }\r\n\r\n if (info) {\r\n data.control = info.control;\r\n }\r\n\r\n UIPColumnOrColumns.superclass.constructor.call(this, data);\r\n\r\n this.visible(!!info);\r\n}\r\n\r\nUtils.extend(UIPColumnOrColumns, UIProvider);"
},
"UIPColumnOrRow.js": {
"type": "text",
"content": "/*global Utils, UIProvider*/\r\n/*exported UIPColumnOrRow*/\r\n\r\nfunction UIPColumnOrRow(data) {\r\n 'use strict';\r\n var constructorName,\r\n isVisible = false\r\n ;\r\n UIPColumnOrRow.superclass.constructor.call(this, data);\r\n constructorName = this.control().prop('constructorName');\r\n\r\n if ('LayoutColumn' === constructorName ||\r\n 'LayoutContainer' === constructorName) {\r\n isVisible = true;\r\n }\r\n\r\n this.visible(isVisible);\r\n\r\n}\r\n\r\nUtils.extend(UIPColumnOrRow, UIProvider);"
},
"UIPColumnRemove.js": {
"type": "text",
"content": "/*exported UIPColumnRemove*/\r\n/* global Utils, UIPLayoutRemove, PreviewHelper, designer, editor, LayoutContainer, setZeroTimeout, TransformHelpers */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPColumnRemove(data) {\r\n 'use strict';\r\n UIPColumnRemove.superclass.constructor.call(this, data);\r\n if (null === this.columnInfo) {\r\n this.visible(false);\r\n return;\r\n }\r\n if (this.column.instanceOf(LayoutContainer) ||\r\n PreviewHelper.isLastElementInContainer(this.columnInfo, this.containerInfo)) {\r\n this.enabled(false);\r\n }\r\n}\r\n\r\nUtils.extend(UIPColumnRemove, UIPLayoutRemove);\r\n\r\nUIPColumnRemove.prototype.click = function () {\r\n 'use strict';\r\n\r\n var updateColumnsHtml = (function () {\r\n if (!this.containerInfo) {\r\n return;\r\n }\r\n var containerCollection = editor.themeController.getControlCollection(this.containerInfo.control.getModelControl());\r\n TransformHelpers.setColumnsClasses(containerCollection);\r\n }).bind(this);\r\n var control = this.columnInfo.control;\r\n setZeroTimeout(function () {\r\n if (PreviewHelper.isLastElementInContainer(this.columnInfo, this.containerInfo)) {\r\n designer.projectFacade.removeControl(this.containerInfo.control.getModelControl(), 0);\r\n } else {\r\n designer.projectFacade.removeControl(control.getModelControl(), 0, null, updateColumnsHtml);\r\n }\r\n }.bind(this));\r\n};"
},
"UIPColumns.js": {
"type": "text",
"content": "/*global Utils, UIPColumnsTabs, l */\r\n\r\nfunction UIPColumns(data) {\r\n 'use strict';\r\n UIPColumns.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPColumns, UIPColumnsTabs);\r\n\r\nUIPColumns.prototype.getItems = function (callback) {\r\n 'use strict';\r\n\r\n var items = [];\r\n var columns = this.control().find('items');\r\n if (!columns) {\r\n callback(null, items);\r\n return;\r\n }\r\n\r\n var title = this.options.columnCaption ? l(this.options.columnCaption) + ' ' : '';\r\n for (var i = 0; i < columns.prop('length'); ++i)\r\n items.push($.extend(true, {\r\n provider: {control: columns.find(i + '')},\r\n caption: title + (i + 1)\r\n }, this.options.view));\r\n\r\n callback(null, items);\r\n};\r\n"
},
"UIPColumnsDrawGrid.js": {
"type": "text",
"content": "/*exported UIPColumnsDrawGrid*/\n/* global Utils, UIProvider, PreviewHelper, LayoutContainer, LayoutColumn */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPColumnsDrawGrid(data) {\n 'use strict';\n UIPColumnsDrawGrid.superclass.constructor.call(this, data);\n\n var control = this.control();\n var container;\n if (control.instanceOf(LayoutContainer)) {\n container = PreviewHelper.getControlInfo(control);\n } else if (control.instanceOf(LayoutColumn)) {\n container = PreviewHelper.getContainerWithColumns(control);\n container = container ? PreviewHelper.getControlInfo(container.control) : container;\n }\n if (container) {\n PreviewHelper.drawColumnsGrid(container, true);\n }\n}\n\nUtils.extend(UIPColumnsDrawGrid, UIProvider);\n\nUIPColumnsDrawGrid.prototype.dispose = function () {\n 'use strict';\n UIPColumnsDrawGrid.superclass.dispose.call(this);\n PreviewHelper.removeColumnsGrid();\n};"
},
"UIPColumnsPresets.js": {
"type": "text",
"content": "/*exported UIPColumnsPresets*/\r\n/*global Utils, UIProvider, PreviewHelper */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPColumnsPresets(data) {\r\n 'use strict';\r\n\r\n var containerInfo = PreviewHelper.getContainerWithColumns(data.control);\r\n\r\n if (containerInfo) {\r\n data.control = containerInfo.control;\r\n }\r\n\r\n UIPColumnsPresets.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPColumnsPresets, UIProvider);"
},
"UIPColumnsTabs.js": {
"type": "text",
"content": "/* global UIProvider, Utils, koObservableController, editor, _$, PubSubController, Channels, LayoutContainer*/\r\nfunction UIPColumnsTabs(data) {\r\n 'use strict';\r\n\r\n UIPColumnsTabs.superclass.constructor.call(this, data);\r\n\r\n this.valueUpdater = ko.observable(false);\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n this.valueUpdater();\r\n var val = _$(editor.selection.selectedItem);\r\n if (!val)\r\n return '0';\r\n var columns = this.control().find('items').directChildren();\r\n for (var i = 0; i < columns.length; i++)\r\n if (columns[i].isSameFacade(val))\r\n return i + '';\r\n return '0';\r\n },\r\n write: function (value) {\r\n var columns = this.control().find('items').directChildren();\r\n editor.selection.selectControl(columns[parseInt(value, 10)]);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n this.refreshValue = function () {\r\n this.valueUpdater(!this.valueUpdater());\r\n }.bind(this);\r\n\r\n this.updateItems = function () {\r\n this.getItems(function (error, result) {\r\n this.items(result);\r\n this.refreshValue();\r\n }.bind(this));\r\n }.bind(this);\r\n\r\n this.collectionSubscription = koObservableController.koBind(this.control(), \"\", this.updateItems.bind(this));\r\n this.collectionSubscription();\r\n\r\n PubSubController.subscribe(Channels.selection.selectionChanged, this.refreshValue);\r\n}\r\n\r\nUtils.extend(UIPColumnsTabs, UIProvider);\r\n\r\nUIPColumnsTabs.prototype.getItems = function (callback) {\r\n 'use strict';\r\n\r\n var items = [];\r\n var columns = this.control().find('items');\r\n if (!this.control().instanceOf(LayoutContainer) || !columns) {\r\n callback(null, items);\r\n return;\r\n }\r\n\r\n for (var i = 0; i < columns.prop('length'); ++i)\r\n items.push({\r\n value: i + '',\r\n caption: (i + 1) + ''\r\n });\r\n\r\n\r\n callback(null, items);\r\n};\r\n\r\nUIPColumnsTabs.prototype.dispose = function () {\r\n 'use strict';\r\n this.collectionSubscription.dispose();\r\n UIPColumnsTabs.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.selection.selectionChanged, this.refreshValue);\r\n};\r\n"
},
"UIPColumnStyle.js": {
"type": "text",
"content": "/*global Utils, UIProvider */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPColumnStyle(data) {\r\n 'use strict';\r\n\r\n UIPColumnStyle.superclass.constructor.call(this, data);\r\n\r\n this.value.dispose();\r\n this.value = ko.observable(\"1\");\r\n}\r\n\r\nUtils.extend(UIPColumnStyle, UIProvider);"
},
"UIPColumnView.js": {
"type": "text",
"content": "/*exported UIPColumnView*/\r\n/* global Utils, UIProvider, ko, koObservableController, PreviewHelper, editor, PubSubController, Channels, designer,\r\n LayoutColumn, setZeroTimeout, CONST, _$ */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPColumnView(data) {\r\n 'use strict';\r\n\r\n UIPColumnView.superclass.constructor.call(this, data);\r\n\r\n var containerInfo;\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n if (!this._valueChangeNotifier) {\r\n this._valueChangeNotifier = koObservableController.koBind(this.control(), \"\", (function () {\r\n if (!containerInfo) {\r\n containerInfo = PreviewHelper.getContainerWithColumns(this.control());\r\n }\r\n return containerInfo ? PreviewHelper.getColumnsKey(containerInfo.control) : '';\r\n }).bind(this));\r\n }\r\n return this._valueChangeNotifier();\r\n },\r\n write: function (value) {\r\n if (containerInfo) {\r\n var widths = value.split('-');\r\n var collection = editor.themeController.getControlCollection(containerInfo.control.getModelControl());\r\n if (collection) {\r\n var column;\r\n if (widths.length === collection.length) {\r\n widths.forEach(function (width, key) {\r\n updateColumn(collection[key], width);\r\n });\r\n\r\n } else if (widths.length > collection.length) {\r\n widths.forEach(function (width, key) {\r\n if (key < collection.length) {\r\n updateColumn(collection[key], width);\r\n } else {\r\n column = editor.themeController.createControl('LayoutColumn');\r\n var field = resetAll(column).FIELD;\r\n column[field] = width;\r\n\r\n collection.push(column);\r\n }\r\n });\r\n PubSubController.publish(Channels.history.controlAdd);\r\n } else if (widths.length < collection.length) {\r\n\r\n var applyWidths = function () {\r\n widths.forEach(function (width, key) {\r\n updateColumn(collection[key], width);\r\n });\r\n };\r\n\r\n var columnsForRemove = [];\r\n\r\n for (var i = widths.length; i < collection.length; i++) {\r\n columnsForRemove.push(collection[i]);\r\n }\r\n\r\n if (columnsForRemove.length) {\r\n setZeroTimeout(function () {\r\n designer.projectFacade.removeControl(columnsForRemove, 0, null, applyWidths);\r\n });\r\n } else {\r\n applyWidths();\r\n }\r\n }\r\n PubSubController.publish(Channels.previewEvents.updated);\r\n }\r\n }\r\n },\r\n owner: this\r\n //deferEvaluation: true\r\n });\r\n\r\n function updateColumn(columnControl, width) {\r\n var column = PreviewHelper.getControlInfo(columnControl);\r\n if (column && column.control.instanceOf(LayoutColumn)) {\r\n column.allDoms.removeClass(PreviewHelper.spanClass);\r\n\r\n var last = resetAll(column.control);\r\n column.allDoms.each(function (index, column) {\r\n var style = editor.$previewJQuery(column).attr('class');\r\n var classes = style.split(' ');\r\n for (var i = 0; i < classes.length; i++) {\r\n if (classes[i].indexOf(last.CLASS_NAME) === 0) {\r\n classes[i] = last.CLASS_NAME + width;\r\n break;\r\n }\r\n }\r\n editor.$previewJQuery(column).attr('class', classes.join(' '));\r\n });\r\n\r\n column.control.prop(last.FIELD, width);\r\n }\r\n }\r\n\r\n function resetAll(control) {\r\n control = _$(control);\r\n var modes = CONST.COLUMN_RESIZE_MODES;\r\n for (var mode in modes) {\r\n if (modes.hasOwnProperty(mode)) {\r\n control.prop(modes[mode].FIELD, '');\r\n }\r\n }\r\n\r\n return modes[2];\r\n }\r\n}\r\n\r\nUtils.extend(UIPColumnView, UIProvider);\r\n\r\nUIPColumnView.prototype.dispose = function () {\r\n 'use strict';\r\n UIPColumnView.superclass.dispose.call(this);\r\n};"
},
"UIPCommunity.js": {
"type": "text",
"content": "/*exported UIPCommunity*/\r\n/*global Utils, UIProvider, AppSettings, LinkHelper, editor*/\r\nfunction UIPCommunity(data) {\r\n 'use strict';\r\n UIPCommunity.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPCommunity, UIProvider);\r\n\r\nUIPCommunity.prototype.click = function () {\r\n 'use strict';\r\n var control = this.control();\r\n var controlEditor = editor.themeController.getEditor(control);\r\n var url = AppSettings.forumQuestionUrl;\r\n if (controlEditor.communityTag) {\r\n url += '?term=[' + controlEditor.communityTag + ']';\r\n }\r\n LinkHelper.navigateUrl(url, '_blank');\r\n};\r\n"
},
"UIPComputedSelectedControl.js": {
"type": "text",
"content": "/* exported UIPHomeTypography */\n/* global Utils, UIProvider, ComputedControlFacade, editor, PubSubController, Channels, _$, SelectionResolver, ThemlerModeController */\n\nfunction UIPComputedSelectedControl(data) {\n 'use strict';\n UIPComputedSelectedControl.superclass.constructor.call(this, data);\n this.waitSelectionChangedOnDelete = true;\n this.baseControl = ko.observable(this.control());\n this.selectionChanged = function () {\n var newControl = editor.selection.selectedItem.dataId ? _$({dataId: editor.selection.selectedItem.dataId}) : null;\n newControl = newControl || _$(editor.themeController.getTheme());\n var baseControl = this.baseControl();\n if (!(baseControl && newControl.isSameFacade(baseControl))) {\n this.baseControl(newControl);\n }\n var control = this.control();\n if (control instanceof ComputedControlFacade) {\n control.setResolvedData(this.getResolvedData(this.baseControl()));\n PubSubController.publish(Channels.propertyWindow.computedFacadeUpdated, control);\n }\n }.bind(this);\n\n this.selectionChanged();\n\n this.control = ko.computed(function () {\n var baseControl = this.baseControl(); // for computed subscribe\n return new ComputedControlFacade(this.getResolvedData(baseControl));\n }, this, {deferEvaluation: true});\n\n this.computedApplyTargetSubscription = ThemlerModeController.computedApplyTarget.subscribe(this.selectionChanged);\n PubSubController.subscribe(Channels.selection.selectionChanged, this.selectionChanged);\n PubSubController.subscribe(Channels.selection.clickedDomUpdated, this.selectionChanged);\n}\n\nUtils.extend(UIPComputedSelectedControl, UIProvider);\n\nUIPComputedSelectedControl.prototype.getResolvedData = function (control) {\n 'use strict';\n var selectedItem = editor && editor.selection && editor.selection.selectedItem,\n resolved = selectedItem && selectedItem.resolved;\n return resolved ||\n SelectionResolver.getSelectionInfoById(control.prop('dataId')) ||\n {\n controlInfo: {control: control},\n typography: '',\n path: [{editor: {}, control: control}]\n };\n};\n\nUIPComputedSelectedControl.prototype.dispose = function () {\n 'use strict';\n UIPComputedSelectedControl.superclass.dispose.call(this);\n if (this.computedApplyTargetSubscription) {\n this.computedApplyTargetSubscription.dispose();\n }\n PubSubController.unsubscribe(Channels.selection.selectionChanged, this.selectionChanged);\n PubSubController.unsubscribe(Channels.selection.clickedDomUpdated, this.selectionChanged);\n};\n"
},
"UIPContainerControls.js": {
"type": "text",
"content": "/*global Utils, UIPInnerPositions, UIHelper, l*/\r\n\r\nfunction UIPContainerControls(data) {\r\n 'use strict';\r\n UIPContainerControls.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPContainerControls, UIPInnerPositions);\r\n\r\nUIPContainerControls.prototype.getItems = function (callback) {\r\n 'use strict';\r\n var containers = this.getContainerControls();\r\n var items = [];\r\n var constructorCount = {},i;\r\n for (i = 0; i < containers.length; i++) {\r\n constructorCount[containers[i].container.prop('constructorName')] = constructorCount[containers[i].container.prop('constructorName')] || 0;\r\n constructorCount[containers[i].container.prop('constructorName')]++;\r\n containers[i].containerIndex = constructorCount[containers[i].container.prop('constructorName')];\r\n }\r\n for (i = 0; i < containers.length; i++)\r\n items.push({\r\n view: 'PositionInContainer',\r\n caption: l(UIHelper.getCaption(containers[i].container)) + (constructorCount[containers[i].container.prop('constructorName')] === 1 ? '' : ' ' + containers[i].containerIndex),\r\n containerDataId: containers[i].container.prop('dataId'),\r\n property: containers[i].property\r\n }\r\n );\r\n callback(null, items);\r\n};"
},
"UIPContainerEffect.js": {
"type": "text",
"content": "/*global koObservableController, Utils, UIPLayoutProperty, editor, ContainerEffectProvider, CONST, PubSubController, Channels */\n\nfunction UIPContainerEffect(data) {\n 'use strict';\n UIPContainerEffect.superclass.constructor.call(this, data);\n\n this.lookupLengthControl = function (computeLength) {\n return (computeLength ? ContainerEffectProvider.lookupNearestLengthControl(this.control()) : null) || this.control();\n }.bind(this);\n\n this.visibleUpdater = ko.observable(false);\n if (this.visible.dispose)this.visible.dispose();\n this.visible = ko.computed(function () {\n this.visibleUpdater();\n return ContainerEffectProvider.canEditLength(this.lookupLengthControl(this.options.computeLength));\n }, this, {deferEvaluation: true});\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n if (!this._valueChangeNotifier) {\n this._valueChangeNotifier = koObservableController.koBind(null, \"\", function () {\n return ContainerEffectProvider.getLength(this.lookupLengthControl(this.options.computeLength));\n }.bind(this));\n }\n return this._valueChangeNotifier();\n },\n write: function (value) {\n ContainerEffectProvider.setLength(this.lookupLengthControl(this.options.computeLength), value);\n },\n owner: this,\n deferEvaluation: true\n });\n\n this.updateVisible = function () {\n PubSubController.once(Channels.previewEvents.loaded, function () {\n this.visibleUpdater(!this.visibleUpdater());\n }.bind(this));\n }.bind(this);\n\n PubSubController.subscribe(Channels.template.changed, this.updateVisible);\n}\n\nUtils.extend(UIPContainerEffect, UIPLayoutProperty);\n\nUIPLayoutProperty.prototype.dispose = function () {\n 'use strict';\n UIPLayoutProperty.superclass.dispose.call(this);\n PubSubController.unsubscribe(Channels.template.changed, this.updateVisible);\n};\n\nUIPContainerEffect.prototype.getItems = function getItems(callback) {\n 'use strict';\n UIPContainerEffect.superclass.getItems.call(this, function (error, items) {\n var modifiedItems, controlFacade = this.lookupLengthControl(this.options.computeLength);\n if (editor.themeController.getEditor(controlFacade).implementsContainerInner || ContainerEffectProvider.isFluidArea(controlFacade)) {\n modifiedItems = items;\n } else {\n modifiedItems = items.filter(function (object) {\n return object.value !== CONST.LENGTH.WIDE;\n });\n }\n callback(error, modifiedItems);\n }.bind(this));\n};\n"
},
"UIPContentAttribute.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 09.07.2015.\r\n */\r\n/*global Utils, UIProvider, editor, Channels, PubSubController, ErrorUtility, Picture, PropertyObserverController, _$*/\r\n/**\r\n *\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPContentAttribute(data) {\r\n 'use strict';\r\n\r\n UIPContentAttribute.superclass.constructor.call(this, data);\r\n\r\n this.smth = ko.observable(false);\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n this.smth();\r\n var item = editor.pagesListController.getCurrentItem(this.options.postType);\r\n return item && item[this.options.attr] || '';\r\n },\r\n write: function (value) {\r\n if (this.value() === value)\r\n return;\r\n var newValue;\r\n\r\n switch (this.options.attr) {\r\n case 'parent':\r\n newValue = value || '';\r\n break;\r\n default:\r\n newValue = value;\r\n }\r\n\r\n PubSubController.publish(Channels.loadIcon.show);\r\n var changes = {};\r\n changes[this.options.attr] = newValue;\r\n\r\n var resultItem = $.extend({}, editor.pagesListController.getCurrentItem(this.options.postType), changes);\r\n if (!resultItem.id)\r\n return;\r\n editor.pagesListController.updateItem(this.options.postType, resultItem, function (error) {\r\n ErrorUtility.logWarning(error);\r\n PubSubController.publish(Channels.loadIcon.hide);\r\n });\r\n PubSubController.publish(Channels.pages.attrChanged, this.options.attr);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n if (this.options.attr === 'image') {\r\n this.innerPictureControl = new Picture(this.value());\r\n this.startAsync();\r\n PubSubController.once(Channels.previewEvents.changedOrLoaded, this.stopAsync.bind(this));\r\n\r\n this.control.dispose();\r\n this.control = ko.computed(function () {\r\n this.innerPictureControl.fileName = this.value();\r\n this.innerPictureControl.isContentControl = true; // need for upload image\r\n return _$(this.innerPictureControl);\r\n }, this, {deferEvaluation:true});\r\n\r\n // Dump picture to value\r\n this.savePicture = function (event, data) {\r\n if (data && data.name === 'fileName') {\r\n this.value(this.innerPictureControl.fileName);\r\n }\r\n }.bind(this);\r\n\r\n PropertyObserverController.subscribe(this.innerPictureControl, this.savePicture);\r\n }\r\n\r\n this.refreshValue = function refreshValue(attr) {\r\n if (attr !== this.options.attr) return;\r\n this.smth(!this.smth());\r\n }.bind(this);\r\n\r\n this.disableOnUnload = function disableOnUnload() {\r\n this.enabled(false);\r\n }.bind(this);\r\n\r\n this.enableOnLoaded = function enableOnLoaded() {\r\n this.refreshValue(this.options.attr);\r\n this.enabled(true);\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.pages.attrChanged, this.refreshValue);\r\n PubSubController.subscribe(Channels.previewEvents.unload, this.disableOnUnload);\r\n PubSubController.subscribe(Channels.previewEvents.loaded, this.enableOnLoaded);\r\n}\r\n\r\nUtils.extend(UIPContentAttribute, UIProvider);\r\n\r\nUIPContentAttribute.prototype.dispose = function () {\r\n 'use strict';\r\n UIPContentAttribute.superclass.dispose.call(this);\r\n if (this.savePicture) {\r\n PropertyObserverController.unsubscribe(this.innerPictureControl, this.savePicture);\r\n }\r\n PubSubController.unsubscribe(Channels.pages.attrChanged, this.refreshValue);\r\n PubSubController.unsubscribe(Channels.previewEvents.unload, this.disableOnUnload);\r\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this.enableOnLoaded);\r\n};"
},
"UIPContentManagerPanel.js": {
"type": "text",
"content": "/* exported UIPContentManagerPanel */\n/* globals Utils, UIProvider, LinkHelper, DataProviderFacade */\n\nfunction UIPContentManagerPanel(data) {\n 'use strict';\n UIPContentManagerPanel.superclass.constructor.call(this, data);\n\n var url = DataProviderFacade.getCmsInfo().contentManagerPage;\n if (!url) {\n this.visible(false);\n }\n}\n\nUtils.extend(UIPContentManagerPanel, UIProvider);\n\nUIPContentManagerPanel.prototype.click = function () {\n 'use strict';\n var url = DataProviderFacade.getCmsInfo().contentManagerPage;\n if (url && this.options.postType === 'post') {\n url = url.replace('=page','=post'); // TODO: Add url to DataProvider\n }\n LinkHelper.navigateUrl(url, '_blank');\n};"
},
"UIPContentMargins.js": {
"type": "text",
"content": "/*exported UIPContentMargins*/\r\n/* global Utils, UIProvider */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPContentMargins(data) {\r\n 'use strict';\r\n UIPContentMargins.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPContentMargins, UIProvider);"
},
"UIPControlAdd.js": {
"type": "text",
"content": "/*exported UIPControlAdd*/\n/*global editor, ControlMetadataProvider, Utils, UIPCanBeChild, ImageController, PWStackHelper,\n PubSubController, Channels, ErrorUtility, l, designer, CONST */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPControlAdd(data) {\n 'use strict';\n\n UIPControlAdd.superclass.constructor.call(this, data);\n\n if (!this.options.value) {\n this.itemsSubscription = this.items.subscribe(function () { /* CodeAnalyser ignore:line */\n this.enabled(this.items().length > 0);\n this.visible(this.items().length > 0);\n }.bind(this));\n }\n\n this.__enabled = ko.observable(true);\n this.currentTemplate = ko.observable(null);\n this.tooltip = ko.observable('');\n\n if (this.options.value) {\n this.enabled = ko.computed({\n read: function () {\n var allThemeControls,\n allTemplateControls,\n editorJson,\n tokens,\n constructorName,\n controlCaption,\n tooltipText\n ;\n if (!this.__enabled()) {\n return false;\n }\n allThemeControls = editor.themeController.getAllControls();\n allTemplateControls = editor.themeController.getAllTemplateControls();\n if (!allTemplateControls) {\n return false;\n }\n editorJson = ControlMetadataProvider.getEditor(this.options.value);\n this.__enabled(ControlMetadataProvider.checkCanDuplicateForInsert(this.options.value,\n editorJson.canDuplicate, allThemeControls, allTemplateControls));\n tokens = this.options.value.split('.');\n constructorName = tokens[tokens.length - 1];\n controlCaption = editorJson.caption || constructorName;\n tooltipText = (editorJson.canDuplicate === 'onePerTemplate') ?\n l('#ControlExistsInTemplate', l(controlCaption)) :\n l('#ControlExistsInTheme', l(controlCaption));\n this.tooltip(tooltipText);\n return this.__enabled();\n },\n write: function (value) {\n this.__enabled(value);\n },\n owner: this,\n deferEvaluation: true\n }\n );\n }\n\n this.processTemplateChanged = function () {\n this.currentTemplate(editor.templatesController.currentTemplate);\n this.getItems(function (error, items) {\n this.items(items);\n }.bind(this));\n };\n\n this.layoutModeOn = function() {\n if (this.enabled) {\n this.enabled(false);\n }\n }.bind(this);\n\n this.layoutModeOff = function() {\n if (this.enabled) {\n this.enabled(true);\n }\n }.bind(this);\n\n this.templateChangedHandler = this.processTemplateChanged.bind(this);\n\n PubSubController.subscribe(Channels.template.changed, this.templateChangedHandler);\n PubSubController.subscribe(Channels.layoutMode.modeOn, this.layoutModeOn);\n PubSubController.subscribe(Channels.layoutMode.modeOff, this.layoutModeOff);\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n return '';\n },\n write: function (value) {\n if (this.options.providerName && this.options.providerName !== \"ControlAdd\") {\n if (this.options.value) {\n var provider = PWStackHelper.getProvider(this.control(), {provider: $.extend({}, this.options, {name: this.options.providerName})});\n provider.click();\n provider.dispose();\n }\n } else {\n if (designer.projectFacade.canAddControl()) {\n _selectItem.call(this, value);\n }\n }\n },\n owner: this,\n deferEvaluation: true\n });\n\n if (this.options.value) {\n\n if (this.options.value.indexOf('.') !== -1) {\n var tokensArray = this.options.value.split('.');\n this.options.value = tokensArray[tokensArray.length - 1];\n }\n }\n\n function _selectItem(key) {\n /* jshint validthis:true */\n\n if (!this.options.hasItems && !this.options.items) {\n this._dndStart.call(this, this.options);\n return;\n }\n\n this.getItems(function (error, items) {\n\n if (ErrorUtility.logError(error)) return;\n\n for (var i = 0; i < items.length; i++) {\n if (items[i].value === key) {\n this._dndStart.call(this, items[i]);\n return;\n }\n }\n\n ErrorUtility.logErrorDetails({fullName: key});\n ErrorUtility.logWarning(new Error('Invalid fullName'));\n }.bind(this));\n }\n\n this._canAddControl = function _canAddControl() {\n if (this.enabled) {\n this.enabled(designer.projectFacade.canAddControl() && !editor.selection.isLayoutMode());\n }\n }.bind(this);\n this._canAddControl();\n\n PubSubController.subscribe(Channels.previewEvents.loaded, this._canAddControl);\n}\n\nUtils.extend(UIPControlAdd, UIPCanBeChild);\n\nUIPControlAdd.prototype._dndStart = function (options) {\n 'use strict';\n var icon = options.icon,\n html\n ;\n if (icon.indexOf('url(') === -1) {\n icon = 'url(' + ImageController.getIconUrl(icon) + ')';\n }\n html =\n '
' +\n '
' +\n '' +\n '' + options.caption + '
';\n designer.projectFacade.buildPresetDataForControl({\n constructorName: options.value.substring(options.value.lastIndexOf('.') + 1),\n presetName: this.options.preset,\n additionalHtml: html\n }, function onPresetDataBuilt(error, data) {\n ErrorUtility.logError(error);\n this.publishMoveStart(data.controlInfo, options);\n }.bind(this));\n};\n\nUIPControlAdd.prototype.publishMoveStart = function (controlInfo) {\n 'use strict';\n\n var event = {\n selectedIndex: 0\n };\n\n controlInfo.newControl = true;\n PubSubController.publish(Channels.dragAndDrop.layoutMoveStart, {\n event: event,\n data: {\n item: controlInfo,\n executePaste: this.executePaste\n }\n });\n};\n\nUIPControlAdd.prototype.click = function click() {\n 'use strict';\n\n if (!this.options) return;\n var value = this.options.value;\n this.value(value);\n};\n\nUIPControlAdd.prototype._getItemsInternal = function (categories, category, categoryAsDescription) {\n 'use strict';\n\n var controlsData = [];\n\n for (var key in categories) {\n if (!category || category === key) {\n if (!category && (key === \"Effects\" || key === \"Hidden\" ||\n key === \"Unsupported\" || key === \"WoView\"))\n continue;\n if (typeof key === \"string\")\n controlsData = controlsData.concat(categories[key]);\n }\n }\n\n controlsData = controlsData.filter(function (e, i, arr) {\n return arr.lastIndexOf(e) === i;\n });\n\n var controlFullName,\n editorJson,\n typeCategory,\n caption,\n controlIcon,\n defaultIcon,\n iconUrl,\n items = [];\n\n controlsData = controlsData.concat(this.options.additionalControls || []);\n\n for (var i = 0; i < controlsData.length; ++i) {\n controlFullName = controlsData[i];\n editorJson = ControlMetadataProvider.getEditor(controlFullName);\n caption = editorJson ? editorJson.caption : controlFullName;\n typeCategory = editorJson ? editorJson.typeCategory : null;\n controlIcon = ControlMetadataProvider.getIcon(controlFullName);\n defaultIcon = 'UIIcons/add-control-default-icon.png';\n iconUrl = (controlIcon ? 'url(' + ImageController.base64ToDataUrl(controlIcon) + ')' : defaultIcon);\n var text = typeCategory ? typeCategory : caption ? caption : controlFullName;\n\n var item = {\n caption: text,\n value: controlFullName,\n icon: iconUrl\n };\n if (!!categoryAsDescription) {\n item.description = editorJson.UICategory;\n }\n items.push(item);\n }\n\n items.sort(function (a, b) {\n if (a.caption < b.caption)\n return -1;\n if (a.caption > b.caption)\n return 1;\n return 0;\n });\n\n return items;\n};\n\nUIPControlAdd.prototype._getItemsSimplified = function () {\n 'use strict';\n var categories = ControlMetadataProvider.getControlAddItemsByCategories();\n return this._getItemsInternal(categories, this.options.category, !!this.options.categoryAsDescription);\n};\n\nUIPControlAdd.prototype.getItems = function (callback) {\n 'use strict';\n\n this.options.hasItems = true;\n if (editor.themeController.getAllTemplateControls()) {\n var items = this._getItemsSimplified();\n callback(null, items);\n } else {\n callback(null, []);\n }\n};\n\nUIPControlAdd.prototype.dispose = function () {\n 'use strict';\n\n UIPControlAdd.superclass.dispose.call(this);\n if (this.itemsSubscription) this.itemsSubscription.dispose();\n if (this.title && this.title.dispose) this.title.dispose();\n PubSubController.unsubscribe(Channels.template.changed, this.templateChangedHandler);\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this._canAddControl);\n PubSubController.unsubscribe(Channels.layoutMode.modeOn, this.layoutModeOn);\n PubSubController.unsubscribe(Channels.layoutMode.modeOff, this.layoutModeOff);\n};\n"
},
"UIPControlAddByHooks.js": {
"type": "text",
"content": "/*global Utils, UIPControlAdd, ControlMetadataProvider, HooksHelper, editor, SelectionHelper, PreviewHelper, ControlTemplateController,\n PubSubController, Channels */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPControlAddByHooks(data) {\n 'use strict';\n\n data.options = $.extend({}, data.options);\n data.options.includeDebugInfo = false;\n data.options.items = [];\n\n UIPControlAddByHooks.superclass.constructor.call(this, data);\n\n this.__baseVisible = this.visible;\n this.visible = ko.computed({\n read: function () {\n var v = this.__baseVisible();\n if (!this.options.value) {\n this.enabled(this.items().length > 0);\n v = this.items().length > 0;\n }\n return (v && !PreviewHelper.isDefaultStylesActive()/* && !ShortcodesEditor.isEditableMode()*/);\n },\n write: function (value) {\n this.__baseVisible(value);\n },\n owner: this\n });\n\n this.onPreviewChangedBinded = function() {\n this.getItems(function (error, result) {\n if (!error)\n this.items(result);\n }.bind(this));\n }.bind(this);\n\n PubSubController.subscribe(Channels.previewEvents.loaded, this.onPreviewChangedBinded);\n}\n\nUtils.extend(UIPControlAddByHooks, UIPControlAdd);\n\nUIPControlAddByHooks.prototype.dispose = function(){\n 'use strict';\n UIPControlAddByHooks.superclass.dispose.call(this);\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this.onPreviewChangedBinded);\n if (this.__baseVisible && this.__baseVisible.dispose)\n this.__baseVisible.dispose();\n};\n\nUIPControlAddByHooks.prototype.getItems = function (callback) {\n 'use strict';\n // DR-11022, DR-11681 Ignore events when control is removed\n if (!ControlTemplateController.existInTheme(this.control().prop('dataId'))) {\n callback(null, []);\n return;\n }\n\n // if control() is inner property of selectedControl, use control()'s DOM\n // if selectedItem's DOM is child of control()'s DOM, use selectedItem's DOM\n\n var uiControlDom = SelectionHelper.getDomByIndex(this.control().prop('dataId'), 0, editor.$previewContent);\n if (!uiControlDom && this.options.isContext === false) {\n this.enabled(false);\n callback(null, []);\n return;\n }\n var selectedItem = editor.selection.selectedItem;\n var selectedDom = SelectionHelper.getDomByIndex(selectedItem.dataId, selectedItem.index, editor.$previewContent);\n if (uiControlDom &&\n (this.options.isContext === false || !selectedDom || !selectedDom.length ||\n uiControlDom.find('.' + $(selectedDom[0].classList).toArray().join('.')).length === 0)) {\n selectedDom = uiControlDom;\n }\n\n var editorsAll = PreviewHelper.getEditorsByDom(selectedDom);\n var editors = [];\n for (var i=0; i
0 && presetItems[0].canRemove;\r\n item.category = \"#ThemeStyles\";\r\n item.value = this.stylePrefix + item.value;\r\n item.css = itemsCss[i];\r\n }\r\n items = items.concat(styleItems);\r\n items = items.concat(presetItems);\r\n callback(null, items);\r\n }.bind(this));\r\n }\r\n }.bind(this));\r\n};\r\n\r\nUIPControlPresetsOrStyles.prototype.dispose = function dispose() {\r\n 'use strict';\r\n UIPControlPresetsOrStyles.superclass.dispose.call(this);\r\n this.customStylesProvider.dispose();\r\n this.presetsProvider.dispose();\r\n this.disposed = true;\r\n};\r\n\r\n/**\r\n *\r\n * @param {ListBoxItem} item\r\n */\r\nUIPControlPresetsOrStyles.prototype.removeItem = function (item, callback) {\r\n 'use strict';\r\n if ('string' === typeof item.value) {\r\n if (AppSettings.isDebug) {\r\n //this.customStylesProvider.removeItem(item, callback);\r\n designer.ui.dialog.messageBox.showUntranslated(\"[DEBUG ONLY] Delete Style Style\", \"To delete theme style please click on Delete Style item below.\", null, true, function () {\r\n window.maintenanceController = new MaintenanceController();\r\n });\r\n if (callback) callback();\r\n }\r\n } else {\r\n this.startAsync();\r\n this.presetsProvider.removeItem(item, function () {\r\n this.stopAsync();\r\n if (callback) callback();\r\n }.bind(this));\r\n }\r\n};\r\n"
},
"UIPControlProperties.js": {
"type": "text",
"content": "/*global UIProvider, Utils */\nfunction UIPControlProperties(data) {\n 'use strict';\n UIPControlProperties.superclass.constructor.call(this, data);\n\n this.value.dispose();\n function setProperty(control, property, value) {\n if (control.prop(property)) {\n control.prop(property, value);\n }\n else {\n control.css(property, value);\n }\n }\n\n function applyProperties(control, value) {\n if (typeof value === \"object\") {\n for (var key in value) {\n if (value.hasOwnProperty(key)) {\n var val = value[key];\n if (typeof val === \"object\") {\n applyProperties(control, val);\n } else {\n setProperty(control, key, val);\n }\n }\n }\n } else {\n throw new Error(\"UIPControlProperties.value should be an object\");\n }\n }\n\n this.value = ko.computed({\n read: function () {\n return null;\n },\n write: function (value) {\n var control = this.control();\n applyProperties(control, value);\n },\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPControlProperties, UIProvider);"
},
"UIPControlUsages.js": {
"type": "text",
"content": "/* exported UIPControlUsages */\n/* global Utils, UIProvider, ko, PreviewHelper, designer, ControlStorageController, ImageController, PubSubController, Channels, ControlTemplateController */\n\nvar UIPControlUsages = (function() {\n 'use strict';\n\n var _templatesByDataId = {};\n\n function UIPControlUsages(data) {\n UIPControlUsages.superclass.constructor.call(this, data);\n this.value.dispose();\n\n if (!data.control) {\n this.visible(false);\n return;\n }\n\n if (!ControlTemplateController.existInTheme(data.control.prop('dataId'))) {\n this.visible(false);\n return;\n }\n\n var templates = this._getTemplates(data.control.prop('dataId'));\n if (templates.length <= 1) {\n this.visible(false);\n return;\n }\n\n this.value = ko.computed({\n read: function () { return null; },\n write: function (value) {\n designer.projectFacade.switchTemplate(value);\n },\n owner: this,\n deferEvaluation: true\n });\n }\n\n Utils.extend(UIPControlUsages, UIProvider);\n\n UIPControlUsages.prototype._getTemplates = function(dataId) {\n var controlInfo = PreviewHelper.getControlInfoById(dataId);\n if (!controlInfo || !controlInfo.control) return [];\n\n var infoDataId = controlInfo.control.prop('dataId');\n if (_templatesByDataId[infoDataId]) {\n return _templatesByDataId[infoDataId]; // Returns cached\n }\n\n var templates = designer.projectFacade.getControlLinksTemplates(controlInfo);\n _templatesByDataId[infoDataId] = templates; // Set cache\n\n return templates;\n };\n\n UIPControlUsages.prototype.getItems = function (callback) {\n var control = this.control();\n if (!control) {\n callback(null, []);\n return ;\n }\n\n var items = [];\n var templates = this._getTemplates(control.prop('dataId'));\n for (var i = 0; i < templates.length; i++) {\n //CodeAnalyser skip:controlTraverse\n var template = templates[i];\n\n var stack = [\n {\n propertyName: '',\n constructorName: template.constructorName\n }\n ];\n var templateIcon = ControlStorageController.getBaseIcon(stack);\n var editorJson = ControlStorageController.getEditorJson(stack);\n\n items.push({\n icon: 'url(' + ImageController.base64ToDataUrl(templateIcon) + ')',\n name: template.name,\n caption: editorJson.caption,\n value: template.BaseTemplate.templateName\n });\n }\n callback(null, items);\n };\n\n PubSubController.subscribe(Channels.controls.paste, function(args) {\n if (args.controlInfo && args.controlInfo.control) {\n var ctrl = args.controlInfo.control;\n if (_templatesByDataId[ctrl.prop('dataId')]) delete _templatesByDataId[ctrl.prop('dataId')];\n }\n });\n\n PubSubController.subscribe(Channels.template.changed, function() {\n _templatesByDataId = {};\n });\n\n return UIPControlUsages;\n})();\n\n"
},
"UIPCopy.js": {
"type": "text",
"content": "/*exported UIPCopy*/\n/* global Utils, UIProvider, designer, ExchangeBuffer, editor, PubSubController, Channels, PreviewHelper,\n ControlInfo, LayoutElement, _$*/\n\nfunction UIPCopy(data) {\n 'use strict';\n UIPCopy.superclass.constructor.call(this, data);\n this.enable = this.enable.bind(this);\n PubSubController.subscribe(Channels.previewEvents.loaded, this.enable);\n PubSubController.subscribe(Channels.selection.selectionChanged, this.enable);\n\n this.enable();\n this.onUnload = this.onUnload.bind(this);\n PubSubController.once(Channels.previewEvents.unload, this.onUnload);\n}\n\nUtils.extend(UIPCopy, UIProvider);\n\nUIPCopy.prototype.controlInfo = null;\n\nUIPCopy.prototype.getControl = function () {\n 'use strict';\n var control = null;\n if (window.hasOwnProperty('editor') && null !== editor.selection.selectedItem.dataId) {\n control = editor.selection.getSelectedControl();\n }\n return control;\n};\n\nvar isEnabled = function(control) {\n 'use strict';\n\n if (typeof editor === 'undefined') return false;\n if (PreviewHelper.isDefaultStylesActive()) return false;\n\n if (editor.themeController.isInPrototypes(control)) return false;\n\n return true;\n};\n\nUIPCopy.prototype.enable = function () {\n 'use strict';\n this.enabled(false);\n\n if (typeof editor === 'undefined') return;\n\n var _control = this.getControl();\n var control = _$(_control);\n if (!control) return;\n if (control.instanceOf(LayoutElement)) {\n return;\n }\n\n if (!editor.themeController.isTopLevelControl(_control)) {\n control = _$(_control).getTopModelControl();\n }\n\n this.controlInfo = PreviewHelper.getControlInfo(control);\n if (!this.controlInfo) return;\n\n var resolvedControl = this.controlInfo.control.getTopLevelFacade();\n if (!resolvedControl) return;\n\n if (this.controlInfo.control.prop('dataId') !== resolvedControl.prop('dataId')) {\n this.controlInfo.control = resolvedControl;\n }\n\n this.enabled(isEnabled(resolvedControl.getModelControl()));\n};\n\nUIPCopy.prototype.click = function () {\n 'use strict';\n if (!editor.selection.selectedItem.dataId || !this.controlInfo) {\n return;\n }\n\n var copyControlInfo = designer.projectFacade.copy(this.controlInfo);\n var originalInfo = new ControlInfo(this.controlInfo.control);\n originalInfo.allDoms = this.controlInfo.allDoms.clone();\n originalInfo.controlDoms = this.controlInfo.controlDoms.clone();\n originalInfo.dom = this.controlInfo.dom.clone();\n\n if (this.controlInfo.dom.width()) {\n originalInfo.dom.width(this.controlInfo.dom.outerWidth());\n copyControlInfo.dom.width(this.controlInfo.dom.outerWidth());\n }\n if (this.controlInfo.dom.height()) {\n originalInfo.dom.height(this.controlInfo.dom.outerHeight());\n copyControlInfo.dom.height(this.controlInfo.dom.outerHeight());\n }\n\n ExchangeBuffer.set(originalInfo, copyControlInfo);\n PubSubController.publish(Channels.controls.copy);\n};\n\nUIPCopy.prototype.dispose = function () {\n 'use strict';\n PubSubController.unsubscribe(Channels.selection.selectionChanged, this.enable);\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this.enable);\n PubSubController.unsubscribe(Channels.previewEvents.unload, this.onUnload);\n UIPCopy.superclass.dispose.call(this);\n};\n\nUIPCopy.prototype.onUnload = function () {\n 'use strict';\n this.controlInfo = null;\n};"
},
"UIPCopyPasteStyle.js": {
"type": "text",
"content": "/*global Utils, UIPCopyStyle, PubSubController, Channels, PWStackHelper*/\nfunction UIPCopyPasteStyle(data) {\n 'use strict';\n UIPCopyPasteStyle.superclass.constructor.call(this, data);\n\n this.paste = function () {\n if (!this.checked())return;\n var pasteProvider = PWStackHelper.getProvider(this.control(), {provider: \"PasteStyle\"});\n pasteProvider.click();\n pasteProvider.dispose();\n this.checked(false);\n }.bind(this);\n\n PubSubController.subscribe(Channels.selection.selectionChanged, this.paste);\n}\n\nUtils.extend(UIPCopyPasteStyle, UIPCopyStyle);\n\nUIPCopyPasteStyle.prototype.dispose = function () {\n 'use strict';\n UIPCopyPasteStyle.superclass.dispose.call(this);\n PubSubController.unsubscribe(Channels.selection.selectionChanged, this.paste);\n\n};\n\nUIPCopyPasteStyle.prototype.click = function () {\n 'use strict';\n if (this.checked())return;\n UIPCopyPasteStyle.superclass.click.call(this);\n this.checked(true);\n};\n"
},
"UIPCopyStyle.js": {
"type": "text",
"content": "/**\n * Created by san0k on 05.06.14.\n */\n/* exported UIPCopyStyle, CopyStyleItemType */\n/* globals editor, UIProvider, Utils, ExchangeBuffer, ControlsCollection, PreviewHelper,\n SerializeController, ControlPresetGenerator, MixinsController2, PubSubController, Channels */\n\n\nvar CopyStyleItemType = {\n proxy: 'proxy',\n control: 'control',\n typography: 'typography'\n};\n\nfunction UIPCopyStyle(data) {\n 'use strict';\n UIPCopyStyle.superclass.constructor.call(this, data);\n\n this.enable = this.enable.bind(this);\n PubSubController.subscribe(Channels.selection.selectionChanged, this.enable);\n\n this.enable();\n}\n\nUtils.extend(UIPCopyStyle, UIProvider);\n\nUIPCopyStyle.prototype.enable = function () {\n 'use strict';\n var dataId = editor.selection.selectedItem.dataId;\n this.enabled(!!dataId && (PreviewHelper.isControlFromControls(dataId) || editor.themeController.getTheme().dataId === dataId));\n};\n\nUIPCopyStyle.prototype.click = function () {\n 'use strict';\n\n var selectedControl = editor.selection.getSelectedControl();\n var controlInfo = PreviewHelper.getControlInfo(selectedControl);\n if (!controlInfo) return;\n\n var selectableControl = controlInfo.control;\n var modelControl = selectableControl.getTopLevelFacade();\n\n var clone = this._copyStyle(modelControl ? modelControl : selectableControl);\n\n // Set selectable true/false for first-level\n clone.selectable = (selectableControl.isSameFacade(modelControl));\n\n // For second level\n if (!clone.selectable && selectableControl.prop(\"constructorName\")) {\n for (var p in clone.children) {\n /*CodeAnalyser skip:controlTraverse*/\n if (clone.children.hasOwnProperty(p) &&\n clone.children[p].constructorName === selectableControl.prop(\"constructorName\")) {\n clone.children[p].selectable = true;\n break;\n }\n }\n }\n ExchangeBuffer.style.set(clone);\n};\n\nUIPCopyStyle.prototype._copyChildren = function (control) {\n 'use strict';\n var children = {};\n var hasChildren = false;\n\n control.traverse(function (subControl, prop) {\n if (control.isSameFacade(subControl))return true;\n if (!(subControl.instanceOf(ControlsCollection))) {\n children[prop] = this._copyStyle(subControl);\n hasChildren = true;\n }\n return false;\n }.bind(this));\n return (hasChildren ? children : null);\n};\n\nvar ignoredCssAttributes = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'position',\n 'width',\n 'height',\n 'max-width',\n 'max-height',\n 'min-width',\n 'min-height',\n 'transform',\n 'display',\n 'z-index',\n 'float',\n 'overflow'\n];\n\nUIPCopyStyle.prototype._copyStyle = function (control) {\n 'use strict';\n\n var css = (control.css ? control.cssToJson() : null);\n\n if (css) {\n for (var i = 0; i < ignoredCssAttributes.length; i++) {\n var prop = ignoredCssAttributes[i];\n if (css[prop]) delete css[prop];\n }\n }\n\n if (control.prop('constructorName') === 'Theme') {\n var typoStyle = editor.selection.selectedItem.resolved.typography;\n if (typoStyle) {\n return {\n type: CopyStyleItemType.typography,\n constructorName: control.prop('constructorName'),\n children: null,\n css: css.typography[typoStyle],\n cssHover: css.typography[typoStyle + 'LinkHovered'],\n cssPassive: css.typography[typoStyle + 'LinkPassive'],\n effects: null,\n properties: null,\n ignoredProperties: null\n };\n }\n }\n\n var isProxy = false;\n var proxyPatternObject = null;\n var constructorName = control.prop('constructorName');\n\n if (MixinsController2.isProxy(control) && MixinsController2.isProxyEndedToMainMixin(control)) {\n isProxy = true;\n constructorName = \"Style\";\n proxyPatternObject = {\n constructorName: constructorName,\n typeCategory: MixinsController2.getTypeCategory(control)\n };\n } else if (MixinsController2.isRootProxy(control)) {\n var json = SerializeController.controlSerialize(MixinsController2.getProxyTarget(control), ControlPresetGenerator.serializeReviewer);\n if (json) {\n isProxy = true;\n proxyPatternObject = JSON.parse(json);\n }\n }\n\n var effects = this._copyEffects(control);\n\n return {\n type: (isProxy ? CopyStyleItemType.proxy : CopyStyleItemType.control),\n constructorName: constructorName,\n children: this._copyChildren(control),\n css: css,\n effects: effects,\n properties: proxyPatternObject,\n ignoredProperties: ignoredCssAttributes\n };\n};\n\nUIPCopyStyle.prototype._copyEffects = function (control) {\n 'use strict';\n var effects = [];\n if(!control.hasSubControl('effects')) {\n return effects;\n }\n control.find('effects').traverse(\n function (effect, propertyName) {\n if (effect.isSameFacade(control.find('effects'))) return true;\n var effectClone = SerializeController.fillFromObject(new window[effect.prop('constructorName')](), effect, ControlPresetGenerator.cloneReviewer);\n var json = SerializeController.controlSerialize(effectClone, ControlPresetGenerator.serializeReviewer);\n\n effects[propertyName] = JSON.parse(json);\n return false;\n }\n );\n\n return effects;\n};\n\nUIPCopyStyle.prototype.dispose = function () {\n 'use strict';\n PubSubController.unsubscribe(Channels.selection.selectionChanged, this.enable);\n UIPCopyStyle.superclass.dispose.call(this);\n};\n"
},
"UIPCreateHtmlItem.js": {
"type": "text",
"content": "/*global Utils, UIPHtmlItem, editor, ErrorUtility, PubSubController, Channels, AppSettings, l*/\r\n\r\nfunction UIPCreateHtmlItem(data) {\r\n 'use strict';\r\n\r\n UIPCreateHtmlItem.superclass.constructor.call(this, data);\r\n\r\n this.defaultTemplate = this.options.defaultTemplate || (this.options.postType === 'post' ? \"singlePost\" : \"page\");\r\n}\r\n\r\nUtils.extend(UIPCreateHtmlItem, UIPHtmlItem);\r\n\r\nUIPCreateHtmlItem.prototype.click = function () {\r\n 'use strict';\r\n var resultItem = {\r\n caption: l(\"New \" + this.options.postType[0].toUpperCase() + this.options.postType.substr(1)),\r\n content: \"\",\r\n customCss: \"\",\r\n customHead: \"\",\r\n name: \"new\" + this.options.postType,\r\n showInHMenu: true,\r\n showInVMenu: true,\r\n template: this.defaultTemplate + \"Template.html\",\r\n titleInBrowser: l(\"New \" + this.options.postType[0].toUpperCase() + this.options.postType.substr(1))\r\n };\r\n if (this.options.parent) {\r\n resultItem.parent = editor.pagesListController.getCurrentItem(this.options.postType).id;\r\n }\r\n\r\n if (this.options.parentId) {\r\n resultItem.parent = this.options.parentId;\r\n }\r\n \r\n if (this.options.postType === 'post') {\r\n resultItem.image = AppSettings.replacePlaceholders(\"{images}defaultImage.jpg\");\r\n }\r\n\r\n resultItem.author = AppSettings.userName;\r\n\r\n var today = new Date();\r\n var dd = today.getDate();\r\n var mm = today.getMonth() + 1;\r\n var yy = today.getFullYear();\r\n\r\n if (dd < 10) dd = '0' + dd;\r\n if (mm < 10) mm = '0' + mm;\r\n\r\n resultItem.date = mm + \"/\" + dd + \"/\" + yy;\r\n\r\n PubSubController.publish(Channels.loadIcon.show);\r\n this.startAsync();\r\n editor.pagesListController.addItem(this.options.postType, resultItem, function (error) {\r\n ErrorUtility.logWarning(error);\r\n PubSubController.publish(Channels.loadIcon.hide);\r\n if (!error) {\r\n this.startAsync();\r\n PubSubController.once(Channels.previewEvents.loaded, function () {\r\n PubSubController.publish(Channels.customDialogProvider.show);\r\n //this._childProvider.click(event);\r\n this.stopAsync();\r\n }.bind(this));\r\n }\r\n this.stopAsync();\r\n }.bind(this));\r\n};"
},
"UIPCssProperty.js": {
"type": "text",
"content": "/*exported UIPCssProperty*/\n/*global Unit, Utils, UIProvider, koObservableController, ko*/\nfunction UIPCssProperty(data) {\n 'use strict';\n UIPCssProperty.superclass.constructor.call(this, data);\n\n var side = this.options.attr;\n if (!side) side = \"all\";\n\n /*\n SHOULD BE DEFINED IN INHERITED PROVIDERS\n this.collapsePairs = false;\n this.sides = {\n 'all': 'border-radius',\n 0: 'border-top-left-radius',\n 'top-left': 'border-top-left-radius',\n 1: 'border-top-right-radius',\n 'top-right': 'border-top-right-radius',\n 2: 'border-bottom-right-radius',\n 'bottom-right': 'border-bottom-right-radius',\n 3: 'border-bottom-left-radius',\n 'bottom-left': 'border-bottom-left-radius'\n };*/\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n if (!this._valueChangeNotifier) {\n this._valueChangeNotifier = koObservableController.koBind(this.control(), \"\", function (control) {\n if (ko.unwrap(side) === \"all\") {\n var topLeft = control.css(this.sides[0]);\n var topRight = control.css(this.sides[1]);\n var bottomLeft = control.css(this.sides[2]);\n var bottomRight = control.css(this.sides[3]);\n return this.combineCssValue(topLeft, topRight, bottomLeft, bottomRight, this.collapsePairs);\n } else {\n var propertyFromControl = control.css(this.sides[side]);\n return (propertyFromControl === 'auto' ? 'auto' : (Unit.parse(propertyFromControl).size));\n }\n }.bind(this));\n }\n return this._valueChangeNotifier();\n },\n write: function (value) {\n if (typeof value === 'object') {\n for (var key in value) {\n if (value[key] !== undefined) {\n this.control().css(key, value[key]);\n }\n }\n return;\n }\n if (value !== null && value !== undefined) {\n if (value.trim().length > 0 && value.replace(/[\\d\\s]+/g, '').length === 0)\n value = value + \"px\";\n }\n if (ko.unwrap(side) === \"all\") {\n this.control().css(this.sides.all, value);\n }\n else {\n this.control().css(this.sides[side], value);\n }\n },\n owner: this,\n deferEvaluation: true\n });\n this.toString = this.value;\n}\nUtils.extend(UIPCssProperty, UIProvider);\n\nUIPCssProperty.prototype.combineCssValue = function combineCssValue(top, right, bottom, left, collapsePairs) {\n 'use strict';\n if (top === right && top === left && top === bottom) {\n return top === 'auto' ? 'auto' : this.unitToString(top, '', true);\n }\n\n var emptyChar = '•';\n if (collapsePairs && top === bottom && left === right) {\n return this.unitToString(top, emptyChar) + ' ' + this.unitToString(left, emptyChar);\n }\n\n return this.unitToString(top, emptyChar) + ' ' + this.unitToString(right, emptyChar) + ' ' + this.unitToString(bottom, emptyChar) + ' ' + this.unitToString(left, emptyChar);\n};\n\nUIPCssProperty.prototype.unitToString = function unitToString(unit, emptyValue, showPxForZero) {\n 'use strict';\n if (!unit)\n return emptyValue || '';\n if (unit === 'auto' || unit.indexOf('@')!==-1)\n return unit;\n var value = Unit.parse(unit);\n\n return value === '0' && !showPxForZero ? value.size : value.size + value.type;\n};\n"
},
"UIPCssShadow.js": {
"type": "text",
"content": "/*global Utils, UIProvider, ShadowList, Color, Unit*/\n\nfunction UIPCssShadow(data) {\n 'use strict';\n UIPCssShadow.superclass.constructor.call(this, data);\n\n // Hide properties for text\n var type = this.options.provider ? this.options.provider.type : 'box';\n if (type === 'text') {\n switch (this.options.property) {\n case 'size':\n case 'inset':\n this.visible(false);\n break;\n }\n }\n\n this.index = this.options.layerIndex || 0;\n\n this.__baseValue = this.value;\n this.shadowList = ko.computed(function () {\n var key = this.__baseValue();\n if (!this.stringCache[key])\n this.stringCache[key] = ShadowList.parse(this.__baseValue(), type);\n return this.stringCache[key].clone();\n }, this, {deferEvaluation: true});\n\n this.value = ko.computed({\n read: function () {\n var shadowList = this.shadowList();\n if (this.index >= shadowList.items.length)\n return null;\n\n var shadow = shadowList.items[this.index];\n\n if (shadow[this.options.property] instanceof Color)\n return shadow[this.options.property].value;\n\n if (shadow[this.options.property] instanceof Unit)\n return shadow[this.options.property].value;\n\n return shadow[this.options.property];\n }.bind(this),\n write: function (value) {\n var shadowList = this.shadowList();\n var shadow = shadowList.items[this.index];\n\n if (shadow && this.options.property) {\n if (shadow[this.options.property] instanceof Color)\n shadow[this.options.property].value = value;\n {\n if (shadow[this.options.property] instanceof Unit)\n shadow[this.options.property] = value;\n else\n shadow[this.options.property] = value;\n }\n }\n this.__baseValue(shadowList.toString());\n }.bind(this),\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPCssShadow, UIProvider);\n\nUIPCssShadow.prototype.dispose = function () {\n 'use strict';\n UIPCssShadow.superclass.dispose.call(this);\n this.__baseValue.dispose();\n this.shadowList.dispose();\n};\n\nUIPCssShadow.prototype.stringCache = {};\n"
},
"UIPCssTransform.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 10.10.14.\r\n */\r\n/**\r\n * Created by oksana on 02.10.14.\r\n */\r\n/*exported UIPCssTransform*/\r\n/*global Utils, UIProvider */\r\n\r\nfunction UIPCssTransform(data) {\r\n 'use strict';\r\n data.options.attr = 'transform';\r\n UIPCssTransform.superclass.constructor.call(this, data);\r\n\r\n this.__baseValue = this.value;\r\n\r\n this.transformFuncList = ko.computed(function () {\r\n var key = this.__baseValue();\r\n if (!this.stringCache[key]) {\r\n this.stringCache[key] = new window.TransformList();\r\n this.stringCache[key].fromCss(this.__baseValue());\r\n }\r\n return this.stringCache[key].clone();\r\n }, this, {deferEvaluation: true});\r\n\r\n this.value = ko.computed({\r\n read: function () {\r\n\r\n var trList = this.transformFuncList();\r\n var transformFunc = trList.getTransformFunc(this.options.property, trList.items);\r\n if (!transformFunc) return '';\r\n\r\n return transformFunc.args.join(',');\r\n\r\n }.bind(this),\r\n write: function (value) {\r\n var trList = this.transformFuncList();\r\n var transformFunc = trList.getTransformFunc(this.options.property);\r\n\r\n transformFunc.parseArgs(value);\r\n this.__baseValue(trList.toCss());\r\n }.bind(this),\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPCssTransform, UIProvider);\r\n\r\nUIPCssTransform.prototype.dispose = function () {\r\n 'use strict';\r\n UIPCssTransform.superclass.dispose.call(this);\r\n if (this.__baseValue.dispose) {\r\n this.__baseValue.dispose();\r\n }\r\n this.transformFuncList.dispose();\r\n};\r\n\r\nUIPCssTransform.prototype.stringCache = {};"
},
"UIPCssTransition.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 02.10.14.\r\n */\r\n/*exported UIPCssTransition*/\r\n/*global Utils, UIProvider, Unit */\r\n\r\nfunction UIPCssTransition(data) {\r\n 'use strict';\r\n data.options.attr = 'transition';\r\n UIPCssTransition.superclass.constructor.call(this, data);\r\n\r\n this.index = this.options.transIndex || 0;\r\n\r\n this.__baseValue = this.value;\r\n\r\n this.transitionList = ko.computed(function () {\r\n var key = this.__baseValue();\r\n if (!this.stringCache[key]) {\r\n this.stringCache[key] = new window.TransitionList();\r\n this.stringCache[key].fromCss(this.__baseValue());\r\n }\r\n return this.stringCache[key].clone();\r\n }, this, {deferEvaluation: true});\r\n\r\n this.value = ko.computed({\r\n read: function () {\r\n var trList = this.transitionList();\r\n if (this.index >= trList.items.length)\r\n return null;\r\n\r\n var transition = trList.items[this.index];\r\n\r\n if (transition[this.options.property] instanceof window.Unit)\r\n return transition[this.options.property].value;\r\n\r\n return transition[this.options.property];\r\n }.bind(this),\r\n write: function (value) {\r\n var trList = this.transitionList();\r\n var transition = trList.items[this.index];\r\n\r\n if (transition && this.options.property) {\r\n\r\n if (transition[this.options.property] instanceof window.Unit)\r\n transition[this.options.property].setValue(value);\r\n else\r\n transition[this.options.property] = value;\r\n\r\n }\r\n this.__baseValue(trList.toCss());\r\n }.bind(this),\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPCssTransition, UIProvider);\r\n\r\nUIPCssTransition.prototype.getDefaultTransition = function getDefaultTransition(){\r\n 'use strict';\r\n var transition = new window.Transition();\r\n\r\n transition.property = 'all';\r\n transition.delay = null;\r\n transition.duration = new Unit('300ms');\r\n transition.timingFunction = '';\r\n\r\n return transition;\r\n};\r\n\r\nUIPCssTransition.prototype.dispose = function () {\r\n 'use strict';\r\n UIPCssTransition.superclass.dispose.call(this);\r\n if (this.__baseValue.dispose) {\r\n this.__baseValue.dispose();\r\n }\r\n this.transitionList.dispose();\r\n};\r\n\r\nUIPCssTransition.prototype.stringCache = {};\r\nUIPCssTransition.prototype.prefix = 'trans-';\r\n"
},
"UIPCustomDialog.js": {
"type": "text",
"content": "/*global Utils, UIProvider, designer, editor, PubSubController, Channels, PWStackHelper */\n\nfunction UIPCustomDialog(data) {\n 'use strict';\n\n UIPCustomDialog.superclass.constructor.call(this, data);\n\n // Default is true.\n this.modal = typeof this.options.modal !== 'undefined' ?\n this.options.modal :\n true;\n\n this.top = typeof this.options.top !== 'undefined' ?\n this.options.top :\n '';\n\n this.left = typeof this.options.left !== 'undefined' ?\n this.options.left :\n '';\n\n // Default is false.\n this.showOutsidePW = typeof this.options.showOutsidePW !== 'undefined' ?\n this.options.showOutsidePW :\n false;\n\n this.classes = typeof this.options.classes !== 'undefined' ?\n this.options.classes :\n '';\n\n PubSubController.subscribe(Channels.customDialogProvider.show, function () {\n this.showDialog(null);\n }.bind(this));\n\n this.titleProvider = PWStackHelper.getProvider(this.control(), {\"provider\": this.options.titleProvider});\n}\n\nUtils.extend(UIPCustomDialog, UIProvider);\n\nUIPCustomDialog.prototype.showDialog = function (elem) {\n 'use strict';\n\n var viewName = this.options.view || '',\n pos = null;\n\n if (!this.modal) {\n var target = elem,\n top = this.top || !target || target.length === 0 ? parseInt(this.top, 10) : target.offset().top + target.outerHeight(),\n left = this.showOutsidePW ?\n editor.$mainBody.find(\"#previewContainer\").offset().left :\n this.left || !target || target.length === 0 ? parseInt(this.left, 10) : target.offset().left;\n\n pos = {\n top: top + 'px',\n left: left + 'px'\n };\n }\n\n designer.ui.dialog.customDialog.show(this.titleProvider.caption, viewName, ['Close'], this.modal, function (error, buttonName) {\n switch (buttonName) {\n case 'Close':\n return;\n }\n }.bind(this), 'Close', null, pos /*{top: '106px', left: '262px'}*/, this.classes);\n};\n\nUIPCustomDialog.prototype.click = function (event) {\n 'use strict';\n\n if (!designer.ui.dialog.customDialog.isShown()) {\n this.showDialog($(event.target));\n } else {\n designer.ui.dialog.customDialog.hide();\n }\n\n};\n\nUIPCustomDialog.prototype.isActive = function (event) {\n 'use strict';\n\n this.showDialog($(event.target));\n};\n\nUIPCustomDialog.prototype.dispose = function () {\n 'use strict';\n\n UIPCustomDialog.superclass.dispose.call(this);\n\n if (this.titleProvider) {\n this.titleProvider.dispose();\n }\n\n designer.ui.dialog.customDialog.hide();\n};\n"
},
"UIPCustomStyles.js": {
"type": "text",
"content": "/* exported UIPCustomStyles */\r\n/* global Utils, UIPMixinStyleProxy, ErrorUtility, MixinsController, MixinsController2, ControlStorageController, AppSettings,\r\n ControlPresetGenerator, stylingController, async */\r\n\r\nfunction UIPCustomStyles(data) {\r\n 'use strict';\r\n UIPCustomStyles.superclass.constructor.call(this, data);\r\n this.requireBootstrap = typeof this.options.requireBootstrap !== \"undefined\" ? this.options.requireBootstrap : true;\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n return MixinsController2.getMixinName(this.control());\r\n },\r\n write: function (mixinName) {\r\n MixinsController2.resetToNamedMixin(this.control(), mixinName);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPCustomStyles, UIPMixinStyleProxy);\r\n\r\nUIPCustomStyles.prototype.getItems = function (callback) {\r\n 'use strict';\r\n var items = [];\r\n var typeCategory = MixinsController2.getTypeCategory(this.control());\r\n if (!typeCategory) {\r\n typeCategory = ControlStorageController.getEditorJson([{constructorName: this.control().constructorName}]).typeCategory;\r\n }\r\n var mixins = MixinsController.getMixinsByCategory(typeCategory);\r\n var controls = [];\r\n for (var key in mixins) {\r\n if (mixins.hasOwnProperty(key)) {\r\n controls.push(mixins[key]);\r\n }\r\n }\r\n\r\n stylingController.getPrototypesHtml(controls, function (error, result) {\r\n ErrorUtility.logError(error);\r\n async.forEach(controls, function (mixinForPreset, forEachCb) {\r\n ControlPresetGenerator.build(mixinForPreset, null, {controlDom: $(result[mixinForPreset.dataId])}, function (buildPresetError, buildData) {\r\n ErrorUtility.logError(buildPresetError);\r\n var item = {};\r\n var mixinName = MixinsController2.getMixinName(mixinForPreset),\r\n name = mixinName;\r\n if (!name) {\r\n name = 'Default';\r\n }\r\n //item.caption = name;\r\n item.html = buildData.html.replace('Button', name); // Hack\r\n item.html = AppSettings.replacePlaceholders(item.html);\r\n item.css = AppSettings.replacePlaceholders(buildData.css);\r\n item.value = mixinName;\r\n items.push(item);\r\n forEachCb(null);\r\n });\r\n }, function () {\r\n callback(null, items);\r\n });\r\n });\r\n};"
},
"UIPDataSource.js": {
"type": "text",
"content": "/*global Utils, UIProvider*/\r\nfunction UIPDataSource(data) {\r\n 'use strict';\r\n if (data.control.hasSubControl(data.options.data))\r\n data.control = data.control.find(data.options.data);\r\n UIPDataSource.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPDataSource, UIProvider);"
},
"UIPDebug.js": {
"type": "text",
"content": "/*exported UIPDebug*/\n/*global Utils, UIProvider, AppSettings */\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPDebug(data) {\n 'use strict';\n UIPDebug.superclass.constructor.call(this, data);\n\n var enabled = !this.options.isLocal || AppSettings.isLocal;\n\n this.visible(enabled && !!AppSettings.isDebug);\n}\nUtils.extend(UIPDebug, UIProvider);"
},
"UIPDebugSetEnvironment.js": {
"type": "text",
"content": "/*global Utils, UIPDebug, AppSettings */\nfunction UIPDebugSetEnvironment(data) {\n 'use strict';\n UIPDebugSetEnvironment.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPDebugSetEnvironment, UIPDebug);\n\nUIPDebugSetEnvironment.prototype.click = function () {\n 'use strict';\n if (this.options.attr === 'Designer') {\n AppSettings.isFarm = true;\n AppSettings.isLocal = false;\n } else {\n AppSettings.isFarm = false;\n AppSettings.isLocal = true;\n }\n UIPDebugSetEnvironment.superclass.click.call(this);\n};\n\n"
},
"UIPDebugThrowError.js": {
"type": "text",
"content": "/*exported UIPDebugThrowError*/\n/* global Utils, UIPDebug, ErrorUtility */\n\nfunction UIPDebugThrowError(data) {\n 'use strict';\n UIPDebugThrowError.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPDebugThrowError, UIPDebug);\n\nUIPDebugThrowError.prototype.click = function () {\n 'use strict';\n ErrorUtility.logError(new Error('Test Error'));\n};\n"
},
"UIPDeleteControl.js": {
"type": "text",
"content": "/* exported UIPDeleteControl */\r\n/* global Utils, UIProvider, Channels, PubSubController, PreviewHelper, designer, editor, l,\r\n ControlTemplateController, LayoutElement, LayoutContainer, MixinsController2, LayoutVerticalElement, PWStackHelper,\r\n CONST*/\r\n/**\r\n *\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPDeleteControl(data) {\r\n 'use strict';\r\n\r\n UIPDeleteControl.superclass.constructor.call(this, data);\r\n this.onSelectionChanged = this.onSelectionChanged.bind(this);\r\n\r\n this._isContext = data.options.isContext;\r\n this._alwaysVisible = data.options.alwaysVisible;\r\n\r\n PubSubController.subscribe(Channels.selection.selectionChanged, this.onSelectionChanged);\r\n this.updateCurrentTemplate(this.options.useContextControl ? this.control() : editor.selection.getSelectedControl());\r\n if (CONST.UI.PageFooter === this.control().prop('constructorName')) {\r\n this.enabled(false);\r\n this.visible(false);\r\n }\r\n}\r\nUtils.extend(UIPDeleteControl, UIProvider);\r\n\r\nUIPDeleteControl.prototype.onSelectionChanged = function () {\r\n 'use strict';\r\n this.updateCurrentTemplate(editor.selection.getSelectedControl());\r\n};\r\n\r\nUIPDeleteControl.prototype.updateCurrentTemplate = function (control) {\r\n 'use strict';\r\n if (CONST.UI.PageFooter === this.control().prop('constructorName')) {\r\n this.enabled(false);\r\n this.visible(false);\r\n return;\r\n }\r\n if (!ControlTemplateController.existInTheme(this.control().prop('dataId')) && !this._alwaysVisible) {\r\n this.visible(false);\r\n return;\r\n }\r\n\r\n if ((!control || PreviewHelper.isDefaultStylesActive()) && !this._alwaysVisible) {\r\n this.visible(false);\r\n return;\r\n }\r\n\r\n var resolvedControl = control ?\r\n control.getTopLevelFacade() :\r\n this.options.useContextControl ?\r\n this.control() :\r\n null;\r\n\r\n if (this._isContext) {\r\n if (control.prop('constructorName') === 'Theme' && !this._alwaysVisible) {\r\n this.visible(false);\r\n return;\r\n }\r\n if ((control.instanceOf(LayoutElement) || control.instanceOf(LayoutContainer)) && !this._alwaysVisible) {\r\n this.visible(false);\r\n return;\r\n }\r\n }\r\n\r\n var thisCaption = this.options.caption ? this.options.caption : '';\r\n var editorJson = editor.themeController.getEditor(resolvedControl);\r\n if (editorJson && designer.projectFacade.canDelete(resolvedControl.getModelControl()) && (!this._isContext || !MixinsController2.isProxy(control))) {\r\n this.caption(l(thisCaption, editorJson.caption));\r\n this.enabled(true);\r\n this.visible(true);\r\n } else {\r\n this.caption(l(thisCaption, ''));\r\n this.enabled(false);\r\n if ((this._isContext || this.options.useContextControl) && !this._alwaysVisible)\r\n this.visible(false);\r\n }\r\n};\r\n\r\nUIPDeleteControl.prototype.click = function () {\r\n 'use strict';\r\n var resolvedControl = null,\r\n idx;\r\n if (this.control().instanceOf(LayoutVerticalElement)) {\r\n var columnRemove = PWStackHelper.getProvider(this.control(), {provider: 'ColumnRemove'});\r\n columnRemove.click();\r\n columnRemove.dispose();\r\n } else {\r\n if (this.options.useContextControl) {\r\n resolvedControl = this.control().getTopLevelFacade();\r\n }\r\n else {\r\n var selection = editor.selection.selectedItem;\r\n if (!selection || !selection.dataId) return;\r\n\r\n var clickedControl = PreviewHelper.getControlInfoById(selection.dataId, null, function () {\r\n return true;\r\n });\r\n if (!clickedControl || clickedControl.allDoms.length <= selection.index) return;\r\n\r\n var controlInfo = PreviewHelper.getControlInfoByDom(clickedControl.allDoms[selection.index], null, function () {\r\n return true;\r\n });\r\n idx = controlInfo.domIndex;\r\n var control = controlInfo.control;\r\n\r\n resolvedControl = control.getTopLevelFacade();\r\n }\r\n if (CONST.UI.PageFooter === resolvedControl.getModelControl().constructorName) {\r\n return;\r\n }\r\n designer.projectFacade.removeControl(resolvedControl.getModelControl(), idx);\r\n }\r\n};\r\n\r\nUIPDeleteControl.prototype.dispose = function () {\r\n 'use strict';\r\n PubSubController.unsubscribe(Channels.selection.selectionChanged, this.onSelectionChanged);\r\n UIPDeleteControl.superclass.dispose.call(this);\r\n};\r\n"
},
"UIPDeleteHtmlItem.js": {
"type": "text",
"content": "/*global Utils, UIPHtmlItem, editor, ErrorUtility, DataProviderFacade, l, designer, PubSubController, Channels*/\r\n\r\nfunction UIPDeleteHtmlItem(data) {\r\n 'use strict';\r\n UIPDeleteHtmlItem.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPDeleteHtmlItem, UIPHtmlItem);\r\n\r\nUIPDeleteHtmlItem.prototype.getCurrentItem = function getCurrentItem() {\r\n 'use strict';\r\n var currentItem =\r\n this.options.hasOwnProperty('currentItemId') ?\r\n editor.pagesListController.getItemById(this.options.postType, this.options.currentItemId) :\r\n editor.pagesListController.getCurrentItem(this.options.postType);\r\n return currentItem;\r\n};\r\n\r\nUIPDeleteHtmlItem.prototype.removeItem = function () {\r\n 'use strict';\r\n var currentItem = this.getCurrentItem();\r\n this.startAsync();\r\n\r\n if (DataProviderFacade.realCmsName() === \"Html\" && this.options.postType === 'page') {\r\n editor.pagesListController.getItems(this.options.postType, '', false, function (error, result) {\r\n ErrorUtility.logError(error);\r\n if (currentItem && result.size === 1 && result[currentItem.id] === currentItem) {\r\n designer.ui.dialog.messageBox.showUntranslated(l('Remove'), l('#RemoveHtmlItemMessage', currentItem.caption), ['OK']);\r\n this.stopAsync();\r\n }\r\n else {\r\n PubSubController.publish(Channels.loadIcon.show);\r\n editor.pagesListController.removeItem(this.options.postType, currentItem, function (error) {\r\n ErrorUtility.logWarning(error);\r\n PubSubController.publish(Channels.loadIcon.hide);\r\n this.stopAsync();\r\n }.bind(this));\r\n }\r\n\r\n }.bind(this));\r\n }\r\n else {\r\n PubSubController.publish(Channels.loadIcon.show);\r\n editor.pagesListController.removeItem(this.options.postType, currentItem, function (error) {\r\n ErrorUtility.logWarning(error);\r\n PubSubController.publish(Channels.loadIcon.hide);\r\n this.stopAsync();\r\n }.bind(this));\r\n }\r\n};\r\n\r\nUIPDeleteHtmlItem.prototype.click = function () {\r\n 'use strict';\r\n var currentItem = this.getCurrentItem();\r\n if (!currentItem)return;\r\n this.startAsync();\r\n designer.ui.dialog.messageBox.showUntranslated(l('#RemoveItemMessage', currentItem.caption), '', ['Yes', 'No'], true, function (error, buttonName) {\r\n ErrorUtility.logError(error);\r\n\r\n if (buttonName === 'Yes') {\r\n this.removeItem();\r\n }\r\n this.stopAsync();\r\n\r\n }.bind(this));\r\n};"
},
"UIPDialogBack.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 19.10.2015.\r\n */\r\n/* global Utils, UIProvider, PubSubController, Channels */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPDialogBack(data) {\r\n 'use strict';\r\n UIPDialogBack.superclass.constructor.call(this, data);\r\n\r\n this.updateEnabled = function(arg){\r\n this.enabled(!!arg);\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.sectionDialog.canBackChange, this.updateEnabled);\r\n}\r\n\r\nUtils.extend(UIPDialogBack, UIProvider);\r\n\r\nUIPDialogBack.prototype.click = function () {\r\n 'use strict';\r\n\r\n PubSubController.publish(Channels.sectionDialog.back);\r\n};\r\n\r\nUIPDialogBack.prototype.dispose = function() {\r\n 'use strict';\r\n UIPDialogBack.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.sectionDialog.canBackChange, this.updateEnabled);\r\n};"
},
"UIPDialogHome.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 19.10.2015.\r\n */\r\n/* global Utils, UIProvider, PubSubController, Channels */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPDialogHome(data) {\r\n 'use strict';\r\n UIPDialogHome.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPDialogHome, UIProvider);\r\n\r\nUIPDialogHome.prototype.click = function () {\r\n 'use strict';\r\n\r\n PubSubController.publish(Channels.sectionDialog.home);\r\n};"
},
"UIPDownloadAsZip.js": {
"type": "text",
"content": "/* global Utils, UIProvider, ErrorUtility, Section, Utility, ControlPresetsController, UIHelper, designer, DataProviderFacade*/\r\n\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPDownloadAsZip(data) {\r\n 'use strict';\r\n UIPDownloadAsZip.superclass.constructor.call(this, data);\r\n this.visible(!!DataProviderFacade.getCmsInfo().unZip); // Todo: use jszip\r\n}\r\n\r\nUtils.extend(UIPDownloadAsZip, UIProvider);\r\n\r\nUIPDownloadAsZip.prototype.click = function () {\r\n 'use strict';\r\n\r\n var control = this.control();\r\n\r\n var zipCaption, isSection = control.instanceOf(Section);\r\n\r\n if (isSection) {\r\n zipCaption = control.prop(\"sectionTitle\");\r\n }\r\n if (!zipCaption) {\r\n zipCaption = UIHelper.getCaption(control) + ' Preset';\r\n }\r\n\r\n designer.ui.dialog.promptDialog.show('#ExportPresetTitle', '#ExportPresetMessage', 'OK', 'Cancel', zipCaption,\r\n function (dialogError, newCaption, canceled) {\r\n ErrorUtility.logWarning(dialogError);\r\n if (!canceled && !dialogError) {\r\n this.showWait();\r\n ControlPresetsController.createPresetZipData(control, function (error, data) {\r\n if (!ErrorUtility.logWarning(error)) {\r\n if (!data) {\r\n var warn = new Error(\"createPresetZipData return null\");\r\n warn.args = {data: data, control: control};\r\n ErrorUtility.logWarning(warn);\r\n } else {\r\n var result = Utility.saveFileToDiskFromUrlOrBase64(data, (newCaption ? newCaption : zipCaption) + '.zip');\r\n ErrorUtility.logWarning(result.error);\r\n }\r\n }\r\n this.hideWait();\r\n }.bind(this));\r\n }\r\n }.bind(this),\r\n function (val, successKey, callback) {\r\n callback(null, successKey);\r\n });\r\n};"
},
"UIPDownloadCurrentTheme.js": {
"type": "text",
"content": "/* global Utils, UIPRenameCurrentTheme, designer, ErrorUtility, AppSettings, LogController,\n RequestController, DataProviderFacade, DataProviderFacade, Utility, l, compareVersion*/\n\nfunction UIPDownloadCurrentTheme(data) {\n 'use strict';\n UIPDownloadCurrentTheme.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPDownloadCurrentTheme, UIPRenameCurrentTheme);\n\nUIPDownloadCurrentTheme.prototype.click = function () {\n 'use strict';\n var cmsInfo = DataProviderFacade.getCmsInfo(),\n oldThemeName = cmsInfo.themeName,\n cmsName = cmsInfo.cmsName,\n tutorialLink = 'How to install ' + cmsName + ' theme',\n includeEditorSupport = !!(cmsInfo.includeEditorSupport || compareVersion(DataProviderFacade.getVersion(), \"0.0.2\") >= 0),\n includeContentSupport = !!cmsInfo.includeContentSupport;\n\n designer.ui.dialog.exportThemeDialog.show('Export Theme', '#EnterThemeName', 'Download as ZIP', 'Close', oldThemeName, includeEditorSupport, includeContentSupport,\n function (errs, newThemeName, includeEditor, includeContent, canceled) {\n if (!ErrorUtility.logError(errs) && !canceled) {\n this._saveProjectInternal({publish: true}, function (error, savedData) {\n if (!ErrorUtility.logError(error) && savedData && savedData.themeId) {\n var data = {\n themeName: newThemeName,\n oldThemeName: oldThemeName,\n includeEditor: !!(!includeEditorSupport || includeEditor),\n includeContent: !!(includeContentSupport && includeContent)\n };\n getThemeArchive(data, function (error, href, ext) {\n if (!error && href) {\n var result = Utility.saveFileToDiskFromUrlOrBase64(href, ext ? newThemeName + '.' + ext : 'unknown');\n error = result.error;\n }\n if (!href || (error && !ErrorUtility.isWarningServerError(error))) {\n ErrorUtility.logWarning(error);\n designer.ui.dialog.messageBox.show('#DownloadError_Title', AppSettings.isFarm ? '#DownloadFromFarmError_Body' : '#DownloadFromCmsError_Body');\n }\n });\n }\n });\n }\n }.bind(this),\n function (val, successKey, callback) { // Validation\n DataProviderFacade.themeNameValidation(val, successKey, false, function (error, result) {\n if (!ErrorUtility.logError(error)) {\n callback(null, result === l('#ThemeExists') ? successKey : result);\n }\n });\n }, tutorialLink);\n\n function getThemeArchive(options, callback) {\n if (AppSettings.isFarm) {\n DataProviderFacade.prepareThemeToGet(options, function (prepareThemeError) {\n\n ErrorUtility.logWarning(prepareThemeError);\n\n var data = designer.projectFacade.getThemeInfoForServer();\n\n var callbackFunc = function (error, response) {\n LogController.addLogs(response && response.log);\n LogController.timeEnd(\"[SERVER] canDownloadTheme\", {isProductionLog: true});\n var downloadUrl = AppSettings.serverActionsUrl.getThemeArchive;\n downloadUrl = RequestController.applyParam(downloadUrl, 'themeId=' + data.themeId);\n downloadUrl = RequestController.applyParam(downloadUrl, 'themeName=' + options.themeName);\n downloadUrl = RequestController.applyParam(downloadUrl, 'oldThemeName=' + options.oldThemeName);\n downloadUrl = RequestController.applyParam(downloadUrl, 'includeEditor=' + options.includeEditor);\n downloadUrl = RequestController.applyParam(downloadUrl, 'isFarm=' + data.isFarm);\n downloadUrl = RequestController.applyParam(downloadUrl, 'cmsName=' + data.cmsName);\n downloadUrl = RequestController.applyParam(downloadUrl, 'cmsVersion=' + data.cmsVersion);\n downloadUrl = RequestController.applyParam(downloadUrl, 'cmsUrl=' + data.cmsUrl);\n downloadUrl = RequestController.applyParam(downloadUrl, 'version=' + (new Date()).getTime());\n callback(error, downloadUrl);\n };\n\n LogController.time(\"[SERVER] canDownloadTheme\", {isProductionLog: true});\n\n var requestData = {\n url: AppSettings.serverActionsUrl.canDownloadTheme,\n success: function (responseData) {\n callbackFunc(null, responseData);\n },\n type: 'POST',\n data: data,\n contentType: 'application/x-www-form-urlencoded; charset=UTF-8',\n dataType: 'json',\n xhrFields: {withCredentials: true},\n error: callbackFunc\n };\n RequestController.request(requestData, true);\n });\n } else {\n DataProviderFacade.getTheme(options, function (getThemeError, themeData) {\n callback(getThemeError, themeData && themeData.content, themeData && themeData.ext);\n });\n }\n }\n};"
},
"UIPDropDownListViewFilter.js": {
"type": "text",
"content": "/*global Utils, UIProvider, Utility, PubSubController, Channels*/\r\n\r\nfunction UIPDropDownListViewFilter(data) {\r\n 'use strict';\r\n UIPDropDownListViewFilter.superclass.constructor.call(this, data);\r\n\r\n if (data.options.parent().showItemsAfterRendered)\r\n data.options.parent().showItemsAfterRendered();\r\n\r\n this.requireBootstrap = data.options.parent().requireBootstrap;\r\n this.presetsResaved = data.options.parent().presetsResaved;\r\n\r\n\r\n this.options.ignoreSelection = data.options.parent().options.ignoreSelection;\r\n\r\n this.itemsCount = parseInt(data.options.itemsCount, 10);\r\n this.staticItems = ko.computed(function () {\r\n\r\n var result = [];\r\n $(data.options.parent().items()).each(function (index, item) {\r\n var obj = {};\r\n $.extend(obj, item);\r\n obj.category = undefined;\r\n obj.canRemove = false;\r\n result.push(obj);\r\n }.bind(this));\r\n return result;\r\n }, this, {deferEvaluation: true});\r\n\r\n function areValuesEqual(a, b) {\r\n if (typeof a !== 'object' && typeof a !== 'undefined')\r\n a = a.toString();\r\n\r\n if (typeof b !== 'object' && typeof b !== 'undefined')\r\n b = b.toString();\r\n\r\n if (typeof b === 'object' && typeof a === 'object') {\r\n return Utility.compareObjects(b, a);\r\n }\r\n\r\n return a === b;\r\n }\r\n\r\n this.selectedIndex = ko.observable(0);\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n if (this.options.ignoreSelection) {\r\n var startIndex = Math.min(this.selectedIndex(), this.staticItems.peek().length - this.itemsCount);\r\n this.items(this.staticItems().slice(startIndex, startIndex + this.itemsCount));\r\n return null;\r\n }\r\n var value = data.options.parent().value();\r\n var currentItems = this.staticItems().slice();\r\n if (currentItems.length) {\r\n var selectedItems = currentItems.filter(function (object) {\r\n return areValuesEqual(object.value, value);\r\n });\r\n var indexSelectedItem = selectedItems.length ? currentItems.indexOf(selectedItems[0]) : 0;\r\n if (indexSelectedItem === -1 && currentItems.length > 0) indexSelectedItem = 0;\r\n var indexBegin = (indexSelectedItem + this.itemsCount) <= currentItems.length ? indexSelectedItem : ((currentItems.length - this.itemsCount) < 0 ? 0 : (currentItems.length - this.itemsCount)),\r\n indexEnd = (indexSelectedItem + this.itemsCount) <= currentItems.length ? indexSelectedItem + this.itemsCount : currentItems.length;\r\n this.items(currentItems.slice(indexBegin, indexEnd));\r\n }\r\n\r\n return data.options.parent().options.selectValue !== false ? value : null;\r\n },\r\n write: function (value) {\r\n data.options.parent().value(value);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n PubSubController.subscribe(Channels.presets.presetChosen, this.selectedIndex);\r\n}\r\n\r\nUtils.extend(UIPDropDownListViewFilter, UIProvider);\r\n\r\nUIPDropDownListViewFilter.prototype.dispose = function () {\r\n 'use strict';\r\n UIPDropDownListViewFilter.superclass.dispose.call(this);\r\n this.staticItems.dispose();\r\n PubSubController.unsubscribe(Channels.presets.presetChosen, this.selectedIndex);\r\n};\r\n"
},
"UIPDropTo.js": {
"type": "text",
"content": "/*exported UIPDropTo*/\r\n/*global Utils, UIProvider*/\r\nfunction UIPDropTo(data) {\r\n 'use strict';\r\n UIPDropTo.superclass.constructor.call(this, data);\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n },\r\n write: function (value) {\r\n if (this.options.callback && 'function' === typeof this.options.callback) {\r\n this.options.callback(value);\r\n }\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPDropTo, UIProvider);"
},
"UIPDuplicateHtmlItem.js": {
"type": "text",
"content": "/*global Utils, UIPHtmlItem, editor, ErrorUtility, PubSubController, Channels*/\r\n\r\nfunction UIPDuplicateHtmlItem(data) {\r\n 'use strict';\r\n\r\n UIPDuplicateHtmlItem.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPDuplicateHtmlItem, UIPHtmlItem);\r\n\r\nUIPDuplicateHtmlItem.prototype.click = function () {\r\n 'use strict';\r\n\r\n var item = $.extend({}, editor.pagesListController.getCurrentItem(this.options.postType));\r\n\r\n PubSubController.publish(Channels.loadIcon.show);\r\n\r\n UIPDuplicateHtmlItem.superclass.click.call(this);\r\n\r\n this.startAsync();\r\n editor.pagesListController.copyItem(this.options.postType, item, true, function (error) {\r\n ErrorUtility.logWarning(error);\r\n PubSubController.publish(Channels.loadIcon.hide);\r\n if (!error) {\r\n this.startAsync();\r\n PubSubController.once(Channels.previewEvents.loaded, function () {\r\n PubSubController.publish(Channels.customDialogProvider.show);\r\n //this._childProvider.click(event);\r\n this.stopAsync();\r\n }.bind(this));\r\n }\r\n this.stopAsync();\r\n }.bind(this));\r\n};\r\n"
},
"UIPDuplicateSlide.js": {
"type": "text",
"content": "/*global Utils, UIProvider, editor, PreviewHelper*/\r\n\r\nfunction UIPDuplicateSlide(data) {\r\n 'use strict';\r\n UIPDuplicateSlide.superclass.constructor.call(this, data);\r\n var slider = this._getSlider(this.control());\r\n\r\n if (!slider)\r\n this.visible(false);\r\n else {\r\n this.slider = slider;\r\n this.visible(true);\r\n }\r\n}\r\n\r\nUtils.extend(UIPDuplicateSlide, UIProvider);\r\n\r\nUIPDuplicateSlide.prototype._getSlider = function(control) {\r\n 'use strict';\r\n\r\n if (control.prop('constructorName') === 'Slider') return control;\r\n if (control.prop('constructorName') === 'Slide'){\r\n var info = PreviewHelper.getControlInfo(control);\r\n var slider = PreviewHelper.getControlParentInfo(info);\r\n if (slider.control.prop('constructorName') === 'Slider')\r\n return slider.control; // Slider\r\n }\r\n\r\n return null;\r\n};\r\n\r\nUIPDuplicateSlide.prototype.click = function () {\r\n 'use strict';\r\n var slider = this.slider;\r\n if (slider) {\r\n editor.sliderController.getActive(slider, function(error, slide) {\r\n if (error) throw error;\r\n editor.sliderController.duplicateSlide(slider, slide);\r\n });\r\n }\r\n};\r\n"
},
"UIPDuplicateTemplate.js": {
"type": "text",
"content": "/**\r\n * Created by San0k on 02.02.2015.\r\n */\r\n/* exported UIPDuplicateTemplate */\r\n/* globals l, editor, designer, Utils, UIPAddTemplate, DataProviderFacade, CustomTemplate, ControlStorageController, PubSubController, Channels*/\r\n\r\n\r\nvar UIPDuplicateTemplate = (function() {\r\n 'use strict';\r\n\r\n function UIPDuplicateTemplate(data) {\r\n UIPDuplicateTemplate.superclass.constructor.call(this, data);\r\n\r\n this.updateCurrentTemplate = function () {\r\n var currentTpl = editor.templatesController.currentTemplate;\r\n if (!currentTpl) {\r\n this.enabled(false);\r\n return;\r\n }\r\n var allowedTypes = DataProviderFacade.getCmsInfo().canDuplicateTemplatesConstructors;\r\n if (!allowedTypes) {\r\n this.enabled(false);\r\n return;\r\n }\r\n var types = Object.keys(allowedTypes);\r\n var isAllowedType = (types.indexOf(currentTpl.constructorName) !== -1);\r\n this.enabled(isAllowedType || currentTpl instanceof CustomTemplate);\r\n }.bind(this);\r\n\r\n this.updateCurrentTemplate();\r\n PubSubController.subscribe(Channels.template.changed, this.updateCurrentTemplate);\r\n }\r\n\r\n Utils.extend(UIPDuplicateTemplate, UIPAddTemplate);\r\n\r\n UIPDuplicateTemplate.prototype.dispose = function () {\r\n UIPDuplicateTemplate.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.template.changed, this.updateCurrentTemplate);\r\n };\r\n\r\n UIPDuplicateTemplate.prototype._addTemplateInternal = function(type, name, caption, fileName) {\r\n var templatesCollection = editor.themeController.getTheme().templates;\r\n var currentTpl = editor.templatesController.currentTemplate;\r\n var clonedTpl = editor.themeController.duplicateControl(currentTpl);\r\n\r\n clonedTpl.BaseTemplate.caption = caption;\r\n clonedTpl.BaseTemplate.templateName = name;\r\n clonedTpl.BaseTemplate.isCustomTemplate = true;\r\n\r\n if (clonedTpl instanceof CustomTemplate && fileName) {\r\n clonedTpl.fileName = fileName;\r\n }\r\n\r\n templatesCollection.add(name, clonedTpl);\r\n this._selectTemplate(name);\r\n };\r\n\r\n UIPDuplicateTemplate.prototype._getTemplateCaption = function(tpl) {\r\n if (!tpl || !tpl.constructorName) return null;\r\n\r\n if (tpl.BaseTemplate && tpl.BaseTemplate.isCustomTemplate) {\r\n return tpl.BaseTemplate.caption;\r\n } else {\r\n var stack = [ { propertyName: '', constructorName: tpl.constructorName } ];\r\n var editorJson = ControlStorageController.getEditorJson(stack);\r\n return l(editorJson.caption);\r\n }\r\n };\r\n\r\n UIPDuplicateTemplate.prototype.click = function() {\r\n\r\n var templatesCollection = editor.themeController.getTheme().templates;\r\n var currentTpl = editor.templatesController.currentTemplate;\r\n if (!currentTpl) return;\r\n\r\n var defaultCaption = this._generateDefaultCaption(currentTpl.constructorName);\r\n var dialogTitle = l('Duplicate template') + ' \"' + this._getTemplateCaption(currentTpl) + '\"';\r\n designer.ui.dialog.promptDialog.showUntranslated(dialogTitle, l('#NewTemplateName'), l('OK'), l('Cancel'), defaultCaption,\r\n function(promptDialogError, caption, canceled) { // Apply\r\n if (!promptDialogError && !canceled && caption) {\r\n var name = this._generateName(caption);\r\n this.addTemplate(currentTpl.constructor.name, name, caption);\r\n }\r\n }.bind(this),\r\n function(value, successKey, callback) { // Validation\r\n var name = this._generateName(value);\r\n if (!name || !name.length) {\r\n callback(null, l('#NewTemplateErrorEmptyTitle'));\r\n return;\r\n }\r\n if (templatesCollection[name]) {\r\n callback(null, l('#NewTemplateErrorTemplateExists'));\r\n return;\r\n }\r\n callback(null, successKey);\r\n }.bind(this));\r\n };\r\n\r\n return UIPDuplicateTemplate;\r\n})();"
},
"UIPDuplicateTheme.js": {
"type": "text",
"content": "/* global Utils, UIProvider, designer, ErrorUtility, ErrorHelper, DataProviderFacade, PubSubController, Channels, UIHelper, l */\r\n\r\nfunction UIPDuplicateTheme(data) {\r\n 'use strict';\r\n UIPDuplicateTheme.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPDuplicateTheme, UIProvider);\r\n\r\nUIPDuplicateTheme.prototype.click = function () {\r\n 'use strict';\r\n var info = DataProviderFacade.getCmsInfo();\r\n DataProviderFacade.reloadThemesInfo(function (error, data) {\r\n if (!ErrorUtility.logError(error) && data) {\r\n var themes = JSON.parse(data).themes;\r\n var themeId;\r\n for (themeId in themes)\r\n if (themes.hasOwnProperty(themeId) && themes[themeId].themeName === info.themeName)\r\n break;\r\n UIHelper.duplicate(info.themeName, function (val, successKey, callback) {\r\n DataProviderFacade.themeNameValidation(val, successKey, true, function (error, result) {\r\n ErrorUtility.logError(error);\r\n callback(error, DataProviderFacade.getCmsInfo().themeName === val ? l(\"#ThemeExists\") : result);\r\n });\r\n }, DataProviderFacade.themeNameMaxLength - 1, l('Make a Copy As'), l('#ENTER_NEW_NAME'), 'Make a Copy', function (error, newThemeName) {\r\n ErrorUtility.logError(error);\r\n if (newThemeName === undefined)return;\r\n PubSubController.publish(Channels.loadIcon.show);\r\n DataProviderFacade.copyTheme(themeId, newThemeName, function (error) {\r\n if (error && !ErrorHelper.isCmsError(error)) {\r\n designer.ui.dialog.messageBox.showUntranslated(l('#DuplicateError_Title'), error.message);\r\n }\r\n PubSubController.publish(Channels.loadIcon.hide);\r\n }.bind(this));\r\n }.bind(this));\r\n }\r\n });\r\n};"
},
"UIPEditInUPage.js": {
"type": "text",
"content": "/* exported UIPEditInUPage */\n/* global Utils, designer, UIProvider */\n\nfunction UIPEditInUPage(data) {\n 'use strict';\n UIPEditInUPage.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPEditInUPage, UIProvider);\n\nUIPEditInUPage.prototype.click = function () {\n 'use strict';\n this.startAsync();\n var control = this.control();\n\n designer.ui.dialog.editInUPageDialog.show(control, $.extend({}, this.options), function onDialogClosed(/*data*/) {\n //data.hasChanges\n this.stopAsync();\n }.bind(this));\n};"
},
"UIPEditOnlyThis.js": {
"type": "text",
"content": "/*exported UIPEditOnlyThis*/\r\n/*global Utils, UIPRevertToDefault, MixinsController2 */\r\n\r\nfunction UIPEditOnlyThis(data) {\r\n 'use strict';\r\n UIPEditOnlyThis.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPEditOnlyThis, UIPRevertToDefault);\r\n\r\nUIPEditOnlyThis.prototype.click = function () {\r\n 'use strict';\r\n MixinsController2.customizeProxy(this.control());\r\n};\r\n\r\nUIPEditOnlyThis.prototype.checkControl = function (modelControl) {\r\n 'use strict';\r\n return MixinsController2.isProxy(modelControl) && !MixinsController2.isCustomProxy(modelControl);\r\n};"
},
"UIPEmpty.js": {
"type": "text",
"content": "/*exported UIPEmpty*/\n/* global UIProvider, Utils */\n\nfunction UIPEmpty(data) {\n 'use strict';\n\n UIPEmpty.superclass.constructor.call(this, data);\n}\nUtils.extend(UIPEmpty, UIProvider);\n\nUIPEmpty.prototype.click = function () {\n 'use strict';\n};\n\nUIPEmpty.prototype.toString = function () {\n 'use strict';\n if (this.options.toString)\n return this.options.toString();\n return '';\n};"
},
"UIPEmptyValueArrow.js": {
"type": "text",
"content": "/*exported UIPEmptyValueArrow*/\n/*global Utils, UIProvider*/\n\nfunction UIPEmptyValueArrow(data) {\n 'use strict';\n\n UIPEmptyValueArrow.superclass.constructor.call(this, data);\n\n this.keepTooltip = true;\n\n this.toString = function () {\n //PubSubController.publish(Channels.koObservableController.finished)\n var val = this._childProvider.toString();\n if (val === '') {\n return '';\n } else {\n return val;\n }\n }.bind(this);\n}\n\nUtils.extend(UIPEmptyValueArrow, UIProvider);\n"
},
"UIPEmptyValueHide.js": {
"type": "text",
"content": "/*global Utils, UIProvider*/\r\n\r\n//Hides widget if provider.toString is empty\r\n\r\nfunction UIPEmptyValueHide(data) {\r\n 'use strict';\r\n UIPEmptyValueHide.superclass.constructor.call(this, data);\r\n\r\n this.keepTooltip = true;\r\n\r\n if (this._childProvider)\r\n this.toString = this._childProvider.toString;\r\n this.baseVisible = this.visible;\r\n this.visible = ko.computed(function () {\r\n var result = !!(this.toString() || this.value());\r\n if (this.options.invert)\r\n result = !result;\r\n return (result) && this.baseVisible();\r\n }, this, {deferEvaluation: true});\r\n}\r\n\r\nUtils.extend(UIPEmptyValueHide, UIProvider);\r\n\r\nUIPEmptyValueHide.prototype.dispose = function dispose() {\r\n 'use strict';\r\n if (this.baseVisible.dispose)\r\n this.baseVisible.dispose();\r\n UIPEmptyValueHide.superclass.dispose.call(this);\r\n};\r\n"
},
"UIPEnable.js": {
"type": "text",
"content": "/*global Utils, UIProvider*/\nfunction UIPEnable(data) {\n 'use strict';\n UIPEnable.superclass.constructor.call(this, data);\n\n if (this.enabled.dispose)\n this.enabled.dispose();\n this.enabled = ko.computed(\n {\n read: function () {\n return this.value() === this.options.expected;\n },\n deferEvaluation: true,\n owner: this\n }\n );\n}\n\nUtils.extend(UIPEnable, UIProvider);\n"
},
"UIPEnableEffect.js": {
"type": "text",
"content": "/* exported UIPEnableEffect */\n/* global Utils, UIProvider, koObservableController, EffectHelpers, designer */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPEnableEffect(data) {\n 'use strict';\n\n UIPEnableEffect.superclass.constructor.call(this, data);\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n if (!this._valueChangeNotifier) {\n this._valueChangeNotifier = koObservableController.koBind(null, '', function () {\n return !!EffectHelpers.getEffect(this.control(), this.options.constructorName);\n }.bind(this));\n }\n return this._valueChangeNotifier();\n },\n write: function (value) {\n var control = this.control();\n if (value) {\n if (!EffectHelpers.getEffect(control, this.options.constructorName)) {\n designer.projectFacade.addEffect(this.options.constructorName, null, control);\n }\n } else {\n var e = EffectHelpers.getEffect(control, this.options.constructorName);\n if (e) {\n designer.projectFacade.removeEffect(control, e);\n }\n }\n },\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPEnableEffect, UIProvider);"
},
"UIPExport.js": {
"type": "text",
"content": "/*exported UIPExport */\n/* global Utils, UIProvider, ExportHelper */\n\nfunction UIPExport(data) {\n 'use strict';\n UIPExport.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPExport, UIProvider);\n\nUIPExport.prototype.click = function () {\n 'use strict';\n ExportHelper.fullExportTheme();\n};"
},
"UIPExtensionHint.js": {
"type": "text",
"content": "/* globals UIProvider, Utils, koObservableController, UIHelper */\n\nfunction UIPExtensionHint(data) {\n 'use strict';\n UIPExtensionHint.superclass.constructor.call(this, data);\n\n if (this.caption.dispose)\n this.caption.dispose();\n\n this.caption = koObservableController.koBind(this.control(), \"\", function (control) {\n return UIHelper.getExtensionHint(control,this.options.caption);\n }.bind(this));\n}\n\nUtils.extend(UIPExtensionHint, UIProvider);"
},
"UIPExtensions.js": {
"type": "text",
"content": "/* globals editor, UIProvider, ControlMetadataProvider, Utils, ImageController, koObservableController, Animation, UIHelper, PubSubController, Channels, ControlStorageController */\r\n\r\nfunction UIPExtensions(data) {\r\n 'use strict';\r\n UIPExtensions.superclass.constructor.call(this, data);\r\n\r\n if ((this.control() === editor.themeController.getTheme()) || this.control().isStateControl()) { // Important\r\n this.enabled(false);\r\n this.visible(false);\r\n }\r\n\r\n this.value.dispose();\r\n\r\n this.value = ko.computed({\r\n read: function () {\r\n if (!this._valueChangeNotifier)\r\n this._valueChangeNotifier = koObservableController.koBind(this.control(), null, function () {\r\n var controlCategories = ControlMetadataProvider.getControlAddItemsByCategories();\r\n var effectsCollection = this.control().hasSubControl('effects') && this.control().find('effects');\r\n if (!controlCategories.Effects || !effectsCollection)return false;\r\n for (var i = 0; i < effectsCollection.prop('length'); i++)\r\n if (this.needAddEffect(effectsCollection.find(i + '').prop('constructorName'), controlCategories.Effects))\r\n return true;\r\n return false;\r\n }.bind(this));\r\n return this._valueChangeNotifier();\r\n },\r\n write: function () {\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n this.updateItems = function () {\r\n this.getItems(function (error, items) {\r\n this.items(items);\r\n }.bind(this));\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.history.refresh, this.updateItems);\r\n}\r\n\r\nUtils.extend(UIPExtensions, UIProvider);\r\n\r\nUIPExtensions.prototype.dispose = function () {\r\n 'use strict';\r\n UIPExtensions.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.history.refresh, this.updateItems);\r\n};\r\n\r\nUIPExtensions.prototype.getItems = function (callback) {\r\n 'use strict';\r\n var controlCategories = ControlMetadataProvider.getControlAddItemsByCategories();\r\n if (!controlCategories.Effects) {\r\n callback(null, []);\r\n return;\r\n }\r\n\r\n var items = [], i, editorJson, controlIcon, effectsNames = [];\r\n\r\n var effectsData = controlCategories.Effects;\r\n var effectsCollection = this.control().hasSubControl('effects') && this.control().find('effects');\r\n if (effectsCollection)\r\n for (i = 0; i < effectsCollection.prop('length'); i++) {\r\n var effect = effectsCollection.find(i + '');\r\n var effectName = effect.prop('constructorName');\r\n if (!this.needAddEffect(effectName, effectsData))continue;\r\n editorJson = ControlMetadataProvider.getEditor(effectName);\r\n controlIcon = ControlMetadataProvider.getIcon(effectName);\r\n if (effectName !== \"Animation\")\r\n effectsNames.push(effectName);\r\n if (!editorJson || editorJson.category === \"Other\") continue;\r\n var hasView = ControlStorageController.hasView(effectName);\r\n items.push($.extend({}, editorJson.view, {\r\n widget: \"Include\",\r\n view: \"ExtensionItem\",\r\n icon: \"url(\" + ImageController.getIconUrl(controlIcon ? ImageController.base64ToDataUrl(controlIcon) : this.options.defaultIcon) + \")\",\r\n caption: effect.instanceOf(Animation) ? \"Animation: \" + UIHelper.getExtensionHint(effect) : editorJson.caption,\r\n description: editorJson.description || \"\",\r\n category: editorJson.category,\r\n effectPath: \"effects.\" + i,\r\n effectName: effectName,\r\n dropdownVisible: hasView,\r\n switchVisible: !hasView\r\n }));\r\n }\r\n\r\n\r\n for (i = 0; i < effectsData.length; ++i) {\r\n var controlFullName = effectsData[i];\r\n if (effectsNames.indexOf(controlFullName) !== -1)continue;\r\n editorJson = ControlMetadataProvider.getEditor(controlFullName);\r\n controlIcon = ControlMetadataProvider.getIcon(controlFullName);\r\n if (!editorJson || editorJson.category === \"Other\")continue;\r\n items.push($.extend({}, editorJson.view, {\r\n widget: \"Include\",\r\n view: \"ExtensionItem\",\r\n icon: \"url(\" + ImageController.getIconUrl(controlIcon ? ImageController.base64ToDataUrl(controlIcon) : this.options.defaultIcon) + \")\",\r\n caption: editorJson.caption,\r\n description: editorJson.description || \"\",\r\n category: editorJson.category,\r\n effectName: controlFullName,\r\n dropdownVisible: false,\r\n switchVisible: true\r\n }));\r\n }\r\n\r\n items.sort(function (a, b) {\r\n var categoryComparer = (a.category > b.category) - (a.category < b.category);\r\n if (categoryComparer)return categoryComparer;\r\n if (a.category === \"Animation\") {\r\n if (a.caption === \"Animation\")return 1;\r\n if (b.caption === \"Animation\")return -1;\r\n return parseInt(a.effectPath.substr(8), 10) - parseInt(b.effectPath.substr(8), 10);\r\n }\r\n return (a.caption > b.caption) - (a.caption < b.caption);\r\n });\r\n\r\n items = items.filter(function (item) {\r\n return item.effectName !== \"FlexAlign\";\r\n }.bind(this));\r\n\r\n\r\n if (this.options.categories)\r\n items = items.filter(function (item) {\r\n return this.options.categories.indexOf(item.category) !== -1;\r\n }.bind(this));\r\n\r\n callback(null, items);\r\n};\r\n\r\nUIPExtensions.prototype.needAddEffect = function (constructorName, effectsData) {\r\n 'use strict';\r\n if (effectsData.indexOf(constructorName) === -1)return false;\r\n var editorJson = ControlMetadataProvider.getEditor(constructorName);\r\n return editorJson.category !== \"Other\";\r\n};\r\n"
},
"UIPFileUploadProcess.js": {
"type": "text",
"content": "/*global Utils, UIProvider, PubSubController, Channels*/\r\nfunction UIPFileUploadProcess(data) {\r\n 'use strict';\r\n UIPFileUploadProcess.superclass.constructor.call(this, data);\r\n\r\n this.total = ko.observable();\r\n this.current = ko.observable();\r\n\r\n this.makeVisible = function () {\r\n this.visible(true);\r\n }.bind(this);\r\n this.makeInvisible = function () {\r\n this.visible(false);\r\n this.current(0);\r\n }.bind(this);\r\n PubSubController.subscribe(Channels.media.uploadCompleted, this.makeInvisible);\r\n PubSubController.subscribe(Channels.media.uploadStarted, this.makeVisible);\r\n\r\n this.makeInvisible();\r\n\r\n this.recalculateObservables = function (data) {\r\n this.total(data.total);\r\n this.current(data.uploadedChunkNumber + 1);\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.media.chunkUploaded, this.recalculateObservables);\r\n}\r\n\r\nUtils.extend(UIPFileUploadProcess, UIProvider);\r\n\r\nUIPFileUploadProcess.prototype.dispose = function () {\r\n 'use strict';\r\n UIPFileUploadProcess.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.media.uploadCompleted, this.makeInvisible);\r\n PubSubController.unsubscribe(Channels.media.uploadStarted, this.makeVisible);\r\n PubSubController.unsubscribe(Channels.media.chunkUploaded, this.recalculateObservables);\r\n};"
},
"UIPFont.js": {
"type": "text",
"content": "/*global Utils, UIPCheckComputedEnable, editor, PubSubController, Channels, TypographyHelper, LessController,\r\n SelectionRange, koObservableController, GoogleFontsController, ControlStorageController, ComputedControlFacade,\r\n PreviewHelper, CONST, l, UIHelper, SelectionResolver, PWStackHelper, ErrorUtility */\r\nfunction UIPFont(data) {\r\n 'use strict';\r\n\r\n data.options.check = \"allowTypographyEditing\"; // for UIPCheckComputedEnable\r\n\r\n UIPFont.superclass.constructor.call(this, data);\r\n\r\n if (this.options.typography && this.options.typography.indexOf('%') !== -1) {\r\n var ownTypography = ControlStorageController.getEditorJsonByControl(this.control()).typography;\r\n if (ownTypography) {\r\n this.options.typography = this.options.typography.replace('%typography', ownTypography);\r\n } else {\r\n this.options.typography = '';\r\n }\r\n }\r\n\r\n this.CONST = data.CONST || {};\r\n this.CONST.heading = 'heading';\r\n this.isContentEditing = ko.observable(this.options.typography === 'ContentEditor');\r\n\r\n if (this.isContentEditing() && !this.CONST.contentPropertyName)\r\n this.visible(false);\r\n\r\n this.getSelectedText = function () {\r\n if (!editor.$previewWindow || !editor.$previewContent) return null;\r\n var txt = '';\r\n if (editor.$previewWindow[0].getSelection) // Not IE, use getSelection\r\n txt = editor.$previewWindow[0].getSelection().toString();\r\n else // IE, use selection object\r\n txt = editor.$previewContent[0].selection.createRange().text;\r\n return txt;\r\n };\r\n\r\n var traverseSpans = function (spans, insideChecked) {\r\n // span style=\"font-weight: normal\"\r\n\r\n if (spans && spans.length) {\r\n for (var i = 0; i < spans.length; i++) {\r\n var styleStr = spans.attr('style');\r\n if (styleStr.indexOf(this.CONST.propertyName) !== -1) { // 'style' value contains 'font-weight'\r\n\r\n var regex = new RegExp(this.CONST.propertyName + ':' + '\\\\s*[^;]+', 'i');\r\n var substrIndex = styleStr.search(regex);\r\n if (substrIndex === -1) return false;\r\n if (!insideChecked) return true;\r\n var substr = styleStr.substring(substrIndex).substring(this.CONST.propertyName.length + 1).trim();\r\n return substr.indexOf('normal') !== 0; //string should start with font-weight value\r\n }\r\n }\r\n }\r\n return false;\r\n }.bind(this);\r\n\r\n this.isInsideTag = function (insideChecked) {\r\n var startNode = editor.$previewWindow[0].getSelection().extentNode;\r\n if (startNode) {\r\n\r\n // \r\n var tagNode = null;\r\n if (this.CONST.tag) {\r\n tagNode = $(startNode).parentsUntil('.' + CONST.CORE.CONTENT_ELEMENT_CLASS, this.CONST.tag);\r\n if (tagNode && tagNode.length) return true;\r\n }\r\n\r\n var spans = $(startNode).parentsUntil('.' + CONST.CORE.CONTENT_ELEMENT_CLASS, 'span[style]');\r\n if (traverseSpans(spans, insideChecked)) return true;\r\n }\r\n return false;\r\n };\r\n\r\n\r\n this.hasContentTags = function () {\r\n\r\n if (this.isInsideTag()) return true;\r\n\r\n var startNode, tagNode, spans;\r\n\r\n // search inside editable DOM\r\n\r\n var controlInfo = PreviewHelper.getControlInfo(this.control().getTopLevelFacade());\r\n if (!controlInfo) return false;\r\n startNode = controlInfo.controlDoms;\r\n\r\n\r\n if (this.CONST.tag) {\r\n tagNode = startNode.find(this.CONST.tag);\r\n if (tagNode && tagNode.length) return true;\r\n }\r\n\r\n spans = startNode.find('span[style]');\r\n return traverseSpans(spans);\r\n };\r\n\r\n this.updateContentEditing = function () {\r\n if (!this.isContentEditing) return;\r\n\r\n var txt = this.getSelectedText();\r\n if (txt === null) return;\r\n\r\n if (!editor.contentEditorController.isEditing) {\r\n this.isContentEditing(false);\r\n return;\r\n }\r\n\r\n var controlInfo = PreviewHelper.getControlInfo(this.control().getTopLevelFacade());\r\n if (!controlInfo) return;\r\n\r\n // if this.control() is not content editable - set false and return\r\n var controlEditor = ControlStorageController.getEditorJson(controlInfo.control.getPseudoStack());\r\n if (!controlEditor.view || !controlEditor.view.contentProvider) {\r\n this.isContentEditing(false);\r\n return;\r\n }\r\n\r\n var allText = controlInfo.dom[0].innerText;\r\n\r\n var contentVal = this.valueReadContent();//this.getContentValueByTag();\r\n var controlVal = this.valueReadControl();\r\n\r\n var control = this.control();\r\n if (control instanceof ComputedControlFacade && (this.CONST.tag === 'b' || this.CONST.tag === 'i')) {\r\n var attr = this.options.attr || this.CONST.controlPropertyName || this.CONST.propertyName;\r\n var propName = control.resolvePropertyName(this._typographyStyle ? (this._typographyStyle + '.' + attr) : attr);\r\n controlVal = control.getCssPropertyFromModel(control._resolveControl(), propName);\r\n }\r\n\r\n var res = txt.trim().length > 0 && txt.trim().length < allText.trim().length ||\r\n txt.trim().length > 0 &&\r\n (contentVal === this.CONST.contentValueChecked && (controlVal === this.CONST.valueNormal || controlVal === '') ||\r\n contentVal === this.CONST.contentValueNormal && controlVal === this.CONST.valueChecked);\r\n\r\n this.isContentEditing(res);\r\n };\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: this.isContentEditing() ? this.valueReadContent : function () {\r\n if (!this._valueChangeNotifier) {\r\n this._valueChangeNotifier = koObservableController.koBind(this.control(), null, this.valueReadControl.bind(this));\r\n }\r\n return this._valueChangeNotifier();\r\n }.bind(this),\r\n write: function (value) {\r\n if (this.isContentEditing()) {\r\n this.valueWriteContent(value);\r\n } else {\r\n\r\n var controlInfo = PreviewHelper.getControlInfo(this.control().getTopLevelFacade());\r\n\r\n if (controlInfo) {\r\n var txt = this.getSelectedText();\r\n var allText = controlInfo.dom[0].innerText;\r\n if (txt && txt.trim().length === allText.trim().length) { // all text selected\r\n var baseControl = this.control();\r\n if (baseControl instanceof ComputedControlFacade) {\r\n baseControl = baseControl._baseControlFacade;\r\n }\r\n this.valueWriteControl(value, baseControl);\r\n } else {\r\n this.valueWriteControl(value); // text is not selected\r\n }\r\n } else {\r\n this.valueWriteControl(value);\r\n }\r\n }\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n this.checked = ko.computed(function () {\r\n var value = this.value();\r\n if (this.isInsideTag()) return true;\r\n var checkedValue = this.isContentEditing() ? this.CONST.contentValueChecked : this.options.checkedValue || this.CONST.valueChecked;\r\n\r\n if (typeof checkedValue === 'boolean' && typeof value === 'string')\r\n value = value.toLowerCase() === 'true';\r\n else {\r\n if (this.options.propertyСumulative && typeof value !== 'boolean') {\r\n value = value || '';\r\n return (value.indexOf(checkedValue) !== -1);\r\n }\r\n }\r\n return value !== undefined && value === checkedValue;\r\n }, this, {deferEvaluation: true});\r\n\r\n this.valueUpdater = ko.observable(false);\r\n this.updateValueSubscription = function () {\r\n this.valueUpdater(!this.valueUpdater());\r\n }.bind(this);\r\n\r\n this.onPropertyChanged = function (commandName) {\r\n var attr = this.CONST.contentPropertyName;\r\n if (!attr) return;\r\n if (commandName.indexOf('Justify') === 0 && attr.indexOf('Justify') === 0 ||\r\n attr === commandName || commandName === this.CONST.heading ||\r\n commandName === this.CONST.alternatePropertyName) {\r\n this.valueUpdater(!this.valueUpdater());\r\n }\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.contentEditor.selectionChanged, this.updateValueSubscription);\r\n PubSubController.subscribe(Channels.font.editablePropertyChanged, this.onPropertyChanged);\r\n\r\n var typographyInfo = TypographyHelper.parseTypography(this.options.typography, this.control());\r\n this._typographyStyle = (this.options.paragraphOnly ? typographyInfo.paragraphTypographyStyle : null) || typographyInfo.typographyStyle;\r\n if (this.options.paragraphOnly)\r\n this._typographyStyle = TypographyHelper.removeLinkStateFromTypographyStyle(this._typographyStyle);\r\n\r\n if (this.options.checkHint) {\r\n var realOptions = $.extend({}, this.options);\r\n realOptions.checkHint = false;\r\n this.realValueProvider = PWStackHelper.getProvider(this.control().getTopSelectedControl(), {provider: realOptions});\r\n\r\n this.hint = this.value;\r\n this.value = ko.computed({\r\n read: function () {\r\n return this.realValueProvider.value();\r\n },\r\n write: function (value) {\r\n this.realValueProvider.value(value);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n }\r\n else\r\n this.hint = ko.observable(l(this.options.hint || ''));\r\n\r\n}\r\n\r\nUtils.extend(UIPFont, UIPCheckComputedEnable);\r\n\r\nUIPFont.prototype.valueReadControl = function () {\r\n 'use strict';\r\n var control = this.control();\r\n if (!this.enabled() && (control instanceof ComputedControlFacade && !this.isEnabledComputed(control, this.options.check)))\r\n return '';\r\n\r\n var attr = this.options.attr || this.CONST.controlPropertyName || this.CONST.propertyName;\r\n\r\n if (!attr)\r\n return '';\r\n\r\n if (this._typographyStyle)\r\n return control.css(this._typographyStyle, attr);\r\n else\r\n return control.css(attr);\r\n};\r\n\r\nUIPFont.prototype.valueReadControlForCombined = function (control) {\r\n 'use strict';\r\n\r\n if (!control) control = this.control();\r\n\r\n if (!this.enabled() && (control instanceof ComputedControlFacade && !this.isEnabledComputed(control, this.options.check)))\r\n return '';\r\n\r\n var attr = this.options.attr || this.CONST.controlPropertyName || this.CONST.propertyName;\r\n\r\n if (!attr)\r\n return '';\r\n\r\n if (this._typographyStyle)\r\n return control.css(this._typographyStyle, attr);\r\n else\r\n return control.css(attr);\r\n\r\n};\r\n\r\nUIPFont.prototype.valueWriteControl = function (value, control) {\r\n 'use strict';\r\n if (!control) control = this.control();\r\n if (this.options.useControlItself && control instanceof ComputedControlFacade)\r\n control = control.getTopSelectedControl();\r\n var attr = this.options.attr || this.CONST.controlPropertyName || this.CONST.propertyName;\r\n if (this._typographyStyle)\r\n control.css(this._typographyStyle, attr, value);\r\n else\r\n control.css(attr, value);\r\n\r\n};\r\n\r\nUIPFont.prototype.valueReadContent = function () {\r\n 'use strict';\r\n this.valueUpdater();\r\n var documentContentNode = editor.previewController.$currentFrame.contents()[0];\r\n try {\r\n if (!this.CONST.contentPropertyName) return null;\r\n\r\n if (typeof this.CONST.contentValueChecked === 'boolean') {\r\n return documentContentNode.queryCommandState(this.CONST.contentPropertyName);\r\n }\r\n return documentContentNode.queryCommandValue(this.CONST.contentPropertyName);\r\n\r\n } catch (e) {\r\n }\r\n};\r\n\r\nUIPFont.prototype.valueWriteContent = function (value, noPublish) {\r\n 'use strict';\r\n var cssValue = LessController.lessColorFontToCss(value);\r\n if (this.CONST.contentPropertyName === 'fontname') {\r\n GoogleFontsController.updateFamily(cssValue, this.valueReadContent());\r\n }\r\n var selectionRange = new SelectionRange(editor.previewController.$currentFrame);\r\n var documentContentNode = editor.previewController.$currentFrame.contents()[0];\r\n if (selectionRange.prepareRange()) {\r\n documentContentNode.designMode = \"on\";\r\n try {\r\n documentContentNode.execCommand(this.CONST.contentPropertyName, false, cssValue);\r\n } finally {\r\n documentContentNode.designMode = \"off\";\r\n selectionRange.dispose();\r\n }\r\n if (!noPublish)\r\n PubSubController.publish(Channels.font.editablePropertyChanged, this.CONST.contentPropertyName);\r\n } else {\r\n selectionRange.dispose();\r\n }\r\n};\r\n\r\nUIPFont.prototype.click = function () {\r\n 'use strict';\r\n var checkedValue = this.isContentEditing() ? this.CONST.contentValueChecked : this.options.checkedValue || this.CONST.valueChecked;\r\n var normalValue = this.isContentEditing() ? this.CONST.contentValueNormal : this.CONST.valueNormal;\r\n\r\n var resultValue = this.value();\r\n if (this.options.propertyСumulative && (typeof resultValue !== 'boolean')) {\r\n if (!this.checked()) {\r\n if (resultValue)\r\n resultValue = resultValue.replace(normalValue, '').trim();\r\n resultValue = (resultValue ? resultValue + ' ' : '') + checkedValue;\r\n }\r\n else {\r\n if (resultValue)\r\n resultValue = resultValue.replace(checkedValue, '').trim();\r\n if (!resultValue)\r\n resultValue = normalValue;\r\n }\r\n }\r\n else\r\n resultValue = this.checked() ? normalValue : checkedValue;\r\n this.value(resultValue);\r\n};\r\n\r\nUIPFont.prototype.dispose = function () {\r\n 'use strict';\r\n UIPFont.superclass.dispose.call(this);\r\n\r\n PubSubController.unsubscribe(Channels.contentEditor.selectionChanged, this.updateValueSubscription);\r\n PubSubController.unsubscribe(Channels.font.editablePropertyChanged, this.onPropertyChanged);\r\n\r\n if (this.hint.dispose)\r\n this.hint.dispose();\r\n if (this.realValueProvider)\r\n this.realValueProvider.dispose();\r\n};\r\n\r\nUIPFont.prototype.getItems = function (callback) {\r\n 'use strict';\r\n UIPFont.superclass.getItems.call(this, function (error, items) {\r\n this.processEmptyItem(items);\r\n callback(error, items);\r\n }.bind(this));\r\n};\r\n\r\nUIPFont.prototype.getInheritData = function () {\r\n 'use strict';\r\n function isInsidePassive(ctrl) {\r\n return ctrl.getPseudoStack().filter(function (item) {\r\n return item.propertyName && item.propertyName.toLowerCase().indexOf('passive') !== -1;\r\n }).length > 0;\r\n }\r\n\r\n try {\r\n var currentControl = this.control();\r\n var passiveControl = null;\r\n if (!currentControl.isTopControl() && currentControl.isStateControl() && !isInsidePassive(currentControl)) {\r\n $.each(currentControl.parent().directChildren(), function () {\r\n if (this && this.hasProp('constructorName') && isInsidePassive(this)) {\r\n passiveControl = this;\r\n return false;\r\n }\r\n });\r\n }\r\n if (passiveControl) {\r\n var currentComputedFacade = new ComputedControlFacade(SelectionResolver.getSelectionInfoById(passiveControl.prop('dataId')));\r\n return currentComputedFacade.getControlDataByProperty(this.options.attr || this.CONST.controlPropertyName || this.CONST.propertyName);\r\n } else {\r\n var controlInfo = PreviewHelper.getControlInfo(currentControl);\r\n var parentInfo = PreviewHelper.getControlParentInfo(controlInfo);\r\n if (!parentInfo)return null;\r\n var computedFacade = new ComputedControlFacade(SelectionResolver.getSelectionInfoById(parentInfo.control.prop('dataId')));\r\n return computedFacade.getControlDataByProperty(this.options.attr || this.CONST.controlPropertyName || this.CONST.propertyName);\r\n }\r\n } catch (e) {\r\n ErrorUtility.logWarning(e);\r\n return null;\r\n }\r\n};\r\n\r\nUIPFont.prototype.processEmptyItem = function (items, processValue) {\r\n 'use strict';\r\n if (this.control() instanceof ComputedControlFacade)\r\n return;\r\n processValue = processValue || function (value) {\r\n return value;\r\n };\r\n for (var i = 0; i < items.length; i++)\r\n if (!items[i].value) {\r\n var controlData = this.getInheritData();\r\n if (controlData) {\r\n var newCaption = l('Inherit') + ' (' + UIHelper.getCaption(controlData.controlFacade) + ': ' + LessController.lessColorFontToCss(processValue(controlData.value)) + ')';\r\n if (items[i].html)\r\n items[i].html = items[i].html.replace(items[i].caption, newCaption);\r\n items[i].caption = newCaption;\r\n }\r\n break;\r\n }\r\n};"
},
"UIPFontAllCaps.js": {
"type": "text",
"content": "/*exported UIPFontAllCaps*/\r\n/*global Utils, UIPFont */\r\n/**\r\n *\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPFontAllCaps(data) {\r\n 'use strict';\r\n\r\n data.CONST = {\r\n propertyName: 'text-transform',\r\n valueChecked: 'uppercase',\r\n valueNormal: 'none'\r\n };\r\n\r\n UIPFontAllCaps.superclass.constructor.call(this, data);\r\n}\r\nUtils.extend(UIPFontAllCaps, UIPFont);"
},
"UIPFontBold.js": {
"type": "text",
"content": "/*exported UIPFontBold*/\r\n/*global Utils, UIPFontCombined*/\r\n/**\r\n *\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPFontBold(data) {\r\n 'use strict';\r\n\r\n data.CONST = {\r\n propertyName: 'font-weight',\r\n valueChecked: 'bold',\r\n valueNormal: 'normal',\r\n\r\n contentPropertyName: 'bold',\r\n contentValueChecked: true,\r\n contentValueNormal: false,\r\n\r\n tag: 'b'\r\n };\r\n\r\n UIPFontBold.superclass.constructor.call(this, data);\r\n\r\n this._baseChecked = this.checked;\r\n this.checked = ko.computed(function () {\r\n var value = this.value();\r\n if (this.isContentEditing())\r\n return this._baseChecked();\r\n\r\n var weight = parseInt(value, 10);\r\n if (weight > 500) {\r\n return true;\r\n }\r\n return this._baseChecked();\r\n }, this, {deferEvaluation: true});\r\n}\r\nUtils.extend(UIPFontBold, UIPFontCombined);\r\n\r\nUIPFontBold.prototype.dispose = function () {\r\n 'use strict';\r\n UIPFontBold.superclass.dispose.call(this);\r\n if (this._baseChecked.dispose)\r\n this._baseChecked.dispose();\r\n};\r\n"
},
"UIPFontBox.js": {
"type": "text",
"content": "/*exported UIPFontBox*/\n/*global Utils, UIPFont, CONST*/\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPFontBox(data) {\n 'use strict';\n UIPFontBox.superclass.constructor.call(this, data);\n\n this.baseControl = this.control;\n\n this.control = ko.computed(function () {\n if (this._typographyStyle) {\n var typographyControlFacade = function (typography) {\n this.typography = typography;\n var parentCss = this.css;\n this.css = function() {\n var args = [];\n var idx = 0;\n\n if (CONST.RESPONSIVE_MODES.indexOf(arguments[0]) !== -1 || CONST.DEFAULT_RESPONSIVE_MODE === arguments[0]){\n args.push(arguments[0]);\n idx++;\n }\n\n if (typography) {\n if (arguments[idx].indexOf('Typography') === 0) {\n idx++;\n }\n args.push(typography);\n }\n for (var i=idx; i/, ''); // remove first 'li'\r\n content = content.replace(//g, '
'); // replace others to 'br'\r\n content = content.replace(/<\\/li>/g, '');\r\n\r\n tag = this.emptyTag;\r\n } else {\r\n content = '' + content;\r\n content = content.replace(/
/g, '<\\/li>');\r\n content = content + '';\r\n\r\n tag = this.CONST.tag;\r\n }\r\n newContent = editor.contentEditorController.prepareContentForSaving(content, this.control(), false);\r\n control.prop('content', newContent);\r\n control.prop('textTag', tag);\r\n }\r\n\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n this.checked = ko.computed(function () {\r\n return this.value();\r\n }, this, {deferEvaluation: true});\r\n}\r\n\r\nUtils.extend(UIPFontLists, UIPFont);\r\n"
},
"UIPFontNumbering.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 11.04.2016.\r\n */\r\n/* exported UIPFontNumbering*/\r\n/*global Utils, UIPFontLists */\r\nfunction UIPFontNumbering(data) {\r\n 'use strict';\r\n\r\n data.CONST = {\r\n contentPropertyName: 'insertOrderedList',\r\n alternatePropertyName: 'insertUnorderedList',\r\n contentValueChecked: true,\r\n contentValueNormal: false,\r\n\r\n tag: 'ol',\r\n otherTag: 'ul',\r\n emptyTag: 'p'\r\n };\r\n\r\n UIPFontNumbering.superclass.constructor.call(this, data);\r\n}\r\nUtils.extend(UIPFontNumbering, UIPFontLists);"
},
"UIPFontSchema.js": {
"type": "text",
"content": "/*global Utils, UIPPresets, FontFamilyController, StandardFontFamilyProvider, GoogleFontFamilyProvider,\r\n StandardFontFamilyProvider, ErrorUtility, koObservableController, AppSettings */\r\n\r\nfunction UIPFontSchema(data) {\r\n 'use strict';\r\n UIPFontSchema.superclass.constructor.call(this, data);\r\n\r\n this.options.ignoreSelection = false;\r\n this.options.selectValue = false;\r\n this.baseValue = this.value;\r\n this.value = ko.computed({\r\n read: function () {\r\n if (!this._valueChangeNotifier) {\r\n this._valueChangeNotifier = koObservableController.koBind(this.control(), null, function (control) {\r\n var currentValue = {\r\n headingsFontFamily: control.find('headingsFontFamily').prop('family'),\r\n sansFontFamily: control.find('sansFontFamily').prop('family')\r\n };\r\n this.getItems(function (error, items) {\r\n var found = false;\r\n for (var i = 0; i < items.length; i++)\r\n if (items[i].value.headingsFontFamily === currentValue.headingsFontFamily && items[i].value.sansFontFamily === currentValue.sansFontFamily) {\r\n found = true;\r\n break;\r\n }\r\n if (!found) {\r\n var item = {value: currentValue};\r\n this.updateItem(item);\r\n items = [item].concat(items);\r\n }\r\n this.items(items);\r\n }.bind(this));\r\n return currentValue;\r\n }.bind(this));\r\n }\r\n return this._valueChangeNotifier();\r\n },\r\n write: function (value) {\r\n this.baseValue(value);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPFontSchema, UIPPresets);\r\n\r\nUIPFontSchema.prototype.updateItem = function (item) {\r\n 'use strict';\r\n\r\n var generateFont = function (family, size) {\r\n var targetHeight = parseInt(size, 10);\r\n\r\n var font = StandardFontFamilyProvider.getFontFamily(family) ||\r\n GoogleFontFamilyProvider.getFontFamily(family) ||\r\n StandardFontFamilyProvider.getFontFamily(\"Arial\");\r\n\r\n var scale = targetHeight / font.thmbn.height;\r\n var srcHeight = font.thmbn.srcHeight * scale;\r\n var srcWidth = font.thmbn.srcWidth * scale;\r\n var top = font.thmbn.y * scale;\r\n var left = font.thmbn.x * scale;\r\n var width = font.thmbn.width * scale;\r\n\r\n return {\r\n height: targetHeight + \"px\",\r\n width: width + \"px\",\r\n top: top + \"px\",\r\n left: left + \"px\",\r\n src: font.thmbn.src,\r\n srcWidth: srcWidth + \"px\",\r\n srcHeight: srcHeight + \"px\",\r\n family: family,\r\n alt: font.alt,\r\n size: size\r\n };\r\n }.bind(this);\r\n\r\n\r\n var remakeItemHtml = function (font) {\r\n item.html += \"\" + \"
\" + \"
\";\r\n };\r\n\r\n item.properties = item.value;\r\n item.caption = item.value.caption;\r\n var headingFont = generateFont(FontFamilyController.getFirstFamilyName(item.value.headingsFontFamily), \"25px\");\r\n var contentFont = generateFont(FontFamilyController.getFirstFamilyName(item.value.sansFontFamily), \"18px\");\r\n item.fonts = [headingFont, contentFont];\r\n\r\n item.html = \"\";\r\n\r\n item.caption = \"\";\r\n item.css = \".PWFontSchemaItem .img { vertical-align: middle; } .PWFontSchemaItem .caption { text-align: left; line-height: 18px; } .PWFontSchemaItem.active { border-color: #7FCEFA; }\";\r\n};\r\n\r\n\r\nUIPFontSchema.prototype.getItems = function (callback) {\r\n 'use strict';\r\n UIPFontSchema.superclass.getItems.call(this, function (error, items) {\r\n ErrorUtility.logError(error);\r\n for (var i = 0; i < items.length; i++)\r\n this.updateItem(items[i]);\r\n callback(null, items);\r\n }.bind(this));\r\n};\r\n\r\nUIPFontSchema.prototype.dispose = function () {\r\n 'use strict';\r\n UIPFontSchema.superclass.dispose.call(this);\r\n this.baseValue.dispose();\r\n};"
},
"UIPFontSchemeSize.js": {
"type": "text",
"content": "/*exported UIPFontSchemeSize*/\n/*global koObservableController, Utils, UIProvider, Unit, LessController */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPFontSchemeSize(data) {\n 'use strict';\n UIPFontSchemeSize.superclass.constructor.call(this, data);\n\n this.options.allowedUnits = 'px';\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n if (!this._valueChangeNotifier) {\n this._valueChangeNotifier = koObservableController.koBind(this.control(), null, function (control) {\n return LessController.lessColorFontToCss('round(' + control.prop(this.options.attr) + ')');\n }.bind(this));\n }\n return this._valueChangeNotifier();\n\n },\n write: function (value) {\n var numericValue = parseInt(value, 10);\n if (isNaN(numericValue))\n return;\n\n var lessFontSize = Unit.parse(window.bootstrap.variables.baseFontSize);\n\n if (lessFontSize.size !== 0) {\n var factor = (numericValue / lessFontSize.size).toFixed(2);\n this.control().prop(this.options.attr, 'round(@bd-base-font-size * ' + factor.toString() + ')');\n return;\n }\n\n this.control().prop(this.options.attr, (numericValue + 'px').toString());\n },\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPFontSchemeSize, UIProvider);\n"
},
"UIPFontSize.js": {
"type": "text",
"content": "/*global Utils, editor, TypographyHelper, FontSizeGalleryController, Unit, UIPFont, LessController, _$, ComputedControlFacade */\r\nfunction UIPFontSize(data) {\r\n 'use strict';\r\n\r\n data.CONST = {\r\n contentPropertyName: 'fontsize',\r\n controlPropertyName: 'font-size',\r\n contentSizeValues: ['@bd-content-font-size-small', '@bd-base-font-size', '@bd-content-font-size-large'],\r\n headingsSizeValues: ['@bd-headings-font-size-xsmall', '@bd-base-font-size', '@bd-headings-font-size-small',\r\n '@bd-headings-font-size-medium', '@bd-headings-font-size-large', '@bd-headings-font-size-xlarge']\r\n };\r\n\r\n this._predefinedItems = FontSizeGalleryController.getItems(\r\n this.isHeading(data.control),\r\n false);\r\n\r\n this.filterItems = function (items) {\r\n var predefinedItems = this._predefinedItems;\r\n\r\n var sizes = [];\r\n $.each(predefinedItems, function (index, value) {\r\n value.originalSize = value.size;\r\n var roundedSize = Math.round(parseFloat(value.size));\r\n if (roundedSize && !isNaN(roundedSize))\r\n value.size = roundedSize + 'px';\r\n\r\n sizes.push(value.size);\r\n }.bind(this));\r\n\r\n var toRemove = [];\r\n\r\n $.each(items, function (index, value) {\r\n if (sizes.indexOf(value.value) !== -1)\r\n toRemove.push(value);\r\n }.bind(this));\r\n\r\n $.each(toRemove, function (index, value) {\r\n items.splice(items.indexOf(value), 1);\r\n }.bind(this));\r\n }.bind(this);\r\n\r\n UIPFontSize.superclass.constructor.call(this, data);\r\n\r\n this.options.defaultUnit = 'px';\r\n this.options.fullWidthHtml = true;\r\n\r\n var prop = this.options.checkHint ? 'hint' : 'value';\r\n this.prevValue = this[prop];\r\n this[prop] = ko.computed({ /* CodeAnalyser ignore:line */\r\n read: function () {\r\n var value = this.prevValue();\r\n if (value && value.indexOf('@') !== -1) {\r\n var resolvedValue = LessController.lessColorFontToCss('round(' + value + ')');\r\n var needResolve = value.indexOf('*') !== -1;\r\n if (!needResolve) {\r\n var items = this.items();\r\n var found = false;\r\n for (var i = 0; i < items.length; i++) {\r\n if (items[i].value === value) {\r\n found = true;\r\n break;\r\n }\r\n if (items[i].size === resolvedValue) {\r\n found = true;\r\n value = items[i].value;\r\n break;\r\n }\r\n }\r\n needResolve = !found;\r\n }\r\n if (needResolve)\r\n value = resolvedValue;\r\n }\r\n\r\n return value;\r\n },\r\n write: function (value) {\r\n if (!this.isContentEditing())\r\n value = this.prepareFontSizeValue(value);\r\n if (value) {\r\n var unit = Unit.parse(value);\r\n if (!unit.size && value.indexOf('round') === -1)\r\n value = 'round(' + value + ')';\r\n }\r\n this.prevValue(value);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPFontSize, UIPFont);\r\n\r\nUIPFontSize.prototype.dispose = function () {\r\n 'use strict';\r\n UIPFontSize.superclass.dispose.call(this);\r\n this.prevValue.dispose();\r\n};\r\n\r\nUIPFontSize.prototype.valueReadContent = function () {\r\n 'use strict';\r\n this.valueUpdater();\r\n\r\n /* Firefox can not receive font size in content editable mode.\r\n This code evaluates an actual font size\r\n and returns the nearest value from content-editable-font-size list.\r\n * */\r\n try {\r\n var innerWindow = editor.$previewWindow[0];\r\n if (innerWindow.getSelection) {\r\n var sel = innerWindow.getSelection();\r\n if (sel.rangeCount) {\r\n var containerEl = sel.getRangeAt(0).commonAncestorContainer;\r\n // Make sure we have an element rather than a text node\r\n if (containerEl.nodeType === 3) {\r\n containerEl = containerEl.parentNode;\r\n }\r\n var computedStr = window.getComputedStyle(containerEl, null).fontSize;\r\n var items = this.items();\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n if (items[i].caption === computedStr) return items[i].value;\r\n }\r\n return '';\r\n }\r\n }\r\n\r\n } catch (e) {\r\n }\r\n};\r\n\r\nUIPFontSize.prototype.getItems = function (callback) {\r\n 'use strict';\r\n var items, i;\r\n if (this.isContentEditing()) {\r\n items = FontSizeGalleryController.getContentEditorItems();\r\n }\r\n else if (!this.options.getCustom) {\r\n items = this._predefinedItems;\r\n }\r\n else {\r\n this.options.items = FontSizeGalleryController.getCustomSizes();\r\n if (this.options.removeEmptyItem)\r\n for (i = 0; i < this.options.items.length; i++)\r\n if (!this.options.items[i].value) {\r\n this.options.items.splice(i, 1);\r\n break;\r\n }\r\n\r\n for (i = 0; i < this.options.items.length; i++)\r\n this.options.items[i].category = \"Font Size\";\r\n this.filterItems(this.options.items);\r\n if (this.options.getPredefined)\r\n items = [].concat(this._predefinedItems, this.options.items);\r\n else items = this.options.items;\r\n }\r\n this.processEmptyItem(items);\r\n callback(null, items);\r\n};\r\n\r\nUIPFontSize.prototype.trySetValue = function (value) {\r\n 'use strict';\r\n if (!this.isContentEditing()) {\r\n var unit = Unit.parse(value);\r\n this.value(unit.value);\r\n return unit.value;\r\n }\r\n value = parseInt(value, 10);\r\n if (isNaN(value))return false;\r\n var items = this.items();\r\n var closest = 0;\r\n for (var i = 0; i < items.length; i++)\r\n if (Math.abs(parseInt(items[closest].caption, 10) - value) > Math.abs(parseInt(items[i].caption, 10) - value))\r\n closest = i;\r\n this.value(items[closest].value);\r\n return items[closest].caption;\r\n};\r\n\r\nUIPFontSize.prototype.prepareFontSizeValue = function (value) {\r\n 'use strict';\r\n if (!value)\r\n return '';\r\n\r\n var newValue = value;\r\n var parsedUnit = {size: '', type: ''};\r\n if (typeof newValue === 'string') {\r\n var isPredefined = false;\r\n if (newValue.indexOf('@') !== -1) {\r\n\r\n var sizeItems = this.items();\r\n $.each(sizeItems, function () {\r\n var currentSize = this;\r\n if (currentSize.value === newValue) {\r\n isPredefined = true;\r\n return false;\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n if (isPredefined)\r\n return newValue;\r\n\r\n parsedUnit = Unit.parse(newValue, 'px');\r\n if (!parsedUnit || Object.keys(parsedUnit).length === 0)\r\n parsedUnit = {size: '', type: ''};\r\n\r\n if ($.isNumeric(parsedUnit.size)) {\r\n return this.createLess(parsedUnit.size, parsedUnit.type);\r\n }\r\n }\r\n newValue = newValue.toString().replace(/[^0-9]/gi, '');\r\n var isCustom = $.isNumeric(newValue);\r\n if (isCustom) {\r\n return this.createLess(newValue, parsedUnit.type);\r\n }\r\n\r\n return newValue;\r\n};\r\n\r\nUIPFontSize.prototype.createLess = function (numericValue, units) {\r\n 'use strict';\r\n if (!units)\r\n units = 'px';\r\n\r\n\r\n var items = this._predefinedItems;\r\n var resultValue = null;\r\n var variableName = null;\r\n if (items && items.length !== 0) {\r\n var diff = -1;\r\n\r\n $.each(items, function (index, value) {\r\n\r\n if (!value.hasOwnProperty('originalSize') || value.originalSize.indexOf(units) === -1)\r\n return true;\r\n\r\n var parsedValue = Unit.parse(value.originalSize);\r\n if (!parsedValue || Object.keys(parsedValue).length === 0)\r\n return true;\r\n\r\n if (!$.isNumeric(parsedValue.size)) {\r\n return true;\r\n }\r\n\r\n var difference = Math.abs(parsedValue.size - numericValue);\r\n if (diff >= 0 && difference >= diff)\r\n return true;\r\n\r\n diff = difference;\r\n resultValue = parsedValue;\r\n variableName = value.value;\r\n }.bind(this));\r\n }\r\n\r\n var lessFontSize = resultValue || Unit.parse(window.bootstrap.variables.baseFontSize);\r\n\r\n if (units === lessFontSize.type) {\r\n if (lessFontSize.size !== 0) {\r\n var factor = (numericValue / lessFontSize.size).toFixed(2);\r\n variableName = variableName || '@bd-base-font-size';\r\n return 'round(' + variableName + \" * \" + factor.toString() + ')';\r\n }\r\n }\r\n\r\n numericValue = (units === 'em') ? numericValue : Math.round(numericValue);\r\n return (numericValue + units).toString();\r\n};\r\n\r\n\r\nUIPFontSize.prototype.isHeading = function (control) {\r\n 'use strict';\r\n var typoStyle = (control instanceof ComputedControlFacade) ? control._typoStyle : TypographyHelper.getTypographyProperties(_$(control), editor.$previewContent).typoStyle;\r\n return TypographyHelper.isHeadingsStyle(typoStyle);\r\n};\r\n\r\nUIPFontSize.prototype.getContentFontBootstrapSize = function (value) {\r\n 'use strict';\r\n\r\n if (typeof value === \"string\") {\r\n value = parseInt(value, 10);\r\n }\r\n\r\n var res = null;\r\n if (value > 0 && value < 8) {\r\n value--;\r\n //convert to bootstrap\r\n if (this.isHeading(this.control()) || this.isContentEditing()) {\r\n res = this.CONST.headingsSizeValues[value];\r\n } else {\r\n res = this.CONST.contentSizeValues[value];\r\n }\r\n }\r\n\r\n return res;\r\n};\r\n\r\nUIPFontSize.prototype.getContentFontNumberSize = function (value) {\r\n 'use strict';\r\n\r\n var index = this.CONST.headingsSizeValues.indexOf(value);\r\n if (index === -1)\r\n index = this.CONST.contentSizeValues.indexOf(value);\r\n\r\n if (index >= 0) return ++index;\r\n return -1;\r\n};\r\n\r\n\r\n\r\n"
},
"UIPFontSizeIncDec.js": {
"type": "text",
"content": "/* global Utils, UIPFontSize, LessController, Unit */\r\n/* exported UIPFontSizeIncDec */\r\n\r\nfunction UIPFontSizeIncDec(data) {\r\n 'use strict';\r\n this.FontSizeIncDec_CONST = {\r\n PX_INC: 10,\r\n PX_DEC: 1,\r\n PX_MIN: 1,\r\n EM_INC: 0.1,\r\n EM_DEC: 0.1,\r\n EM_MIN: 0.1,\r\n DEFAULT_INC: 1,\r\n DEFAULT_DEC: 1,\r\n DEFAULT_MIN: 1\r\n };\r\n data.options.getCustom = true;\r\n data.options.getPredefined = true;\r\n UIPFontSizeIncDec.superclass.constructor.call(this, data);\r\n\r\n this.highlight.dispose();\r\n this.highlight = ko.computed(function () {\r\n return false;\r\n });\r\n\r\n this.increase = data.options.increase ? true : false;\r\n var compareItems = function compareItems(a, b) {\r\n var aValue,\r\n bValue\r\n ;\r\n aValue = parseInt(LessController.lessColorFontToCss(a.value));\r\n bValue = parseInt(LessController.lessColorFontToCss(b.value));\r\n if (aValue < bValue) {\r\n return -1;\r\n }\r\n if (aValue > bValue) {\r\n return 1;\r\n }\r\n return 0;\r\n };\r\n this.findNearestGreater = function (value) {\r\n var i,\r\n item,\r\n len,\r\n workItems = this.sortedItems\r\n ;\r\n for (i = 0, len = workItems.length; i < len; i++) {\r\n item = workItems[i];\r\n if (parseInt(LessController.lessColorFontToCss(item.value)) > value) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }.bind(this);\r\n this.findNearestLess = function (value) {\r\n var i,\r\n item,\r\n len,\r\n workItems = this.sortedItems\r\n ;\r\n for (i = workItems.length - 1, len = workItems.length; i >= 0; i--) {\r\n item = workItems[i];\r\n if (parseInt(LessController.lessColorFontToCss(item.value)) < value) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }.bind(this);\r\n this.sortedItems = this.items().sort(compareItems);\r\n this.sortedValues = this.sortedItems.map(function (item) {\r\n var parsedValue = parseInt(LessController.lessColorFontToCss(item.value));\r\n if (!isNaN(parsedValue)) {\r\n return parsedValue;\r\n }\r\n });\r\n\r\n this.baseVisible = this.enabled;\r\n this.enabled = ko.computed({\r\n read: function () {\r\n return this.baseVisible() && this.value();\r\n },\r\n write: function (value) {\r\n this.baseVisible(value);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPFontSizeIncDec, UIPFontSize);\r\n\r\nUIPFontSizeIncDec.prototype.dispose = function () {\r\n 'use strict';\r\n UIPFontSizeIncDec.superclass.dispose.call(this);\r\n if (this.baseVisible.dispose)\r\n this.baseVisible.dispose();\r\n};\r\n\r\nUIPFontSizeIncDec.prototype.click = function click() {\r\n 'use strict';\r\n var _value,\r\n unit,\r\n item,\r\n newValue,\r\n size,\r\n parsedSize,\r\n min = this.sortedValues[0],\r\n max = this.sortedValues[this.sortedValues.length - 1],\r\n newSize,\r\n findNearest = function () {\r\n item = this.increase ? this.findNearestGreater(parsedSize) : this.findNearestLess(parsedSize);\r\n var tUnit = Unit.parse(item.value);\r\n if (tUnit.type === 'px') return tUnit.size;\r\n return item.value;\r\n }.bind(this)\r\n ;\r\n _value = this.value();\r\n newValue = this.value();\r\n if (_value) {\r\n if (_value.indexOf('@') !== -1) {\r\n _value = LessController.lessColorFontToCss(_value);\r\n }\r\n unit = Unit.parse(_value);\r\n switch (unit.type) {\r\n case 'px':\r\n parsedSize = parseInt(unit.size);\r\n if (this.increase) {\r\n if (parsedSize < min) {\r\n newSize = parsedSize + this.FontSizeIncDec_CONST.PX_DEC;\r\n }\r\n if (parsedSize >= min && parsedSize < max) {\r\n newSize = findNearest();\r\n }\r\n if (parsedSize >= max) {\r\n newSize = parsedSize + this.FontSizeIncDec_CONST.PX_INC;\r\n }\r\n if (typeof newSize === 'string' && newSize.indexOf('@') !== -1) {\r\n newValue = newSize;\r\n } else {\r\n newValue = newSize + unit.type;\r\n }\r\n }\r\n if (!this.increase) {\r\n if (parsedSize <= min) {\r\n newSize = parsedSize - this.FontSizeIncDec_CONST.PX_DEC;\r\n }\r\n if (parsedSize > min && parsedSize <= max) {\r\n newSize = findNearest();\r\n }\r\n if (parsedSize > max) {\r\n if (parsedSize - this.FontSizeIncDec_CONST.PX_INC < min) {\r\n newSize = findNearest();\r\n } else {\r\n newSize = parsedSize - this.FontSizeIncDec_CONST.PX_INC;\r\n }\r\n }\r\n if (typeof newSize === 'string' && newSize.indexOf('@') !== -1) {\r\n newValue = newSize;\r\n } else {\r\n newValue = newSize < this.FontSizeIncDec_CONST.PX_MIN ? _value : newSize + unit.type;\r\n }\r\n }\r\n break;\r\n case 'em':\r\n parsedSize = parseFloat(unit.size);\r\n size = this.increase ? parsedSize + this.FontSizeIncDec_CONST.EM_INC : parsedSize - this.FontSizeIncDec_CONST.EM_DEC;\r\n size = size < this.FontSizeIncDec_CONST.EM_MIN ? parsedSize : size;\r\n newValue = size + unit.type;\r\n break;\r\n default:\r\n parsedSize = parseInt(unit.size);\r\n size = this.increase ? parsedSize + this.FontSizeIncDec_CONST.DEFAULT_INC : parsedSize - this.FontSizeIncDec_CONST.DEFAULT_DEC;\r\n size = size < this.FontSizeIncDec_CONST.DEFAULT_MIN ? parsedSize : size;\r\n newValue = size + unit.type;\r\n }\r\n this.value(newValue);\r\n }\r\n};"
},
"UIPFontSizeInput.js": {
"type": "text",
"content": "/*global Utils, UIPFontSize, LessController */\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPFontSizeInput(data) {\n 'use strict';\n\n UIPFontSizeInput.superclass.constructor.call(this, data, true);\n\n this.baseValue = this.value;\n this.value = ko.computed({\n read: function () {\n var value = this.baseValue();\n if (value && value.indexOf('@') !== -1)\n value = LessController.lessColorFontToCss('round(' + value + ')');\n\n var items = this.items();\n if (this.isContentEditing() && $.isNumeric(value) && value <= items.length) {\n return items[value - 1].caption;\n }\n\n return value;\n },\n write: function (value) {\n this.baseValue(value);\n },\n owner: this,\n deferEvaluation: true\n });\n\n this.getItems = function (callback) {\n UIPFontSizeInput.superclass.getItems.call(this, callback);\n };\n}\n\nUtils.extend(UIPFontSizeInput, UIPFontSize);\n\nUIPFontSizeInput.prototype.dispose = function () {\n 'use strict';\n UIPFontSizeInput.superclass.dispose.call(this);\n this.baseValue.dispose();\n};\n"
},
"UIPFontStrikeThrough.js": {
"type": "text",
"content": "/*global Utils, UIPFont*/\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPFontStrikeThrough(data) {\n 'use strict';\n\n data.options.propertyСumulative = true;\n data.CONST = {\n propertyName: 'text-decoration',\n valueChecked: 'line-through',\n valueNormal: 'none',\n\n contentPropertyName: 'strikeThrough',\n contentValueChecked: true,\n contentValueNormal: false\n };\n\n UIPFontStrikeThrough.superclass.constructor.call(this, data);\n}\nUtils.extend(UIPFontStrikeThrough, UIPFont);\n\n\n\n\n"
},
"UIPFontUnderline.js": {
"type": "text",
"content": "/*global Utils, UIPFont*/\r\n/**\r\n *\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPFontUnderline(data) {\r\n 'use strict';\r\n\r\n data.options.propertyСumulative = true;\r\n\r\n data.CONST = {\r\n propertyName: 'text-decoration',\r\n valueChecked: 'underline',\r\n valueNormal: 'none',\r\n\r\n contentPropertyName: 'underline',\r\n contentValueChecked: true,\r\n contentValueNormal: false\r\n };\r\n UIPFontUnderline.superclass.constructor.call(this, data);\r\n}\r\nUtils.extend(UIPFontUnderline, UIPFont);"
},
"UIPFormAtrrChange.js": {
"type": "text",
"content": "/*global Utils, UIProvider, editor, _$ */\r\nfunction UIPFormAtrrChange(data) {\r\n 'use strict';\r\n UIPFormAtrrChange.superclass.constructor.call(this, data);\r\n\r\n this.prevValue = this.value;\r\n this.value = ko.computed({\r\n read: function () {\r\n return this.prevValue();\r\n },\r\n write: function (value) {\r\n var prop = this.options.attr;\r\n var form = this.control().getTopLevelFacade();//getForm();\r\n if (form) {\r\n var length = form.find('items').prop('length');\r\n var controls = editor.themeController.getControls();\r\n for (var i = 0; i 0 && this.index < gradient.stops.length)\n return gradient.stops[this.index].color.value;\n return backgroundValue.color.value;\n }.bind(this));\n }\n return this._valueChangeNotifier();\n }.bind(this),\n write: function (value) {\n var backgroundValue = Background.fromControl(this.control());\n var gradient = backgroundValue.gradient();\n if (gradient.stops.length > 0) {\n var stop = new window.GradientStop(value, gradient.stops[this.index].position);\n gradient.stops.splice(this.index, 1, stop);\n } else\n backgroundValue.color.value = value;\n\n backgroundValue.applyControl(this.control());\n }.bind(this),\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPGradientPointColor, UIProvider);\n"
},
"UIPGradientPointPosition.js": {
"type": "text",
"content": "/*global Utils, UIProvider, koObservableController, Background, Unit, StateController*/\r\n\r\nfunction UIPGradientPointPosition(data) {\r\n 'use strict';\r\n UIPGradientPointPosition.superclass.constructor.call(this, data);\r\n\r\n this.index = this.options.pointIndex || 0;\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n if (!this._valueChangeNotifier) {\r\n this._valueChangeNotifier = koObservableController.koBind(this.control(), null, function (control) {\r\n var backgroundValue = Background.fromControl(control);\r\n var gradient = backgroundValue.gradient();\r\n if (gradient.stops.length > 0 && this.index < gradient.stops.length)\r\n return gradient.stops[this.index].position.value;\r\n return '0';\r\n }.bind(this));\r\n }\r\n return this._valueChangeNotifier();\r\n }.bind(this),\r\n write: function (value) {\r\n var backgroundValue = Background.fromControl(this.control());\r\n var gradient = backgroundValue.gradient();\r\n if (gradient.stops.length === 0) return;\r\n var stop = new window.GradientStop(gradient.stops[this.index].color, Unit.parse(value));\r\n gradient.stops.splice(this.index, 1);\r\n gradient.addStop(stop);\r\n backgroundValue.applyControl(this.control());\r\n StateController.setState(this.options.stateName, gradient.stops.indexOf(stop).toString());\r\n }.bind(this),\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPGradientPointPosition, UIProvider);"
},
"UIPGradientPoints.js": {
"type": "text",
"content": "/*global Utils, UIPTabs, SerializeController, koObservableController, Background, StateController*/\n/*exported UIPGradientPoints*/\n\nfunction UIPGradientPoints(data) {\n 'use strict';\n UIPGradientPoints.superclass.constructor.call(this, data);\n\n this.background = koObservableController.koBind(this.control(), null, function (value) {\n return Background.fromControl(value);\n });\n\n this.__originalValue = this.value;\n this.value = ko.computed({\n read: function () {\n return this.__originalValue();\n },\n write: function (value) {\n this.__originalValue(value);\n StateController.setState(this.stateId, value);\n },\n owner: this,\n deferEvaluation: true\n }\n );\n\n this.modelGradient = ko.computed(function () {\n var gradient = this.background().gradient();\n var len = gradient.stops.length;\n var json = this.options.tabWidgets ? SerializeController.controlSerialize(this.options.tabWidgets) : null;\n\n var items = [];\n for (var pointIndex = 0; pointIndex < len; pointIndex++) {\n var newTab = {\n value: pointIndex.toString(),\n caption: (pointIndex + 1).toString(),\n widgets: (json ? JSON.parse(json) : null)\n };\n\n if (newTab.widgets) {\n for (var widgetIndex = 0, widgetLen = newTab.widgets.length; widgetIndex < widgetLen; widgetIndex++)\n newTab.widgets[widgetIndex].pointIndex = pointIndex;\n }\n items.push(newTab);\n }\n if (items.length !== this.items.peek().length)\n this.items(items);\n return gradient;\n }, this, {deferEvaluation: false});\n}\n\nUtils.extend(UIPGradientPoints, UIPTabs);\n\nUIPGradientPoints.prototype.dispose = function () {\n 'use strict';\n UIPGradientPoints.superclass.dispose.call(this);\n this.background.dispose();\n this.modelGradient.dispose();\n};\n"
},
"UIPGradientView.js": {
"type": "text",
"content": "/*exported UIPGradientView*/\r\n/*global Utils, UIProvider, Background, LessController, Color, Gradient, _$, koObservableController */\r\n\r\nfunction UIPGradientView(data) {\r\n 'use strict';\r\n UIPGradientView.superclass.constructor.call(this, data);\r\n\r\n this.value = ko.computed({\r\n read: function () {\r\n if (!this._valueChangeNotifier) {\r\n this._valueChangeNotifier = koObservableController.koBind(this.control(), \"\", function (control) {\r\n return Background.fromControl(control).gradient().toString();\r\n }.bind(this));\r\n }\r\n return this._valueChangeNotifier();\r\n },\r\n write: function (value) {\r\n var control = this.control();\r\n\r\n var background = Background.fromControl(control);\r\n for (var i = 0; i < background.images.length; i++)\r\n if (background.images[i] instanceof Gradient) {\r\n if (value.indexOf('linear-gradient') !== -1) {\r\n background.images[i] = Gradient.parse(value);\r\n\r\n var values = _$(control).css('background-attachment').split(','), attachment;\r\n if (control.prop('constructorName') === 'PageBackground') {\r\n attachment = 'fixed';\r\n if (values.indexOf('scroll') !== -1)\r\n attachment = 'scroll';\r\n } else {\r\n attachment = 'scroll';\r\n if (values.indexOf('fixed') !== -1)\r\n attachment = 'fixed';\r\n }\r\n background.images[i].attachment = attachment;\r\n }\r\n else\r\n background.images[i].clear();\r\n break;\r\n }\r\n background.applyControl(control);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n this.toString = ko.computed(function () {\r\n\r\n var value = this.value();\r\n if (!value) return '';\r\n\r\n if (value === \"linear-gradient(0deg, rgba(0,0,0,0) 0%)\")\r\n return '';\r\n return '';\r\n }, this, {deferEvaluation: true});\r\n}\r\n\r\nUtils.extend(UIPGradientView, UIProvider);"
},
"UIPHasColumn.js": {
"type": "text",
"content": "/*global Utils, UIProvider */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPHasColumn(data) {\r\n 'use strict';\r\n\r\n UIPHasColumn.superclass.constructor.call(this, data);\r\n\r\n this.visible(this.control().prop('constructorName') === 'LayoutColumn');\r\n\r\n}\r\n\r\nUtils.extend(UIPHasColumn, UIProvider);"
},
"UIPHasEffect.js": {
"type": "text",
"content": "/**\n * Created by san0k on 04.03.2015.\n */\n/* exported UIPHasEffect */\n/* globals Utils, UIProvider, koObservableController */\n\n\nfunction UIPHasEffect(data) {\n 'use strict';\n\n UIPHasEffect.superclass.constructor.call(this, data);\n\n this.controlSetter = koObservableController.koBind(null, null, function () {\n var control = this.control();\n var constructorName = data.options.constructorName;\n if (control && control.prop('constructorName') === constructorName) {\n this.setEnabled(control);\n return;\n }\n if (control && control.hasSubControl('effects') && control.find('effects').prop('length')) {\n for (var i = 0; i < control.find('effects').prop('length'); i++) {\n var effect = control.find('effects.' + i);\n if (constructorName === effect.prop('constructorName')) {\n this.setEnabled(effect);\n return;\n }\n }\n }\n this.setEnabled(null);\n }.bind(this));\n\n this.controlSetter();\n}\n\nUtils.extend(UIPHasEffect, UIProvider);\n\nUIPHasEffect.prototype.dispose = function () {\n 'use strict';\n UIPHasEffect.superclass.dispose.call(this);\n this.controlSetter.dispose();\n};\n\nUIPHasEffect.prototype.setEnabled = function setEnabled(effect) {\n 'use strict';\n if (this.options.inverse)\n effect = !effect;\n if (this.options.hideOnDisable)\n this.visible(!!effect);\n else\n this.enabled(!!effect);\n};"
},
"UIPHasPagesPosts.js": {
"type": "text",
"content": "/*exported UIPHasPagesPosts*/\n/*global Utils, UIProvider*/\n/*global DataProviderFacade */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPHasPagesPosts(data) {\n 'use strict';\n\n UIPHasPagesPosts.superclass.constructor.call(this, data);\n\n var visible = DataProviderFacade.hasGetPostsImplementation();\n if (this.options.invertVisibility)\n visible = !visible;\n this.visible(visible);\n}\n\nUtils.extend(UIPHasPagesPosts, UIProvider);"
},
"UIPHasPicture.js": {
"type": "text",
"content": "/* exported UIPHasPicture */\n/* global Utils, koObservableController, ImageController, UIPBasePictureFromUrl, Picture */\n\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPHasPicture(data) {\n 'use strict';\n\n data.options.attr = 'image';\n UIPHasPicture.superclass.constructor.call(this, data);\n\n if(this.enabled.dispose) this.enabled.dispose();\n\n this.enabled = koObservableController.koBind(this.control(), '', function () {\n var picture = ImageController.getPictureFromControl(this.control());\n var result = !!(picture && picture.fileName || (this.options.enableEmptyImg && this.control().instanceOf(Picture)));\n if (this.options.hideOnDisable) {\n this.visible(result);\n }\n return result;\n }.bind(this));\n}\n\nUtils.extend(UIPHasPicture, UIPBasePictureFromUrl);\n\n"
},
"UIPHide.js": {
"type": "text",
"content": "/*global Utils, UIProvider*/\nfunction UIPHide(data) {\n 'use strict';\n UIPHide.superclass.constructor.call(this, data);\n\n this.baseVisible = this.visible;\n this.visible = ko.computed(\n {\n read: function () {\n if (!this.baseVisible())\n return false;\n var val = this.value();\n if (this.options.expected === false || this.options.expected === true)\n val = !!val;\n return val !== this.options.expected;\n },\n deferEvaluation: true,\n owner: this\n }\n );\n}\n\nUtils.extend(UIPHide, UIProvider);\n\nUIPHide.prototype.dispose = function () {\n 'use strict';\n UIPHide.superclass.dispose.call(this);\n if (this.baseVisible.dispose)\n this.baseVisible.dispose();\n};\n"
},
"UIPHideIn.js": {
"type": "text",
"content": "/*global UIProvider, Utils, PreviewHelper, SelectionResolver*/\r\n/*export UIPHideIn*/\r\nfunction UIPHideIn(data) {\r\n 'use strict';\r\n var hideNames = [],\r\n showNames = [],\r\n i,\r\n parents,\r\n controlInfo,\r\n parent,\r\n parentConstructorName,\r\n shouldHide = false,\r\n shouldShow = false\r\n ;\r\n UIPHideIn.superclass.constructor.call(this, data);\r\n controlInfo = PreviewHelper.getControlInfo(this.control());\r\n\r\n if (!controlInfo) {\r\n if (this.options.showIn)\r\n this.visible(false);\r\n return;\r\n }\r\n\r\n parents = SelectionResolver.getLayoutModelPath(this.control(), controlInfo.dom);\r\n\r\n if (this.options.hideIn) {\r\n hideNames = this.options.hideIn.split(',');\r\n }\r\n\r\n if (this.options.showIn) {\r\n showNames = this.options.showIn.split(',');\r\n }\r\n\r\n for (i = 0; i < parents.length; i++) {\r\n parent = parents[i];\r\n parentConstructorName = parent.control.prop('constructorName');\r\n\r\n if (hideNames.indexOf(parentConstructorName) !== -1) {\r\n shouldHide = true;\r\n break;\r\n }\r\n\r\n if (showNames.indexOf(parentConstructorName) !== -1) {\r\n shouldShow = true;\r\n break;\r\n }\r\n }\r\n\r\n if (shouldHide) {\r\n this.visible(false);\r\n } else if (hideNames.length) {\r\n this.visible(true);\r\n }\r\n\r\n if (shouldShow) {\r\n this.visible(true);\r\n } else if (showNames.length) {\r\n this.visible(false);\r\n }\r\n}\r\n\r\nUtils.extend(UIPHideIn, UIProvider);\r\n"
},
"UIPHideOnDisabledChildren.js": {
"type": "text",
"content": "/*global PWStackHelper, UIProvider, Utils*/\r\n\r\nfunction UIPHideOnDisabledChildren(data) {\r\n 'use strict';\r\n UIPHideOnDisabledChildren.superclass.constructor.call(this, data);\r\n\r\n this.providers = [];\r\n for (var i in this.options.providers) {\r\n if (this.options.providers[i]) {\r\n this.providers.push(PWStackHelper.getProvider(this.control(), {provider: this.options.providers[i]}));\r\n }\r\n }\r\n\r\n if (this.options.disable) {\r\n if (this.enabled.dispose)\r\n this.enabled.dispose();\r\n this.enabled = ko.computed(function () {\r\n var isEnable = false;\r\n for (var i = 0; i < this.providers.length; i++) {\r\n if (this.providers[i].enabled() && this.providers[i].visible()) {\r\n isEnable = true;\r\n break;\r\n }\r\n }\r\n return this.options.inverse ? !isEnable : isEnable;\r\n }, this, { deferEvaluation: true });\r\n } else {\r\n if (this.visible.dispose)\r\n this.visible.dispose();\r\n this.visible = ko.computed(function () {\r\n var isVisible = false;\r\n for (var i = 0; i < this.providers.length; i++) {\r\n if (this.providers[i].enabled() && this.providers[i].visible()) {\r\n isVisible = true;\r\n break;\r\n }\r\n }\r\n return this.options.inverse ? !isVisible : isVisible;\r\n }, this, {deferEvaluation: true});\r\n }\r\n\r\n if (this.checked.dispose)\r\n this.checked.dispose();\r\n this.checked = ko.computed(function () {\r\n var isChecked = false;\r\n for (var i = 0; i < this.providers.length; i++) {\r\n if (this.providers[i].checked()) {\r\n isChecked = true;\r\n break;\r\n }\r\n }\r\n return isChecked;\r\n }, this, {deferEvaluation: true});\r\n\r\n}\r\n\r\nUtils.extend(UIPHideOnDisabledChildren, UIProvider);\r\n\r\nUIPHideOnDisabledChildren.prototype.dispose = function () {\r\n 'use strict';\r\n UIPHideOnDisabledChildren.superclass.dispose.call(this);\r\n for (var i = 0; i < this.providers.length; i++)\r\n this.providers[i].dispose();\r\n};\r\n\r\nUIPHideOnDisabledChildren.prototype.click = function () {\r\n 'use strict';\r\n if (this._childProvider) {\r\n this._childProvider.click();\r\n } else {\r\n for (var i = 0; i < this.providers.length; i++) {\r\n this.providers[i].click();\r\n }\r\n }\r\n};\r\n"
},
"UIPHideOnStylesPage.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 26.09.14.\r\n */\r\n/*exported UIPHideOnStylesPage*/\r\n/*global PreviewHelper, Utils, UIProvider, PubSubController, Channels */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPHideOnStylesPage(data) {\r\n 'use strict';\r\n\r\n UIPHideOnStylesPage.superclass.constructor.call(this, data);\r\n\r\n this._enableInsertHandler = this._enableInsert.bind(this);\r\n this._disableInsertdHandler = this._disableInsert.bind(this);\r\n\r\n PubSubController.subscribe(Channels.previewEvents.stylingLoaded, this._disableInsertdHandler);\r\n PubSubController.subscribe(Channels.previewEvents.stylingHided, this._enableInsertHandler);\r\n\r\n PubSubController.subscribe(Channels.layoutMode.modeOn, this._disableInsertdHandler);\r\n PubSubController.subscribe(Channels.layoutMode.modeOff, this._enableInsertHandler);\r\n\r\n var isDSActive = PreviewHelper.isDefaultStylesActive();\r\n this.enabled(!isDSActive);\r\n}\r\n\r\nUtils.extend(UIPHideOnStylesPage, UIProvider);\r\n\r\nUIPHideOnStylesPage.prototype._disableInsert = function _disableInsert() {\r\n 'use strict';\r\n this.enabled(false);\r\n};\r\n\r\nUIPHideOnStylesPage.prototype._enableInsert = function _enableInsert() {\r\n 'use strict';\r\n this.enabled(true);\r\n};\r\n\r\nUIPHideOnStylesPage.prototype.dispose = function () {\r\n 'use strict';\r\n UIPHideOnStylesPage.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.previewEvents.stylingLoaded, this._disableInsertdHandler);\r\n PubSubController.unsubscribe(Channels.previewEvents.stylingHided, this._enableInsertHandler);\r\n\r\n PubSubController.unsubscribe(Channels.layoutMode.modeOn, this._disableInsertdHandler);\r\n PubSubController.unsubscribe(Channels.layoutMode.modeOff, this._enableInsertHandler);\r\n};\r\n"
},
"UIPHorizontalPositioning.js": {
"type": "text",
"content": "/*global Utils, UIProvider, koObservableController, AlignProvider*/\r\n\r\nfunction UIPHorizontalPositioning(data) {\r\n 'use strict';\r\n UIPHorizontalPositioning.superclass.constructor.call(this, data);\r\n\r\n this.valueUpdater = ko.observable(false);\r\n this._valueChangeNotifier = koObservableController.koBind(null, null, function () {\r\n this.valueUpdater(!this.valueUpdater());\r\n }.bind(this), true);\r\n\r\n this._valueChangeNotifier();\r\n\r\n var getAlignType = function () {\r\n return this.options.alignType || AlignProvider.AlignType.Margin;\r\n }.bind(this);\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n this.valueUpdater();\r\n if (getAlignType() !== AlignProvider.getAlignType(this.control()))\r\n return '';\r\n return AlignProvider.getAlign(this.control(), getAlignType());\r\n },\r\n write: function (value) {\r\n AlignProvider.setAlign(this.control(), getAlignType(), value);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n this._baseVisible = this.visible;\r\n this.visible = ko.computed({\r\n read: function () {\r\n this.valueUpdater();\r\n return this._baseVisible() && AlignProvider.isAlignAllowed(this.control(), getAlignType());\r\n },\r\n write: function (value) {\r\n this._baseVisible(value);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n this.checked = ko.computed(function () {\r\n return this.value() === this.options.value;\r\n }, this, {deferEvaluation: true});\r\n}\r\n\r\nUtils.extend(UIPHorizontalPositioning, UIProvider);\r\n\r\nUIPHorizontalPositioning.prototype.dispose = function () {\r\n 'use strict';\r\n UIPHorizontalPositioning.superclass.dispose.call(this);\r\n if (this._baseVisible.dispose)this._baseVisible.dispose();\r\n};"
},
"UIPHoverBoxSlideChecked.js": {
"type": "text",
"content": "/*global Utils, UIProvider, koObservableController*/\r\n\r\nfunction UIPHoverBoxSlideChecked(data) {\r\n 'use strict';\r\n UIPHoverBoxSlideChecked.superclass.constructor.call(this, data);\r\n\r\n if (this.checked.dispose)this.checked.dispose();\r\n this.checked = koObservableController.koBind(this.control().parent(), 'active', function (active) {\r\n return active === this.options.active;\r\n }.bind(this));\r\n}\r\n\r\nUtils.extend(UIPHoverBoxSlideChecked, UIProvider);\r\n"
},
"UIPHtmlItem.js": {
"type": "text",
"content": "/*global Utils, UIProvider, PubSubController, Channels, editor*/\n\nfunction UIPHtmlItem(data) {\n 'use strict';\n UIPHtmlItem.superclass.constructor.call(this, data);\n\n this.setEnabled = function () {\n this.enabled(this.options.alwaysEnabled || editor && !!editor.pagesListController.getCurrentItem(this.options.postType));\n if (this.options.hideOnDisable) {\n this.visible(this.enabled());\n }\n }.bind(this);\n\n this.setDisabled = function () {\n this.enabled(false);\n }.bind(this);\n\n this.setEnabled();\n\n PubSubController.subscribe(Channels.previewEvents.unload, this.setDisabled);\n PubSubController.subscribe(Channels.previewEvents.loaded, this.setEnabled);\n /*PubSubController.subscribe(Channels.loadIcon.show, this.setDisabled);\n PubSubController.subscribe(Channels.loadIcon.hide, this.setEnabled);*/\n}\n\nUtils.extend(UIPHtmlItem, UIProvider);\n\nUIPHtmlItem.prototype.dispose = function () {\n 'use strict';\n UIPHtmlItem.superclass.dispose.call(this);\n PubSubController.unsubscribe(Channels.previewEvents.unload, this.setDisabled);\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this.setEnabled);\n /*PubSubController.unsubscribe(Channels.loadIcon.show, this.setDisabled);\n PubSubController.unsubscribe(Channels.loadIcon.hide, this.setEnabled);*/\n};"
},
"UIPIcon.js": {
"type": "text",
"content": "/*global Utils, UIProvider*/\n\nfunction UIPIcon(data) {\n 'use strict';\n UIPIcon.superclass.constructor.call(this, data);\n\n this.baseControl = this.control;\n this.control = ko.computed(function () {\n var ctrl = this.baseControl();\n if (!window.Icon) {\n this.visible(false);\n } else {\n this.visible(ctrl.prop('constructorName') === 'Icon');\n var children = ctrl.directChildren();\n for (var i = 0; i < children.length; i++) {\n if (children[i].prop('constructorName') === 'Icon') {\n ctrl = children[i];\n this.visible(true);\n break;\n }\n }\n }\n return ctrl;\n }, this, {deferEvaluation: true});\n}\n\nUtils.extend(UIPIcon, UIProvider);\n\nUIPIcon.prototype.dispose = function () {\n 'use strict';\n UIPIcon.superclass.dispose.call(this);\n if (this.baseControl.dispose)\n this.baseControl.dispose();\n};\n"
},
"UIPIconEffect.js": {
"type": "text",
"content": "/*exported UIPIconEffect*/\r\n/*global UIPTextEffect, Utils */\r\n\r\nfunction UIPIconEffect(data) {\r\n 'use strict';\r\n UIPIconEffect.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPIconEffect, UIPTextEffect);"
},
"UIPIconShape.js": {
"type": "text",
"content": "/* exported UIPIconShape */\r\n/*global Utils, UIPPresets*/\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPIconShape(data) {\r\n 'use strict';\r\n\r\n UIPIconShape.superclass.constructor.call(this, data);\r\n\r\n this.baseValue = this.value;\r\n this.value = ko.computed({\r\n read: function () {\r\n return this.baseValue();\r\n },\r\n write: function (value) {\r\n this.checkValueInItems(value);\r\n var newItem = $.extend(true, {}, value);\r\n newItem.icon = this.control().prop('icon') ? this.control().prop('icon') : 'icon-heart';\r\n this.baseValue(newItem);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPIconShape, UIPPresets);\r\n\r\nUIPIconShape.prototype.dispose = function () {\r\n 'use strict';\r\n UIPIconShape.superclass.dispose.call(this);\r\n this.baseValue.dispose();\r\n};\r\n"
},
"UIPIconState.js": {
"type": "text",
"content": "/*global Utils, UIProvider, IconState*/\r\n\r\nfunction UIPIconState(data) {\r\n 'use strict';\r\n if (!window.IconState) {\r\n data.options.visible = false;\r\n }\r\n else {\r\n data.options.visible = data.control.instanceOf(IconState);\r\n }\r\n UIPIconState.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPIconState, UIProvider);\r\n"
},
"UIPImageFilters.js": {
"type": "text",
"content": "/* exported UIPImageFilters */\r\n/* global async, Utils, UIPHasPicture, ImageController, ErrorUtility, CONST, LogController, PubSubController, Channels, WorkerController, AppSettings */\r\n\r\nfunction UIPImageFilters(data) {\r\n 'use strict';\r\n UIPImageFilters.superclass.constructor.call(this, data);\r\n\r\n this.initCacheIfNeed();\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n return null;\r\n },\r\n write: function (value) {\r\n var control = this.control();\r\n var url = this.getOriginalUrlFromCache(ImageController.getPictureUrl(control));\r\n this.startAsync();\r\n ImageController.getImageFromServer(url, true, function (err, downloadedDataUrl) {\r\n if (!ErrorUtility.logWarning(err) && downloadedDataUrl) {\r\n this.applyFilter(value, downloadedDataUrl, function (error, changedDataURL) {\r\n if (!ErrorUtility.logWarning(error) && changedDataURL) {\r\n var pictureControl = ImageController.getPictureFromControl(control);\r\n this.uploadFromUrl(CONST.UPLOAD_TYPE.IMAGE, changedDataURL, {\r\n isCdn: false,\r\n fileName: pictureControl && pictureControl.fileName\r\n }, null, function (err, result) {\r\n ErrorUtility.logWarning(err);\r\n this.addChangedUrlToCache(url, result && result.url);\r\n this.stopAsync();\r\n }.bind(this));\r\n } else {\r\n this.stopAsync();\r\n }\r\n }.bind(this));\r\n }\r\n }.bind(this));\r\n }.bind(this),\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n var updateItems = function () {\r\n var control = this.control();\r\n var url = this.getOriginalUrlFromCache(ImageController.getPictureUrl(control));\r\n this.items(data.options.items);\r\n this.startAsync();\r\n\r\n LogController.time(\"UIPImageFilters updateItems\", {isProductionLog:true});\r\n var endFunc = function () {\r\n LogController.timeEnd(\"UIPImageFilters updateItems\", {isProductionLog: true});\r\n this.stopAsync();\r\n }.bind(this);\r\n\r\n ImageController.getImageFromServer(url, true, function (err, downloadedDataUrl) {\r\n if (ErrorUtility.logWarning(err) || !downloadedDataUrl) {\r\n endFunc();\r\n return;\r\n }\r\n this.getPixelData(downloadedDataUrl, 70, function (error, pixelData) {\r\n if (error) {\r\n endFunc();\r\n return;\r\n }\r\n var items = data.options.items.slice();\r\n async.each(items,\r\n function (item, callback) {\r\n var filter = this.getFilterByName(item.value);\r\n if (!filter) {\r\n callback();\r\n return;\r\n }\r\n this.applyFilterInternal(filter, pixelData, function (err, dataUrl) {\r\n if (!err) {\r\n item.icon = dataUrl;\r\n }\r\n callback();\r\n });\r\n }.bind(this),\r\n function () { //err\r\n this.items(items);\r\n endFunc();\r\n }.bind(this)\r\n );\r\n }.bind(this));\r\n }.bind(this));\r\n }.bind(this);\r\n updateItems();\r\n}\r\n\r\nUtils.extend(UIPImageFilters, UIPHasPicture);\r\n\r\nUIPImageFilters.prototype.initCacheIfNeed = function () {\r\n 'use strict';\r\n if (UIPImageFilters._originalUrlCache) { // cache inited\r\n return;\r\n }\r\n UIPImageFilters._originalUrlCache = {}; // [{string}originalUrl, {string[]}changedUrls]\r\n PubSubController.subscribe(Channels.project.saveEnd, function () { /* CodeAnalyser ignore:line */ //need subscribe for evaluate\r\n UIPImageFilters._originalUrlCache = {};\r\n });\r\n};\r\n\r\nUIPImageFilters.prototype.getOriginalUrlFromCache = function (changedUrl) {\r\n 'use strict';\r\n var urlCache = UIPImageFilters._originalUrlCache;\r\n for (var prop in urlCache) {\r\n if (urlCache.hasOwnProperty(prop)) {\r\n if (urlCache[prop] && urlCache[prop].indexOf(changedUrl) !== -1)\r\n return prop;\r\n }\r\n }\r\n return changedUrl;\r\n};\r\n\r\nUIPImageFilters.prototype.addChangedUrlToCache = function (originalUrl, changedUrl) {\r\n 'use strict';\r\n if (!changedUrl) {\r\n return;\r\n }\r\n var urlCache = UIPImageFilters._originalUrlCache;\r\n if (!urlCache[originalUrl]) {\r\n urlCache[originalUrl] = [];\r\n }\r\n urlCache[originalUrl].push(changedUrl);\r\n};\r\n\r\nUIPImageFilters.prototype.getPixelData = function (dataUrl, size, callback) {\r\n 'use strict';\r\n var img = new Image();\r\n img.onerror = function(){\r\n callback(new Error(\"img load error!\"));\r\n };\r\n img.onload = function(){\r\n var canvas = document.createElement('canvas'),\r\n ctx = canvas.getContext('2d'),\r\n width = img.width, height = img.height,\r\n dataWidth = img.width,\r\n dataHeight = img.height;\r\n if (size){\r\n dataWidth = size;\r\n dataHeight = size;\r\n if (img.width < img.height) {\r\n width = size;\r\n height = parseInt(Math.floor(img.height / img.width * size));\r\n } else {\r\n height = size;\r\n width = parseInt(Math.floor(img.width / img.height * size));\r\n }\r\n }\r\n canvas.width = dataWidth;\r\n canvas.height = dataHeight;\r\n ctx.drawImage(img, 0, 0, width, height);\r\n var m = dataUrl.match(/data:([\\w/\\-\\.]+)/);\r\n var pixelData = {width : dataWidth, height: dataHeight, data: null, type: m && m.length ? m[1] : 'image/png' };\r\n try {\r\n pixelData.data = ctx.getImageData(0, 0, pixelData.width, pixelData.height).data;\r\n } catch(e){\r\n callback(e);\r\n return;\r\n }\r\n callback(null, pixelData);\r\n };\r\n img.src = dataUrl;\r\n};\r\n\r\nUIPImageFilters.prototype.getFilterByName = function(filterName){\r\n 'use strict';\r\n if (!filterName){\r\n return null;\r\n }\r\n var filters = [\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":0,\"imageBrightness\":0,\"imageHue\":0,\"imageSaturation\":0,\"imageLightness\":0,\"imageRecolorHue\":0,\"imageRecolorSaturation\":25,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":0,\"imageOutputWhite\":255,\"imageOutputBlack\":0,\"name\":\"Default\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":0,\"imageBrightness\":0,\"imageHue\":0,\"imageSaturation\":-100,\"imageLightness\":60,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":20,\"imageOutputWhite\":255,\"imageOutputBlack\":0,\"name\":\"Light Gray\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":30,\"imageBrightness\":0,\"imageHue\":0,\"imageSaturation\":-100,\"imageLightness\":0,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":50,\"imageOutputWhite\":255,\"imageOutputBlack\":60,\"name\":\"Grayscale\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":60,\"imageBrightness\":0,\"imageHue\":0,\"imageSaturation\":-100,\"imageLightness\":0,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":230,\"imageInputBlack\":20,\"imageOutputWhite\":255,\"imageOutputBlack\":0,\"name\":\"B-W Contrast\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":50,\"imageBrightness\":49,\"imageHue\":0,\"imageSaturation\":-100,\"imageLightness\":0,\"imageRecolorHue\":220,\"imageRecolorSaturation\":15,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":100,\"blurRadius\":0,\"imageInputWhite\":240,\"imageInputBlack\":40,\"imageOutputWhite\":230,\"imageOutputBlack\":0,\"name\":\"Monochrome\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":138,\"y\":116},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":123,\"y\":130},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":30,\"imageBrightness\":10,\"imageHue\":0,\"imageSaturation\":-30,\"imageLightness\":0,\"imageRecolorHue\":0,\"imageRecolorSaturation\":25,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":0,\"imageOutputWhite\":240,\"imageOutputBlack\":50,\"name\":\"Pastel\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":45,\"imageBrightness\":15,\"imageHue\":0,\"imageSaturation\":5,\"imageLightness\":15,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":0,\"imageOutputWhite\":240,\"imageOutputBlack\":50,\"name\":\"Daylight\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":119,\"y\":142},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":126,\"y\":136},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":65,\"y\":61},{\"x\":198,\"y\":157},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":0,\"imageBrightness\":0,\"imageHue\":0,\"imageSaturation\":-8,\"imageLightness\":40,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":0,\"imageOutputWhite\":255,\"imageOutputBlack\":0,\"name\":\"Screen\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":131,\"y\":143},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":59,\"y\":68},{\"x\":202,\"y\":184},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":0,\"imageBrightness\":0,\"imageHue\":0,\"imageSaturation\":-16,\"imageLightness\":10,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":0,\"imageOutputWhite\":255,\"imageOutputBlack\":0,\"name\":\"Light\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":112,\"y\":127},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":133,\"y\":111},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":112,\"y\":124},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":0,\"imageBrightness\":0,\"imageHue\":0,\"imageSaturation\":-50,\"imageLightness\":20,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":240,\"imageInputBlack\":30,\"imageOutputWhite\":255,\"imageOutputBlack\":20,\"name\":\"Pale Reddish\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":131,\"y\":141},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":135,\"y\":120},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":116,\"y\":147},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":8,\"imageBrightness\":-30,\"imageHue\":0,\"imageSaturation\":-18,\"imageLightness\":10,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":0,\"imageOutputWhite\":255,\"imageOutputBlack\":0,\"name\":\"Dark\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":117,\"y\":145},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":143,\"y\":117},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":0,\"imageBrightness\":10,\"imageHue\":0,\"imageSaturation\":12,\"imageLightness\":12,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":0,\"imageOutputWhite\":255,\"imageOutputBlack\":0,\"name\":\"Warm\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":142,\"y\":120},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":121,\"y\":130},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":112,\"y\":143},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":0,\"imageBrightness\":-10,\"imageHue\":0,\"imageSaturation\":-24,\"imageLightness\":0,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":0,\"imageOutputWhite\":255,\"imageOutputBlack\":0,\"name\":\"Cold\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":35},{\"x\":40,\"y\":50},{\"x\":125,\"y\":165},{\"x\":175,\"y\":230},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":65,\"y\":50},{\"x\":92,\"y\":102},{\"x\":180,\"y\":220},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":35},{\"x\":62,\"y\":62},{\"x\":88,\"y\":95},{\"x\":132,\"y\":158},{\"x\":225,\"y\":230},{\"x\":255,\"y\":232}],\"imageTransparency\":0,\"imageContrast\":8,\"imageBrightness\":-30,\"imageHue\":0,\"imageSaturation\":-18,\"imageLightness\":10,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":0,\"imageOutputWhite\":255,\"imageOutputBlack\":0,\"name\":\"Sunday\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":1},{\"x\":255,\"y\":240}],\"channelRed\":[{\"x\":0,\"y\":39},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":1},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":69},{\"x\":255,\"y\":254}],\"imageTransparency\":0,\"imageContrast\":-60,\"imageBrightness\":10,\"imageHue\":0,\"imageSaturation\":-50,\"imageLightness\":0,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":230,\"imageInputBlack\":60,\"imageOutputWhite\":255,\"imageOutputBlack\":20,\"name\":\"Chromatic\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":130,\"y\":143},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":117,\"y\":152},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":-55,\"imageBrightness\":-24,\"imageHue\":0,\"imageSaturation\":-59,\"imageLightness\":20,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":0,\"imageOutputWhite\":255,\"imageOutputBlack\":0,\"name\":\"Foggy\"},\r\n {\"channelRGB\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelRed\":[{\"x\":0,\"y\":0},{\"x\":255,\"y\":255}],\"channelGreen\":[{\"x\":0,\"y\":0},{\"x\":128,\"y\":140},{\"x\":255,\"y\":255}],\"channelBlue\":[{\"x\":0,\"y\":0},{\"x\":114,\"y\":155},{\"x\":255,\"y\":255}],\"imageTransparency\":0,\"imageContrast\":93,\"imageBrightness\":-38,\"imageHue\":0,\"imageSaturation\":-55,\"imageLightness\":-8,\"imageRecolorHue\":0,\"imageRecolorSaturation\":0,\"imageRecolorLightness\":0,\"imageRecolorThreshold\":0,\"blurRadius\":0,\"imageInputWhite\":255,\"imageInputBlack\":0,\"imageOutputWhite\":255,\"imageOutputBlack\":0,\"name\":\"Cloudy\"}\r\n ];\r\n\r\n var filterIndex = -1;\r\n for (var i = 0; i < filters.length; i++){\r\n if (filters[i].name === filterName){\r\n filterIndex = i;\r\n break;\r\n }\r\n }\r\n if (filterIndex === -1){\r\n return null;\r\n }\r\n return filters[filterIndex];\r\n};\r\n\r\n\r\nUIPImageFilters.prototype.applyFilter = function (filterName, imageData, callback) {\r\n 'use strict';\r\n var filter = this.getFilterByName(filterName);\r\n if (!filter){\r\n callback(imageData);\r\n return;\r\n }\r\n this.getPixelData(imageData, null, function(error, pixelData){\r\n if (error){\r\n callback(imageData);\r\n return;\r\n }\r\n this.applyFilterInternal(filter, pixelData, callback);\r\n }.bind(this));\r\n};\r\n\r\nUIPImageFilters.prototype.applyFilterInternal = function (filter, pixelData, callback) {\r\n 'use strict';\r\n var filterName = filter.name;\r\n\r\n LogController.time('apply filter ' + filterName, {isProductionLog: true});\r\n\r\n function endCallback(error, data) {\r\n LogController.timeEnd('apply filter ' + filterName, {isProductionLog: true});\r\n callback(error, data);\r\n }\r\n\r\n WorkerController.doWork('imageFilters', filter, pixelData, function (error, data) {\r\n\r\n if (error) {\r\n endCallback(error);\r\n return;\r\n }\r\n var canvas = document.createElement('canvas'),\r\n ctx = canvas.getContext('2d');\r\n canvas.width = data.width;\r\n canvas.height = data.height;\r\n var result = ctx.createImageData(data.width, data.height),\r\n destination = result.data,\r\n source = data.data;\r\n if (destination.set) {\r\n destination.set(source);\r\n } else {\r\n var pos = destination.length + 1;\r\n while (pos--) {\r\n destination[pos] = source[pos];\r\n }\r\n }\r\n ctx.putImageData(result, 0, 0);\r\n endCallback(error, canvas.toDataURL(pixelData.type, AppSettings.recommendedImageQuality));\r\n });\r\n};\r\n\r\n"
},
"UIPImagePreview.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 21.08.2015.\r\n */\r\n/*global Utils, UIProvider, ImageController */\r\n\r\nfunction UIPImagePreview(data) {\r\n 'use strict';\r\n UIPImagePreview.superclass.constructor.call(this, data);\r\n\r\n this.toString = ko.computed(function(){\r\n\r\n var viewControl = this.control();\r\n\r\n if (viewControl) {\r\n if (viewControl.hasSubControl(this.options.for)) {\r\n viewControl = viewControl.find(this.options.for);\r\n }\r\n }\r\n\r\n var url = ImageController.getPictureUrl(viewControl.find('image'));\r\n if (!url || !this.value()) return '';\r\n\r\n return '';\r\n\r\n }, this, { deferEvaluation: true });\r\n}\r\n\r\nUtils.extend(UIPImagePreview, UIProvider);"
},
"UIPInheritImage.js": {
"type": "text",
"content": "/*global Utils, PictureApplyController, koObservableController, ImageController, _$, UIPBasePictureFromUrl*/\r\nfunction UIPInheritImage(data) {\r\n 'use strict';\r\n //data.options.attr = 'image';\r\n UIPInheritImage.superclass.constructor.call(this, data);\r\n\r\n if (this.enabled.dispose) this.enabled.dispose();\r\n\r\n this.enabled = koObservableController.koBind(this.control(), '', function () {\r\n\r\n // visible : has no Image and parentResponsive has Image\r\n var pictureResp = _$(ImageController.getPictureFromControl(this.control(), true));\r\n var picture = _$(ImageController.getPictureFromControl(this.control()));\r\n var result = !!(picture && !picture.prop('fileName') && picture.prop('isNone') && pictureResp && (pictureResp.prop('fileName') || pictureResp.prop('isNone')));\r\n\r\n if (this.options.hideOnDisable) {\r\n this.visible(result);\r\n }\r\n return result;\r\n }.bind(this));\r\n}\r\n\r\nUtils.extend(UIPInheritImage, UIPBasePictureFromUrl);\r\n\r\nUIPInheritImage.prototype.click = function () {\r\n 'use strict';\r\n\r\n var imageApplier = new PictureApplyController();\r\n imageApplier.Apply(this.control(), '', '', '', {asInherit: true});\r\n};"
},
"UIPInnerControls.js": {
"type": "text",
"content": "/*global Utils, UIProvider, LayoutBox, LayoutContainer, SharedController, _$*/\r\n\r\nfunction UIPInnerControls(data) {\r\n 'use strict';\r\n UIPInnerControls.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPInnerControls, UIProvider);\r\n\r\nUIPInnerControls.prototype.getItems = function (callback) {\r\n 'use strict';\r\n var items = [];\r\n var children = SharedController.getAllChildren([this.control()]);\r\n for (var i = 0; i < children.length; i++) {\r\n var facade = _$(children[i]);\r\n if (!facade.instanceOf(LayoutBox) && !facade.instanceOf(LayoutContainer))\r\n items.push({\r\n view: \"ControlPosition\",\r\n provider: {\r\n control: facade\r\n }\r\n });\r\n }\r\n callback(null, items);\r\n};"
},
"UIPInnerPositions.js": {
"type": "text",
"content": "/*global Utils, UIProvider, Section, SharedController, _$, UIHelper, LayoutBox, LayoutContainer, Theme, editor, designer, PreviewHelper, PubSubController, Channels, l*/\r\n\r\nfunction UIPInnerPositions(data) {\r\n 'use strict';\r\n UIPInnerPositions.superclass.constructor.call(this, data);\r\n\r\n this.section = this.control();\r\n while (this.section && !this.section.instanceOf(Section) && !this.section.instanceOf(Theme))\r\n this.section = _$(SharedController.getDirectParents(this.section)[0]);\r\n if (!this.section || this.section.isSameFacade(this.control()) || !this.section.instanceOf(Section)) {\r\n this.visible(false);\r\n return;\r\n }\r\n\r\n this.translateCategories = false;\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n var items = this.items();\r\n for (var i = 0; i < items.length; i++)\r\n if (items[i].isCurrentControl)\r\n return i;\r\n },\r\n write: function (value) {\r\n var items = this.items();\r\n var ci = items[value].controlInfo;\r\n ci.control.css('float', items[value].float);\r\n designer.projectFacade.cut(ci.control.getModelControl());\r\n designer.projectFacade.paste(ci, items[value].targetParentInfo, {before: items[value].before, dragContainer: PreviewHelper.getControlParentInfo(ci)}, function () {\r\n });\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n if (this.options.itemsLess && this.items().length >= this.options.itemsLess)\r\n this.visible(false);\r\n if (this.options.itemsNotLess && this.items().length < this.options.itemsNotLess)\r\n this.visible(false);\r\n\r\n\r\n this.onHover = function (value) {\r\n var items = this.items();\r\n if (items)\r\n PubSubController.publish(Channels.selectionFrame.hover, {\r\n item: {\r\n dataId: items[value].targetParentInfo.control.prop('dataId'),\r\n index: 0\r\n }\r\n });\r\n }.bind(this);\r\n}\r\n\r\nUtils.extend(UIPInnerPositions, UIProvider);\r\n\r\nUIPInnerPositions.prototype.getItems = function (callback) {\r\n 'use strict';\r\n var containers = this.getContainerControls();\r\n var items = [];\r\n for (var i = 0; i < containers.length; i++)\r\n this.addItemsFromContainer(containers[i].container, containers[i].property, this.control(), items, true);\r\n callback(null, items);\r\n};\r\n\r\nUIPInnerPositions.prototype.addItems = function (items, children, float, control, controlInfo, containerInfo, buildCaption, category) {\r\n 'use strict';\r\n var counter = 0;\r\n var isCurrentControl = false;\r\n for (var i = 0; i < children.length; i++)\r\n if (children[i].css('float') === float) {\r\n if (children[i].isSameFacade(control))\r\n isCurrentControl = true;\r\n else {\r\n counter++;\r\n items.push({\r\n caption: buildCaption(counter, children[i], items.length === 0, false),\r\n value: items.length,\r\n controlInfo: controlInfo,\r\n targetParentInfo: containerInfo,\r\n before: PreviewHelper.getControlInfo(children[i]),\r\n float: float,\r\n category: category,\r\n isCurrentControl: isCurrentControl\r\n });\r\n isCurrentControl = false;\r\n }\r\n }\r\n counter++;\r\n items.push({\r\n caption: buildCaption(counter, null, false, true),\r\n value: items.length,\r\n controlInfo: controlInfo,\r\n targetParentInfo: containerInfo,\r\n float: float,\r\n category: category,\r\n isCurrentControl: isCurrentControl\r\n });\r\n};\r\n\r\nUIPInnerPositions.prototype.addItemsFromContainer = function (container, property, control, items, addCategory) {\r\n 'use strict';\r\n var containerInfo = PreviewHelper.getControlInfo(container);\r\n var controlInfo = PreviewHelper.getControlInfo(control);\r\n var children = [];\r\n for (var i = 0; i < container.find(property).prop('length'); i++)\r\n children.push(_$(editor.themeController.resolveControl(container.find(property).prop(i))));\r\n\r\n var prefix = addCategory ? UIHelper.getCaption(container) + ' ' : '';\r\n\r\n this.addItems(items, children, '', control, controlInfo, containerInfo, function (counter, control, isFirst, isLast) {\r\n if (isFirst)return 'First';\r\n if (isLast)return 'Last';\r\n return 'Before ' + UIHelper.getCaption(control);\r\n }, prefix + l('Positions'));\r\n\r\n this.addItems(items, children, 'left', control, controlInfo, containerInfo, function (counter) {\r\n return 'Left ' + (counter === 1 ? '' : counter);\r\n }, prefix + l('Float Positions'));\r\n\r\n this.addItems(items, children, 'right', control, controlInfo, containerInfo, function (counter) {\r\n return 'Right ' + (counter === 1 ? '' : counter);\r\n }, prefix + l('Float Positions'));\r\n};\r\n\r\nUIPInnerPositions.prototype.getContainerControls = function () {\r\n 'use strict';\r\n var result = [{container: this.section, property: 'items'}];\r\n var children = SharedController.getAllChildren([this.section]);\r\n for (var i = 0; i < children.length; i++) {\r\n children[i] = _$(children[i]);\r\n if (children[i].instanceOf(LayoutContainer))\r\n for (var j = 0; j < children[i].find('items').prop('length'); j++)\r\n result.push({container: children[i].find('items.' + j), property: 'items'});\r\n else if (children[i].instanceOf(LayoutBox))\r\n result.push({container: children[i], property: 'layout'});\r\n }\r\n return result;\r\n};\r\n"
},
"UIPInPrototypes.js": {
"type": "text",
"content": "/*global Utils, UIPMixinStyleProxy*/\r\nfunction UIPInPrototypes(data) {\r\n 'use strict';\r\n UIPInPrototypes.superclass.constructor.call(this, data);\r\n\r\n this.visible(this.inPrototypes);\r\n}\r\n\r\nUtils.extend(UIPInPrototypes, UIPMixinStyleProxy);"
},
"UIPInspectCode.js": {
"type": "text",
"content": "/* exported UIPInspectCode */\r\n/* global Utils, UIProvider, designer, PackageFsoStorage, ProfileHelper, ErrorUtility, PackageLoader, editor, async,\r\n ExportController, SerializeController, WrapperController, TraverseUtility, PubSubController, Channels, ExportHelper */\r\n\r\nfunction UIPInspectCode(data) {\r\n 'use strict';\r\n this.selectedFile = '';\r\n\r\n UIPInspectCode.superclass.constructor.call(this, data);\r\n\r\n if (typeof data.options.selectedFile !== 'undefined') {\r\n this.selectedFile = data.options.selectedFile;\r\n }\r\n }\r\n\r\n Utils.extend(UIPInspectCode, UIProvider);\r\n\r\n UIPInspectCode.prototype.click = function () {\r\n 'use strict';\r\n designer.ui.dialog.editControlForm.show(this);\r\n };\r\n\r\n UIPInspectCode.prototype.load = function (callback) {\r\n 'use strict';\r\n var control = this.control(),\r\n search = this.selectedFile ?\r\n control.prop('constructorName').toLocaleLowerCase() + '/' + this.selectedFile :\r\n control.prop('constructorName').toLocaleLowerCase() + '.js';\r\n\r\n PackageFsoStorage.getFullFso(control.prop('packageData'), function (error, fso) {\r\n var files = fso.enumerateRecursive(\"\"), selectedFile;\r\n for (var i = files.length - 1; i >= 0; i--) {\r\n var file = files[i];\r\n if (!fso.isDirectory(file) && file.toLocaleLowerCase().indexOf(search) !== -1) {\r\n selectedFile = file;\r\n break;\r\n }\r\n }\r\n callback(error, fso, selectedFile, control.prop('packageData').name);\r\n });\r\n };\r\n\r\n UIPInspectCode.prototype.save = function (fso, callback) {\r\n 'use strict';\r\n var control = this.control();\r\n PubSubController.publish(Channels.loadIcon.show);\r\n\r\n ProfileHelper.doAuthorized(function () {\r\n PackageFsoStorage.save(control.prop('packageData'), fso, function (error, packageData) {\r\n ErrorUtility.logError(error);\r\n PackageLoader.applyPackagesCode([\r\n {packageData: packageData, fso: fso}\r\n ], true);\r\n var theme = editor.themeController.getTheme();\r\n if (theme.packageData.name === packageData.name) {\r\n editor.themeController.unpackProject(JSON.parse(SerializeController.controlSerialize(theme)), function() {\r\n ExportController.processChangedData({control: editor.themeController.getTheme(), controlPath: '/'}, function () {\r\n ExportHelper.exportTheme(callback);\r\n });\r\n });\r\n } else {\r\n recreateControls(theme, packageData, callback);\r\n }\r\n });\r\n });\r\n\r\n function recreateControls(control, packageData, callback) {\r\n var tasks = [];\r\n if (control) {\r\n TraverseUtility.traverseControls(control, function (property, propName) {\r\n if (control === property) {\r\n return true;\r\n }\r\n if (property.packageData && property.packageData.name === packageData.name) {\r\n tasks.push(function(cb) {\r\n WrapperController.simpleModeStart();\r\n SerializeController.controlDeserialize(JSON.parse(SerializeController.controlSerialize(property)), function (err, control) {\r\n WrapperController.simpleModeEnd();\r\n ErrorUtility.logError(err);\r\n control[propName] = control;\r\n cb();\r\n });\r\n });\r\n } else {\r\n tasks.push(function(cb) {\r\n recreateControls(property, packageData, cb);\r\n });\r\n }\r\n return false;\r\n });\r\n }\r\n async.series(tasks, callback);\r\n }\r\n};\r\n"
},
"UIPInspectView.js": {
"type": "text",
"content": "/* exported UIPInspectView */\n/* global Utils, editor, UIPDebug, ko, l, FileManager, PWStackHelper, ViewProvider, _$ */\n\nfunction UIPInspectView(data) {\n 'use strict';\n UIPInspectView.superclass.constructor.call(this, data);\n\n this.caption = ko.observable();\n this.setMessage();\n\n editor.inspectViewController.setProvider(this);\n}\n\nUtils.extend(UIPInspectView, UIPDebug);\n\nUIPInspectView.prototype.setMessage = function () {\n 'use strict';\n if (editor.inspectViewController.isVisible) {\n this.caption('#Debug_InspectUIDisable');\n return;\n }\n\n this.caption('#Debug_InspectUIEnable');\n};\n\nUIPInspectView.prototype.click = function () {\n 'use strict';\n editor.inspectViewController.show();\n this.setMessage();\n};\n\nUIPInspectView.prototype.load = function (callback) {\n 'use strict';\n var control = editor.themeController.getTheme(),\n viewHref = editor.inspectViewController.getViewHref(),\n viewControlDataId = editor.inspectViewController.getViewControlDataId(),\n viewData, selectedFile,\n fso;\n\n control = _$({dataId: viewControlDataId});\n viewData = ViewProvider.getView(viewHref, control);\n\n if (viewHref && viewHref !== 'self') {\n selectedFile = viewHref + '.json';\n fso = new FileManager();\n var viewJsonText = JSON.stringify(viewData.object, null, '\\t');\n fso.write(selectedFile, viewJsonText);\n selectedFile = '/' + selectedFile;\n\n callback(null, fso, selectedFile, l('#UIInspector_Title'));\n }\n else {\n var inspectCodeProvider = PWStackHelper.getProvider(control, {\n provider: {\n name: 'InspectCode',\n selectedFile: 'editor/view.json'\n }\n });\n inspectCodeProvider.click();\n inspectCodeProvider.dispose();\n }\n\n\n};"
},
"UIPInstallPackage.js": {
"type": "text",
"content": "/* exported UIPInstallPackage */\r\n/* global Utils, UIProvider, ControlConst, editor, l, designer, ErrorUtility, PubSubController, Channels */\r\n\r\nfunction UIPInstallPackage(data) {\r\n 'use strict';\r\n UIPInstallPackage.superclass.constructor.call(this, data);\r\n\r\n var packageNameToInstall = this.options.packageName,\r\n namespace = window[ControlConst.BaseControlNS] || {};\r\n\r\n if (!packageNameToInstall || typeof editor === \"undefined\") {\r\n this.visible(false);\r\n return;\r\n }\r\n\r\n for (var userId in namespace) {\r\n if (namespace.hasOwnProperty(userId) && namespace[userId]) {\r\n for (var packageName in namespace[userId]) {\r\n if (packageName === packageNameToInstall) {\r\n var packageObj = namespace[userId][packageName];\r\n this.installObj = packageObj && packageObj._package.install;\r\n this.installPackageData = packageObj && packageObj._package.packageData;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.visible(!!this.installObj);\r\n\r\n if (!this.installObj) {\r\n return;\r\n }\r\n\r\n this.packageCaption = l('#' + packageNameToInstall + 'Package');\r\n\r\n this.packageExist = function () {\r\n return editor.themeController.getControlsPathByPackagesName([packageNameToInstall]).length > 0;\r\n };\r\n\r\n this.updateCaption = function () {\r\n if (this.packageExist()) {\r\n this.caption(l(\"#DisablePackage\", this.packageCaption));\r\n } else {\r\n this.caption(l(\"#EnablePackage\", this.packageCaption));\r\n }\r\n }.bind(this);\r\n\r\n this.updateCaption();\r\n\r\n PubSubController.subscribe(Channels.previewEvents.loaded, this.updateCaption);\r\n}\r\n\r\nUtils.extend(UIPInstallPackage, UIProvider);\r\n\r\nUIPInstallPackage.prototype.dispose = function () {\r\n 'use strict';\r\n UIPInstallPackage.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this.updateCaption);\r\n};\r\n\r\nUIPInstallPackage.prototype.click = function () {\r\n 'use strict';\r\n this.startAsync();\r\n if (this.packageExist()) {\r\n designer.ui.dialog.messageBox.showUntranslated(l(\"#DisablePackageTitle\", this.packageCaption), '', [\"Remove\", \"Cancel\"], false, function (dialogError, buttonName) {\r\n ErrorUtility.logError(dialogError);\r\n switch (buttonName) {\r\n case \"Remove\":\r\n this.installObj.deactivate(function (error) {\r\n ErrorUtility.logWarning(error);\r\n PubSubController.publish(Channels.template.listChanged);\r\n this.stopAsync();\r\n }.bind(this));\r\n break;\r\n default:\r\n this.stopAsync();\r\n break;\r\n }\r\n }.bind(this));\r\n } else {\r\n designer.projectFacade.canSave({publish: true, additionalPackage: this.installPackageData},\r\n function (canSaveError, data) {\r\n if (!data || (data && !data.errorId)) {\r\n ErrorUtility.logWarning(canSaveError);\r\n }\r\n if (!canSaveError && data && !data.errorId && !data.error) {\r\n this.installObj.activate(function (error) {\r\n ErrorUtility.logWarning(error);\r\n PubSubController.publish(Channels.template.listChanged);\r\n this.stopAsync();\r\n }.bind(this));\r\n } else {\r\n this.stopAsync();\r\n }\r\n }.bind(this));\r\n }\r\n};"
},
"UIPInvertPalette.js": {
"type": "text",
"content": "/*exported UIPInvertPalette*/\n/*global Utils, koObservableController, UIProvider, _$ */\n\nfunction UIPInvertPalette(data) {\n 'use strict';\n data.control = _$(window.bootstrap.variables);\n\n UIPInvertPalette.superclass.constructor.call(this, data);\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n if (!this._valueChangeNotifier) {\n this._valueChangeNotifier = koObservableController.koBind(this.control(), null, function () {\n return window.bootstrap.variables.invertPalette;\n });\n }\n return this._valueChangeNotifier();\n },\n write: function (value) {\n window.bootstrap.variables.invertPalette = value;\n },\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPInvertPalette, UIProvider);\n"
},
"UIPIsAbsolute.js": {
"type": "text",
"content": "/*exported UIPIsAbsolute*/\r\n/* global Utils, UIPosition, PubSubController, Channels*/\r\n\r\nfunction UIPIsAbsolute(data) {\r\n 'use strict';\r\n UIPIsAbsolute.superclass.constructor.call(this, data);\r\n\r\n this._updateState = function updateState() {\r\n this.visible(this.getControlPosition() === 'absolute' || this.getControlPosition() === 'fixed');\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.history.refresh, this._updateState);\r\n this._updateState();\r\n}\r\n\r\nUtils.extend(UIPIsAbsolute, UIPosition);\r\n\r\nUIPIsAbsolute.prototype.dispose = function () {\r\n 'use strict';\r\n UIPIsAbsolute.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.history.refresh, this._updateState);\r\n};\r\n"
},
"UIPIsLayout.js": {
"type": "text",
"content": "/* global Utils, UIPosition, PubSubController, Channels*/\r\n\r\nfunction UIPIsLayout(data) {\r\n 'use strict';\r\n UIPIsLayout.superclass.constructor.call(this, data);\r\n\r\n this._updateState = function () {\r\n this.visible(this.getControlPosition() === 'layout');\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.history.refresh, this._updateState);\r\n this._updateState();\r\n}\r\n\r\nUtils.extend(UIPIsLayout, UIPosition);\r\n\r\nUIPIsLayout.prototype.dispose = function () {\r\n 'use strict';\r\n UIPIsLayout.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.history.refresh, this._updateState);\r\n};\r\n"
},
"UIPIsOnTemplate.js": {
"type": "text",
"content": "/* exported UIPIsOnTemplate */\n/* global Utils, editor, designer, TemplatesController, CONST, ErrorUtility, PreviewHelper,\n PubSubController, Channels, ThemeController, DataProviderFacade, ControlStorageController, _$, UIPToggleControl */\n\nfunction UIPIsOnTemplate(data) {\n 'use strict';\n UIPIsOnTemplate.superclass.constructor.call(this, data);\n if (this.options.createInstance) {\n this.resolvedControl = editor.themeController.getControlInTemplateByConstructorName(this.constructorName, this.templateKey);\n } else {\n this.resolvedControl = editor.themeController.findControl(this.constructorName);\n }\n this.template = TemplatesController.getValidTemplatesList(editor.themeController.getTheme())[this.templateKey];\n var control = editor.themeController.findControl(this.constructorName);\n if (control) {\n var facade = _$(control);\n var hasUnManagedCode = facade.hasUnManagedCode(DataProviderFacade.getCmsInfo().cmsName);\n var controlEditor = ControlStorageController.getEditorJson(facade.getPseudoStack());\n var dragItemInfo = {control : _$(control), editor: controlEditor};\n var layoutItemInfo = {control: _$(this.template.BaseTemplate.body)};\n var hasControl = designer.projectFacade.hasControlInTarget(dragItemInfo, layoutItemInfo);\n var isEnabled = false;\n if (hasControl) {\n isEnabled = true;\n } else {\n isEnabled = designer.projectFacade.canPlaceDragItemInto(layoutItemInfo, dragItemInfo, hasUnManagedCode);\n }\n this.enabled(isEnabled);\n }\n if (this.value.dispose)\n this.value.dispose();\n this.isOnTemplate = ko.observable(editor.themeController.isInTemplate(this.resolvedControl, this.templateKey));\n this.value = ko.computed({\n read: function () {\n return this.isOnTemplate();\n },\n write: function (value) {\n var beforeItem = {},\n layoutControls,\n i,\n control,\n layoutControl;\n layoutControls = this.template.BaseTemplate.body.items;\n if (value) {\n if (CONST.UI.HeaderArea === this.constructorName) {\n if (typeof layoutControls[0] === 'string') {\n beforeItem.controlPlaceholder = layoutControls[0];\n } else {\n beforeItem.control = layoutControls[0];\n }\n } else if (CONST.UI.FooterArea === this.constructorName) {\n for (i = 0; i < layoutControls.length; i++) {\n layoutControl = editor.themeController.getControlByPath(layoutControls[i]);\n if (layoutControl && this.pageFooterConstructorName === layoutControl.prop('constructorName')) {\n beforeItem.controlPlaceholder = layoutControls[i];\n break;\n }\n }\n }\n control = editor.themeController.findControl(this.constructorName);\n if (CONST.UI.HeaderArea !== this.constructorName && CONST.UI.FooterArea !== this.constructorName) {\n beforeItem = PreviewHelper.getBeforeItemForShow(this.constructorName, this.templateKey, layoutControls);\n }\n if (!control || this.options.createInstance) {\n designer.projectFacade.createControl(this.constructorName, null, function (error, ctrl) {\n ErrorUtility.logError(error);\n this.publishShowControl();\n editor.themeController.addControl(ctrl, this.template.BaseTemplate.body, beforeItem);\n if (editor.templatesController.currentTemplateKey === this.templateKey) {\n editor.selection.selectControl(ctrl);\n this.isOnTemplate(editor.themeController.isInTemplate(this.resolvedControl, this.templateKey));\n }\n }.bind(this));\n } else {\n if (-1 === this.template.BaseTemplate.body.items.indexOf(ThemeController.getControl(control))) {\n this.publishShowControl();\n editor.themeController.addControl(control, this.template.BaseTemplate.body, beforeItem);\n if (editor.templatesController.currentTemplateKey === this.templateKey) {\n editor.selection.selectControl(control);\n this.isOnTemplate(editor.themeController.isInTemplate(this.resolvedControl, this.templateKey));\n }\n }\n\n }\n } else {\n this.publishShowControl();\n editor.themeController.cutControl([this.resolvedControl], [layoutControls]);\n if (editor.templatesController.currentTemplateKey === this.templateKey) {\n PubSubController.publish(Channels.history.controlRemove, {control: this.resolvedControl});\n editor.selection.resetSelection();\n this.isOnTemplate(editor.themeController.isInTemplate(this.resolvedControl, this.templateKey));\n }\n }\n },\n owner: this,\n deferEvaluation: true\n });\n\n if (this.checked.dispose)\n this.checked.dispose();\n this.checked = this.value;\n}\n\nUtils.extend(UIPIsOnTemplate, UIPToggleControl);\n\nUIPIsOnTemplate.prototype.click = function () {\n 'use strict';\n this.value(!this.value());\n};"
},
"UIPIsResponsive.js": {
"type": "text",
"content": "/*exported UIPIsLayout*/\r\n/* global Utils, UIProvider, ResponsiveModeController*/\r\n\r\nfunction UIPIsResponsive(data) {\r\n 'use strict';\r\n UIPIsResponsive.superclass.constructor.call(this, data);\r\n this.visible(ResponsiveModeController.responsiveName() !== 'desktop');\r\n}\r\n\r\nUtils.extend(UIPIsResponsive, UIProvider);"
},
"UIPIsResponsiveEnabled.js": {
"type": "text",
"content": "/*global Utils, UIProvider, PWStackHelper*/\nfunction UIPIsResponsiveEnabled(data) {\n 'use strict';\n data.options.attr = 'responsive';\n data.options.expected = 'none';\n\n UIPIsResponsiveEnabled.superclass.constructor.call(this, data);\n\n this.visibilityProvider = PWStackHelper.getProvider(this.control(), {data: this.options.data, provider: {name: 'Hide', attr: this.options.attr, expected: data.options.expected}});\n\n this.baseVisible = this.visible;\n this.visible = ko.computed(\n {\n read: function () {\n if (!this.baseVisible())\n return false;\n\n return this.visibilityProvider.visible();\n },\n deferEvaluation: true,\n owner: this\n }\n );\n}\n\nUtils.extend(UIPIsResponsiveEnabled, UIProvider);\n\nUIPIsResponsiveEnabled.prototype.dispose = function () {\n 'use strict';\n UIPIsResponsiveEnabled.superclass.dispose.call(this);\n if (this.baseVisible.dispose)\n this.baseVisible.dispose();\n if (this.visibilityProvider) {\n this.visibilityProvider.dispose();\n }\n};\n"
},
"UIPIsSidebarsOnTemplate.js": {
"type": "text",
"content": "/* exported UIPIsSidebarsOnTemplate */\r\n/* global UIPToggleControl, Utils, editor, designer, TemplatesController, ErrorUtility, PreviewHelper,\r\n PubSubController, Channels, ThemeController, DataProviderFacade, ControlStorageController, _$, Collection, SharedController, koObservableController, ContentLayout */\r\n\r\nfunction UIPIsSidebarsOnTemplate(data) {\r\n 'use strict';\r\n UIPIsSidebarsOnTemplate.superclass.constructor.call(this, data);\r\n this.constructorName = this.options.constructorName;\r\n this.templateKey = this.options.templateKey;\r\n this.resolvedControl = editor.themeController.getControlInTemplateByConstructorName(this.constructorName, this.templateKey);\r\n this.template = TemplatesController.getValidTemplatesList(editor.themeController.getTheme())[this.templateKey];\r\n var control = editor.themeController.findControl(this.constructorName);\r\n if (control) {\r\n var facade = _$(control);\r\n var hasUnManagedCode = facade.hasUnManagedCode(DataProviderFacade.getCmsInfo().cmsName);\r\n var controlEditor = ControlStorageController.getEditorJson(facade.getPseudoStack());\r\n var canPlaceItemInto = designer.projectFacade.canPlaceDragItemInto({control: _$(this.template.BaseTemplate.body)}, {control : _$(control), editor: controlEditor}, hasUnManagedCode);\r\n this.enabled(canPlaceItemInto);\r\n }\r\n if (this.value.dispose)\r\n this.value.dispose();\r\n if (!this.enabled()) {\r\n this.enabled(!!this.resolvedControl);\r\n }\r\n this.value = ko.computed({\r\n read: function () {\r\n if (!this._valueChangeNotifier) {\r\n this._valueChangeNotifier = koObservableController.koBind(null,null, function () {\r\n return !!editor.themeController.getControlInTemplateByConstructorName(this.constructorName, this.templateKey);\r\n }.bind(this));\r\n }\r\n return this._valueChangeNotifier();\r\n },\r\n write: function (value) {\r\n var beforeItem = {},\r\n layoutControls,\r\n i,\r\n control,\r\n allTemplateControls,\r\n contentControl,\r\n contentPlaceholder;\r\n var getContentControl = function getContentControl(template) {\r\n var _contentControl;\r\n allTemplateControls = SharedController.getAllChildren([template.BaseTemplate.body]);\r\n for (i = 0; i < allTemplateControls.length; i++) {\r\n if (allTemplateControls[i].constructorName === 'Content') {\r\n _contentControl = allTemplateControls[i];\r\n break;\r\n }\r\n }\r\n return _contentControl;\r\n };\r\n layoutControls = this.template.BaseTemplate.body.items;\r\n if (value) {\r\n var contentLayoutControls = editor.themeController.getAllTypedControls(this.constructorName);\r\n if (contentLayoutControls.length) {\r\n contentLayoutControls.every(function (contentLayoutControl) {\r\n if (contentLayoutControl.template === editor.themeController.currentTemplateKey) {\r\n control = contentLayoutControl;\r\n return false;\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n beforeItem = PreviewHelper.getBeforeItemForShow(this.constructorName, this.templateKey, layoutControls);\r\n if (DataProviderFacade.getCmsInfo().cmsName.toLowerCase() === 'html') {\r\n allTemplateControls = SharedController.getAllChildren([this.template.BaseTemplate.body]);\r\n contentControl = getContentControl(this.template);\r\n if (contentControl) {\r\n contentPlaceholder = ThemeController.getControl(contentControl);\r\n var directParents = SharedController.getDirectParents(contentControl);\r\n var collection;\r\n if (directParents.length === 1 && (directParents[0] === this.template || allTemplateControls.indexOf(directParents[0]) !== -1)) {\r\n collection = directParents[0] === this.template ? directParents[0].BaseTemplate.body.items : editor.themeController.getControlCollection(directParents[0]);\r\n collection = directParents[0] instanceof ContentLayout ? editor.themeController.getControlCollection(directParents[0].content) : collection;\r\n if (collection) {\r\n this.publishShowControl();\r\n collection.splice(Collection.RESULT_AS_ARRAY, collection.indexOf(contentPlaceholder), 1);\r\n }\r\n } else if (directParents.length > 1) {\r\n directParents.forEach(function(parent) {\r\n if (parent === this.template || allTemplateControls.indexOf(parent) !== -1) {\r\n collection = parent === this.template ? parent.BaseTemplate.body.items : editor.themeController.getControlCollection(parent);\r\n this.publishShowControl();\r\n collection.splice(Collection.RESULT_AS_ARRAY, collection.indexOf(contentPlaceholder), 1);\r\n }\r\n }.bind(this));\r\n }\r\n }\r\n }\r\n if (!control) {\r\n window.historyManager.beginTransaction();\r\n designer.projectFacade.createControl(this.constructorName, null, function (error, ctrl) {\r\n ErrorUtility.logError(error);\r\n ctrl.template = this.templateKey;\r\n if (contentPlaceholder) {\r\n ctrl.content.items[0] = contentPlaceholder;\r\n }\r\n this.publishShowControl();\r\n editor.themeController.addControl(ctrl, this.template.BaseTemplate.body, beforeItem);\r\n window.historyManager.endTransaction();\r\n if (editor.templatesController.currentTemplateKey === this.templateKey) {\r\n editor.selection.selectControl(ctrl);\r\n }\r\n }.bind(this));\r\n } else {\r\n if (-1 === this.template.BaseTemplate.body.items.indexOf(ThemeController.getControl(control))) {\r\n this.publishShowControl();\r\n editor.themeController.addControl(control, this.template.BaseTemplate.body, beforeItem);\r\n if (editor.templatesController.currentTemplateKey === this.templateKey) {\r\n editor.selection.selectControl(control);\r\n }\r\n }\r\n\r\n }\r\n } else {\r\n if (DataProviderFacade.getCmsInfo().cmsName.toLowerCase() === 'html' && this.constructorName === 'ContentLayout') {\r\n allTemplateControls = SharedController.getAllChildren([this.template.BaseTemplate.body]);\r\n contentControl = getContentControl(this.template);\r\n if (contentControl) {\r\n contentPlaceholder = ThemeController.getControl(contentControl);\r\n }\r\n }\r\n var sidebarsControl = editor.themeController.getControlInTemplateByConstructorName(this.constructorName, this.templateKey);\r\n if (contentPlaceholder) {\r\n var bodyItems = this.template.BaseTemplate.body.items;\r\n this.publishShowControl();\r\n bodyItems[bodyItems.indexOf(ThemeController.getControl(sidebarsControl))] = contentPlaceholder;\r\n } else {\r\n window.historyManager.beginTransaction();\r\n if (!sidebarsControl.template) {\r\n sidebarsControl.template = this.templateKey;\r\n }\r\n this.publishShowControl();\r\n editor.themeController.cutControl([sidebarsControl], [layoutControls]);//TODO Maybe need remove from controls\r\n window.historyManager.endTransaction();\r\n }\r\n\r\n if (editor.templatesController.currentTemplateKey === this.templateKey) {\r\n PubSubController.publish(Channels.history.controlRemove, {control: sidebarsControl});\r\n editor.selection.resetSelection();\r\n }\r\n }\r\n },\r\n owner: this\r\n });\r\n\r\n if (this.checked.dispose)\r\n this.checked.dispose();\r\n this.checked = this.value;\r\n}\r\n\r\nUtils.extend(UIPIsSidebarsOnTemplate, UIPToggleControl);\r\n\r\nUIPIsSidebarsOnTemplate.prototype.click = function () {\r\n 'use strict';\r\n this.value(!this.value());\r\n};"
},
"UIPLaunchedFrom.js": {
"type": "text",
"content": "/*global Utils, UIProvider, AppSettings */\r\n\r\nfunction UIPLaunchedFrom(data) {\r\n 'use strict';\r\n UIPLaunchedFrom.superclass.constructor.call(this, data);\r\n this.visible(AppSettings.isFarm === (this.options.attr === 'Designer'));\r\n}\r\n\r\nUtils.extend(UIPLaunchedFrom, UIProvider);"
},
"UIPLayoutContainer.js": {
"type": "text",
"content": "/*global Utils, UIProvider, PreviewHelper */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPLayoutContainer(data) {\n 'use strict';\n\n var controlInfo = PreviewHelper.getControlInfo(data.control);\n var control = data.control;\n if (controlInfo)\n control = controlInfo.control;\n var isAbsolute = control.css('position') === 'absolute';\n\n var info;\n if (!isAbsolute) {\n info = PreviewHelper.getLayoutContainer(data.control);\n if (info) {\n data.control = info.control;\n }\n }\n\n UIPLayoutContainer.superclass.constructor.call(this, data);\n\n this.visible(!!info);\n}\n\nUtils.extend(UIPLayoutContainer, UIProvider);"
},
"UIPLayoutPosition.js": {
"type": "text",
"content": "/* global Utils, UIPHorizontalPositioning */\n\nfunction UIPLayoutPosition(data) {\n 'use strict';\n data.options.alignType = 'flex';\n UIPLayoutPosition.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPLayoutPosition, UIPHorizontalPositioning);"
},
"UIPLayoutProperty.js": {
"type": "text",
"content": "/*exported UIPLayoutProperty*/\r\n/*global Utils, UIPMixinStyleProxy */\r\n\r\nfunction UIPLayoutProperty(data) {\r\n 'use strict';\r\n UIPLayoutProperty.superclass.constructor.call(this, data);\r\n\r\n this.visible(!this.typeCategory && !this.inPrototypes);\r\n this.isNotStyle = ko.observable(!this.visible());\r\n}\r\n\r\nUtils.extend(UIPLayoutProperty, UIPMixinStyleProxy);\r\n"
},
"UIPLayoutRemove.js": {
"type": "text",
"content": "/*global Utils, UIProvider, PreviewHelper */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPLayoutRemove(data) {\n 'use strict';\n UIPLayoutRemove.superclass.constructor.call(this, data);\n\n var column = PreviewHelper.getClosestColumn(this.control());\n this.columnInfo = column ? PreviewHelper.getControlInfo(column.control) : null;\n if (!this.columnInfo) {\n this.column = this.control();\n } else {\n this.column = this.columnInfo.control;\n }\n\n var container = PreviewHelper.getContainerWithColumns(this.column);\n this.containerInfo = container ? PreviewHelper.getControlInfo(container.control) : null;\n if ((this.columnInfo && 'absolute' === this.columnInfo.control.resCss('position')) || !this.containerInfo) {\n this.visible(false);\n }\n}\n\nUtils.extend(UIPLayoutRemove, UIProvider);"
},
"UIPLayoutView.js": {
"type": "text",
"content": "/*global Utils, UIProvider, editor, Channels, PubSubController, CONST, PreviewHelper */\r\nfunction UIPLayoutView(data) {\r\n 'use strict';\r\n UIPLayoutView.superclass.constructor.call(this, data);\r\n\r\n this.checkEnabled = function () {\r\n if (this.enabled() && !editor.templatesController.currentTemplate) {\r\n this.enabled(false);\r\n }\r\n }.bind(this);\r\n\r\n this.update = (function (params) {\r\n editor.previewController.whenReady(function () {\r\n var pwItem = params.pwItem;\r\n if (pwItem.options.view === CONST.PREVIEW_MODES.DEFAULT_STYLES_MODE) {\r\n if (this.checked()) {\r\n editor.layoutViewController.hide(true);\r\n this.checked(false);\r\n }\r\n this.enabled(false);\r\n } else if (!PreviewHelper.isDefaultStylesActive()) {\r\n if (!this.checked() && editor.layoutViewController.isLayoutViewActive) {\r\n this.layoutViewShow();\r\n }\r\n\r\n if (!this.enabled()) {\r\n this.enabled(!!editor.templatesController.currentTemplate);\r\n }\r\n }\r\n }.bind(this));\r\n }).bind(this);\r\n\r\n this.layoutViewShow = function () {\r\n if (typeof editor.$previewJQuery === \"function\") {\r\n var $ = editor.$previewJQuery;\r\n var selectedItem = editor.selection.selectedItem,\r\n selectedDom = $('.' + PreviewHelper.getDataIdClass(selectedItem.dataId))[selectedItem.index];\r\n var popupDom = PreviewHelper.getPopUp($(selectedDom));\r\n editor.layoutViewController.show(popupDom.length ? popupDom : editor.$previewBody);\r\n this.checked(true);\r\n }\r\n };\r\n\r\n PubSubController.subscribe(Channels.propertyWindow.navigating, this.update);\r\n PubSubController.subscribe(Channels.previewEvents.loaded, this.checkEnabled);\r\n}\r\n\r\nUtils.extend(UIPLayoutView, UIProvider);\r\n\r\nUIPLayoutView.prototype.click = function () {\r\n 'use strict';\r\n if (this.checked()) {\r\n editor.layoutViewController.hide();\r\n this.checked(false);\r\n PubSubController.publish(Channels.layoutMode.modeOff);\r\n } else {\r\n PubSubController.publish(Channels.layoutMode.modeOn);\r\n this.layoutViewShow();\r\n }\r\n};\r\n\r\nUIPLayoutView.prototype.dispose = function () {\r\n 'use strict';\r\n UIPLayoutView.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.propertyWindow.navigating, this.update);\r\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this.checkEnabled);\r\n};"
},
"UIPLinkButton.js": {
"type": "text",
"content": "/*global Utils, UIPNavigate, editor, designer, PubSubController, Channels, BasicTagsResolver, ErrorUtility*/\nfunction UIPLinkButton(data) {\n 'use strict';\n UIPLinkButton.superclass.constructor.call(this, data);\n\n this.CONST = {propertyName: 'CreateLink'};\n\n this.setVisible = function () {\n var linkButtonVisible = true,\n info = this.getLink(editor.previewController.$currentFrame, true),\n basicTagsProperty,\n className\n ;\n if (data.options.unlink) {\n if (!(info.url && info.className)) {\n linkButtonVisible = false;\n }\n }\n if (info.url && !info.className) {\n linkButtonVisible = false;\n }\n basicTagsProperty = BasicTagsResolver.getBasicTagsProperty(this.control());\n className = basicTagsProperty ? basicTagsProperty.find('button').prop('classNames') : null;\n if (!className) {\n linkButtonVisible = false;\n }\n this.visible(linkButtonVisible && editor.contentEditorController.isEditing && (!window.LinkButton || !this.control().instanceOf(window.LinkButton)));\n }.bind(this);\n\n PubSubController.subscribe(Channels.contentEditor.start, this.setVisible);\n PubSubController.subscribe(Channels.contentEditor.stop, this.setVisible);\n PubSubController.subscribe(Channels.UI.linkChanged, this.setVisible);\n\n this.setVisible();\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n return this.getLink(editor.previewController.$currentFrame, true);\n },\n write: function (value) {\n var control = this.control(),\n basicTagsProperty = BasicTagsResolver.getBasicTagsProperty(control),\n className = basicTagsProperty ? basicTagsProperty.find('button').prop('classNames') : null,\n link\n ;\n if (data.options.unlink) {\n this.unlink(editor.previewController.$currentFrame, null, null);\n } else {\n link = this.getLink(editor.previewController.$currentFrame);\n if (link.className) {\n // update link\n this.unlink(editor.previewController.$currentFrame, value, className);\n } else {\n this.setLink(editor.previewController.$currentFrame, value, className);\n }\n }\n PubSubController.publish(Channels.UI.linkChanged, {});\n },\n owner: this,\n deferEvaluation: true\n });\n\n this.click = function () {\n if (data.options.unlink) {\n this.value('');\n } else {\n this.startAsync();\n designer.ui.dialog.promptDialog.show('Edit Hyperlink', '#EditHyperlink', 'OK', 'Cancel', this.value().url || \"http://\",\n function (errs, newUrl, canceled) {\n ErrorUtility.logError(errs);\n if (!canceled) {\n this.value(newUrl);\n this.stopAsync();\n }\n }.bind(this),\n function (val, successKey, callback) {\n callback(null, successKey);\n });\n }\n };\n}\n\nUtils.extend(UIPLinkButton, UIPNavigate);\n\nUIPLinkButton.prototype.dispose = function () {\n 'use strict';\n UIPLinkButton.superclass.dispose.call(this);\n PubSubController.unsubscribe(Channels.contentEditor.start, this.setVisible);\n PubSubController.unsubscribe(Channels.contentEditor.stop, this.setVisible);\n PubSubController.unsubscribe(Channels.UI.linkChanged, this.setVisible);\n};"
},
"UIPLinkStateTabs.js": {
"type": "text",
"content": "/*global Utils, UIPTabs, editor*/\n\nfunction UIPLinkStateTabs(data) {\n 'use strict';\n UIPLinkStateTabs.superclass.constructor.call(this, data);\n\n if (editor.selection.selectedItem.dataId === this.control().prop('dataId') && editor.selection.selectedItem.resolved) {\n var typography = this.options.typography;\n if (typography) {\n var typo = typography.split(';')[0];\n var idx = typo.indexOf('Link');\n if (idx === -1) {\n var viewOptions = editor.selection.selectedItem.resolved.controlInfo.editor.view;\n this.value(viewOptions && viewOptions.allowTextState === false ? 'LinkPassive' : 'Text');\n }\n else\n this.value(typo.substring(idx));\n }\n }\n}\n\nUtils.extend(UIPLinkStateTabs, UIPTabs);"
},
"UIPLinkUrl.js": {
"type": "text",
"content": "/*global Utils, UIPNavigate, editor, designer, PubSubController, Channels, ErrorUtility*/\r\nfunction UIPLinkUrl(data) {\r\n 'use strict';\r\n UIPLinkUrl.superclass.constructor.call(this, data);\r\n\r\n this.CONST = {propertyName: 'CreateLink'};\r\n\r\n this.setVisible = function () {\r\n var linkVisible = true,\r\n info = this.getLink(editor.previewController.$currentFrame, true)\r\n ;\r\n if (data.options.unlink) {\r\n if (!info.url) {\r\n linkVisible = false;\r\n }\r\n }\r\n if (info.url && info.className) {\r\n linkVisible = false;\r\n }\r\n this.visible(linkVisible && editor.contentEditorController.isEditing && (!window.LinkButton || !this.control().instanceOf(window.LinkButton)));\r\n }.bind(this);\r\n\r\n var allowedCodes = [35, 36, 37, 38, 39, 40];\r\n\r\n this.onKeyUp = function(ev) {\r\n if (allowedCodes.indexOf(ev.keyCode) !== -1){\r\n this.setVisible();\r\n }\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.keyEvents.keyUp, this.onKeyUp);\r\n\r\n PubSubController.subscribe(Channels.contentEditor.start, this.setVisible);\r\n PubSubController.subscribe(Channels.contentEditor.stop, this.setVisible);\r\n PubSubController.subscribe(Channels.UI.linkChanged, this.setVisible);\r\n\r\n this.setVisible();\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n return this.getLink(editor.previewController.$currentFrame, true);\r\n },\r\n write: function (value) {\r\n var link;\r\n if (data.options.unlink) {\r\n this.unlink(editor.previewController.$currentFrame);\r\n } else {\r\n link = this.getLink(editor.previewController.$currentFrame);\r\n if (link.url) {\r\n // update link\r\n this.unlink(editor.previewController.$currentFrame, value);\r\n } else {\r\n this.setLink(editor.previewController.$currentFrame, value);\r\n }\r\n }\r\n PubSubController.publish(Channels.UI.linkChanged, {});\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n this.click = function () {\r\n if (data.options.unlink) {\r\n this.value('');\r\n } else {\r\n this.startAsync();\r\n designer.ui.dialog.promptDialog.show('Edit Hyperlink', '#EditHyperlink', 'OK', 'Cancel', this.value().url || \"http://\",\r\n function (errs, newUrl, canceled) {\r\n ErrorUtility.logError(errs);\r\n if (!canceled) {\r\n this.value(newUrl);\r\n this.stopAsync();\r\n }\r\n }.bind(this),\r\n function (val, successKey, callback) {\r\n callback(null, successKey);\r\n });\r\n }\r\n };\r\n}\r\n\r\nUtils.extend(UIPLinkUrl, UIPNavigate);\r\n\r\n\r\nUIPLinkUrl.prototype.dispose = function () {\r\n 'use strict';\r\n UIPLinkUrl.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.keyEvents.keyUp, this.onKeyUp);\r\n PubSubController.unsubscribe(Channels.contentEditor.start, this.setVisible);\r\n PubSubController.unsubscribe(Channels.contentEditor.stop, this.setVisible);\r\n PubSubController.unsubscribe(Channels.UI.linkChanged, this.setVisible);\r\n};\r\n"
},
"UIPLockSource.js": {
"type": "text",
"content": "/*global Utils, UIPSwitchButton, ResizeProcessorController*/\n\nfunction UIPLockSource(data) {\n 'use strict';\n UIPLockSource.superclass.constructor.call(this, data);\n this.resizeProcessor = ResizeProcessorController.getProcessor(this.options.processor, this.options.eventName,\n this.options.attr, this.control());\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n return this.resizeProcessor.lock();\n },\n write: function (value) {\n this.resizeProcessor.lock(value);\n },\n owner: this,\n deferEvaluation: true\n });\n this.visible(this.visible() && this.resizeProcessor.lockVisible);\n}\n\nUtils.extend(UIPLockSource, UIPSwitchButton);"
},
"UIPLogin.js": {
"type": "text",
"content": "/* exported UIPLogin */\n/* global Utils, UIProvider, AppSettings, ProfileHelper */\nfunction UIPLogin(data) {\n 'use strict';\n UIPLogin.superclass.constructor.call(this, data);\n\n this._onLoginChange = this._onLoginChange.bind(this);\n this._onLoginChange();\n\n $(ProfileHelper).on('onlogin', this._onLoginChange);\n $(ProfileHelper).on('onlogout', this._onLoginChange);\n}\n\nUtils.extend(UIPLogin, UIProvider);\n\nUIPLogin.prototype._onLoginChange = function () {\n 'use strict';\n this.visible(!AppSettings.authorized);\n};\n\nUIPLogin.prototype.click = function () {\n 'use strict';\n if (AppSettings.authorized) {\n return;\n }\n\n ProfileHelper.showLoginForm();\n};\n\nUIPLogin.prototype.dispose = function () {\n 'use strict';\n $(ProfileHelper).off('onlogin', this._onLoginChange);\n $(ProfileHelper).off('onlogout', this._onLoginChange);\n\n UIPLogin.superclass.dispose.call(this);\n};\n\n"
},
"UIPLogout.js": {
"type": "text",
"content": "/* exported UIPLogout */\n/* global Utils, UIProvider, AppSettings, ProfileHelper */\n\nfunction UIPLogout(data) {\n 'use strict';\n UIPLogout.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPLogout, UIProvider);\n\nUIPLogout.prototype.click = function () {\n 'use strict';\n if (!AppSettings.authorized) {\n return;\n }\n\n ProfileHelper.logout();\n};\n\n"
},
"UIPLookupControl.js": {
"type": "text",
"content": "/*global Utils, UIProvider, editor, UIProvider, PubSubController, Channels, PreviewHelper, TraverseUtility, LogController, _$ */\n\nfunction UIPLookupControl(data) {\n 'use strict';\n\n UIPLookupControl.superclass.constructor.call(this, data);\n\n this.showIfAbsent = this.options.showIfAbsent || false;\n this.hideIfAbsent = this.options.hideIfAbsent || true;\n\n var lookupTemplateControl = function lookupTemplateControl(controlType) {\n if (!controlType || !editor.templatesController.currentTemplate)\n return null;\n\n var bg = _$(editor.templatesController.currentTemplate, 'BaseTemplate.body.pageBackground');\n if (bg.prop('constructorName') === controlType)\n return bg;\n\n var body = _$(editor.templatesController.currentTemplate, 'BaseTemplate.body');\n if (body.prop('constructorName') === controlType)\n return body;\n\n var controls = editor.themeController.getTopLevelControls();\n for (var i in controls) {\n /*CodeAnalyser skip:controlTraverse*/\n if (controls.hasOwnProperty(i)) {\n var control = _$(controls[i]);\n if (control.prop('constructorName') === controlType && PreviewHelper.getTopDomByDataIds(TraverseUtility.getAllDataIds(control)).length)\n return _$(control, '');\n }\n }\n return null;\n };\n\n this.updateCurrentTemplate = function () {\n LogController.time(\"UIPLookupControl updateCurrentTemplate\");\n var control = lookupTemplateControl(this.options.constructorName);\n if (!control) {\n this.enabled(this.showIfAbsent);\n if (this.hideIfAbsent)\n this.visible(this.showIfAbsent || this.options.alwaysVisible);\n } else {\n var resolvedControl = control;\n if (this.options.data && control.hasSubControl(this.options.data))\n resolvedControl = control.find(this.options.data);\n if (resolvedControl) {\n if (!this.showIfAbsent)\n this.control(resolvedControl);\n this.enabled(!this.showIfAbsent);\n if (this.hideIfAbsent)\n this.visible(!this.showIfAbsent || this.options.alwaysVisible);\n } else {\n this.enabled(this.showIfAbsent);\n if (this.hideIfAbsent)\n this.visible(this.showIfAbsent || this.options.alwaysVisible);\n }\n }\n if (this.options.disableOnlyOnTemplate && editor.templatesController.currentTemplate && editor.templatesController.currentTemplate.constructorName !== this.options.disableOnlyOnTemplate) {\n this.enabled(true);\n }\n LogController.timeEnd(\"UIPLookupControl updateCurrentTemplate\");\n }.bind(this);\n\n this.onControlRemove = function () {\n this.updateCurrentTemplate();\n }.bind(this);\n\n this.updateCurrentTemplate();\n\n PubSubController.subscribe(Channels.previewEvents.changedOrLoaded, this.updateCurrentTemplate);\n PubSubController.subscribe(Channels.controls.removing, this.onControlRemove);\n}\n\nUtils.extend(UIPLookupControl, UIProvider);\n\nUIPLookupControl.prototype.dispose = function () {\n 'use strict';\n UIPLookupControl.superclass.dispose.call(this);\n PubSubController.unsubscribe(Channels.previewEvents.changedOrLoaded, this.updateCurrentTemplate);\n PubSubController.unsubscribe(Channels.controls.removing, this.onControlRemove);\n};"
},
"UIPLookupEffect.js": {
"type": "text",
"content": "/**\r\n * Created by san0k on 04.03.2015.\r\n */\r\n/* exported UIPLookupEffect */\r\n/* globals Utils, UIPHasEffect, editor, Channels, PubSubController, _$ */\r\n\r\n\r\nfunction UIPLookupEffect(data) {\r\n 'use strict';\r\n\r\n UIPLookupEffect.superclass.constructor.call(this, data);\r\n\r\n this.onRemoveControlHandler = this.onRemoveControl.bind(this);\r\n PubSubController.subscribe(Channels.history.controlRemove, this.onRemoveControlHandler);\r\n}\r\n\r\nUtils.extend(UIPLookupEffect, UIPHasEffect);\r\n\r\nUIPLookupEffect.prototype.setEnabled = function setEnabled(effect) {\r\n 'use strict';\r\n if (!this.baseControl) {\r\n this.baseControl = this.control;\r\n this.control = ko.observable(this.baseControl());\r\n }\r\n this.visible(this.options.invert ? !effect : !!effect);\r\n if (effect) {\r\n if (this.control() !== effect)\r\n this.control(effect);\r\n } else {\r\n if (!this.options.invert)\r\n this.control(this.baseControl());\r\n }\r\n};\r\n\r\nUIPLookupEffect.prototype.dispose = function () {\r\n 'use strict';\r\n UIPLookupEffect.superclass.dispose.call(this);\r\n if (this.baseControl.dispose)\r\n this.baseControl.dispose();\r\n PubSubController.unsubscribe(Channels.history.controlRemove, this.onRemoveControlHandler);\r\n};\r\n\r\nUIPLookupEffect.prototype.onRemoveControl = function (controlInfo) {\r\n 'use strict';\r\n if (this.control && _$(controlInfo.control).isSameFacade(this.control())) {\r\n this.visible(this.options.invert ? true : false);\r\n this.control(this.baseControl() === this.control() ? _$(editor.themeController.getTheme()) : this.baseControl());\r\n }\r\n};"
},
"UIPLookupPresetControl.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 25.02.2015.\r\n */\r\n/*global Utils, UIProvider, UIProvider, ControlPresetsController */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPLookupPresetControl(data) {\r\n 'use strict';\r\n\r\n UIPLookupPresetControl.superclass.constructor.call(this, data);\r\n\r\n function getPresetsControl(control) {\r\n if (window[control.prop('constructorName')].savePreset) return control;\r\n\r\n var facadeIterator = control;\r\n while(!facadeIterator.isTopControl()) {\r\n facadeIterator = facadeIterator.parent();\r\n if (window[facadeIterator.prop('constructorName')].savePreset) {\r\n return facadeIterator;\r\n }\r\n }\r\n return control;\r\n }\r\n\r\n this.control(getPresetsControl(this.control()));\r\n\r\n this.startAsync();\r\n ControlPresetsController.hasPresets(this.control(), function (error, hasPresets) {\r\n this.visible(hasPresets);\r\n this.stopAsync();\r\n }.bind(this));\r\n}\r\n\r\nUtils.extend(UIPLookupPresetControl, UIProvider);"
},
"UIPLookupStyleControl.js": {
"type": "text",
"content": "/*exported UIPLookupStyleControl*/\n/*global Utils, UIProvider, MixinsController2, editor, _$ */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPLookupStyleControl(data) {\n 'use strict';\n UIPLookupStyleControl.superclass.constructor.call(this, data);\n\n var ctrl = MixinsController2.getCategoryMixin(this.options.typeCategory);\n if (!ctrl) {\n var controls = editor.themeController.getTopLevelControls();\n for (var i in controls) {\n /*CodeAnalyser skip:controlTraverse*/\n if (controls.hasOwnProperty(i) && controls[i].constructorName === this.options.typeCategory) {\n ctrl = controls[i];\n break;\n }\n }\n }\n\n if (ctrl)\n this.control(_$(ctrl));\n else\n this.visible(false);\n}\n\nUtils.extend(UIPLookupStyleControl, UIProvider);"
},
"UIPLookupStyleControls.js": {
"type": "text",
"content": "/*exported UIPLookupStyleControls*/\r\n/*global Utils, UIProvider, MixinsController, _$ */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPLookupStyleControls(data) {\r\n 'use strict';\r\n UIPLookupStyleControls.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPLookupStyleControls, UIProvider);\r\n\r\nUIPLookupStyleControls.prototype.fillItems = function(sourceObj){\r\n 'use strict';\r\n\r\n var items = [];\r\n var itemTemplate = {\r\n view: \"ControlCollapsed\",\r\n isStatic: false,\r\n rowStyle: \"checkedAsHover\"\r\n };\r\n\r\n if (this.options.style){\r\n itemTemplate.style = this.options.style;\r\n }\r\n if (this.options.hasOwnProperty('popupRight')){\r\n itemTemplate.popupRight = this.options.popupRight;\r\n }\r\n if (this.options.placeholder){\r\n itemTemplate.placeholder = this.options.placeholder;\r\n }\r\n\r\n for (var name in sourceObj) {\r\n if (sourceObj.hasOwnProperty(name)) {\r\n var mixin = sourceObj[name];\r\n if (!mixin || !mixin.constructorName) continue;\r\n\r\n itemTemplate.provider = {\r\n \"control\": _$(mixin)\r\n };\r\n itemTemplate.translate = !mixin.mixinName;\r\n\r\n items.push(itemTemplate);\r\n }\r\n }\r\n return items;\r\n};\r\n\r\nUIPLookupStyleControls.prototype.getItems = function getItems(callback) {\r\n 'use strict';\r\n var mixins = MixinsController.getMixinsByCategory(this.options.typeCategory);\r\n var items = this.fillItems(mixins);\r\n\r\n if (items.length === 0){\r\n var proto = MixinsController.getPrototypesByCategory(this.options.typeCategory);\r\n items = this.fillItems(proto);\r\n }\r\n\r\n if ('function' === typeof callback) {\r\n callback(null, items);\r\n }\r\n};\r\n"
},
"UIPLookupTemplate.js": {
"type": "text",
"content": "/*global Utils, UIProvider, ControlStorageController, ImageController, TemplatesController, designer, editor, PubSubController, Channels*/\r\n\r\nfunction UIPLookupTemplate(data) {\r\n 'use strict';\r\n UIPLookupTemplate.superclass.constructor.call(this, data);\r\n\r\n this.updateCurrentTemplate = function (key) {\r\n var validTemplates = TemplatesController.getValidTemplatesList(editor.themeController.getTheme());\r\n var currentTemplate = key && validTemplates[key];\r\n var checked = currentTemplate && currentTemplate.constructorName === this.options.constructorName &&\r\n (!currentTemplate.BaseTemplate.isCustomTemplate || this.options.allowCustomTemplates);\r\n if (this.options.showWhenActive)\r\n this.visible(checked);\r\n this.checked(checked);\r\n }.bind(this);\r\n\r\n this.updateTemplateList = function () {\r\n this.visible(false);\r\n var validTemplates = TemplatesController.getValidTemplatesList(editor.themeController.getTheme());\r\n for (var i in validTemplates)\r\n if (validTemplates.hasOwnProperty(i) && validTemplates[i].constructorName === this.options.constructorName) {\r\n var stack = [\r\n {propertyName: '', constructorName: this.options.constructorName}\r\n ];\r\n if (typeof this.options.caption === \"undefined\")\r\n this.caption(ControlStorageController.getEditorJson(stack).caption);\r\n this.templateIcon = ControlStorageController.getBaseIcon(stack);\r\n //this.icon('url(' + ImageController.getIconUrl(templateIcon ? ImageController.base64ToDataUrl(templateIcon) : this.defaultIcon) + ')');\r\n this.key = i;\r\n this.visible(true);\r\n }\r\n\r\n\r\n if (window.editor && editor.templatesController)\r\n this.updateCurrentTemplate(editor.templatesController.currentTemplateKey);\r\n else // HACK\r\n this.updateCurrentTemplate('home');\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.template.changed, this.updateCurrentTemplate);\r\n PubSubController.subscribe(Channels.template.listChanged, this.updateTemplateList);\r\n\r\n this.updateTemplateList();\r\n}\r\n\r\nUtils.extend(UIPLookupTemplate, UIProvider);\r\n\r\nUIPLookupTemplate.prototype.dispose = function () {\r\n 'use strict';\r\n UIPLookupTemplate.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.template.changed, this.updateCurrentTemplate);\r\n PubSubController.unsubscribe(Channels.template.listChanged, this.updateTemplateList);\r\n};\r\n\r\nUIPLookupTemplate.prototype.click = function () {\r\n 'use strict';\r\n designer.projectFacade.switchTemplate(this.key, true);\r\n};\r\n\r\nUIPLookupTemplate.prototype.toString = function () {\r\n 'use strict';\r\n if (!this.visible())\r\n return '';\r\n if (!this.options.activeIcon && !this.options.passiveIcon)\r\n return '';\r\n return '';\r\n};"
},
"UIPMacros.js": {
"type": "text",
"content": "/*exported UIPMacros*/\r\n/*global Utils, UIProvider, MacrosController */\r\nfunction UIPMacros(data) {\r\n 'use strict';\r\n UIPMacros.superclass.constructor.call(this, data);\r\n this.methodName = this.options.methodName;\r\n this.enabled(\r\n (this.methodName === 'startRecord' && MacrosController.status === 'waiting') ||\r\n (this.methodName === 'stopRecord' && MacrosController.status === 'recording') ||\r\n (this.methodName === 'play' && MacrosController.actions.length > 0 && MacrosController.status === 'waiting') ||\r\n (this.methodName === 'resultsToConsole' && MacrosController.actions.length > 0)\r\n );\r\n}\r\n\r\nUtils.extend(UIPMacros, UIProvider);\r\n\r\nUIPMacros.prototype.click = function () {\r\n 'use strict';\r\n MacrosController[this.methodName]();\r\n};\r\n"
},
"UIPMargin.js": {
"type": "text",
"content": "/*exported UIPMargin*/\r\n/*global Utils, UIPCssProperty */\r\n\r\nfunction UIPMargin(data) {\r\n 'use strict';\r\n // Should be defined before superclass constructor call\r\n this.collapsePairs = true;\r\n this.sides = {\r\n 'all': 'margin',\r\n 'top': 'margin-top',\r\n 0: 'margin-top',\r\n 'right': 'margin-right',\r\n 1: 'margin-right',\r\n 'bottom': 'margin-bottom',\r\n 2: 'margin-bottom',\r\n 'left': 'margin-left',\r\n 3: 'margin-left'\r\n };\r\n\r\n UIPMargin.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPMargin, UIPCssProperty);"
},
"UIPMemoryStatus.js": {
"type": "text",
"content": "/*exported UIPMemoryStatus*/\n/*global Utils, UIProvider, performance, gc*/\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPMemoryStatus(data) {\n 'use strict';\n UIPMemoryStatus.superclass.constructor.call(this, data);\n this.visible(!!(typeof gc === 'function' && (performance && performance.memory && performance.memory.usedJSHeapSize)));\n if (this.visible()) {\n this.updateStats();\n setInterval(this.updateStats.bind(this), 15000);\n }\n}\n\nUtils.extend(UIPMemoryStatus, UIProvider);\n\nUIPMemoryStatus.prototype.click = function () {\n 'use strict';\n var totalGsCalls = 5;\n\n for (var i = 0; i < totalGsCalls - 1; i++) {\n gc(); // should call gc onClick 'totalGsCalls' times in total\n }\n\n this.updateStats();\n};\n\nUIPMemoryStatus.prototype.updateStats = function () {\n 'use strict';\n gc();\n return this.caption((performance.memory.usedJSHeapSize / 1024 / 1024).toFixed(1) + ' Mb');\n};"
},
"UIPMenuLevels.js": {
"type": "text",
"content": "/*exported UIPMenuLevels*/\n/*global Utils, UIProvider, koObservableController, ErrorUtility */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPMenuLevels(data) {\n 'use strict';\n\n UIPMenuLevels.superclass.constructor.call(this, data);\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n if (this.options.attr !== \"levels\" && this.options.attr !== \"responsiveLevels\")\n ErrorUtility.logError(new Error(\"UIPMenuLevels attr is invalid: \" + this.options.attr));\n if (!this._valueChangeNotifier) {\n this._valueChangeNotifier = koObservableController.koBind(this.control(), this.options.attr, function (value) {\n if (value === \"\") {\n if (this.options.attr === \"levels\") {\n return \"expand on hover\";\n }\n if (this.options.attr === \"responsiveLevels\") {\n return \"expand on click\";\n }\n }\n return value;\n }.bind(this));\n }\n return this._valueChangeNotifier();\n\n },\n write: function (value) {\n this.control().prop(this.options.attr, value);\n },\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPMenuLevels, UIProvider);"
},
"UIPMixinStyleProxy.js": {
"type": "text",
"content": "/*global Utils, UIProvider, ControlStorageController, editor, _$, PubSubController, Channels, l,\r\n MixinsController*/\r\nfunction UIPMixinStyleProxy(data) {\r\n 'use strict';\r\n UIPMixinStyleProxy.superclass.constructor.call(this, data);\r\n\r\n this.MAX_MIXIN_NAME_LENGTH = 12;\r\n\r\n this.typeCategory = ControlStorageController.getEditorJson(this.control().getPseudoStack()).typeCategory;\r\n this.inPrototypes = editor.themeController.isInPrototypes(this.control());\r\n\r\n var facade = this.control();\r\n var dataId = facade.prop('dataId');\r\n this.controlChangeNotifier = ko.observable(false);\r\n\r\n this.control = ko.computed(function () {\r\n this.controlChangeNotifier();\r\n if (facade && facade.prop('dataId') !== dataId) {\r\n dataId = facade.prop('dataId');\r\n facade = _$({dataId: dataId}) || facade;\r\n }\r\n\r\n\r\n return facade;\r\n }, this, {deferEvaluation: true});\r\n\r\n this.onControlReplaced = function (data) {\r\n for (var i = 0; i < data.oldControl.length; i++)\r\n if (facade.isSameFacade(data.oldControl[i]) || facade.isSameFacade(data.newControl[i])) {\r\n dataId = -1;\r\n this.controlChangeNotifier(!this.controlChangeNotifier());\r\n break;\r\n }\r\n }.bind(this);\r\n\r\n PubSubController.subscribe(Channels.controls.replaced, this.onControlReplaced);\r\n}\r\n\r\nUtils.extend(UIPMixinStyleProxy, UIProvider);\r\n\r\nUIPMixinStyleProxy.prototype.collectNames = function () {\r\n 'use strict';\r\n return Object.keys(MixinsController.getMixinsByCategory(this.typeCategory));\r\n};\r\n\r\nUIPMixinStyleProxy.prototype.validateName = function (val, successKey, callback) {\r\n 'use strict';\r\n var mixinNames = this.collectNames();\r\n if (val.length > this.MAX_MIXIN_NAME_LENGTH) {\r\n callback(null, l('#StyleNameIsTooLong', this.MAX_MIXIN_NAME_LENGTH + 1));\r\n } else if (mixinNames.indexOf(val) !== -1) {\r\n callback(null, l('#DuplicateStyleName', val));\r\n } else {\r\n callback(null, successKey);\r\n }\r\n};\r\n\r\nUIPMixinStyleProxy.prototype.dispose = function () {\r\n 'use strict';\r\n UIPMixinStyleProxy.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.controls.replaced, this.onControlReplaced);\r\n};\r\n\r\n"
},
"UIPMorePages.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 20.05.2015.\r\n */\r\n/*global Utils, UIProvider, editor, PubSubController, Channels, ErrorUtility */\r\n/**\r\n *\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPMorePages(data) {\r\n 'use strict';\r\n UIPMorePages.superclass.constructor.call(this, data);\r\n\r\n this.updateVisible = function () {\r\n this.visible(!editor.pagesListController.isFullyLoaded(this.options.postType));\r\n }.bind(this);\r\n\r\n this.updateVisible();\r\n\r\n PubSubController.subscribe(Channels.pages.listUpdated, this.updateVisible);\r\n}\r\n\r\nUtils.extend(UIPMorePages, UIProvider);\r\n\r\nUIPMorePages.prototype.click = function () {\r\n 'use strict';\r\n\r\n // 1. add more items to PagesListController cache\r\n // 2. update list in UIPPagesList\r\n this.visible(false);\r\n this.startAsync();\r\n editor.pagesListController.getItems(this.options.postType, editor.pagesListController.getSearchQuery(this.options.postType), true, function (error) {\r\n this.stopAsync();\r\n if (error) {\r\n ErrorUtility.logWarning(error);\r\n this.visible(true);\r\n return;\r\n }\r\n }.bind(this));\r\n};\r\n\r\nUIPMorePages.prototype.dispose = function () {\r\n 'use strict';\r\n UIPMorePages.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.pages.listUpdated, this.updateVisible);\r\n};"
},
"UIPMorePagesAll.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 16.07.2015.\r\n */\r\n/*global Utils, UIProvider, editor, PubSubController, Channels, ErrorUtility*/\r\nfunction UIPMorePagesAll(data) {\r\n 'use strict';\r\n UIPMorePagesAll.superclass.constructor.call(this, data);\r\n\r\n this.updateVisible = function () {\r\n this.visible(!editor.pagesListController.isFullyLoaded('page') || !editor.pagesListController.isFullyLoaded('post'));\r\n }.bind(this);\r\n\r\n this.updateVisible();\r\n\r\n PubSubController.subscribe(Channels.pages.listUpdated, this.updateVisible);\r\n}\r\n\r\nUtils.extend(UIPMorePagesAll, UIProvider);\r\n\r\nUIPMorePagesAll.prototype.click = function () {\r\n 'use strict';\r\n this.startAsync();\r\n this.visible(false);\r\n editor.pagesListController.getItems('page', editor.pagesListController.getSearchQuery('page'), true, function (error) {\r\n ErrorUtility.logWarning(error);\r\n editor.pagesListController.getItems('post', editor.pagesListController.getSearchQuery('post'), true, function (error1) {\r\n ErrorUtility.logWarning(error1);\r\n this.visible(true);\r\n this.stopAsync();\r\n }.bind(this));\r\n }.bind(this));\r\n};\r\n\r\nUIPMorePagesAll.prototype.dispose = function () {\r\n 'use strict';\r\n UIPMorePagesAll.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.pages.listUpdated, this.updateVisible);\r\n};"
},
"UIPMoveControl.js": {
"type": "text",
"content": "/*global UIProvider, Utils, PreviewHelper, designer, ThemeController, editor, ErrorUtility*/\r\n/*exported UIPMoveControl*/\r\n\r\nfunction UIPMoveControl(data) {\r\n 'use strict';\r\n var selectedItemInfo,\r\n itemMoveInfo,\r\n hoveredDom\r\n ;\r\n this._CONST = {\r\n UP: 'up',\r\n DOWN: 'down',\r\n SECTION_CONSTRUCTOR_NAME: 'Section'\r\n };\r\n UIPMoveControl.superclass.constructor.call(this, data);\r\n this.direction = this.options.direction;\r\n selectedItemInfo = PreviewHelper.getControlInfo(this.control());\r\n itemMoveInfo = PreviewHelper.getItemMoveInfo(selectedItemInfo);\r\n this.dragInfo = itemMoveInfo.item;\r\n this.dropInfo = PreviewHelper.getControlParentInfo(this.dragInfo, null, function () {\r\n return true;\r\n });\r\n if (!this.dropInfo) {\r\n this.visible(false);\r\n return;\r\n }\r\n hoveredDom = selectedItemInfo.controlDoms;\r\n if (hoveredDom.css('position') === 'absolute' ||\r\n this.control().css('position') ||\r\n hoveredDom.css('position') === 'fixed' ||\r\n this.control().css('position')) {\r\n this.visible(false);\r\n return;\r\n }\r\n this.controlCollection = ThemeController.getControlCollection(this.dropInfo.control.getModelControl());\r\n if (this.control().prop('constructorName') === this._CONST.SECTION_CONSTRUCTOR_NAME) {\r\n this.visible(false);\r\n return;\r\n }\r\n if (this.controlCollection.length === 1) {\r\n this.visible(false);\r\n return;\r\n }\r\n this.collectionControl = ThemeController.getControl(this.control());\r\n this.controlIndex = this.controlCollection.indexOf(this.collectionControl);\r\n // 2 is for BackToTop\r\n var offset = 1;\r\n var controlPath = this.controlCollection[this.controlCollection.length - 1];\r\n var __pathControl = ThemeController.getControlByPath(editor.themeController.getTheme(), controlPath);\r\n if (controlPath && 'string' === typeof controlPath &&\r\n __pathControl &&\r\n __pathControl.prop('constructorName') === 'BackToTop') {\r\n offset = 2;\r\n }\r\n if (this.controlIndex === 0 && this.direction === this._CONST.UP||\r\n this.controlIndex === this.controlCollection.length - offset && this.direction === this._CONST.DOWN) {\r\n this.visible(false);\r\n }\r\n}\r\n\r\nUtils.extend(UIPMoveControl, UIProvider);\r\n\r\nUIPMoveControl.prototype.click = function click() {\r\n 'use strict';\r\n var positionIndex,\r\n beforeControl,\r\n beforeItem,\r\n dragContainer\r\n ;\r\n historyManager.beginTransaction();\r\n designer.projectFacade.cut(this.dragInfo.control.getModelControl());\r\n positionIndex = this.direction === this._CONST.UP ? this.controlIndex - 1 : this.controlIndex + 1;\r\n beforeControl = this.controlCollection ? this.controlCollection[positionIndex] : null;\r\n if ('string' === typeof beforeControl) {\r\n beforeItem = PreviewHelper.getControlInfo(editor.themeController.getControlByPath(beforeControl), null, function() {return true;});\r\n } else {\r\n beforeItem = PreviewHelper.getControlInfo(beforeControl, null, function() {return true;});\r\n }\r\n dragContainer = PreviewHelper.getControlParentInfo(this.dragInfo, null, function () {\r\n return true;\r\n });\r\n designer.projectFacade.paste(\r\n this.dragInfo,\r\n this.dropInfo,\r\n {\r\n before: beforeItem,\r\n dragContainer: dragContainer\r\n },\r\n function (error) {\r\n historyManager.endTransaction();\r\n ErrorUtility.logError(error);\r\n }.bind(this));\r\n};"
},
"UIPNavigate.js": {
"type": "text",
"content": "/*global Utils, UIProvider, LinkHelper, editor, ButtonHelper, InputHelper, SelectionRange, LightboxHelper,\r\nChannels, PubSubController, SelectionResolver, LinkButton, PreviewHelper */\r\n/**\r\n *\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPNavigate(data) {\r\n 'use strict';\r\n\r\n UIPNavigate.superclass.constructor.call(this, data);\r\n\r\n this.activeHelper = LinkHelper;\r\n var resolvedData = editor.selection.selectedItem.resolved;\r\n this.target = resolvedData ?\r\n (resolvedData.unchangedClickedDom ? resolvedData.unchangedClickedDom : resolvedData.controlInfo.clickedDom) : null;\r\n this.visible(this.isVisible(this.target));\r\n this.onUnload = this.onUnload.bind(this);\r\n PubSubController.once(Channels.previewEvents.unload, this.onUnload);\r\n}\r\n\r\nUtils.extend(UIPNavigate, UIProvider);\r\n\r\nUIPNavigate.prototype.clickHelpers = [LightboxHelper, LinkHelper, ButtonHelper, InputHelper];\r\n\r\nUIPNavigate.prototype.click = function () {\r\n 'use strict';\r\n this.activeHelper.apply(this.target);\r\n};\r\n\r\nUIPNavigate.prototype.isVisible = function (target) {\r\n 'use strict';\r\n if (!target)\r\n return false;\r\n\r\n if (!LinkHelper.enableToOpen(target)) {\r\n return false;\r\n }\r\n\r\n // container effect around LinkButton\r\n var info = SelectionResolver.getSelectionInfoByDom(target);\r\n if (info && info.controlInfo && info.controlInfo.control.instanceOf(LinkButton)) {\r\n var domInfo = PreviewHelper.getControlInfoById(info.controlInfo.control.prop('dataId'));\r\n if (domInfo && domInfo.controlDoms.length) {\r\n target = $(domInfo.controlDoms[0]);\r\n }\r\n }\r\n\r\n var result = false;\r\n $.each(this.clickHelpers, function (index, value) {\r\n if (value.allowClick(target)) {\r\n this.activeHelper = value;\r\n result = true;\r\n }\r\n return !result;\r\n }.bind(this));\r\n\r\n return result;\r\n};\r\n\r\nUIPNavigate.prototype.unlink = function unLink(documentFrame, url, className) {\r\n 'use strict';\r\n var selectionRange = new SelectionRange(documentFrame);\r\n selectionRange.unlink(url, className);\r\n selectionRange.dispose();\r\n};\r\n\r\nUIPNavigate.prototype.setLink = function (documentFrame, url, className) {\r\n 'use strict';\r\n var selectionRange = new SelectionRange(documentFrame);\r\n selectionRange.setLink(url, className);\r\n selectionRange.dispose();\r\n};\r\n\r\nUIPNavigate.prototype.getLink = function (documentFrame, ignoreSelection) {\r\n 'use strict';\r\n var selectionRange = new SelectionRange(documentFrame);\r\n var link = selectionRange.getLink(ignoreSelection);\r\n selectionRange.dispose();\r\n return link;\r\n};\r\n\r\nUIPNavigate.prototype.dispose = function () {\r\n 'use strict';\r\n UIPNavigate.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.previewEvents.unload, this.onUnload);\r\n this.onUnload();\r\n};\r\n\r\nUIPNavigate.prototype.onUnload = function () {\r\n 'use strict';\r\n this.target = null;\r\n};"
},
"UIPNavigateBack.js": {
"type": "text",
"content": "/*exported UIPNavigateBack*/\n/*global Channels, Utils, UIProvider, PubSubController */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPNavigateBack(data) {\n 'use strict';\n UIPNavigateBack.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPNavigateBack, UIProvider);\n\nUIPNavigateBack.prototype.click = function () {\n 'use strict';\n PubSubController.publish(Channels.propertyWindow.navigate, null);\n};"
},
"UIPNewLine.js": {
"type": "text",
"content": "/*global Utils, UIPosition, koObservableController, SharedController, _$*/\r\n\r\nfunction UIPNewLine(data) {\r\n 'use strict';\r\n UIPNewLine.superclass.constructor.call(this, data);\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n if (!this._valueChangeNotifier) {\r\n this._valueChangeNotifier = koObservableController.koBind(this.resolvedControl, '', function () {\r\n return this.resolvedControl && this.resolvedControl.resCss('clear') === 'both';\r\n }.bind(this));\r\n }\r\n return this._valueChangeNotifier();\r\n }.bind(this),\r\n write: function (value) {\r\n if (value) {\r\n this.resolvedControl.css('clear', 'both');\r\n } else {\r\n this.resolvedControl.css('clear', '');\r\n }\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n if (this.checked && this.checked.dispose)\r\n this.checked.dispose();\r\n this.checked = this.value;\r\n\r\n if (this.visible.dispose)this.visible.dispose();\r\n this.visible = koObservableController.koBind(this.control(), '', function (control) {\r\n var float = control.css('float');\r\n if (!float)return false;\r\n var parents = SharedController.getDirectParents(control);\r\n if (parents.length) {\r\n var children = SharedController.getAllChildren([parents[0]]);\r\n for (var i = 0; i < children.length; i++) {\r\n var kid = _$(children[i]);\r\n if (control.isSameFacade(kid))\r\n return false;\r\n if (kid.css('float') === float)\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n}\r\n\r\nUtils.extend(UIPNewLine, UIPosition);\r\n\r\nUIPNewLine.prototype.click = function () {\r\n 'use strict';\r\n this.value(!this.value());\r\n};\r\n"
},
"UIPNewTheme.js": {
"type": "text",
"content": "/* globals designer, ErrorUtility, Utils, UIPThemeFromFile, ManifestController, CONST, DataProviderFacade, PubSubController, Channels */\n\nfunction UIPNewTheme(data) {\n 'use strict';\n UIPNewTheme.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPNewTheme, UIPThemeFromFile);\n\nUIPNewTheme.prototype.click = function () {\n 'use strict';\n this.uploadFromUrl(CONST.UPLOAD_TYPE.THEME, ManifestController.manifestUrls.defaultThemeUrl, {isCdn: true});\n};\n\nUIPNewTheme.prototype.selectThemeName = function selectThemeName(currentThemeName, callback) {\n 'use strict';\n PubSubController.publish(Channels.loadIcon.hide);\n designer.ui.dialog.promptDialog.show('New Theme', '#ENTER_NEW_NAME', 'OK', 'Cancel', currentThemeName,\n function (err, newThemeName, canceled) { // \"modal\" callback\n if (err) {\n ErrorUtility.logError(err);\n return;\n }\n if (!canceled) {\n if (newThemeName !== currentThemeName) {\n PubSubController.publish(Channels.loadIcon.show);\n DataProviderFacade.renameTheme(currentThemeName, newThemeName, function (err) {\n if (err) {\n callback(err);\n return;\n }\n callback(null, newThemeName);\n PubSubController.publish(Channels.loadIcon.hide);\n });\n } else {\n callback(null, currentThemeName);\n }\n }\n },\n function (val, successKey, callback) { // Validation\n if (val === currentThemeName) {\n callback(null, successKey);\n return;\n }\n DataProviderFacade.themeNameValidation(val, successKey, true, function (error, result) {\n if (!error) {\n callback(null, result);\n }\n });\n }\n );\n};\n\nUIPNewTheme.prototype.generateFileName = function generateFileName() {\n 'use strict';\n var DEFAULT_FILE_NAME = 'Untitled';\n var extension = DataProviderFacade.getCmsInfo().themeArchiveExt || 'zip';\n return DEFAULT_FILE_NAME + '.' + extension;\n};"
},
"UIPOnDefaultStyles.js": {
"type": "text",
"content": "/*global Utils, UIProvider, PreviewHelper, PubSubController, Channels*/\r\nfunction UIPOnDefaultStyles(data) {\r\n 'use strict';\r\n UIPOnDefaultStyles.superclass.constructor.call(this, data);\r\n\r\n this.recalculateVisible = function () {\r\n this.visible(PreviewHelper.isDefaultStylesActive());\r\n }.bind(this);\r\n\r\n this.recalculateVisible();\r\n\r\n PubSubController.subscribe(Channels.previewEvents.stylingLoaded, this.recalculateVisible);\r\n PubSubController.subscribe(Channels.previewEvents.stylingHided, this.recalculateVisible);\r\n}\r\n\r\nUtils.extend(UIPOnDefaultStyles, UIProvider);\r\n\r\nUIPOnDefaultStyles.prototype.dispose = function () {\r\n 'use strict';\r\n UIPOnDefaultStyles.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.previewEvents.stylingLoaded, this.recalculateVisible);\r\n PubSubController.unsubscribe(Channels.previewEvents.stylingHided, this.recalculateVisible);\r\n};"
},
"UIPOpenTS.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 05.10.2015.\r\n */\r\n/*global Utils, UIProvider, stylingController*/\r\nfunction UIPOpenTS(data) {\r\n 'use strict';\r\n UIPOpenTS.superclass.constructor.call(this, data);\r\n\r\n this.click = function () {\r\n stylingController.show({dataId: this.control().prop('dataId'), index: 0});\r\n };\r\n}\r\n\r\nUtils.extend(UIPOpenTS, UIProvider);\r\n"
},
"UIPosition.js": {
"type": "text",
"content": "/*exported UIPPosition*/\r\n/* global _$, editor, Utils, UIProvider, TransformList, TransformFunction, Unit*/\r\n\r\nfunction UIPosition(data) {\r\n 'use strict';\r\n UIPosition.superclass.constructor.call(this, data);\r\n this.resolvedControl = _$(editor.themeController.getTopLevelSelectableControl(data.control));\r\n this.getControlPosition = function () {\r\n if (this.resolvedControl.resCss('position') === '' || this.resolvedControl.resCss('position') === 'relative') {\r\n return 'layout';\r\n } else {\r\n return this.resolvedControl.resCss('position');\r\n }\r\n };\r\n}\r\n\r\nUtils.extend(UIPosition, UIProvider);\r\n\r\n\r\nUIPosition.prototype.setTransform = function setTransform(translateX, translateY) {\r\n 'use strict';\r\n var transformList = new TransformList(),\r\n transformCss;\r\n transformList.items = [\r\n new TransformFunction({name: 'translateX', args: [new Unit(translateX)]}),\r\n new TransformFunction({name: 'translateY', args: [new Unit(translateY)]})\r\n ];\r\n transformCss = transformList.toCss();\r\n this.resolvedControl.css('transform', transformCss);\r\n};\r\n"
},
"UIPOutline.js": {
"type": "text",
"content": "/* global ko, $, Utils, UIProvider, PreviewHelper, editor, _$, PubSubController, Channels, designer,\n ControlTemplateController, DataProviderFacade, ThemeController, ErrorUtility, OutlineController, PWStackHelper,\n ThemlerModeController, LogController, ShortcodesEditor, TraverseUtility, UIHelper, ContentLayout, CONST*/\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPOutline(data) {\n 'use strict';\n\n data.options = $.extend({}, data.options);\n data.options.items = [];\n this.translateCategories = false;\n\n /* Show arrow icon when hovering on items. */\n data.options.arrowIcon = true;\n\n UIPOutline.superclass.constructor.call(this, data);\n\n if (this.visible.dispose) {\n this.visible.dispose();\n }\n this.visible = ko.computed(function () {\n return ThemlerModeController.currentMode() !== 'sections';\n }, this, {deferEvaluation: true});\n\n this.allowDeepDnd = typeof this.options.allowDeepDnd === \"boolean\" ?\n this.options.allowDeepDnd :\n true;\n this.large = typeof this.options.large === \"boolean\" ?\n this.options.large :\n false;\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n return OutlineController.selectedItem();\n },\n write: function (value) {\n var dataId = value.dataId;\n var index = value.domIndex;\n //this.navigate(this.options.href, value, this.options);\n var controlInfo = PreviewHelper.getControlInfoById(dataId);\n if (controlInfo) {\n var parentInfo = PreviewHelper.getControlParentInfo(controlInfo);\n if (parentInfo) {\n if (parentInfo.control.prop('constructorName') === 'Slide') {\n editor.sliderController.setActive(parentInfo.control.getTopModelControl(),\n parentInfo.control.prop('classNames'));\n }\n if (parentInfo.control.prop('constructorName') === 'Slider') {\n editor.sliderController.setActive(parentInfo.control.getModelControl(), controlInfo.control.prop('classNames'));\n }\n }\n }\n var control = null;\n if (controlInfo) {\n control = controlInfo.control;\n } else {\n control = _$({dataId: dataId});\n }\n if (control) {\n PreviewHelper.scrollToControl(control.prop('dataId'), index, null, true, true);\n window.clearTimeout(this.timerSubcription);\n this.timerSubcription = window.setTimeout(function () {\n editor.selection.selectControl(control, index);\n }, 500);\n }\n OutlineController.selectedItem(value);\n },\n owner: this,\n deferEvaluation: true\n });\n\n // DR-10592\n this.updateItems = function (eventArgs, callback) {\n if (eventArgs && eventArgs.doNotRefreshOutline === this) {\n return;\n }\n // update items\n this.getItems(function (error, items) {\n this.items(items);\n if (typeof callback === \"function\")\n callback();\n }.bind(this));\n }.bind(this);\n\n PubSubController.subscribe(Channels.pages.currentPageChanged, this.updateItems);\n\n var hoveredItem = {\n dataId: null,\n index: 0\n };\n\n this.onMouseEnter = function (event, itemValue) {\n var prevHoveredDataId = hoveredItem.dataId;\n\n if (itemValue) {\n hoveredItem = {\n dataId: itemValue.dataId,\n index: itemValue.domIndex\n };\n } else {\n hoveredItem = {\n dataId: null,\n index: 0\n };\n }\n if (prevHoveredDataId !== hoveredItem.dataId) {\n PubSubController.publish(Channels.selectionFrame.hover, {item: hoveredItem});\n }\n };\n\n this.inContentEditorItems = function (dataId) {\n if (!OutlineController.contentEditorElements)return false;\n for (var i = 0; i < OutlineController.contentEditorElements.length; i++)\n if (OutlineController.contentEditorElements[i].value.dataId === dataId)return true;\n return false;\n };\n\n /**\n * Called when drag started.\n **/\n this.startDrag = function startDrag() {\n return true;\n };\n\n /**\n * Before start drag.\n *\n * @param dragItem object Dragging item.\n * @return string Parent class name, for example, PreviewHelper.getDataIdClass(control.dataId)\n */\n this.beforeStartDrag = function beforeStartDrag(dragItem) {\n if (this.timerSubcription) {\n window.clearTimeout(this.timerSubcription);\n this.timerSubcription = 0;\n }\n var control = _$({dataId: dragItem.dataId});\n if (!control) {\n return null;\n }\n return PreviewHelper.getDataIdClass(control.getTopModelControl().dataId);\n };\n\n this.onSelectionChanged = function onSelectionChanged(data) {\n var control,\n parents,\n parentsLen,\n parent,\n controlInfo,\n parentInfo,\n items,\n i,\n j,\n itemsLen,\n parentId,\n k,\n item,\n continueUp,\n actualParentIndex = 0,\n l,\n collectChildren = function (originalItems, expandedInfo) {\n var i,\n itemsLen,\n item,\n items\n ;\n for (i = 0, itemsLen = originalItems.length; i < itemsLen; i++) {\n item = originalItems[i];\n items = item.items;\n if (item.isExpanded && items && items.length ||\n expandedInfo && expandedInfo[item.value.dataId]) {\n originalItems = originalItems.concat(collectChildren(items, expandedInfo));\n }\n }\n return originalItems;\n }\n ;\n if (OutlineController.selectedItem().dataId === data.dataId) {\n return;\n }\n control = _$({dataId: data.dataId});\n if (!control) {\n return;\n }\n if (!ShortcodesEditor.isShortcodeControl(control)) {\n controlInfo = PreviewHelper.getControlInfo(control, null, function () {\n return true;\n });\n parents = [];\n parents.push(controlInfo);\n do {\n parentInfo = PreviewHelper.getControlParentInfo(controlInfo);\n parents.push(parentInfo);\n controlInfo = parentInfo;\n } while (parentInfo !== null);\n // collect layout root level controls\n items = this.items();\n if (!items)return;\n items = items.slice();\n // collect sub-controls from expanded items\n items = collectChildren(items, items.expandedInfo);\n items = items.reverse();\n for (j = 0, parentsLen = parents.length; j < parentsLen; j++) {\n parent = parents[j];\n if (parent) {\n parentId = parent.control.prop('dataId');\n if (ControlTemplateController.existInTheme(parentId)) {\n if (data && data.$eventTarget) {\n for (l = 0; l < parent.allDoms.length; l++) {\n if (editor.$previewJQuery && editor.$previewJQuery.contains(parent.allDoms[l], data.$eventTarget[0])) {\n actualParentIndex = l;\n break;\n }\n }\n }\n for (i = 0, itemsLen = items.length; i < itemsLen; i++) {\n if (items[i].value.dataId === parentId &&\n items[i].value.domIndex === actualParentIndex) {\n OutlineController.selectedItem({\n name: items[i].value.name,\n dataId: items[i].value.dataId,\n domIndex: items[i].value.domIndex\n });\n return true;\n }\n }\n }\n }\n }\n } else {\n controlInfo = PreviewHelper.getControlInfo(control, null, function () {\n return true;\n });\n\n if (!controlInfo) {\n return;\n }\n\n continueUp = true;\n items = this.items();\n if (items && items.length) {\n for (k = 0; k < items.length; k++) {\n item = items[k];\n if (item.value.dataId === controlInfo.control.prop('dataId')) {\n if (controlInfo.control.prop('constructorName') === 'Blog') {\n break;\n }\n OutlineController.selectedItem({\n name: item.value.name,\n dataId: item.value.dataId,\n domIndex: item.value.domIndex\n });\n continueUp = false;\n break;\n }\n }\n do {\n parentInfo = PreviewHelper.getControlParentInfo(controlInfo);\n if (!parentInfo) {\n break;\n }\n for (k = 0; k < items.length; k++) {\n item = items[k];\n if (item.value.dataId === parentInfo.control.prop('dataId')) {\n if (controlInfo.control.prop('constructorName') === 'Blog') {\n break;\n }\n OutlineController.selectedItem({\n name: item.value.name,\n dataId: item.value.dataId,\n domIndex: item.value.domIndex\n });\n continueUp = false;\n break;\n }\n }\n controlInfo = parentInfo;\n } while (continueUp);\n }\n }\n }.bind(this);\n\n PubSubController.subscribe(Channels.outline.refresh, this.updateItems);\n PubSubController.subscribe(Channels.selection.selectionChanged, this.onSelectionChanged);\n\n this.internalLookupSelection = this.lookupSelection.bind(this);\n\n if (!OutlineController.selectedItem()) {\n if (!OutlineController.pageElements || !OutlineController.contentEditorElements) {\n PubSubController.once(Channels.outline.refresh, this.internalLookupSelection);\n } else {\n this.updateItems(null, this.internalLookupSelection);\n }\n }\n}\n\nUtils.extend(UIPOutline, UIProvider);\n\nUIPOutline.prototype.removeItem = function (item, callback) {\n 'use strict';\n OutlineController.selectedItem(item.value);\n var deleteProvider = PWStackHelper.getProvider(this.control(), {provider: 'OutlineRemove'});\n deleteProvider.click();\n deleteProvider.dispose();\n if (typeof callback === \"function\")\n callback();\n};\n\nUIPOutline.prototype.dispose = function () {\n 'use strict';\n UIPOutline.superclass.dispose.call(this);\n PubSubController.unsubscribe(Channels.pages.currentPageChanged, this.updateItems);\n PubSubController.unsubscribe(Channels.outline.refresh, this.updateItems);\n PubSubController.unsubscribe(Channels.selection.selectionChanged, this.onSelectionChanged);\n PubSubController.unsubscribe(Channels.outline.refresh, this.internalLookupSelection);\n};\n\nUIPOutline.prototype._isPasteInSelfPosition = function _isPasteInSelfPosition(control, collection, index) {\n 'use strict';\n var collectionControl,\n canDrop = true,\n controlIndex;\n // control can be found in parent collection as an object\n if (ThemeController.isLayoutElementOrSlide(control)) {\n collectionControl = control;\n } else { // control can be found in parent collection as a string\n collectionControl = ThemeController.getControl(control);\n }\n // find control position in parent collection\n do {\n controlIndex = collection.indexOf(collectionControl);\n if (-1 !== controlIndex) {\n break;\n }\n } while (-1 !== collection.indexOf(collectionControl));\n if (index === controlIndex || // does not allow paste before self\n index === controlIndex + 1) { // does not allow paste after self\n canDrop = false;\n }\n return canDrop;\n};\n\n\n/**\n * Is drop allowed.\n *\n * true - you can drop.\n * false - drop is not allowed.\n * number - drop is allowed to this position index.\n *\n * @param dragItem object Dragging item.\n * @param targetPathItems array Path array of target item.\n * @param index int Position index where trying to drop.\n * @return boolean|int true/false or position index.\n */\nUIPOutline.prototype.allowDrop = function allowDrop(dragItem, targetPathItems, index) {\n 'use strict';\n this.__control = ControlTemplateController.getControlByDataId(dragItem.dataId);\n if (editor.themeController.isInPrototypes(this.__control)) {\n return false;\n }\n var cmsName = DataProviderFacade.getCmsInfo().cmsName;\n var dragFacade = _$({dataId: dragItem.dataId});\n if (!dragFacade) {\n return false;\n }\n var hasUnManagedCode = dragFacade.hasUnManagedCode(cmsName);\n var dragInfo = this.getDragInfo(dragItem);\n if (!dragInfo) {\n return false;\n }\n var dragEditor = dragInfo.editor;\n if (!(dragEditor.canPositionAbsolute || dragEditor.canPositionLayout)) {\n return false;\n }\n\n var dropInfo = this.getDropInfo(targetPathItems);\n if (!dropInfo)\n return false;\n\n var canDrop = false;\n\n var collection = editor.themeController.getControlCollection(dropInfo.control);\n if (!collection && dropInfo.control.instanceOf(ContentLayout) && dropInfo.control.hasSubControl('content')) {\n collection = dropInfo.control.find('content').find('items').getModelControl();\n dropInfo = PreviewHelper.getControlInfo(dropInfo.control.find('content').getModelControl(), null, function () {\n return true;\n });\n }\n if (collection) {\n if (typeof index === 'undefined') {\n index = 0;\n }\n var isLayoutElementOrSlide = ThemeController.isLayoutElementOrSlide(dragInfo.control),\n i,\n len,\n collectionItem;\n for (i = 0, len = collection.length; i < len; i++) {\n collectionItem = collection[i];\n if (isLayoutElementOrSlide) {\n if (typeof collectionItem === 'string') {\n return false;\n }\n } else {\n if (typeof collectionItem === 'object') {\n return false;\n }\n }\n }\n\n canDrop = designer.projectFacade.canPlaceDragItemInto(dropInfo, dragInfo, hasUnManagedCode);\n if (!canDrop) {\n return false;\n }\n var collections = TraverseUtility.getCollectionsWithElement(editor.themeController.getTheme(), ThemeController.getControl(this.__control));\n if (collections[0] === collection && !this.allowSelfPaste) {\n canDrop = this._isPasteInSelfPosition(this.__control, collection, index);\n }\n if (!canDrop) {\n return false;\n }\n if (dropInfo.editor.childrenPositions === 'absolute') {\n var parentInfo = PreviewHelper.getControlParentInfo(dragInfo);\n if (parentInfo.control.prop('dataId') === dropInfo.control.prop('dataId')) {\n return false;\n }\n }\n }\n\n var childrenPositions = dropInfo.editor.childrenPositions;\n canDrop = canDrop && ((dragEditor.canPositionAbsolute && childrenPositions === 'absolute') ||\n (dragEditor.canPositionLayout && childrenPositions === 'layout'));\n\n var result = !PreviewHelper.isSameInfo(dragInfo, dropInfo) && canDrop;\n if (result) {\n // Don't allow drag between TEMPLATE and CONTENT for CMS\n // Don't allow drag to HTML>Blog page\n if (cmsName.toLowerCase() !== 'html' || !designer.projectFacade.canEditContent()) {\n if (ShortcodesEditor.isContentControl(_$({dataId: dragItem.dataId}))) {\n if (targetPathItems.length &&\n targetPathItems[0].name === 'ContentEditor' ||\n targetPathItems.length && ShortcodesEditor.isContentControl(_$({dataId: targetPathItems[0].dataId}))) {\n result = true;\n } else {\n result = false;\n }\n } else if (targetPathItems.length &&\n targetPathItems[0].name === 'ContentEditor') {\n result = false;\n }\n }\n }\n return result;\n};\n\nUIPOutline.prototype.getDragInfo = function getDragInfo(dragItem) {\n 'use strict';\n var selectedItemInfo = PreviewHelper.getControlInfoById(dragItem.dataId);\n var itemMoveInfo = PreviewHelper.getItemMoveInfo(selectedItemInfo);\n var dragInfo = itemMoveInfo.item;\n return dragInfo;\n};\n\nUIPOutline.prototype.getDropInfo = function getDropInfo(targetPathItems) {\n 'use strict';\n var dropInfo;\n var cmsName = DataProviderFacade.getCmsInfo().cmsName;\n if (targetPathItems.length === 0) {\n // TEMPLATE\n dropInfo = PreviewHelper.getBodyInfo();\n } else if (targetPathItems[0].name === CONST.UI.ContentEditor) {\n // CONTENT EDITOR\n if (cmsName === 'Html' && designer.projectFacade.canEditContent()) {\n var contentControl = editor.themeController.getControlInTemplateByConstructorName('Content', editor.themeController.currentTemplateKey);\n if (!contentControl) {\n ErrorUtility.logError(new Error('contentControl not found'));\n }\n var htmlPlaceholder = contentControl.htmlContents[0];\n if (!htmlPlaceholder) {\n return false;\n }\n var htmlControl = editor.themeController.getControlByPath(htmlPlaceholder);\n if (!htmlControl) {\n ErrorUtility.logError(new Error('htmlControl not found'));\n }\n dropInfo = PreviewHelper.getControlInfo(htmlControl, null, function () {\n return true;\n });\n } else if (cmsName === 'WordPress' || cmsName === 'Joomla') {\n var shortcodesControl = editor.themeController.getTheme().prototypes.shortCode_editor;\n dropInfo = PreviewHelper.getControlInfo(shortcodesControl, null, function () {\n return true;\n });\n } else {\n dropInfo = PreviewHelper.getBodyInfo();\n }\n } else {\n // HEADER/FOOTER AREA\n dropInfo = PreviewHelper.getControlInfoById(targetPathItems[0].dataId);\n }\n\n if (!dropInfo) {\n // TODO: DELETE THIS?\n dropInfo = (targetPathItems.length === 0 || targetPathItems[0].dataId === editor.templatesController.bodyId) ?\n PreviewHelper.getBodyInfo() :\n PreviewHelper.getControlInfoById(targetPathItems[targetPathItems.length - 1].dataId);\n }\n return dropInfo;\n};\n\nUIPOutline.prototype.lookupSelection = function lookupSelection() {\n 'use strict';\n if (!editor.selection.selectedItem.resolved)\n return;\n var items = [].concat(OutlineController.contentEditorElements).concat(OutlineController.pageElements);\n var path = editor.selection.selectedItem.resolved.path;\n var item;\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n for (var j = 0; j < path.length; j++) {\n var ci = path[j];\n if (item && item.value.dataId === ci.control.prop('dataId')) {\n var allDoms = PreviewHelper.findAllControlDom(ci.control);\n if (!ci.dom.length || allDoms.length > item.value.domIndex && allDoms[item.value.domIndex] === ci.dom[0]) {\n if (!item.expandOnLoad || !item.items || !item.items.length || !this.lookupSelection(item.items, path)) {\n OutlineController.selectedItem(item.value);\n }\n return true;\n }\n }\n }\n }\n};\n\nUIPOutline.prototype.findCaption = function (provider) {\n 'use strict';\n var value = provider.value(), items = provider.items();\n for (var j = 0; j < items.length; j++)\n if (items[j].value === value)\n return items[j].caption;\n return \"\";\n};\n\nUIPOutline.prototype.createTemplateName = function createTemplateName() {\n 'use strict';\n return editor.templatesController.currentTemplate ? UIHelper.getCaption(_$(editor.templatesController.currentTemplate)) : '';\n};\n\nUIPOutline.prototype.getItems = function getItems(callback) {\n 'use strict';\n if (!OutlineController.pageElements || !editor.templatesController.currentTemplate) {\n callback(null);\n return;\n }\n var items = OutlineController.pageElements.slice();\n var contentEditorElements = OutlineController.contentEditorElements;\n for (var i = 0; i < items.length; i++) {\n if (items[i].value.name === \"HeaderArea\" || items[i].value.name === \"FooterArea\") {\n items[i].asCategory = true;\n } else if (items[i].value.name === \"ContentLayout\") {\n items[i] = $.extend({}, items[i]);\n items[i].asCategory = true;\n items[i].items = items[i].items.slice();\n items[i].items.push({\n value: {name: CONST.UI.ContentEditor, contentDataId: items[i].value.dataId},\n asCategory: true,\n caption: UIHelper.getContentCaption(),\n items: contentEditorElements\n });\n } else if (items[i].value.name === \"Content\" && PreviewHelper.findContentEditorDom(items[i].dom)) {\n items[i] = {\n value: {name: CONST.UI.ContentEditor, contentDataId: items[i].value.dataId},\n asCategory: true,\n caption: UIHelper.getContentCaption(),\n items: contentEditorElements\n };\n } else {\n items[i].category = this.createTemplateName();\n }\n }\n\n callback(null, items);\n};\n\nUIPOutline.prototype.expanded = function expanded(event, itemData, isExpanded) {\n 'use strict';\n LogController.time(\"UIPOutline expanded func\");\n var processCurrentBranch = function (items, itemData, isExpanded) {\n if (!items) return;\n for (var i = 0, itemsLen = items.length; i < itemsLen; i++) {\n var item = items[i];\n if (item.value.dataId === itemData.dataId) {\n item.isExpanded = isExpanded;\n return item;\n } else if (processCurrentBranch(item.items, itemData, isExpanded))\n return item;\n }\n }.bind(this);\n\n if (this.inContentEditorItems(processCurrentBranch(this.items(), itemData, isExpanded).value.dataId)) {\n if (!OutlineController.contentEditorElements.expandedInfo) {\n OutlineController.contentEditorElements.expandedInfo = {};\n }\n OutlineController.contentEditorElements.expandedInfo[itemData.dataId] = isExpanded;\n } else {\n if (!OutlineController.pageElements.expandedInfo) {\n OutlineController.pageElements.expandedInfo = {};\n }\n OutlineController.pageElements.expandedInfo[itemData.dataId] = isExpanded;\n }\n\n LogController.timeEnd(\"UIPOutline expanded func\");\n};\n\n/**\n * Drag ended.\n *\n * @param dragItem object Dragging item.\n * @param targetPathItems array Path array of target item.\n * @param positionIndex int Position index where trying to drop.\n */\nUIPOutline.prototype.endDrag = function endDrag(dragItem, targetPathItems, positionIndex, callback) {\n 'use strict';\n var dragInfo = this.getDragInfo(dragItem);\n if (!dragInfo) {\n return;\n }\n historyManager.beginTransaction();\n designer.projectFacade.cut(dragInfo.control.getModelControl());\n var dropInfo = this.getDropInfo(targetPathItems);\n if (dropInfo.control.instanceOf(ContentLayout) && dropInfo.control.hasSubControl('content')) {\n dropInfo = PreviewHelper.getControlInfo(dropInfo.control.find('content').getModelControl(), null, function () {\n return true;\n });\n }\n var controlCollection = ThemeController.getControlCollection(dropInfo.control.getModelControl());\n var beforeControl = controlCollection ? controlCollection[positionIndex] : null;\n var beforeItem;\n if ('string' === typeof beforeControl) {\n beforeItem = PreviewHelper.getControlInfo(editor.themeController.getControlByPath(beforeControl), null, function () {\n return true;\n });\n if (!beforeItem) {\n beforeItem = PreviewHelper.getControlInfo(editor.themeController.getControlByPath(beforeControl), null, function () {\n return true;\n });\n }\n } else {\n beforeItem = PreviewHelper.getControlInfo(beforeControl, null, function () {\n return true;\n });\n }\n if (dropInfo.control.instanceOf(ContentLayout) && positionIndex === controlCollection.length - 1) {\n beforeItem = null;\n }\n var dragContainer = PreviewHelper.getControlParentInfo(dragInfo, null, function () {\n return true;\n });\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n designer.projectFacade.paste(\n dragInfo,\n dropInfo,\n {\n before: beforeItem,\n dragContainer: dragContainer,\n ignoreSelection: true,\n doNotRefreshOutline: this\n },\n function (error) {\n historyManager.endTransaction();\n PreviewHelper.scrollToControl(dragInfo.control.prop('dataId'), dragInfo.domIndex, null, true, true);\n this.value(\n {\n name: dragInfo.control.prop('constructorName'),\n dataId: dragInfo.control.prop('dataId'),\n domIndex: dragInfo.domIndex\n });\n if ('function' === typeof callback) {\n callback();\n }\n ErrorUtility.logError(error);\n }.bind(this));\n }.bind(this));\n }.bind(this));\n return true;\n};"
},
"UIPOutlineOperation.js": {
"type": "text",
"content": "/* global Utils, UIProvider, OutlineController, ControlTemplateController, _$, editor */\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPOutlineOperation(data) {\n 'use strict';\n UIPOutlineOperation.superclass.constructor.call(this, data);\n\n this.control = ko.computed({\n read: function () {\n var value = OutlineController.selectedItem();\n var control = editor.themeController.getTheme();\n if (value) {\n control = ControlTemplateController.getControlByDataId(value.dataId);\n }\n return _$(control);\n },\n write: function () {\n },\n owner: this,\n deferEvaluation: true\n });\n\n this.enabled = ko.computed({\n read: function () {\n return !!OutlineController.selectedItem();\n },\n write: function () {\n },\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPOutlineOperation, UIProvider);"
},
"UIPOutlineRemove.js": {
"type": "text",
"content": "/* global Utils, UIPOutlineOperation, PreviewHelper, designer, OutlineController, CONST*/\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPOutlineRemove(data) {\n 'use strict';\n UIPOutlineRemove.superclass.constructor.call(this, data);\n\n var onControlChanged = function() {\n if (this.control() && CONST.UI.PageFooter === this.control().prop('constructorName')) {\n this.enabled(false);\n this.visible(false);\n }\n }.bind(this);\n\n this._controlSubscription = this.control.subscribe(onControlChanged);\n onControlChanged();\n}\n\nUtils.extend(UIPOutlineRemove, UIPOutlineOperation);\n\nUIPOutlineRemove.prototype.dispose = function () {\n 'use strict';\n UIPOutlineRemove.superclass.dispose.call(this);\n if (this._controlSubscription && this._controlSubscription.dispose)\n this._controlSubscription.dispose();\n};\n\nUIPOutlineRemove.prototype.click = function () {\n 'use strict';\n var val = OutlineController.selectedItem();\n if (!val || !val.dataId) return;\n OutlineController.selectedItem('');\n var selection = {\n dataId: val.dataId,\n index: val.domIndex\n };\n\n var clickedControl = PreviewHelper.getControlInfoById(selection.dataId, null, function() { return true; });\n if (!clickedControl || clickedControl.allDoms.length <= selection.index) return;\n\n var controlInfo = PreviewHelper.getControlInfoByDom(clickedControl.allDoms[selection.index], null, function () {\n return true;\n });\n var idx = controlInfo.domIndex;\n var control = controlInfo.control;\n\n var resolvedControl = control.getTopLevelFacade();\n if (CONST.UI.PageFooter === resolvedControl.getModelControl().constructorName) {\n return;\n }\n designer.projectFacade.removeControl(resolvedControl.getModelControl(), idx, { ignoreSelection: true });\n};\n"
},
"UIPOutlineStyle.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 23.04.2015.\r\n */\r\n/*exported UIPOutlineStyle*/\r\n/*global Utils, UIPStyle, ProviderPresetStorage */\r\n/**\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPOutlineStyle(data) {\r\n 'use strict';\r\n\r\n UIPOutlineStyle.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPOutlineStyle, UIPStyle);\r\n\r\nUIPOutlineStyle.prototype.specialItems = [\r\n {\r\n \"value\": \"groove\",\r\n \"caption\": \"Groove\"\r\n },\r\n {\r\n \"value\": \"ridge\",\r\n \"caption\": \"Ridge\"\r\n },\r\n {\r\n \"value\": \"inset\",\r\n \"caption\": \"Inset\"\r\n },\r\n {\r\n \"value\": \"outset\",\r\n \"caption\": \"Outset\"\r\n }\r\n];\r\n\r\nUIPOutlineStyle.prototype.getItems = function (callback) {\r\n 'use strict';\r\n var items = [], i;\r\n\r\n var presets = ProviderPresetStorage.getPresets(UIPOutlineStyle.superclass.constructor);\r\n var keys = Object.keys(presets).sort(function (str1, str2) {\r\n return str1.localeCompare(str2, {}, {numeric: true});\r\n });\r\n for (i = 0; i < keys.length; i++) {\r\n var presetName = keys[i];\r\n if (presets.hasOwnProperty(presetName)) {\r\n items.push(presets[presetName]);\r\n }\r\n }\r\n\r\n // ToDo: insert separator item\r\n\r\n\r\n for (i = 0; i < this.specialItems.length; i++)\r\n items.push(this.specialItems[i]);\r\n\r\n if (callback) {\r\n callback(null, items);\r\n }\r\n};"
},
"UIPOutlineView.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 23.04.2015.\r\n */\r\n/*exported UIPOutlineView*/\r\n/*global Utils, LessController, UIProvider, ko, koObservableController, Color, Unit */\r\n\r\nfunction UIPOutlineView(data) {\r\n 'use strict';\r\n UIPOutlineView.superclass.constructor.call(this, data);\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n if (!this._valueChangeNotifier) {\r\n this._valueChangeNotifier = koObservableController.koBind(this.control(), \"\", function (control) {\r\n var value = combineSide(control, \"outline\");\r\n return value;\r\n });\r\n }\r\n return this._valueChangeNotifier();\r\n },\r\n write: function (value) {\r\n var control = this.control();\r\n\r\n var val = unCombineNones(value);\r\n control.css('outline-width', val[0]);\r\n control.css('outline-style', val[1]);\r\n control.css('outline-color', val[2]);\r\n\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n function combineSide(control, side, resolveLess) {\r\n return combineNones(control.css(side + \"-width\"), control.css(side + \"-style\"), resolveLess ? LessController.lessColorFontToCss(control.css(side + \"-color\")) : control.css(side + \"-color\"));\r\n }\r\n\r\n function combineNones(width, style, color) {\r\n if (isNoValue(width) && isNoValue(style) && isNoValue(color)) {\r\n return '';\r\n }\r\n else if (width === \"0px\" && isNone(style) && isNoValue(color)) {\r\n return 'none';\r\n }\r\n else {\r\n var intWidth = parseInt(width, 10);\r\n if (intWidth > 8) width = '8px';\r\n return width + \" \" + style + \" \" + color;\r\n }\r\n }\r\n\r\n function unCombineNones(values) {\r\n var sideVal = values.split(' ');\r\n\r\n if (sideVal.length === 1) {\r\n if (isNone(sideVal[0])) {\r\n sideVal[0] = '0px';\r\n sideVal[1] = 'none';\r\n sideVal[2] = '';\r\n }\r\n else if (isNoValue(sideVal[0])) {\r\n sideVal[1] = sideVal[2] = sideVal[0] = '';\r\n }\r\n }\r\n\r\n return sideVal;\r\n }\r\n\r\n function isNoValue(attr) {\r\n return attr === '';\r\n }\r\n\r\n function isNone(attr) {\r\n return attr.indexOf('none') !== -1;\r\n }\r\n\r\n function isWhite(attr){\r\n return (attr.indexOf('#ffffff') !== -1 || attr.indexOf('rgba(255, 255, 255,') !== -1);\r\n }\r\n\r\n this.toString = ko.computed(function () {\r\n //Add dependency from value\r\n this.value();\r\n var control = this.control();\r\n var outline = combineSide(control, \"outline\", true);\r\n var size = this.options.iconSize || '16px';\r\n if (isNone(outline)) {\r\n var diagSize = Math.floor(Unit.parse(size).size * Math.sqrt(2)) + 'px';\r\n return '';\r\n }\r\n else if (isNoValue(outline)) {\r\n return '';\r\n }\r\n var bg = '';\r\n if (isWhite(outline)){\r\n bg = 'background-color: #e5e5e5;';\r\n }\r\n\r\n var borderStyle = 'outline: ' + outline + ';';\r\n\r\n var res = '';\r\n if (bg) res = '' + res + '
';\r\n return res;\r\n }, this, {deferEvaluation: true});\r\n}\r\n\r\nUtils.extend(UIPOutlineView, UIProvider);"
},
"UIPOverridePresets.js": {
"type": "text",
"content": "/*global Utils, UIPControlPresets, ControlPresetsController, designer*/\r\nfunction UIPOverridePresets(data) {\r\n 'use strict';\r\n UIPOverridePresets.superclass.constructor.call(this, data);\r\n\r\n this.value.dispose();\r\n\r\n this.value = ko.computed({\r\n read: function () {\r\n },\r\n write: function (value) {\r\n this.startAsync();\r\n var items = this.items(), item;\r\n for (var i = 0; i < items.length; i++)\r\n if (items[i].value === value)\r\n item = items[i];\r\n this.removeItem(item, function () {\r\n ControlPresetsController.save({\r\n control: this.control(),\r\n options: {presetName: item.name, presetThumbnail: item.thumbnail, category: item.category}\r\n }, function () {\r\n designer.ui.dialog.messageBox.show('#Designer_PresetSaved_Title', '#Designer_PresetSaved_Body');\r\n this.stopAsync();\r\n }.bind(this));\r\n }.bind(this));\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPOverridePresets, UIPControlPresets);"
},
"UIPPadding.js": {
"type": "text",
"content": "/*exported UIPPadding*/\r\n/*global Utils, UIPCssProperty */\r\nfunction UIPPadding(data) {\r\n 'use strict';\r\n // Should be defined before superclass constructor call\r\n this.collapsePairs = true;\r\n this.sides = {\r\n 'all': 'padding',\r\n 'top': 'padding-top',\r\n 0: 'padding-top',\r\n 'right': 'padding-right',\r\n 1: 'padding-right',\r\n 'bottom': 'padding-bottom',\r\n 2: 'padding-bottom',\r\n 'left': 'padding-left',\r\n 3: 'padding-left'\r\n };\r\n\r\n UIPPadding.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPPadding, UIPCssProperty);\r\n"
},
"UIPPagesList.js": {
"type": "text",
"content": "/*global Utils, UIProvider, editor, PubSubController, Channels, ErrorUtility, ko*/\r\n/*global designer, DataProviderFacade, l, PWStackHelper, AppSettings, ControlStorageController, _$ */\r\n\r\nfunction UIPPagesList(data) {\r\n 'use strict';\r\n if (typeof data.options.postType === \"undefined\") {\r\n ErrorUtility.logWarning(new Error('UIPPagesList requires postType parameter.'));\r\n }\r\n this.currentPost = ko.observable('');\r\n UIPPagesList.superclass.constructor.call(this, data);\r\n\r\n this.allowDeepDnd = typeof this.options.allowDeepDnd === \"boolean\" ?\r\n this.options.allowDeepDnd :\r\n true;\r\n\r\n this.allowDnd = (DataProviderFacade.getCmsInfo().cmsName.toLowerCase() !== 'html') ?\r\n false : (typeof this.options.allowDnd === \"boolean\" ?\r\n this.options.allowDnd :\r\n true);\r\n\r\n this.dndWorking = false;\r\n\r\n this.updateCurrentPost = this.updateCurrentPost.bind(this);\r\n this.onItemsUpdated = this.onItemsUpdated.bind(this);\r\n\r\n PubSubController.subscribe(Channels.previewEvents.loaded, this.updateCurrentPost);\r\n PubSubController.subscribe(Channels.pages.listUpdated, this.onItemsUpdated);\r\n PubSubController.subscribe(Channels.pages.created, this.updateCurrentPost);\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n return this.currentPost();\r\n },\r\n write: function (value) {\r\n if (this.currentPost() === value)\r\n return;\r\n this.currentPost(value);\r\n this.updateItems();\r\n designer.projectFacade.switchToPage(this.options.postType, value);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n /**\r\n * Is drop allowed.\r\n *\r\n * true - you can drop.\r\n * false - drop is not allowed.\r\n * number - drop is allowed to this position index.\r\n *\r\n * @param object dragItem Dragging item.\r\n * @param array targetPathItems Path array of target item.\r\n * @param int positionIndex Position index where trying to drop.\r\n * @return boolean|int true/false or position index.\r\n */\r\n //this.allowDrop = function allowDrop(dragItem, targetPathItems, positionIndex) {\r\n this.allowDrop = function allowDrop() {\r\n return DataProviderFacade.hasUpdatePostImplementation();\r\n };\r\n\r\n\r\n /**\r\n * Drag ended.\r\n *\r\n * @param object dragItem Dragging item.\r\n * @param array targetPathItems Path array of target item.\r\n * @param int positionIndex Position index where trying to drop.\r\n */\r\n this.endDrag = function endDrag(dragItem, targetPathItems, positionIndex) {\r\n //console.log('AAA', 'endDrag', dragItem, targetPathItems, positionIndex);\r\n\r\n this.dndWorking = true;\r\n\r\n // Update order without any refreshing.\r\n editor.pagesListController.silent = true;\r\n\r\n var type = dragItem.substring(0, dragItem.indexOf('.')),\r\n id = dragItem,\r\n parent = targetPathItems.length > 0 ?\r\n targetPathItems[0] :\r\n '',\r\n item = editor.pagesListController.getItemById(type, id),\r\n filterItem = function (item, propMap) {\r\n var newItem = {};\r\n\r\n for (var p in item) {\r\n if (item.hasOwnProperty(p) && propMap.indexOf(p) !== -1) {\r\n newItem[p] = item[p];\r\n }\r\n }\r\n\r\n return newItem;\r\n };\r\n\r\n if (typeof item !== 'object') {\r\n return;\r\n }\r\n\r\n // change order\r\n var children = editor.pagesListController.getItemChildrenById(type, parent, true),\r\n childrenLen = children.length,\r\n i = 0,\r\n newIndex = 0,\r\n step = 128,\r\n correctedPositionIndex = positionIndex * step,\r\n childItem,\r\n cb = function () {\r\n };\r\n\r\n for (; i <= childrenLen; i++) {\r\n if (newIndex === correctedPositionIndex) {\r\n item.order = newIndex;\r\n newIndex += step;\r\n }\r\n\r\n if (i === childrenLen) {\r\n continue;\r\n }\r\n\r\n childItem = children[i];\r\n\r\n if (item.id === childItem.id) {\r\n continue;\r\n }\r\n\r\n if (childItem.order !== newIndex) {\r\n childItem.order = newIndex;\r\n editor.pagesListController.updateItem(type, filterItem(childItem, ['id', 'order', 'parent']), cb);\r\n }\r\n\r\n newIndex += step;\r\n }\r\n\r\n // Turn off silent mode.\r\n editor.pagesListController.silent = false;\r\n\r\n // Update parent.\r\n item.parent = parent;\r\n\r\n // Update item.\r\n editor.pagesListController.updateItem(type, filterItem(item, ['id', 'order', 'parent']), cb);\r\n\r\n setTimeout(function () {\r\n this.dndWorking = false;\r\n }.bind(this), 150);\r\n\r\n return true;\r\n }.bind(this);\r\n}\r\n\r\nUtils.extend(UIPPagesList, UIProvider);\r\n\r\nUIPPagesList.prototype.dispose = function () {\r\n 'use strict';\r\n UIPPagesList.superclass.dispose.call(this);\r\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this.updateCurrentPost);\r\n PubSubController.unsubscribe(Channels.pages.listUpdated, this.onItemsUpdated);\r\n PubSubController.unsubscribe(Channels.pages.created, this.updateCurrentPost);\r\n};\r\n\r\nUIPPagesList.prototype.updateItems = function () {\r\n 'use strict';\r\n this.getItems(function (error, items) {\r\n this.items(items);\r\n }.bind(this));\r\n};\r\n\r\nUIPPagesList.prototype.getTreeItems = function getTreeItems(items, parentId, forceSort) {\r\n 'use strict';\r\n var i,\r\n el,\r\n newItems,\r\n currentItem,\r\n itemsToExpand = {},\r\n parentItem = {\r\n parent: ''\r\n }\r\n ;\r\n currentItem = this.currentPost() ? items[this.currentPost()] : null;\r\n if (currentItem) {\r\n if (currentItem.parent) {\r\n parentItem = currentItem;\r\n do {\r\n if (items.hasOwnProperty(parentItem.parent)) {\r\n itemsToExpand[parentItem.parent] = true;\r\n parentItem = items[parentItem.parent];\r\n } else {\r\n break;\r\n }\r\n } while (parentItem.parent !== '');\r\n }\r\n }\r\n var _getTreeItems = function _getTreeItems(items, parentId, forceSort) {\r\n var newItems = [],\r\n el,\r\n i,\r\n item\r\n ;\r\n for (i in items) {\r\n if (items.hasOwnProperty(i)) {\r\n el = items[i];\r\n if (el.id && (el.parent === parentId || !el.parent && parentId === '')) {\r\n el.included = true;\r\n item = {\r\n value: el.id,\r\n caption: el.caption ? el.caption : el.name,\r\n order: el.order,\r\n items: _getTreeItems(items, el.id, forceSort),\r\n canRemove: (DataProviderFacade.getCmsInfo().cmsName.toLowerCase() === 'html'/* ||\r\n DataProviderFacade.getCmsInfo().cmsName.toLowerCase() === 'dnn'*/)\r\n };\r\n if (itemsToExpand.hasOwnProperty(el.id)) {\r\n item.isExpanded = true;\r\n }\r\n newItems.push(item);\r\n }\r\n }\r\n }\r\n if (forceSort) {\r\n newItems = newItems.sort(function (a, b) {\r\n return parseFloat(a.order) - parseFloat(b.order);\r\n });\r\n }\r\n return newItems;\r\n };\r\n\r\n newItems = _getTreeItems(items, parentId, forceSort);\r\n for (i in items) {\r\n if (items.hasOwnProperty(i)) {\r\n el = items[i];\r\n if (el.id && !el.included) {\r\n newItems.push({\r\n value: el.id,\r\n caption: el.caption,\r\n order: el.order,\r\n canRemove: (DataProviderFacade.getCmsInfo().cmsName.toLowerCase() === 'html')\r\n });\r\n } else {\r\n delete el.included;\r\n }\r\n }\r\n }\r\n if (forceSort) {\r\n newItems = newItems.sort(function (a, b) {\r\n return parseFloat(a.order) - parseFloat(b.order);\r\n });\r\n }\r\n return newItems;\r\n};\r\n\r\nUIPPagesList.prototype.getPlainItems = function (items) {\r\n 'use strict';\r\n var newItems = [];\r\n var prefix = l(\"#\" + this.options.postType + \":\") + \" \";\r\n for (var i in items) {\r\n if (items.hasOwnProperty(i)) {\r\n var el = items[i];\r\n if (el.id) {\r\n newItems.push({\r\n value: el.id,\r\n caption: prefix + el.caption,\r\n order: el.order,\r\n canRemove: (DataProviderFacade.getCmsInfo().cmsName.toLowerCase() === 'html')\r\n });\r\n }\r\n }\r\n }\r\n\r\n return newItems;\r\n};\r\n\r\nUIPPagesList.prototype.updateCurrentPost = function (newPost, needUpdateItems) {\r\n 'use strict';\r\n if (newPost && newPost.id) {\r\n this.currentPost(newPost.id);\r\n return;\r\n }\r\n if (!DataProviderFacade.hasGetPostsImplementation()) {\r\n return;\r\n }\r\n var currentItem = editor.pagesListController.getCurrentItem(this.options.postType);\r\n if (currentItem) {\r\n this.currentPost(currentItem.id);\r\n } else {\r\n this.currentPost('');\r\n }\r\n if (needUpdateItems !== false)\r\n this.updateItems();\r\n};\r\n\r\nUIPPagesList.prototype.onItemsUpdated = function (data) {\r\n 'use strict';\r\n if (data.postType !== this.options.postType || this.dndWorking) {\r\n return;\r\n }\r\n\r\n // '' is a root parent id.\r\n var items = this.options.plain ? this.getPlainItems(data.items) : this.getTreeItems(data.items, '', true);\r\n if (items.length === 0) {\r\n items.push({\r\n value: '',\r\n asPlainText: true,\r\n caption: l('#' + this.options.postType.toUpperCase() + '_NOTFOUND')\r\n });\r\n this.enabled(false);\r\n } else {\r\n this.enabled(true);\r\n this.updateCurrentPost(null, false);\r\n }\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n if (items[i].value === this.currentPost()) {\r\n var templateName = '',\r\n facade,\r\n pseudoStack,\r\n translated\r\n ;\r\n if (editor.templatesController.currentTemplate) {\r\n facade = _$(editor.templatesController.currentTemplate);\r\n\r\n if (facade)\r\n if (facade.find('BaseTemplate').prop('isCustomTemplate'))\r\n templateName = facade.find('BaseTemplate').prop('caption');\r\n else {\r\n pseudoStack = _$(editor.templatesController.currentTemplate).getPseudoStack();\r\n if (pseudoStack)\r\n templateName = l(ControlStorageController.getEditorJson(pseudoStack).caption);\r\n }\r\n }\r\n translated = l('#TemplateName', templateName);\r\n items[i].caption += ' - ' + translated + '';\r\n break;\r\n }\r\n }\r\n\r\n this.items(items);\r\n};\r\n\r\nUIPPagesList.prototype.getItems = function (callback) {\r\n 'use strict';\r\n if (AppSettings.isTest && !editor.pagesListController) {\r\n callback(null, this.items());\r\n return;\r\n }\r\n this.startAsync();\r\n editor.pagesListController.getItems(this.options.postType, null, false, function (error, items) {\r\n if (error) {\r\n ErrorUtility.logWarning(error);\r\n callback(error);\r\n } else {\r\n this.onItemsUpdated({postType: this.options.postType, items: items});\r\n callback(null, this.items());\r\n }\r\n this.stopAsync();\r\n }.bind(this));\r\n};\r\n\r\nif (DataProviderFacade.getCmsInfo().cmsName.toLowerCase() === 'html'/* || DataProviderFacade.getCmsInfo().cmsName.toLowerCase() === 'dnn'*/) {\r\n\r\n UIPPagesList.prototype.removeItem = function (item, callback) {\r\n 'use strict';\r\n var deleteProvider = PWStackHelper.getProvider(this.control(), {\r\n provider: {\r\n \"name\": \"DeleteHtmlItem\",\r\n \"postType\": this.options.postType,\r\n \"currentItemId\": item.value,\r\n \"provider\": {\r\n \"name\": \"CMS\",\r\n \"cms\": \"html, dnn\"\r\n }\r\n }\r\n });\r\n deleteProvider.click();\r\n deleteProvider.dispose();\r\n if (typeof callback === \"function\")\r\n callback();\r\n };\r\n}\r\n\r\n"
},
"UIPPagesListAll.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 15.07.2015.\r\n */\r\n/*global Utils, UIPHasPagesPosts, PWStackHelper, editor, l */\r\nfunction UIPPagesListAll(data) {\r\n 'use strict';\r\n UIPPagesListAll.superclass.constructor.call(this, data);\r\n\r\n this.templatesProvider = PWStackHelper.getProvider(this.control(), {provider: \"TemplatesList\"});\r\n\r\n this.pagesProvider = PWStackHelper.getProvider(this.control(), {provider: $.extend({postType: \"page\", plain: this.options.plain || false}, this.options, {name: \"PagesList\"})});\r\n this.pagesSubscription = this.pagesProvider.items.subscribe(this.fillItems.bind(this));\r\n\r\n this.postsProvider = PWStackHelper.getProvider(this.control(), {provider: $.extend({postType: \"post\", plain: this.options.plain || false}, this.options, {name: \"PagesList\"})});\r\n this.postsSubscription = this.postsProvider.items.subscribe(this.fillItems.bind(this));\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n var result = (this.pagesProvider.enabled() && this.pagesProvider.value()) || (this.postsProvider.enabled() && this.postsProvider.value());\r\n if (!result && this.options.plain) {\r\n var templateValue = this.templatesProvider.value();\r\n if (templateValue) {\r\n var templateItems = this.templatesProvider.items();\r\n for(var i=0; i ';\r\n\r\n }, this, {deferEvaluation: true});\r\n}\r\n\r\nUtils.extend(UIPParagraphStyleExists, UIProvider);"
},
"UIPParentPagesList.js": {
"type": "text",
"content": "/**\r\n * Created by oksana on 14.07.2015.\r\n */\r\n/*global Utils, editor, ErrorUtility, UIPContentAttribute */\r\n/**\r\n *\r\n * @param {ProviderData} data\r\n * @constructor\r\n */\r\nfunction UIPParentPagesList(data) {\r\n 'use strict';\r\n\r\n UIPParentPagesList.superclass.constructor.call(this, data);\r\n\r\n this.allowDnd = false;\r\n\r\n this.selectedItem = ko.computed(function () {\r\n var result = null;\r\n this.traverseItems(this.items(), function (item) {\r\n if (item.value === this.value()) {\r\n result = item;\r\n }\r\n }.bind(this));\r\n\r\n return result;\r\n }, this, {deferEvaluation: true});\r\n}\r\n\r\nUtils.extend(UIPParentPagesList, UIPContentAttribute);\r\n\r\nUIPParentPagesList.prototype.dispose = function () {\r\n 'use strict';\r\n UIPParentPagesList.superclass.dispose.call(this);\r\n this.selectedItem.dispose();\r\n};\r\n\r\n/**\r\n * Make items for the PWTree.\r\n *\r\n * @param items Source \"id,parent\" array.\r\n * @param {String} parentId Parent id. For example, \"\" for root or \"page.0\" etc.\r\n * @returns {Array} Items with a tree structure.\r\n */\r\nUIPParentPagesList.prototype.getTreeItems = function (items, parentId, currentId) {\r\n 'use strict';\r\n var newItems = [];\r\n\r\n for (var i in items) {\r\n if (items.hasOwnProperty(i)) {\r\n var el = items[i];\r\n\r\n if (el.id && el.id !== currentId && el.parent === parentId) {\r\n newItems.push({\r\n value: el.id,\r\n caption: el.caption,\r\n items: this.getTreeItems(items, el.id, currentId)\r\n });\r\n }\r\n }\r\n }\r\n\r\n return newItems;\r\n\r\n};\r\n\r\nUIPParentPagesList.prototype.traverseItems = function (items, traverseFunc) {\r\n 'use strict';\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n\r\n traverseFunc(items[i]);\r\n if (items[i].items)\r\n this.traverseItems(items[i].items, traverseFunc);\r\n }\r\n\r\n};\r\n\r\nUIPParentPagesList.prototype.getItems = function (callback) {\r\n 'use strict';\r\n\r\n editor.pagesListController.getItems(this.options.postType, null, false, function (error, data) {\r\n if (error) {\r\n ErrorUtility.logWarning(error);\r\n callback(error);\r\n } else {\r\n var currentItem = editor.pagesListController.getCurrentItem(this.options.postType);\r\n var items = this.getTreeItems(data, '', currentItem && currentItem.id);\r\n items.splice(0, 0, {value: '', caption: \"No Parent\"});\r\n this.items(items);\r\n callback(null, this.items());\r\n }\r\n }.bind(this));\r\n};"
},
"UIPParentTextAlign.js": {
"type": "text",
"content": "/*global Utils, UIProvider, koObservableController, AlignProvider*/\r\n\r\nfunction UIPParentTextAlign(data) {\r\n 'use strict';\r\n UIPParentTextAlign.superclass.constructor.call(this, data);\r\n\r\n if (this.visible.dispose)\r\n this.visible.dispose();\r\n\r\n this.visible = koObservableController.koBind(null, null, function () {\r\n return AlignProvider.isAlignAllowed(this.control(), AlignProvider.AlignType.TextAlign);\r\n }.bind(this));\r\n\r\n this.valueUpdater = ko.observable(false);\r\n this._valueChangeNotifier = koObservableController.koBind(null, null, function () {\r\n this.valueUpdater(!this.valueUpdater());\r\n }.bind(this), true);\r\n this._valueChangeNotifier();\r\n\r\n this.value.dispose();\r\n this.value = ko.computed({\r\n read: function () {\r\n this.valueUpdater();\r\n return AlignProvider.getAlign(this.control(), AlignProvider.AlignType.TextAlign);\r\n },\r\n write: function (value) {\r\n AlignProvider.setAlign(this.control(), AlignProvider.AlignType.TextAlign, value);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPParentTextAlign, UIProvider);"
},
"UIPParsedContent.js": {
"type": "text",
"content": "/* global Utils, UIProvider, ControlRender, editor, designer, AppSettings */\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPParsedContent(data) {\n 'use strict';\n\n UIPParsedContent.superclass.constructor.call(this, data);\n this.baseValue = this.value;\n this.value = ko.computed({\n read: function () {\n return this.parse(this.baseValue(), this.control());\n },\n write: function (value) {\n this.prepareForSaving(value, this.control(), function (error, res) {\n this.baseValue(res);\n }.bind(this));\n },\n owner: this,\n deferEvaluation: true\n });\n}\n\nUtils.extend(UIPParsedContent, UIProvider);\n\nUIPParsedContent.prototype.dispose = function () {\n 'use strict';\n UIPParsedContent.superclass.dispose.call(this);\n this.baseValue.dispose();\n};\n\nUIPParsedContent.prototype.parse = function (content, contentContainer) {\n 'use strict';\n\n return ControlRender.processContent(content, contentContainer, 'name.html');\n};\n\nUIPParsedContent.prototype.prepareForSaving = function (content, contentContainer, callback) {\n 'use strict';\n\n if (!editor.contentEditorController || !contentContainer) {\n callback(null, content);\n return;\n }\n\n var res, escTagsData = editor.contentEditorController.removeEscapeTags(content, false, contentContainer.instanceOf(window.TextBlock));\n if (!this.options.noParse && escTagsData.isReplaced) {\n if (!AppSettings.isTest) {\n this.startAsync();\n designer.ui.dialog.messageBox.show(\n \"#TextBoxTagChangeTitle\", \"#TextBoxTagChangeMsg\", ['OK', 'Cancel'], true, function (errors, result) {\n if (result === 'OK') {\n res = editor.contentEditorController.prepareContentForSaving(escTagsData.content, contentContainer);\n if (res) res = res.replace(/@@/g, '@');\n callback(null, res);\n } else {\n callback(null, this.value());\n }\n this.stopAsync();\n }.bind(this), 'OK'\n );\n } else {\n res = editor.contentEditorController.prepareContentForSaving(escTagsData.content, contentContainer);\n if (res) res = res.replace(/@@/g, '@');\n callback(null, res);\n }\n } else {\n res = editor.contentEditorController.prepareContentForSaving(content, contentContainer, this.options.noParse);\n if (res) res = res.replace(/@@/g, '@');\n callback(null, res);\n }\n};\n"
},
"UIPPaste.js": {
"type": "text",
"content": "/*exported UIPPaste*/\n/*global Utils, UIPBasePaste, PubSubController, Channels */\n\nfunction UIPPaste(data) {\n 'use strict';\n UIPPaste.superclass.constructor.call(this, data);\n\n this.enable = this.enable.bind(this);\n\n PubSubController.subscribe(Channels.controls.copy, this.enable);\n PubSubController.subscribe(Channels.controls.paste, this.enable);\n PubSubController.subscribe(Channels.controls.remove, this.enable);\n PubSubController.subscribe(Channels.previewEvents.loaded, this.enable);\n\n this.enable();\n}\n\nUtils.extend(UIPPaste, UIPBasePaste);\n\nUIPPaste.prototype.getBufferInfo = function(clipboardItem) {\n 'use strict';\n if (!clipboardItem) return null;\n\n return clipboardItem.copyInfo;\n};\n\nUIPPaste.prototype.dispose = function () {\n 'use strict';\n UIPPaste.superclass.dispose.call(this);\n PubSubController.unsubscribe(Channels.controls.copy, this.enable);\n PubSubController.unsubscribe(Channels.controls.paste, this.enable);\n PubSubController.unsubscribe(Channels.controls.remove, this.enable);\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this.enable);\n};"
},
"UIPPasteAsLink.js": {
"type": "text",
"content": "/*exported UIPPasteAsLink*/\n/* global Utils, UIPBasePaste, ExchangeBuffer, PubSubController, Channels, PreviewHelper, l, ControlTemplateController */\nfunction UIPPasteAsLink(data) {\n 'use strict';\n UIPPasteAsLink.superclass.constructor.call(this, data);\n\n this._disabledTitle = l('Paste Link');\n\n var baseEnable = this.enable;\n this.enable = (function () {\n this._disabledMessage = null;\n var clipboardItem = ExchangeBuffer.get();\n if (clipboardItem) {\n var originalInfo = clipboardItem.originalInfo;\n if (!ControlTemplateController.existInTheme({dataId: originalInfo.control.prop('dataId')})) {\n this.enabled(false);\n return;\n }\n\n // Can't paste target to layout if the source control in absolute\n if (originalInfo.control.css('position') === 'absolute') {\n this._disabledMessage = l('#CannotPaste', originalInfo.control.prop('constructorName'), l('#ControlInAbsolutePosition'));\n return;\n }\n // Can't paste target to absolute (positioning issues)\n var controlInfo = PreviewHelper.getControlInfo(originalInfo.control);\n if (controlInfo && controlInfo.control && controlInfo.control.css('position') === 'absolute') {\n this.enabled(false);\n return;\n }\n }\n\n baseEnable.call(this);\n }).bind(this);\n\n PubSubController.subscribe(Channels.controls.copy, this.enable);\n PubSubController.subscribe(Channels.controls.paste, this.enable);\n PubSubController.subscribe(Channels.controls.remove, this.enable);\n PubSubController.subscribe(Channels.previewEvents.loaded, this.enable);\n PubSubController.subscribe(Channels.shortcodesEditor.start, this.enable);\n PubSubController.subscribe(Channels.shortcodesEditor.stop, this.enable);\n\n this.enable();\n}\n\nUtils.extend(UIPPasteAsLink, UIPBasePaste);\n\nUIPPasteAsLink.prototype.getBufferInfo = function (clipboardItem) {\n 'use strict';\n if (!clipboardItem) return null;\n\n return clipboardItem.originalInfo;\n};\n\nUIPPasteAsLink.prototype.dispose = function () {\n 'use strict';\n UIPPasteAsLink.superclass.dispose.call(this);\n PubSubController.unsubscribe(Channels.controls.copy, this.enable);\n PubSubController.unsubscribe(Channels.controls.paste, this.enable);\n PubSubController.unsubscribe(Channels.controls.remove, this.enable);\n PubSubController.unsubscribe(Channels.previewEvents.loaded, this.enable);\n PubSubController.unsubscribe(Channels.shortcodesEditor.start, this.enable);\n PubSubController.unsubscribe(Channels.shortcodesEditor.stop, this.enable);\n};\n\n"
},
"UIPPasteStyle.js": {
"type": "text",
"content": "/**\n * Created by san0k on 05.06.14.\n */\n\n/* exported UIPPasteStyle */\n/* globals editor, UIProvider, Utils, ExchangeBuffer, SerializeController, PreviewHelper, EffectsCollection,\n ControlStorageController, PresetHelper, CopyStyleItemType, PubSubController, Channels,\n MixinsController2, ControlPresetGenerator, _$, ControlTemplateController */\n\nfunction UIPPasteStyle(data) {\n 'use strict';\n UIPPasteStyle.superclass.constructor.call(this, data);\n\n this.enable = this.enable.bind(this);\n PubSubController.subscribe(Channels.selection.selectionChanged, this.enable);\n\n this.enable();\n}\n\nUtils.extend(UIPPasteStyle, UIProvider);\n\nUIPPasteStyle.prototype.enable = function () {\n 'use strict';\n var dataId = editor.selection.selectedItem.dataId;\n var clone = ExchangeBuffer.style.get();\n this.enabled(!!dataId && !!clone && (PreviewHelper.isControlFromControls(dataId) || editor.themeController.getTheme().dataId === dataId));\n};\n\nUIPPasteStyle.prototype._hasSimilarStructure = function (object1, object2) {\n 'use strict';\n if (!object1 || !object2) return false;\n object1 = _$(object1);\n var result = false;\n object1.traverse(function (objectProp1, p) {\n if (objectProp1.isSameFacade(object1))return true;\n if (object2.hasOwnProperty(p)) {\n var objectProp2 = object2[p];\n if (!objectProp2) return false;\n\n if (objectProp1.prop('constructorName') === objectProp2.constructorName) {\n result = true;\n return false;\n }\n if (MixinsController2.isProxy(objectProp1) || MixinsController2.isProxy(objectProp2)) {\n\n var srcTypeCategory = ControlStorageController.getEditorJson([{constructorName: objectProp1.prop('constructorName')}]).typeCategory;\n var dstTypeCategory = ControlStorageController.getEditorJson([{constructorName: objectProp2.constructorName}]).typeCategory;\n\n if (dstTypeCategory && srcTypeCategory === dstTypeCategory) {\n result = true;\n }\n }\n }\n return false;\n });\n return result;\n};\n\nUIPPasteStyle.prototype._resolveControls = function () {\n 'use strict';\n\n var clone = ExchangeBuffer.style.get();\n if (!clone) return null;\n\n var controlInfo = PreviewHelper.getControlInfo(editor.selection.getSelectedControl());\n if (!controlInfo) return null;\n\n var selectableControl = controlInfo.control;\n\n if (clone.type === CopyStyleItemType.typography) {\n return {\n source: clone,\n destination: selectableControl\n };\n }\n\n var modelControl = selectableControl.getTopLevelFacade();\n var isFirstLevelSelectable = (selectableControl.isSameFacade(modelControl));\n\n var selectableClone = null;\n (function _findSelectable(clone) {\n if (selectableClone) return;\n if (clone.selectable) {\n selectableClone = clone;\n } else {\n for (var i in clone) {\n if (clone.hasOwnProperty(i) && clone[i] && 'object' === typeof clone[i]) {\n _findSelectable(clone[i]);\n }\n }\n }\n })(clone);\n if (!selectableClone) {\n return;\n }\n\n if (isFirstLevelSelectable && clone.selectable) {\n return {\n source: clone,\n destination: selectableControl\n };\n }\n if (!isFirstLevelSelectable && !clone.selectable) {\n return {\n source: selectableClone,\n destination: selectableControl\n };\n }\n\n if (this._hasSimilarStructure(modelControl, clone.children)) {\n return {\n source: clone,\n destination: modelControl\n };\n }\n\n if (this._hasSimilarStructure(selectableControl, clone.children)) {\n return {\n source: clone,\n destination: selectableControl\n };\n }\n\n if (selectableClone) {\n if (this._hasSimilarStructure(modelControl, selectableClone.children)) {\n return {\n source: selectableClone,\n destination: modelControl\n };\n }\n }\n\n return {\n source: selectableClone,\n destination: selectableControl\n };\n};\n\nUIPPasteStyle.prototype.click = function () {\n 'use strict';\n\n var controls = this._resolveControls();\n if (!controls) return;\n\n var clone = controls.source;\n if (!clone) return;\n\n var control = controls.destination;\n if (!control) return;\n\n var replicationObject, oldState;\n\n if (clone.type === CopyStyleItemType.typography) {\n\n var typoStyle = editor.selection.selectedItem.resolved.typography;\n if (typoStyle) {\n control.css(typoStyle, clone.css);\n control.css(typoStyle + 'LinkHovered', clone.cssHover);\n control.css(typoStyle + 'LinkPassive', clone.cssPassive);\n }\n return;\n }\n\n replicationObject = this._fillObject(control, clone) || {};\n\n // save position, rotation, size etc. state of control if it can be positioned or resized\n oldState = PresetHelper.saveState(control);\n control.replaceWith(SerializeController.fillFromObject(control, replicationObject, ControlPresetGenerator.cloneReviewer, true));\n\n // restore control position, rotation & size\n PresetHelper.restoreState(control, oldState);\n};\n\nUIPPasteStyle.prototype._fillObject = function (control, pattern) {\n 'use strict';\n\n var replicationObject = {\n constructorName: control.prop('constructorName')\n };\n\n if (pattern.type === CopyStyleItemType.proxy) {\n if (control.prop('constructorName') === pattern.constructorName) {\n replicationObject = pattern.properties;\n } else {\n var exists = ControlTemplateController.existInTheme(control.prop('dataId')),\n newControl = SerializeController.fillFromObject(control, pattern.properties, ControlPresetGenerator.cloneReviewer, true);\n return exists ? undefined : newControl;\n }\n }\n\n this._fillChildren(control, pattern, replicationObject);\n\n if (pattern.css) {\n var controlCss = control.cssToJson();\n var controlTypography = controlCss ? controlCss.typography : null;\n if (controlCss && controlCss.typography) delete controlCss.typography;\n\n var patternTypography = pattern.css.typography;\n if (patternTypography) delete pattern.css.typography;\n\n replicationObject.css = pattern.css;\n\n for (var propertyName in controlCss) {\n if (controlCss.hasOwnProperty(propertyName)) {\n if (pattern.ignoredProperties.indexOf(propertyName) !== -1) {\n replicationObject.css[propertyName] = controlCss[propertyName];\n } else if (!replicationObject.css[propertyName]) {\n replicationObject.css[propertyName] = '';\n }\n }\n }\n\n if (patternTypography || (controlTypography && controlTypography.length > 0)) {\n replicationObject.css.typography = patternTypography;\n\n for (var p1 in controlTypography) {\n if (controlTypography.hasOwnProperty(p1)) {\n if (!replicationObject.css.typography[p1]) {\n replicationObject.css.typography[p1] = {};\n }\n for (var p2 in controlTypography[p1]) {\n if (controlTypography[p1].hasOwnProperty(p2)) {\n if (!replicationObject.css.typography[p1][p2]) {\n replicationObject.css.typography[p1][p2] = '';\n }\n }\n }\n }\n }\n } else if (controlTypography) {\n replicationObject.css.typography = controlTypography;\n }\n }\n\n if (pattern.effects && pattern.effects.length) {\n var isFirst = true;\n for (var effectKey in pattern.effects) {\n //CodeAnalyser skip:controlTraverse\n if (pattern.effects.hasOwnProperty(effectKey) && pattern.effects[effectKey]) {\n\n if (isFirst) {\n replicationObject.effects = new EffectsCollection();\n isFirst = false;\n }\n\n var effectJSON = pattern.effects[effectKey];\n var effect = SerializeController.fillFromObject(new window[effectJSON.constructorName](), effectJSON);\n replicationObject.effects.push(effect);\n }\n }\n }\n\n return replicationObject;\n};\n\nUIPPasteStyle.prototype._fillChildren = function (control, pattern, replicationObject) {\n 'use strict';\n if (!pattern.children || pattern.children.length === 0) return;\n for (var prop in pattern.children) {\n //CodeAnalyser skip:controlTraverse\n if (pattern.children.hasOwnProperty(prop)) {\n if (control.hasSubControl(prop) && pattern.children[prop]) {\n var childPattern = pattern.children[prop];\n if (control.find(prop).prop('constructorName') === childPattern.constructorName ||\n childPattern.type === CopyStyleItemType.proxy) {\n replicationObject[prop] = this._fillObject(control.find(prop), childPattern);\n }\n }\n }\n }\n};\n\nUIPPasteStyle.prototype.dispose = function () {\n 'use strict';\n PubSubController.unsubscribe(Channels.selection.selectionChanged, this.enable);\n UIPPasteStyle.superclass.dispose.call(this);\n};\n"
},
"UIPPicture.js": {
"type": "text",
"content": "/*global Utils, UIProvider, editor */\r\n\r\nfunction UIPPicture(data) {\r\n 'use strict';\r\n if (!window.Picture) {\r\n data.options.visible = false;\r\n }\r\n else {\r\n if (data.options.isMainMenu && window.hasOwnProperty('editor') && null !== window.editor.selection.selectedItem.dataId)\r\n data.control = window.editor.selection.getSelectedControl();\r\n data.options.visible = data.control.prop('constructorName') === 'Picture';\r\n if (data.control !== editor.themeController.getTheme()) {\r\n\r\n data.control.directChildren()\r\n .forEach(function (property) {\r\n if(property.prop('constructorName') === 'Picture'){\r\n data.control = property;\r\n data.options.visible = true;\r\n return;\r\n }\r\n });\r\n\r\n }\r\n }\r\n UIPPicture.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPPicture, UIProvider);\r\n"
},
"UIPPictureEditable.js": {
"type": "text",
"content": "/*global Utils, UIProvider, PubSubController, Channels*/\r\n\r\nfunction UIPPictureEditable(data) {\r\n 'use strict';\r\n UIPPictureEditable.superclass.constructor.call(this, data);\r\n\r\n this.checkEnabled = function CheckEnabled() {\r\n var control = this.control();\r\n if (control.prop('constructorName') === 'IconState') {\r\n this.enabled((control.find('picture').prop('fileName').length > 0) ? false : true);\r\n }\r\n }.bind(this);\r\n\r\n this.checkEnabled();\r\n\r\n PubSubController.subscribe(Channels.history.refresh, this.checkEnabled);\r\n}\r\n\r\nUtils.extend(UIPPictureEditable, UIProvider);\r\n\r\nUIPPictureEditable.prototype.dispose = function () {\r\n 'use strict';\r\n UIPPictureEditable.superclass.dispose.call(this);\r\n\r\n PubSubController.unsubscribe(Channels.history.refresh, this.checkEnabled);\r\n};\r\n"
},
"UIPPictureFromFile.js": {
"type": "text",
"content": "/* exported UIPPictureFromFile */\n/* global Utils, UIPBasePictureFromUrl, l, ImageController, designer, CONST, AppSettings*/\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPPictureFromFile(data) {\n 'use strict';\n UIPPictureFromFile.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPPictureFromFile, UIPBasePictureFromUrl);\n\nUIPPictureFromFile.prototype.upload = function UIPPictureFromFile_upload(options, callback) {\n 'use strict';\n var blobSize = options.file.size || options.file.length || 0;\n\n if (ImageController.rawImageHasRecommendedSize(blobSize)) {\n UIPPictureFromFile.superclass.upload.call(this, options, callback);\n } else {\n var blob = options.file;\n if (!(options.file instanceof Blob)){\n blob = new Blob([blob], { type: 'image/' + ImageController.getImageFormat(blob)});\n }\n var buttons = [];\n var ReduceSizeLabel = 'Reduce Size';\n if (['image/jpeg', 'image/png'].indexOf(blob.type) !== -1){\n buttons.push(ReduceSizeLabel);\n }\n\n if (blob.size <= CONST.IMAGE.UPLOAD_IMAGE_LIMIT) {\n buttons.push('Continue Anyway');\n }\n buttons.push('Cancel');\n this.startAsync();\n designer.ui.dialog.messageBox.showUntranslated(l('#VALIDATE_IMAGE_DIALOG_TITLE'), l('#VALIDATE_IMAGE_DIALOG_MESSAGE', AppSettings.recommendedImageSize),\n buttons, true, function (error, button) {\n switch (button) {\n case ReduceSizeLabel:\n var tooLargeDlg = function(){\n designer.ui.dialog.messageBox.show('#VALIDATE_IMAGE_DIALOG_TITLE', '#ImageTooBitMessage');\n if (typeof callback === \"function\") {\n callback(null);\n }\n this.stopAsync();\n }.bind(this);\n var img = new Image();\n var reader = new FileReader();\n reader.onerror = tooLargeDlg;\n reader.onload = function(e){\n img.src = e.target.result;\n };\n reader.readAsDataURL(blob);\n reader.onerror = tooLargeDlg;\n img.onload = function(){\n var w = img.width,\n h = img.height,\n canvas = document.createElement('canvas'),\n ctx = canvas.getContext('2d');\n canvas.width = w;\n canvas.height = h;\n ctx.drawImage(img, 0, 0);\n var dataURL = null;\n try {\n canvas.width = Math.round(\n Math.sqrt(\n w * w * (AppSettings.reduceImageSize * 1024 * 1024) /\n (canvas.toDataURL(blob.type, AppSettings.recommendedImageQuality).length * 0.75)\n )\n ); //1.33 - +33% - base64 correction\n canvas.height = Math.round(canvas.width * h / w);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n dataURL = canvas.toDataURL(blob.type, AppSettings.recommendedImageQuality);\n } catch(e){\n dataURL = null;\n }\n if (null === dataURL){\n tooLargeDlg();\n return;\n }\n var binary_string = atob( dataURL.slice(dataURL.indexOf(',') + 1)),\n len = binary_string.length,\n bytes = new Uint8Array( len );\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n options.file = new Blob([bytes.buffer], {type: blob.type});\n UIPPictureFromFile.superclass.upload.call(this, options, callback);\n this.stopAsync();\n }.bind(this);\n break;\n case 'Continue Anyway':\n UIPPictureFromFile.superclass.upload.call(this, options, callback);\n this.stopAsync();\n break;\n case 'Cancel':\n if (typeof callback === \"function\") {\n callback(null);\n }\n this.stopAsync();\n break;\n }\n }.bind(this), buttons.indexOf(ReduceSizeLabel) !== -1 ? ReduceSizeLabel: 'Cancel');\n }\n};"
},
"UIPPictureFromLibrary.js": {
"type": "text",
"content": "/* exported UIPPictureFromLibrary */\n/* global CONST, Utils, designer, UIPPictureFromFile, ImageController */\n/**\n *\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPPictureFromLibrary(data) {\n 'use strict';\n UIPPictureFromLibrary.superclass.constructor.call(this, data);\n}\n\nUtils.extend(UIPPictureFromLibrary, UIPPictureFromFile);\n\nUIPPictureFromLibrary.prototype.click = function () {\n 'use strict';\n this.startAsync();\n var control = this.control();\n var picture = ImageController.getPictureFromControl(control);\n var mediaId = picture && picture.mediaId;\n designer.ui.dialog.selectMediaDialog.show(control, $.extend({isClipart: true, mediaId: mediaId}, this.options), function onPictureSelected(mediaInfo, downloadCallback) {\n this.uploadFromUrl(CONST.UPLOAD_TYPE.IMAGE, mediaInfo.url, mediaInfo, downloadCallback);\n }.bind(this), function onDialogClosed() {\n this.stopAsync();\n }.bind(this));\n};"
},
"UIPPictureUrl.js": {
"type": "text",
"content": "/* exported UIPPictureUrl */\r\n/* global Utils, UIPBasePictureFromUrl, designer, ImageController, ErrorUtility, CONST, ShortcodesEditor */\r\n\r\nfunction UIPPictureUrl(data) {\r\n 'use strict';\r\n UIPPictureUrl.superclass.constructor.call(this, data);\r\n}\r\n\r\nUtils.extend(UIPPictureUrl, UIPBasePictureFromUrl);\r\n\r\nUIPPictureUrl.prototype.click = function () {\r\n 'use strict';\r\n this._targetControl = this.control();\r\n var pictureControl = ImageController.getPictureFromControl(this._targetControl);\r\n var url = pictureControl ? ImageController.getUrl(pictureControl.fileName) : \"\";\r\n if (!ImageController.isAbsoluteUrl(url))\r\n url = \"http://\";\r\n this.startAsync();\r\n designer.ui.dialog.promptDialog.show('Image From Web', '#ImageUrl', 'OK', 'Cancel', url,\r\n function (errs, newUrl, canceled) {\r\n if (!ErrorUtility.logWarning(errs) && !canceled && newUrl !== url) {\r\n $('