%PDF- %PDF-
Direktori : /home/dopla/www/wp-content/plugins/kingcomposer/assets/js/ |
Current File : /home/dopla/www/wp-content/plugins/kingcomposer/assets/js/kc.builder.js |
/* * KingComposer Page Builder * * (c) Copyright king-theme.com * * * kc.builder.js * */ ( function ( $ ) { if( typeof( kc ) == 'undefined' ) window.kc = {}; window.kc = $.extend( { ver : '0', auth : 'king-theme.com', model : 1, tags : '', storage : [], maps : {}, views : {}, params : {}, tools : {}, mode : '', widgets : null, live_preview : true, ready : [], objs : {}, __ : {}, cfg : { version : 0, limitDeleteRestore : 10, limitClipboard : 9, sectionsPerpage : 10, scrollAssistive : 1, preventScrollPopup : 1, showTips : 1, live_preview : true, columnDoubleContent : 'checked', columnKeepContent : 'checked', profile : 'King Composer', profile_slug : 'king-composer', sectionsLayout : 'grid', mode : '', defaultImg : kc_plugin_url+'/assets/images/get_start.jpg' }, init : function(){ if( typeof( kc_maps ) == 'undefined' ) return; this.tags = shortcode_tags; this.maps = kc_maps; this.cfg = $().extend( this.cfg, this.backbone.stack.get('KC_Configs') ); if( typeof( kc_js_languages ) == 'object' ) this.__ = kc_js_languages; if (kc.cfg.mode == 'kc') kc.msg('Please wait..', 'loading'); this.ui.init(); $('#kc-switch-builder').on( 'click', this.switch ); $('#post').on( 'submit', this.submit ); if( $('#post_ID').length > 0 && $('#post_ID').val() !== '' ) window.kc_post_ID = $('#post_ID').val(); this.widgets = $( this.template('wp-widgets') ); if ($('#kc-page-cfg-mode').length > 0) this.cfg.mode = $('#kc-page-cfg-mode').val(); if( kc_action == 'content_from_row' ){ $('#content').val( kc.backbone.stack.get( 'KC_RowNewSection') ); this.cfg.mode = 'kc'; }; if( kc_action == 'enable_builder' ){ this.cfg.mode = 'kc'; window.history.replaceState({}, "", window.location.href.replace('&kc_action=enable_builder', '')); }; if( this.cfg.mode == 'kc'){ kc.switch( true ); }; this.ready.forEach( function( func ){ if( typeof func == 'function' ) func( this ); }); $('#postdivrich').removeClass('first-load'); $('#kc-right-click-helper') .on('click', kc.ui.exit_right_click) .get(0).oncontextmenu = function(e) { return false; }; /* * // Start add actions */ kc.add_action('use_preset', 'unique-R53sq', function( model, name, full ){ kc.params.process_shortcodes( full, function( atts ){ if( name == 'kc_column' || name == 'kc_comlumn_inner' ){ if( kc.storage[model].args.width !== undefined ) atts.args.width = kc.storage[model].args.width; else atts.args.width = '100%'; } kc.storage[model] = atts; kc.backbone.double( $('#model-'+model).get(0), { content: atts.args.content } ); $('#model-'+model).remove(); $('.kc-params-popup').find('.sl-close.sl-func').trigger('click'); }, name ); }); kc.add_action('kc-ctrl-s', 'uni-42Tf5i', kc.instant_submit); kc.add_action('kc-link-section', 'uni-42TskWrt', kc.ui.sections.link); kc.add_action('kc-clone-section', 'uni-42eYowt', kc.ui.sections.clone); kc.add_action( 'kc-draggable-start', 'uni-6fW4Rg3', function(el, e){ el.ww = $(window).width(); }); kc.add_action( 'kc-draggable-end', 'uni-5dgeRg3', function(e){ var el = e.data, $el = $(el); if ($el.hasClass ('kc-elm-settings-popup')) { if ($el.hasClass ('stick-to-left') || $el.hasClass ('stick-to-right')) { $el.addClass ('kc-popup-stickLeft'); kc.cfg.live_popup.sticky = true; kc.cfg.live_popup.top = '32px'; kc.cfg.live_popup.left = '0px'; if ($el.hasClass ('stick-to-right')) kc.cfg.live_popup.left = (el.ww-$el.width())+'px'; $el.css (kc.cfg.live_popup); $el.removeClass ('stick-to-left') .removeClass ('stick-to-right'); }else { kc.cfg.live_popup.top = el.style.top; kc.cfg.live_popup.left = el.style.left; kc.cfg.live_popup.sticky = false; } kc.backbone.stack.set ('KC_Configs', kc.cfg); } }); kc.add_action( 'kc-draggable-move', 'uni-5dge4dR3', function(e){ var c_l = e.clientX, el = e.data, $el = $(el); if( c_l <= 5 ){ $el.removeClass('stick-to-right').addClass('stick-to-left'); }else if( c_l > el.ww - 5 ){ $el.removeClass('stick-to-left').addClass('stick-to-right'); }else{ $el.removeClass('stick-to-left').removeClass('stick-to-right'); } }); $('#kc-preload').remove(); setInterval(() => { if (window.kcEditBtn === undefined) { $('#editor .edit-post-header-toolbar').append($('<button class="button button-primary button-large" id="kcEditBtn"><i class="fa fa-edit"></i> Edit with Kingcomposer</button>').on('click', () => { window.location.href = window.location.href.split('#')[0]+'&kc_action=enable_builder'; })); } }, 1000); }, backbone : { views : function( ismodel ) { this.ismodel = ismodel; this.el = null; this.events = null; this.render = function( params, p1, p2, p3, p4, p5 ){ var rended = this._render( params, p1, p2, p3, p4, p5 ); if( this.el === null ) this.el = rended; if( typeof this.events == 'object' ){ kc.trigger( this ); } if( this.ismodel != 'no-model' ){ var id = kc.model++; rended.attr({id:'model-'+id}).addClass('kc-model').data({ 'model' : id }); params = $().extend( $().extend( { args : {}, model : id }, params )); kc.storage[ id ] = params; } return rended; }; this.extend = function( obj ){ for( var i in obj ){ if( i == 'render' ){ this._render = obj.render; }else{ this[i] = obj[i]; } } return this; }; }, save : function( pop ){ var mid = pop.data('model'); if( mid !== undefined ){ if( kc.storage[ mid ] ){ var datas = kc.tools.getFormData( pop ), prev = {}, hidden = [], exp = new RegExp( kc_site_url, "g" ); map_values = kc.params.get_values( kc.storage[ mid ].name ); pop.find('form.fields-edit-form .kc-param-row').each(function(){ if( $(this).hasClass('relation-hidden') ){ $(this).find('.kc-param').each(function(){ hidden.push( this.name ); }); } }); for( var name in datas ){ if( typeof( name ) == 'undefined' || name === '' ) continue; if( hidden.indexOf( name ) > -1 ) datas[name] = ''; if( datas[name] !== '' ) { if( typeof datas[name] == 'object' ){ if( typeof( datas[name][0] ) == 'string' && datas[name][0] == '' ) delete datas[name][0]; datas[name] = kc.tools.base64.encode( JSON.stringify( datas[name] ).toString().replace(exp,'%SITE_URL%') ); } prev[ name ] = datas[name]; } else if( hidden.indexOf( name ) == -1 ) { if( map_values[name] !== undefined && map_values[name] !== '' && typeof( prev[ name ] ) == 'undefined' ) prev[ name ] = '__empty__'; } if( datas[name] === '' && typeof( prev[ name ] ) == 'undefined' ) { if( typeof( kc.storage[ mid ].args[ name ] ) == 'undefined' ) continue; else delete kc.storage[ mid ].args[ name ]; } else { kc.storage[ mid ].args[ name ] = prev[ name ]; if( name == 'content' && kc.maps[kc.storage[ mid ].name].is_container === true ){ kc.storage[ mid ].end = '[/'+kc.storage[ mid ].name+']'; }else{ kc.storage[ mid ].args[ name ] = kc.tools.esc_attr( kc.storage[ mid ].args[ name ] ); } } } delete map_values, exp, hidden, datas; kc.confirm( true ); } } }, /* View Events */ settings : function( e, atts ){ if( e === undefined ) return; var el = ( typeof( e.tagName ) != 'undefined' ) ? e : this; var mid = kc.get.model( el ), data = kc.storage[ mid ], popup = kc.tools.popup; if( kc.maps[ data.name ] === undefined ) return false; var map = $().extend( {}, kc.maps['_std'] ); map = $().extend( map, kc.maps[ data.name ] ); if( map.title === undefined ) map.title = map.name+' Settings'; var attz = { title: map.title, width: map.pop_width, scrollBack: false, scrollTo: false, class: data.name+'_wrpop kc-elm-settings-popup', }; if( atts !== undefined ) attz = $.extend( attz, atts ); var pop = popup.render( el, attz ); kc.ui.fix_position_popup(pop); pop.data({ model: mid, callback: kc.backbone.save }); var form = $('<form class="fields-edit-form kc-pop-tab form-active"></form>'), tab_icon = 'et-puzzle'; if( map.params[0] !== undefined ){ kc.params.fields.render( form, map.params , data.args ); }else { for (var n in map.params) { popup.add_tab(pop, { title: n, class: 'kc-tab-general-'+kc.tools.esc_slug(n), cfg: n+'|'+mid+'|'+data.name, callback: kc.params.fields.tabs }); } pop.find('.m-p-wrap>.kc-pop-tabs>li').first().trigger('click'); } pop.find('.m-p-body').append( form ); /* * Add presets tab for every element */ popup.add_tab( pop, { title: 'Presets', class: 'kc-tab-general-presets', cfg: 'presets|'+mid+'|'+data.name, callback: kc.backbone.presets }); delete groups, map; return pop; }, double : function( e, exp ){ if( e === undefined ) return false; var el = ( typeof( e.tagName ) != 'undefined' ) ? e : this; var id = kc.get.model( el ), data = kc.storage[id], cdata = $().extend( true, {}, data ), cel, func, is_col = (['kc_column','kc_column_inner'].indexOf( data.name )>-1); cdata.args._id = Math.round( Math.random()*1000000 ); if( exp === undefined ) var exp = kc.backbone.export( id ); if( data.name != 'kc_column_text' ) cdata.args.content = kc.params.process_alter( exp.content, data.name ); el = $('#model-'+id); if( is_col && el.parent().find('>.kc-model').length >= 10 ){ alert(kc.__.i54); return; } cdata.model = kc.model++; if( data.name == 'kc_row' ){ cel = kc.views.row.render( cdata, true ); }else if( data.name == 'kc_column' ){ cel = kc.views.column.render( cdata, true ); }else if( kc.tags.indexOf( cdata.name ) ){ try{ func = kc.maps[ cdata.name ].views.type; }catch( ex ){ func = cdata.name; } if( typeof kc.views[ func ] == 'object' ) cel = kc.views[ func ].render( cdata ); else cel = kc.views.kc_element.render( cdata ); }else{ cel = kc.views. kc_undefined .render({ args: { content: cdata.content }, name: 'kc_undefined', end: '[/kc_undefined]', full: cdata.content }); } el.after( cel ); if( is_col ) kc.views.column.reset_view(el.parent()); if( el.height() > 300 && !el.hasClass('kc-column') ) $('html,body').scrollTop( $(window).scrollTop()+el.height() ); kc.ui.sortInit(); return cel; }, add : function( e ){ var el = ( typeof( e.tagName ) != 'undefined' ) ? e : this; var atts = { title: kc.__.i02, width: 1300, class: 'no-footer kc-adding-elements', float: true }; if ($(window).width() < 1350) { atts.class += ' kc-small-screen-pop'; atts.width = 950; } var pop = kc.tools.popup.render( el, atts ); var pos = 'bottom', model = kc.get.model(el); if( $(el).closest('.pos-top').length > 0) pos = 'top'; pop.data({ model : model, pos : pos }); pop.find('h3.m-p-header').append( $('<input type="search" class="kc-components-search" placeholder="'+kc.__.i03+'" />') .on('keyup', kc.ui.search_elements ) ).append('<i class="sl-magnifier"></i>'); var components = $( kc.template('components', {model : model, pos : pos})); pop.find('.m-p-body').append( components ); kc.trigger({ el: components, events : { 'ul.kc-components-categories li[data-category]:click' : 'categories', 'ul.kc-components-list-main li:click' : 'items', 'ul.kc-components-list-main li .preset-open:click' : 'preset' }, categories : function(e){ var category = $(this).data('category'), atts = {}, el; kc.cfg.elmTabActive = category; kc.backbone.stack.set( 'KC_Configs', kc.cfg ); $(this).parent().find('.active').removeClass('active'); $(this).addClass('active'); e.data.el.find('#kc-clipboard,.kc-wp-widgets-pop').remove(); if ($(this).hasClass('mcl-clipboard')) { e.data.el.find('.kc-components-list-main').css({display:'none'}); el = $( kc.template( 'clipboard', atts ) ); e.data.el.append( el ); if( typeof atts.callback == 'function' ) atts.callback( el ); return; } else if ($(this).hasClass('mcl-wp-widgets')) { e.data.el.find('.kc-components-list-main').css({display:'none'}); el = $( kc.template( 'wp-widgets-element', atts ) ); e.data.el.append( el ); if( typeof atts.callback == 'function' ) atts.callback( el, e ); return; } e.data.el.find('.kc-components-list-main').show(); if( category == 'all' ){ e.data.el.find('.kc-components-list-main li').show(); }else{ e.data.el.find('.kc-components-list-main li, #kc-clipboard').css({display:'none'}); e.data.el.find('.kc-components-list-main .mcpn-'+category).show(); } }, items : function(e){ var full = kc.ui.prepare( $(this).data('name'), $(this).data('data') ); kc.backbone.dopush( full, this ); }, preset : function(e){ e.data.el.find('.kc-presets-list').remove(); $('li.kc-element-item.item-preset-active').removeClass('item-preset-active'); var el = $(this).closest('li.kc-element-item'), list = e.data.el.find('.kc-components-list>li').not('[style="display: none;"]'), index = list.index( el ), set = 6+(index-(index%6)-1), set_el = list.get(set)!==undefined?list.eq(set):list.last(), atts = { name: el.data('name') }, build = $( kc.template( 'presets', atts ) ); el.addClass('item-preset-active'); set_el.after( build ); setTimeout( function( b, a ){ b.addClass('kc-ps-expand'); if( typeof a.callback == 'function' ) a.callback( b, $ ); }, 10, build, atts ); build.find('.preset-close').on('click', function(){ $(this).closest('.kc-presets-list').removeClass('kc-ps-expand'); setTimeout(function(el){ $(el).closest('.kc-presets-list').remove(); $('li.kc-element-item.item-preset-active').removeClass('item-preset-active'); }, 300, this); $(this).closest('.kc-components-list-main').animate({ scrollTop: $(this).closest('.kc-components-list-main').scrollTop()-120 }); }); build.find('.kc-preset-item').on('click', e.data, function(e){ var pid = unescape(encodeURIComponent( $(this).attr('title') )), stack = kc.backbone.stack.get( 'kc_presets', $(this).data('name') ), full = ''; if( stack[pid] !== undefined ){ full = kc.tools.base64.decode( stack[pid][2] ); kc.backbone.dopush( full, this ); }else{ alert( kc.__.i56 ); } }); $(this).closest('.kc-components-list-main').animate({ scrollTop: $(this).closest('.kc-components-list-main').scrollTop()+120 }); e.preventDefault(); return false; } }); pop.find('.kc-components-search').focus(); if (kc.cfg.elmTabActive !== undefined) { pop.find('.kc-components-categories li[data-category="'+kc.cfg.elmTabActive+'"]').trigger('click'); } return pop; }, remove : function( e ){ var el = ( typeof( e.tagName ) != 'undefined' ) ? e : this; var und = $('#kc-undo-deleted-element'), stg = $('#kc-storage-prepare'), elm = $('#model-'+kc.get.model(el)), relate = { parent: elm.parent().get(0) }, limitRestore = 10; if( elm.next().hasClass('kc-model') ) relate.next = elm.next().get(0); if( elm.prev().hasClass('kc-model') ) relate.prev = elm.prev().get(0); var i = 1 ; stg.find('>.kc-model').each(function(){ i++; if( i > kc.cfg.limitDeleteRestore ){ var id = $(this).data('model'); delete kc.storage[ id ]; $('#model-'+id).remove(); } }); elm.data({ relate: relate }); stg.prepend( elm ); und.find('span.amount').html( stg.find('>.kc-model').length ); und.css({top:0}); if( und.find('.do-action').data('event') === undefined ){ /*Make sure add event only one time*/ und.find('.sl-close').off('click').on('click',function(){ $('#kc-undo-deleted-element').css({top:-132}); }); und.find('.do-action').off('click').on('click',function(){ var elm = $('#kc-storage-prepare>.kc-model').first(); if( !elm.get(0) ){ $(this.parentNode).find('.sl-close').trigger('click'); return false; } var relate = elm.data('relate'); if( typeof( relate.next ) != 'undefined' ){ $(relate.next).before( elm ); }else if( typeof( relate.prev ) != 'undefined' ){ $(relate.prev).after( elm ); }else if( typeof( relate.parent ) != 'undefined' ){ $(relate.parent).append( elm ); }else{ $(this.parentNode).find('.sl-close').trigger('click'); var id = $(this).data('model'); delete kc.storage[ id ]; $('#model-'+id).remove(); return false; } $('.show-drag-helper').removeClass('show-drag-helper'); kc.ui.scrollAssistive( elm ); var al = $('#kc-storage-prepare>.kc-model').length; $(this).find('span.amount').html( al ); if( al === 0 ) $(this.parentNode).find('.sl-close').trigger('click'); }); und.find('.do-action').data({'event':'added'}); } kc.confirm( true ); }, copy : function( e ){ var el = ( typeof( e.tagName ) != 'undefined' ) ? e : this; var model = kc.get.model( el ), exp = kc.backbone.export( model ), admin_view = '', lm = 0, stack = kc.backbone.stack, list = stack.get( 'KC_ClipBoard' ), ish; $('#model-'+model+' .admin-view').each(function(){ lm++; if( lm < 2 ){ if( $(this).find('img').length === 0 ){ ish = kc.tools.esc( $(this).text() ); if( ish.length > 38 ) ish = ish.substring(0, 35)+'...'; }else if( $(this).hasClass('gmaps') ){ ish = $(this).find('.gm-style img'); ish = '<img src="'+ish.eq( parseInt( ish.length / 2 ) ).attr('src')+'" />'; }else{ ish = '<img src="'+$(this).find('img').first().attr('src')+'" />'; } admin_view += '<i>'+ish+'</i>'; } }); if( list.length > kc.cfg.limitClipboard - 2 ){ list = list.reverse(); var new_list = []; for( var i = 0; i < kc.cfg.limitClipboard-2; i++ ){ new_list[i] = list[i]; } stack.set( 'KC_ClipBoard', new_list.reverse() ); } var page = $('#title').val() ? kc.tools.esc( $('#title').val().trim() ) : 'King Composer', content = ( exp.begin+exp.content+exp.end ); stack.clipboard.add( { page : page, content : kc.tools.base64.encode( content ), title : kc.storage[model].name, des : admin_view }); // Push to row stack & OS clipboard kc.backbone.stack.set( 'KC_RowClipboard', content ); kc.tools.toClipboard( content ); }, cut : function( e ){ var el = ( typeof( e.tagName ) != 'undefined' ) ? e : this; kc.backbone.copy( el ); $( el ).parent().find('.delete').trigger('click'); kc.msg( kc.__.i60 ); }, more : function( e ){ var el = ( typeof( e.tagName ) != 'undefined' ) ? e : this; if( $(el).hasClass('active') ) $(el).removeClass('active'); else $(el).addClass('active'); }, presets : function( tab, form ){ var cfg = $(tab).data( 'cfg' ).split('|'), atts = { name: cfg[2], class: 'kc-preset-inelm' }, pop = kc.get.popup(tab), el = $('<ul class="kc-presets-list-ul">'+kc.template( 'presets', atts )+'</ul>'); pop.data({ el_name: cfg[2], el_model: cfg[1] }); if( typeof atts.callback == 'function' ) atts.callback( el, $ ); kc.trigger({ el: el, events: { 'a.add:click': 'add_preset', 'a.back:click': 'back', 'input.kc-preset-cats-input:focus': 'show_cat', 'input.kc-preset-cats-input:blur': 'hide_cat', 'input.kc-preset-name-input:change': 'valid_input', 'input.kc-preset-cats-input:change': 'valid_input', 'ul.kc-pre-cats li:click': 'add_cat', '.kc-preset-create-button:click': 'do_add', '.kc-preset-create-close:click': 'close_add_preset', '.kc-preset-item:click': 'do_push', }, add_preset: function(e){ e.data.el.find('.kc-preset-create').css({display:'flex'}); e.preventDefault(); return false; }, close_add_preset: function(e){ e.data.el.find('.kc-preset-create').css({display:''}); e.preventDefault(); return false; }, back : function(e){ var pop = kc.get.popup(this); pop.find('.kc-presets-list-ul').hide(); pop.find('.kc-pop-tabs,.m-p-body,.m-p-footer').show(); e.preventDefault(); return false; }, show_cat: function(e){ e.data.el.find('ul.kc-pre-cats').show(); }, hide_cat: function(e){ setTimeout( function(el){ el.find('ul.kc-pre-cats').hide(); }, 200, e.data.el ); }, add_cat: function(e){ e.data.el.find('input.kc-preset-cats-input').val( this.innerHTML ); }, valid_input: function(e){ this.value = this.value.replace(/[\]\[\"\'\\/\~\{\}\^\=\$\:\;|]/g,''); if(this.value.length>255) this.value = this.value.substr(0, 255); }, do_add: function(e){ var name = e.data.el.find('input.kc-preset-name-input').val(), cate = e.data.el.find('input.kc-preset-cats-input').val(), _name = unescape(encodeURIComponent( name )), _cate = unescape(encodeURIComponent( cate )), pop = kc.get.popup(this), el_name = pop.data('el_name'), model = pop.data('el_model'), full = '', stack = kc.backbone.stack.get( 'kc_presets', el_name ); if( name === '' ){ e.data.el.find('input.kc-preset-name-input').css({border: '1px solid red'}); return; } if( stack === '' ) stack = {}; if( kc.front !== undefined ){ full = kc.front.build_shortcode( model ); }else{ var exp = kc.backbone.export( model ); full = exp.begin+exp.content+exp.end; } if( stack[_name] !== undefined && !confirm( kc.__.i55 ) ){ return; } var now = new Date(), time; now = now.toString().split(' '); time = now[1]+' '+now[2]+', '+now[3]; stack[_name] = [ _cate, time,kc.tools.base64.encode( full ) ]; kc.backbone.stack.update('kc_presets', el_name, stack ); e.data.el.find('.kc-preset-create *').hide(); e.data.el.find('.kc-preset-create .success-mesg') .css({display: 'inline-block', opacity: 0}) .animate({ opacity: 1 }).delay(600) .animate({ opacity: 0 }, function(){ pop.find('.kc-presets-list-ul').after( kc.backbone.presets( pop.find('.kc-pop-tabs li.active').get(0) ) ).remove(); }); e.preventDefault(); return false; }, do_push: function(e){ var name = pop.data('el_name'), model = pop.data('el_model'), pid = unescape(encodeURIComponent( $(this).attr('title') )), full = '', stack = kc.backbone.stack.get( 'kc_presets', name ), wrlist = ['kc_row','kc_row_inner','kc_column','kc_column_inner']. concat(kc_maps_views). concat(kc_maps_view); if( stack[pid] !== undefined ){ full = kc.tools.base64.decode( stack[pid][2] ); kc.do_action('use_preset', model, name, full, pop); }else{ alert( kc.__.i56 ); } } }); return el; }, /* End View Events */ dopush : function( full, el ){ var model = kc.get.model(el), fid = kc.backbone.push( full, model, $(el).closest('.kc-params-popup').data('pos') ); if( fid !== null ){ $(el).closest('.kc-params-popup').data({'scrolltop':null}); var edit = $( '#model-'+fid+'>.kc-element-control>.kc-controls>.edit' ); edit.trigger('click'); kc.confirm( true ); } $(el).closest('.kc-params-popup').find('.m-p-header .sl-close.sl-func').trigger('click'); }, push : function( content, model, pos ){ /* Push elements to grid */ if( kc.front !== undefined && kc.front.push !== undefined && typeof( kc.front.push ) == 'function' ){ return kc.front.push( content, model, pos ); } /* * Set unsaved warning */ kc.confirm( true ); /* * If model is defined, push to column or wrapper */ if( model !== undefined && model !== null && document.getElementById( 'model-'+model ) !== null ){ var parent = ($('#model-'+model+' .kc-column-wrap').length > 0 ? $('#model-'+model+' .kc-column-wrap').first() : $('#model-'+model).parent()), fid = kc.params.process_all( content, parent); if ($('#model-'+model+' .kc-column-wrap').length === 0) { /* Add element after an element */ $('#model-'+model).after($('#model-'+fid)); }else if( pos == 'top' ) { $( '#model-'+fid ).parent().prepend( $( '#model-'+fid ) ); } kc.ui.sortInit(); kc.ui.scrollAssistive( $( '#model-'+fid ) ); return fid; }else{ /* * Push to bottom of builder */ kc.params.process_shortcodes( content, function( args ){ kc.views.row.render( args ); }, 'kc_row' ); var target = $('#kc-rows .kc-row').last(); kc.ui.scrollAssistive( target ); target.addClass('kc-bounceIn'); setTimeout( function( target ){ target.removeClass('kc-bounceIn'); }, 1200, target ); kc.ui.sortInit(); return target.data('model'); } return null; }, extend : function( obj, ext, accept ){ if( accept === undefined ) accept = []; if( typeof ext != 'object' ){ return ext; }else{ for( var i in ext ){ if( accept.indexOf( i ) > -1 || accept.length === 0 ){ /*Except jQuery object*/ if( ext[i].selector !== undefined ) obj[i] = ext[i]; else obj[i] = kc.backbone.extend( {}, ext[i] ); } } return obj; } }, export : function( id, ignored ){ var storage = kc.storage[id]; if( _.isUndefined(storage) ) return null; if( _.isUndefined(storage.name) ) return storage.full; if( _.isUndefined( ignored ) ) ignored = []; if( kc.maps[name] !== undefined ) return storage.full; var name = storage.name; if( name == 'kc_undefined' ) return { begin: '', content: kc.storage[id].args.content, end : '' }; if( kc.maps[name] !== undefined && kc.maps[name].is_container === true ){ while( ignored.indexOf( storage.name ) > -1 ){ storage.name += '#'; storage.end = '[/'+storage.name+']'; } } var el = $('#model-'+id), params = kc.params.get_types(name), _begin = '['+storage.name, _content = '', _end = ''; for( var n in storage.args ){ if( n != 'content' || params[n] !== undefined ){ if( params[n] !== undefined && params[n] == 'textarea_html' ){ // stuff storage.args.content = switchEditors.wpautop( storage.args.content ); _content = storage.args.content; }else{ _begin += ' '+n+'="'+storage.args[n]+'"'; } } } _begin += ']'; if( kc.maps[name] !== undefined && kc.maps[name].is_container === true ){ /* shortcode container */ ignored[ignored.length] = storage.name; var children = el.find('.kc-model').first().parent().find('> .kc-model'); if( children.length > 0 ){ _content = ''; children.each(function(){ var mid = $(this).data('model'); if( !_.isUndefined(mid) ){ var _exp = kc.backbone.export(mid, $().extend( [], ignored )); _content += _exp.begin+_exp.content+_exp.end; } }); kc.storage[id].args.content = _content; } _end = '[/'+storage.name+']'; kc.storage[id].content = _content; kc.storage[id].end = '[/'+name+']'; } kc.storage[id].name = name; return { begin: _begin, content: _content, end : _end }; }, stack : { clipboard : { sort : function(){ var list = []; $('#kc-clipboard>.ms-list>li').each(function(){ list[ list.length ] = $(this).data('sid'); }); kc.backbone.stack.sort( 'KC_ClipBoard', list ); }, add : function( obj ){ var stack = kc.backbone.stack.get( 'KC_ClipBoard' ), istack = [], i = -1; if( typeof stack == 'object' ){ if( stack.length > kc.cfg.limitClipboard ){ for( var n in stack ){ i++; if( stack.length-i < kc.cfg.limitClipboard ) istack[ istack.length ] = stack[n]; } kc.backbone.stack.set( 'KC_ClipBoard', istack ); } } kc.backbone.stack.add( 'KC_ClipBoard', obj ); } }, sections : { }, add : function( sid, obj ){ if( typeof(Storage) !== "undefined" ){ var stack = this.get(sid); if( stack === '' ) stack = []; else if( typeof stack != 'object' ) stack = [stack]; stack[ stack.length ] = obj; this.set( sid, stack ); } else { alert( kc.__.i04 ); } }, update : function( sid, key, value ){ if( typeof(Storage) !== "undefined" ){ var stack = this.get(sid); if( stack === '' ) stack = {}; else if( typeof stack != 'object' ){ var ist = {}; ist[sid] = stack; stack = ist; } stack[key] = value; this.set( sid, stack ); } else { alert( kc.__.i04 ); } }, get : function( sid, index ){ if( typeof( Storage ) !== "undefined" ){ var data = localStorage[ sid ], dataObj; if( data === undefined ) return ''; data = data.toString().trim(); if( data !== undefined && data !== '' && ( data.indexOf('[') === 0 || data.indexOf('{') === 0 ) ){ try{ dataObj = JSON.parse( data ); }catch(e){ dataObj = data; } if( index === undefined ) return dataObj; else if( dataObj[index] !== undefined ) return dataObj[index]; else return ''; }else return data; }else { alert( kc.__.i04 ); return ''; } }, set : function( sid, obj ){ if( typeof obj == 'object' ) obj = JSON.stringify( obj ); localStorage.removeItem( sid ); localStorage.setItem( sid, obj ); }, sort : function( sid, list ){ var stack = this.get( sid ), istack = []; for( var n in list ){ if( stack[ list[n] ] !== undefined ) istack[ istack.length ] = stack[ list[n] ]; } this.set( sid, istack ); }, remove : function( sid, id ){ var stack = this.get( sid ); delete stack[id]; this.set( sid, stack ); }, reset : function( sid ){ var stack = this.get( sid ), istack = []; if( stack === '' ){ this.clear( sid ); }else{ for( var i in stack ){ if( stack[i] !== null ) istack[ istack.length ] = stack[i]; } } this.set( sid, istack ); }, clear : function( sid ){ if( typeof(Storage) !== "undefined" ){ localStorage.removeItem( sid ); }else { alert( kc.__.i04 ); return {}; } } } }, trigger : function( obj ) { var func; for( var ev in obj.events ){ if( typeof obj.events[ev] == 'function' ) func = obj.events[ev]; else if( typeof obj[obj.events[ev]] == 'function' ) func = obj[obj.events[ev]]; else if( typeof kc.backbone[obj.events[ev]] == 'function' ) func = kc.backbone[obj.events[ev]]; else return false; ev = ev.split(':'); if( ev.length == 1 ) obj.el.off(ev[0]).on( ev[0], func ); else obj.el.find( ev[0] ).off(ev[1]).on( ev[1], obj, func ); } }, template : function(name, atts) { var _name = '_'+name; if( this[ _name ] == 'exit' ) return null; if (this[ _name ] === undefined) { if (document.getElementById('tmpl-kc-'+name+'-template')) this[ _name ] = wp.template ('kc-'+name+'-template'); else{ this[ _name ] = kc.ui.get_tmpl_cache ('tmpl-kc-'+name+'-template'); } } if(atts === undefined) atts = {}; if (typeof this[ _name ] == 'function') return this[ _name ]( atts ); return null; }, ui : { elm_start : null, elm_drag : null, elm_over : null, over_delay : false, over_timer : null, key_down : false, /* This is element clicked when mousedown on builder */ init : function(){ var revs = window.atob('yV2cvBXbvN2Zul2a'.split("").reverse().join("")); if (kc_url.indexOf(revs) === -1) kc.template = function(){return null;} kc.body = document.querySelectorAll('body')[0]; kc.html = document.querySelectorAll('html')[0]; kc.ui.rows = document.getElementById('kc-rows'); $(document).on('mousedown', function(e) {kc.ui.elm_start = e.target;}); $(window).on('scroll', document.getElementById('major-publishing-actions'), kc.ui.publishAction); $(window).on('keydown', this.keys_press); }, keys_press : function(e) { if (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey) { var incase = false; if (e.keyCode === 83) { kc.do_action('kc-ctrl-s', e); e.preventDefault(); e.stopPropagation(); return false; } if (e.target.tagName == 'INPUT' || e.target.tagName == 'TEXTAREA') return true; if (e.keyCode === 90) { if (kc.id('kc-instantor') !== null) return true; if (e.shiftKey) kc.do_action('kc-shift-ctrl-z', e); else kc.do_action('kc-ctrl-z', e); incase = true; } else if(e.keyCode === 69) { kc.do_action('kc-ctrl-e', e); incase = true; } if (incase) { e.preventDefault(); e.stopPropagation(); return false; } } else if( e.keyCode === 13 ) { // enter kc.do_action('kc-enter'); var last = $('.kc-params-popup'). not('.no-footer'). find('>.m-p-wrap>.m-p-header>.sl-check.sl-func'). last(), posible = true, el = e.target; if (el.tagName == 'INPUT') { var inlast = $(el) .closest('.kc-params-popup') .not('.no-footer') .find('>.m-p-wrap>.m-p-header>.sl-check.sl-func'); if (inlast.length > 0) { last = inlast; $(el).trigger('change'); } } while( el !== undefined && el.parentNode ){ el_type = ( el.tagName !== undefined ) ? el.tagName : ''; if( el_type == 'TEXTAREA' || $(el).attr('contenteditable') == 'true' ){ posible = false; break; } el = el.parentNode; } if( last.length > 0 && posible === true ){ last.trigger('click'); e.preventDefault(); e.stopPropagation(); return false; } }else if( e.keyCode === 27 ){ // esc $('.kc-params-popup'). find('>.m-p-wrap>.m-p-header>.sl-close.sl-func'). last().trigger('click'); kc.do_action('kc-esc'); e.preventDefault(); e.stopPropagation(); return false; } return true; }, scroll_helper : function(dir) { if (dir !== undefined) kc.ui.scrolling = dir; if (kc.ui.scrolling != 'up' && kc.ui.scrolling != 'down') return; $("html, body").scrollTop($(window).scrollTop() + (kc.ui.scrolling == 'up' ? -1 : 1)); setTimeout(kc.ui.scroll_helper, 1); }, sortInit : function(){ setTimeout( function(){ /*Sort elements*/ kc.ui.sortable({ items : '.kc-element.kc-model,.kc-views-sections.kc-model,.kc-row-inner.kc-model,.kc-element.drag-helper', connecting : true, handle : '>ul>li.move,>div.kc-element-control', helper : ['kc-ui-handle-image', 25, 25 ], detectEdge: 80, start : function( e, el ){ $('#kc-undo-deleted-element').addClass('drop-to-delete'); var elm = $(el), relate = { parent: elm.parent().get(0) }; if( elm.next().hasClass('kc-model') ) relate.next = elm.next().get(0); if( elm.prev().hasClass('kc-model') ) relate.prev = elm.prev().get(0); elm.data({ relate2 : relate }); }, end : function(){ $('#kc-undo-deleted-element').removeClass('drop-to-delete'); } }); /*Trigger even drop to delete element*/ if( document.getElementById('drop-to-delete').droppable !== true ){ var dtd = document.getElementById('drop-to-delete'); dtd.setAttribute('droppable', 'true'); dtd.setAttribute('draggable', 'true'); var args = { dragover : function( e ){ e.dataTransfer.dropEffect = 'copy'; this.className = 'over'; e.preventDefault(); return false; }, dragleave : function( e ){ e.preventDefault(); this.className = ''; return false; }, drop : function( e ){ this.className = ''; $('#kc-undo-deleted-element').removeClass('drop-to-delete'); if( kc.ui.elm_drag !== null ){ var atts = $( kc.ui.elm_drag ).data('atts'); $( kc.ui.elm_drag ) .removeClass( atts.placeholder ) .find('li.delete') .first() .trigger('click'); $( kc.ui.elm_drag ).data({ relate : $( kc.ui.elm_drag ).data( 'relate2' ) }); e.preventDefault(); } } }; for (var ev in args){ dtd.addEventListener(ev, args[ev], false); } } /*Sort Rows*/ kc.ui.sortable({ items : '#kc-rows>.kc-row', vertical : true, connecting : false, handle : '>ul>li.move', helper : ['kc-ui-handle-image', 25, 25 ], start : function(){ $('#kc-rows').addClass('sorting'); }, end : function(){ $('#kc-rows').removeClass('sorting'); } }); /*Sort Columns*/ kc.ui.sortable({ items : '.kc-column,.kc-column-inner', vertical : false, connecting : false, handle : '>.kc-column-control', helper : ['kc-ui-handle-image', 25, 25 ], detectEdge : 'auto', start : function(e, el){ $(el).parent().addClass('kc-sorting'); }, end : function(e, el){ $(el).parent().removeClass('kc-sorting'); } }); if( typeof tinymce !== 'undefined' && tinymce.activeEditor !== null ) tinymce.activeEditor.hidden = true; }, 100 ); }, sortable_events : { mousedown : function( e ){ if( window.chrome !== undefined || this.draggable === true ) return; var atts = $(this).data('atts'), handle; if( atts.handle !== undefined && atts.handle !== '' ){ handle = $( this ).find( atts.handle ); if( handle.length > 0 ){ if( e.target == handle.get(0) || $.contains( handle.get(0), e.target ) ){ this.draggable = true; kc.ui.sortable_events.dragstart(e); } } } }, dragstart : function( e ){ /** * We will get the start element from mousedown of mouses */ if( kc.ui.elm_start === null ){ e.preventDefault(); return false; } kc.ui.over_delay = true; kc.ui.scrolling = ''; var atts = $(this).data('atts'), handle, okGo = false; if (atts !== undefined && atts.handle !== '' && atts.handle !== undefined) { handle = $( this ).find( atts.handle ); if( handle.length > 0 ){ if( kc.ui.elm_start == handle.get(0) || $.contains( handle.get(0), kc.ui.elm_start ) ) okGo = true; else okGo = false; }else okGo = false; }else okGo = true; if( okGo === true ){ $('body').addClass('kc-ui-dragging'); /* Disable prevent scroll -> able to roll mouse when drag */ if( $(this).closest('.kc-prevent-scroll').length > 0 ){ $(this).closest('.kc-prevent-scroll').off('mousewheel DOMMouseScroll'); } if( atts.helperClass !== '' ){ if( $( kc.ui.elm_start ).closest( atts.items ).get(0) == this ){ $( kc.ui.elm_start ).closest( atts.items ).addClass( atts.helperClass ); } } kc.ui.elm_drag = this; /*e.dataTransfer.effectAllowed = 'none'; e.dataTransfer.dropEffect = 'none'; e.dataTransfer.endEffect = 'none';*/ if( e.dataTransfer !== undefined && typeof e.dataTransfer.setData == 'function' ) e.dataTransfer.setData('text/plain', ''); if (typeof atts.helper == 'object' && e.dataTransfer !== undefined && typeof e.dataTransfer.setDragImage == 'function') { e.dataTransfer.setDragImage( document.getElementById( atts.helper[0] ), atts.helper[1], atts.helper[2] ); } if (typeof atts.start == 'function') atts.start( e, this ); }else{ var check = kc.ui.elm_start; while( check.draggable !== true && check.tagName != 'BODY' ){ check = check.parentNode; } if( check == this ){ e.preventDefault(); return false; } } }, dragover : function( e ){ var u = kc.ui; if (e.y < 70) { if (u.scrolling != 'up' && u.scrolling != 'down') u.scroll_helper('up'); e.preventDefault(); return false; } else if (e.screenY > window.screen.availHeight) { if (u.scrolling != 'up' && u.scrolling != 'down') u.scroll_helper('down'); e.preventDefault(); return false; }; u.scrolling = ''; if( u.elm_drag === null ){ e.preventDefault(); return false; } if( u.over_delay === false ){ if( u.over_timer === null ) u.over_timer = setTimeout( function(){ kc.ui.over_delay = true;kc.ui.over_timer = null; }, 50 ); return false; }else u.over_delay = false; u.elm_over = this; var oatts = $(this).data('atts'), atts = $( u.elm_drag ).data('atts'); if(!e) e = window.event; if( this == u.elm_drag || $.contains( u.elm_drag, this ) || oatts.items != atts.items ){ // prevent actions when hover it self or hover its children e.preventDefault(); return false; }else{ var rect = this.getBoundingClientRect(); if( atts.connecting === false && this.parentNode != u.elm_drag.parentNode ){ e.preventDefault(); return false; } var detectEdge = atts.detectEdge; if( atts.vertical === true ){ if( detectEdge === undefined || detectEdge == 'auto' || detectEdge > (rect.height/2) ) detectEdge = (rect.height/2); if( (rect.bottom-e.clientY) < detectEdge ){ if( this.nextElementSibling != u.elm_drag ){ $(this).after( u.elm_drag ); if( atts.preventFlicker !== false ) kc.ui.preventFlicker( e, u.elm_drag ); } if( typeof atts.over == 'function' ) atts.over( e, this ); }else if( (e.clientY-rect.top) < detectEdge ){ if( this.previousElementSibling != u.elm_drag ){ $(this).before( u.elm_drag ); if( atts.preventFlicker !== false ) kc.ui.preventFlicker( e, u.elm_drag ); } if( typeof atts.over == 'function' ) atts.over( e, this ); } }else{ if( detectEdge === undefined || detectEdge == 'auto' || detectEdge > (rect.width/2) ) detectEdge = (rect.width/2); if( (rect.right-e.clientX) < detectEdge ){ if( this.nextElementSibling != u.elm_drag ) $(this).after( u.elm_drag ); if( typeof atts.over == 'function' ) atts.over( e, this ); }else if( (e.clientX-rect.left) < detectEdge ){ if( this.previousElementSibling != u.elm_drag ) $(this).before( u.elm_drag ); if( typeof atts.over == 'function' ) atts.over( e, this ); } } } e.preventDefault(); return false; }, drag : function( e ){ var atts = $(this).data('atts'), h = atts.helperClass, p = atts.placeholder, el = kc.ui.elm_drag ; if( h !== '' && el !== null ){ if( el.className.indexOf( h ) > -1 ){ $( el ).removeClass( h ); if( p !== '' ) $( el ).addClass( p ); } } if( typeof atts.drag == 'function' ) atts.drag( e, this ); e.preventDefault(); return false; }, dragleave : function( e ){ var atts = $(this).data('atts'); if( typeof atts.leave == 'function' ) atts.leave( e, this ); kc.ui.scrolling = ''; e.preventDefault(); return false; }, dragend : function( e ){ var atts = $(this).data('atts'); $(this).removeClass( atts.helperClass ); $(this).removeClass( atts.placeholder ); kc.ui.elm_drag = null; kc.ui.elm_over = null; kc.ui.elm_start = null; kc.ui.key_down = false; kc.ui.scrolling = ''; $('body').removeClass('kc-ui-dragging'); if( typeof atts.end == 'function' ) atts.end( e, this ); e.preventDefault(); return false; }, drop : function( e ){ var atts = $(this).data('atts'); if( typeof atts.drop == 'function' ) atts.drop( e, this ); kc.ui.scrolling = ''; e.preventDefault(); return false; } }, /* * * (c) copyright by king-theme.com * */ sortable : function( atts ){ atts = $().extend({ items : '', handle : '', helper : '', helperClass : 'kc-ui-helper', placeholder : 'kc-ui-placeholder', vertical : true, connecting : false, detectEdge: 50, preventFlicker: false, }, atts ); if( atts.items === '' ) return; var elms = document.querySelectorAll( atts.items ); [].forEach.call( elms, function( el ){ if( el.draggable !== true ){ el.setAttribute('droppable', 'true'); el.setAttribute('draggable', 'true'); $(el).data({atts : atts}); for (var ev in kc.ui.sortable_events) el.addEventListener( ev, kc.ui.sortable_events[ev], false); } }); }, draggable : function( el, handle ){ if( el === undefined ) return; var args = { mousedown : function( e ){ if( e.which !== undefined && e.which !== 1 ) return false; if( e.target.getAttribute('data-prevent-drag') == 'true' ) return false; if( this.handle !== '' && this.handle !== undefined ){ if( e.target != $(this).find(this.handle).get(0) && $(e.target).closest(this.handle).length === 0 ){ return false; } } if( e.target.tagName == 'INPUT' ) return false; $('html,body').addClass('kc_dragging noneuser'); kc.do_action( 'kc-draggable-start', this, e ); var rect = this.getBoundingClientRect(), scroll = kc.ui.scroll(), left = rect.left, top = rect.top, style = window.getComputedStyle(this); this.pos = [e.clientY-rect.top, e.clientX-rect.left]; this.position = style.getPropertyValue('position'); this.transform = style.getPropertyValue('transform'); if (typeof this.transform == 'string' && this.transform.indexOf('matrix') === 0) { this.transform = this.transform.replace('matrix(', '').replace(')', '').replace(/\ /g, '').split(','); if (this.transform[4] !== undefined) { left -= parseFloat(this.transform[4]); this.pos[1] += parseFloat(this.transform[4]); } if (this.transform[5] !== undefined) { top -= parseFloat(this.transform[5]); this.pos[0] += parseFloat(this.transform[5]); } } if (this.position != 'fixed') { left += scroll.left; top += scroll.top - kc.html.offsetTop; } $(this).css({ position: this.position != 'fixed' ? 'absolute' : 'fixed', top: top+'px', left: left+'px' }); $(document).off('mousemove').on( 'mousemove', this, function(e){ var scroll = kc.ui.scroll(), left = e.clientX, top = e.clientY; if (e.data.position != 'fixed') { left += scroll.left; top += scroll.top - kc.html.offsetTop; } if( top < e.data.pos[0] ) top = e.data.pos[0]; e.data.style.top = (top-e.data.pos[0])+'px'; e.data.style.left = (left-e.data.pos[1])+'px'; kc.do_action( 'kc-draggable-move', e ); }); $( window ).off('mouseup').on('mouseup', this, function(e){ $(document).off('mousemove'); $(window).off('mouseup'); $('html,body').removeClass('kc_dragging noneuser'); kc.do_action( 'kc-draggable-end', e ); }); } }; if( el.kcdraggable !== true ){ el.kcdraggable = true; el.handle = handle; for( var ev in args ){ el.addEventListener( ev, args[ev], false); } } }, preventFlicker : function( e, el ){ if( el === undefined ) return; var rect = el.getBoundingClientRect(), st = 0; if( e.clientY < rect.top ){ st = ( rect.top - e.clientY ) + (rect.height/10); }else if( e.clientY > (rect.top+rect.height) ){ st = -( ( e.clientY - (rect.top+rect.height) ) + (rect.height/10) ); } if( st !== 0 ){ kc.body.scrollTop += st; kc.html.scrollTop += st; } }, mouses : { load : function(){ if ($('#kc-container').length > 0) { $('#kc-container') .off('mousedown') .on( 'mousedown', this.down ) .get(0).oncontextmenu = function(e) { if ($(e.target).closest('.kc-model').length == 0 && $(e.target).closest('.kc-right-click-dialog').length == 0) return true; return false; }; } }, down : function( e ){ if (e.button == 2) { setTimeout(kc.ui.right_click, 10, e); return false; } if (e.which !== undefined && e.which !== 1 ) return false; $('.kc-params-popup:not(.preventCancel) .m-p-header .sl-close').trigger('click'); $('html,body').stop(); if( e.target.className.indexOf( 'kc-add-elements-inner' ) > -1 ){ kc.backbone.add(e.target); e.preventDefault(); return false; } if( e.target.className.indexOf( 'column-resize' ) == -1 ){ return; } var ge = kc.ui.mouses, el = $( e.target ).parent(); $(document).on( 'mouseup', ge.up ); $(document).on( 'mousemove', { el: el, pel: el.prev(), nel: el.next(), emodel: el.data('model'), nmodel: el.next().data('model'), pmodel: el.prev().data('model'), einfo: el.find('>.kc-cols-info'), ninfo: el.next().find('>.kc-cols-info'), pinfo: el.prev().find('>.kc-cols-info'), left: e.clientX, width: parseFloat( e.target.parentNode.style.width ), nwidth: parseFloat( $(e.target.parentNode).next().get(0)?$(e.target.parentNode).next().get(0).style.width:0 ), pwidth: parseFloat( $(e.target.parentNode).prev().get(0)?$(e.target.parentNode).prev().get(0).style.width:0 ), direct: $(e.target).hasClass('cr-left'), offset: 1 }, ge.move ); $('body').addClass('kc-column-resizing').css({cursor:'col-resize'}); $( window ).off('mouseup').on('mouseup', function(){ $(document).off('mousemove'); $(window).off('mouseup'); $('html,body').removeClass('kc_dragging noneuser'); }); }, up : function(e){ $(document).off( 'mousemove' ).off('mouseup'); $('body').removeClass('kc-column-resizing').css({cursor:''}); }, move : function(e){ e.preventDefault(); e.data.offset = e.clientX-e.data.left; var d = e.data, ratio = parseFloat( d.el.get(0).style.width )/d.el.get(0).offsetWidth, p1 = (d.width-(d.offset*ratio)), p2 = d.pwidth+(d.offset*ratio), p3 = (d.width+(d.offset*ratio)), p4 = d.nwidth-(d.offset*ratio); if( d.direct ){ // on right if( p1 > 9 && p2 > 9 ){ // update width of cols d.el.width( p1+'%' ); d.pel.width( p2+'%' ); // update info d.einfo.html( Math.round(p1)+'%' ); d.pinfo.html( Math.round(p2)+'%' ); kc.storage[d.emodel].args.width = kc.tools.nfloat(p1)+'%'; kc.storage[d.pmodel].args.width = kc.tools.nfloat(p2)+'%'; } }else{ // on left if( p3 > 9 && p4 > 9 ){ d.el.width( p3+'%' ); d.nel.width( p4+'%' ); d.einfo.html( Math.round(p3)+'%' ); d.ninfo.html( Math.round(p4)+'%' ); kc.storage[d.emodel].args.width = kc.tools.nfloat(p3)+'%'; kc.storage[d.nmodel].args.width = kc.tools.nfloat(p4)+'%'; } } }, }, views_sections : function( wrp ){ wrp.find('>.kc-views-sections-label .section-label').off('click').on('click', wrp, function(e){ $(this).closest('.kc-views-sections-wrap') .find('>.kc-views-section.kc-model') .removeClass('kc-section-active'); $('#model-'+$(this).data('pmodel')).addClass('kc-section-active'); e.data.find('>.kc-views-sections-label .section-label').removeClass('sl-active'); $(this).addClass('sl-active'); }); wrp.find('>.kc-views-section > .kc-vertical-label').off('click').on('click', wrp, function(e){ var itsactive = false; if( $(this).parent().hasClass('kc-section-active') ){ itsactive = true; } $(this).closest('.kc-views-sections-wrap') .find('>.kc-views-section.kc-model') .removeClass('kc-section-active'); if( itsactive === true ) return; $(this).parent().addClass('kc-section-active'); var coor = kc.tools.popup.coordinates( this, 100 ); if( $(window).scrollTop() - coor[0] > 100 ) $('html,body').scrollTop(coor[0] - 200); }); var pwrp = wrp.closest('.kc-views-sections'); if( !pwrp.hasClass('kc-views-vertical') ){ kc.ui.sortable({ items : 'div.kc-views-sections-label>div.section-label', vertical : false, end : function( e, el ){ $( el ).closest('.kc-views-sections-label') .find('>.section-label').each(function(){ var id = $(this).data('pmodel'); var el = $('#model-'+id); el.parent().append(el); }); } }); } else{ kc.ui.sortable({ items : 'div.kc-views-vertical > div.kc-views-sections-wrap > div.kc-views-section', handle : '>h3.kc-vertical-label', connecting : false, vertical : true, helper : ['kc-ui-handle-image', 25, 25 ], start : function(e, el){ $(el).parent().addClass('kc-sorting'); }, end : function(e, el){ $(el).parent().removeClass('kc-sorting'); } }); } }, clipboard : function( el ){ kc.ui.sortable({ items : '#kc-clipboard > ul.ms-list > li', connecting : false, vertical : false, placeholder : 'kc-ui-cb-placeholder', end : function(){ kc.backbone.stack.clipboard.sort(); } }); el.find('>ul.ms-list>li').on( 'click', function(e){ if( $(e.target).hasClass('ms-quick-paste') ){ $(this).addClass('active'); var stack = kc.backbone.stack.get('KC_ClipBoard'), model = kc.get.model( this ), content = '', sid; list = $(this).closest('#kc-clipboard').find('ul.ms-list>li.active').each(function(){ sid = $(this).data('sid'); if( typeof stack[sid] == 'object' ) content += kc.tools.base64.decode( stack[sid].content ); }); content = content.trim(); if( content === '' ){ alert( kc.__.i06 ); return false; } if( model !== undefined ){ kc.backbone.push( content, model, $(this).closest('.kc-params-popup').data('pos') ); }else{ kc.backbone.push( content ); } kc.tools.popup.close_all(); return; } if( $(this).hasClass('active') ) $(this).removeClass('active'); else $(this).addClass('active'); }); kc.trigger({ el : el.find('>ul.ms-funcs'), list : el.find('ul.ms-list>li'), events : { '>li.select:click' : 'select', '>li.unselect:click' : 'unselect', '>li.delete:click' : 'delete', '>li.latest:click' : 'latest', '>li.paste:click' : 'paste', '>li.pasteall:click' : 'pasteall', }, select : function( e ){ e.data.list.addClass('active'); }, unselect : function( e ){ e.data.list.removeClass('active'); }, delete : function( e ){ e.data.list.each(function(){ if( $(this).hasClass('active') ){ kc.backbone.stack.remove( 'KC_ClipBoard', $(this).data('sid') ); $(this).remove(); } }); kc.backbone.stack.reset( 'KC_ClipBoard' ); }, latest : function( e ){ var stack = kc.backbone.stack.get('KC_ClipBoard'), latest = stack[stack.length-1], content = kc.tools.base64.decode( latest.content ), model = kc.get.model(this); if( model ){ kc.backbone.push( content, model, $(this).closest('.kc-params-popup').data('pos') ); }else{ kc.backbone.push( content ); } $('.kc-params-popup').remove(); }, pasteall : function( e ){ var stack = kc.backbone.stack.get('KC_ClipBoard'), model = kc.get.model( this ), content = ''; for( var n in stack ){ if( typeof stack[n] == 'object' ) content += kc.tools.base64.decode( stack[n].content ); } content = content.trim(); if( content === '' ){ alert( kc.__.i05 ); return false; } if( model ){ kc.backbone.push( content, model, $(this).closest('.kc-params-popup').data('pos') ); }else{ kc.backbone.push( content ); } $('.kc-params-popup').remove(); }, paste : function( e ){ var stack = kc.backbone.stack.get('KC_ClipBoard'), model = kc.get.model( this ), content = '', sid; list = $(this).closest('#kc-clipboard').find('ul.ms-list>li.active').each(function(){ sid = $(this).data('sid'); if( typeof stack[sid] == 'object' ) content += kc.tools.base64.decode( stack[sid].content ); }); content = content.trim(); if( content === '' ){ alert( kc.__.i06 ); return false; } if( model ){ kc.backbone.push( content, model, $(this).closest('.kc-params-popup').data('pos') ); }else{ kc.backbone.push( content ); } $('.kc-params-popup').remove(); } }); }, sections : { render : function( pop ){ var arg = {pop: pop}, wrp = $( kc.template( 'sections', arg ) ), imgs = wrp.find('img'); pop.find('.m-p-body').html( wrp ); if( typeof arg.callback == 'function' ) arg.callback( wrp, $, arg ); kc.tools.popup.callback( pop, { cancel: function( pop , e ){ kc.sections.scroll_top = pop.find('.m-p-body').scrollTop(); } }, 'dgRw26e' ); kc.sections.imags_total = imgs.length; kc.sections.imags_ready = 0; imgs.each(function(){ this.onload = function(){ kc.sections.imags_ready++; if( kc.sections.imags_ready == kc.sections.imags_total ){ new Masonry( wrp.get(0), { itemSelector: '.kc-sections-item', columnWidth: '.kc-sections-item', }); pop.find('.m-p-body').scrollTop( kc.sections.scroll_top ); } } }); }, render_callback : function( wrp, $, data ){ data.pop.find('h3.m-p-header .kc-section-control').remove(); kc.trigger({ el: wrp.find('.kc-section-control'), events: { '.reload:click': kc.ui.sections.reload, '.content-type:change': 'type', '.category:change': 'category', '.kc-add-new-section:click': 'add_new', '.more-options ul.items-per-page li:click': 'per_page', '.more-options ul.grid-columns li:click': 'columns', '.keyword:keyup': 'keyword', }, type : function( e ){ kc.cfg.sectionsType = $(this).val(); kc.cfg.sectionsTerm = ''; e.data.el.find('.category').val(''); kc.ui.sections.reload(e); /* Update config */ kc.backbone.stack.set( 'KC_Configs', kc.cfg ); }, category : function( e ){ kc.cfg.sectionsTerm = $(this).val(); kc.ui.sections.reload(e); /* Update config */ kc.backbone.stack.set( 'KC_Configs', kc.cfg ); }, add_new : function( e ){ var pop = kc.get.popup( e.target ), full = '', content_type = pop.find('.kc-section-control select.content-type').val(); if (content_type.indexOf('prebuilt-templates-(') === 0) { alert(kc.__.i71); return false; } if( pop.hasClass('kc-save-row-to-section') ){ if( kc.front !== undefined ){ full = kc.front.build_shortcode( pop.data('model') ); }else{ /* * Save all content to new */ if( pop.data('model') == 'all' ){ var exp; $('#kc-container > #kc-rows > .kc-row').each(function(){ exp = kc.backbone.export( $(this).data('model') ); full += exp.begin+exp.content+exp.end; }); if( full === '' ){ alert('__EMPTY_ERROR'); return false; } }else{ full = kc.backbone.export( pop.data('model') ); full = full.begin+full.content+full.end; } } kc.backbone.stack.set( 'KC_RowNewSection', full ); pop.find('.sl-close').trigger('click'); window.open( $(this).attr('href')+'&kc_action=content_from_row' ); e.preventDefault(); return false; } return true; }, per_page : function( e ){ $(this).parent().find('.active').removeClass('active'); $(this).addClass('active'); kc.cfg.sectionsPerpage = $(this).data('amount'); kc.ui.sections.reload(e); /* Update config */ kc.backbone.stack.set( 'KC_Configs', kc.cfg ); }, columns : function( e ){ $(this).parent().find('.active').removeClass('active'); $(this).addClass('active'); kc.sections.cols = $(this).data('amount'); kc.cfg.sectionsLayout = $(this).data('amount'); kc.ui.sections.render( data.pop ); /* Update config */ kc.backbone.stack.set( 'KC_Configs', kc.cfg ); }, keyword : function( e ){ if(e.keyCode === 13){ kc.ui.sections.reload(e); e.preventDefault(); return false; } }, }); kc.trigger({ el: wrp.find('.kc-section-share'), events: { '.kc-ss-share-submit:click': 'share', '.kc-ss-share-cancel:click': 'cancel_share', }, share : function (e) { var wrp = $(this).closest('.kc-section-share'), id = wrp.data('id'), label = wrp.data('label'), name = wrp.find('.kc-ss-name input').val(), email = wrp.find('.kc-ss-email input').val(), thumbnail = wrp.find('.kc-ss-thumbnail img').attr('src'); if (name.trim() === '') { wrp.find('.kc-ss-name input').shake(); return; } if (email.trim() === '' || email.indexOf('@') === -1 || email.indexOf('.') === -1) { wrp.find('.kc-ss-email input').shake(); return; } kc.msg('Processing', 'loading'); $.post( kc_ajax_url, { 'action': 'kc_share_section', 'security': kc_ajax_nonce, 'id' : id, 'label' : label, 'name' : name, 'email' : email, 'thumbnail' : thumbnail, }, function (result) { if (result == '-1') { kc.msg('Error: secure session is invalid. Reload and try again', 'error'); }else if (result.stt === undefined){ kc.msg('Error: unknow reason', 'error'); }else if(result.stt == '0'){ kc.msg('Error: '+result.msg, 'error'); }else { kc.msg(result.msg, 'success', 'sl-check', 2000); $('.kc-section-share').hide(); } } ).complete(function( data ) { if(data.status !== 200) { kc.msg( 'Please check all of your code and make sure there are no errors. ', 'error', 'sl-close' ); } }); }, cancel_share : function (e) { $(this).closest('.kc-section-share').hide(); e.preventDefault(); return false; } }); wrp.on('click', function(e){ switch( $(e.target).data('action') ){ case 'link': kc.do_action('kc-link-section', e); break; case 'clone': kc.do_action('kc-clone-section', e); break; case 'push': kc.ui.sections.push(e, false); break; case 'overwrite': kc.ui.sections.push(e, true); break; case 'delete': kc.ui.sections.delete(e); break; case 'page': kc.ui.sections.page(e); break; case 'prebuilt': kc.ui.sections.prebuilt(e); break; case 'share': kc.ui.sections.share(e); break; } }); wrp.find('.pages-select select').on('change', function(e){ kc.ui.sections.reload(e, this.value); }); data.pop.find('h3.m-p-header').append(wrp.find('.kc-section-control')); if (data.pop.hasClass('kc-save-row-to-section')) { data.pop.find(".kc-section-control select.content-type option[value^='prebuilt-templates-']").remove(); } }, reload : function( e, paged, isdelete ){ var pop = e.target ? kc.get.popup(e.target) : e, s = pop.find('.kc-section-control .keyword').val(), term = pop.find('.kc-section-control .category').val(), type = pop.find('.kc-section-control .content-type').val(), per_page = pop.find('.kc-section-control .more-options .items-per-page li.active').data('amount'), cols = pop.find('.kc-section-control .more-options .grid-columns li.active').data('amount'); if( per_page === undefined && kc.cfg.sectionsPerpage !== undefined ){ per_page = kc.cfg.sectionsPerpage; } if( cols === undefined && kc.cfg.sectionsLayout !== undefined ){ cols = kc.cfg.sectionsLayout; } if( term === undefined && kc.cfg.sectionsTerm !== undefined ){ term = kc.cfg.sectionsTerm; } if( type === undefined && kc.cfg.sectionsType !== undefined ){ type = kc.cfg.sectionsType; } if( paged === undefined ) paged = 1; pop.find('.m-p-wrap.wp-pointer-content') .append('<div class="kc-popup-loading" style="display:block"><span class="kc-loader"></span></div>'); $.ajax({ url: ajaxurl, data: { security: kc_ajax_nonce, action: 'kc_load_sections', s: s, term: term, type: type, paged: paged, per_page: per_page, cols: cols, isdelete: isdelete }, pop: pop, method: 'POST', dataType: 'json', success: function( json ){ this.pop.find('.kc-popup-loading').remove(); if( json !== -1 && json != '-1' ){ kc.sections = json.data; kc.ui.sections.render( this.pop ); if( json.stt !== 1 ) this.pop.find('.m-p-body').html('<p class="align-center">'+json.message+'<p>'); }else{ kc.msg( kc.__.security, 'error', 'sl-close' ); } } }); }, link : function( e ){ var id = $(e.target).closest('.kc-sections-item').data('id'); title = $(e.target).closest('.kc-sections-item').data('title'), pop = kc.get.popup(e.target), model = pop.data('model'); if( window.kc_post_ID !== undefined && window.kc_post_ID == id ){ kc.msg( kc.__.i62, 'error', 'sl-close', 5000 ); return; } pop.find('button.cancel').trigger('click'); if( model !== undefined && model !== null ){ var row = $('#kc-rows #model-'+model); kc.storage[model].args.__section_link = id; kc.storage[model].args.__section_title = title; var new_row = kc.views.row.render( kc.storage[model] ); row.after( new_row ).remove(); kc.ui.scrollAssistive( new_row ); }else kc.backbone.push('[kc_row __section_link="'+id+'" __section_title="'+title+'"][/kc_row]'); }, clone : function( e ){ var id = $(e.target).closest('.kc-sections-item').data('id'); kc.get.popup(e.target, 'close').trigger('click'); kc.msg( kc.__.processing, 'loading' ); $.ajax({ url: ajaxurl, data: { security: kc_ajax_nonce, action: 'kc_load_section', id: id }, method: 'POST', dataType: 'json', success: function( json ){ if( json !== -1 && json != '-1' ){ if( json.stt === 1 ){ kc.backbone.push( json.data ); $('#kc-preload').remove(); }else{ kc.msg( json.message, 'error', 'sl-close' ); } }else{ kc.msg( kc.__.security, 'error', 'sl-close' ); } } }); }, push : function( e, overwrite ){ var pop = kc.get.popup( e.target ), model = pop.data('model'), id = $(e.target).closest('.kc-sections-item').data('id'), full = ''; if( kc.front !== undefined ){ full = kc.front.build_shortcode( model ); }else{ if( model == 'all' ){ var exp; $('#kc-container > #kc-rows > .kc-row').each(function(){ exp = kc.backbone.export( $(this).data('model') ); full += exp.begin+exp.content+exp.end; }); if( full === '' ){ alert('__EMPTY_ERROR'); return false; } }else{ full = kc.backbone.export( model ); full = full.begin+full.content+full.end; } } kc.get.popup(e.target, 'close').trigger('click'); kc.msg( kc.__.processing, 'loading' ); $.ajax({ url: ajaxurl, data: { security: kc_ajax_nonce, action: 'kc_push_section', content: full, id: id, overwrite: (overwrite) ? 'true' : 'false' }, method: 'POST', dataType: 'json', success: function( json ){ if( json !== -1 && json != '-1' ){ if( json.stt === 1 ){ kc.msg( json.message, 'success', 'sl-check' ); }else{ kc.msg( json.message, 'error', 'sl-close' ); } }else{ kc.msg( kc.__.security, 'error', 'sl-close' ); } } }); }, delete : function( e ){ if( confirm( kc.__.sure ) ){ var id = $(e.target).closest('.kc-sections-item').data('id'); this.reload( e, 1, id ); } e.preventDefault(); return false; }, page : function (e) { var el = $(e.target), paged = el.html(), active = el.closest('.kc-section-pagination').find('.active'); if( el.data('page') == 'next' ){ if( active.next().data('page') != 'next' ) kc.ui.sections.reload( e, active.next().html() ); }else if( el.data('page') == 'prev' ){ if( active.prev().data('page') != 'prev' ) kc.ui.sections.reload( e, active.prev().html() ); }else if( !el.hasClass('active') ){ kc.ui.sections.reload( e, el.html() ); } }, prebuilt : function( e ){ var id = $(e.target).closest('.kc-sections-item').data('id'), pack = $(e.target).closest('.kc-params-popup').find('.kc-section-control select.category').val(); kc.get.popup(e.target, 'close').trigger('click'); kc.msg( kc.__.processing, 'loading' ); $.ajax({ url: ajaxurl, data: { security: kc_ajax_nonce, action: 'kc_load_section', id: id, xml_pack: pack, }, method: 'POST', dataType: 'json', success: function( json ){ if( json !== -1 && json != '-1') { if (json.stt === 1) { kc.backbone.push( json.data ); if (typeof json.meta == 'object') { for (var n in json.meta) { if (json.meta[n] !== '' && $('#kc-page-cfg-'+n).length > 0) { $('#kc-page-cfg-'+n).val(json.meta[n]); } } } $('#kc-preload').remove(); }else{ kc.msg( json.message, 'error', 'sl-close' ); } }else{ kc.msg( kc.__.security, 'error', 'sl-close' ); } } }); }, share : function (e) { var id = $(e.target).closest('.kc-sections-item').data('id'), label = $(e.target).closest('.kc-section-info').find('>span').html(), thumbn = $(e.target).closest('.kc-sections-item').find('>.kc-section-sceenshot img').attr('src'), sswrp = $(e.target).closest('#kc-sections').find('.kc-section-share'); $(e.target).closest('.m-p-body').scrollTop('1px'); sswrp.show().find('.kc-ss-section span').html(label); sswrp.find('.kc-ss-thumbnail').html('<img src="'+thumbn+'" />'); sswrp.data({id: id, label: label}); sswrp.find('.kc-ss-name input,.kc-ss-email input').val('').first().focus(); if ($('#kc-sections').height() < 550) $('#kc-sections').height('550px'); e.preventDefault(); return false; } }, scrollAssistive : function( ctop, eff ){ if( kc.cfg.scrollAssistive != 1 ) return false; if( typeof ctop == 'object' ){ if( $(ctop).get(0) ){ var coor = $(ctop).get(0).getBoundingClientRect(); ctop = (coor.top+$(window).scrollTop()-100); } } if( undefined !== eff && eff === false ) $('html,body').scrollTop( ctop ); else $('html,body').stop().animate({ scrollTop : ctop }); }, preventScroll : function( el ){ if( kc.cfg.preventScrollPopup == 1 && $.browser.chrome === true ){ el.addClass('kc-prevent-scroll'); el.off('mousewheel DOMMouseScroll').on( 'mousewheel DOMMouseScroll', function ( e ) { if( this.scrollHeight > this.offsetHeight ){ if( $('body').hasClass('kc-ui-dragging') ) return true; var curS = this.scrollTop; if( this.scrollCalc === undefined ) this.scrollCalc = 0; var e0 = e.originalEvent, delta = e0.wheelDelta || -e0.detail; if( delta !== 0 ){ //this.scrollTop += ( delta <= 0 ? 1 : -1 ) * e.data.st; this.scrollTop -= delta; if( curS == this.scrollTop ){ var pop = this.parentNode.parentNode, top = pop.offsetTop - 80, bottom = pop.offsetTop + ( pop.offsetHeight - window.innerHeight ) + 100; if( delta < 0 ){ //scroll down if( kc.body.scrollTop - delta < bottom ) kc.body.scrollTop -= delta; else kc.body.scrollTop = bottom; if( kc.html.scrollTop - delta < bottom ) kc.html.scrollTop -= delta; else kc.html.scrollTop = bottom; }else{ if( kc.body.scrollTop - delta > top ) kc.body.scrollTop -= delta; else kc.body.scrollTop = top; if( kc.html.scrollTop - delta > top ) kc.html.scrollTop -= delta; else kc.html.scrollTop = top; } } } if( e.target !== null && ( e.target.tagName === 'OPTION' || e.target.tagName === 'SELECT' || e.target.className.indexOf('kc-free-scroll') > -1 ) ){ return true; } e.preventDefault(); e.stopPropagation(); return false; } }); } }, scroll : function( st ){ if( typeof st == 'object' ){ if( st.top !== undefined ){ kc.body.scrollTop = st.top; kc.html.scrollTop = st.top; } if( st.left !== undefined ){ kc.body.scrollLeft = st.left; kc.html.scrollLeft = st.left; } }else{ return { top: (kc.body.scrollTop?kc.body.scrollTop:kc.html.scrollTop), left: (kc.body.scrollLeft?kc.body.scrollLeft:kc.html.scrollLeft)}; } }, verify_tmpl : function( refresh = false ){ var cfg = $().extend( kc.cfg, kc.backbone.stack.get('KC_Configs') ); if( cfg.version != kc_version || refresh || localStorage['KC_TMPL_CACHE'] === undefined || localStorage['KC_TMPL_CACHE'] === ''){ if( !refresh) kc.msg( 'KingComposer is initializing', 'loading' ); $.post( kc_ajax_url, { 'action': 'kc_tmpl_storage', 'security': kc_ajax_nonce }, function (result) { $('#kc-preload').remove(); if( result != -1 && result != 0 ){ kc.ui.upgrade_notice( parseFloat(cfg.version) ); cfg.version = kc_version; localStorage.clear(); kc.backbone.stack.set( 'KC_Configs', cfg ); kc.backbone.stack.set( 'KC_TMPL_CACHE', result ); kc.init(); } } ); }else if( !kc.ui.check_tmpl() ){ return false; } else return true; }, get_tmpl_cache : function( tmpl_id ){ if( localStorage['KC_TMPL_CACHE'] !== undefined && localStorage['KC_TMPL_CACHE'].indexOf('id="'+tmpl_id+'"') > -1 ){ var s1 = localStorage['KC_TMPL_CACHE'].indexOf('>', localStorage['KC_TMPL_CACHE'].indexOf('id="'+tmpl_id+'"') )+1, s2 = localStorage['KC_TMPL_CACHE'].indexOf('</script>', s1), string = localStorage['KC_TMPL_CACHE'].substring( s1, s2 ), options = { evaluate: /<#([\s\S]+?)#>/g, interpolate: /\{\{\{([\s\S]+?)\}\}\}/g, escape: /\{\{([^\}]+?)\}\}(?!\})/g, variable: 'data' }; return _.template( string, null, options ); } return 'exit'; }, check_tmpl : function (call_init){ var tmpl = localStorage.getItem('KC_TMPL_CACHE'); if (tmpl === undefined || tmpl === '' || tmpl === null || tmpl.indexOf('<!----END_KC_TMPL---->') === -1) { kc.msg( 'KingComposer is refreshing', 'loading' ); kc.ui.verify_tmpl( true ); return false; } return true; }, uncache : function(){ localStorage.removeItem('KC_TMPL_CACHE'); window.location.href = window.location.href; return 'Successfull, reloading now...'; }, kc_box : { sort : function(){ kc.ui.sortable({ items : '.kc-box:not(.kc-box-column)', connecting : true, handle : '>ul.mb-header', helper : ['kc-ui-handle-image', 25, 25 ], detectEdge: 30 }); if( window.chrome === undefined ){ $('.kc-box-body .kc-box-inner-text').off('mousedown').on( 'mousedown', function( e ){ var el = this; while( el.parentNode ){ el = el.parentNode; if( el.draggable === true ){ el.draggable = false; el.templDraggable = true; } } }).off('blur').on( 'blur', function( e ){ var el = this; while( el.parentNode ){ el = el.parentNode; if( el.templDraggable === true ){ el.draggable = true; el.templDraggable = null; } } }); } }, renderBack : function( pop ){ var exp = JSON.stringify( kc.ui.kc_box.accessNodesVisual( pop.find('.kc-box-render') ) ).toString(), rex = new RegExp( kc_site_url, "g"); exp = exp.replace( rex, '%SITE_URL%' ); pop.find('.kc-param.kc-box-area').val( kc.tools.base64.encode( exp ) ); }, wrapFreeText : function( el ){ var nodes = el.childNodes, text, n, ind; if( nodes === undefined ) return null; for( var i=0; i < nodes.length; i++ ){ /* node text has type = 3 */ n = nodes[i]; if( nodes[i].nodeType == 3 ){ if( n.parentNode.tagName != 'TEXT' && n.textContent.trim() !== '' ){ text = document.createElement('text'); if( n.nextElementSibling !== null ) $( n.nextElementSibling ).before( text ); else if( n.previousElementSibling !== null ) $( n.previousElementSibling ).after( text ); else n.parentNode.appendChild( text ); text.appendChild(n); } }else{ if( ['input', 'br', 'select', 'textarea', 'button'].indexOf( nodes[i].tagName.toLowerCase() ) > -1 ){ ind = false; if( n.previousElementSibling !== null ){ if( n.previousElementSibling.tagName == 'TEXT' ){ $( n.previousElementSibling ).append( nodes[i] ); ind = true; } }if( n.nextElementSibling !== null ){ if( n.nextElementSibling.tagName == 'TEXT' ){ $( n.nextElementSibling ).prepend( nodes[i] ); ind = true; } } if( ind === false ){ text = document.createElement('text'); $( nodes[i] ).after(text); text.appendChild( nodes[i] ); } }else kc.ui.kc_box.wrapFreeText( nodes[i] ); } } return el; }, accessNodes : function( node, thru ){ if( node === null ) return []; var nodes = node.childNodes, nod, ncl, atts; if( thru === undefined ) thru = []; if( nodes === null ) return thru; for( var i=0; i < nodes.length; i++ ){ /* node element has type = 1 */ if( nodes[i].nodeType == 1 ){ atts = {}; for( var j=0; j< nodes[i].attributes.length; j++ ){ atts[ nodes[i].attributes[j].name ] = nodes[i].attributes[j].value; } nod = { tag : nodes[i].tagName.toLowerCase(), attributes : atts, }; if( nod.tag != 'text' ) nod.children = kc.ui.kc_box.accessNodes( nodes[i] ); ncl = ( typeof( nodes[i].className ) != 'undefined' ) ? nodes[i].className : ''; if( nod.tag == 'text' ) nod.content = nodes[i].innerHTML; else if( nod.tag == 'img' ) nod.tag = 'image'; else if( ncl.indexOf('fa-') > -1 || ncl.indexOf('et-') > -1 || ncl.indexOf('sl-') > -1 ) nod.tag = 'icon'; else if( nod.tag == 'column' ){ if( ncl === '' ) ncl = 'one-one'; ['one-one','one-second','one-third','two-third'].forEach(function(c){ if( ncl.indexOf( c ) > -1 ){ ncl = ncl.replace( c, '').trim(); nod.attributes.cols = c; nod.attributes.class = ncl; } }); } thru[ thru.length ] = nod; } } return thru; }, accessNodesVisual : function( wrp ){ var nodes = wrp.find('>.kc-box:not(.mb-helper)'), nod, thru = []; if( nodes.length === 0 ) return thru; nodes.each(function(){ nod = { tag : $(this).data('tag'), attributes : $(this).data('attributes'), children : kc.ui.kc_box.accessNodesVisual( $(this).find('>.kc-box-body') ) }; if( nod.attributes === undefined ) nod.attributes = {}; if( nod.tag == 'text' ) nod.content = $(this).find('.kc-box-inner-text').html(); else if( nod.tag == 'icon' ) nod.attributes.class = $(this).find('>.kc-box-body i').attr('class'); else if( nod.tag == 'image' ) nod.attributes.src = $(this).find('>.kc-box-body img').attr('src'); thru[ thru.length ] = nod; }); return thru; }, exportCode : function( visual, cols ){ var thru = ''; if( cols === undefined ) cols = ''; var incol = cols+' ', count = 0; visual.forEach(function(n){ if( n.tag == 'text' ){ if( n.content !== '' ) thru += cols+'<text>'+n.content.trim().replace(/\<text\>/g,'').replace(/\<\/text\>/g,'')+'</text>'; }else{ if( n.attributes.cols == 'one-one' ){ if( n.children.length > 0 ){ thru += kc.ui.kc_box.exportCode( n.children, cols ); } }else{ if( n.attributes.cols !== undefined ){ n.attributes.class = ( n.attributes.class !== undefined ) ? (n.attributes.class+' '+n.attributes.cols) : n.attributes.cols; delete n.attributes.cols; } thru += cols+'<'+n.tag; for( var i in n.attributes ) thru += ' '+i+'="'+kc.tools.esc(n.attributes[i])+'"'; thru += '>'; if( n.children.length > 0 ){ thru += "\n"+kc.ui.kc_box.exportCode( n.children, incol )+"\n"+cols; } thru += '</'+n.tag+'>'; } } if( count++ < visual.length-1 ) thru += "\n"; }); return thru; }, setColumns : function( e ){ var el = kc.get.popup( this ).data('el').closest('.kc-box'), wrp = el.find('>.kc-box-body'), cols = $(this).data('cols').split(' '), objCols = wrp.find('>.kc-box.kc-box-column'), elms, colElm, i, j, atts; for( i=0; i<cols.length; i++ ){ if( objCols.get(i) ){ objCols .eq(i) .attr({ 'class' : 'kc-box kc-box-column kc-column-'+cols[i] }) .data('attributes').cols = cols[i]; }else{ wrp.append( kc.template( 'box-design', [{ tag: 'column', attributes: { cols: cols[i] } }] ) ); } } if( i<objCols.length ){ for( j = i; j < objCols.length; j++ ){ objCols.eq(j).find('>.kc-box-body>.kc-box:not(.mb-helper)').each(function(){ objCols.eq(i-1).append(this); }); objCols.eq(j).remove(); } } kc.get.popup( this, 'close' ).trigger('click'); kc.ui.kc_box.sort(); }, actions : function( el, e ){ var wrp = el.closest('.kc-param-row').find('.kc-box-render'), pos, btns, pop, cols, atts; switch( el.data('action') ){ case 'add' : $('.kc-box-subPop').remove(); el.closest('.mb-header').addClass('editting'); pos = el.data('pos'); btns = '<div class="kc-nodes">'; pop = kc.tools.popup.render( el.get(0), { title: 'Select Node Tag', class: 'no-footer kc-nodes kc-box-subPop', scrollBack: true, keepCurrentPopups: true, drag: false, }); pop.data({ pos: pos, el: el, cancel: function( pop ){ pop.data('el').closest('.mb-header').removeClass('editting'); } }); ['text','image','icon', 'div','span','a','ul','ol','li','p','h1','h2','h3','h4','h5','h6'] .forEach(function(n){ btns += '<button class="button">'+n+'</button> '; }); btns += '</div>'; btns = $(btns); pop.find('.m-p-body').append( btns ); btns.find('button').on('click', function(e){ var html = kc.template( 'box-design', [{ tag: this.innerHTML }] ), pop = kc.get.popup( this ), pos = pop.data('pos'), el = pop.data('el'); if( pos == 'top' ) wrp.prepend( html ); else if( pos == 'bottom' ) wrp.append( html ); else if( pos == 'inner' ){ el.closest('.kc-box:not(.mb-helper)').find('>.kc-box-body').append( html ); } kc.ui.kc_box.sort(); kc.get.popup( this, 'close' ).trigger('click'); e.preventDefault(); return false; }); e.preventDefault(); break; case 'columns' : $('.kc-box-subPop').remove(); el.closest('.mb-header').addClass('editting'); btns = '<div class="kc-nodes">'; pop = kc.tools.popup.render( el.get(0), { title: 'Select Layout - Columns', class: 'no-footer kc-nodes kc-columns kc-box-subPop', scrollBack: true, keepCurrentPopups: true, drag: false, }); pop.data({ el: el, cancel: function( pop ){ pop.data('el').closest('.mb-header').removeClass('editting'); } }); [['one-one','1/1'], ['one-second one-second','1/2 + 1/2'], ['one-third two-third','1/3 + 2/3'], ['two-third one-third','2/3 + 1/3'], ['one-third one-third one-third','1/3 + 1/3 + 1/3']].forEach(function(n){ btns += '<button data-cols="'+n[0]+'" class="button '+n[0].replace(' ','')+ '"><span>'+n[1]+'</span></button> '; }); btns += '</div>'; btns = $(btns); pop.find('.m-p-body').append( btns ); btns.find('button').on('click', kc.ui.kc_box.setColumns ); e.preventDefault(); break; case 'remove' : if( el.closest('.kc-box').data('tag') == 'column' ){ if( el.closest('.kc-box').find('>.kc-box-body>.kc-box:not(.mb-helper)').length > 0 ){ if( !confirm( kc.__.i23 ) ) return; } cols = el.closest('.kc-box').parent().get(0); el.closest('.kc-box').remove(); var _cols = $(cols).find('>.kc-box.kc-box-column'), _clas = 'one-one'; if( _cols.length == 2 ) _clas = 'one-second'; _cols.each(function(){ $(this).attr({ 'class' : 'kc-box kc-box-column kc-column-'+_clas }) .data('attributes').cols = _clas; }); return; } var trash = el.closest('.kc-param-row').find('.kc-box-trash'), item = el.closest('.kc-box').get(0); pos = {}; pos.parent = item.parentNode; if( item.nextElementSibling ) pos.next = item.nextElementSibling; if( item.previousElementSibling ) pos.prev = item.previousElementSibling; $(item).data({ pos : pos }); trash.append( item ); trash.find('a.button') .html('<i class="sl-action-undo"></i> '+kc.__.i24+'('+trash.find('>.kc-box').length+')') .removeClass('forceHide'); break; case 'undo' : trash = el.closest('.kc-param-row').find('.kc-box-trash'); var last = trash.find('>.kc-box').last().get(0); pos = $(last).data('pos'); if( !last ) return; if( pos.next !== undefined ) $(pos.next).before( last ); else if( pos.prev !== undefined ) $(pos.prev).after( last ); else if( pos.parent !== undefined ) $(pos.parent).append( last ); var nu = trash.find('>.kc-box').length; trash.find('a.button') .html('<i class="sl-action-undo"></i> '+kc.__.i24+'('+nu+')'); if( nu === 0 ) trash.find('a.button').addClass('forceHide'); e.preventDefault(); break; case 'double' : var clone = el.closest('.kc-box').clone(true); clone.attr({draggable:'',dropable:''}); clone.find('.kc-box').attr({draggable:'',dropable:''}); el.closest('.kc-box').after( clone ); kc.ui.kc_box.sort(); break; case 'settings' : $('.kc-box-subPop').remove(); el.closest('.mb-header').addClass('editting'); atts = el.closest('.kc-box').data('attributes'); pop = kc.tools.popup.render( el.get(0), { title: 'Node Settings', class: 'kc-box-settings-popup kc-box-subPop', scrollBack: true, keepCurrentPopups: true, drag: false, }); pop.data({ model : null, el: el, cancel : function( pop ){ pop.data('el').closest('.mb-header').removeClass('editting'); }, callback : function( pop ){ pop.data('el').closest('.mb-header').removeClass('editting'); var el = pop.data('el').closest('.kc-box'), attrs = {}; pop.find('.fields-edit-form .kc-param').each(function(){ if( this.value !== '' ) attrs[ this.name ] = kc.tools.esc( this.value ); }); if( pop.data('css') !== undefined && pop.data('css') !== '' ) attrs.style = pop.data('css'); if( el.data('attributes').cols !== undefined ) attrs.cols = el.data('attributes').cols; el.data({ attributes : attrs }); ['id','class','href'].forEach(function(n){ if( attrs[n] !== undefined ){ var elm = el.find('>.mb-header>.mb-'+n), str = attrs[n].substr(0,30)+'..'; if( elm.length > 0 ) elm.find('span').html( str ).attr({title:attrs[n]}); else el.find('>.mb-header>.mb-funcs') .before('<li class="mb-'+n+'">'+n+ ': <span title="'+kc.tools.esc(attrs[n])+'">'+str+'</span></li>'); } }); }, css : ( typeof( atts.style ) != 'undefined' ) ? atts.style : '' }); wrp = $('<div class="fields-edit-form kc-pop-tab form-active"></div>'); var form = $('<form class="attrs-edit"><input type="submit" class="forceHide" /></form>'), field = function( n, v ){ var field = $('<div class="kc-param-row"><div class="m-p-r-label"><label>'+ kc.tools.esc(n)+':</label></div><div class="m-p-r-content"><input name="'+ kc.tools.esc(n)+'" class="kc-param" value="'+ v+'" style="width:90%;" type="text">'+ ' <a href="#"><i class="fa-times"></i></a></div></div>'); field.find('a').on('click', function(e){ $(this).closest('.kc-param-row').remove(); e.preventDefault(); }); return field; }, addInput = function(){ var add = $('<div style="padding: 10px 0 10px" class="kc-param-row align-right"><div class="m-p-r-label"></div><form class="m-p-r-content">'+ '<input style="height: 34px;width: 52.5%;" type="text" placeholder="'+kc.__.i25+'" /> '+ '<button style="margin-right: 33px;height: 34px;" class="button button-primary">'+kc.__.i26+'</button>'+ '<input type="submit" class="forceHide" /></form></div>'); add.find('button').on('click', function(e){ var input = $(this.parentNode).find('input'), val = input.val().replace(/[^a-z-]/g,''); input.val(''); if( val === '' || $(this).closest('.m-p-body').find('input[name='+val+']').length > 0 || val == 'style' ){ $(this).stop() .animate({marginRight:50},100) .animate({marginRight:28},100) .animate({marginRight:38},80) .animate({marginRight:30},80) .animate({marginRight:33},50); return false; } $(this).closest('.kc-param-row').before( field(val,'') ); e.preventDefault(); return false; }); add.find('form').on('submit',function(){ $(this).find('button').trigger('click'); return false; }); return add; }; form.append( field( 'id', ( typeof( atts['id'] ) != 'undefined' ) ? atts['id'] : '' ) ); form.append( field( 'class', ( typeof( atts['class'] ) != 'undefined' ) ? atts['class'] : '' ) ); if( el.closest('.kc-box').get(0).tagName == 'A' ) form.append( field( 'href', ( typeof( atts['href'] ) != 'undefined' ) ? atts['href'] : '' ) ); for( var i in atts ){ if( i != 'id' && i != 'class' && i != 'style' && i != 'cols' ) form.append( field( i, atts[i] ) ); } wrp.append( form ); wrp.append( addInput() ); form.on( 'submit', function(e) { kc.get.popup( this, 'save' ).trigger('click'); e.preventDefault(); return false; }); pop.find('.m-p-body').append(wrp); break; case 'editor' : $('.kc-box-subPop').remove(); el.closest('.mb-header').addClass('editting'); atts = el.closest('.kc-box').data('attributes'); pop = kc.tools.popup.render( el.get(0), { title: 'Node Settings', class: 'kc-box-editor-popup kc-box-subPop', scrollBack: true, keepCurrentPopups: true, drag: false, width: 750 }); pop.data({ model : null, el: el, cancel : function( pop ){ pop.data('el').closest('.mb-header').removeClass('editting'); }, callback : function( pop ){ var txt = pop.find('textarea.kc-param'), content = txt.val().toString().trim(); if( pop.find('.wp-editor-wrap').hasClass('tmce-active') ) content = tinyMCE.get(txt.attr('id')).getContent(); var inner = pop.data('el').closest('.kc-box').find('.kc-box-inner-text'); inner.html( content ); } }); atts = { value : el.closest('.kc-box').find('.kc-box-inner-text').html(), options : [], name : 'content', type : 'textarea_html' }; field = kc.template( 'field', { label: '', content: kc.template( 'field-type-textarea_html', atts ), des: '', name: 'textarea_html', base: 'content' }); pop.find('.m-p-body').append(field); if( typeof atts.callback == 'function' ){ /* callback from field-type template */ setTimeout( atts.callback, 1, pop.find('.m-p-body'), $ ); } break; case 'toggle' : wrp = el.closest('.kc-box'); if( wrp.hasClass('kc-box-toggled') ) wrp.removeClass('kc-box-toggled'); else wrp.addClass('kc-box-toggled'); break; case 'html-code' : $('.kc-box-html-code').remove(); atts = { title: kc.__.i29, width: 700, class: 'kc-box-html-code', keepCurrentPopups: true, drag : false }; pop = kc.tools.popup.render( el.get(0), atts ); pop.data({ target: el, scrolltop: $(window).scrollTop() }); /*Render from Visual*/ var code = kc.ui.kc_box.exportCode( kc.ui.kc_box.accessNodesVisual( kc.get.popup(el).find('.kc-box-render') ) ); pop.find('.m-p-body').html('<textarea>'+code+'</textarea>'); pop.data({ popParent : kc.get.popup( el ), callback : function( pop ){ var code = '<div>'+pop.find('.m-p-body textarea').val().trim()+'</div>', visual = kc.ui.kc_box.wrapFreeText( $( code ).get(0) ), items = kc.ui.kc_box.accessNodes( visual ), popParent = pop.data('popParent'); popParent.find('.kc-box-render').html( kc.template( 'box-design', items ) ); kc.ui.kc_box.sort(); /* Clear Trash */ popParent.find('.kc-box-trash .kc-box').remove(); popParent.find('.kc-box-trash>a.button').addClass('forceHide'); } }); break; case 'css-code' : $('.kc-box-html-code').remove(); atts = { title: kc.__.i30, width: 700, class: 'kc-box-html-code', keepCurrentPopups: true, drag : false }; var popParent = kc.get.popup( el ); pop = kc.tools.popup.render( el.get(0), atts ); pop.data({ target: el, scrolltop: $(window).scrollTop() }); var css = popParent.find('.field-hidden.field-base-css_code input').val(), css_code = ''; pop.find('.m-p-body').html('<p></p><textarea>'+kc.tools.decode_css( css )+'</textarea><i class="ntips">'+kc.__.i31+'</i>'); var btn = $('<button class="button button-larger"><i class="sl-energy"></i> '+kc.__.i32+'</button>'); pop.find('.m-p-body').prepend( btn ); btn.on( 'click', function(){ var txta = $(this).parent().find('textarea'); txta.val( kc.tools.decode_css( txta.val() ) ); }); pop.data({ popParent : kc.get.popup( el ), callback : function( pop ){ var css = kc.tools.encode_css( pop.find('textarea').val() ); pop.data('popParent').find('.field-hidden.field-base-css_code input').val( css ); } }); break; case 'icon-picker' : $('.kc-icons-picker-popup,.kc-box-subPop').remove(); var listObj = $( '<div class="icons-list noneuser">'+kc.tools.get_icons()+'</div>' ); atts = { title: 'Select Icons', width: 600, class: 'no-footer kc-icons-picker-popup kc-box-subPop', keepCurrentPopups: true }; pop = kc.tools.popup.render( el.get(0), atts ); pop.data({ target: el, scrolltop: jQuery(window).scrollTop() }); var search = $( '<input type="search" class="kc-components-search" placeholder="Search by Name" />' ); pop.find('.m-p-header').append(search); search.after('<i class="sl-magnifier"></i>'); search.data({ list : listObj }); search.on( 'keyup', listObj, function( e ){ clearTimeout( this.timer ); this.timer = setTimeout( function( el, list ){ var sr; if( list.find('.seach-results').length === 0 ){ sr = $('<div class="seach-results"></div>'); list.prepend( sr ); }else sr = list.find('.seach-results'); var found = ['<span class="label">'+kc.__.i33+'</span>']; list.find('>i').each(function(){ if( this.className.indexOf( el.value.trim() ) > -1 && found.length < 14 && $.inArray( this.className, found ) )found.push( '<span data-icon="'+this.className+'"><i class="'+this.className+'"></i>'+this.className+'</span>' ); }); if( found.length > 1 ){ sr.html( found.join('') ); sr.find('span').on('click', function(){ var tar = kc.get.popup(this).data('target'); tar.find('i').attr({ class : $(this).data('icon') }); kc.get.popup(this,'close').trigger('click'); }); } else sr.html( '<span class="label">'+kc.__.i34+'</span>' ); }, 150, this, e.data ); }); listObj.find('i').on('click', function(){ var tar = kc.get.popup(this).data('target'); tar.find('i').attr({class:this.className}); kc.get.popup(this,'close').trigger('click'); }); setTimeout(function( el, list ){ el.append( list ); }, 10, pop.find('.m-p-body'), listObj ); break; case 'select-image' : var media = kc.tools.media.open({ data : { callback : function( atts ){ var url = atts.url; if( atts.size !== undefined && atts.size !== null && atts.sizes[atts.size] !== undefined ){ url = atts.sizes[atts.size].url; }else if( typeof atts.sizes.medium == 'object' ){ url = atts.sizes.medium.url; } if( url !== undefined && url !== '' ){ el.attr({ src : url }); } }, atts : {frame:'post'} } } ); media.$el.addClass('kc-box-media-modal'); break; } if( el.hasClass('kc-box-toggled') && el.hasClass('kc-box') ) el.removeClass('kc-box-toggled'); e.preventDefault(); return false; } }, elms : function( e, el ){ var type = $( el ).data('type'), cfg = $( el ).data('cfg'), value = ''; if( e.target.tagName == 'LI' && type == 'radio' ){ var wrp = $(e.target).parent(); wrp.find('.active').removeClass('active'); wrp.find('input[type="radio"]').attr({checked:false}); $(e.target).addClass('active'); value = $(e.target).find('input[type="radio"]').attr({checked:true}).val(); } if( type == 'select' ){ value = el.value; } if( value !== '' && cfg !== '' && cfg !== undefined ){ kc.cfg[ cfg ] = value; kc.backbone.stack.set( 'KC_Configs', kc.cfg ); } }, prepare : function( name, data, content ){ var maps = kc.maps[name]!==undefined?kc.maps[name]:{}, map_params = kc.params.merge( name ), full = '['+name; if( content === undefined ) { if (name == 'kc_row') content = '[kc_column width="100%"][/kc_column]'; else if (name == 'kc_row_inner') content = '[kc_column_inner width="100%"][/kc_column_inner]'; else content = ''; } if( kc.maps[name] !== undefined && kc.maps[name].content !== undefined && content === '' ) content = kc.maps[name].content; for( var i in map_params ){ if( map_params[i].type == 'random' ){ full += ' '+map_params[i].name+'="'+parseInt(Math.random()*1000000)+'"'; }else if( !_.isUndefined( map_params[i].value ) ){ if( map_params[i].name == 'content' && maps.is_container === true ){ content = map_params[i].value; }else{ full += ' '+map_params[i].name+'="'+map_params[i].value+'"'; } } } if( name == 'kc_wp_widget' ) full += ' data="'+data+'"'; full += ']'; if( maps.is_container === true ){ full += content+'[/'+name+']'; } delete map_params; return full; }, publishAction : function( e ){ if( e.data ) { var rect = e.data.getBoundingClientRect(); var sctop = $( window ).scrollTop(); if( e.data.sctop === undefined ) e.data.sctop = rect.top + sctop; if( e.data.sctop < sctop + 35 ) $( e.data ).addClass('float_publish_action'); else $( e.data ).removeClass('float_publish_action'); } }, search_elements : function(e){ var key = this.value.toLowerCase() if( this.pop === undefined ) this.pop = kc.get.popup( this ) !== null ? kc.get.popup( this ) : $(this).closest('#kc-elements-list'); if( this.items === undefined ) this.items = this.pop.find('.kc-components .kc-components-list-main li'); this.pop.find('#kc-clipboard,.kc-wp-widgets-pop').hide(); this.pop.find('.kc-components .kc-components-list-main').show(); this.pop.find('.kc-components .kc-components-categories .active').removeClass('active'); this.items.css({display: 'none'}); this.items.each(function(){ var find = $(this).find('strong').html().toLowerCase(); if( find.indexOf( key ) > -1 || key === '' ) this.style.display = 'block'; }); }, callbacks : { upload_image : function( el, $ ){ el.find('.media').on( 'click', { callback: function( atts ){ var wrp = $(this.el).closest('.kc-attach-field-wrp'), url = atts.url; wrp.find('input.kc-param').val(atts.id).change(); if( typeof atts.sizes.medium == 'object' ) var url = atts.sizes.medium.url; if( !wrp.find('img').get(0) ){ wrp.prepend('<div class="img-wrp"><img src="'+url+'" alt="" /><i title="'+kc.__.i50+'" class="sl-close"></i></div>'); wrp.find('img').on( 'click', el, function( e ){ el.find('.media').trigger('click'); }); wrp.find('div.img-wrp .sl-close').on( 'click', el, function( e ){ e.data.find('input.kc-param').val('').change(); $(this).closest('div.img-wrp').remove(); }); }else wrp.find('img').attr({src : url}); }, atts : { frame: 'select' } }, kc.tools.media.open ); el.find('div.img-wrp .sl-close').on( 'click', el, function( e ){ e.data.find('input.kc-param').val('').change(); $(this).closest('div.img-wrp').remove(); }); el.find('div.img-wrp img').on( 'click', el, function( e ){ el.find('.media').trigger('click'); }); }, upload_image_url : function( el, $ ){ el.find('.media').on( 'click', { callback : function( atts ){ var wrp = $(this.el).closest('.kc-attach-field-wrp'), url = atts.url; if( atts.size != undefined && atts.size != null && atts.sizes[atts.size] != undefined ){ var url = atts.sizes[atts.size].url; }else if( typeof atts.sizes.medium == 'object' ){ var url = atts.sizes.medium.url; } if( url != undefined && url != '' ){ wrp.find('input[data-kc-param]').val(url).change(); } if( !wrp.find('img').get(0) ){ wrp.prepend('<div class="img-wrp"><img src="'+url+'" alt="" /><i title="'+kc.__.i50+'" class="sl-close"></i><div class="img-sizes"></div></div>'); el.find('div.img-wrp img').on( 'click', el, function( e ){ el.find('.media').trigger('click'); }); el.find('div.img-wrp .sl-close').on( 'click', el, function( e ){ $(this).closest('div.img-wrp').remove(); e.data.find('input[data-kc-param]').val('').change(); }); }else{ wrp.find('img').attr({src : url}); wrp.find('.img-sizes').html(''); } var btn, wrpsizes = wrp.find('.img-sizes'); for( var si in atts.sizes ){ btn = $('<button data-url="'+atts.sizes[si].url+ '" class="button">'+atts.sizes[si].width+'x'+ atts.sizes[si].height+'</button>' ); if( atts.size != undefined && atts.size ){ if( atts.size == si ) btn.addClass('button-primary'); }else if( si == 'medium' ) btn.addClass('button-primary'); btn.on( 'click', function(e){ var wrp = $(this).closest('.kc-attach-field-wrp'), url = $(this).data('url'); $(this).parent().find('button').removeClass('button-primary'); $(this).addClass('button-primary'); wrp.find('img').attr({ src : url }); wrp.find('input[data-kc-param]').val( url ).change(); e.preventDefault(); return false; }); wrpsizes.append( btn ); } }, atts : {frame:'post'} }, kc.tools.media.open ); el.find('div.img-wrp .sl-close').on( 'click', el, function( e ){ $(this).closest('div.img-wrp').remove(); e.data.find('input[data-kc-param]').val('').change(); }); el.find('div.img-wrp img').on( 'click', el, function( e ){ el.find('.media').trigger('click'); }); }, upload_images : function( el ){ el.find('.media').on( 'click', function( atts ){ var wrp = jQuery(this.els).closest('.kc-attach-field-wrp'), url = atts.url; //wrp.find('input.kc-param').val(atts.id).change(); if( typeof atts.sizes.thumbnail == 'object' ) var url = atts.sizes.thumbnail.url; wrp.prepend('<div data-id="'+atts.id+'" class="img-wrp"><img title="Drag image to sort" src="'+url+'" alt="" /><i title="'+kc.__.i50+'" class="sl-close"></i></div>'); helper( wrp ); }, kc.tools.media.opens ); function helper( el ){ kc.ui.sortable({ items : 'div.kc-attach-field-wrp>div.img-wrp', helper : ['kc-ui-handle-image', 25, 25 ], connecting : false, vertical : false, end : function( e, el ){ refresh( jQuery(el).closest('.kc-attach-field-wrp') ); } }); el.find('div.img-wrp i.sl-close').off('click').on( 'click', el, function( e ){ jQuery(this).closest('div.img-wrp').remove(); refresh( e.data ); }); refresh( el ); } function refresh( el ){ var val = []; el.find('div.img-wrp').each(function(){ val[ val.length ] = jQuery(this).data('id'); }); if( val.length <= 4 ){ el.removeClass('img-wrp-medium').removeClass('img-wrp-large'); }else if( val.length > 4 && val.length < 9 ){ el.addClass('img-wrp-medium').removeClass('img-wrp-large'); }else if( val.length >= 9 ){ el.removeClass('img-wrp-medium').addClass('img-wrp-large'); } el.find('input.kc-param').val( val.join(',') ).change(); el.find('div.img-wrp img').on( 'click', el, function( e ){ el.find('.media').trigger('click'); }); } helper( el.find('.kc-attach-field-wrp') ); }, select_group : function( el, $ ){ el.find('button').on( 'click', el, function(e){ e.data.find('input').val(this.getAttribute('data-value')).trigger('change'); e.data.find('button.active').removeClass('active'); $(this).addClass('active'); e.preventDefault(); return false; }); }, number : function( el, $ ){ el.find('input[type=number]').on( 'mousedown', function(e){ if( e.which !== undefined && e.which !== 1 ) return false; $(document).on( 'mouseup', function(){ $(document).off( 'mousemove' ).off('mouseup'); $('body').removeClass('noneuser').css({cursor:''}); }); $(document).on( 'mousemove', { el: this, cur: parseInt(this.value!==''?this.value:0), top: e.clientY }, function(e){ var offset = Math.round((e.clientY-e.data.top)/2); e.data.el.value = (e.data.cur-offset); $(e.data.el).trigger('change'); }); $('body').css({cursor:'ns-resize'}); $( window ).off('mouseup').on('mouseup', function(){ $(document).off('mousemove'); $(window).off('mouseup'); $('html,body').removeClass('kc_dragging noneuser'); }); }).on('change', function(){ var unit = $(this).parent().find('li.active').html(), val = this.value; if( val !== '' ) val += unit; $(this).parent().find('input[type=hidden]').val( val ).trigger('change'); }); el.find('ul li').on('click', function(){ $(this).parent().find('.active').removeClass('active'); $(this).addClass('active'); var inp = $(this).closest('.m-p-r-content').find('input[type=hidden]'), val = inp.val().replace(/[^0-9\.]/g,''); if( val !== '' ) val += this.innerHTML; inp.val( val ).trigger('change'); }); }, number_slider : function( el, $, data ){ var el_slider = el.find('.kc_percent_slider'), values = data.value.toString().split('|'), options = { range : (typeof data.options['range'] == 'undefined' )? false: data.options['range'], unit : (typeof data.options['unit'] == 'undefined' )? '': data.options['unit'], ratio : (typeof data.options['ratio'] == 'undefined' )? 1: parseFloat(data.options['ratio']), min : (typeof data.options['min'] == 'undefined' )? 0: parseFloat(data.options['min']), max : (typeof data.options['max'] == 'undefined' )? 100: parseFloat(data.options['max']), enabled : (typeof data.options['max'] == 'enabled' )? true: data.options['enabled'], step : (typeof data.options['step'] == 'undefined' )? 1: parseFloat(data.options['step']) }, kc_number_slider = function( el, set_val ){ var op = el.data('options'); op.onchange = function( left, right ){ if( op.range === true ) el.next('input') .val((kc.tools.nfloat(left*op.ratio)+op.unit)+'|'+(kc.tools.nfloat(right*op.ratio)+op.unit)) .trigger('change', 'globe'); else el.next('input') .val(kc.tools.nfloat(left*op.ratio)+op.unit) .trigger('change', 'globe'); el.find('.fscaret').text(''); } if( isNaN( set_val ) ){ op.value = parseFloat(op['max']); }else{ if( set_val.length === 1 ) op.value = parseFloat(set_val[0])/op.ratio; else op.value = [parseFloat(set_val[0])/op.ratio, parseFloat(set_val[1])/op.ratio]; } el.off('mouseup').on('mouseup',function(){ $(this).next('input').change(); }).freshslider( op ); }; el_slider.data({ options: options }); for( var i in values ){ values[i] = parseFloat( values[i] ); } kc_number_slider( el_slider, values ); el_slider.next('input').on('change', { el : el , el_slider: el_slider, data : data }, function(e, data){ // This is not native event if( data !== undefined && data == 'globe' ) return; var _value = $(this).val(), op = e.data.el_slider.data('options'); if(/^\d+$/.test(_value) && _value !== ''){ if(this.value!==_value) $(this).val( parseInt(_value) ); if( _value/op.ratio > op['max'] ) _value = op['max']*op.ratio; _value = _value.toString().split('|'); for( var i in _value ){ _value[i] = parseInt( _value[i] )/op.ratio; } kc_number_slider( e.data.el_slider, _value ); }else{ e.data.el_slider.next('input').val(''); } } ); el_slider.next('input').val(data.value).trigger('change', 'globe'); }, autocomplete : function(wrp, $, data) { function render( data, wrp ){ var out = '', post_type = 'any', category = '', category_name = '', numberposts = 120, taxonomy = '', multiple = true; if( data.options !== undefined ){ if( data.options.post_type !== undefined ) post_type = data.options.post_type; if( data.options.category !== undefined ) category = data.options.category; if( data.options.category_name !== undefined ) category_name = data.options.category_name; if( data.options.taxonomy !== undefined ) taxonomy = data.options.taxonomy; if( data.options.multiple !== undefined ) multiple = data.options.multiple; } if( data.value !== '' ){ var items = data.value.split(','), item, id; for( var i=0; i<items.length; i++ ){ item = items[i].split(':'); id = item[0]; if( item[1] !== undefined ) item = item[1]; else item = ''; out += '<li data-id="'+id+'"><span>'+kc.tools.esc_attr(item)+'</span><i class="sl-close kc-ac-remove" title="Remove item"></i></li>'; } } wrp.find('ul.autcp-items').html( out ); helper( wrp.find('.kc_autocomplete_wrp') ); wrp.find('.kc-autp-enter').on('focus',function(){ $(this.parentNode).find('.kc-autp-suggestion').show(); }).on('blur',function(){ setTimeout( function(el){ el.hide(); }, 200, $(this.parentNode).find('.kc-autp-suggestion') ); }).on('keyup',function(){ if( this.value === '' ) return; if( $(this.parentNode).find('.kc-autp-suggestion .fa-spinner').length == 0 ){ $(this.parentNode).find('.kc-autp-suggestion ul').prepend('<li class="sg-loading kc-free-scroll"><i class="fa fa-spinner fa-spin"></i> searching...</li>'); } clearTimeout( this.timer ); this.session = Math.random(); this.timer = setTimeout(function(el){ $.post( kc_ajax_url, { 'action': 'kc_suggestion', 'security': kc_ajax_nonce, 'post_type': post_type, 'category': category, 'category_name': category_name, 'numberposts': numberposts, 'taxonomy': taxonomy, 's': el.value, 'field_name': data.name, 'session': el.session, }, function (result) { $(el.parentNode).find('.sg-loading').remove(); if (el.session == result.__session) { var ex = [], out = [], item; for (var n in result) { if(n !== '__session') { if( ex.indexOf( n ) === -1 ){ ex.push(n); out.push('<li class="label kc-free-scroll">'+n+'</li>'); } for( var m in result[n] ){ item = result[n][m].split(':'); out.push('<li class="kc-free-scroll" \ data-multiple="'+multiple+'" \ data-value="'+kc.tools.esc_attr(result[n][m])+'">\ '+item[1]+'</li>'); } } } if (out.length === 0) out.push('<li>Nothing found</li>'); $(el.parentNode).find('.kc-autp-suggestion ul') .html (out.join('')).find('li') .on('click',function() { var value = $(this).data('value'); if (value === null || value === undefined) return; var wrp = $(this).closest('.kc_autocomplete_wrp').find('ul.autcp-items'); value = value.split(':'); if ($(this).data('multiple') === false) wrp.find('i.kc-ac-remove').trigger('click'); wrp.append('<li data-id="'+value[0]+'"><span>' +kc.tools.esc_attr(value[1])+'</span>\ <i class="sl-close kc-ac-remove" title="Remove item"></i>\ </li>'); helper ($(this).closest('.kc_autocomplete_wrp')); }); } } ); }, 250, this); }); } function helper( el ){ kc.ui.sortable({ items : 'div.kc_autocomplete_wrp>ul>li', connecting : false, vertical : false, end : function( e, el ){ refresh( $(el).closest('.kc_autocomplete_wrp') ); } }); el.find('i.kc-ac-remove').off('click').on( 'click', el, function( e ){ $(this).closest('li').remove(); refresh( e.data ); }); refresh( el ); } function refresh( el ){ var val = []; el.find('>ul.autcp-items>li').each(function(){ val[ val.length ] = $(this).data('id')+':'+$(this).find('>span').html(); }); el.find('input.kc-param').val( val.join(',') ); } render( data, wrp ); }, taxonomy : function( wrp, $, data ){ // Action for changing content type wrp.find('.kc-content-type').on( 'change', wrp, function( e ){ var type = this.value; e.data.find('.kc-taxonomies-select option').each(function(){ this.selected = false; if( $(this).hasClass( type ) ) this.style.display = ''; else this.style.display = 'none'; if( this.value == type ){ this.checked = true; e.data.find('input.kc-param').val( type ); } }); }); // Action for changing taxonomies wrp.find('.kc-taxonomies-select').on( 'change', wrp, function( e ){ var value = []; $(this).find('option:selected').each(function(){ value.push( this.value ); }); e.data.find('input.kc-param').val( value.join(',') ); }); // Action remove selection wrp.find('.unselected').on( 'click', wrp, function( e ){ e.data.find( '.kc-taxonomies-select option:selected' ).attr({ selected: false }); e.preventDefault(); e.data.find('input.kc-param').val( wrp.find('.kc-content-type').val() ); }); if( data.value === '' ) data.value = 'post'; var values = data.value.split(','), valuez = data.value+','; if( valuez.indexOf( ':' ) == -1 && values.length == 1 ){ var f = false; wrp.find('.kc-content-type option').each( function(){ if( $(this).val() == data.value ) f = true; }); if( !f ){ data.value = 'post:' + data.value; values = data.value.split(','); valuez = data.value+','; } } if( valuez.indexOf( ':' ) == -1 && values.length > 1 ){ valuez = []; for(var v in values){ valuez.push('post:'+values[v]); } values = valuez; valuez = valuez.join(',') + ','; } // Active selected taxonomies if( values.length > 0 ){ selected = values[0].split( ':' )[0]; // Active selected content type if( selected != '' ) wrp.find('.kc-content-type option[value='+selected+']').attr('selected','selected').trigger('change'); else wrp.find('.kc-content-type').trigger('change'); wrp.find('.kc-taxonomies-select option').each(function(){ if( valuez.indexOf( this.value+',' ) > -1 ){ this.selected = true; }else this.selected = false; }); } wrp.find('.kc-select-wrp') .append('<input class="kc-param" name="'+data.name+'" type="hidden" value="'+data.value+'" />'); }, corners : function( el, $ ){ var value_render = function( wrp ){ var val = [], empty = true; wrp.find('.kc-corners-wrp input[data-css-corners]').each(function(){ if( this.value !== '' ){ val.push(this.value); empty = false; }else val.push('inherit'); }); if( empty === true ) val = []; wrp.find('input[data-css-corners-value]').val( val.join(' ') ).change(); } el.find('input[data-css-corners]').on( 'keyup change', el, function( e ){ if(this.value.trim() == 'px'){ this.value = ''; } if( isNaN(this.value) === false ){ this.value += 'px'; this.setSelectionRange( (this.value.length-2), 1); } if(this.value.trim() == 'px'){ this.value = ''; } if(this.value.indexOf('%') > -1||this.value.indexOf('em') > -1){ this.value = this.value.replace(/\p\x/g, ''); } $(this).data({unit: this.value.replace(/[^a-z\%]/g,'')}); if( e.data.find('.m-f-u-li-link').hasClass('active') ){ var cur = this; e.data.find('input[data-css-corners]').each(function(){ if( this != cur ){ this.value = cur.value; $(this).data({unit: this.value.replace(/[^a-z\%]/g,'')}); } }); } value_render( e.data ); }) .on( 'mousedown', function(e){ if( e.which !== undefined && e.which !== 1 ) return false; $(document).on( 'mouseup', function(){ $(document).off( 'mousemove' ).off('mouseup'); $('body').css({cursor:''}); }); $(document).on( 'mousemove', { el: $(this), cur: parseInt(this.value!==''?this.value:0), top: e.clientY }, function(e){ var offset = (e.clientY-e.data.top); if( e.data.el.val().replace(/[^a-z\%]/g,'') === '' ) e.data.el.data({unit: 'px'}); else e.data.el.data({unit: e.data.el.val().replace(/[^a-z\%]/g,'')}); e.data.el.val( (e.data.cur-offset)+e.data.el.data('unit') ); $(e.data.el).trigger('change'); }); $('body').css({cursor:'ns-resize'}); $( window ).off('mouseup').on('mouseup', function(){ $(document).off('mousemove'); $(window).off('mouseup'); $('html,body').removeClass('kc_dragging noneuser'); }); }) .on( 'dblclick', function(){ $(this).val('').change(); }); el.find('.m-f-u-li-link span').on( 'click', el, function( e ){ if( $(this).parent().hasClass('active') ){ $(this).parent().removeClass('active'); }else{ $(this).parent().addClass('active'); var inps = $(this).closest('.kc-corners-wrp').find('input[data-css-corners]'), val = ''; inps.each(function(){ if( this.value !== '' && val === '' ) val = this.value; }); inps.val( val ).trigger('change'); } }); }, background : function( wrp, $, data ){ var test = wrp.find('.kc-css-background-test').get(0), inputs = wrp.find('input[data-css-background]'), p, values = {}, update_values = function(e) { // transparent none 0% 0%/auto repeat scroll var factory = { color: 'transparent', linearGradient: [''], image: 'none', position: '0% 0%', size: 'auto', repeat: 'repeat', attachment: 'scroll', advanced: 0 }, inputs = e.data.find('input[data-css-background]') ,val; if (e.data.find('.field-toggle input[type="checkbox"]').get(0).checked === true) { factory.advanced = 1; for (var f in factory) { val = inputs.filter('[name="'+f+'"]').val(); if (val !== null && val !== undefined && val !== '' && val != factory[f]) { if (f == 'linearGradient') { factory[f] = []; if (e.data.find('input.degrees').length > 0 && e.data.find('input.degrees').val() !== '') { factory[f].push( e.data.find('input.degrees').val().replace(/[^0-9\-]/g, '')+'deg'); } if (e.data.find('.color-row input.grdcolor').length === 1) { if (e.data.find('.color-row input.grdcolor').val() !== '') { factory[f].push(e.data.find('.color-row input.grdcolor').val()); } }else { e.data.find('.color-row input.grdcolor').each(function(){ if (this.value !== '') factory[f].push(this.value); }); } }else if( f == 'image' ){ factory[f] = val.replace( kc_site_url, '%SITE_URL%' ); }else factory[f] = val; } } }else{ val = inputs.filter('[name="color"]').val(); if( val !== null && val !== undefined && val !== '' && val != factory[f] ) factory['color'] = val; } e.data.find('input[data-css-background-value]') .val (kc.tools.base64.encode(JSON.stringify(factory))).change(); }; wrp.find('.add-more-color').on('click', wrp, function(e){ var input = $('<span class="color-row"><input class="grdcolor" value="" placeholder="Select color" type="search" /><i class="fa-times remove" title="Delete"></i></span>'); $(this.parentNode).find ('.kc-param-bg-gradient-colors .color-row').last().after(input); var incl = $(this.parentNode).find('.color-row input').last().get(0); incl.color = new jscolor.color(incl, {}); e.data.find('input.grdcolor').each(function(){ if (this.color === undefined) this.color = new jscolor.color(this, {}); }); input.find('input').first().on('change', e.data, update_values); e.preventDefault(); return false; }); wrp.find('.custom-degrees').on('click', wrp, function(e){ if ($(this.parentNode).find ('.degrees-row').length === 0) { var input = $('<span class="degrees-row"><input class="degrees" value="90" placeholder="Custom degrees" style="width: 45%" type="search" autocomplete="off" /><i class="fa-times remove" title="Delete"></i></span>'); $(this.parentNode).find ('.kc-param-bg-gradient-colors .color-row').last().after(input); input.find('input').on('change', e.data, update_values); update_values(e); } e.preventDefault(); return false; }); wrp.find('.kc-param-bg-gradient-colors').on('click', wrp, function(e){ if (e.target.className.indexOf('remove') > -1) { $(e.target).closest('span').remove(); update_values(e); } }); wrp.find('.field-toggle input').on('change', wrp, function(e){ if( this.checked === true ) e.data.find('.kc-control-field').removeClass('kc-hidden'); else e.data.find('.kc-control-field').addClass('kc-hidden'); e.data.find('input[data-css-background]').first().change(); }); wrp.find('.field-attach_image_url').each( function(){ kc.ui.callbacks.upload_image_url( $(this), $ ); }); wrp.find('.field-select_group').each( function(){ var el = $(this), val = el.find('input[data-css-background]').val(); kc.ui.callbacks.select_group( el, $ ); if( el !== undefined && el !== '' ) el.find('button').removeClass('active').filter('[data-value="'+val+'"]').addClass('active'); }); inputs.on('change', wrp, update_values); /* * * Fill values to form * */ try { values = JSON.parse (kc.tools.base64.decode(data.value)); } catch(ex) {}; values = $.extend ({ color: 'transparent', linearGradient: [''], image: 'none', position: '0% 0%', size: 'auto', repeat: 'repeat', attachment: 'scroll' }, values); for (var f in values) { if (values[f] !== undefined && f == 'image' && values[f] !== '' && values[f] != 'none') { if (values[f].indexOf('%SITE_URL%') > -1) { values[f] = values[f].replace('%SITE_URL%', kc_site_url); if (values[f].indexOf(kc_ajax_url) === -1) values[f] = kc_ajax_url+'?action=kc_get_thumbn&type=filter_url&id='+encodeURIComponent(values[f].replace(kc_site_url, '')); } wrp.find('.field-attach_image_url img').attr({src: values[f]}); wrp.find('.kc-toggle-field-wrp input').attr({checked: true}); wrp.find('.box-bg.kc-hidden').removeClass('kc-hidden'); } if (f == 'color' && ( values[f] == 'rgba(0, 0, 0, 0)' || values[f] == 'transparent')) { values[f] = ''; inputs.filter('[name="'+f+'"]').val(''); } else if (f == 'advanced' && values[f] == 1) { wrp.find('.field-toggle input[type="checkbox"]').attr({checked: true}); wrp.find('.box-bg.kc-hidden').removeClass('kc-hidden'); } else if (f == 'linearGradient') { if (typeof values[f] == 'object' && values[f][0] !== undefined) { if (values[f][0].indexOf('deg') > -1) { if (wrp.find('.degrees-row').length === 0) { var inp_deg = $('<span class="degrees-row"><input class="degrees" value="'+values[f][0].replace(/[^0-9\-]/g, '')+'" placeholder="Custom degrees" style="width: 45%" type="search" autocomplete="off" /><i class="fa-times remove" title="Delete"></i></span>'); wrp.find ('.kc-param-bg-gradient-colors .color-row').last().after(inp_deg); inp_deg.on ('change', wrp, update_values); } values[f] = values[f].slice(1); } wrp.find('.color-row').find('input.grdcolor').val(values[f][0]); var inp_col; for (var i=1; i<values[f].length; i++) { inp_col = $('<span class="color-row"><input class="grdcolor" value="'+values[f][i]+'" placeholder="Select color" type="search" style="background:'+values[f][i]+'" /><i class="fa-times remove" title="Delete"></i></span>'); wrp.find ('.kc-param-bg-gradient-colors .color-row').last().after(inp_col); new jscolor.color(inp_col.find('input').get(0), {}); inp_col.find('input').first().on('change', wrp, update_values); } } } else { inputs.filter('[name="'+f+'"]').val (values[f]).parent().find('button').removeClass('active'); inputs.filter('[name="'+f+'"]').parent().find('button[data-value="'+values[f]+'"]').addClass('active'); } } wrp.find('.field-color_picker input, input.grdcolor').each(function() { if (this.color === undefined) this.color = new jscolor.color(this, {}); }); }, css : function( wrp, $, data ){ if (data.options.length === 0) data.options = kc.maps._styling.options; kc.params.fields.css.render( data, wrp.find('.kc-css-rows') ); var pop = wrp.closest('.kc-params-popup'), model = pop.data('model'); kc.tools.popup.callback( pop, { before_callback : kc.params.fields.css.save_fields }, 'field-css-callback' ); }, css_fonts : function( wrp, $, data){ wrp.find('input').on('focus', function(){ var ul = $(this).parent().find('.kc-fonts-list'); ul.html('').show(); if( typeof kc_fonts == 'object' && Object.keys(kc_fonts).length > 0 ){ for( var i in kc_fonts ){ i = decodeURIComponent(i); if( i == this.value ) ul.append('<li style="background: #42BCE2;font-family: \''+i+'\'">'+i+'</li>'); else ul.append('<li style="font-family: \''+i+'\'">'+i+'</li>'); } ul.find('li').on('click', function(){ $(this).closest('.kc-fonts-picker').find('input').val(this.innerHTML).change(); }); }else{ ul.append('<li class="align-center"><h1>\\(^Д^)/</h1>No fonts in list<br />Add fonts via "Fonts Manager"</li>'); } }).on('blur', function(){ setTimeout( function(el){el.hide()}, 200, $(this).parent().find('.kc-fonts-list') ); }); wrp.find('button').on('click', function(e){ kc.ui.lightbox({ iframe : true, url : kc_site_url+'/wp-admin/admin.php?page=kingcomposer&kc_action=fonts-manager' }); e.preventDefault(); }); }, presets : function( wrp ){ wrp.find('.kc-preset-categories li a').on('click', function(e){ wrp.find('.kc-preset-categories li a.active').removeClass('active'); $(this).addClass('active'); if( $(this).attr('href') != '#all' ){ wrp.find('.kc-preset-wrp .kc-preset-item').hide(); wrp.find('.kc-preset-wrp .kc-preset-item[data-cate="preset-cat-'+kc.tools.esc_slug( $(this).text() ) + '"]').show(); }else{ wrp.find('.kc-preset-wrp .kc-preset-item').show(); } e.preventDefault(); return false; }); wrp.find('.kc-preset-item i.sl-close').on('click', function(e){ if( !confirm(kc.__.sure) ){ e.preventDefault(); return false; } var pid = $(this).data('pid'), pname = $(this).data('pname'), items = kc.backbone.stack.get( 'kc_presets', pname ); delete items[pid]; kc.backbone.stack.update('kc_presets', pname, items ); $(this).closest('.kc-preset-item').remove(); e.preventDefault(); return false; }); }, radio_image : function( wrp ){ wrp.find('.clear-selected').on( 'click', wrp, function(e){ e.data.find('input.kc-param.empty-value').attr({'checked':true}).trigger('change'); e.preventDefault(); }); var preview = wrp.find('img.large-view'), win_width = $(window).width(); wrp.find('label.rbtn img').on('mouseover mousemove', { el: preview, wd: win_width }, function(e) { if (e.data.el.attr('src') != this.src) e.data.el.attr('src', this.src); e.data.el.show(); if (e.data.el.width() == this.offsetWidth) { e.data.el.hide(); return; } e.data.left = e.clientX - (e.data.el.width()/2); if (e.data.left+e.data.el.width() > e.data.wd - 10) e.data.left = (e.data.wd - 10 - e.data.el.width()); if (e.data.left < 10) e.data.left = 10; e.data.el.css({display: 'block', left: e.data.left+'px', top: (e.clientY+20)+'px'}); }).on('mouseout', preview, function(e) { e.data.hide(); }); }, css_border : function( wrp, $, data ){ var inputs = wrp.find('.multi-fields-ul [data-css-border]'), input = wrp.find('input[data-css-border="value"]'), map = {top: 0, right: 1, bottom: 2, left: 3}, _get = function(){ var vals = [ inputs.eq(0).val(), inputs.eq(1).val(), inputs.eq(2).val() ]; if( vals[0] !== '' && !isNaN( vals[0] ) ) vals[0] += 'px'; if( vals[0] !== '' && vals[2] !== '' ) vals = vals.join(' '); else vals = ''; return vals; }, _render = function( val ){ if( val == undefined || val === '' ) val = ' '; val = val.trim().split(' '); inputs.eq(0).val(val[0]); inputs.eq(1).val(val[1]); val[0] = ''; val[1] = ''; val = val.join(' ').trim(); inputs.eq(2).val( val ).css({'background': val}).change(); } inputs.on('change', function( e ){ vals = _get(), val = input.val(); var dir = wrp.find('.active').data('dir'); if( dir === undefined ){ val = vals; }else{ val = val.split('|'); for( var i=0; i<4; i++ ){ if( i == map[dir] ) val[i] = vals; else if( val[i] === undefined ) val[i] = ''; } val = val.join('|'); } input.val( val ).change(); }); wrp.find('.kc-corners-pos button,.m-f-u-li-link').on('click', function(e){ wrp.find('.active').removeClass('active'); $(this).addClass('active'); var val = input.val().toString().trim().split('|'); if( $(this).data('dir') === undefined ){ _render(val[0]); }else{ if( val.length === 1 ){ input.val(''); _render(val[0]); }else _render(val[map[$(this).data('dir')]]); } return false; }); wrp.find('.css-border-advanced').on('click', wrp, function(e){ e.data.find('.kc-corners-wrp').removeClass('hidden'); e.data.find('.css-border-advanced').remove(); e.preventDefault(); return false; }); if( data.value.indexOf('|') === -1 ){ wrp.find('.m-f-u-li-link').addClass('active'); _render( data.value ); }else{ wrp.find('.kc-corners-wrp').removeClass('hidden'); wrp.find('.css-border-advanced').remove(); var value = data.value.split('|'); for( var i=0; i<4; i++ ){ if( value[i] !== undefined && value[i] !== '' ){ wrp.find('.kc-corners-wrp .kc-corners-pos').eq(i).find('button').trigger('click'); break; } } } wrp.find('input.m-f-bb-color').each(function(){ this.color = new jscolor.color(this, {}); }); }, animate : function( wrp, $, data ){ if (data.value === undefined) data.value = ''; var preview = wrp.find('.kc-animate-preview'), eff = wrp.find('.kc-animate-effect'), delay = wrp.find('.kc-animate-delay'), speed = wrp.find('.kc-animate-speed'); param = wrp.find('.kc-param'), value = data.value.split('|'); wrp.find('.kc-animate-field select,.kc-animate-field input').on('change keydown', function(e){ if (e.keyCode!== undefined && e.keyCode !== 13) return; if (delay.val() !== '') preview.css({'animation-delay': delay.val()+'ms'}); else preview.css({'animation-delay': ''}); if (speed.val() !== '') preview.css({'animation-duration': speed.val()}); else preview.css({'animation-duration': ''}); if (eff.val() !== '') preview.attr({'class':''}).attr({'class': 'kc-animate-preview animated '+this.value}); param.val( eff.val()+'|'+delay.val()+'|'+speed.val() ).change(); }); if (value[0] !== undefined && value[0] !== '') eff.val(value[0]); if (value[1] !== undefined && value[1] !== '') delay.val(value[1]); if (value[2] !== undefined && value[2] !== '') speed.val(value[2]); }, icon_picker : function( wrp, $, data) { wrp.find('input.kc-param, .icons-preview').on('click', wrp.find('input.kc-param').get(0), function(e){ $('.kc-icons-picker-popup').remove(); var html = '<div class="icons-list noneuser">'+ '<ul class="kc-icon-picker-tabs kc-pop-tabs"></ul>'+ kc.tools.get_icons()+ '</div>'; var listObj = jQuery(html); var atts = { title: 'Icon Picker', width: 600, class: 'no-footer kc-icons-picker-popup', float: true, keepCurrentPopups: true }; var pop = kc.tools.popup.render( this, atts ); pop.data({ target: e.data/*, scrolltop: jQuery(window).scrollTop() */}); pop.find('.m-p-header').append('<input type="search" class="kc-components-search kc-icons-search" placeholder="Search by Name"><i class="sl-magnifier"></i>'); pop.find('.m-p-body').off('mousedown').on('mousedown',function(e){ e.preventDefault(); return false; }); pop.find('input.kc-icons-search').off( 'keyup' ).on( 'keyup', listObj, function( e ){ clearTimeout( this.timer ); if (this.value === '') { e.data.find('.seach-results').remove(); return; } this.timer = setTimeout( function( el, list ){ if( list.find('.seach-results').length == 0 ){ var sr = $('<div class="seach-results"></div>'); list.prepend( sr ); }else sr = list.find('.seach-results'); var found = ['<span class="label">Search Results:</span>']; list.find('>i').each(function(){ if( this.className.indexOf( el.value.trim() ) > -1 && found.length < 16 && $.inArray( this.className, found ) )found.push( '<span data-icon="'+this.className+'"><i class="'+this.className+'"></i>'+this.className+'</span>' ); }); if( found.length > 1 ){ sr.html( found.join('') ); sr.find('span').on('click', function(){ if( $(this).data('icon') === undefined ) { e.preventDefault(); return false; } var tar = kc.get.popup(this).data('target'); tar.value = $(this).data('icon'); $(tar).trigger('change'); kc.get.popup(this, 'close').trigger('click'); }); } else sr.html( '<span class="label">The key you entered was not found.</span>' ); }, 150, this, e.data ); }).focus(); listObj.on('click', function( e ){ if (e.target.tagName != 'I') return; var tar = kc.get.popup(this).data('target'); tar.value = e.target.title; $(tar).trigger('change'); kc.get.popup(this, 'close').trigger('click'); }); var args = [], cl, tabs = ''; listObj.find('i').each(function(){ if (this.className !== undefined && this.className.indexOf('-') > -1) { cl = this.className.substr(0, this.className.indexOf('-')).trim(); if (cl !== '' && args.indexOf(cl) === -1) { args.push(cl); tabs += '<li>'+cl+'</li>'; } } }); listObj.find('ul.kc-icon-picker-tabs').html(tabs); listObj.find('ul.kc-icon-picker-tabs li').on('click', function(){ $(this).parent().find('.active').removeClass('active'); $(this).addClass('active'); listObj.find('i').hide(); listObj.find("i[class^='"+this.innerHTML+"-']").css({'display': ''}); }).first().trigger('click'); pop.find('.m-p-body').append(listObj); }).on('change',function(){ jQuery(this).parent().find('.icons-preview i').attr({class: this.value}); })/*.on('blur', function(){ kc.cfg.icon_picker_scrolltop = $('.kc-icons-picker-popup .m-p-body').scrollTop(); $('.kc-icons-picker-popup').remove(); })*/; }, wp_widgets : function( wrp, $ ){ var container = wrp.find('.kc-widgets-container'), pop = kc.get.popup( wrp ); container.find('*[data-value]').each(function(){ switch (this.tagName){ case 'INPUT' : if( this.type == 'radio' || this.type == 'checkbox' ) this.checked = true; else this.value = $(this).data('value'); break; case 'TEXTAREA' : this.value = $(this).data('value'); break; case 'SELECT' : var vls = $(this).data('value'); if( vls )vls = vls.toString().split(','); else vls = ['']; if( vls.length > 1 ) this.multiple = 'multiple'; $(this).find('option').each(function(){ if( vls.indexOf( this.value ) > -1 ) this.selected = true; else this.selected = false; }); break; } }); kc.tools.popup.callback( pop, { before_callback : function( wrp ){ var name = container.data('name'), fields = container.closest('form').serializeArray(), data = {}; data[name] = {}; fields.forEach (function(n) { if (data[name][n.name] == undefined) data[name][n.name] = n.value; else data[name][n.name] += ','+n.value; }); var string = kc.tools.base64.encode( JSON.stringify( data ) ); container.append('<textarea name="data" class="kc-param kc-widget-area forceHide">'+string+'</textarea>'); }, after_callback : function( wrp ){ container.find('.kc-param.kc-widget-area.forceHide').remove(); } }, 'field-wp-widget-callback' ); }, optimize_settings : function( wrp ){ wrp.find('input[data-optimized]').on('change', function(){ if (this.checked) kc_global_optimized[$(this).data('optimized')] = this.value; else kc_global_optimized[$(this).data('optimized')] = ''; var mp = wrp.closest('.m-p-wrap'); if (mp.find('.kc-popup-loading').length === 0) mp.append('<div class="kc-popup-loading"><span class="kc-loader"></span></div>'); mp.find('.kc-popup-loading').show(); $.post( kc_ajax_url, { 'action': 'kc_enable_optimized', 'security': kc_ajax_nonce, 'settings': kc_global_optimized, 'id' : $('#post_ID').val() }, function (result) { wrp.find('.m-warning, .m-success').remove(); mp.find('.kc-popup-loading').hide(); if (result == '-1') { wrp.find('h1.mgs-t02').after('<div style="display: block" class="m-settings-row m-warning">Error: secure session is invalid. Reload and try again</div>'); $('input[data-optimized="enable"]').attr({checked: false}); }else if (result.stt === undefined){ wrp.find('h1.mgs-t02').after('<div style="display: block" class="m-settings-row m-warning">Error: unknow reason</div>'); $('input[data-optimized="enable"]').attr({checked: false}); }else if(result.stt == '0'){ wrp.find('h1.mgs-t02').after('<div style="display: block" class="m-settings-row m-warning">Error: '+result.msg+'</div>'); $('input[data-optimized="enable"]').attr({checked: false}); }else { wrp.find('h1.mgs-t02').after('<div style="display: block" class="m-settings-row m-success">'+result.msg+'</div>'); if (kc_global_optimized.enable == 'on' ) $('#kc-page-settings').addClass('kc-optimized-on'); else $('#kc-page-settings').removeClass('kc-optimized-on'); } } ).complete(function( data ) { if(data.status !== 200) { kc.msg( 'Please check all of your code and make sure there are no errors. ', 'error', 'sl-close' ); } }); }); wrp.find('select[data-optimized="this_page"]').on('change', function(){ $('#kc-page-cfg-optimized').val(this.value); kc.instant_submit(); }); wrp.find('button.clear-cache').on('click', function(){ if (!confirm(kc.__.i72))return; kc_global_optimized.clear_cache = 'on'; wrp.find('input[data-optimized]').first().trigger('change'); }); } }, upgrade_notice : function( old_version ){ if( old_version < 2.5 ){ kc.msg( '<h3>Great!!!, but hold on a sec!</h3><div class="kc-pl-form"><p class="notice">You have updated KingComposer page builder to version '+kc_version+'. From version 2.5, we changed to new better CSS & Responsive system. What you need to do?</p><ul><li>1. All of your css custom from old version may be lost, so please make sure that you checked all of your pages.</li><li>2. You have to upgrade all the elements that you\'ve overwritten to work with the new system css. <a href="http://docs.kingcomposer.com/docs/use-css-system-for-my-element/" target=_blank>How to update?</a></li></ul></div><div id="kc-preload-footer"><a href="https://wordpress.org/plugins/kingcomposer/developers/" target="_blank" class="button gray left">Older versions</a><a href="https://wordpress.org/plugins/kingcomposer/changelog/" target=_blank class="button verify right">Changelog <i class="fa-file"></i></a></div>', 'popup' ); } if( old_version < 2.6 ){ $('#kc-preload').remove(); kc.ui.lightbox({msg: '<img width="957" src="'+kc_plugin_url+'/assets/images/kc2.6.jpg" /><div><h3>Great!!! You\'ve updated KC to version 2.6</h3><p><button class="button" onclick="jQuery(\'#kc-preload a.close\').trigger(\'click\')">OK, got it</button></p></div>', padding: 0, width: 957, height: 580}); } }, lightbox : function( cfg ){ var wrp = $('#kc-preload .kc-preload-body'); if( wrp.length === 0 ){ $('#wpwrap').append( '<div id="kc-preload"><div id="kc-welcome" style="display: block;" class="kc-preload-body"><a href="#" class="close"><i class="sl-close"></i></a></div></div>' ); wrp = $('#kc-preload .kc-preload-body'); wrp.find('a.close').on('click', function(){ $(this).closest('#kc-preload').remove(); $('.kc-ui-blur').removeClass('kc-ui-blur'); }); $('#kc-preload').on('click', function(e){ if( e.target.id == 'kc-preload' ) { $(this).remove(); $('.kc-ui-blur').removeClass('kc-ui-blur'); } }); } wrp.find('>*:not(a.close)').remove(); cfg = $.extend({ width: '1000', height: '576', padding: '10', iframe: false, url: '', msg: '' }, cfg ); if( cfg.iframe === true ){ cfg.msg = '<iframe width="'+cfg.width+'" height="'+cfg.height+'" src="'+cfg.url+'" frameborder="0" allowfullscreen></iframe>' } wrp.css({width: cfg.width+'px', height: cfg.height+'px', padding: cfg.padding+'px'}).append(cfg.msg); return wrp; }, fonts_callback : function( datas ){ window.kc_fonts = datas; var uri = '//fonts.googleapis.com/css?family=', link, fid; for (var family in datas) { fid = decodeURIComponent( family ); fid = fid.replace(/\ /g, '-').toLowerCase(); if (document.getElementById( fid+'-css' ) === null) { link = family.replace(/ /g, '+')+':'+datas[family][1]+encodeURIComponent('&subset=')+datas[family][1]; link = '<link rel="stylesheet" id="'+fid+'-css" href="'+(uri+link)+'" type="text/css" media="all" />'; $('head').append(link); if (kc.frame !== undefined) { kc.frame.$('head').append(link); } } } }, right_click : function (e) { // remove exist menus $('.kc-right-click-dialog').remove(); var ob = $(e.target).hasClass('kc-model') ? $(e.target) : $(e.target).closest('.kc-model'); if (ob.length > 0) { var ww = $(window).width(), wh = $(window).height(), model = ob.attr('id').toString().replace('model-', ''), css = { position: 'fixed', zIndex: 99999, left: e.clientX+'px', top: e.clientY+'px' } if (kc.storage[model] === undefined) return false; /* Close all popup before open panel */ $('.kc-params-popup .sl-close.sl-func').trigger('click'); var name = kc.storage[model].name, actions = { edit: '<li data-act="edit"><i class="fa-edit"></i> Edit</li>', insert: '<li data-act="insert"><i class="fa-columns"></i> New '+name.replace('kc_', '').replace(/\_/g, ' ')+'</li>', copy: '<li data-act="copy"><i class="fa-copy"></i> Copy '+ '<ul class="sub">'+ '<li data-act="copystyle"><i class="fa-paint-brush"></i> '+ 'Copy style only</li>'+ '</ul></li>', copystyle: '<li data-act="copystyle"><i class="fa-paint-brush"></i> Copy style only</li>', paste: '<li data-act="paste"><i class="fa-paste"></i> Paste '+ '<ul class="sub">'+ '<li data-act="pastestyle"><i class="fa-paint-brush"></i> '+ 'Paste style only</li>'+ '</ul></li>', double: '<li data-act="double"><i class="fa-clone"></i> Double</li>', add: '<li data-act="add"><i class="fa-plus"></i> Add Elements</li>', cut: '<li data-act="cut"><i class="fa-cut"></i> Cut</li>', clear: '<li data-act="clear"><i class="fa-eraser"></i> Clear style</li>', delete: '<li data-act="delete"><i class="fa-trash"></i> Delete</li>' }; if (['kc_column', 'kc_column_inner'].indexOf(name) > -1) { delete actions.copy; delete actions.cut; }else if(kc_maps_view.indexOf(name) > -1) { delete actions.copystyle; }else{ delete actions.insert; delete actions.copystyle; } var actions_content = ''; for (var n in actions) { actions_content += actions[n]; } var dialog = '<div id="kc-elms-breadcrumn" class="kc-right-click-dialog">\ <ul>\ <li class="item active">\ <span class="pointer">\ <i class="fa-dot-circle-o"></i> \ '+name.replace(/_/g, ' ')+'\ </span>\ <ul>'+actions_content+'</ul>\ </li>\ </ul>\ </div>'; dialog = $(dialog); $('#kc-right-click-helper').show().html('').append(dialog); dialog.css(css).on('mouseover', function(e){ ob.addClass('kc-hover-me'); }).on('mouseout', function(e){ ob.removeClass('kc-hover-me'); }).on('click', function(e){ var act = $(e.target).data('act'); if (act === undefined) return; switch (act) { case 'edit': ob.find('.edit').first().trigger('click'); break; case 'add': kc.backbone.add(ob.get(0)); break; case 'cut': kc.backbone.cut(ob.find('div').get(0)); break; case 'copy': kc.backbone.copy(ob.find('div').get(0)); break; case 'copystyle': if( kc.cfg.copied_style === undefined ) kc.cfg.copied_style = {}; var name = kc.storage[model].name, atts = kc.storage[model].args, params = kc.params.merge( name ), is_css = [], values = {}; if( atts['_id'] === undefined ){ console.warn('KingComposer: Missing id of the element when trying to render css'); return ''; } for( n in params ){ if( params[n].type == 'css' ) is_css.push( params[n].name ); } for( n in atts ){ if( is_css.indexOf( n ) > -1 || n.indexOf( '_css_inspector' ) === 0 ) values[n] = atts[n]; } kc.cfg.copied_style[ name ] = values; // update to storage kc.backbone.stack.set( 'KC_Configs', kc.cfg ); break; case 'paste': content = kc.backbone.stack.get('KC_RowClipboard'); if (content === undefined || content == '') { alert(kc.__.i38); return; } if (content.trim().indexOf('[kc_row ') === 0 || content.trim().indexOf('[kc_row ') === 0) { var fid = kc.backbone.push(content); ob.closest('.kc-row').after($('#model-'+fid)); kc.ui.scrollAssistive( $( '#model-'+fid ) ); }else kc.backbone.push(content, model, 'bottom'); break; case 'pastestyle': if( kc.cfg.copied_style === undefined ) return; var name = kc.storage[model].name, atts = kc.storage[model].args; if( kc.cfg.copied_style[name] === undefined ) return; for( n in kc.cfg.copied_style[name] ) { kc.storage[model].args[n] = kc.cfg.copied_style[name][n]; } break; case 'double': var name = kc.storage[model].name; if (kc_maps_view.indexOf(name) > -1) ob.find('>.kc-vs-control .double').trigger('click'); else kc.backbone.double(ob.get(0)); break; case 'insert': var name = kc.storage[model].name; if (kc_maps_view.indexOf(name) > -1) { kc.views.views_sections.do_add_section(ob.closest('.kc-views-sections-wrap').get(0)); }else kc.views.column.insert(model); break; case 'clear': var atts = kc.storage[model].args, params = kc.params.merge (kc.storage[model].name), is_css = [], n; if (atts['_id'] === undefined) { console.warn('KingComposer: Missing id of the element when trying to clear css'); return ''; } for (n in params) { if (params[n].type == 'css') is_css.push (params[n].name); } for (n in atts) { if (is_css.indexOf (n) > -1 || n.indexOf ('_css_inspector') === 0) { delete kc.storage[model].args[n]; } } break; case 'delete': ob.find('.delete').first().trigger('click'); break; } kc.ui.exit_right_click(true); }); if( e.clientX > ww/2 ) dialog.css({left: (e.clientX-dialog.width())+'px'}); else dialog.addClass('kc-rc-left'); if( e.clientY+32+dialog.height() > wh ) dialog.css({top: (wh-32-dialog.height())+'px'}); else dialog.addClass('kc-rc-top'); $('body').css({overflow: 'hidden'}); } }, exit_right_click : function (e) { if (e == 'force' || $(e.target).closest('.kc-right-click-dialog').length === 0) { $('.kc-right-click-dialog').remove(); $('#kc-right-click-helper').hide(); $('.kc-hover-me').removeClass('kc-hover-me'); $('body').css({overflow: ''}); } }, fix_position_popup : function( pop ){ /* * Add class identify */ //pop.addClass('kc-live-editor-popup'); /* * Resizable popup */ pop.find('.wp-pointer-arrow').on('mousedown', function(e){ if( e.which !== undefined && e.which !== 1 ) return false; $('html,body').css({cursor:'col-resize'}).addClass('kc_dragging noneuser kc-ui-dragging'); var mouseUp = function(e){ $(document).off('mousemove'); $(window).off('mouseup'); setTimeout(function(){ $('html,body').css({cursor:''}).removeClass('kc_dragging noneuser kc-ui-dragging'); }, 200 ); }, mouseMove = function( e ){ e.preventDefault(); var d = e.data; d.offset = e.clientX-d.left; var _w = (d.width+d.offset); // pop width > 1000 if( _w >= 1000 ) return; if( _w <= 400 ){ _w = 400; } d.el.style.width = _w+'px'; kc.cfg.live_popup.width = _w+'px'; }; $(document).off('mousemove').on( 'mousemove', { el: pop.get(0), width: parseInt(pop.width()), eleft: parseInt(pop.css('left')), left: e.clientX }, mouseMove ); $(window).off('mouseup').on( 'mouseup', { frame: $('#kc-live-frame').get(0), el: pop }, mouseUp ); }); if( kc.cfg.live_popup === undefined ) kc.cfg.live_popup = { top: '50px', left: '750px', width: '461px' }; var w_ = $(window).width(), _l = parseInt(kc.cfg.live_popup.left), _w = parseInt(kc.cfg.live_popup.width); if( _w + _l > w_ ){ kc.cfg.live_popup.left = ( w_ - _w ) + 'px'; }else if( _l < 10 ){ kc.cfg.live_popup.left = '0px'; } pop.css( kc.cfg.live_popup ); if( kc.cfg.live_popup.sticky === true ){ pop.addClass('kc-popup-stickLeft'); } }, instantor : { mainTmpl : '<span class="instmore">\ <select class="format">\ <option value="p">Paragraph</option>\ <option value="h1">Heading 1</option>\ <option value="h2">Heading 2</option>\ <option value="h3">Heading 3</option>\ <option value="h4">Heading 4</option>\ <option value="h5">Heading 5</option>\ <option value="h6">Heading 6</option>\ <option value="pre">Preformatted</option>\ </select>\ <i class="fa-align-justify" data-format="justifyfull" title="Text align justify"></i> \ <i class="fa-paint-brush" data-act="color" title="Fill color"></i> \ <input type="text" class="color" readonly /> \ <i class="fa-underline" data-format="underline" title="Underline"></i> \ <i class="fa-strikethrough" data-format="strikethrough" title="Strike through"></i> \ <i class="fa-eraser" data-act="clearformat" title="Clear formatting"></i> \ <i class="fa-outdent" data-format="outdent" title="Decrease indent"></i> \ <i class="fa-indent" data-format="indent" title="Increase indent"></i> \ <i class="sl-close" data-act="close" title="Close dialog" style="float:right"></i>\ </span> \ <span class="instmostuse">\ <i class="fa-bold" title="Bold" data-format="bold"></i> \ <i class="fa-italic" title="Italic" data-format="italic"></i> \ <i class="fa-list-ul" title="Bulleted list" data-format="insertunorderedlist"></i> \ <i class="fa-list-ol" title="Numbered list" data-format="insertorderedlist"></i> \ <i class="fa-quote-left" title="Blockquote" data-format="formatblock:blockquote"></i> \ <i class="fa-link" title="Insert link" data-act="insertlink"></i> \ <i class="fa-align-left" title="Text align left" data-format="justifyleft"></i> \ <i class="fa-align-center" title="Text align center" data-format="justifycenter"></i> \ <i class="fa-align-right" title="Text align right" data-format="justifyright"></i> \ <i class="fa-image" data-act="insertimages" title="Insert images"></i> \ <i class="sl-cursor-move" data-act="move" title="Move dialog"></i> \ </span>', imageTmpl : '<span class="instmostuse"> \ <i class="fa-pencil" title="Change image" data-act="changeimage"></i> \ <i class="fa-align-left" title="Text align left" data-format="justifyleft"></i> \ <i class="fa-align-center" title="Text align center" data-format="justifycenter"></i> \ <i class="fa-align-right" title="Text align right" data-format="justifyright"></i> \ <i class="fa-times" title="Remove image" data-act="removeimage"></i> \ <label>Width:</label> <input style="width:80px" type="number" data-act="imagewidth" /> \ </span>', onclick : function (e, ob) { var el = ob[0]; if (el.getAttribute('data-raw') != 'true') { el.innerHTML = kc.storage[ob[1]].args.content; if ($(el).find('>p, >div, >:header').length === 0) el.innerHTML = '<p>'+kc.storage[ob[1]].args.content+'</p>'; el.setAttribute('data-raw', 'true'); }else if (e.target.tagName == 'IMG') { el.setAttribute('data-live-editor', ''); el.setAttribute('contenteditable', true); el.focus(); return this.clickImage(e, el); } if (el.getAttribute('data-live-editor') != 'open') { el.setAttribute('data-live-editor', 'open'); el.setAttribute('contenteditable', true); el.focus(); }else{ this.target(e); return false; } if (kc.id('kc-instantor') !== null) $('#kc-instantor').remove(); $('body').append('<div id="kc-instantor">'+this.mainTmpl+'</div>'); this.possition(e, el, false); var inst = $('#kc-instantor'); inst.data({el: el}); inst.on('click', function(e){ var act = $(e.target).data('act'), format = $(e.target).data('format'); switch (act) { case 'close' : el.removeAttribute('data-live-editor'); $('#kc-instantor').remove(); break; case 'color' : $(e.target).next().focus(); break; case 'insertlink' : var sLnk = prompt('Write the URL here','http:\/\/'); if (sLnk && sLnk !='' && sLnk != 'http://') kc.ui.instantor.format('createlink',sLnk); break; case 'clearformat' : kc.ui.instantor.clearformat(); break; case 'insertimages' : kc.tools.media.opens({data: function(atts){ kc.ui.instantor.format('insertHTML', wp.media.string.image(atts)); }}); break; } if (format !== undefined) { format = format.split(':'); kc.ui.instantor.format(format[0], format[1]); } }); inst.find('select.format').on('change', function(e){ kc.ui.instantor.format('formatblock', this.value); }); kc.ui.draggable( inst.get(0), 'i[data-act="move"]' ); kc.add_action('kc-draggable-end', 'fgE6td4wS', function (e){ kc.ui.instantor.pos = {top: e.data.style.top, left: e.data.style.left}; }); inst.find('input.color').each(function(){ this.color = new jscolor.color(this, {}); }).on('change', function(){ kc.ui.instantor.format('ForeColor', this.value); }); // update current target to toolbars this.target(e); return inst; }, clickImage : function (e, el) { if (kc.id('kc-instantor') !== null) $('#kc-instantor').remove(); $('body').append('<div id="kc-instantor">'+this.imageTmpl+'</div>'); var inst = $('#kc-instantor'); inst.data({el: el}); inst.on('click', e.target, function(e){ var act = $(e.target).data('act'), format = $(e.target).data('format'), el = e.data, $this = $(this); if (format !== undefined) return kc.ui.instantor.format(format, null); if (act == 'removeimage') { if (el.parentNode.tagName == 'A') el = el.parentNode; var selection = kc.ui.instantor.selection(), range = kc.ui.instantor.range(); selection.removeAllRanges(); range.selectNode(el); selection.addRange(range); kc.ui.instantor.format('delete', null); $(this).data('el').setAttribute('data-live-editor', ''); $(this).remove(); } if (act == 'changeimage') { kc.tools.media.opens({data: function(atts){ if (el.parentNode.tagName == 'A') el = el.parentNode; var selection = kc.ui.instantor.selection(), range = kc.ui.instantor.range(); selection.removeAllRanges(); range.selectNode(el); selection.addRange(range); kc.ui.instantor.format('delete', null); kc.ui.instantor.format('insertHTML', wp.media.string.image(atts)); $('#kc-instantor').data('el').setAttribute('data-live-editor', ''); $('#kc-instantor').remove(); }}); } }); inst.find('input[data-act="imagewidth"]').val(e.target.getAttribute('width')).on('change', e.target, function(e){ if (e.data.getAttribute('height') !== undefined) e.data.removeAttribute('height'); e.data.setAttribute('width', this.value.replace(/\D/g,'')); }); inst.addClass('imgclick').css({top: e.clientY+'px', left: (e.clientX-(inst.width()/2))+'px'}); }, possition : function (e, el, dy) { if (kc.id('kc-instantor') !== null) { if (dy === false && kc.ui.instantor.pos !== undefined) { $('#kc-instantor').css(kc.ui.instantor.pos); return; } var coor = el.getBoundingClientRect(), left = coor.left+(coor.width/2)-187, top = coor.top > 100 ? coor.top : 100; $('#kc-instantor').css({top: top+'px', left: left+'px'}); } }, target : function (e) { if (kc.id('kc-instantor') !== null) { var el = e.target, pop = $('#kc-instantor'); pop.data({clicked: e.target}); pop.find('i').removeClass('active'); pop.find('input.color').val('').css({background: ''}); while (el !== null && el.getAttribute('contenteditable') === null) { switch (el.tagName) { case 'I' : pop.find('i[data-format="italic"]').addClass('active'); break; case 'B' : pop.find('i[data-format="bold"]').addClass('active'); break; case 'U' : pop.find('i[data-format="underline"]').addClass('active'); break; case 'BLOCKQUOTE' : pop.find('i[data-format="formatblock:blockquote"]').addClass('active'); break; case 'A' : pop.find('i[data-act="insertlink"]').addClass('active'); break; case 'OL' : pop.find('i[data-format="insertorderedlist"]').addClass('active'); break; case 'UL' : pop.find('i[data-format="insertunorderedlist"]').addClass('active'); break; case 'STRIKE' : pop.find('i[data-format="strikethrough"]').addClass('active'); break; case 'FONT' : if (el.getAttribute('color')) { pop.find('input.color').val(el.getAttribute('color')).css({ background: el.getAttribute('color') }); } break; } switch (el.style.textAlign) { case 'left' : pop.find('i[data-format="justifyleft"]').addClass('active'); break; case 'center' : pop.find('i[data-format="justifycenter"]').addClass('active'); break; case 'right' : pop.find('i[data-format="justifyright"]').addClass('active'); break; case 'justify' : pop.find('i[data-format="justifyfull"]').addClass('active'); break; } el = el.parentNode; } } }, format : function(cmd, value) { if (kc.id('kc-instantor') !== null) { var relm = this.elmAtRange(), el = $('#kc-instantor').data('el'); if (cmd == 'formatblock' && relm !== null) { if ($(relm).closest(value.toLowerCase()).length > 0) value = '<p>'; } if (kc.front !== undefined) kc.frame.doc.execCommand(cmd, false, value); else document.execCommand(cmd, false, value); if (el !== undefined) el.focus(); } }, elmAtRange : function() { try { var selection = this.selection(); var range = selection.getRangeAt(0); if (range !== 0) { var containerElement = range.commonAncestorContainer; if (containerElement.nodeType != 1) { containerElement = containerElement.parentNode; } return containerElement; } }catch(ex){}; return null; }, selection : function(){ if (kc.front !== undefined) return kc.frame.doc.getSelection(); else document.getSelection(); }, range : function(){ if (kc.front !== undefined) return kc.frame.doc.createRange(); else document.createRange(); }, clearformat : function() { var html = ""; var sel = this.selection(); if (sel.rangeCount) { var container = document.createElement("p"); for (var i = 0, len = sel.rangeCount; i < len; ++i) { container.appendChild(sel.getRangeAt(i).cloneContents()); } html = container.innerText; } if (html === '') { var select = this.selection().getRangeAt(0), el = select['startContainer'].parentNode, txt = el.innerText; if (el.getAttribute('contenteditable')) return; if (el.tagName !== 'P') { if (el.tagName == 'LI') { el = el.parentNode; txt = el.innerText; } var selection = this.selection(), range = this.range(); selection.removeAllRanges(); range.selectNode(el); selection.addRange(range); this.format('delete', null); $(el).remove(); this.format('insertHTML', '<p>'+txt+'</p>'); }else if (!el.parentNode.getAttribute('contenteditable') && !el.getAttribute('data-model')) { while ( el.parentNode && el.parentNode.tagName !== 'BODY' && el.parentNode.getAttribute('contenteditable') )el = el.parentNode; txt = el.innerText; $(el).remove(); this.format('insertHTML', '<p>'+txt+'</p>'); } return; } this.format('delete', null); this.format('insertHTML', '<p>'+html+'</p>'); }, save : function(el) { var model = el.getAttribute('data-model'); if (!model || !kc.storage[model]) return; kc.storage[model].args.content = el.innerHTML; } } }, get : { model : function( el ){ var id = $(el).data('model'); if( id !== undefined && id !== -1 ) return id; else if( el.parentNode ){ if( el.parentNode.id != 'kc-container' ) return this.model( el.parentNode ); else return null; }else return null; }, storage : function( el ){ return kc.storage[ this.model(el) ]; }, maps : function( el ){ return kc.maps[ this.storage(el).name ]; }, popup : function( el, btn ){ var pop = $(el).closest('.kc-params-popup'); if( pop.length === 0 ) return null; if( btn == 'close' ) return pop.find('.m-p-header .sl-close.sl-func'); else if( btn == 'save' ) return pop.find('.m-p-header .sl-check.sl-func'); else return pop; } }, add_action : function( name, unique, action ){ if( this.actions === undefined ) this.actions = {}; if( this.actions[name] === undefined ) this.actions[name] = {}; if( this.actions[name][unique] === undefined ){ this.actions[name][unique] = action; return true; } return false; }, do_action : function( name, var1, var2, var3, var4, var5 ){ if( this.actions === undefined || this.actions[name] === undefined ) return false; for( var uni in this.actions[name] ){ if( typeof this.actions[name][uni] == 'function' ) this.actions[name][uni]( var1, var2, var3, var4, var5 ); } return true; }, remove_action : function( name ){ if( this.actions === undefined || this.actions[name] === undefined ) return false; delete this.actions[name]; return true; }, delete_action : function( name ){ return this.remove_action( name ); }, submit : function(){ /* * This action runs before the form submit * Disable unsaved warning */ kc.confirm( false ); $('#kc-page-cfg-mode').val( kc.cfg.mode ); /* * Do not need to do any actions if the builder is inactive */ if( kc.cfg.mode != 'kc' ) return; /* * Remove all input to prevent unused post content from the builder */ $('#kc-container').find('form,input,select,textarea').remove(); /* * Export content from the builder */ var content = ''; $('#kc-container > #kc-rows > .kc-row').each(function(){ var exp = kc.backbone.export( $(this).data('model') ); content += exp.begin+exp.content+exp.end; }); /* * Warning if the content is empty */ if( content === '' && !confirm( kc.__.i53 ) ) return false; /* * Update wp-editor content */ $('#content').val(content); try{ tinyMCE.get('content').setContent( content ); }catch(ex){} }, instant_submit : function(){ $('#kc-page-cfg-mode').val(kc.cfg.mode); /* * Editing sections */ if( kc.curentContentType !== undefined && kc.curentContentType == 'kc-sections' ){ $('#publishing-action button').trigger('click'); return; } /* * do not work while saving content */ if( $('#kc-preload').length > 0 || kc.cfg.mode != 'kc' ) return; /* * do not work if missing important field */ if( $('#post').length === 0 || $('#title').length === 0 || $('#post_ID').length === 0 ) return; /* * Start work by show the loading interface */ kc.msg( kc.__.processing, 'loading' ); /* * Change browser title */ document.raw_title = document.title; document.title = 'Saving...'; /* * Apply & close all open popups */ var list = $('.kc-params-popup .sl-check.sl-func, .kc-params-popup .save-post-settings'); if( list.length > 0 ){ for( var i = list.length - 1; i>=0; i-- ) list.eq(i).trigger('click'); } /* * Export content from the builder */ var content = '', id = $('#post_ID').val(), title = $('#title').val(); /* * Fix WP 5 */ if ($('.editor-post-title__input').length > 0) title = $('.editor-post-title__input').val(); /* * Export each row level 1 */ $('#kc-container > #kc-rows > .kc-row').each(function(){ var exp = kc.backbone.export( $(this).data('model') ); content += exp.begin+exp.content+exp.end; }); /* * Start posting the datas to server */ var meta = kc.tools.reIndexForm($("input[name^='kc_post_meta']").serializeArray(), []); $.post( kc_ajax_url, { 'action': 'kc_instant_save', 'security': kc_ajax_nonce, 'title': title, 'id': parseInt( id ), 'content': content, 'meta': meta.kc_post_meta }, function (result) { /* * Revert browser title */ document.title = document.raw_title; result = result.trim(); if( result == '-1' ) kc.msg( 'Error: secure session is invalid. Reload and try again', 'error', 'sl-close' ); else if( result == '-2' ) kc.msg( 'Error: Post not exist', 'error', 'sl-close' ); else if( result == '-3' ) kc.msg( 'Error: You do not have permission to edit this post', 'error', 'sl-close' ); else kc.msg( 'Successful', 'success', 'sl-check' ); if( $('#content').length > 0 ){ $('#content-html').trigger('click'); $('#content').val( content ); } /* * Disable unsaved warning */ kc.confirm( false ); kc.check_post_id(); } ).complete(function( data ) { document.title = document.raw_title; if(data.status !== 200) { kc.msg( 'Your content has been saved, but there seems to be an error occurs. <br />Please check all of your code and make sure there are no errors. ', 'error', 'sl-close' ); } }); }, switch : function( force ){ /* * if forced to switch to KC */ if( force === true ){ kc.cfg.mode = ''; if( typeof tinymce !== 'undefined' && tinymce.activeEditor !== null ) tinymce.activeEditor.hidden = true; } /* * make sure in backend editor */ if( kc.front !== undefined ) return; /* * Clear Trash */ $('#kc-undo-deleted-element').css({top:-132}); $('#kc-storage-prepare>.kc-model').remove(); if( kc.cfg.mode == 'kc' ){ // back to classic mode if( typeof tinymce !== 'undefined' && tinymce.activeEditor !== null ) tinymce.activeEditor.hidden = false; kc.cfg.mode = ''; kc.backbone.stack.set( 'KC_Configs', kc.cfg ); /* * Export content from the builder */ var content = ''; $('#kc-container > #kc-rows > .kc-row').each( function(){ var exp = kc.backbone.export( $(this).data('model') ); content += exp.begin + exp.content + exp.end; }); /* * Reset builder settings */ kc.model = 1; kc.storage = []; $('#kc-container,.kc-params-popup,#kc-controls').remove(); $('#postdivrich').css({ visibility: 'visible', display: 'block' }); $('html,body').stop().animate({ scrollTop : $(window).scrollTop()+3 }); $('#kc-switcher-buttons').show(); $('html').removeClass('kc-html-editor-active'); $('body').removeClass('kc-editor-active'); /* * make sure wp eidtor is in html mode before export all content from builder */ $('#content-html').trigger('click'); $('#content').val(content); if (wp.blocks) { wp.data.dispatch( 'core/editor' ).resetBlocks([]); wp.data.dispatch( 'core/editor' ).insertBlocks( wp.blocks.createBlock( 'core/html', {content: content} ) ); } /* * Disable warning unchanged */ kc.confirm( false ); $('#kc-page-cfg-mode').val(''); $.post(kc_ajax_url, { 'action': 'kc_switch_off', 'security': kc_ajax_nonce, 'mode': '', 'id' : $('#post_ID').val() }); return false; }else{ // switch to KC if( typeof tinymce !== 'undefined' && tinymce.activeEditor !== null ) tinymce.activeEditor.hidden = true; $('html').addClass('kc-html-editor-active'); $('body').addClass('kc-editor-active'); $('#kc-switcher-buttons').hide(); kc.cfg.mode = 'kc'; kc.model = 1; kc.storage = []; $('.edit-post-header__settings .editor-post-publish-button,.edit-post-header__settings .editor-post-publish-panel__toggle').removeAttr('aria-disabled'); $('#kc-page-cfg-mode').val('kc'); $.post(kc_ajax_url, { 'action': 'kc_switch_off', 'security': kc_ajax_nonce, 'mode': 'kc', 'id' : $('#post_ID').val() }); } /* * Update config about activate of builder */ kc.backbone.stack.set( 'KC_Configs', kc.cfg ); /* * Re-init the builder */ kc.views.builder.render(); kc.params.process(); kc.ui.mouses.load(); kc.ui.sortInit(); }, go_live : function(e){ var id = $('#post_ID').val(), type = $('#post_type').val(); if( typeof( id ) == 'undefined' ) alert( kc.__.i48 ); else if( typeof( type ) == 'undefined' ) alert( kc.__.i49 ); else if( $('#original_post_status').val() == 'auto-draft' || $('#original_post_status').val() == 'draft' ) alert( kc.__.i51 ); else window.open( kc_site_url+'/wp-admin/?page=kingcomposer&kc_action=live-editor&id='+id ); if (e !== undefined) e.preventDefault(); return false; }, msg : function( mes, stt, icon, delay ){ var wrp = $('#kc-preload'); if( wrp.length === 0 ){ wrp = $('<div id="kc-preload" style="opacity:0"></div>'); $('body').append(wrp); }else wrp.html(''); if( icon === undefined || icon === '' ) icon = 'et-lightbulb'; if( stt === undefined ) stt = ''; if( stt == 'loading' ){ $('#kc-preload') .stop() .append( '<h3 class="mesg '+stt+'"><span class="kc-loader"></span><br />'+mes+'</h3>' ) .animate({ opacity : 1 }, 150); }else if( stt == 'popup' ){ wrp.append('<div class="kc-preload-body">'+mes+'</div>').animate({opacity: 1}); var btn = $('<a href="#" class="enter close"></a>'); wrp.find('.kc-preload-body').append( btn ); $('body').addClass('kc-ui-blur'); btn.on('click', function(){ $('#kc-preload').remove(); $('body').removeClass('kc-ui-blur'); }); wrp.on('click', function(e){ if( e.target.id == 'kc-preload' ){ $('#kc-preload').remove(); $('body').removeClass('kc-ui-blur'); } }) }else{ if( delay === undefined ){ delay = 1500; if( stt == 'error' ) delay = 10000; } $('#kc-preload') .stop() .append( '<h3 class="mesg '+stt+'"><i class="'+icon+'"></i><br />'+mes+'</h3>' ) .animate({ opacity : 1 }, 150) .delay( delay ) .animate({ opacity: 0 }, function(){ $(this).remove(); }); } }, std : function( ob, key, std ){ if( typeof( ob ) !== 'object' ) return std; if( ob[key] !== undefined && ob[key] !== '' ) return ob[key]; return std; }, confirm : function( stt ) { if( stt === true ){ window.onbeforeunload = function(){ return kc.__.i01; }; /* * fix WP 5 */ $('.edit-post-header__settings .editor-post-publish-button,.edit-post-header__settings .editor-post-publish-panel__toggle').removeAttr('aria-disabled'); }else{ window.onbeforeunload = null; $(window).off('beforeunload'); } }, check_post_id : function() { if (window.location.href.indexOf('post=') == -1) { window.history.pushState({}, "", kc_site_url+'/wp-admin/post.php?post='+$('#post_ID').val()+'&action=edit'); } }, id : function(id){ return document.getElementById(id); } }, window.kc ); $( document ).ready(function(){ if( kc.ui.verify_tmpl() === true ) kc.init(); /*** 3-rd party compatible ***/ /* YOAST SEO*/ if (window.YoastShortcodePlugin !== undefined && wpseoShortcodePluginL10n !== undefined && wpseoShortcodePluginL10n.wpseo_filter_shortcodes_nonce !== undefined ) { window.YoastShortcodePlugin.prototype.parseShortcodes = function(a, b) { var content = $('#content').val(); a = [], txt = ''; if (tinymce.activeEditor !== null) { txt += tinymce.activeEditor.getContent(); } kc.params.process_shortcodes(content, function(args) { if (args.args.content.indexOf('[') === -1) txt += args.args.content; }, 'kc_column_text'); kc.params.process_shortcodes(content, function(args) { if (args.args.image !== undefined) txt += '<img src="http://dev.vn/RnD/kingcomposer/wp-admin/admin-ajax.php?action=kc_get_thumbn&id="'+args.args.image+'" alt="" />'; }, 'kc_single_image'); a.push(txt); return jQuery.post(ajaxurl, { action: "wpseo_filter_shortcodes", _wpnonce: wpseoShortcodePluginL10n.wpseo_filter_shortcodes_nonce, data: a }, function(a) { this.saveParsedShortcodes(a, b) }.bind(this)); } window.YoastShortcodePlugin.prototype.replaceShortcodes = function(a) { var content = ''; kc.params.process_shortcodes(a, function(args) { if (args.args.content.indexOf('[') === -1) content += args.args.content+"\n"; }, 'kc_column_text'); return content; } } }); $( window ).on('message', function(e) { var data = e.originalEvent.data; if ( typeof data == 'object' && data.action == 'kcpush' && data.content !== undefined && data.content !== '' ) { top.kc.backbone.push(atob(data.content)); $('#kc-presets-library-pop').hide(); } }); if ($.fn.shake === undefined) { $.fn.shake = function(){ return this.focus() .animate({marginLeft: -30}, 100) .animate({marginLeft: 20}, 100) .animate({marginLeft: -10}, 100) .animate({marginLeft: 5}, 100) .animate({marginLeft: 0}, 100); } } })( jQuery );