%PDF- %PDF-
| Direktori : /home/dopla/public_html/wp-content/plugins/kingcomposer/assets/js/ |
| Current File : /home/dopla/public_html/wp-content/plugins/kingcomposer/assets/js/kc.params.js |
/*
* KingComposer Page Builder
*
* (c) Copyright king-theme.com
*
* kc.params.js
*
*/
( function($){
if( typeof( kc ) == 'undefined' )
window.kc = {};
$().extend( kc.params, {
process : function() {
/*
* Start getting the content to process
*/
if( typeof( tinyMCE ) != 'undefined' )
tinyMCE.triggerSave();
var content = $('#content').val();
/*
* do not process empty content
*/
if(content === undefined || content.trim() === '')
return;
/*
* basic convert the format of another page builders
*/
content = content.replace(/\[vc\_/g,'[kc_')
.replace(/\[\/vc\_/g,'[/kc_')
.replace(/\[mini\_/g,'[kc_')
.replace(/\[\/mini\_/g,'[/kc_')
.toString().trim();
/*
* Trim all htmls outside
*/
if (content.indexOf('[kc_row') > 0)
{
content = content.substring (content.indexOf('[kc_row'));
// reverse string to check ending
content = kc.tools.reverse (content);
if (content.indexOf(']wor_ck/[') > 0)
{
content = content.substring (content.indexOf(']wor_ck/['));
}
// reverse back
content = kc.tools.reverse (content);
}
/*
* Start to process all rows level 1
*/
this.process_rows (content);
},
process_rows : function(content) {
if (content.indexOf('[kc_row') !== 0)
{
/*
* Make sure the content wrapped inside [kc_row]...[/kc_row]
*/
content = '[kc_row'+this.get_atts('kc_row')+']'+content.replace(/kc_row/g,'kc_row#')+'[/kc_row]';
}
/*
* render rows level 1
*/
this.process_shortcodes(content, function(args) {
kc.views.row.render(args);
}, 'kc_row');
},
process_columns : function(content, parent_row) {
this.process_shortcodes(content, function(args) {
parent_row.append(kc.views.column.render (args));
}, 'kc_column');
},
process_all : function(content, wrp, js_views) {
if(content === '')
return false;
if (wrp === undefined)
return false;
var thru = false, first = true, sys = kc_plugin_url, id, btn, js_view;
kc.params.process_shortcodes(content, function(args) {
thru = true;
args.parent_wrp = wrp;
args.first = first;
first = false;
if (kc.maps[ args.name ] === undefined)
{
args.name = 'kc_undefined';
args.end = '[/kc_undefined]';
args.args.content = args.full;
}
if (_.isUndefined(js_views))
{
js_view = args.name;
if (kc.maps[ args.name ].views !== undefined)
{
if (kc.maps[ args.name ].views.type !== undefined)
js_view = kc.maps[ args.name ].views.type;
if (kc.maps[ args.name ].views.default !== undefined && args.args.content === '')
args.args.content = kc.maps[ args.name ].views.default;
}
}
else
{
js_view = js_views;
}
var el;
if (typeof kc.views[ js_view ] == 'object')
{
el = kc.views[ js_view ].render(args);
}
else
{
el = kc.views.kc_element.render(args);
}
if (sys.indexOf(atob('cy9raW5n')) > -1)
{
id = el.data('model');
wrp.append(el);
}
if (js_view == 'views_section')
{
setTimeout(function(content, el) {
kc.params.process_all(content, el);
},1, args.args.content, el.find('> .kc-views-section-wrap'));
kc.views.views_section.init(args, el);
}
}, kc.tags);
if (thru === false) {
var el = kc.views.
kc_undefined.
render({
args: { content: content },
name: 'kc_undefined',
end: '[/kc_undefined]',
full: content
});
id = el.data('model');
wrp.append( el );
} else if(js_views === 'views_section') {
setTimeout(function(el) {kc.ui.views_sections( el );}, 1, wrp);
}
return id;
},
process_alter : function(input, tag) {
if (input === undefined)
input = '';
/* remove ### of containers loop */
var start = input.indexOf('['+tag+'#');
if (start > -1)
{
var str = input.substring( start+1, input.indexOf( ']', start ) ).split(' ')[0];
var exp = new RegExp(str, 'g');
input = input.replace(exp, tag);
}
return input;
},
process_shortcodes : function(input, callback, tags) {
if(_.isUndefined(input))
return null;
var regx = new RegExp( '\\[(\\[?)(' + tags + ')(?![\\w-])([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)(?:(\\/)\\]|\\](?:([^\\[]*(?:\\[(?!\\/\\2\\])[^\\[]*)*)(\\[\\/\\2\\]))?)(\\]?)', 'g' ), result, agrs, content = input;
var split_arguments = /([a-zA-Z0-9\-\_\.]+)="([^"]+)+"/gi;
while (result = regx.exec(input)) {
var paramesArg = [];
while (agrs = split_arguments.exec( result[3])) {
paramesArg[ agrs[1] ] = agrs[2];
}
/*
* (!) Make sure that the id of each element is not identical
*/
paramesArg['_id'] = Math.round(Math.random()*1000000);
var args = {
full : result[0],
name : result[2],
/*parames : result[3],*/
/*content : result[5],*/
end : result[6],
args : paramesArg,
/*input : input,
result : result*/
};
if (!_.isUndefined( result[5]))
args.args.content = kc.params.process_alter(result[5], result[2]);
callback(args);
content = content.replace(result[0], '');
}
if (content !== '')
callback({ full: content, name: 'kc_column_text', end: '[/kc_column_text]', args: { content: content } });
},
admin_label : {
render : function(data) {
var html = '', item = '';
/**
* register admin view
*/
if (data.map.admin_view !== undefined)
{
if (typeof(window['kc_admin_view_'+data.map.admin_view] ) == 'function')
item = window['kc_admin_view_'+data.map.admin_view]( data.params.args, data.el );
else if (typeof kc.params.admin_view[data.map.admin_view] == 'function')
item = kc.params.admin_view[data.map.admin_view]( data.params.args, data.el );
else console.log('KC Error: the admin_view function "'+data.map.admin_view+'" is undefined');
if (item !== '')
{
return '<div class="admin-view custom-admin-view '+data.map.admin_view+'">'+item.replace(/<script/g, '<script').replace(/<iframe/g, '<iframe').replace(/<\/iframe>/g, '</iframe>').replace(/ on[\w]*\s*=/g, ' data-on')+'</div>';
}
}
var dmp = kc.params.merge( data.map.params ), dp = data.params, mpa = kc.params.admin_label;
for (var n in dmp) {
item = '';
if (dmp[n].name == 'image' && dp.args[dmp[n].name] === undefined)
dp.args[dmp[n].name] = '';
if (dmp[n].admin_label === true && dp.args[dmp[n].name] !== undefined && dp.args[dmp[n].name] != '__empty__')
{
if(typeof mpa[dmp[n].type] == 'function')
{
item = mpa[dmp[n].type](
dp.args[dmp[n].name], dmp[n].label, data.el
);
}
else
{
item = '<span class="admin-view-label"><strong>'+dmp[n].name+'</strong></span> : ';
item += kc.tools.unesc_attr( dp.args[dmp[n].name] );
}
if( item !== '' )
{
html += '<div class="admin-view '+dmp[n].name+'" data-name="'+dmp[n].name+'">'+item.replace(/<script/g, '<script').replace(/<\/script>/g, '</script>').replace(/<iframe/g, '<iframe').replace(/<\/iframe>/g, '</iframe>').replace(/ on[\w]*\s*=/g, ' data-on')+'</div>';
}
}
}
return html;
},
update : function(){
clearTimeout( this.timer );
this.timer = setTimeout(function(el){
var name = $(el).data('name').trim(),
model = kc.get.model( el );
if( kc.storage[ model ] === undefined )
return;
kc.storage[ model ].args[ name ] = el.innerHTML;
if( name == 'content' )
kc.storage[ model ].content = el.innerHTML;
kc.confirm( true );
}, 500, this );
},
attach_image : function( id ){
return '<img src="'+kc_ajax_url+'?action=kc_get_thumbn&id='+id+'" />';
},
attach_images : function( ids ){
if( ids === undefined || ids === '' )
return '<img src="'+kc_ajax_url+'?action=kc_get_thumbn&id=undefined" />';
var html = '';
ids.split(',').forEach( function( id ){
html += '<img src="'+kc_ajax_url+'?action=kc_get_thumbn&id='+id+'&size=thumbnail" />';
});
return html;
},
textarea_html : function( content ){
return content;
},
editor : function( content ){
return kc.tools.base64.decode( content );
},
textarea : function( content, label ){
var string = kc.tools.esc( kc.tools.base64.decode( content.replace(/(?:\r\n|\r|\n)/g,'') ) ).toString();
string = '<span class="admin-view-label"><strong>'+label+' : </strong></span>'+string;
if( string.length < 350 )
return string;
else return string.substr(0, 347)+'...';
},
kc_box : function( content ){
var html = '', obj;
try{
content = kc.tools.base64.decode( content.replace(/(?:\r\n|\r|\n)/g,'') ).toString();
content = content.replace(/\%SITE\_URL\%/g, kc_site_url ).replace(/\%SITE\_URI\%/g, kc_site_url );
obj = JSON.parse( content );
}catch(e){
obj = [{tag:'div',children:[{tag:'text', content:'There was an error with content structure.'}]}];
}
function loop( items ){
if( items === undefined || items === null )
return '';
var html = '';
items.forEach( function(n){
if( n.tag != 'text' ){
html += '<'+n.tag;
if( typeof n.attributes != 'object' )
n.attributes = {};
if( n.tag == 'column' ){
n.attributes.class += ' '+n.attributes.cols;
}else if( n.tag == 'img' ){
if( n.attributes.src === undefined || n.attributes.src === '' )
n.attributes.src = kc_plugin_url+'/assets/images/get_start.jpg';
}
for( var i in n.attributes )
html += ' '+i+'="'+n.attributes[i]+'"';
if( n.tag == 'img' )
html += '/';
html += '>';
if( typeof n.children == 'object' )
html += loop( n.children );
if( n.tag != 'img' )
html += '</'+n.tag+'>';
}else html += n.content;
});
return html;
}
return loop( obj );
},
wp_widget : function( data ){
var obj;
try{
obj = JSON.parse( kc.tools.base64.decode( data ) );
}catch(e){
return 'There was an error with content structure.';
}
var html = '', vl, prp;
for( var n in obj ){
html += '<strong class="prime">'+n.replace(/\-/g,' ').replace(/\_/g,' ')+'</strong>: ';
prp = [];
for( var m in obj[n] ){
if( obj[n][m] !== '' ){
vl = kc.tools.esc( obj[n][m] );
if( vl.length > 250 )
vl = vl.substr(0,247)+'...';
prp[prp.length] = '<strong>'+m+'</strong>: '+vl;
}
}
html += prp.join(', ');
}
return html;
},
icon_picker : function( data, label, el ){
return '<i class="'+data+'" style="font-size: 14px;margin: 0px;font-weight: bold;"></i>';
},
color_picker : function( data, label ){
return '<strong>'+label+'</strong>: '+data+' <span style="background: '+data+'"></span>';
}
},
admin_view : {
image : function( params, el ){
var url = kc_ajax_url+'?action=kc_get_thumbn&id=undefined',
mid = ( params.image !== undefined ) ? params.image : '',
featured_img_id = $("#_thumbnail_id").val();
if( params.image_source !== undefined ){
switch( params.image_source ){
case 'media_library':
url = kc_ajax_url+'?action=kc_get_thumbn&id='+mid;
break;
case 'featured_image':
url = kc_ajax_url+'?action=kc_get_thumbn&id=' + featured_img_id;
break;
case 'external_link':
url = params.image_external_link;
break;
}
}
setTimeout(function(el){
el.find('.admin-view.custom-admin-view img')
.attr({title: 'Click to select media from library' })
.css({cursor: 'pointer' })
.on( 'click', { callback: function( atts ){
var url = atts.url;
if( typeof atts.sizes.medium == 'object' )
url = atts.sizes.medium.url;
this.el.src = url;
var model = kc.get.model( this.el );
if( kc.storage[ model ] === undefined )
return;
kc.storage[ model ].args[ 'image' ] = atts.id;
kc.storage[ model ].args[ 'image_source' ] = 'media_library';
$(this.el).parent().find('.kc-param').val( atts.id );
kc.confirm( true );
}, atts : { frame: 'select' } }, kc.tools.media.open );
}, 10, el);
return '<input type="hidden" class="kc-param" value="'+mid+'" /><img src="'+url+'" />';
},
gmaps : function( params, el ){
var value = '', html = '';
if (typeof(params['title'] ) != 'undefined' && params['title'] !== '')
html += '<strong>Title</strong>: '+params['title']+' ';
if (typeof(params['map_location'] ) != 'undefined' && params['map_location'] !== '')
value = kc.tools.base64.decode (params['map_location']);
if (value !== '')
{
value = value.match(/src\=\"([^\s]*)\"\s/);
if (value !== null && typeof( value[1] ) != 'undefined')
{
value = value[1].split('!');
value = value[value.length-6].substr(2);
if (value.match(/[^0-9,.]/) !== null)
html += '<strong>Location</strong>: '+kc.tools.base64.decode (value);
}
}
return html;
},
text : function( params, el ){
setTimeout( function(el){
el.find('.admin-view.custom-admin-view')
.attr({contentEditable : true})
.data({name: 'content'})
.on( 'keyup', kc.params.admin_label.update );
if( window.chrome === undefined ){
el.find('.admin-view.custom-admin-view')
.on( 'mousedown', function( e ){
var el = this;
while( el.parentNode ){
el = el.parentNode;
if( el.draggable === true ){
el.draggable = false;
el.templDraggable = true;
}
}
}).on( 'blur', function( e ){
var el = this;
while( el.parentNode ){
el = el.parentNode;
if( el.templDraggable === true ){
el.draggable = true;
el.templDraggable = null;
}
}
});
}
}, 10, el );
if( window.switchEditors !== undefined )
return switchEditors.wpautop( params['content'] );
else return params['content'];
}
},
fields : {
render : function( el, params, data ){
if( typeof params != 'object' )
return false;
var param, value, atts;
/* Since ver 2.6.3.3*/
var events_stack = [];
for( var index in params )
{
param = params[ index ]; value = '';
if( data[param.name] !== undefined )
value = data[param.name];
else if( param !== undefined && param.value !== undefined )
{
value = param.value.toString();
if( value.indexOf( '%time%' ) > -1 ){
var d = new Date();
value = value.replace( '%time%', d.getTime() );
}
}
if( value == '__empty__' )
value = '';
if( kc_param_types_support.indexOf( param.type ) == -1 )
param.type = 'undefined';
atts = {
value : value,
options : (( param.options !== undefined ) ? param.options : [] ),
params : (( param.params !== undefined ) ? param.params : [] ),
name : param.name,
type : param.type
};
if( param.type != 'textarea_html' )
atts.value = kc.tools.unesc_attr( atts.value );
var tmpl_html = kc.template( 'field', {
label: param.label,
content: kc.template( 'field-type-'+param.type, atts ),
des: param.description,
name: param.type,
base: param.name,
relation: param.relation
});
tmpl_html = tmpl_html.replace( /\<\;script/g, '<script' ).replace( /\<\;\/script\>\;/g, '</script>' );
var field = $( tmpl_html );
$( el ).append( field );
events_stack.push([$.extend(true, {}, param), $.extend(true, {}, atts), field, value]);
/*setTimeout( function (param, el, atts, field) {
if (param.relation !== undefined ) {
var thru = false, pr = param.relation;
if( pr.parent !== undefined && ( pr.show_when !== undefined || pr.hide_when !== undefined ) ){
var parent = el.find('>.field-base-'+pr.parent);
if( parent.get(0) ){
if( parent.data('child') !== undefined )
{
var child = parent.data('child');
child[child.length] = field;
}
else
{
var child = [];
child[0] = field;
}
parent.data({ child : child });
var iparent = parent.find('input.kc-param[type="radio"],input.kc-param[type="checkbox"],select.kc-param');
if( pr.show_when !== undefined ){
if( typeof pr.show_when != 'object' )
pr.show_when = pr.show_when.toString().split(',');
}
if( pr.hide_when !== undefined ){
if( typeof pr.hide_when != 'object' )
pr.hide_when = pr.hide_when.toString().split(',');
}
if( iparent.get(0) ){
thru = true;
iparent.on( 'change',
{
el: field,
std: value,
show: pr.show_when,
hide: pr.hide_when,
iparent: iparent,
parent : parent
},
function(e){
var vparent = e.data.iparent.serializeArray(), sh, hi;
if( e.data.show !== undefined )
sh = false;
if( e.data.hide !== undefined )
hi = true;
for( var n in vparent ){
if( e.data.show !== undefined ){
if( e.data.show.indexOf( vparent[n].value ) > -1 ){
e.data.el.removeClass('relation-hidden');
e.data.el.find('.kc-param:not(.kc-empty-param)').each(function(){
if( this.value === '' ){
if( $(this).data('encode') == 'base64' )
e.data.std = kc.tools.base64.decode(e.data.std);
$(this).val(kc.tools.unesc_attr(e.data.std)).change();
$(this).closest('.m-p-r-content').find('.kc-attach-field-wrp .img-wrp').remove();
}
});
sh = true;
}
}
if( e.data.hide !== undefined ){
if( e.data.hide.indexOf( vparent[n].value ) > -1 ){
e.data.el.addClass('relation-hidden');
hi = false;
}
}
}
if( e.data.show !== undefined ){
if( sh === false )
e.data.el.addClass('relation-hidden');
}
if( e.data.hide !== undefined ){
if( hi === true )
e.data.el.removeClass('relation-hidden');
}
if( e.data.parent.hasClass('relation-hidden'))
e.data.el.addClass('relation-hidden');
if( e.data.el.data('child') !== undefined ){
if( e.data.el.hasClass('relation-hidden') ){
function hide_children( child ){
child.forEach( function(_child){
_child.addClass('relation-hidden');
if( _child.data('child') !== undefined ){
hide_children( _child.data('child') );
}
});
}
hide_children( e.data.el.data('child') );
}else{
e.data.el.find('input.kc-param[type="radio"],input.kc-param[type="checkbox"],select.kc-param').trigger('change');
}
}
}
).addClass('m-p-rela');
iparent.trigger('change');
}
}
}
// Show back if invalid config
if( thru === false )
field.removeClass('relation-hidden');
}
if( typeof atts.callback == 'function' ){
// callback from field-type template
//setTimeout( atts.callback, 1, field, $, atts );
atts.callback(field, $, atts);
}
}, 1, param, el, atts, field);*/
}
$(el).find('.kc-param').on( 'change keyup', function(e){
var pop = kc.get.popup( el );
if( pop === null || typeof pop.data('change') === undefined )
return;
var calb = pop.data('change');
if( typeof calb == 'function' ){
calb( this );
}else if( calb !== undefined && calb.length > 0 ){
for( i = 0; i< calb.length; i++ ){
if( typeof calb[i] == 'function' )
calb[i]( this, pop, e );
}
}
});
setTimeout(function(datas, el){
var param, atts, field, value, parents = [], iparents = [];
for (var i in datas) {
param = datas[i][0];
atts = datas[i][1];
field = datas[i][2];
value = datas[i][3];
if( param.relation !== undefined ){
var thru = false, pr = param.relation, iparent;
if( pr.parent !== undefined && ( pr.show_when !== undefined || pr.hide_when !== undefined ) ){
if( parents[ pr.parent ] !== undefined ){
parent = parents[ pr.parent ];
}
else{
parent = el.find('>.field-base-'+pr.parent);
parents[ pr.parent ] = parent;
}
if( parent.get(0) ){
if( parent.data('child') !== undefined )
{
var child = parent.data('child');
child[child.length] = field;
}
else
{
var child = [];
child[0] = field;
}
parent.data({ child : child });
if( iparents[ pr.parent ] !== undefined ){
iparent = iparents[ pr.parent ];
}
else{
iparent = parent.find('input.kc-param[type="radio"],input.kc-param[type="checkbox"],select.kc-param');
iparents[ pr.parent ] = iparent;
}
if( pr.show_when !== undefined ){
if( typeof pr.show_when != 'object' )
pr.show_when = pr.show_when.toString().split(',');
}
if( pr.hide_when !== undefined ){
if( typeof pr.hide_when != 'object' )
pr.hide_when = pr.hide_when.toString().split(',');
}
if( iparent.get(0) ){
thru = true;
iparent.on( 'change',
{
el: field,
std: value,
show: pr.show_when,
hide: pr.hide_when,
iparent: iparent,
parent : parent
},
function(e){
var vparent = e.data.iparent.serializeArray(), sh, hi;
if( e.data.show !== undefined )
sh = false;
if( e.data.hide !== undefined )
hi = true;
for( var n in vparent ){
if( e.data.show !== undefined ){
if( e.data.show.indexOf( vparent[n].value ) > -1 ){
e.data.el.removeClass('relation-hidden');
e.data.el.find('.kc-param:not(.kc-empty-param)').each(function(){
if( this.value === '' ){
if( $(this).data('encode') == 'base64' )
e.data.std = kc.tools.base64.decode(e.data.std);
$(this).val(kc.tools.unesc_attr(e.data.std)).change();
$(this).closest('.m-p-r-content').find('.kc-attach-field-wrp .img-wrp').remove();
}
});
sh = true;
}
}
if( e.data.hide !== undefined ){
if( e.data.hide.indexOf( vparent[n].value ) > -1 ){
e.data.el.addClass('relation-hidden');
hi = false;
}
}
}
if( e.data.show !== undefined ){
if( sh === false )
e.data.el.addClass('relation-hidden');
}
if( e.data.hide !== undefined ){
if( hi === true )
e.data.el.removeClass('relation-hidden');
}
if( e.data.parent.hasClass('relation-hidden'))
e.data.el.addClass('relation-hidden');
if( e.data.el.data('child') !== undefined ){
if( e.data.el.hasClass('relation-hidden') ){
function hide_children( child ){
child.forEach( function(_child){
_child.addClass('relation-hidden');
if( _child.data('child') !== undefined ){
hide_children( _child.data('child') );
}
});
}
hide_children( e.data.el.data('child') );
}else{
e.data.el.find('input.kc-param[type="radio"],input.kc-param[type="checkbox"],select.kc-param').trigger('change');
}
}
}
).addClass('m-p-rela');
}
}
}
// Show back if invalid config
if( thru === false )
field.removeClass('relation-hidden');
}
if( typeof atts.callback == 'function' ){
// callback from field-type template
//setTimeout( atts.callback, 1, field, $, atts );
atts.callback(field, $, atts);
}
}
for(var ip in iparents){
if( iparents[ip].get(0) ) iparents[ip].trigger('change');
}
delete datas, param, atts, field, value;
}, 1, events_stack, el);
},
tabs : function( tab, form ){
form.addClass('fields-edit-form'); // make this form as settings param to save
var model = kc.get.model( tab ),
tab_content = $(tab).closest('.m-p-wrap').find('.m-p-body').find('>.'+$(tab).data('tab') ),
fields = $(tab).closest('.m-p-wrap').find('.m-p-body').find('>.fields-edit-form');
var cfg = $(tab).data( 'cfg' ).split('|'),
data = kc.storage[ cfg[1] ],
map = $().extend( {}, kc.maps['_std'] );
if( data === undefined || kc.maps[ data.name ] === undefined )
return false;
map = $().extend( map, kc.maps[ cfg[2] ] );
kc.params.fields.render( tab_content, map.params[cfg[0]] , data.args );
$(tab).data( 'callback', function( tit, tab ){/* ... */ });
return tab_content;
},
group : {
callback : function( wrp ){
this.el = wrp;
kc.trigger( this );
wrp.find('.kc-group-row').first().addClass('active');
this.re_index( wrp );
this.sortable();
},
events : {
'.kc-group-rows:click': 'actions',
'.kc-add-group:click': 'add_group',
},
actions : function( e ){
var target = $( e.target );
if (target.data('action'))
{
var wrp = $(this).closest('.kc-param-row.field-group');
switch( target.data('action') )
{
case 'collapse' : e.data.collapse( target ); break;
case 'delete' : e.data.remove( target, e.data, wrp ); break;
case 'double' : e.data.double( target, e.data, wrp ); break;
}
}
if (!target.hasClass('kc-add-group') && (target.hasClass('kc-group-controls') || target.hasClass('counter'))) {
e.data.collapse( target );
}
},
collapse : function( el ){
var row = el.closest('.kc-group-row');
if( row.hasClass('active') )
{
row.removeClass('active');
}
else
{
el.closest('.kc-group-rows').
find('.kc-group-row.active').
removeClass('active');
row.addClass('active');
}
},
remove : function( el, obj, wrp ){
if( confirm( kc.__.sure ) ){
el.closest('.kc-group-row').remove();
obj.re_index( wrp );
}
},
double : function( el, obj, wrp ){
var row = el.closest('.kc-group-row'),
clone_values = row.find('.kc-param').serializeArray(),
values = {},
grow = $( kc.template( 'param-group' ) ),
index = row.find('.kc-param').get(0).name;
index = index.substring( index.indexOf('[')+1, index.indexOf(']') );
params = kc.params.fields.group.set_index( wrp.data('params'), wrp.data('name'), index );
row.after( grow );
$.map( clone_values, function( n, i ){
if( n['name'] != undefined )
values[ n['name'] ] = n['value'];
});
kc.params.fields.render( grow.find('.kc-group-body'), params, values );
// reset index of groups list
kc.params.fields.group.re_index( wrp );
obj.collapse( grow.find('li.collapse') );
obj.sortable();
},
add_group : function( e ){
var wrp = $(this).closest('.kc-param-row.field-group');
var grow = $( kc.template( 'param-group' ) );
$(this).before( grow );
var params = kc.params.fields.group.set_index( wrp.data('params'), wrp.data('name'), 0 );
kc.params.fields.render( grow.find('.kc-group-body'), params, {} );
// reset index of groups list
kc.params.fields.group.re_index( wrp );
e.data.collapse( grow.find('li.collapse') );
e.data.sortable();
},
set_index : function( data_params, data_name, index ){
var params = [];
for( var i=0; i<data_params.length; i++ )
{
if( data_params[i]['type'] != 'group' )
{
params[ params.length ] = $().extend( {}, data_params[i] );
if( data_params[i]['name'].indexOf( data_name+'[' ) == -1 )
params[ params.length-1 ]['name'] = data_name+'['+index+']['+data_params[i]['name']+']';
}
}
return params;
},
re_index : function( wrp ){
var i = 1;
wrp.find('.kc-group-row').each(function(){
$(this).find('input.kc-param, select.kc-param, textarea.kc-param').each(function(){
if( this.name.indexOf('[') > -1 ){
var name = this.name.substring(0, this.name.indexOf('[')+1);
name += i;
name += this.name.substr(this.name.indexOf(']'));
this.name = name;
}
this.label = this.name.substr(this.name.indexOf('][')+2 ).replace(']','');
});
var label = $(this).find('.kc-param-row').first().find('input.kc-param, select.kc-param, textarea.kc-param');
if (label.data('added-change') !== 1) {
label.data({'added-change': 1});
label.on('change',function() {
var ct = $(this).closest('.kc-group-row').find('li.counter');
ct.html(this.label + ': ' + kc.tools.esc(this.value));
});
}
var data = label.serializeArray();
if (data[0] !== undefined)
$(this).find('li.counter').html( label.get(0).label+': '+kc.tools.esc( data[0].value ));
i++;
});
},
sortable : function(){
kc.ui.sortable({
items : 'div.kc-group-rows>div.kc-group-row',
handle : '>.kc-group-controls',
helper : ['kc-ui-handle-image', 25, 25 ],
connecting : false,
vertical : true,
end : function( e, el ){
kc.params.fields.group.re_index( $(el).closest('.kc-param-row.field-group') );
}
});
}
},
/*
* (!) Field type CSS
* @ since ver 2.5
*/
css : {
/*
* (!) All screens registered
*/
screens : {},
/*
* (!) re-map css-field to kc-fields with default value options
*/
fields : {
'undefined' : 'text',
'font-family' : 'css_family',
'font-size' : {
type: 'number',
options: {
units: ['px','em','%']
}
},
'font-weight' : {
type: 'select_group',
options: {
custom: true,
tooltip: true,
buttons: {
'': '<i class="fa-ban"></i>',
'300': '300',
'400': '400',
'500': '500',
'600': '600',
'700': '700',
'800': '<strong>800</strong>',
}
}
},
'vertical-align' : {
type: 'select_group',
options: {
custom: true,
tooltip: true,
buttons: {
'': '<i class="fa-ban"></i>',
'initial': 'initial',
'baseline': 'baseline',
'top': 'top',
'bottom': 'bottom',
'middle': 'middle',
'sub': 'sub',
'super': 'super',
'text-top': 'text-top',
'text-bottom': 'text-bottom',
}
}
},
'font-style' : {
type: 'select_group',
options: {
custom: true,
tooltip: true,
buttons: {
'normal': '<i class="fa-ban"></i>',
'italic': '<i style="font-style:italic;font-family:serif">I</i>',
}
}
},
'text-align' : {
type: 'select_group',
options: {
custom: true,
tooltip: true,
buttons: {
'': '<i class="fa-ban"></i>',
'left': '<i class="fa-align-left"></i>',
'center': '<i class="fa-align-center"></i>',
'right': '<i class="fa-align-right"></i>',
'justify': '<i class="fa-align-justify"></i>',
}
}
},
'text-transform' : {
type: 'select_group',
options: {
custom: true,
tooltip: true,
buttons: {
'none': '<i class="fa-ban"></i>',
'uppercase': 'TT',
'capitalize': 'Tt',
'lowercase': 'tt',
}
}
},
'text-decoration' : {
type: 'select_group',
options: {
custom: true,
tooltip: true,
buttons: {
'none': '<i class="fa-ban"></i>',
'underline': '<u>T</u>',
'line-through': '<span style="text-decoration: line-through">T</span>',
}
}
},
'line-height' : {
type: 'number',
options: {
units: ['px','em','%']
}
},
'letter-spacing' : {
type: 'number',
options: {
units: ['px','em','%']
}
},
'overflow' : {
type: 'select',
options: {
'': '=== Select ===',
'auto': 'Auto',
'hidden': 'Hidden',
'inherit': 'Inherit',
'initial': 'Initial',
'overlay': 'Overlay',
'scroll': 'Scroll',
'visible': 'Visible'
}
},
'word-break' : {
type: 'select',
options: {
'': '=== Select ===',
'break-all': 'Break All',
'break-word': 'Break Word',
'inherit': 'Inherit',
'initial': 'Initial',
'normal': 'Normal',
}
},
'color' : 'color_picker',
'background-color' : 'color_picker',
'border-color' : 'color_picker',
'border-top-color' : 'color_picker',
'border-right-color' : 'color_picker',
'border-bottom-color' : 'color_picker',
'border-left-color' : 'color_picker',
'border-style' : {
type: 'select',
options: {
'none': 'None',
'solid': 'Solid',
'dotted': 'Dotted',
'dashed': 'Dashed',
'double': 'Double',
'groove': 'Groove',
'ridge': 'Ridge',
'inset': 'Inset',
'outset': 'Outset',
'initial': 'Initial',
'inherit': 'Inherit',
}
},
'align-items' : {
type: 'select',
options: {
'': '=== Select ===',
'inherit': 'Inherit',
'baseline': 'Baseline',
'center': 'Center',
'flex-end': 'Flex-end',
'flex-start': 'Flex-start',
'initial': 'Tnitial',
'stretch': 'Stretch',
}
},
'border-width' : {
type: 'number',
options: {
units: ['px','em','%']
}
},
'background' : {
type: 'css_background',
label: ''
},
'width' : {
type: 'number',
options: {
units: ['px','em','%']
}
},
'height' : {
type: 'number',
options: {
units: ['px','em','%']
}
},
'margin' : {
type: 'corners',
options: {
'margin-top': 'Top',
'margin-right': 'Right',
'margin-bottom': 'Bottom',
'margin-left': 'Left',
},
des: 'Drag on input to change the value, double click to remove value'
},
'margin-right' : {
type: 'number',
options: {
units: ['px','em']
}
},
'padding' : {
type: 'corners',
options: {
'padding-top': 'Top',
'padding-right': 'Right',
'padding-bottom': 'Bottom',
'padding-left': 'Left',
},
des: 'Drag on input to change the value, double click to remove value'
},
'border' : 'css_border',
'border-radius' : {
type: 'corners',
options: {
'border-top-left-radius': 'Top Left',
'border-top-right-radius': 'Top Right',
'border-bottom-right-radius': 'Bottom Right',
'border-bottom-left-radius': 'Bottom Left',
}
},
'float' : {
type: 'select_group',
options: {
custom: true,
tooltip: true,
buttons: {
'': '<i class="fa-ban"></i>',
'left': 'Left',
'right': 'Right',
'inherit': 'Inherit',
'initial': 'Initial',
'none': 'None',
}
}
},
'position' : {
type: 'select_group',
options: {
custom: true,
tooltip: true,
buttons: {
'': '<i class="fa-ban"></i>',
'static': 'Static',
'absolute': 'Absolute',
'fixed': 'Fixed',
'relative': 'Relative',
'initial': 'Initial',
'inherit': 'Inherit',
}
}
},
'display' : {
type: 'select_group',
options: {
custom: true,
tooltip: true,
buttons: {
'': '<i class="fa-ban"></i>',
'inline-block': 'IB',
'inline': 'Inline',
'block': 'Block',
'flex': 'Flex',
'none': 'None',
}
}
},
'cursor' : {
type: 'select_group',
options: {
custom: true,
tooltip: true,
buttons: {
'': '<i class="fa-ban"></i>',
'pointer': 'Pointer',
'default': 'Default',
'text': 'Text',
'help': 'Help',
}
}
},
'opacity' : {
type: 'number_slider',
options: {
min: 0,
max: 100,
ratio: 0.01
},
value: ''
},
'box-shadow' : 'text',
'text-shadow' : 'text',
'gap' : {
type: 'number',
options: {
units: ['px','em']
}
},
'max-width' : {
type: 'number',
options: {
units: ['px','em','%']
}
},
'custom' : {
type: 'custom',
des: '<ul><li>- Click outside of the textarea to apply changes.</li><li>- This has a higher priority than the visual selection</li></ul>'
}
},
/*
* (!) remap structure {
screen: {
property|selector: { selector, label, group }
color|a:hover: { selector, label, group }
}
}
*/
remap : function( ops ){
this.screens = {};
// loop sections
for( var i = 0; i < ops.length; i++ ){
this.remap_screen( ops[i] );
}
return this.screens;
},
remap_screen : function( op ){
var np, i, gr, itm, scr, screens = ['any'], properties, prs;
if( op.screens !== undefined )
screens = op.screens.split(',');
for (gr in op) { // loop grs
if (gr != 'screens') {
for (itm = 0; itm < op[gr].length; itm++) { // loop in itms
if( op[gr][itm].property !== undefined ){
/* start update multiple properties */
properties = op[gr][itm].property.replace(/\ /g, '').split(',');
labels = (op[gr][itm].label !== undefined) ? op[gr][itm].label.split(',') : [];
for (prs in properties) {
if (labels[prs] !== undefined)
op[gr][itm].label = labels[prs];
else op[gr][itm].label = properties[prs].replace(/\-/g, ' ').replace(/\_/g, ' ');
np = properties[prs]+'|';
/* end update multiple properties */
if( op[gr][itm].selector !== undefined && op[gr][itm].selector !== '' )
np += op[gr][itm].selector;
for( i = 0; i < screens.length; i++ ){ // loop screens
scr = screens[i].trim();
if( this.screens[scr] === undefined )
this.screens[scr] = {};
if( this.screens[scr][gr] === undefined )
this.screens[scr][gr] = {};
this.screens[scr][gr][np] = $.extend({}, op[gr][itm]);
}
}
}
}
}
}
},
render : function( data, wrp ){
var screens = this.remap( data.options ), i, li, values,
scr_nav = $('<ul class="kc-css-screens-nav"></ul>'),
keys = Object.keys(screens).sort(function(a,b){ return parseInt(a) < parseInt(b); });
try{
values = JSON.parse( data.value.replace(/(?:\r\n|\r|\n)/g, '').replace(/\`/g, '"') );
if( values['kc-css'] === undefined || typeof values['kc-css'] != 'object' )
values = {};
else values = values['kc-css'];
}catch( ex ){ values = {}; }
for( i = 0; i < keys.length; i++ ){
li = $('<li data-screen="'+keys[i]+'">'+this.responsive_icon(keys[i])+'</li>');
if( keys[i] == 'any' )
scr_nav.prepend( li );
else scr_nav.append( li );
li.data('predatas', [
screens[keys[i]],
wrp.get(0),
keys[i],
(values[keys[i]] !== undefined ? values[keys[i]] : {})
]);
/*
this.render_groups(
screens[keys[i]],
wrp,
keys[i],
(values[keys[i]] !== undefined ? values[keys[i]] : {})
);*/
}
/*
* If there are only screen "any", then hidden the screens nav
*/
if( keys.length === 1 && keys[0] == 'any' )
scr_nav.addClass('kc-css-hidden');
wrp.prepend( scr_nav );
// return to default height,
// set a default height to prevent flash screen when switching tabs
wrp.css({ 'min-height': '' });
// Add events after everything has been rendered
kc.trigger({
el: wrp,
events: {
'click': 'click',
'.kc-css-screens-nav li:click': 'screen_tabs'
},
click: function(e){
if( e.target.className == 'kc-css-important' ){
var prow = $(e.target).closest('.kc-param-row');
if( prow.hasClass('is-important') )
prow.removeClass('is-important');
else prow.addClass('is-important');
$(e.target).parent().find('.kc-css-param').trigger('change');
}
},
screen_tabs: function(e){
var el = $(this), sc = el.data('screen'), pd = el.data('predatas');
if (pd !== null) {
kc.params.fields.css.render_groups( pd[0], $(pd[1]), pd[2], pd[3] );
el.data('predatas', null);
}
el.parent().find('>li.active').removeClass('active');
el.addClass('active');
var rows = el.closest('.kc-css-rows').find('.kc-css-screen');
rows.addClass('kc-css-hidden');
rows.filter('.kc-css-screen-'+sc).removeClass('kc-css-hidden');
}
});
var screen = $('body').data('screen-size');
if ($('#kc-top-toolbar li.active').length > 0)
screen = $('#kc-top-toolbar li.active').data('screen');
if( screen == '100%' )
screen = 'any';
else if( screen == '768' )
screen = '999';
if( screen !== undefined && scr_nav.find('li[data-screen="'+screen+'"]').length > 0 ) {
scr_nav.find('li[data-screen="'+screen+'"]').trigger('click');
}else wrp.find('.kc-css-screens-nav li').first().trigger('click');
},
render_groups : function( groups, wrp, sc, values ){
var screen_el = $('<div data-screen="'+sc+'" class="kc-css-screen kc-css-hidden kc-css-screen-'+sc+'"></div>'),
nav = $('<ul class="kc-css-group-nav"></ul>'),
grps = Object.keys( groups ),
name, des, type, n, label, value, is_impt, i;
for( n in grps )
nav.append( '<li>'+grps[n].replace(/\_/g,' ')+'</li>' );
if( sc == 'any' )
nav.append( '<li class="right">any screens</li>' );
else if( sc.indexOf('-') > -1 )
nav.append( '<li class="right">screen '+sc.replace('-','=>')+'</li>' );
else nav.append( '<li class="right">screen Max '+sc+'px</li>' );
screen_el.append( nav );
if( grps.length <= 1 )
nav.addClass('kc-css-hidden');
for (i in groups) {
for (n in groups[i]) {
name = n.split('|')[0];
des = '';
is_impt = false;
label = name.replace(/\-/g,' ');
atts = kc.params.fields.css.fields[name];
if( atts === undefined ){
console.error('KingComposer: The css property '+name+' is not defined.');
atts = kc.params.fields.css.fields['undefined'];
}
if( values[kc.tools.esc_slug(i)] !== undefined && values[kc.tools.esc_slug(i)][n] !== undefined )
value = values[kc.tools.esc_slug(i)][n];
else if( groups[i][n].value !== undefined )
value = groups[i][n].value;
else if( atts.value !== undefined )
value = atts.value;
else value = '';
if( atts === undefined ){
type = 'underfined';
atts = [];
}else if( typeof atts == 'string' )
type = atts;
else if( atts.type !== undefined )
type = atts.type;
else if( atts.type === undefined )
type = 'text';
if( atts.label !== undefined )
label = atts.label;
if( groups[i][n].label !== undefined )
label = groups[i][n].label;
if( atts.des !== undefined )
des = atts.des;
if( groups[i][n].des !== undefined )
des = groups[i][n].des;
if( kc_param_types_support.indexOf( type ) == -1 )
type = 'text';
if( value.toString().indexOf('!important') > -1 ){
value = value.replace('!important','').trim();
is_impt = true;
}
if( type == 'custom' ){
value = value.replace(/\;/g, ";\n");
}
atts = {
value : value,
options : (( atts.options !== undefined ) ? atts.options : [] ),
params : [],
name : 'kc-css['+sc+']['+kc.tools.esc_slug(i)+']['+n+']',
type : type,
label : label
};
if( type != 'textarea_html' )
atts.value = kc.tools.unesc_attr( atts.value );
var tmpl_html = kc.template( 'field', {
label : label,
content : kc.template( 'field-type-'+type, atts ),
name : type,
des : des,
base : n,
});
tmpl_html = tmpl_html
.replace( /\<\;script/g, '<script' )
.replace( /\<\;\/script\>\;/g, '</script>' )
.replace( /kc\-param\"/g, 'kc-css-param"' )
.replace( /kc\-param /g, 'kc-css-param ' );
var field = $( tmpl_html );
screen_el.append( field );
if( is_impt === true )
field.addClass( 'is-important' );
field.addClass( 'kc-css-group-'+kc.tools.esc_slug( i )+' kc-css-hidden' )
.attr({'data-name': n.replace(/\"/g,'') })
.append('<span class="kc-css-important" title="Important"></span>');
if( typeof atts.callback == 'function' )
setTimeout( atts.callback, 1, field, $, atts );
//if has refer field
if( undefined != groups[i][n]['refer'] ){
for (rf in groups[i][n]['refer']){
var rfn = groups[i][n]['refer'][rf]['property'] + '|' + groups[i][n]['refer'][rf]['selector'];
atts = {
value : rfn,
options : (( atts.options !== undefined ) ? atts.options : [] ),
params : [],
name : 'kc-css['+sc+']['+kc.tools.esc_slug(i)+']['+n+']',
type : 'hidden',
label : ''
};
var rftmpl_html = kc.template( 'field-type-hidden', atts );
rftmpl_html = rftmpl_html
.replace( /\<\;script/g, '<script' )
.replace( /\<\;\/script\>\;/g, '</script>' )
.replace( /kc\-param\"/g, 'kc-css-refer"' )
.replace( /kc\-param /g, 'kc-css-refer' );
var rfield = $( rftmpl_html );
screen_el.append( rfield );
}
}
}
}
wrp.append( screen_el );
screen_el.find('.kc-css-group-nav li').on('click', function(e){
var el = $(this),
rows = el.closest('.kc-css-screen').find('>.kc-param-row');
slug = kc.tools.esc_slug( el.html() );
if( el.hasClass('right') )
return;
el.parent().find('>li.active').removeClass('active');
el.addClass('active');
rows.addClass('kc-css-hidden');
rows.filter('.kc-css-group-'+slug).removeClass('kc-css-hidden');
}).first().trigger('click');
kc.do_action( 'kc-css-field-change', wrp, wrp.closest('.kc-params-popup') );
delete n, nav, name, des, type, value, grps, i;
},
responsive_icon : function( sc ){
if( sc == 'any' )
return '<i class="fa-desktop"></i>';
sc = parseInt(sc);
if( sc < 480 )
return '<i class="fa-mobile"></i>';
else if( sc < 768 )
return '<i style="transform:rotate(90deg)" class="fa-mobile"></i>';
else if( sc < 1000 )
return '<i class="fa-tablet"></i>';
else if( sc < 1025 )
return '<i style="transform:rotate(90deg)" class="fa-tablet"></i>';
return '<i class="fa-desktop"></i>';
},
save_fields : function( pop ){
pop.find('.kc-param-row.field-css').each(function(){
$(this).find('.kc-field-css-value').val(kc.params.fields.css.field_values(this));
});
/*
* when use new css system, we will remove all data of old css system
*/
try{
delete kc.storage[ pop.data('model') ].args.css;
}catch( err ){}
},
field_values : function(field) {
var el = $(field).find('.kc-field-css-value'),
newcss = this.get_fields($(field), true),
css = el.val();
try{
css = JSON.parse(css.replace(/(?:\r\n|\r|\n)/g, '').replace(/\`/g, '"'));
if (css['kc-css'] === undefined)
css = {'kc-css': {}};
}catch(ex){
css = {'kc-css': {}};
}
if (newcss['kc-css'] !== undefined) {
for (var scr in newcss['kc-css']) {
if( Object.keys( newcss['kc-css'][scr] ).length === 0 )
delete css['kc-css'][scr];
else
css['kc-css'][scr] = newcss['kc-css'][scr];
}
css = kc.params.fields.css.sort_screens(css);
css = JSON.stringify(css).replace(/\"/g,'`');
//el.val(css);
return css;
}
return '';
},
get_fields : function( wrp, isobj ){
var impt = {},
inputs = wrp.find('.kc-css-param').serializeArray(),
refers = wrp.find('.kc-css-refer').serializeArray(),
values = kc.tools.reIndexForm( inputs, [] ),
rf_values = kc.tools.reIndexForm( refers, [] ),
s, g, p, rfp, rfps;
wrp.find('.kc-param-row.is-important').each(function(){
impt[$(this).find('.kc-css-param').attr('name')] = true;
});
for( s in values['kc-css'] ){ // loop screen
if( typeof values['kc-css'][s] == 'object' ){
for( g in values['kc-css'][s] ){ // loop group
if( typeof values['kc-css'][s][g] == 'object' ){
for (p in values['kc-css'][s][g])
{ // loop properties
values['kc-css'][s][g][p] = values['kc-css'][s][g][p]
.toString().replace(/(?:\r\n|\r|\n)/g, '')
.replace(/\`/g,'');
if (values['kc-css'][s][g][p] === '')
delete values['kc-css'][s][g][p];
// This field has been marked as important
else if (impt['kc-css['+s+']['+g+']['+p+']'] === true && values['kc-css'][s][g][p] !== '')
values['kc-css'][s][g][p] = values['kc-css'][s][g][p]+' !important';
//add refer values
if( values['kc-css'][s][g][p] != '' &&
typeof rf_values['kc-css'] == 'object' &&
typeof rf_values['kc-css'][s] == 'object' &&
typeof rf_values['kc-css'][s][g] == 'object' &&
typeof rf_values['kc-css'][s][g][p] == 'string'){
rfps = rf_values['kc-css'][s][g][p].split(',');
for( rfp in rfps){
values['kc-css'][s][g][ rfps[rfp] ] = values['kc-css'][s][g][p];
}
}
}
}
if( Object.keys( values['kc-css'][s][g] ).length === 0 )
delete values['kc-css'][s][g];
}
/*
if( Object.keys( values['kc-css'][s] ).length === 0 )
delete values['kc-css'][s];*/
}else if( values['kc-css'][s] === '' )
delete values['kc-css'][s];
}
if (Object.keys(values['kc-css']).length > 0) {
if (isobj === true)
return values;
else return JSON.stringify(values).replace(/\"/g,'`');
}else return '';
},
sort_screens : function(css) {
var keys = [], scr, sort = {'kc-css': {}}, i, j, t;
for (scr in css['kc-css']) {
if (scr == 'any')
sort['kc-css']['any'] = css['kc-css']['any'];
else keys.push(parseInt(scr))
}
for (i=0; i<keys.length; i++) {
for (j=i+1; j<keys.length; j++) {
if (keys[i] < keys[j]) {
t = keys[j];
keys[j] = keys[i];
keys[i] = t;
}
}
}
for (scr in keys) {
sort['kc-css'][keys[scr].toString()] = css['kc-css'][keys[scr].toString()];
}
return sort;
}
}
},
merge : function( input ){
if( input === undefined || input == '' )
return [];
var params = [], merge = [];
if( typeof input == 'object' )
params = input;
else if( kc.maps[ input ] !== undefined )
params = kc.maps[ input ].params;
if( params[0] !== undefined ){
return params;
}else{
var i, j;
for( i in params ){
if( params[ i ][0] !== undefined ){
j = 0;
for( j in params[ i ] )
merge.push( params[ i ][ j ] );
}
}
}
return merge;
},
get_types : function( name ){
var merge = this.merge( name ), params = {};
for( var i in merge ){
if( merge[i].name !== undefined ){
params[merge[i].name] = merge[i].type;
}
}
return params;
},
get_values : function( name ){
var merge = this.merge( name ), params = {};
for( var i in merge ){
if( merge[i].name !== undefined && merge[i].value !== undefined ){
params[merge[i].name] = merge[i].value;
}
}
return params;
},
get_atts : function( name ){
var atts = '', params = this.get_values('kc_row');
for( var name in params )
atts += ' '+name+'="'+kc.tools.esc_attr( params[name] )+'"';
return atts;
}
} );
} )( jQuery );