ips.templates.set('vse.classes.title'," <li class='ipsToolbox_sectionTitle ipsType_reset' data-role='{{role}}'>{{title}}</li>");ips.templates.set('vse.classes.item'," <li data-styleID='{{styleid}}'> <a href='#'>  <span class='vseClass_swatch' style='{{swatch.main}}'>{{#swatch.sub}}<span class='vseClass_swatch' style='{{swatch.sub}}'></span>{{/swatch.sub}}</span>{{title}} </a></li>");ips.templates.set('vse.panels.header',"  <h2 class='ipsType_sectionHead'>{{title}}</h2> {{#desc}}  <p class='ipsType_reset ipsType_light ipsType_small'>   {{desc}}  </p> {{/desc}} <br>");ips.templates.set('vse.panels.wrapper',"  <div class='vseStyleSection' data-role='{{type}}Panel'>  {{{content}}} </div>");ips.templates.set('vse.panels.background',"  <h3>{{#lang}}vseBackground{{/lang}}</h3> <div data-role='backgroundControls' class='ipsGrid'>  <div class='ipsGrid_span3'>   <div data-role='backgroundPreview' class='vseBackground_preview'>&nbsp;</div>  </div>  <div class='ipsGrid_span9'>   <input type='text' class='ipsField_fullWidth color vseBackground_color' data-role='backgroundColor' value='{{backgroundColor}}'>   <br>   <div class='ipsGrid'>    <!--<div class='ipsGrid_span6'>     <button data-ipsTooltip title='{{#lang}}vseBackground_image{{/lang}}' class='ipsButton ipsButton_primary ipsButton_verySmall ipsButton_fullWidth ipsType_center ipsType_large'><i class='fa fa-picture-o'></i></button>    </div>-->    <div class='ipsGrid_span6'>     <button data-ipsTooltip title='{{#lang}}vseBackground_gradient{{/lang}}' data-action='launchGradientEditor' class='ipsButton ipsButton_primary ipsButton_verySmall ipsButton_fullWidth ipsType_center ipsType_large'><i class='fa fa-barcode'></i></button>    </div>   </div>  </div> </div>");ips.templates.set('vse.panels.font',"  <h3>{{#lang}}vseFont_color{{/lang}}</h3> <input type='text' class='ipsField_fullWidth color' data-role='fontColor' value='{{fontColor}}'>");ips.templates.set('vse.gradient.editor',"  <div data-role='gradientPreview' class='vseBackground_gradient'></div> <div class='ipsGrid'>  <button data-action='gradientAngle' data-angle='90' class='ipsButton ipsButton_primary ipsButton_verySmall ipsGrid_span3'>    <i class='fa fa-arrow-down'></i>  </button>  <button data-action='gradientAngle' data-angle='0' class='ipsButton ipsButton_primary ipsButton_verySmall ipsGrid_span3'>   <i class='fa fa-arrow-left'></i>  </button>  <button data-action='gradientAngle' data-angle='45' class='ipsButton ipsButton_primary ipsButton_verySmall ipsGrid_span3'>   <i class='fa fa-arrow-up'></i>  </button>  <button data-action='gradientAngle' data-angle='120' class='ipsButton ipsButton_primary ipsButton_verySmall ipsGrid_span3'>   <i class='fa fa-arrow-right'></i>  </button> </div> <hr class='ipsHr'> <ul class='ipsList_reset' data-role='gradientStops'>  <li class='ipsGrid'>   <p class='ipsType_reset ipsGrid_span1'>&nbsp;</p>   <p class='ipsType_reset ipsType_light ipsType_small ipsGrid_span5'>{{#lang}}vseGradient_color{{/lang}}</p>   <p class='ipsType_reset ipsType_light ipsType_small ipsGrid_span6'>{{#lang}}vseGradient_position{{/lang}}</p>  </li>  <li class='ipsGrid'>   <p class='ipsType_reset ipsGrid_span1'>&nbsp;</p>   <p class='ipsType_reset ipsGrid_span11'><a href='#' class='ipsType_medium' data-action='gradientAddStop'>{{#lang}}vseAddStop{{/lang}}</a></p>  </li> </ul> <hr class='ipsHr'> <div class='ipsGrid'>  {{{buttons}}} </div>");ips.templates.set('vse.gradient.twoButtons'," <button data-action='saveGradient' class='ipsGrid_span8 ipsButton ipsButton_normal ipsButton_verySmall ipsButton_fullWidth'>{{#lang}}vseGradient_save{{/lang}}</button> <button data-action='cancelGradient' class='ipsGrid_span4 ipsButton ipsButton_normal ipsButton_verySmall ipsButton_fullWidth'>{{#lang}}vseCancel{{/lang}}</button>");ips.templates.set('vse.gradient.threeButtons'," <button data-action='saveGradient' class='ipsGrid_span4 ipsButton ipsButton_normal ipsButton_verySmall ipsButton_fullWidth'>{{#lang}}vseSave{{/lang}}</button> <button data-action='cancelGradient' class='ipsGrid_span4 ipsButton ipsButton_normal ipsButton_verySmall ipsButton_fullWidth'>{{#lang}}vseCancel{{/lang}}</button> <button data-action='removeGradient' class='ipsGrid_span4 ipsButton ipsButton_important ipsButton_verySmall ipsButton_fullWidth'>{{#lang}}vseDelete{{/lang}}</button>");ips.templates.set('vse.gradient.stop',"  <li class='ipsGrid'>  <span class='ipsGrid_span1 ipsType_light ipsType_center'><i class='fa fa-bars'></i></span>  <input type='text' class='ipsGrid_span5' value='{{color}}' maxlength='6' pattern='^([0-9a-zA-Z]{6})$'>  <input type='range' class='ipsGrid_span5' min='0' max='100' value='{{location}}'>  <p class='ipsType_reset ipsType_center ipsGrid_span1'><a href='#' data-action='gradientRemoveStop'><i class='fa fa-times'></i></a></p> </li>");ips.templates.set('vse.colorizer.panel',"  <p class='ipsType_light ipsPad'>  {{#lang}}vseColorizer_desc{{/lang}} </p> <div class='ipsPad'>  <div class='ipsGrid'>   <div class='ipsGrid_span1'></div>   <div class='ipsGrid_span4 ipsType_center'>    <input type='text' class='vseColorizer_swatch color' data-role='primaryColor' value='{{primaryColor}}'>    <span class='ipsType_light'>{{#lang}}vseColorizer_primary{{/lang}}</span>   </div>   <div class='ipsGrid_span2'></div>   <div class='ipsGrid_span4 ipsType_center'>    <input type='text' class='vseColorizer_swatch color' data-role='secondaryColor' value='{{secondaryColor}}'>    <span class='ipsType_light'>{{#lang}}vseColorizer_secondary{{/lang}}</span>   </div>   <div class='ipsGrid_span1'></div>  </div>  <br>  <div class='ipsGrid'>   <div class='ipsGrid_span1'></div>   <div class='ipsGrid_span4 ipsType_center'>    <input type='text' class='vseColorizer_swatch color' data-role='tertiaryColor' value='{{tertiaryColor}}'>    <span class='ipsType_light'>{{#lang}}vseColorizer_tertiary{{/lang}}</span>   </div>   <div class='ipsGrid_span2'></div>   <div class='ipsGrid_span4 ipsType_center'>    <input type='text' class='vseColorizer_swatch color' data-role='textColor' value='{{textColor}}'>    <span class='ipsType_light'>{{#lang}}vseColorizer_text{{/lang}}</span>   </div>   <div class='ipsGrid_span1'></div>  </div>  <br><br>  <button class='ipsButton ipsButton_normal ipsButton_small ipsButton_fullWidth' data-action='revertColorizer' disabled>{{#lang}}vseColorizer_revert{{/lang}}</button> </div>");;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.vse.colorizer',{initialize:function(){this.on('change',"input[type='text']",this.colorChanged);this.on('click','[data-action="revertColorizer"]',this.revertChanges);this.setup();},setup:function(){var colors={};Debug.log(this.scope.data('styleData'));_.each(colorizer.startColors,function(value,key){colors[key]='#'+value;});this.scope.html(ips.templates.render('vse.colorizer.panel',colors));this.scope.find('input[type="text"].color').each(function(){$(this).attr('data-original',$(this).val());new jscolor.color(this,{slider:false});});},colorChanged:function(e){var self=this;var type=$(e.currentTarget).attr('data-role');var color=$(e.currentTarget).val().replace('#','');var h=$(e.currentTarget).get(0).color.hsv[0]*60;var s=$(e.currentTarget).get(0).color.hsv[1]*100;if(_.isUndefined(colorizer[type])){Debug.error("Can't find data for "+type);return;}
var toUpdate=colorizer[type];_.each(ipsVSEData.sections,function(sectionData,sectionKey){_.each(sectionData,function(styleData,styleKey){if(!_.isUndefined(toUpdate[styleKey])){for(var i=0;i<toUpdate[styleKey].length;i++){if(self['_update'+toUpdate[styleKey][i]]){self['_update'+toUpdate[styleKey][i]](styleData,styleKey,h,s);}}}});});this.scope.find('[data-action="revertColorizer"]').attr('disabled',false);},revertChanges:function(e){var self=this;ips.ui.alert.show({type:'confirm',icon:'warn',message:ips.getString('vseRevert'),subText:ips.getString('vseRevert_subtext'),callbacks:{ok:function(){self.trigger('revertChanges');self.trigger('closeColorizer');self.scope.find('.vseColorizer_swatch').each(function(){this.color.fromString($(this).attr('data-original'));});}}});},_updatebackground:function(styleData,styleKey,h,s){if(_.isUndefined(styleData.background)){return;}
if(styleData.background.color){styleData.background.color=ips.utils.color.convertHex(styleData.background.color,h,s);}
if(styleData.background.gradient){for(var i=0;i<styleData.background.gradient.stops.length;i++){styleData.background.gradient.stops[i][0]=ips.utils.color.convertHex(styleData.background.gradient.stops[i][0],h,s);}}
this.trigger('styleUpdated',{selector:styleData.selector});},_updatefont:function(styleData,styleKey,h,s){if(_.isUndefined(styleData.font)||_.isUndefined(styleData.font.color)){return;}
styleData.font.color=ips.utils.color.convertHex(styleData.font.color,h,s);this.trigger('styleUpdated',{selector:styleData.selector});}});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.vse.main',{_mainFrame:null,_mainWindow:null,_frameReady:false,_data:{},_originalData:{},_xrayOn:false,_customCSSOpen:false,_url:'',_unsaved:false,_codeMirror:null,_vseData:null,initialize:function(){this.on('click','#vseStartXRay',this.toggleXRay);this.on('click','#vseColorize',this.startColorizer);this.on('click','#vseAddCustomCSS',this.toggleCustomCSS);this.on('click','[data-action="buildSkin"]',this.buildSkin);this.on('click','[data-action="cancelSkin"]',this.cancelSkin);this.on('click','#vseClassList [data-styleID]',this.selectClass);this.on('click','[data-action="back"]',this.editorBack);this.on('styleUpdated',this.styleUpdated);this.on('revertChanges',this.revertChanges);this.on('click','[data-action="colorizerBack"]',this.colorizerBack);this.on('closeColorizer',this.colorizerBack);this.on('change','#ipsTabs_vseSection_vseSettingsTab_panel :input',this.settingChanged);this.on(window,'message',this.handleCommand);this.on(window,'beforeunload',this.windowBeforeUnload);this.setup();},setup:function(){var self=this;this._mainFrame=$('#vseMainWrapper');this._mainWindow=this._mainFrame.find('iframe').get(0).contentWindow;if(!ipsVSEData||!_.isObject(ipsVSEData)||!colorizer||!_.isObject(colorizer)){Debug.error("VSE JSON data not found, cannot continue.");return;}
this._originalData=$.extend(true,{},ipsVSEData);this._data=this.getVSEData();var url=ips.utils.url.getURIObject(window.location.href);this._url=url.protocol+'://'+url.host;if(url.port&&url.port!=80){this._url=this._url+':'+url.port;}
this._codeMirror=CodeMirror.fromTextArea(document.getElementById('vseCustomCSS_editor'),{mode:'css',lineWrapping:true,lineNumbers:true});this._codeMirror.setSize(null,235);this._codeMirror.on('change',function(doc,cm){self._updateCustomCSS();});$('#vseCustomCSS').hide();this._buildClassList();},getVSEData:function()
{if(_.isObject(this._vseData))
{return this._vseData;}
this._vseData=ipsVSEData;if(ipsResumeVse.data)
{if(!_.isObject(ipsResumeVse.data))
{ipsResumeVse.data=JSON.parse(ipsResumeVse.data);if(!_.isObject(ipsResumeVse.data))
{return this._vseData;}}
this._vseData=_.extend(ipsVSEData,ipsResumeVse.data);}
return this._vseData;},handleCommand:function(e){if(e.originalEvent.origin!=this._url){Debug.error("Invalid origin");return;}
var commandName='command'+e.originalEvent.data.command.charAt(0).toUpperCase()+e.originalEvent.data.command.slice(1);if(!_.isUndefined(this[commandName])){this[commandName](e.originalEvent.data);}},sendCommand:function(command,data){this._mainWindow.postMessage(_.extend(data||{},{command:command}),this._url);},windowBeforeUnload:function(e){if(this._unsaved){return"You haven't saved this theme. By leaving this page, you will lose any changes you've made.";}},buildSkin:function(e){var self=this;if(!this._unsaved){ips.ui.alert.show({type:'alert',icon:'info',message:ips.getString('vseNoChanges'),callbacks:{}});return;}
ips.getAjax()(ipsSettings['baseURL']+'?app=core&module=system&controller=vse&do=build'+'&csrfKey='+ipsSettings['csrfKey'],{type:'post',data:this._buildFinalStyleData(),showLoading:true}).done(function(response){self._unsaved=false;ips.ui.alert.show({type:'verify',icon:'success',message:ips.getString('vseSkinBuilt'),buttons:{yes:ips.getString('yes'),no:ips.getString('no')},callbacks:{yes:function(){self._closeEditor(ipsSettings['baseURL']+'?app=core&module=system&controller=vse&do=home&id='+response.theme_set_id+'&csrfKey='+ipsSettings['csrfKey']);}}});}).fail(function(jqXHR,textStatus,errorThrown){Debug.log("Error saving theme:");Debug.error(textStatus);ips.ui.alert.show({type:'alert',icon:'warn',message:ips.getString('vseSkinBuilt_error'),callbacks:{}});});},cancelSkin:function(e){e.preventDefault();var self=this;if(this._unsaved){ips.ui.alert.show({type:'confirm',icon:'question',message:ips.getString('vseUnsaved'),callbacks:{ok:function(){self._closeEditor($(e.currentTarget).attr('href'));}}});}else{this._closeEditor($(e.currentTarget).attr('href'));}},settingChanged:function(){this._unsaved=true;},styleUpdated:function(e,data){var styles=this._generateLiveStyleObject(data.selector);this._updateSwatch(data.selector);this.sendCommand('updateStyle',{selector:data.selector,styles:styles});this._unsaved=true;},revertChanges:function(){var self=this;this._data=$.extend(true,{},this._originalData);_.each(this._data.sections,function(sectionData,sectionKey){_.each(sectionData,function(styleData,styleKey){self.trigger('styleUpdated',{selector:styleData.selector});});});this._unsaved=false;},commandWindowReady:function(){this._frameReady=true;this.sendCommand('selectorData',{selectors:this._getSelectors()});},commandGetStylesheet:function(){this.sendCommand('createStylesheet',{classes:this._generateLiveStyleObject(),custom:this.scope.find('#vseCustomCSS_editor').val()});},commandSelectorsMatched:function(data){var self=this;_.each(this._data.sections,function(sectionData,sectionKey){_.each(sectionData,function(styleData,styleKey){if(styleData.selector!=data.primary&&_.indexOf(data.other,styleData.selector)===-1){self.scope.find('li[data-styleid="'+sectionKey+'_'+styleKey+'"]').hide();}})});this.scope.find('#vseClassList .ipsToolbox_sectionTitle').hide();this.scope.find('#vseClassList > ul').prepend(ips.templates.render('vse.classes.title',{title:ips.getString('vseMatchedStyles'),role:"xrayResultsTitle"}));},selectClass:function(e){var styleID=$(e.currentTarget).attr('data-styleID');if(!styleID){return;}
var styleData=this._getStyleData(styleID);if(!$('#vseClassEditor').find('[data-styleid="'+styleID+'"]').length){this._buildPanel(styleID,styleData);}
$('#vseClassEditor').find('[data-role="classTitle"]').text(styleData.title);$('#vseClassEditor').find('[data-styleid]').hide().end().find('[data-styleid="'+styleID+'"]').show();$('#vseClassWrap').addClass('vseShow_editor');},editorBack:function(e){$('#vseClassWrap').removeClass('vseShow_editor');},toggleCustomCSS:function(e){e.preventDefault();if(this._customCSSOpen){$(e.currentTarget).removeClass('ipsButton_normal').addClass('ipsButton_primary');this._customCSSOpen=false;$('#vseCustomCSS').hide();$('#vseMainWrapper').css({bottom:'0px'});}else{$(e.currentTarget).removeClass('ipsButton_primary').addClass('ipsButton_normal');this._customCSSOpen=true;ips.utils.anim.go('fadeIn',$('#vseCustomCSS'));$('#vseMainWrapper').css({bottom:'300px'});}},toggleXRay:function(e){e.preventDefault();if(this._xrayOn){$(e.currentTarget).removeClass('ipsButton_normal').addClass('ipsButton_primary');this._xrayOn=false;this.stopXRay();}else{$(e.currentTarget).removeClass('ipsButton_primary').addClass('ipsButton_normal');this._xrayOn=true;this.startXRay();}},startXRay:function(){this.sendCommand('xrayStart');},stopXRay:function(){this.sendCommand('xrayCancel');this.scope.find('#vseClassList > ul').find('> li[data-role="xrayResultsTitle"]').remove().end().find('> li').show();},startColorizer:function(e){e.preventDefault();$('#vseColorize, #vseStartXRay').attr('disabled',true);this.scope.find('#vseClassWrap').hide();ips.utils.anim.go('fadeIn',this.scope.find('#vseColorizerPanel'));},colorizerBack:function(e){e.preventDefault();$('#vseColorize, #vseStartXRay').attr('disabled',false);this.scope.find('#vseColorizerPanel').hide();ips.utils.anim.go('fadeIn',this.scope.find('#vseClassWrap'));},_closeEditor:function(url){ips.getAjax()(ipsSettings['baseURL']+'?app=core&module=system&controller=vse&do=close',{showLoading:true}).always(function(){window.location=url||ips.getSetting('baseURL');});},_updateCustomCSS:function(){this._unsaved=true;this._codeMirror.save();this.sendCommand('updateCustomCSS',{css:$('#vseCustomCSS_editor').val()});},_generateLiveStyleObject:function(selector){var self=this;var returnedObject={};_.each(this._data.sections,function(sectionData,sectionKey){_.each(sectionData,function(styleData,styleKey){if(selector&&styleData.selector==selector){returnedObject=self._getStyleObjectForSelector(styleData,styleKey,sectionKey);}else if(_.isUndefined(selector)){if(_.isUndefined(returnedObject[styleData.selector])){returnedObject[styleData.selector]={};}
returnedObject[styleData.selector]=self._getStyleObjectForSelector(styleData,styleKey,sectionKey);}});});return returnedObject;},_getStyleObjectForSelector:function(styleData,styleKey,sectionKey){var self=this;var returnedObject={};var orig=this._originalData;if(!_.isUndefined(styleData.background)){var tmpNew=styleData.background;var tmpOrig=orig.sections[sectionKey][styleKey];var doGradient=false;if(!_.isUndefined(tmpNew.color)){if(_.isUndefined(tmpOrig.background)||_.isUndefined(tmpOrig.background.color)||tmpOrig.background.color!=tmpNew.color){returnedObject[(!_.isUndefined(tmpNew.gradient))?'background-color':'background']='#'+tmpNew.color.replace('#','');}}
if(!_.isUndefined(tmpNew.gradient)){if(_.isUndefined(tmpOrig.background)||_.isUndefined(tmpOrig.background.gradient)){doGradient=true;}else if(tmpOrig.background.gradient.angle!=tmpNew.gradient.angle){doGradient=true;}else{for(var i=0;i<tmpNew.gradient.stops.length;i++){if(_.isUndefined(tmpOrig.background.gradient.stops[i])){doGradient=true;break;}
if(tmpNew.gradient.stops[i][0]!=tmpOrig.background.gradient.stops[i][0]){doGradient=true;break;}
if(tmpNew.gradient.stops[i][1]!=tmpOrig.background.gradient.stops[i][1]){doGradient=true;break;}}}
if(doGradient){returnedObject['background-image']=ips.utils.css.generateGradient(tmpNew.gradient.angle,tmpNew.gradient.stops,false);}}else{if(!_.isUndefined(tmpOrig.background.gradient)){returnedObject['background-image']='none';}}}
if(!_.isUndefined(styleData.font)){var tmpNew=styleData.font;var tmpOrig=orig.sections[sectionKey][styleKey];if(!_.isUndefined(tmpNew.color)){if(_.isUndefined(tmpOrig.font)||_.isUndefined(tmpOrig.font.color)||tmpOrig.font.color!=tmpNew.color){returnedObject['color']='#'+tmpNew.color.replace('#','');}}}
return returnedObject;},_buildClassList:function(){var self=this;var output='';_.each(this.getVSEData().sections,function(value,key){output+=ips.templates.render('vse.classes.title',{title:ips.getString('vseSection_'+key),key:key});if(_.isObject(value)&&_.size(value)){_.each(value,function(item,itemKey){output+=ips.templates.render('vse.classes.item',{title:item.title,hasFont:!_.isUndefined(item.font),styleid:key+'_'+itemKey,swatch:self._buildSwatch(item,true)});});}});this.scope.find('#vseClassList > ul').html(output);},_buildSwatch:function(data,toString){var defaultStyle={'display':'block','background-color':'transparent','background-image':'none','border':'none'};var main=_.clone(defaultStyle);var sub=_.clone(defaultStyle);if(!_.isUndefined(data.background)){if(!_.isUndefined(data.background.color)){_.extend(main,{'background-color':'#'+data.background.color});}
if(!_.isUndefined(data.background.gradient)){_.extend(main,{'background-image':ips.utils.css.generateGradient(data.background.gradient.angle,data.background.gradient.stops)});}}else{_.extend(main,{background:'transparent'});}
if(!_.isUndefined(data.font)&&!_.isUndefined(data.font.color)){_.extend(sub,{background:'#'+data.font.color});}
if(toString){var finalObj={};_.each({main:main,sub:sub},function(obj,key){var output=[];var pairs=_.pairs(obj);_.each(pairs,function(value,idx){if(_.isArray(value[1])){for(var i=0;i<value[1].length;i++){output.push(value[0]+': '+value[1][i]);}}else{output.push(value.join(': '));}});finalObj[key]=output.join('; ');});return finalObj;}else{return{main:main,sub:sub};}},_updateSwatch:function(selector){var selectorData=this._findDataBySelector(selector);var newStyles=this._buildSwatch(selectorData.styleData,true);var row=this.scope.find('[data-styleid="'+selectorData.sectionKey+'_'+selectorData.styleKey+'"]');var mainSwatch=row.find('a > .vseClass_swatch');var subSwatch=row.find('a > .vseClass_swatch > .vseClass_swatch');mainSwatch.attr('style',newStyles.main);if(subSwatch.length&&newStyles.sub){subSwatch.attr('style',newStyles.sub);}},_findDataBySelector:function(selector){var data=null;_.each(this._data.sections,function(sectionData,sectionKey){_.each(sectionData,function(styleData,styleKey){if(styleData.selector==selector){data={styleData:styleData,styleKey:styleKey,sectionData:sectionData,sectionKey:sectionKey};}});});return data;},_getStyleData:function(styleID){var pieces=styleID.split('_');if(!_.isUndefined(this.getVSEData().sections[pieces[0]][pieces[1]])){return this.getVSEData().sections[pieces[0]][pieces[1]];}
return false;},_getSelectors:function(){var selectors=[];_.each(this._data.sections,function(sectionData,sectionKey){_.each(sectionData,function(styleData,styleKey){selectors.push(styleData.selector);});});return selectors;},_buildPanel:function(styleID,styleData){var output=[];var innerContainer=$('<div/>').attr('data-role','widgets');var container=$('<div/>').attr('id',styleID+'_panel').attr('data-styleid',styleID).attr('data-controller','core.front.vse.panel').append(innerContainer);if(!styleData){return;}
$('#vseClassEditor').find('[data-role="panels"]').append(container).end().find('#'+styleID+'_panel').data('styleData',styleData);$(document).trigger('contentChange',[container]);},_buildFinalStyleData:function(){var self=this;var settingsObj={};var stylesObj={};var styleBlock='';var orig=this._originalData;var setStyle=function(selector){if(_.isUndefined(stylesObj[selector])){stylesObj[selector]={};}
return stylesObj[selector];};var updateSetting=function(key,value){settingsObj[key]=value;};_.each(this._data.sections,function(sectionData,sectionKey){_.each(sectionData,function(styleData,styleKey){if(!_.isUndefined(styleData.background)){var tmpNew=styleData.background;var tmpOrig=orig.sections[sectionKey][styleKey].background||false;if(!_.isUndefined(tmpNew.color)){if((!tmpOrig||_.isUndefined(tmpOrig.color))||tmpOrig.color!=tmpNew.color){var settingKeyColor=self._settingKey(styleData,'background','color');if(settingKeyColor){updateSetting(settingKeyColor,'#'+tmpNew.color.replace('#',''));}else{setStyle(styleData.selector)[(!_.isUndefined(tmpNew.gradient))?'background-color':'background']='#'+tmpNew.color.replace('#','');}}}
if(!_.isUndefined(tmpNew.gradient)){var settingKeyFrom=self._settingKey(styleData,'background','from');var settingKeyTo=self._settingKey(styleData,'background','to');var gradientDone=false;if(settingKeyFrom&&settingKeyTo&&!_.isUndefined(tmpOrig.gradient)){var stopsMatch=self._doStopLocationsMatch(tmpOrig.gradient.stops,tmpNew.gradient.stops);if(stopsMatch&&tmpOrig.gradient.angle==tmpNew.gradient.angle){updateSetting(settingKeyFrom,tmpNew.gradient.stops[0][0]);updateSetting(settingKeyTo,tmpNew.gradient.stops[1][0]);gradientDone=true;}}
if(!gradientDone){setStyle(styleData.selector)['background-image']=ips.utils.css.generateGradient(tmpNew.gradient.angle,tmpNew.gradient.stops,false);}}else{if(!_.isUndefined(tmpOrig.gradient)){setStyle(styleData.selector)['background-image']='none';}}}
if(!_.isUndefined(styleData.font)){var tmpNew=styleData.font;var tmpOrig=orig.sections[sectionKey][styleKey].font||false;var settingKeyFont=self._settingKey(styleData,'color');if(!_.isUndefined(tmpNew.color)){if(!tmpOrig||_.isUndefined(tmpOrig.color)||tmpOrig.color!=tmpNew.color){if(settingKeyFont){updateSetting(settingKeyFont,'#'+tmpNew.color.replace('#',''));}else{setStyle(styleData.selector)['color']='#'+tmpNew.color.replace('#','');}}}}});});if(_.size(stylesObj)){_.each(stylesObj,function(value,selector){styleBlock+=ips.utils.css.buildStyleBlock(selector,value);});}
this.scope.find('#ipsTabs_vseSection_vseSettingsTab_panel :input').each(function(){settingsObj[$(this).attr('name')]=$(this).val();});return{customcss:$('#vseCustomCSS_editor').val(),values:JSON.stringify(this._data),css:styleBlock,settings:settingsObj};},_settingKey:function(data,levelOne,levelTwo){if(!data.settings||!levelOne){return;}
if(levelTwo){if(!_.isUndefined(data.settings[levelOne][levelTwo])){return data.settings[levelOne][levelTwo];}}
return data.settings[levelOne];return;},_doStopLocationsMatch:function(originalStops,newStops){if(originalStops.length!=newStops.length){return false;}
for(var i=0;i<originalStops.length;i++){if(originalStops[i][1]!=newStops[i][1]){return false;}}
return true;}});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.vse.panel',{initialize:function(){this.on('widgetStyleUpdated',this.widgetStyleUpdated);this.setup();},setup:function(){this.data=this.scope.data('styleData');var types=['background','font'];for(var i=0;i<types.length;i++){if(this.data[types[i]]){this._build(types[i],this.data[types[i]]);}}
$(document).trigger('contentChange',[this.scope]);},widgetStyleUpdated:function(e,data){e.stopPropagation();this.trigger('styleUpdated',{selector:this.data.selector});},_build:function(type,data){this.scope.append($('<div/>').attr('id',this.scope.attr('id')+'_'+type).attr('data-controller','core.front.vse.panel'+ips.utils.uppercaseFirst(type)).data('styleData',data));}});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.vse.panelBackground',{_data:{},_gradientStops:null,_gradientEditor:null,_currentAngle:0,initialize:function(){this.setup();this.on('click','[data-action="launchGradientEditor"]',this.launchGradientEditor);this.on('click','[data-action="gradientAngle"]',this.changeGradientAngle);this.on('click','[data-action="gradientAddStop"]',this.addGradientStop);this.on('click','[data-action="gradientRemoveStop"]',this.removeGradientStop);this.on('click','[data-action="saveGradient"]',this.saveGradient);this.on('click','[data-action="cancelGradient"]',this.cancelGradient);this.on('click','[data-action="removeGradient"]',this.removeGradient);this.on('change','[data-role="backgroundColor"]',this.changeBackground);this.on('change','[data-role="gradientEditor"] input',this.refreshGradientPreview);},setup:function(){this._data=this.scope.data('styleData');this.scope.append(ips.templates.render('vse.panels.wrapper',{content:ips.templates.render('vse.panels.background',{backgroundColor:this._data.color||'417ba3'}),type:'background'}));this._updateBackgroundPreview();this.scope.find('input[type="text"].color').each(function(){new jscolor.color(this);});},changeBackground:function(e){this._data.color=$(e.currentTarget).val();this._updateBackgroundPreview();this.trigger('widgetStyleUpdated');},launchGradientEditor:function(e){e.preventDefault();if(!this.scope.find('[data-role="gradientEditor"]').length){this._buildGradientEditor();}
this.scope.find('[data-role="backgroundControls"]').hide();ips.utils.anim.go('fadeIn',this.scope.find('[data-role="gradientEditor"]'));},saveGradient:function(e){e.preventDefault();var stops=this._getGradientStops();var angle=this._currentAngle;this._data.gradient={angle:angle,stops:stops};this._resetGradientEditor();this._updateBackgroundPreview();this.trigger('widgetStyleUpdated');},cancelGradient:function(e){e.preventDefault();this._resetGradientEditor();},removeGradient:function(e){e.preventDefault();delete this._data.gradient;this._resetGradientEditor();this._updateBackgroundPreview();this.trigger('widgetStyleUpdated');},refreshGradientPreview:function(){var gradient=ips.utils.css.generateGradient(this._currentAngle,this._getGradientStops(),false);var previewer=this._gradientEditor.find('[data-role="gradientPreview"]');_.each(gradient,function(val,idx){previewer.css({background:val});});this._gradientEditor.find('[data-action="cancelGradient"], [data-action="saveGradient"]').prop('disabled',false);},changeGradientAngle:function(e){this._gradientEditor.find('[data-action="gradientAngle"]').removeClass('ipsButton_normal').addClass('ipsButton_primary');$(e.currentTarget).removeClass('ipsButton_primary').addClass('ipsButton_normal');this._currentAngle=$(e.currentTarget).attr('data-angle');this.refreshGradientPreview();},addGradientStop:function(e){e.preventDefault();this._gradientStops.find('li:last-child').before(ips.templates.render('vse.gradient.stop',{color:'444444',location:100}));this._gradientStops.find('li:last-child').prev('li').find('input[type="text"]').each(function(){new jscolor.color(this);});},changeStopOrdering:function(e,ui){var stops=this._gradientStops.find('li:not( :first-child ):not( :last-child ) input[type="range"]');var self=this;if(stops.length==2){var firstInput=stops.first();var secondInput=stops.last();var firstPos=firstInput.val();var secondPos=secondInput.val();firstInput.val(secondPos);secondInput.val(firstPos);}else{var gaps=Math.floor(100 /(stops.length-1));var pos=0;stops.each(function(index){var value=$(this).val();var prev=parseInt($(stops[index-1]).val()||0);var next=parseInt($(stops[index+1]).val()||100);if(index==0&&value>=next){$(this).val(Math.floor(next / 2));}else if(index==(stops.length-1)&&value<=prev){$(this).val(_.min([100,prev+1]));}else if((index>0&&index<(stops.length-1))&&(value<=prev||value>=next)){if(next>prev){$(this).val(prev+((next-prev)/ 2));}else{$(this).val(prev+1);}}});}
this.refreshGradientPreview();},removeGradientStop:function(e){$(e.currentTarget).closest('li').remove();this.refreshGradientPreview();},_resetGradientEditor:function(){this._gradientEditor.hide().remove();ips.utils.anim.go('fadeIn',this.scope.find('[data-role="backgroundControls"]'));this._gradientEditor=null;this._currentAngle=0;this._currentStops=null;},_updateBackgroundPreview:function(){var chip=this.scope.find('[data-role="backgroundPreview"]');chip.css({backgroundColor:'transparent',backgroundImage:'none'});if(this._data.color){chip.css({backgroundColor:'#'+this._data.color});}
if(this._data.gradient){var gradient=ips.utils.css.generateGradient(this._data.gradient.angle,this._data.gradient.stops,false);_.each(gradient,function(val){chip.css({backgroundImage:val});});}},_buildGradientEditor:function(){var self=this;var buttons=(_.isUndefined(this._data.gradient))?ips.templates.render('vse.gradient.twoButtons'):ips.templates.render('vse.gradient.threeButtons');this.scope.find('[data-role="backgroundControls"]').after($('<div/>').attr('data-role','gradientEditor').html(ips.templates.render('vse.gradient.editor',{buttons:buttons})));this._gradientEditor=this.scope.find('[data-role="gradientEditor"]');this._gradientStops=this._gradientEditor.find('[data-role="gradientStops"]');if(!_.isUndefined(this._data.gradient)){_.each(this._data.gradient.stops,function(value){self._gradientStops.find('li:last-child').before(ips.templates.render('vse.gradient.stop',{color:value[0],location:parseInt(value[1])}));});}else{this._gradientStops.find('li:last-child').before(ips.templates.render('vse.gradient.stop',{color:'6592c4',location:0})).before(ips.templates.render('vse.gradient.stop',{color:'2b517b',location:100}));}
this._currentAngle=(_.isUndefined(this._data.gradient))?90:this._data.gradient.angle||90;this.refreshGradientPreview();this._gradientEditor.find('[data-action="gradientAngle"][data-angle="'+this._currentAngle+'"]').addClass('ipsButton_normal').removeClass('ipsButton_primary');this._gradientStops.find('input[type="text"]').each(function(){new jscolor.color(this);});this._gradientEditor.find('[data-action="cancelGradient"], [data-action="saveGradient"]').prop('disabled',true);ips.loader.get(['core/interface/jquery/jquery-ui.js']).then(function(){self._gradientStops.sortable({handle:'.fa-bars',axis:'y',update:_.bind(self.changeStopOrdering,self)})});},_getGradientStops:function(){var self=this;var output=[];this._gradientStops.find('> li:not( :first-child ):not( :last-child )').each(function(){output.push([$(this).find('input[type="text"]').val(),$(this).find('input[type="range"]').val()]);});return output;}});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.vse.panelFont',{_data:{},initialize:function(){this.on('change','[data-role="fontColor"]',this.changeFontColor);this.setup();},setup:function(){this._data=this.scope.data('styleData');this.scope.append(ips.templates.render('vse.panels.wrapper',{content:ips.templates.render('vse.panels.font',{fontColor:this._data.color}),type:'font'}));this.scope.find('input[type="text"].color').each(function(){new jscolor.color(this);});},changeFontColor:function(e){this._data.color=$(e.currentTarget).val();this.trigger('widgetStyleUpdated');}});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.vse.window',{_stylesheet:null,_selectors:[],_events:{},_exclude:null,_xrayElem:null,_url:'',_pointerEvents:false,initialize:function(){this.on(window,'message',this.handleCommand);this.setup();},setup:function(){$('head').append($('<style/>').attr('type','text/css').attr('id','elInjectedStyles')).append($('<style/>').attr('type','text/css').attr('id','elCustomCSS'));this._stylesheet=$('#elInjectedStyles');this._custom=$('#elCustomCSS');var url=ips.utils.url.getURIObject(window.location.href);this._url=url.protocol+'://'+url.host;if(url.port&&url.port!=80){this._url=this._url+':'+url.port;}
this.sendCommand('windowReady');this.sendCommand('getStylesheet');},handleCommand:function(e){if(e.originalEvent.origin!=this._url){Debug.error("Invalid origin");return;}
var pieces=e.originalEvent.data.command.split('.');var obj=this;for(var i=0;i<pieces.length-1;i++){if(!_.isUndefined(obj[pieces[i]])){obj=obj[pieces[i]];}else{Debug.error("Couldn't run vse.window."+e.originalEvent.data.command);return;}}
if(obj[pieces[pieces.length-1]]){obj[pieces[pieces.length-1]](e.originalEvent.data);}else{Debug.error("Couldn't run vse.window."+e.originalEvent.data.command);return;}},sendCommand:function(command,data){top.postMessage(_.extend(data||{},{command:command}),this._url);},updateStyle:function(data){ips.utils.css.replaceStyle('elInjectedStyles',data.selector,data.styles);},updateCustomCSS:function(data){this._custom.html(data.css);},selectorData:function(data){this._selectors=data.selectors;},createStylesheet:function(data){var update='';_.each(data.classes,function(val,key){if((_.isObject(val)&&!_.size(val))||!val){return;}
update+=key+"{\n";_.each(val,function(styleVal,styleKey){if(_.isObject(styleVal)){_.each(styleVal,function(thisVal){update+=styleKey+': '+thisVal+";\n";});}else{update+=styleKey+': '+styleVal+";\n";}});update+="}\n\n";});this._stylesheet.html(update);this._custom.html(data.custom||'');},xrayStart:function(){this._createXRayElem();this._pointerEvents=this._supportsPointerEvents();this._events['down']=$(document).on('mousedown.xray',_.bind(this._doDown,this));this._events['move']=$(document).on('mousemove.xray',_.bind(this._doFalse,this));this._events['over']=$(document).on('mouseover.xray',_.bind(this._doOver,this));},xrayCancel:function(){if(this._xrayElem&&this._xrayElem.length){this._xrayElem.remove();}
this._stop();},_stop:function(){$(document).off('.xray');},_doXray:function(e){e.preventDefault();var elem=$(e.target);if(elem.is(this._exclude)){return;}
var elemPosition=ips.utils.position.getElemPosition(elem);var elemDims={width:elem.outerWidth(),height:elem.outerHeight()};this._xrayElem.css({width:elemDims.width+'px',height:elemDims.height+'px',left:elemPosition.absPos.left+'px',top:elemPosition.absPos.top+'px',zIndex:ips.ui.zIndex()});},_doDown:function(e){e.preventDefault();this._doXray(e);this._stop();this._findMatchingSelectors($(e.target));},_doOver:function(e){if(this._pointerEvents){this._doXray(e);}else{this._doFalse(e);}},_doFalse:function(e){e.preventDefault();},_createXRayElem:function(){if($('#vseXRay').length){$('#vseXRay').remove();}
$('body').append($('<div/>').attr('id','vseXRay'));this._xrayElem=$('#vseXRay');},_findMatchingSelectors:function(elem){var ancestors=elem.parents().addBack(elem);var matched=[];var primaryMatch=null;var self=this;var selectorsLength=this._selectors.length;_.each(ancestors.get().reverse(),function(value,idx){for(var i=0;i<selectorsLength;i++){if($(value).is(self._selectors[i])){if(idx==0){primaryMatch=self._selectors[i];}else{matched.push(self._selectors[i]);}}}});this.sendCommand('selectorsMatched',{primary:primaryMatch,other:matched});},_supportsPointerEvents:function(){var element=document.createElement('x');element.style.cssText='pointer-events:auto';return element.style.pointerEvents==='auto';}});}(jQuery,_));;