%PDF- %PDF-
| Direktori : /home/dopla/www/wp-content/plugins/kingcomposer/assets/js/ |
| Current File : /home/dopla/www/wp-content/plugins/kingcomposer/assets/js/kc.fonts.js |
/**
*
* (@) kc.fonts.js
* (c) Copyright by KingComposer.com
* (!) KC Fonts Manager
*
*/
(function($){
window.kcfonts = {
items_tmpl : null,
items : null,
uri : '//fonts.googleapis.com/css?family=',
api : 'https://www.googleapis.com/webfonts/v1/webfonts?key=AIzaSyCrsTDigL61TFHYPHTZduQP1cGi8CLfp90&callback=kcfonts.load',
resources : $('#kc-fonts-manager-resource'),
load : function( json ){
if( typeof json != 'object' || typeof json.items != 'object' ){
alert('Had an error occurs: '+json.error.message);
return;
}
this.items_tmpl = json.items;
this.apply_filter();
this.render( 0 );
this.pagination();
},
render : function( index ){
var html = '';
this.resources.html('');
if( this.items.length > 0 ){
for( var i = index; i< index+60; i++ ){
if( i > this.items.length )
break;
if( this.items[i] === undefined )
continue;
html += this.item( this.items[i], i );
}
}else html = '<div class="kc-ggf-notfount"><div class="error-emoji">\\(^Д^)/</div><div class="error-text">No fonts found!</div></div>';
$('#kc-ggf-render').html( html );
},
item : function( it, index ){
var txt = it.family.replace(/ /g, '+')+':'+it.variants.join(',')/*+'&subset='+it.subsets.join(',')*/;
this.resources.append( '<link onload="kcfonts.done('+index+');" rel="stylesheet" href="'+(this.uri+txt)+'" type="text/css" media="all" />' );
txt = '<div class="kc-ggf-item unload '+(it.family.replace(/ /g, '-'));
if( kc_my_fonts[encodeURIComponent(it.family)] !== undefined )
txt += ' added';
txt += '" data-index="'+index+'">';
txt += '<h3 style="font-family:\''+it.family+'\'" contenteditable>'+it.family+'</h3>';
txt += '<span class="cat" style="font-family:\''+it.family+'\'">'+it.category+'</span> ';
txt += '<span class="variants"><select onchange="kcfonts.variants(this)"><option value="">Style & Weight</option>';
for( var i=0; i<it.variants.length; i++ )
txt += '<option value="'+it.variants[i]+'">'+it.variants[i]+'</option>';
txt += '</select></span>';
txt += '<i class="sl-check" data-action="added" title="You have added this font"></i>';
txt += '<i class="sl-plus" data-action="add" title="Add this font to your site"></i>';
txt += '</div>';
return txt;
},
done : function( index ){
$('.kc-ggf-item[data-index='+index+']').removeClass('unload');
},
render_my : function(){
var html = '',
el = $('#kc-ggf-mf-body'),
item;
el.html('');
if( Object.keys(kc_my_fonts).length > 0 ){
for( var i in kc_my_fonts ){
item = {
family: decodeURIComponent(i),
variants: decodeURIComponent(kc_my_fonts[i][1]).split(','),
subsets: decodeURIComponent(kc_my_fonts[i][0]).split(','),
subsets_val: (kc_my_fonts[i][2]!==undefined) ? decodeURIComponent(kc_my_fonts[i][2]).split(',') : [decodeURIComponent(kc_my_fonts[i][0]).split(',')[0] ],
variants_val: (kc_my_fonts[i][3]!==undefined) ? decodeURIComponent(kc_my_fonts[i][3]).split(',') : decodeURIComponent(kc_my_fonts[i][1]).split(',')
}
html += kcfonts.my_item( item, i );
}
}else html = '<div class="error-text">No fonts found!</div>';
el.html(html);
$('#kc-ggf-my-fonts').css({display: 'inline-block'});
$('body').addClass('kc-show-my-fonts');
if( typeof top.window.kc_fonts_update == 'function' )
top.window.kc_fonts_update( kc_my_fonts );
},
my_item : function( it, index ){
//var txt = it.family.replace(/ /g, '+')+':'+it.variants.join(',')/*+'&subset='+it.subsets.join(',')*/;
var txt = '<div class="kc-ggf-item" data-index="'+index+'">';
txt += '<h3 style="font-family:\''+it.family+'\'" contenteditable>'+it.family+'</h3>';
txt += '<div class="kc-ggf-item-row"><div class="kc-ggf-col"><strong>Style & Weight:</strong><br />';
for( var i=0; i<it.variants.length; i++ ){
txt += '<input ';
if( it.variants_val.indexOf( it.variants[i] ) > -1 )
txt += 'checked ';
txt += 'type="checkbox" id="'+(it.family.replace(/ /g, '-')+it.variants[i])+'" value="'+it.variants[i]+'" /> <label for="'+(it.family.replace(/ /g, '-')+it.variants[i])+'">'+it.variants[i]+'</label><br />';
}
txt += '</div><div class="kc-ggf-col"><strong>Languages:</strong><br />';
for( i=0; i<it.subsets.length; i++ ){
txt += '<input ';
if( it.subsets_val.indexOf( it.subsets[i] ) > -1 )
txt += 'checked ';
txt += 'type="checkbox" id="'+(it.family.replace(/ /g, '-')+it.subsets[i])+'" value="'+it.subsets[i]+'" /> <label for="'+(it.family.replace(/ /g, '-')+it.subsets[i])+'">'+it.subsets[i]+'</label><br />';
}
txt += '</div><button data-action="update"><i class="sl-check"></i> Save Changes</button></div>';
txt += '<i class="sl-close" data-action="delete" title="Delete this font"></i>';
txt += '<i class="sl-settings" data-action="settings" title="Font Settings"></i>';
txt += '<link rel="stylesheet" href="'+(this.uri+it.family.replace(/ /g, '+')+':'+it.variants.join(','))+'" type="text/css" media="all" />';
txt += '</div>';
return txt;
},
pagination : function(){
if( this.pages <= 1 ){
$('.kc-ggf-pagination').html('');
return;
}
var txt = '<ul><li data-action="prev">Previous</li>',
items = $('#kc-ggf-render .kc-ggf-item');
for( var i=1; i<= this.pages; i++ ){
if( i === 1 )
txt += '<li class="active page-1" data-action="page">'+i+'</li>';
else txt += '<li class="page-'+i+'" data-action="page">'+i+'</li>';
}
txt += '<li data-action="next">Next</li>';
txt += '<li class="inf">Display '+(items.first().data('index')+1)+' to '+(items.last().data('index')+1)+' of '+this.items.length+'</li>';
txt += '</ul>';
$('.kc-ggf-pagination').html( txt );
},
filter_values : function(){
this.language = $('#kc-ggf-language').val();
this.category = $('#kc-ggf-category').val();
this.search = $('#kc-ggf-search').val();
},
apply_filter : function(){
this.filter_values();
delete this.items;
this.items = [];
for(var i=0; i < this.items_tmpl.length; i++){
if(this.language !== '' && this.items_tmpl[i].subsets.indexOf(this.language) === -1)
continue;
if(this.category !== '' && this.items_tmpl[i].category != this.category)
continue;
if(this.search !== '' && this.items_tmpl[i].family.toLowerCase().indexOf(this.search.toLowerCase()) === -1)
continue;
this.items.push(this.items_tmpl[i]);
}
this.pages = Math.round(this.items.length / 60);
if( this.pages*60 < this.items.length )
this.pages++;
$('#kc-ggf-header h3 small').html('( Total '+this.items_tmpl.length+' fonts )');
},
variants : function( inp ){
var tit = $(inp).closest('.kc-ggf-item').find('h3').get(0);
if( inp.value === '' ){
tit.style.fontWeight = '';
tit.style.fontStyle = '';
return;
}
if( inp.value.indexOf('italic') > -1 )
tit.style.fontStyle = 'italic';
else tit.style.fontStyle = '';
tit.style.fontWeight = inp.value.replace('italic','');
},
ajax_response : function(json){
var mes = $('<div id="kc-ggf-message"></div>');
mes.css({opacity: 0});
if( json === -1 || json == '-1' ){
mes.addClass('error');
mes.html( 'Error, invalid security nonce, reload and try again' );
}else if( json.stt === 0 ){
mes.addClass('error');
mes.html( json.message );
}else if( json.stt === 1 ){
mes.addClass('success');
mes.html( json.message );
}
$('body').append(mes);
mes.animate({opacity: 1}).delay(3000).animate({opacity: 0}, function(){mes.remove();});
if( json === -1 || json == '-1' )
return 0;
var count = Object.keys(json.data).length,
lt = $('#kc-ggf-header .kc-ggf-load-time span');
$('#kc-ggf-header .kc-ggf-added span').html(count);
if( count < 4 )
lt.html('Fast').attr({class:''});
else if( count < 6 )
lt.html('Medium').attr({class:'medium'});
else if( count < 9 )
lt.html('Slow').attr({class:'slow'});
else lt.html('Very Slow').attr({class:'slow'});
/*
* Render my fonts
*/
kc_my_fonts = json.data;
return json.stt;
}
}
$('#kc-fonts-manager').on('click', function(e){
var el = $(e.target);
switch( el.data('action') ){
case 'page':
kcfonts.render( (parseInt(el.html())-1)*60 );
var items = $('#kc-ggf-render .kc-ggf-item');
$('.kc-ggf-pagination li.active').removeClass('active');
$('.kc-ggf-pagination li.page-'+el.html()).addClass('active');
$('.kc-ggf-pagination li.inf').html('Display '+(items.first().data('index')+1)+' to '+(items.last().data('index')+1)+' of '+kcfonts.items.length);
break;
case 'next':
var nx = el.parent().find('.active').next();
if( nx.html() == 'Next' )
return;
kcfonts.render( (parseInt(nx.html())-1)*60 );
$('.kc-ggf-pagination li.active').removeClass('active');
$('.kc-ggf-pagination li.page-'+nx.html()).addClass('active');
break;
case 'prev':
var pv = el.parent().find('.active').prev();
if( pv.html() == 'Previous' )
return;
kcfonts.render( (parseInt(pv.html())-1)*60 );
$('.kc-ggf-pagination li.active').removeClass('active');
$('.kc-ggf-pagination li.page-'+pv.html()).addClass('active');
break;
case 'add':
if( el.hasClass('fa-spin') )
return;
el.attr({class:'fa fa-spinner fa-spin fa-2x'}).css({opacity:1});
var item = kcfonts.items[ el.closest('.kc-ggf-item').data('index') ];
$.ajax({
url: ajaxurl,
data: {
security: kc_fonts_nonce,
action: 'kc_add_font',
family: encodeURIComponent(item.family),
subsets: encodeURIComponent(item.subsets.join(',')),
variants: encodeURIComponent(item.variants.join(','))
},
el: el,
family: item.family,
method: 'POST',
dataType: 'json',
success: function( json ){
this.el.attr({class:'sl-plus'}).css({opacity:''});
if( kcfonts.ajax_response(json) === 1 ){
$('#kc-ggf-render .kc-ggf-item.'+this.family.replace(/ /g, '-')).addClass('added');
kcfonts.render_my();
$('html,body').animate({scrollTop: 0}, 500);
}
}
});
break;
case 'my-fonts' :
kcfonts.render_my();
break;
case 'close-my-fonts' :
$('#kc-ggf-my-fonts').hide();
$('body').removeClass('kc-show-my-fonts');
break;
case 'delete' :
if( !confirm('Are you sure?') )
return;
if( el.hasClass('fa-spin') )
return;
el.attr({class:'fa fa-spinner fa-spin fa-2x'}).css({opacity:1});
var family = el.closest('.kc-ggf-item').data('index');
$.ajax({
url: ajaxurl,
data: {
security: kc_fonts_nonce,
action: 'kc_delete_font',
family: el.closest('.kc-ggf-item').data('index')
},
el: el,
family: decodeURIComponent(family),
method: 'POST',
dataType: 'json',
success: function( json ){
if( kcfonts.ajax_response(json) === 1 )
$('#kc-ggf-render .kc-ggf-item.'+this.family.replace(/ /g, '-')).removeClass('added');
kcfonts.render_my();
}
});
break;
case 'settings' :
el.parent().find('.kc-ggf-item-row').toggle();
break;
case 'update' :
if( el.find('.fa-spinner').length > 0 )
return;
var cols = el.closest('.kc-ggf-item-row').find('.kc-ggf-col'),
variants = [], subsets = [], family = el.closest('.kc-ggf-item').data('index');
cols.eq(0).find('input:checked').each(function(){
variants.push(this.value);
});
cols.eq(1).find('input:checked').each(function(){
subsets.push(this.value);
});
if( kc_my_fonts[family] !== undefined ){
kc_my_fonts[family][3] = encodeURIComponent(variants.join(','));
kc_my_fonts[family][2] = encodeURIComponent(subsets.join(','));
}
el.html('<i class="fa-spinner fa-spin"></i> saving...').css({background:'#aaa'});
$.ajax({
url: ajaxurl,
data: {
security: kc_fonts_nonce,
action: 'kc_update_font',
datas: kc_my_fonts
},
el: el,
method: 'POST',
dataType: 'json',
success: function( json ){
kcfonts.ajax_response(json);
this.el.html('<i class="sl-check"></i> Save Changes').css({background:''});
}
});
break;
}
});
$('#kc-ggf-filter').on('change', function(){
$('#kc-ggf-render').html('<span class="kc-ggf-loading"><i class="fa-spinner fa-spin fa-2x fa-fw"></i></span>');
$('#kc-ggf-body .kc-ggf-pagination').html('');
var url = kcfonts.api;
if( $(this).val() !== '' )
url += '&sort='+$(this).val();
else url += '&sort=popularity';
$('#kc-fonts-manager-api').html('<script type="text/javascript" src="'+url+'"><'+'/script>');
}).change();
$('#kc-ggf-language,#kc-ggf-category,#kc-ggf-search').on('change keyup', function(){
kcfonts.apply_filter();
kcfonts.render( 0 );
kcfonts.pagination();
});
/*
* Open my fonts
*/
kcfonts.render_my();
})(jQuery);