' : '';\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 return values;\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};"
},
"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};"
},
"UIPChangeSection.js": {
"type": "text",
"content": "/*exported UIPChangeSection*/\r\n/*globals UIPSectionApplyFromLibrary, Utils, _$, editor, BlogTemplate, PWStackHelper, PubSubController, Channels*/\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();\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 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));\r\n\r\n this.enabled(!!enabled);\r\n this.visible(!!(this.options.alwaysVisible || enabled));\r\n }.bind(this);\r\n\r\n this.enableOnLoaded = function () {\r\n updateControl();\r\n };\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.subscribe(Channels.previewEvents.loaded, this.enableOnLoaded);\r\n }\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 UIPChangeSection.superclass.click.call(this);\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 UIPChangeSection.superclass.dispose.call(this);\r\n};\r\n"
},
"UIPCheckComputedEnable.js": {
"type": "text",
"content": "/*exported UIPCheckComputedEnable */\r\n/*global UIProvider, Utils, ComputedControlFacade, Channels, PubSubController*/\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 var control = this.control();\r\n var active = this.enabled() && this.visible();\r\n var val = false;\r\n if ((this.options.attr || this._childProvider) && active) {\r\n val = !!this.value();\r\n }\r\n if (control instanceof ComputedControlFacade) {\r\n if (active && this.options.attr) {\r\n var data = control.getControlDataByProperty(this.options.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"
},
"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*/\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\nUtils.extend(UIPClearAttribute, UIProvider);\n\nUIPClearAttribute.prototype.click = function () {\n 'use strict';\n this.value('');\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 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 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, SerializeController, 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 json = this.options.tabWidgets ? SerializeController.controlSerialize(this.options.tabWidgets) : null;\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 var caption = title + (i + 1);\r\n var item = {\r\n value: $.extend(true, {\r\n provider: {control: columns.find(i + '')},\r\n caption: caption\r\n }, this.options.view),\r\n caption: caption,\r\n widgets: (json ? JSON.parse(json) : null)\r\n };\r\n\r\n if (item.widgets) {\r\n for (var widgetIndex = 0, widgetLen = item.widgets.length; widgetIndex < widgetLen; widgetIndex++)\r\n item.widgets[widgetIndex].layerIndex = i;\r\n }\r\n\r\n items.push(item);\r\n }\r\n\r\n callback(null, items);\r\n};\r\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 provider: {control: columns.find(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 LayoutContainer, 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 //TODO move this code to click UIPColumnOrColumns\r\n var control = this.control();\r\n var container;\r\n if (control.instanceOf(LayoutContainer)) {\r\n container = PreviewHelper.getControlInfo(control);\r\n } else if (control.instanceOf(LayoutColumn)) {\r\n container = PreviewHelper.getContainerWithColumns(control);\r\n container = container ? PreviewHelper.getControlInfo(container.control) : container;\r\n }\r\n if (container) {\r\n PreviewHelper.drawColumnsGrid(container, true);\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 PreviewHelper.removeColumnsGrid();\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.getResolvedData = function (control) {\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\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.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"
},
"UIPContainerEffect.js": {
"type": "text",
"content": "/*exported UIPContainerEffect*/\n/*global koObservableController, Utils, UIPLayoutProperty, editor, ContainerEffectProvider,\n CONST, Section, _$, Slide */\n/**\n * @param {ProviderData} data\n * @constructor\n */\nfunction UIPContainerEffect(data) {\n 'use strict';\n UIPContainerEffect.superclass.constructor.call(this, data);\n var isContainer = ContainerEffectProvider.isContainer(this.control());\n\n if (this.control().instanceOf(Slide) || !isContainer) {\n this.visible(false);\n }\n\n if (this.control().isSameFacade(_$(editor.themeController.getTheme(), ''))) {\n this.enabled(false);\n } else {\n this.enabled(true);\n }\n\n if (data && data.options && data.options.alwaysVisible !== 'undefined' && data.options.alwaysVisible) {\n this.visible(true);\n }\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n if (!this._valueChangeNotifier) {\n var topControl = ContainerEffectProvider.findTopControl(this.control()),\n control = topControl ? topControl : this.control();\n this._valueChangeNotifier = koObservableController.koBind(control.hasSubControl(\"effects\") ? control.find(\"effects\") : null, \"\", function (effects) {\n if (control.instanceOf(Section)) {\n if (ContainerEffectProvider.hasEffect(effects, 'ContainerEffect')) {\n return CONST.LENGTH.SHEET_WIDTH;\n }\n else {\n if (ContainerEffectProvider.hasEffect(effects, 'AlignContent')) {\n var alignContentEffect = ContainerEffectProvider.getEffectByName(control, 'AlignContent');\n if (alignContentEffect && !!alignContentEffect.prop('sheetAlign')) {\n return CONST.LENGTH.FULL_BACKGROUND;\n }\n else {\n return ContainerEffectProvider.collectionHasEffect(control, 'BackgroundWidthEffect') ? CONST.LENGTH.FULL_BACKGROUND : CONST.LENGTH.PAGE_WIDTH;\n }\n }\n else if (ContainerEffectProvider.collectionHasEffect(control, 'BackgroundWidthEffect')) {\n return CONST.LENGTH.FULL_BACKGROUND;\n }\n else {\n return CONST.LENGTH.PAGE_WIDTH;\n }\n }\n }\n else {\n if (control && control.hasSubControl('effects')) {\n if (ContainerEffectProvider.hasEffect(control.find('effects'), 'ContainerEffect')) {\n return CONST.LENGTH.SHEET_WIDTH;\n }\n else if (ContainerEffectProvider.hasEffect(control.find('effects'), 'ContainerInnerEffect')) {\n return CONST.LENGTH.PAGE_WIDTH;\n }\n }\n else if (ContainerEffectProvider.collectionHasEffect(control, 'BackgroundWidthEffect')) {\n return CONST.LENGTH.FULL_BACKGROUND;\n }\n\n return CONST.LENGTH.FULL_BACKGROUND;\n }\n }.bind(this));\n }\n return this._valueChangeNotifier();\n },\n write: function (value) {\n if (this.value() !== value) {\n ContainerEffectProvider.setEffect(this.control(), value);\n }\n },\n owner: this,\n deferEvaluation: true\n });\n\n //if (this.visible.dispose) this.visible.dispose();\n\n //this.visible = koObservableController.koBind(this.control(), '', function (control) {\n // if (!control || !ControlTemplateController.existInTheme(control.prop('dataId'))) {\n // // Fixes crash on control remove\n // return false;\n // }\n // var cEditor = editor.themeController.getEditor(control);\n // var effects = control.hasSubControl(\"effects\") ? control.find(\"effects\") : null;\n // var isParentSection = false;\n // var info = PreviewHelper.getControlInfo(control);\n // if (info) {\n // var parentInfo = PreviewHelper.getControlParentInfo(info);\n // isParentSection = parentInfo && parentInfo.control.prop('constructorName') === 'Section';\n // }\n //\n // return cEditor && cEditor.selectable === true && cEditor.isSection !== true &&\n // (UIHelper.isLayoutModeEnabled(control) || effects &&\n // (ContainerEffectProvider.hasEffect(effects, 'ContainerEffect') ||\n // ContainerEffectProvider.hasEffect(effects, 'ContainerInnerEffect') ||\n // ContainerEffectProvider.hasEffect(effects, 'BackgroundWidthEffect')) ||\n // isParentSection || control.prop('constructorName') === 'Section');\n //});\n}\n\nUtils.extend(UIPContainerEffect, UIPLayoutProperty);\n\nUIPContainerEffect.prototype.getItems = function getItems(callback) {\n 'use strict';\n var modifiedItems;\n UIPContainerEffect.superclass.getItems.call(this, function (error, items) {\n modifiedItems = items;\n if (!this.control().instanceOf(Section) && (_$(this.control()).resCss('position') === 'absolute' || _$(this.control()).resCss('position') === 'fixed')) {\n modifiedItems = modifiedItems.filter(function (object) {\n return object.value !== 'byContent';\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.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 LinkHelper.navigateUrl(DataProviderFacade.getCmsInfo().contentManagerPage, '_blank');\n};"
},
"UIPControlAdd.js": {
"type": "text",
"content": "/*exported UIPControlAdd*/\n/*global editor, ControlMetadataProvider, Utils, UIProvider, ImageController,\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.templateChangedHandler = this.processTemplateChanged.bind(this);\n\n PubSubController.subscribe(Channels.template.changed, this.templateChangedHandler);\n\n this.value.dispose();\n this.value = ko.computed({\n read: function () {\n return '';\n },\n write: function (value) {\n if (designer.projectFacade.canAddControl()) {\n _selectItem.call(this, value);\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.logError(new Error('Invalid fullName'));\n }.bind(this));\n }\n\n this._canAddControl = function _canAddControl() {\n if (this.enabled) {\n this.enabled(designer.projectFacade.canAddControl());\n }\n }.bind(this);\n this._canAddControl();\n PubSubController.subscribe(Channels.previewEvents.loaded, this._canAddControl);\n}\n\nUtils.extend(UIPControlAdd, UIProvider);\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 }\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._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\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 UIPControlAdd._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};\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*/\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: \"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: \"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};"
},
"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/**\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}\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\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 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*/\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 oldThemeName = DataProviderFacade.getCmsInfo().themeName,\n cmsName = DataProviderFacade.getCmsInfo().cmsName,\n tutorialLink = 'How to install ' + cmsName + ' theme',\n includeEditorSupport = DataProviderFacade.getThemeIncludeEditorSupport();\n\n designer.ui.dialog.exportThemeDialog.show('Export Theme', '#EnterThemeName', 'Download as ZIP', 'Close', oldThemeName, includeEditorSupport,\n function (errs, newThemeName, allowCustomize, 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 includeEditor = !includeEditorSupport || allowCustomize;\n getThemeArchive(newThemeName, oldThemeName, includeEditor, 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(themeName, oldThemeName, includeEditor, callback) {\n if (!AppSettings.isFarm) {\n DataProviderFacade.getTheme({\n themeName: themeName,\n includeEditor: includeEditor\n }, function (getThemeError, themeData) {\n callback(getThemeError, themeData && themeData.content, themeData && themeData.ext);\n });\n }\n else {\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=' + themeName);\n downloadUrl = RequestController.applyParam(downloadUrl, 'oldThemeName=' + oldThemeName);\n downloadUrl = RequestController.applyParam(downloadUrl, 'includeEditor=' + 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 }\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 return info.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};"
},
"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()) || Object.hasOwnProperty.call(this.control(), 'toString')) { // 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\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};"
},
"UIPFloat.js": {
"type": "text",
"content": "/*exported UIPFloat*/\r\n/*global Utils, UIPosition, ResponsiveModeController, koObservableController*/\r\n\r\nfunction UIPFloat(data) {\r\n 'use strict';\r\n this.FLOAT_NONE = 'none';\r\n UIPFloat.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.resCss('float');\r\n }.bind(this));\r\n }\r\n return this._valueChangeNotifier();\r\n },\r\n write: function (value) {\r\n this.resolvedControl.css('float', value);\r\n },\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n}\r\n\r\nUtils.extend(UIPFloat, UIPosition);\r\n\r\nUIPFloat.prototype.isResponsive = function isResponsive() {\r\n 'use strict';\r\n return ResponsiveModeController.responsiveName() !== 'desktop';\r\n};\r\n\r\nUIPFloat.prototype.getItems = function getItems(callback) {\r\n 'use strict';\r\n UIPFloat.superclass.getItems.call(this, function onItems(error, items) {\r\n var i,\r\n len,\r\n item;\r\n for (i = 0, len = items.length; i < len; i++) {\r\n item = items[i];\r\n if (this.FLOAT_NONE === item.value && !this.isResponsive()) {\r\n items.splice(i, 1);\r\n }\r\n }\r\n callback(null, items);\r\n }.bind(this));\r\n};"
},
"UIPFont.js": {
"type": "text",
"content": "/*exported UIPFont*/\r\n/*global Utils, UIPCheckComputedEnable, editor, PubSubController, Channels, TypographyHelper, LessController,\r\nSelectionRange, koObservableController, GoogleFontsController, ControlStorageController, ComputedControlFacade,\r\nPreviewHelper, CONST */\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 this.hasContentTags = function() {\r\n\r\n var startNode, tagNode, spans;\r\n var traverseSpans = function (spans) {\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 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 startNode = editor.$previewWindow[0].getSelection().extentNode;\r\n if (startNode) {\r\n\r\n // \r\n 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 spans = $(startNode).parentsUntil('.' + CONST.CORE.CONTENT_ELEMENT_CLASS, 'span[style]');\r\n if (traverseSpans(spans)) return true;\r\n }\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 if (traverseSpans(spans)) return true;\r\n\r\n return false;\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 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 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: this.isContentEditing() ? this.valueWriteContent : this.valueWriteControl,\r\n owner: this,\r\n deferEvaluation: true\r\n });\r\n\r\n this.checked = ko.computed(function () {\r\n var checkedValue = this.isContentEditing() ? this.CONST.contentValueChecked : this.options.checkedValue || this.CONST.valueChecked;\r\n var value = this.value();\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 this.valueUpdater(!this.valueUpdater());\r\n } else if (attr === commandName || commandName === this.CONST.heading) {\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}\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 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};"
},
"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 if (this.isContentEditing())\r\n return this._baseChecked();\r\n var value = this.value();\r\n var weight = parseInt(value, 10);\r\n if (weight > 400) {\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\" + \"\" + \" \";\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 = \"