PluginProbe
Page Builder: Pagelayer – Drag and Drop website builder / 2.2.2
Page Builder: Pagelayer – Drag and Drop website builder v2.2.2
2.2.2 2.2.1 2.2.0 2.1.9 2.1.8 2.1.7 2.1.6 2.1.5 2.1.4 2.1.3 trunk 0.9.0 0.9.1 0.9.2 0.9.3 0.9.4 0.9.5 0.9.6 0.9.7 0.9.8 0.9.9 1.0.0 1.0.2 1.0.3 1.0.4 All 130 releases
← All changes | js/properties.js +2896 -398 1.0.2 → 2.2.2 View file →
@@ -10,8 +10,11 @@
10 10
11 11 // The active pagelayer element
12 12 var pagelayer_active_tab = {};
13 13
14 +// The menu items refrence
15 +var pagelayer_menus_items_ref = {};
16 +
14 17 // Loads the Data
15 18 function pagelayer_data(jEle, clean){
16 19
17 20 var ret = new Object();
@@ -17,25 +20,17 @@
17 20 var ret = new Object();
18 21
19 22 // Get the data
20 23 ret.tag = pagelayer_tag(jEle);
21 - ret.id = jEle.attr('pagelayer-id');
24 + ret.id = pagelayer_id(jEle);
22 25 ret.$ = jEle;
23 26
27 + var ref_data = pagelayer_el_data_ref(jEle);
28 +
24 29 // Parse the attributes
25 - ret.atts = new Object();
26 - ret.tmp = new Object();
30 + ret.atts = JSON.parse(JSON.stringify(ref_data['attr']));
31 + ret.tmp = JSON.parse(JSON.stringify(ref_data['tmp']));
27 32
28 - jQuery.each(jEle[0].attributes, function(index, att){
29 - if(att.name.match(/pagelayer\-a\-/i)){
30 - ret.atts[att.name.substr(12)] = att.value;
31 - }
32 -
33 - if(att.name.match(/pagelayer\-tmp\-/i)){
34 - ret.tmp[att.name.substr(14)] = att.value;
35 - }
36 - });
37 -
38 33 //console.log(ret.atts);
39 34 //console.log(ret.tmp);
40 35
41 36 clean = clean || false;
@@ -62,11 +57,21 @@
62 57 // Loop through all props
63 58 for(var i in pagelayer_tabs){
64 59
65 60 var tab = pagelayer_tabs[i];
66 -
61 +
62 + section_loop1:
67 63 for(var section in all_props[tab]){
68 64
65 + // Any section to skip by post type ?
66 + if(!pagelayer_empty(all_props['post_type_cats'])){
67 + for(var post_type in all_props['post_type_cats']){
68 + if(pagelayer_post.post_type != post_type && jQuery.inArray(section, all_props['post_type_cats'][post_type]) > -1){
69 + continue section_loop1;
70 + }
71 + }
72 + }
73 +
69 74 var props = section in pagelayer_shortcodes[tag] ? pagelayer_shortcodes[tag][section] : pagelayer_styles[section];
70 75
71 76 // In case of widgets its possible !
72 77 if(pagelayer_empty(props)){
@@ -84,12 +89,33 @@
84 89 }
85 90
86 91 // Are we to set this value ?
87 92 if(!(x in ret.atts) && 'default' in prop && !pagelayer_empty(prop['default'])){
88 -
93 +
89 94 // We need to make sure its not a PRO value
90 95 if(!('pro' in prop && pagelayer_empty(pagelayer_pro))){
91 - ret.set[x] = prop['default'];
96 +
97 + var tmp_val = prop['default'];
98 +
99 + // If there is a unit and there is no unit suffix in atts value
100 + if('units' in prop){
101 + if(jQuery.isNumeric(tmp_val)){
102 + tmp_val = tmp_val+prop['units'][0];
103 + }else{
104 + var sep = 'sep' in prop ? prop['sep'] : ',';
105 + var tmp2 = tmp_val.split(sep);
106 + for(var k in tmp2){
107 + if(jQuery.isNumeric(tmp2[k])){
108 + tmp2[k] = tmp2[k]+prop['units'][0];
109 + }
110 + }
111 + tmp_val = tmp2.join(sep);
112 + }
113 + }
114 +
115 + //console.log(x+' - '+tmp_val);
116 + ret.set[x] = tmp_val;
117 +
92 118 }
93 119 }
94 120
95 121 if(!('req' in prop)){
@@ -165,12 +191,13 @@
165 191 // pagelayer-ELPD - Element Properties Dialog
166 192 pagelayer_elpd_html = '<div class="pagelayer-elpd-tabs">'+
167 193 '<div class="pagelayer-elpd-tab" pagelayer-elpd-tab="settings" pagelayer-elpd-active-tab=1>Settings</div>'+
168 194 //'<div class="pagelayer-elpd-tab" pagelayer-elpd-tab="styles">Style</div>'+
169 - '<div class="pagelayer-elpd-tab" pagelayer-elpd-tab="options">Options</div>'+
195 + '<div class="pagelayer-elpd-tab" pagelayer-elpd-tab="options">Style</div>'+
196 + '<div class="pagelayer-advanced-props pagelayer-elpd-tab pagelayer-hidden" pagelayer-elpd-tab="advanced">Advanced</div>'+
170 197 '<div class="pagelayer-elpd-options">'+
171 - '<i class="pli pli-clone" />'+
172 - '<i class="pli pli-trashcan" />'+
198 + '<i class="pli pli-clone" ></i>'+
199 + '<i class="pli pli-trashcan" ></i>'+
173 200 '</div>'+
174 201 '</div>'+
175 202 '<div class="pagelayer-elpd-body"></div>'+
176 203 '<div class="pagelayer-elpd-holder"></div>';
@@ -180,8 +207,9 @@
180 207 pagelayer_elpd = pagelayer.$$('#pagelayer-elpd');
181 208
182 209 pagelayer.$$('.pagelayer-elpd-close').on('click', function(){
183 210 pagelayer_leftbar_tab('pagelayer-shortcodes');
211 + pagelayer.$$('[pagelayer-widget-tab="widgets"]').click();
184 212 pagelayer.$$('.pagelayer-elpd-header').hide();
185 213 pagelayer.$$('.pagelayer-logo').show();
186 214 pagelayer.$$('.pagelayer-elpd-body').removeAttr('pagelayer-element-id').empty();
187 215 pagelayer_active = {};
@@ -197,16 +225,43 @@
197 225 pagelayer_delete_element(pagelayer_active.el.$);
198 226 //pagelayer.$$('.pagelayer-elpd-close').click();
199 227 });
200 228
229 + // The advanced props
230 + pagelayer_elpd.find('.pagelayer-advanced-props').on('click', function(e){
231 + e.preventDefault();
232 + e.stopPropagation();
233 + var propsModal = pagelayer.$$('.pagelayer-props-modal');
234 + if(propsModal.find('.pagelayer-meta-iframe').length < 1){
235 + propsModal.find('.pagelayer-props-wrap').append('<iframe class="pagelayer-meta-iframe" src="'+ pagelayer_post_props +'" style="display:none"></iframe>');
236 + propsModal.find('.pagelayer-meta-iframe').load(function(){
237 + propsModal.find('.pagelayer-props-loading-screen').hide();
238 + propsModal.find('.pagelayer-props-modal-close').css('visibility','visible');
239 + jQuery(this).show();
240 + });
241 + }
242 +
243 + propsModal.show();
244 + pagelayer.$$('.pagelayer-meta-iframe').contents().find('.pagelayer-tab-items[data-tab="post_props"]').click();
245 + });
246 +
201 247 // The tabs
202 - pagelayer_elpd.find('.pagelayer-elpd-tab').on('click', function(){
248 + pagelayer_elpd.find('.pagelayer-elpd-tab').on('click', function(){
249 +
250 + var jEle = jQuery(this);
203 251 var attr = 'pagelayer-elpd-active-tab';
252 + var tab = jEle.attr('pagelayer-elpd-tab');
253 +
254 + if(tab == 'advanced'){
255 + return;
256 + }
257 +
204 258 pagelayer_elpd.find('.pagelayer-elpd-tab').each(function(){
205 259 jQuery(this).removeAttr(attr);
206 260 });
207 - jQuery(this).attr(attr, 1);
208 261
262 + jEle.attr(attr, 1);
263 +
209 264 // Trigger the showing of rows
210 265 pagelayer_elpd_show_rows();
211 266 });
212 267
@@ -214,8 +269,12 @@
214 269
215 270 // Open the properties
216 271 function pagelayer_elpd_open(jEle){
217 272
273 + var el_data = pagelayer_data(jEle);
274 + var is_same = (!pagelayer_empty(pagelayer_active.el) && pagelayer_active.el.id === el_data.id);
275 + var active_tab = pagelayer_elpd.find('[pagelayer-elpd-active-tab]').attr('pagelayer-elpd-tab');
276 +
218 277 // Set pagelayer history FALSE
219 278 pagelayer.history_action = false;
220 279
221 280 // Set the position of the element and show
@@ -221,11 +280,20 @@
221 280 // Set the position of the element and show
222 281 //pagelayer_elpd.css('left', pagelayer_elpd_pos[0]);
223 282 //pagelayer_elpd.css('top', pagelayer_elpd_pos[1]);
224 283 pagelayer_leftbar_tab('pagelayer-elpd');
284 + pagelayer.$$('[pagelayer-elpd-tab=settings]').show();
225 285 pagelayer.$$('.pagelayer-elpd-header').show();
226 286 pagelayer.$$('.pagelayer-logo').hide();
227 287
288 + // Activate settings tab by default or keep active tab if it's the same element
289 + pagelayer_elpd.find('.pagelayer-elpd-tab').removeAttr('pagelayer-elpd-active-tab');
290 + if (is_same && active_tab) {
291 + pagelayer_elpd.find('[pagelayer-elpd-tab="' + active_tab + '"]').attr('pagelayer-elpd-active-tab', 1);
292 + } else {
293 + pagelayer_elpd.find('[pagelayer-elpd-tab="settings"]').attr('pagelayer-elpd-active-tab', 1);
294 + }
295 +
228 296 // The property holder
229 297 var holder = pagelayer.$$('.pagelayer-elpd-body');
230 298 holder.html(' ');
231 299
@@ -242,8 +310,12 @@
242 310
243 311 // Render tooltips for the ELPD
244 312 pagelayer_tooltip_setup();
245 313
314 + // Setup instant properties search
315 + if (typeof pagelayer_setup_properties_search === 'function') {
316 + pagelayer_setup_properties_search();
317 + }
246 318 };
247 319
248 320 // Show the properties window
249 321 function pagelayer_elpd_generate(jEle, holder){
@@ -254,8 +326,9 @@
254 326
255 327 // Is it a valid type ?
256 328 if(pagelayer_empty(pagelayer_shortcodes[el.tag])){
257 329 pagelayer_error('Could not find this shortcode : '+el.tag);
330 + return;
258 331 }
259 332
260 333 // Set the holder
261 334 holder.attr('pagelayer-element-id', el.id);
@@ -267,11 +340,22 @@
267 340
268 341 for(var i in pagelayer_tabs){
269 342 var tab = pagelayer_tabs[i];
270 343 var section_close = false;// First section always open
344 +
345 + section_loop2:
271 346 for(var section in all_props[tab]){
272 347 //console.log(tab+' '+section);
273 -
348 +
349 + // Any section to skip by post type ?
350 + if(!pagelayer_empty(all_props['post_type_cats'])){
351 + for(var post_type in all_props['post_type_cats']){
352 + if(pagelayer_post.post_type != post_type && jQuery.inArray(section, all_props['post_type_cats'][post_type]) > -1){
353 + continue section_loop2;
354 + }
355 + }
356 + }
357 +
274 358 var props = section in pagelayer_shortcodes[el.tag] ? pagelayer_shortcodes[el.tag][section] : pagelayer_styles[section];
275 359 //console.log(props);
276 360
277 361 var sec = jQuery('<div class="pagelayer-elpd-section" section="'+section+'" pagelayer-show-tab="'+tab+'">'+
@@ -292,8 +376,10 @@
292 376 if('widget' in all_props && section == 'params'){
293 377 pagelayer_elpd_widget_settings(el, sec, true);
294 378 continue;
295 379 }
380 +
381 + var mode = pagelayer_get_screen_mode();
296 382
297 383 // Reset / Create the cache
298 384 for(var x in props){
299 385
@@ -299,14 +385,20 @@
299 385
300 386 props[x]['c'] = new Object();
301 387 props[x]['c']['val'] = '';// Blank Val
302 388 props[x]['c']['name'] = x;// Add the Name of the row i.e. attribute of the element
389 + var prop_name = x;
303 390
391 + // Do we have screen ?
392 + if('screen' in props[x] && mode != 'desktop'){
393 + prop_name = x +'_'+mode;
394 + }
395 +
304 396 // Set default to value of attribute if any
305 - if(x in el.atts){
306 - props[x]['c']['val'] = el.atts[x];
397 + if(prop_name in el.atts){
398 + props[x]['c']['val'] = el.atts[prop_name];
307 399 }
308 -
400 +
309 401 // Set element
310 402 props[x]['el'] = el;
311 403
312 404 // Any prop to skip ?
@@ -333,8 +425,22 @@
333 425 if(typeof fn_load == 'function'){
334 426 fn_load(el, props);
335 427 }*/
336 428
429 + // Hide clone and delete options
430 + if(!pagelayer_empty(all_props['hide_active']) && (pagelayer_empty(pagelayer_active.el) || pagelayer_active.el.id == el.id)){
431 + pagelayer.$$('.pagelayer-elpd-options').addClass('pagelayer-hidden');
432 + }else{
433 + pagelayer.$$('.pagelayer-elpd-options').removeClass('pagelayer-hidden');
434 + }
435 +
436 + // Add Advanced settings options for the props
437 + if(el.tag == 'pl_post_props'){
438 + pagelayer.$$('.pagelayer-elpd-tab[pagelayer-elpd-tab="advanced"]').removeClass('pagelayer-hidden');
439 + }else{
440 + pagelayer.$$('.pagelayer-elpd-tab[pagelayer-elpd-tab="advanced"]').addClass('pagelayer-hidden');
441 + }
442 +
337 443 // Section open close
338 444 holder.find('>.pagelayer-elpd-section>.pagelayer-elpd-section-name').on('click', function(){
339 445 var _sec = jQuery(this);
340 446 var par = _sec.parent();
@@ -364,9 +470,12 @@
364 470
365 471 });
366 472
367 473 if(!pagelayer_empty(pagelayer_active_tab) && pagelayer_active_tab.id == el.id){
368 - holder.find('>[section='+pagelayer_active_tab.section+']>.pagelayer-elpd-section-name').click();
474 + var target_sec = holder.find('>[section='+pagelayer_active_tab.section+']');
475 + if(target_sec.length > 0 && !target_sec.find('.pagelayer-elpd-section-rows').is(':visible')){
476 + target_sec.find('.pagelayer-elpd-section-name').click();
477 + }
369 478 }
370 479
371 480 // Handle the showing of rows
372 481 pagelayer_elpd_show_rows();
@@ -390,36 +499,57 @@
390 499
391 500 // Append the row
392 501 holder.append(row);
393 502
394 - var fn_ui = window['pagelayer_elp_'+prop['type']+'_ui'];
503 + return pagelayer_elpd_render_row(row, prop);
395 504
396 - // Is there a UI Handler ?
397 - if(typeof fn_ui == 'function'){
505 + }
506 +
507 +};
508 +
509 +// Render a row
510 +function pagelayer_elpd_render_row(row, prop){
511 +
512 + var fn = window['pagelayer_elp_'+prop['type']];
513 +
514 + if('group' in prop){
515 + row.attr('pagelayer-access-item', prop.group);
516 + }
517 +
518 + var fn_ui = window['pagelayer_elp_'+prop['type']+'_ui'];
519 +
520 + // Is there a UI Handler ?
521 + if(typeof fn_ui == 'function'){
522 +
523 + fn_ui(row, prop);
524 +
525 + // Use the default mechanism
526 + }else{
398 527
399 - fn_ui(row, prop);
400 -
401 - // Use the default mechanism
402 - }else{
403 -
404 - // The label
405 - pagelayer_elp_label(row, prop);
406 -
407 - // The main property
408 - fn(row, prop);
409 -
410 - // Is there a description ?
411 - if(!pagelayer_empty(prop['desc'])){
412 - pagelayer_elp_desc(row, prop['desc']);
413 - }
414 -
528 + // The label
529 + pagelayer_elp_label(row, prop);
530 +
531 + // The main property
532 + fn(row, prop);
533 +
534 + // Showing default button or not
535 + if(pagelayer_properties_filter(prop['type']) && pagelayer_empty(row.find('.pagelayer-pro-req').length)){
536 + pagelayer_show_default_button(row, prop, prop.c['val']);
415 537 }
416 538
417 - return row;
539 + // Is there a description ?
540 + if(!pagelayer_empty(prop['desc'])){
541 + pagelayer_elp_desc(row, prop['desc']);
542 + }
418 543
419 544 }
420 545
421 -};
546 + if('script' in prop){
547 + row.append('<script>'+prop.script+'</script>');
548 + }
549 +
550 + return row;
551 +}
422 552
423 553 // Show the rows as per the active tab and also handle the rows that are supposed to be shown or not
424 554 function pagelayer_elpd_show_rows(){
425 555
@@ -472,9 +602,9 @@
472 602
473 603 // Find the row
474 604 var row = false;
475 605
476 - holder.find('[pagelayer-elp-name='+x+']').each(function(){
606 + holder.find('[pagelayer-elp-name="'+x+'"]').each(function(){
477 607 var j = jQuery(this);
478 608 var _id = j.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
479 609 //console.log(_id+' = '+id);
480 610
@@ -625,8 +755,16 @@
625 755 }
626 756
627 757 // Post any existing data
628 758 var form = sec.find('form');
759 + // Archive widget checkbox fix
760 + var inputCheckbox = form.find('input[type=checkbox]');
761 + for(var i=0; i<inputCheckbox.length; i++){
762 + if(inputCheckbox[i].value == 'on'){
763 + form.find('input[type=checkbox]')[i].value = 1;
764 + }
765 + }
766 +
629 767 if(form.length > 0){
630 768 //console.log(form.serialize());
631 769 post['values'] = form.serialize();
632 770 }
@@ -658,9 +796,9 @@
658 796 }
659 797
660 798 },
661 799 fail: function(data) {
662 - alert('Some error occured in getting the widget data');
800 + pagelayer_show_msg('Some error occured in getting the widget data', 'error');
663 801 }
664 802 });
665 803
666 804 }
@@ -668,12 +806,15 @@
668 806 // Will set the attribute and also render
669 807 function _pagelayer_set_atts(row, val, no_default){
670 808 var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
671 809 var jEle = jQuery('[pagelayer-id='+id+']');
810 + var tag = pagelayer_tag(jEle);
811 + var prop_name = row.attr('pagelayer-elp-name');
812 + var prop = pagelayer.props_ref[tag][prop_name];
672 813
673 814 // Is there a unit ?
674 815 var uEle = row.find('.pagelayer-elp-units');
675 - if(uEle.length > 0){
816 + if(uEle.length > 0 && !pagelayer_empty(val)){
676 817 var unit = uEle.find('[selected]').html();
677 818 if(Array.isArray(val)){
678 819 for(var i in val){
679 820 if(val[i].length < 1){
@@ -686,12 +827,11 @@
686 827 }
687 828 }
688 829
689 830 // Are we in another mode ?
690 - var mEle = row.find('.pagelayer-elp-screen');
691 - var mode = mEle.length > 0 && pagelayer_get_screen_mode() != 'desktop' ? '_'+pagelayer_get_screen_mode() : '';
831 + var mode = ('screen' in prop && pagelayer_get_screen_mode() != 'desktop') ? '_'+pagelayer_get_screen_mode() : '';
692 832
693 - pagelayer_set_atts(jEle, row.attr('pagelayer-elp-name')+mode, val);
833 + pagelayer_set_atts(jEle, prop_name+mode, val);
694 834
695 835 // Are we to skip setting defaults ?
696 836 no_default = no_default || false;
697 837 if(!no_default){
@@ -709,8 +849,20 @@
709 849 //console.trace();console.log('Setting Attr');
710 850
711 851 // Render
712 852 pagelayer_sc_render(jEle);
853 +
854 + // Show default button or not
855 + if(pagelayer_properties_filter(prop) && pagelayer_empty(row.find('.pagelayer-pro-req').length)){
856 + pagelayer_show_default_button(row, prop, val);
857 + }
858 +
859 + if('onchange' in prop){
860 + var fn = window[prop['onchange']];
861 + if(typeof fn === 'function'){
862 + fn(jEle, row, val);
863 + }
864 + }
713 865 };
714 866
715 867 // Will set the attribute but not render
716 868 function _pagelayer_set_tmp_atts(row, suffix, val){
@@ -715,11 +867,25 @@
715 867 // Will set the attribute but not render
716 868 function _pagelayer_set_tmp_atts(row, suffix, val){
717 869 var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
718 870 var jEle = jQuery('[pagelayer-id='+id+']');
719 - pagelayer_set_tmp_atts(jEle, row.attr('pagelayer-elp-name')+'-'+suffix, val);
871 + pagelayer_set_tmp_atts(jEle, row.attr('pagelayer-elp-name')+(suffix.length > 0 ? '-'+suffix : ''), val);
720 872 };
721 873
874 +// Will clear the attribute but not render
875 +function _pagelayer_clear_tmp_atts(row){
876 + var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
877 + var jEle = jQuery('[pagelayer-id='+id+']');
878 + pagelayer_clear_tmp_atts(jEle, row.attr('pagelayer-elp-name'));
879 +};
880 +
881 +// Get the attribute of images only
882 +function _pagelayer_img_tmp_atts(row){
883 + var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
884 + var jEle = jQuery('[pagelayer-id='+id+']');
885 + return pagelayer_img_tmp_atts(jEle, row.attr('pagelayer-elp-name'));
886 +};
887 +
722 888 // Get the tmp att
723 889 function _pagelayer_get_tmp_att(row, suffix){
724 890 var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
725 891 var jEle = jQuery('[pagelayer-id='+id+']');
@@ -727,9 +893,9 @@
727 893 };
728 894
729 895 // Create the Label
730 896 function pagelayer_elp_label(row, prop){
731 - row.append('<div class="pagelayer-elp-label-div"><label class="pagelayer-elp-label">'+prop['label']+'</label></div>');
897 + row.append('<div class="pagelayer-elp-label-div" type="'+prop['type']+'"><label class="pagelayer-elp-label">'+prop['label']+'</label></div>');
732 898
733 899 var label = row.children('.pagelayer-elp-label-div');
734 900
735 901 // Do we have screen ?
@@ -735,12 +901,12 @@
735 901 // Do we have screen ?
736 902 if('screen' in prop){
737 903 var mode = pagelayer_get_screen_mode();
738 904 var screen = '<div class="pagelayer-elp-screen">'+
739 - '<i class="pli pli-desktop" />'+
740 - '<i class="pli pli-tablet" />'+
741 - '<i class="pli pli-mobile" />'+
742 - '<i class="pagelayer-prop-screen pli pli-'+mode+'" />'+
905 + '<i class="pli pli-desktop" ></i>'+
906 + '<i class="pli pli-tablet" ></i>'+
907 + '<i class="pli pli-mobile" ></i>'+
908 + '<i class="pagelayer-prop-screen pli pli-'+mode+'" ></i>'+
743 909 '</div>';
744 910 label.append(screen);
745 911
746 912 // Set screen mode on change
@@ -804,9 +970,9 @@
804 970 }
805 971
806 972 // Do we have pro version requirement ?
807 973 if('pro' in prop && pagelayer_empty(pagelayer_pro)){
808 - var txt = prop['pro'].length > 1 ? prop['pro'] : 'This feature is a part of <a href="'+pagelayer_pro_url+'" target="_blank">Pagelayer Pro</a>. You will need purchase <a href="'+pagelayer_pro_url+'" target="_blank">Pagelayer Pro</a> to use this feature.'
974 + var txt = prop['pro'].length > 1 ? prop['pro'] : pagelayer.pro_txt;
809 975 var pro = jQuery('<div class="pagelayer-pro-req">Pro</div>');
810 976 pro.attr('data-tlite', txt);
811 977 label.append(pro);
812 978 }
@@ -821,10 +987,12 @@
821 987 // Get unit from value
822 988 if(!(pagelayer_empty(tmp_val))){
823 989
824 990 for(var i in prop['units']){
825 - if(tmp_val.search(prop['units'][i]) != -1){
991 + if(pagelayer_is_string(tmp_val) && tmp_val.search(prop['units'][i]) != -1){
826 992 default_unit = i;
993 + }else if(tmp_val[0].search(prop['units'][i]) != -1 ){
994 + default_unit = i;
827 995 }
828 996 }
829 997 }
830 998
@@ -846,23 +1014,34 @@
846 1014 });
847 1015
848 1016 }
849 1017
1018 + // Include default button
1019 + if(pagelayer_properties_filter(prop['type']) && pagelayer_empty(row.find('.pagelayer-pro-req').length)){
1020 +
1021 + var defaultButton = '<span class="pagelayer-elp-default" title="'+pagelayer_l('back_to_default')+'" ><i class="fas fa-undo"></i></span>';
1022 + label.append(defaultButton);
1023 +
1024 + label.find('.pagelayer-elp-default').on('click', function(){
1025 +
1026 + prop.c['val'] = ('default' in prop) ? prop.default : '';
1027 + _pagelayer_set_atts(row, prop.c['val']);
1028 +
1029 + jQuery(this).attr('data_show',false);
1030 +
1031 + // Empty the row
1032 + row.html('');
1033 +
1034 + // Re-render the row
1035 + pagelayer_elpd_render_row(row, prop);
1036 +
1037 + });
1038 + }
850 1039 };
851 1040
852 -// Create the Label
853 -function pagelayer_elp_heading(row, prop){
854 - //row.append('<div class="pagelayer-elp-heading">'+prop['label']+'</div>');
855 -}
856 -
857 -// Create the Label
858 -function pagelayer_elp_heading_ui(row, prop){
859 - row.append('<div class="pagelayer-elp-heading">'+prop['label']+'</div>');
860 -}
861 -
862 1041 // Create the Description
863 1042 function pagelayer_elp_desc(row, label){
864 - //row.append('<div class="pagelayer-elp-desc">'+label+'</div>');
1043 + row.append('<div class="pagelayer-elp-desc">'+label+'</div>');
865 1044 };
866 1045
867 1046 // The Text property
868 1047 function pagelayer_elp_text(row, prop){
@@ -867,9 +1046,9 @@
867 1046 // The Text property
868 1047 function pagelayer_elp_text(row, prop){
869 1048
870 1049 var div = '<div class="pagelayer-elp-text-div">'+
871 - '<input type="text" class="pagelayer-elp-text" name="'+prop.c['name']+'" value="'+prop.c['val']+'"></input>'+
1050 + '<input type="text" class="pagelayer-elp-text" name="'+prop.c['name']+'" value="'+pagelayer_htmlEntities(prop.c['val'])+'"></input>'+
872 1051 '</div>';
873 1052
874 1053 row.append(div);
875 1054
@@ -943,13 +1122,20 @@
943 1122
944 1123 var show_sel = function(val){
945 1124 var sel_html = '';
946 1125 jQuery.each(val, function(index, value){
947 - sel_html += '<span class="pagelayer-elp-multiselect-selected">'+prop['list'][value]+'</span>';
1126 + sel_html += '<span class="pagelayer-elp-multiselect-selected" data-val="'+value+'">'+prop['list'][value]+' <span class="pagelayer-elp-multiselect-remove">x</span></span>';
948 1127 });
949 1128 return sel_html;
950 1129 }
951 1130
1131 + var setup_remove = function(){
1132 + row.find('.pagelayer-elp-multiselect-remove').on('click', function(){
1133 + var sVal = jQuery(this).parent().attr('data-val');
1134 + row.find('.pagelayer-elp-multiselect-option[data-val='+sVal+']').click();
1135 + });
1136 + }
1137 +
952 1138 for (x in prop['list']){
953 1139 options += option(x, prop['list'][x]);
954 1140 }
955 1141
@@ -958,8 +1144,9 @@
958 1144 '<ul class="pagelayer-elp-multiselect-ul" name="'+prop.c['name']+'">'+options+'</ul>'+
959 1145 '</div>';
960 1146
961 1147 row.append(div);
1148 + setup_remove();
962 1149
963 1150 row.find('.pagelayer-elp-multiselect-option').on('click', function(){
964 1151
965 1152 var sVal = jQuery(this).attr('data-val');
@@ -974,15 +1161,16 @@
974 1161
975 1162 //_pagelayer_set_atts(row,JSON.stringify(selection));// Save and Render
976 1163 _pagelayer_set_atts(row, selection.join(','));// Save and Render
977 1164
978 - row.find('.pagelayer-elp-multiselect').html(show_sel(selection));
1165 + row.find('.pagelayer-elp-multiselect').html(show_sel(selection));
1166 + setup_remove();
979 1167
980 1168 });
981 1169
982 1170 // Open the selector
983 1171 row.find('.pagelayer-elp-multiselect').on('click', function(){
984 - row.find('.pagelayer-elp-multiselect-ul').slideToggle();
1172 + row.find('.pagelayer-elp-multiselect-ul').slideToggle(100);
985 1173 });
986 1174
987 1175 }
988 1176
@@ -987,24 +1175,24 @@
987 1175 }
988 1176
989 1177 function _pagelayer_trigger_anim(row, anim){
990 1178 var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
991 - var classList = $('[pagelayer-id='+id+']').attr('class');
1179 + var classList = jQuery('[pagelayer-id='+id+']').attr('class');
992 1180 classList = classList.split(/\s+/);
993 1181 //console.log(classList);
994 1182 var options = [];
995 1183 row.find('option').each(function(){
996 - var found = $.inArray( $(this).val(), classList );
1184 + var found = jQuery.inArray( jQuery(this).val(), classList );
997 1185 if( found != -1){
998 - //var found = $(this).val();
999 - $('[pagelayer-id='+id+']').removeClass($(this).val());
1186 + //var found = jQuery(this).val();
1187 + jQuery('[pagelayer-id='+id+']').removeClass(jQuery(this).val());
1000 1188 //break;
1001 1189 }
1002 - //options.push($(this).val());
1190 + //options.push(jQuery(this).val());
1003 1191 });
1004 - $('[pagelayer-id='+id+']').removeClass('pagelayer-wow').addClass(anim + ' animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){
1005 - $(this).removeClass(anim+ ' animated');
1006 - });
1192 + jQuery('[pagelayer-id='+id+']').removeClass('pagelayer-wow').addClass(anim + ' animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){
1193 + jQuery(this).removeClass(anim+ ' animated');
1194 + });
1007 1195 }
1008 1196
1009 1197 // The Checkbox property
1010 1198 function pagelayer_elp_checkbox(row, prop){
@@ -1042,9 +1230,9 @@
1042 1230 var addclass = (prop.c['val'] == x) ? active : '';
1043 1231 div += '<a class="pagelayer-elp-radio '+addclass+'" val="'+x+'">'+prop.list[x]+'</a>';
1044 1232 }
1045 1233
1046 - div += '<div>';
1234 + div += '</div>';
1047 1235
1048 1236 row.append(div);
1049 1237
1050 1238 row.find('.pagelayer-elp-radio').each(function(){
@@ -1067,27 +1255,157 @@
1067 1255
1068 1256 // The Image Property
1069 1257 function pagelayer_elp_image(row, prop){
1070 1258
1071 - var style = '';
1259 + var imgObj = {};
1260 + var isRetina = false;
1261 +
1262 + // Previously saved values
1263 + if(typeof prop.c['val'] === 'object'){
1264 + imgObj = prop.c['val'];
1265 + }else{
1266 + imgObj['img'] = prop.c['val'];
1267 + }
1268 +
1072 1269 var tmp = prop.c['name']+'-url';
1073 1270 var def = pagelayer.blank_img;
1074 - var src = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : def;
1271 +
1272 + // Background image URls
1273 + var src = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : ((!pagelayer_empty(imgObj['img']) && String(imgObj['img']).search(/http(|s):\/\//i) == 0) ? imgObj['img'] : def );
1075 1274
1076 1275 // Do we have a URL set ?
1077 - style = 'style="background-image:url(\''+src+'\')"';
1276 + var style = 'style="background-image:url(\''+src+'\')"';
1078 1277
1079 1278 var div = '<div class="pagelayer-elp-image-div">'+
1080 - '<div class="pagelayer-elp-image" '+style+'></div>'+
1081 - '<div class="pagelayer-elp-image-delete"><i class="pli pli-trashcan" /></div>'+
1082 - '</div>';
1279 + '<div class="pagelayer-elp-drop-zone">'+
1280 + '<div>'+
1281 + '<i class="fas fa-upload"></i>'+
1282 + '<h4>'+pagelayer_l('drop_file')+'</h4>'+
1283 + '<div class="pagelayer-elp-img-up-progress">'+
1284 + '<div class="pagelayer-elp-img-up-bar"></div>'+
1285 + '</div>'+
1286 + '</div>'+
1287 + '</div>'+
1288 + '<div class="pagelayer-elp-image" '+style+'></div>'+
1289 + '<div class="pagelayer-elp-image-delete"><i class="pli pli-trashcan" ></i></div>';
1290 +
1291 + // Retina image icon
1292 + if(isRetina){
1293 + div += '<div class="pagelayer-elp-image-retina"><i class="pli pli-eye" ></i></div>';
1294 + }
1295 +
1296 + if(!pagelayer_empty(pagelayer.cmode) && ! ('ai' in prop && prop['ai'] == false)){
1297 + var tmp_ai = pagelayer_get_att(prop.el.$, prop.c['name']+'_ai');
1298 + var checked = tmp_ai == false ? 'checked' : '';
1299 +
1300 + div += '<div class="pagelayer-elp-image-ai" data-tlite="If checked, replace by AI will be ignored"><input type="checkbox" '+checked+'/></div>';
1301 + }
1302 +
1303 +
1304 + div +='</div>';
1305 +
1306 + // Add retina images option
1307 + if(isRetina){
1308 +
1309 + var tmp_retina = prop.c['name']+'-retina-url';
1310 + var tmp_retina_mobile = prop.c['name']+'-retina-mobile-url';
1311 +
1312 + var srcRetina = (tmp_retina in prop.el.tmp) ? prop.el.tmp[tmp_retina] : (('retina' in imgObj && !pagelayer_empty(imgObj['retina']) && String(imgObj['retina']).search(/http(|s):\/\//i) == 0) ? imgObj['retina'] : def );
1083 1313
1314 + var srcRetinaMobile = (tmp_retina_mobile in prop.el.tmp) ? prop.el.tmp[tmp_retina_mobile] : (('retina_mobile' in imgObj && !pagelayer_empty(imgObj['retina_mobile']) && String(imgObj['retina_mobile']).search(/http(|s):\/\//i) == 0) ? imgObj['retina_mobile'] : def );
1315 +
1316 + var style_retina = 'style="background-image:url(\''+srcRetina+'\')"';
1317 + var style_retina_mobile = 'style="background-image:url(\''+srcRetinaMobile+'\')"';
1318 +
1319 + div +='<div class="pagelayer-elp-label-div pagelayer-retina-label" type="image" style="display:none;">'+
1320 + '<label class="pagelayer-elp-label">Select Retina Image</label>'+
1321 + '</div>'+
1322 + '<div class="pagelayer-elp-retina-image-div" style="display:none;">'+
1323 + '<div class="pagelayer-elp-drop-zone">'+
1324 + '<div>'+
1325 + '<i class="fas fa-upload"></i>'+
1326 + '<h4>'+pagelayer_l('drop_file')+'</h4>'+
1327 + '<div class="pagelayer-elp-img-up-progress">'+
1328 + '<div class="pagelayer-elp-img-up-bar"></div>'+
1329 + '</div>'+
1330 + '</div>'+
1331 + '</div>'+
1332 + '<div class="pagelayer-elp-image pagelayer-retina" '+style_retina+'></div>'+
1333 + '<div class="pagelayer-elp-retina-delete"><i class="pli pli-trashcan" ></i></div>'+
1334 + '</div>'+
1335 + '<div class="pagelayer-form-item">'+
1336 + '<div class="pagelayer-elp-label-div pagelayer-retina-label" type="image" style="display:none;">'+
1337 + '<label class="pagelayer-elp-label">Select Retina Image For Mobile</label>'+
1338 + '</div>'+
1339 + '<div class="pagelayer-elp-checkbox-div pagelayer-retina-label" style="display:none;">'+
1340 + '<input type="checkbox" name="overlay" class="pagelayer-elp-checkbox pagelayer-retina-checkbox">'+
1341 + '</div>'+
1342 + '</div>'+
1343 +
1344 + '<div class="pagelayer-elp-retina-mobile-image-div" style="display:none;">'+
1345 + '<div class="pagelayer-elp-drop-zone">'+
1346 + '<div>'+
1347 + '<i class="fas fa-upload"></i>'+
1348 + '<h4>'+pagelayer_l('drop_file')+'</h4>'+
1349 + '<div class="pagelayer-elp-img-up-progress">'+
1350 + '<div class="pagelayer-elp-img-up-bar"></div>'+
1351 + '</div>'+
1352 + '</div>'+
1353 + '</div>'+
1354 + '<div class="pagelayer-elp-image pagelayer-retina-mobile" '+style_retina_mobile+'></div>'+
1355 + '<div class="pagelayer-elp-retina-mobile-delete"><i class="pli pli-trashcan" ></i></div>'+
1356 + '</div>';
1357 + }
1358 +
1084 1359 row.append(div);
1085 1360
1361 + if(def == src && jQuery.isNumeric(imgObj['img'])){
1362 + wp.media.attachment(imgObj['img']).fetch().then(function (data){
1363 + var fetch_url = wp.media.attachment(imgObj['img']).get('url')
1364 + row.find('.pagelayer-elp-image-div .pagelayer-elp-image').css('background-image', 'url(\''+fetch_url+'\')');
1365 + _pagelayer_set_tmp_atts(row, 'url', fetch_url);
1366 + }).fail(function(){
1367 + row.find('.pagelayer-elp-image-div .pagelayer-elp-image').css('background-image', 'url(\''+src+'\')')
1368 + });
1369 + }
1370 +
1371 + if(isRetina){
1372 + if(def == srcRetina && 'retina' in imgObj && jQuery.isNumeric(imgObj['retina'])){
1373 + wp.media.attachment(imgObj['retina']).fetch().then(function (data){
1374 + var fetch_url = wp.media.attachment(imgObj['retina']).get('url')
1375 + row.find('.pagelayer-retina').css('background-image', 'url(\''+fetch_url+'\')');
1376 + _pagelayer_set_tmp_atts(row, 'retina-url', fetch_url);
1377 + }).fail(function(){
1378 + row.find('.pagelayer-retina').css('background-image', 'url(\''+srcRetina+'\')')
1379 + });
1380 + }
1381 +
1382 + if(def == srcRetinaMobile && 'retina_mobile' in imgObj && jQuery.isNumeric(imgObj['retina_mobile'])){
1383 + wp.media.attachment(imgObj['retina_mobile']).fetch().then(function (data){
1384 + var fetch_url = wp.media.attachment(imgObj['retina_mobile']).get('url')
1385 + row.find('.pagelayer-retina-mobile').css('background-image', 'url(\''+fetch_url+'\')');
1386 + _pagelayer_set_tmp_atts(row, 'retina-mobile-url', fetch_url);
1387 + }).fail(function(){
1388 + row.find('.pagelayer-retina-mobile').css('background-image', 'url(\''+srcRetinaMobile+'\')')
1389 + });
1390 + }
1391 + }
1392 +
1393 + var getImgVal = function(val){
1394 +
1395 + if(typeof val === 'object' && pagelayer_length(val) == 1 && 'img' in val){
1396 + return val['img'];
1397 + }
1398 +
1399 + return val;
1400 + }
1401 +
1086 1402 // Set an Image
1087 1403 row.find('.pagelayer-elp-image').on('click', function(){
1088 1404
1089 1405 var button = jQuery(this);
1406 + var inRetina = button.hasClass('pagelayer-retina');
1407 + var inRetinaM = button.hasClass('pagelayer-retina-mobile');
1090 1408
1091 1409 // Load the frame
1092 1410 var frame = pagelayer_select_frame('image');
1093 1411
@@ -1106,19 +1424,77 @@
1106 1424 // Internal from gallery
1107 1425 }else{
1108 1426
1109 1427 var attachment = frame.state().get('selection').first().toJSON();
1110 - //console.log(attachment);
1111 1428
1112 1429 // Set the new ID and URL
1113 1430 id = attachment.id;
1114 - url = attachment.url;
1431 + url = attachment.url;
1432 + var old = _pagelayer_img_tmp_atts(row);
1115 1433
1116 - // Keep a list of all sizes
1117 - for(var x in attachment.sizes){
1118 - _pagelayer_set_tmp_atts(row, x+'-url', attachment.sizes[x].url);
1119 - }
1120 -
1434 + //console.log(attachment);
1435 + if(inRetina){
1436 + // To remove past temp attr so that they are not involve in future temp values
1437 + delete old[prop.c['name']+'-retina-url'];
1438 +
1439 + // Keep a list of all sizes
1440 + for(var x in attachment.sizes){
1441 + _pagelayer_set_tmp_atts(row, 'retina-'+x+'-url', attachment.sizes[x].url);
1442 + delete old[prop.c['name']+'-retina-'+x+'-url'];
1443 + }
1444 +
1445 + for(var x in old){
1446 +
1447 + // Skip for retina and with url atts
1448 + if(! x.endsWith('-url') || !x.startsWith(prop.c['name']+'-retina') || x.startsWith(prop.c['name']+'-retina-mobile')){
1449 + continue;
1450 + }
1451 +
1452 + _pagelayer_set_tmp_atts(row, x, '');
1453 + }
1454 +
1455 + }else if(inRetinaM){
1456 +
1457 + // To remove past temp attr so that they are not involve in future temp values
1458 + delete old[prop.c['name']+'-retina-mobile-url'];
1459 +
1460 + // Keep a list of all sizes
1461 + for(var x in attachment.sizes){
1462 + _pagelayer_set_tmp_atts(row, 'retina-mobile-'+x+'-url', attachment.sizes[x].url);
1463 + delete old[prop.c['name']+'-retina-mobile-'+x+'-url'];
1464 + }
1465 +
1466 + for(var x in old){
1467 +
1468 + // Skip for retina and with url atts
1469 + if(! x.endsWith('-url') || ! x.startsWith(prop.c['name']+'-retina-mobile')){
1470 + continue;
1471 + }
1472 +
1473 + _pagelayer_set_tmp_atts(row, x, '');
1474 + }
1475 +
1476 + }else{
1477 +
1478 + // To remove past temp attr so that they are not involve in future temp values
1479 + delete old[prop.c['name']+'-url'];
1480 +
1481 + // Keep a list of all sizes
1482 + for(var x in attachment.sizes){
1483 + _pagelayer_set_tmp_atts(row, x+'-url', attachment.sizes[x].url);
1484 + delete old[prop.c['name']+'-'+x+'-url'];
1485 + }
1486 +
1487 + for(var x in old){
1488 +
1489 + // Skip for retina and with url atts
1490 + if(! x.endsWith('-url') || x.startsWith(prop.c['name']+'-retina')){
1491 + continue;
1492 + }
1493 +
1494 + _pagelayer_set_tmp_atts(row, x, '');
1495 + }
1496 + }
1121 1497 }
1122 1498
1123 1499 // Update thumbnail
1124 1500 button.css('background-image', 'url(\''+url+'\')');
@@ -1123,16 +1499,39 @@
1123 1499 // Update thumbnail
1124 1500 button.css('background-image', 'url(\''+url+'\')');
1125 1501
1126 1502 // Save and render
1127 - _pagelayer_set_tmp_atts(row, 'url', url);
1128 - _pagelayer_set_atts(row, id);
1503 + _pagelayer_set_tmp_atts(row, 'no-image-set', '');
1129 1504
1505 + if(inRetina){
1506 + _pagelayer_set_tmp_atts(row, 'retina-url', url);
1507 + imgObj['retina'] = id;
1508 + }else if(inRetinaM){
1509 + _pagelayer_set_tmp_atts(row, 'retina-mobile-url', url);
1510 + imgObj['retina_mobile'] = id;
1511 + }else{
1512 + _pagelayer_set_tmp_atts(row, 'url', url);
1513 + imgObj['img'] = id;
1514 + }
1515 +
1516 + _pagelayer_set_atts(row, getImgVal(imgObj));
1517 +
1130 1518 },
1131 1519 // On open select the appropriate images in the media manager
1132 1520 'open': function() {
1133 1521 var selection = frame.state().get('selection');
1134 - var wp_id = prop.el.$.attr('pagelayer-a-id');
1522 + var wp_id = pagelayer_get_att(prop.el.$, prop.c['name']);
1523 +
1524 + if(typeof wp_id === 'object'){
1525 + if(inRetina){
1526 + wp_id = ('retina' in wp_id && !pagelayer_empty(wp_id['retina']) ? wp_id['retina'] : 0 );
1527 + }else if(inRetinaM){
1528 + wp_id = ('retina_mobile' in wp_id && !pagelayer_empty(wp_id['retina_mobile']) ? wp_id['retina_mobile'] : 0 );
1529 + }else{
1530 + wp_id = (!pagelayer_empty(wp_id['img']) ? wp_id['img'] : 0 );
1531 + }
1532 + }
1533 +
1135 1534 selection.reset( wp_id ? [ wp.media.attachment( wp_id ) ] : [] );
1136 1535 }
1137 1536 });
1138 1537
@@ -1141,24 +1540,199 @@
1141 1540 return false;
1142 1541
1143 1542 });
1144 1543
1544 + // Finding and assigning values in the variables
1545 + var dropzoneParent = row.find('.pagelayer-elp-image-div');
1546 + var dropZone = row.find('.pagelayer-elp-drop-zone');
1547 +
1548 + // Inserting values in image drag and drop function
1549 + pagelayer_img_dragAndDrop(dropzoneParent, dropZone, '', row);
1550 +
1551 + row.find('.pagelayer-elp-image-retina').click(function(){
1552 + row.find('.pagelayer-retina-label').toggle();
1553 + row.find('.pagelayer-elp-retina-image-div').toggle();
1554 + var checkval = row.find('.pagelayer-retina-checkbox').is(":checked");
1555 +
1556 + if(checkval == true){
1557 + row.find('.pagelayer-retina-checkbox').trigger("click");
1558 + }
1559 + });
1560 +
1561 + // Save temporarily
1562 + row.find('.pagelayer-elp-image-ai input').on('change', function(){
1563 + var aiEle = jQuery(this);
1564 +
1565 + var checkval = aiEle.is(":checked");
1566 + var ref_data = pagelayer_el_data_ref(prop.el.$);
1567 +
1568 + // Save temporarily in atts for comment feature, it is not saved in original content
1569 + if(checkval == true){
1570 + ref_data['attr'][prop.c['name']+'_ai'] = false;
1571 + }else{
1572 + delete ref_data['attr'][prop.c['name']+'_ai'];
1573 + }
1574 + pagelayer_el_dump_data(prop.el.$);
1575 +
1576 + });
1577 +
1578 + row.find('.pagelayer-retina-checkbox').click(function(){
1579 + row.find('.pagelayer-elp-retina-mobile-image-div').toggle();
1580 + });
1581 +
1145 1582 // Delete this
1146 1583 row.find('.pagelayer-elp-image-delete').on('click', function(){
1147 1584
1148 1585 // Update thumbnail
1149 - row.find('.pagelayer-elp-image').css('background-image', 'url(\''+def+'\')');
1586 + jQuery(this).parent().find('.pagelayer-elp-image').css('background-image', 'url(\''+def+'\')');
1150 1587
1151 1588 // Set to blank and render
1152 1589 _pagelayer_set_atts(row, '', true);
1590 +
1591 + imgObj['img'] = def;
1153 1592
1593 + _pagelayer_set_tmp_atts(row, 'no-image-set', 1);
1154 1594 _pagelayer_set_tmp_atts(row, 'url', def);
1155 - _pagelayer_set_atts(row, def);
1595 + _pagelayer_set_atts(row, getImgVal(imgObj));
1596 + });
1597 +
1598 + row.find('.pagelayer-elp-retina-delete').on('click', function(){
1599 + // Update thumbnail
1600 + jQuery(this).parent().find('.pagelayer-elp-image').css('background-image', 'url(\''+def+'\')');
1601 + delete imgObj['retina'];
1602 +
1603 + _pagelayer_set_tmp_atts(row, 'retina-url', def);
1604 + _pagelayer_set_atts(row, getImgVal(imgObj));
1156 1605
1157 1606 });
1158 1607
1608 + row.find('.pagelayer-elp-retina-mobile-delete').on('click', function(){
1609 +
1610 + // Update thumbnail
1611 + jQuery(this).parent().find('.pagelayer-elp-image').css('background-image', 'url(\''+def+'\')');
1612 + delete imgObj['retina_mobile'];
1613 +
1614 + // Set to blank and render
1615 + _pagelayer_set_tmp_atts(row, 'retina-mobile-url', def);
1616 + _pagelayer_set_atts(row, getImgVal(imgObj));
1617 +
1618 + });
1159 1619 }
1160 1620
1621 +// Main image drag and drop function
1622 +function pagelayer_img_dragAndDrop(dropzoneParent, dropZone, jEle, row){
1623 +
1624 + var reset_dragging = false;
1625 +
1626 + dropzoneParent.on('dragover', function(e){
1627 + e.preventDefault();
1628 + // Checking that the dragged element is a file or not
1629 + var dt = e.originalEvent.dataTransfer;
1630 + if(dt.types && (dt.types.indexOf ? dt.types.indexOf('Files') != -1 : dt.types.contains('Files'))){
1631 + if(e.originalEvent.dataTransfer.items[0].type.search('image/')!=-1){
1632 + dropZone.show();
1633 + reset_dragging = true;
1634 + }
1635 + }
1636 + });
1637 +
1638 + dropzoneParent.on('dragleave', function(e){
1639 + var rect = this.getBoundingClientRect();
1640 + // Checking that the cursor is in the drag area or not
1641 + if (e.clientX >= (rect.left + rect.width) || e.clientX <= rect.left || e.clientY >= (rect.top + rect.height) || e.clientY <= rect.top) {
1642 + dropZone.hide();
1643 + reset_dragging = false;
1644 + }
1645 + });
1646 +
1647 + dropzoneParent.on('drop', function(e){
1648 +
1649 + // Is not dropable?
1650 + if(!reset_dragging){
1651 + return;
1652 + }
1653 +
1654 + e.preventDefault();
1655 + var pagelayer_ajax_func = {};
1656 +
1657 + // This function for ajax success call back
1658 + pagelayer_ajax_func['success'] = function(obj){
1659 +
1660 + if(obj['success']){
1661 +
1662 + // Set the new ID and URL
1663 + id = obj['data']['id'];
1664 + url = obj['data']['url'];
1665 +
1666 + if(row == ''){
1667 + // Getting Id of jEle
1668 + var widgetid = jEle.closest('[pagelayer-id]').attr('pagelayer-id');
1669 +
1670 + // Finding widget image setting using id of jEle. Finding image editor setting from all of the other settings.
1671 + row = pagelayer.$$('[pagelayer-element-id='+widgetid+']').find('.pagelayer-elp-image').eq(0).parent().parent();
1672 + }
1673 +
1674 + row.find('.pagelayer-elp-image').css('background-image', 'url(\''+url+'\')');
1675 +
1676 + // To remove past temp attr so that they are not involve in future temp values
1677 + var cname = row.attr('pagelayer-elp-name');
1678 + var old = _pagelayer_img_tmp_atts(row);
1679 + delete old[cname+'-url'];
1680 +
1681 + for(var x in obj['data']['sizes']){
1682 + _pagelayer_set_tmp_atts(row, x+'-url', obj['data']['sizes'][x]['url']);
1683 + delete old[cname+'-'+x+'-url'];
1684 + }
1685 +
1686 + for(var x in old){
1687 + _pagelayer_set_tmp_atts(row, x+'-url', '');
1688 + }
1689 +
1690 + dropZone.find('.pagelayer-elp-img-up-bar').css('width', '3%');
1691 + dropZone.hide();
1692 +
1693 + // Save and render
1694 + _pagelayer_set_tmp_atts(row, 'url', url);
1695 + _pagelayer_set_atts(row, id);
1696 +
1697 + }else{
1698 + alert(obj['data']['message']);
1699 + }
1700 + }
1701 +
1702 + // This function for ajax before send call back
1703 + pagelayer_ajax_func['beforeSend'] = function(xhr){
1704 + // It activate the image widget
1705 + if(row == ''){
1706 + jEle.click();
1707 + }
1708 + }
1709 +
1710 + // This function for how much file is uploaded or for progress bar
1711 + pagelayer_ajax_func['uploadProgress'] = function(xhr){
1712 + xhr.upload.addEventListener("progress", function(evt) {
1713 + if (evt.lengthComputable) {
1714 + var percentComplete = evt.loaded / evt.total;
1715 + percentComplete = parseInt(percentComplete * 100);
1716 +
1717 + if(row == ''){
1718 + dropZone.find('.pagelayer-img-up-bar').css('width', percentComplete+'%');
1719 + }else{
1720 + dropZone.find('.pagelayer-elp-img-up-bar').css('width', percentComplete+'%');
1721 + }
1722 + }
1723 + }, false);
1724 + return xhr;
1725 + }
1726 +
1727 + // Uploading image to the media library
1728 + pagelayer_editable_paste_handler(e.originalEvent.dataTransfer.files[0], pagelayer_ajax_func);
1729 +
1730 + reset_dragging = false;
1731 +
1732 + });
1733 +}
1734 +
1161 1735 // The Multi Image Property
1162 1736 function pagelayer_elp_multi_image(row, prop){
1163 1737
1164 1738 var div = '<div class="pagelayer-elp-multi_image-div">'+
@@ -1172,19 +1746,36 @@
1172 1746 var ids = new Array();
1173 1747
1174 1748 // Any IDs ?
1175 1749 if(!pagelayer_empty(prop.c['val'])){
1176 - ids = prop.c['val'].split(',');
1750 + ids = prop.c['val']
1751 + if(pagelayer_is_string(ids)){
1752 + ids = prop.c['val'].split(',');
1753 + }
1177 1754 //console.log(ids);
1178 1755 }
1179 1756
1180 1757 // Do we have a URL set ?
1181 - if(ids.length > 0 && tmp in prop.el.tmp){
1182 - var images = JSON.parse(prop.el.tmp[tmp]);
1183 - //console.log(images);
1184 -
1185 - for(var x in ids){
1186 - row.find('.pagelayer-elp-multi_image-thumbs').append('<div class="pagelayer-elp-multi_image-thumb" style="background-image: url(\''+images['i'+ids[x]]+'\');"></div>');
1758 + if(!pagelayer_empty(ids)){
1759 + if(tmp in prop.el.tmp){
1760 + var images = JSON.parse(prop.el.tmp[tmp]);
1761 + //console.log(images);
1762 +
1763 + for(var x in ids){
1764 + row.find('.pagelayer-elp-multi_image-thumbs').append('<div class="pagelayer-elp-multi_image-thumb" style="background-image: url(\''+images['i'+ids[x]]+'\');"></div>');
1765 + }
1766 + }else{
1767 + wp.media.query({ post__in: ids }).more().then(function(){
1768 + // You attachments here normally
1769 + // You can safely use any of them here
1770 + // TODO: Set tmp here
1771 + for(var x in ids){
1772 + var fetch_url = wp.media.attachment(ids[x]).get('url');
1773 + if(!pagelayer_empty(fetch_url)){
1774 + row.find('.pagelayer-elp-multi_image-thumbs').append('<div class="pagelayer-elp-multi_image-thumb" style="background-image: url(\''+fetch_url+'\');"></div>');
1775 + }
1776 + }
1777 + });
1187 1778 }
1188 1779 }
1189 1780
1190 1781 var pagelayer_init_frame = function(state){
@@ -1232,9 +1823,9 @@
1232 1823 // Set the current selection if any
1233 1824 'open': function(){
1234 1825
1235 1826 // Do we have anything
1236 - if(ids.length > 0){
1827 + if(!pagelayer_empty(ids)){
1237 1828
1238 1829 var selection = '';
1239 1830
1240 1831 if(state == 'gallery-edit'){
@@ -1329,10 +1920,10 @@
1329 1920 pagelayer_init_frame('gallery-edit');
1330 1921 });
1331 1922
1332 1923 row.find('.pagelayer-elp-button').on('click', function(){
1333 - //console.log(ids.length);
1334 - if(ids.length > 0){
1924 +
1925 + if(!pagelayer_empty(ids)){
1335 1926 if(isNaN(ids[0])){
1336 1927 pagelayer_init_frame('embed');
1337 1928 }else{
1338 1929 pagelayer_init_frame('gallery-library');
@@ -1351,9 +1942,9 @@
1351 1942 var src = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : prop.c['val'];
1352 1943
1353 1944 var div = '<div class="pagelayer-elp-video-div pagelayer-elp-input-icon">'+
1354 1945 '<input class="pagelayer-elp-video" name="'+prop.c['name']+'" type="text" value="'+src+'">'+
1355 - '<i class="pli pli-folder-open" />'+
1946 + '<i class="pli pli-folder-open" ></i>'+
1356 1947 '</input></div>';
1357 1948
1358 1949 row.append(div);
1359 1950
@@ -1426,9 +2017,9 @@
1426 2017 var src = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : prop.c['val'];
1427 2018
1428 2019 var div = '<div class="pagelayer-elp-audio-div pagelayer-elp-input-icon">'+
1429 2020 '<input class="pagelayer-elp-audio" name="'+prop.c['name']+'" type="text" value="'+src+'" />'+
1430 - '<i class="pli pli-menu" />'+
2021 + '<i class="pli pli-menu" ></i>'+
1431 2022 '</div>';
1432 2023
1433 2024 row.append(div);
1434 2025
@@ -1500,9 +2091,9 @@
1500 2091 var src = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : prop.c['val'];
1501 2092
1502 2093 var div = '<div class="pagelayer-elp-media-div pagelayer-elp-input-icon">'+
1503 2094 '<input class="pagelayer-elp-media" value="'+src+'" type="text" />'+
1504 - '<i class="pli pli-menu" />'+
2095 + '<i class="pli pli-menu" ></i>'+
1505 2096 '</div>';
1506 2097
1507 2098 row.append(div);
1508 2099
@@ -1569,10 +2160,10 @@
1569 2160 // The Slider Property
1570 2161 function pagelayer_elp_slider(row, prop){
1571 2162
1572 2163 var div = '<div class="pagelayer-elp-slider-div">'+
1573 - '<input type="range" class="pagelayer-elp-slider" value="'+parseInt(prop.c['val'])+'" min="'+prop['min']+'" max="'+prop['max']+'" step="'+prop['step']+'"/>'+
1574 - '<input type="number" class="pagelayer-elp-slider-value" value="'+parseInt(prop.c['val'])+'" min="'+prop['min']+'" max="'+prop['max']+'" step="'+prop['step']+'"/>'+
2164 + '<input type="range" class="pagelayer-elp-slider" value="'+parseFloat(prop.c['val'])+'" min="'+prop['min']+'" max="'+prop['max']+'" step="'+prop['step']+'"/>'+
2165 + '<input type="number" class="pagelayer-elp-slider-value" value="'+parseFloat(prop.c['val'])+'" min="'+prop['min']+'" max="'+prop['max']+'" step="'+prop['step']+'"/>'+
1575 2166 '</div>'+
1576 2167 '</div>';
1577 2168
1578 2169 row.append(div);
@@ -1578,12 +2169,17 @@
1578 2169 row.append(div);
1579 2170
1580 2171 // Set an value in span
1581 2172 row.find('.pagelayer-elp-slider-div input').on('input', function(){
2173 + var value = parseFloat(this.value);
2174 + var max = parseFloat(this.max);
1582 2175
1583 - row.find('.pagelayer-elp-slider-div input').val(this.value);
2176 + if(!pagelayer_empty(max) && value > max){
2177 + value = max;
2178 + }
2179 + row.find('.pagelayer-elp-slider-div input').val(value);
1584 2180
1585 - _pagelayer_set_atts(row, this.value);// Save and Render
2181 + _pagelayer_set_atts(row, value);// Save and Render
1586 2182
1587 2183 });
1588 2184
1589 2185 }
@@ -1590,16 +2186,25 @@
1590 2186
1591 2187 // The Editor proprety
1592 2188 function pagelayer_elp_editor(row, prop){
1593 2189
2190 + var rows = prop.rows ? prop.rows : '8';
2191 +
1594 2192 var div = '<div class="pagelayer-elp-editor-div">'+
1595 - '<textarea class="pagelayer-elp-editor">'+prop.c['val']+'</textarea>'+
2193 + '<textarea rows="'+rows+'" class="pagelayer-elp-editor" ></textarea>'+
1596 2194 '</div>';
1597 2195
1598 2196 row.append(div);
1599 2197
1600 2198 var editor = row.find('.pagelayer-elp-editor');
2199 + editor.val(pagelayer_trim(prop.c['val']));
1601 2200
2201 + // Handle on change
2202 + editor.on('input', function(){
2203 + _pagelayer_set_atts(row, pagelayer_trim(jQuery(this).val()));// Save and Render
2204 + });
2205 +
2206 + return;
1602 2207 // No SVG Icons for now
1603 2208 jQuery.trumbowyg.svgPath = false;
1604 2209
1605 2210 // Initiate the editor
@@ -1607,26 +2212,27 @@
1607 2212 autogrow: false,
1608 2213 hideButtonTexts: true,
1609 2214 btns:[
1610 2215 ['viewHTML'],
2216 + ['wpmedia'],
1611 2217 ['fontfamily'],
1612 2218 ['formatting'],
1613 2219 ['undo', 'redo'], // Only supported in Blink browsers
1614 2220 ['fontsize'],
2221 + ['lineheight'],
1615 2222 ['foreColor', 'backColor',],
1616 2223 ['strong', 'em', 'del'],
2224 + ['horizontalRule'],
1617 2225 ['superscript', 'subscript'],
1618 2226 ['link'],
1619 - ['wpmedia'],
2227 + ['unorderedList', 'orderedList'],
1620 2228 ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],
1621 - ['unorderedList', 'orderedList'],
1622 - ['horizontalRule'],
1623 2229 ['removeformat'],
1624 2230 ['fullscreen']
1625 2231 ],
1626 2232 plugins: {
1627 2233 fontsize: {
1628 - sizeList: ['12px','13px','14px','15px','16px','17px','18px','19px','20px','21px','22px','23px','24px','25px',]
2234 + sizeList: ['12px','13px','14px','15px','16px','17px','18px','19px','20px','21px','22px','23px','24px','25px']
1629 2235 }
1630 2236 },
1631 2237 imageWidthModalEdit: true,
1632 2238
@@ -1638,22 +2244,258 @@
1638 2244 }
1639 2245
1640 2246 // The Link proprety
1641 2247 function pagelayer_elp_link(row, prop){
2248 +
2249 + var values = {};
2250 + var settingOpt = false;
1642 2251
1643 - // TODO : Implement pagelayer-elp-link-icon
1644 - var div = '<div class="pagelayer-elp-link-div pagelayer-elp-input-icon">'+
1645 - '<input class="pagelayer-elp-link" type="text" value="'+prop.c['val']+'" />'+
1646 - '<i class="pli pli-link pagelayer-elp-link-icon" />'+
2252 + // Show link options?
2253 + if('selector' in prop){
2254 + settingOpt = true;
2255 + }
2256 +
2257 + // Previously saved values
2258 + if(typeof prop.c['val'] === 'object'){
2259 + values = prop.c['val'];
2260 + }else{
2261 + values['link'] = prop.c['val'];
2262 + }
2263 +
2264 + var tmp = prop.c['name'];
2265 + var link = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : values['link'];
2266 + var jEle = jQuery('[pagelayer-id='+prop.el.id+']');
2267 +
2268 + var div = '<div class="pagelayer-elp-link-div pagelayer-elp-input-icon '+(settingOpt ? '' : 'pagelayer-elp-link-no-addons')+'">'+
2269 + '<input class="pagelayer-elp-link" type="text" value="'+link+'" />'+
2270 + '<i class="pli pli-service pagelayer-elp-link-icon" title="'+pagelayer_l('link_options')+'" ></i>'+
2271 + '<div class="pagelayer-elp-link-list">'+
2272 + '</div>';
2273 +
2274 + if(settingOpt){
2275 + div += '<div class="pagelayer-elp-link-addons">'+
2276 + '<div class="pagelayer-elp-link-cb-div">'+
2277 + '<div class="pagelayer-elp-link-label-div" type="'+prop['type']+'">'+
2278 + '<label class="pagelayer-elp-link-label">'+pagelayer_l('open_link_in_new_window')+'</label>'+
2279 + '</div>'+
2280 + '<div>'+
2281 + '<input type="checkbox" name="link_new_tab" class="pagelayer-elp-checkbox" '+(!pagelayer_empty(values['target']) ? 'checked="checked"' : '')+' />'+
2282 + '</div>'+
2283 + '</div>'+
2284 + '<div class="pagelayer-elp-link-cb-div" >'+
2285 + '<div class="pagelayer-elp-link-label-div" type="'+prop['type']+'">'+
2286 + '<label class="pagelayer-elp-link-label">'+pagelayer_l('add_nofollow')+'</label>'+
2287 + '</div>'+
2288 + '<div>'+
2289 + '<input type="checkbox" name="link_no_follow" class="pagelayer-elp-checkbox" '+(!pagelayer_empty(values['rel']) ? 'checked="checked"' : '')+'/>'+
2290 + '</div>'+
2291 + '</div>'+
2292 + '<div class="pagelayer-elp-link-ca" >'+
2293 + '<div class="pagelayer-elp-link-label-div" type="'+prop['type']+'">'+
2294 + '<label class="pagelayer-elp-link-label">'+pagelayer_l('custom_attributes')+'</label>'+
2295 + '</div>'+
2296 + '<div>'+
2297 + '<input type="text" class="pagelayer-elp-text" placeholder="key = value" name="'+prop.c['name']+'" value="'+(pagelayer_empty(values['attrs']) ? '' : values['attrs'])+'"/>'+
2298 + '<p class="pagelayer-elp-link-desc">'+pagelayer_l('link_custom_attr_desc')+'</p>'+
2299 + '</div>'+
2300 + '</div>'+
1647 2301 '</div>';
2302 + }
2303 +
2304 + div += '</div>';
1648 2305
1649 2306 row.append(div);
1650 2307
2308 + var listWrap = row.find('.pagelayer-elp-link-list');
2309 + var time = null;
2310 +
2311 + //Add ID
2312 + var addID = function(permaID){
2313 + permaID = permaID || false;
2314 +
2315 + var lDiv = row.closest('[pagelayer-elp-name]').find('.pagelayer-elp-label-div');
2316 + if(permaID){
2317 + lDiv = lDiv.find('.pagelayer-elp-label');
2318 + lDiv.after('<span class="pagelayer-elp-link-id">ID : '+permaID+'</span>');
2319 + }else{
2320 + lDiv.find('.pagelayer-elp-link-id').remove();
2321 + }
2322 + };
2323 +
2324 + if(!isNaN(values['link'])){
2325 + addID(values['link']);
2326 + }
2327 +
2328 + var getLinkVal = function(val){
2329 +
2330 + if(typeof val === 'object' && pagelayer_length(val) == 1 && 'link' in val){
2331 + return val['link'];
2332 + }
2333 +
2334 + return val;
2335 + }
2336 +
2337 + var setTmpEmpty = function(){
2338 +
2339 + if( 'link' in values && !pagelayer_empty(values['link']) ){
2340 + return;
2341 + }
2342 +
2343 + _pagelayer_set_tmp_atts(row, '', '');
2344 + }
2345 +
1651 2346 // Set a Link
1652 2347 row.find('.pagelayer-elp-link').on('change', function(){
1653 - _pagelayer_set_atts(row, jQuery(this).val());// Save and Render
2348 +
2349 + var linkVal = jQuery(this).val();
2350 + values['link'] = linkVal;
2351 +
2352 + // Save and Render
2353 + _pagelayer_set_tmp_atts(row, '', linkVal);
2354 + _pagelayer_set_atts(row, getLinkVal(values));
2355 +
2356 + // Remove ID Holder
2357 + addID();
2358 +
1654 2359 });
2360 +
2361 + // Set a Link
2362 + row.find('.pagelayer-elp-link').on('input click', function(e){
2363 + e.stopPropagation();
2364 +
2365 + if(!listWrap.is(':visible')){
2366 + listWrap.show();
2367 + }
2368 +
2369 + var val = jQuery(this).val();
2370 +
2371 + clearTimeout(time);
2372 + time = setTimeout(function(){
1655 2373
2374 + jQuery.ajax({
2375 + url: pagelayer_ajax_url,
2376 + type: 'post',
2377 + data:{
2378 + 'action' : 'wp-link-ajax',
2379 + '_ajax_linking_nonce' : pagelayer_internal_linking_nonce,
2380 + 'search' : val,
2381 + },
2382 + success: function(response) {
2383 +
2384 + var data = jQuery.parseJSON(response);
2385 + var html = '';
2386 + //console.log('Link Data');console.log(response);
2387 +
2388 + if(pagelayer_empty(data)){
2389 + html = pagelayer_l('custom_url');
2390 + // Remove ID Holder
2391 + addID();
2392 + }else if(typeof data === 'object'){
2393 +
2394 + for(var key in data){
2395 + var vals = data[key];
2396 + html += '<div class="pagelayer-elp-link-item" data-id="'+vals['ID']+'" data-permalink="'+vals['permalink']+'">'+
2397 + '<div class="pagelayer-elp-link-title">'+
2398 + '<span class="pagelayer-elp-link-item-title" title="'+vals['title']+'">'+vals['title']+'</span>'+
2399 + '<span class="pagelayer-elp-link-item-perma" title="'+vals['permalink']+'">'+vals['permalink']+'</span>'+
2400 + '</div>'+
2401 + '<div class="pagelayer-elp-link-info">'+
2402 + '<span title="'+vals['info']+'">'+vals['info']+'</span>'+
2403 + '</div>'+
2404 + '</div>';
2405 + }
2406 + }
2407 +
2408 + listWrap.html(html);
2409 + },
2410 + fail: function(data) {
2411 + listWrap.html('Some error occured in getting the link data');
2412 + }
2413 + });
2414 +
2415 + }, 200);
2416 +
2417 + });
2418 +
2419 + listWrap.on('click', function(e){
2420 + e.stopPropagation();
2421 +
2422 + var lEle = jQuery(e.target).closest('.pagelayer-elp-link-item');
2423 +
2424 + // IF item not found
2425 + if(lEle.length < 1){
2426 + return;
2427 + }
2428 +
2429 + var perma = lEle.attr('data-permalink');
2430 + var ID = lEle.attr('data-id');
2431 + values['link'] = ID;
2432 +
2433 + // Save and Render
2434 + row.find('.pagelayer-elp-link').val(perma);
2435 + _pagelayer_set_tmp_atts(row, '', perma);
2436 + _pagelayer_set_atts(row, getLinkVal(values));
2437 +
2438 + listWrap.hide();
2439 +
2440 + // Show ID
2441 + addID(ID);
2442 + });
2443 +
2444 + pagelayer.gDocument.on('click', function(e){
2445 + listWrap.hide();
2446 + });
2447 +
2448 + row.find('.pagelayer-elp-checkbox').on('change', function(event){
2449 +
2450 + var cEle = jQuery(this);
2451 +
2452 + // Save or delete the value
2453 + var saveVal = function(key){
2454 + if(cEle.is(':checked')){
2455 + values[key] = true;
2456 + return;
2457 + }
2458 +
2459 + delete values[key];
2460 + }
2461 +
2462 + switch(cEle.attr('name')){
2463 + case 'link_new_tab':
2464 + saveVal('target');
2465 + break;
2466 + case 'link_no_follow':
2467 + saveVal('rel');
2468 + break;
2469 + }
2470 +
2471 + setTmpEmpty();
2472 + _pagelayer_set_atts(row, getLinkVal(values));
2473 +
2474 + });
2475 +
2476 + var linkTime = '';
2477 + row.find('.pagelayer-elp-text').on('input', function(event){
2478 + var cEle = jQuery(this);
2479 +
2480 + clearTimeout(linkTime);
2481 + linkTime = setTimeout(function(){
2482 + values['attrs'] = cEle.val();
2483 +
2484 + if(pagelayer_empty(values['attrs'])){
2485 + delete values['attrs'];
2486 + }
2487 +
2488 + setTmpEmpty();
2489 + _pagelayer_set_atts(row, getLinkVal(values));
2490 +
2491 + }, 500);
2492 + });
2493 +
2494 + row.find('.pagelayer-elp-link-icon').on('click', function(){
2495 + row.find('.pagelayer-elp-link-addons').slideToggle('slow');
2496 + });
2497 +
1656 2498 }
1657 2499
1658 2500 // The Textarea property
1659 2501 function pagelayer_elp_textarea(row, prop){
@@ -1660,13 +2502,14 @@
1660 2502
1661 2503 var rows = prop.rows ? 'rows="'+prop.rows+' "' : '';
1662 2504
1663 2505 var div = '<div class="pagelayer-elp-textarea-div">'+
1664 - '<textarea '+rows+'class="pagelayer-elp-textarea">'+prop.c['val']+'</textarea>'+
2506 + '<textarea '+rows+'class="pagelayer-elp-textarea"></textarea>'+
1665 2507 '</div>';
1666 2508
1667 2509 row.append(div);
1668 -
2510 + row.find('.pagelayer-elp-textarea').val(pagelayer_trim(prop.c['val']));
2511 +
1669 2512 // Handle on change
1670 2513 row.find('.pagelayer-elp-textarea').on('input', function(){
1671 2514 _pagelayer_set_atts(row, pagelayer_trim(jQuery(this).val()));// Save and Render
1672 2515 });
@@ -1672,14 +2515,17 @@
1672 2515 });
1673 2516 };
1674 2517
1675 2518 // Clear all editable
1676 -function pagelayer_clear_editable(){
2519 +function pagelayer_clear_editable(dontDestroy){
1677 2520
1678 2521 // Destroy all
1679 2522 for(var x in pagelayer_editor){
2523 + if(dontDestroy == x){
2524 + console.log('Skipping '+dontDestroy);
2525 + continue;
2526 + }
1680 2527 pagelayer_editor[x].pen.destroy();
1681 - pagelayer_editor[x].$.removeClass('pagelayer-pen');
1682 2528 }
1683 2529
1684 2530 };
1685 2531
@@ -1685,41 +2531,136 @@
1685 2531
1686 2532 // Makes a field editable in the DOM
1687 2533 function pagelayer_make_editable(jEle, e){
1688 2534
2535 + // The parent element
2536 + var pEle = jEle.closest('.pagelayer-ele, [pagelayer-ref-id]');
2537 +
2538 + // Mainly for editing table cells as pagelayer-ref-id is used by them
2539 + if(!pEle.hasClass('pagelayer-ele')){
2540 + var refID = pEle.attr('pagelayer-ref-id');
2541 + pEle = jQuery('[pagelayer-id="'+refID+'"]');
2542 + }
2543 +
2544 + var prop = jEle.attr('pagelayer-editable');
2545 + var eId = pagelayer_id(pEle)+'|'+jEle.attr('pagelayer-editable');// Editing ID
2546 +
1689 2547 // Is it already setup ?
1690 2548 if(jEle.hasClass('pagelayer-pen')){
1691 2549 //console.log('Already Penned');
2550 + //pagelayer_focus_editable(jEle, e, eId);
1692 2551 return true;
1693 2552 }
1694 2553
1695 - var prop = jEle.attr('pagelayer-editable');
2554 + var tag = pagelayer_tag(pEle);
2555 + var all_props = pagelayer_shortcodes[tag];
2556 + var edit_opts;
2557 + var fullEdit = false;
1696 2558
1697 - // Destroy the existing pen
1698 - if(!pagelayer_empty(pagelayer_editor[prop])){
1699 - pagelayer_editor[prop].pen.destroy();
1700 - pagelayer_editor[prop].$.removeClass('pagelayer-pen');
2559 + for(var i in pagelayer_tabs){
2560 + var tab = pagelayer_tabs[i];
2561 + for(var section in all_props[tab]){ //console.log(tab+' '+section);
2562 +
2563 + var props = section in pagelayer_shortcodes[tag] ? pagelayer_shortcodes[tag][section] : pagelayer_styles[section];//console.log(props);
2564 +
2565 + // Any editor options?
2566 + if(prop in props){
2567 +
2568 + if('e' in props[prop]){
2569 + edit_opts = props[prop].e;
2570 + }
2571 +
2572 + if(props[prop]['type'] == 'editor'){
2573 + fullEdit = true;
2574 + }
2575 + }
2576 + }
1701 2577 }
1702 2578
1703 - // The parent element
1704 - var pEle = jEle.closest('.pagelayer-ele');
2579 + var pen_tools = {
2580 + 'inline': [ 'viewHTML',
2581 + {'formating' : ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p']},
2582 + 'bold', 'italic', 'underline', 'strike',
2583 + { 'color': [] }, { 'background': [] },
2584 + 'removeformat'
2585 + ],
2586 + 'h': ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
2587 + 'headers': [{'formating' : ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']}],
2588 + 'c': [{ 'color': [] }, { 'background': [] }],
2589 + 'f': ['bold', 'italic', 'underline', 'strike'],
2590 + 'a': [{ 'align': ['left', 'center', 'right', 'justify'] }],
2591 + 'r': ['removeformat'],
2592 + 'v': ['viewHTML'],
2593 + };
1705 2594
2595 + // Create Toolbar Groups
2596 + if(!('pen_tools' in pagelayer_editor)){
2597 + pagelayer_editor['pen_tools'] = {};
2598 + }
2599 +
2600 + pagelayer_editor['pen_tools'] = Object.assign(pagelayer_editor['pen_tools'], pen_tools);
2601 +
2602 + var toolbar_options = [];
2603 +
2604 + if( pagelayer_empty(edit_opts) ){
2605 +
2606 + if(fullEdit){
2607 + toolbar_options = [
2608 + [ 'viewHTML' ],
2609 + [ 'bold', 'italic', 'underline', 'strike' ],
2610 + [ 'sub', 'super' ],
2611 + //[ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'blockquote'],
2612 + [ {'formating' : ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'blockquote']}],
2613 + [ {'align': ['left', 'center', 'right', 'justify']} ],
2614 + [ 'image', 'link'],
2615 + [ 'unorderedlist', 'orderedlist'],
2616 + [ {'size': []}, {'lineheight': []}, {'font': []}],
2617 + [ {'color': [] }, {'background': []}],
2618 + [ 'removeformat' ]
2619 + ];
2620 + }else{
2621 + toolbar_options = pagelayer_editor.pen_tools['inline'];
2622 + }
2623 + }else{
2624 + var options = [];
2625 +
2626 + if(! Array.isArray(edit_opts) ){
2627 + edit_opts = [edit_opts];
2628 + }
2629 +
2630 + for( var tt in edit_opts){
2631 +
2632 + var tool = edit_opts[tt];
2633 +
2634 + if(pagelayer_is_string(tool)){
2635 + if(tool in pagelayer_editor['pen_tools']){
2636 + tool = pagelayer_editor['pen_tools'][tool]
2637 + }else{
2638 + tool = [tool];
2639 + }
2640 + }
2641 +
2642 + options.push(tool);
2643 + }
2644 +
2645 + toolbar_options = options;
2646 + }
2647 +
1706 2648 var options = {
1707 2649 class: 'pagelayer-pen',
1708 - editor: jEle[0],
1709 - list: ['bold', 'italic', 'underline', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'strike'],
1710 - stay: false
2650 + editor: jEle,
2651 + toolbar: toolbar_options
1711 2652 }
1712 2653
1713 2654 // Setup the editor
1714 - pagelayer_editor[prop] = {};
1715 - pagelayer_editor[prop].pen = new Pen(options);
1716 - pagelayer_editor[prop].$ = jEle;
2655 + pagelayer_editor[eId] = {};
2656 + pagelayer_editor[eId].pen = new PagelayerPen(jEle, options);
2657 + pagelayer_editor[eId].$ = jEle;
1717 2658
1718 2659 // Are we the clicked object, then set the focus
1719 2660 if(e){
1720 2661 var target = jQuery(e.target);
1721 - if(target.is(jEle).length || jEle.find(target).length){
2662 + if(target.is(jEle) || jEle.find(target).length > 0){
1722 2663 jEle.focus();
1723 2664 }
1724 2665 }
1725 2666
@@ -1724,16 +2665,44 @@
1724 2665 }
1725 2666
1726 2667 // Reverse setup the event
1727 2668 jEle.on('blur', function(){
1728 - //pagelayer_editor[prop].pen.destroy();
2669 +
2670 + //pagelayer_editor[eId].pen.destroy();
2671 + if(jEle.hasClass('pagelayer-pen-focused')){
2672 + return;
2673 + }
2674 +
2675 + var cEle = pEle;
2676 +
2677 + // Do we have a parent ?
2678 + var have_parent = function(Ele){
2679 + var pId = pagelayer_get_parent(Ele);
2680 +
2681 + if(pagelayer_empty(pId)){
2682 + return;
2683 + }
2684 +
2685 + cEle = pagelayer_ele_by_id(pId);
2686 + have_parent(cEle);
2687 + }
2688 +
2689 + have_parent(cEle);
2690 +
2691 + var is_global = pagelayer_get_global_id(cEle);
2692 +
2693 + if(pagelayer_empty(is_global)){
2694 + return;
2695 + }
2696 +
2697 + pagelayer_sc_render(pEle);
2698 +
1729 2699 });
1730 2700
1731 - // Reverse setup the event
2701 + /*// Reverse setup the event
1732 2702 jEle.on('focus', function(){
1733 - jQuery('.pagelayer-pen-menu').hide();
1734 - pagelayer_editor[prop].pen.rebuild();
1735 - });
2703 + //pagelayer_clear_editable(eId);
2704 + });*/
1736 2705
1737 2706 // Reverse setup the event
1738 2707 jEle.on('input', function(){
1739 2708
@@ -1742,9 +2711,9 @@
1742 2711 // Set the property as well
1743 2712 pagelayer_set_atts(pEle, prop, val);
1744 2713
1745 2714 // Update the property
1746 - var input = pagelayer.$$('[pagelayer-elp-name='+prop+']').find('input,textarea,.trumbowyg-editor');
2715 + var input = pagelayer.$$('[pagelayer-element-id='+pagelayer_id(pEle)+']').find('[pagelayer-elp-name='+prop+']').find('input,textarea,.trumbowyg-editor');
1747 2716 //console.log(input);
1748 2717
1749 2718 if(input.length > 0){
1750 2719 if(input.hasClass('trumbowyg-editor')){
@@ -1808,21 +2777,22 @@
1808 2777
1809 2778 // Icon function
1810 2779 var icon_html = function(name, cat){
1811 2780 return '<span class="pagelayer-elp-icon-span">'+
1812 - '<i class="'+cat+' fa-'+name+'" icon="'+name+'" /> '+name+
2781 + '<i class="'+cat+' fa-'+name+'" icon="'+name+'" ></i> '+name+
1813 2782 '</span>';
1814 2783 }
1815 2784
1816 2785 var div = '<div class="pagelayer-elp-icon-div">'+
1817 - '<div class="pagelayer-elp-icon-preview">'+
1818 - '<i class="'+sel_icon+'"></i>'+
1819 - '<span class="pagelayer-elp-icon-name">'+
1820 - (pagelayer_empty(sel_name)?'Choose icon':sel_name)+
1821 - '</span>'+
1822 - '</div>'+
1823 - '<span class="pagelayer-elp-icon-open">▼</span>'+
1824 - '</div>';
2786 + '<div class="pagelayer-elp-icon-preview">'+
2787 + '<i class="'+sel_icon+'"></i>'+
2788 + '<span class="pagelayer-elp-icon-name">'+
2789 + (pagelayer_empty(sel_name)?'Choose icon':sel_name)+
2790 + '</span>'+
2791 + '</div>'+
2792 + '<span class="pagelayer-elp-icon-open">▼</span>'+
2793 + '<span class="pagelayer-elp-icon-close" '+(pagelayer_empty(sel_name)? 'style="display:none"': '')+'><b>&times;&nbsp;</b></span>'+
2794 + '</div>';
1825 2795
1826 2796 row.append(div);
1827 2797
1828 2798 // Make all icons list
@@ -1830,10 +2800,11 @@
1830 2800
1831 2801 if(pagelayer_loaded_icons.length > 1){
1832 2802 html += '<select class="pagelayer-elp-icon-sets">'+sets_html+'</select>';
1833 2803 }
1834 - html += '<span class="pagelayer-elp-icon-type" style="display:none;">'+
1835 - '<p data-tab="fas">'+pagelayer_l('Solid')+'</p>'+
2804 +
2805 + html += '<span class="pagelayer-elp-icon-type">'+
2806 + '<p data-tab="fas" class="active">'+pagelayer_l('Solid')+'</p>'+
1836 2807 '<p data-tab="far">'+pagelayer_l('Regular')+'</p>'+
1837 2808 '<p data-tab="fab">'+pagelayer_l('Brand')+'</p>'+
1838 2809 '</span>'+
1839 2810 '<input type="text" class="pagelayer-elp-search-icon" name="search-icon" placeholder="'+pagelayer_l('search')+'">'+
@@ -1850,14 +2821,15 @@
1850 2821 '</div>';
1851 2822
1852 2823 row.append(html);
1853 2824
1854 - if(cur_icon_set == 'font-awesome5'){
1855 - row.find('.pagelayer-elp-icon-type').show();
1856 - sorted_icons = icons[cur_icon_set]['fas'];
1857 - }
2825 + // Open the selector
2826 + row.find('.pagelayer-elp-icon-div').on('click', function(){
2827 + row.find('.pagelayer-elp-icon-selector').slideToggle();
2828 + });
1858 2829
1859 - row.find('.pagelayer-elp-icon-sets').on('change',function(){
2830 + /*// When the set changes
2831 + row.find('.pagelayer-elp-icon-sets').on('change', function(){
1860 2832 var v = cur_icon_set = jQuery(this).val();
1861 2833 var span = '';
1862 2834
1863 2835 for(var x in icons[v]){
@@ -1881,43 +2853,14 @@
1881 2853 if(row.find('.pagelayer-elp-search-icon').val() != ''){
1882 2854 row.find('.pagelayer-elp-search-icon').keyup();
1883 2855 }
1884 2856
1885 - });
2857 + });*/
1886 2858
1887 - // Open the selector
1888 - row.find('.pagelayer-elp-icon-div').on('click', function(){
1889 - row.find('.pagelayer-elp-icon-selector').slideToggle();
1890 - });
1891 -
1892 2859 // Handle type of icon
1893 - row.find('.pagelayer-elp-icon-type p').on('click', function(){
1894 -
1895 - if(cur_icon_set == 'font-awesome5'){
1896 -
1897 - var v = jQuery(this).data('tab');
1898 -
1899 - row.find('.pagelayer-elp-icon-type p').removeClass('active');
1900 -
1901 - jQuery(this).addClass('active');
1902 -
1903 - var span ='';
1904 - v = v.toLowerCase();
1905 -
1906 - sorted_icons = icons['font-awesome5'][v];
1907 -
1908 - for(var z in icons['font-awesome5'][v]['icons']){
1909 - span += icon_html(icons['font-awesome5'][v]['icons'][z], v);
1910 - }
1911 -
1912 - row.find('.pagelayer-elp-icon-list').empty().html(span);
1913 -
1914 - if(row.find('.pagelayer-elp-search-icon').val() != ''){
1915 - row.find('.pagelayer-elp-search-icon').keyup();
1916 - }
1917 -
1918 - }
1919 -
2860 + row.find('.pagelayer-elp-icon-type p').on('click', function(){
2861 + jQuery(this).toggleClass('active');
2862 + row.find('.pagelayer-elp-search-icon').keyup();
1920 2863 });
1921 2864
1922 2865 // Handle search of icon
1923 2866 row.find('.pagelayer-elp-search-icon').on('keyup', function(){
@@ -1922,18 +2865,25 @@
1922 2865 // Handle search of icon
1923 2866 row.find('.pagelayer-elp-search-icon').on('keyup', function(){
1924 2867
1925 2868 var v = this.value;
1926 - var span ='';
2869 + var span = '';
1927 2870 v = v.toLowerCase();
1928 2871 v = v.replace(/\s+/g, '-');
1929 2872 //console.log(sorted_icons);
1930 2873
1931 - for(var x in sorted_icons['icons']){
1932 - if(sorted_icons['icons'][x].includes(v)){
1933 - span += icon_html(sorted_icons['icons'][x], sorted_icons['pre']);
2874 + row.find('.pagelayer-elp-icon-type p.active').each(function(){
2875 + var tab = jQuery(this).data('tab');
2876 + tab = tab.toLowerCase();
2877 +
2878 + var cat = icons['font-awesome5'][tab]['icons'];
2879 +
2880 + for(var x in cat){
2881 + if(cat[x].includes(v) || v.length < 1){
2882 + span += icon_html(cat[x], tab);
2883 + }
1934 2884 }
1935 - }
2885 + });
1936 2886
1937 2887 row.find('.pagelayer-elp-icon-list').empty().html(span);
1938 2888
1939 2889 });
@@ -1954,38 +2904,194 @@
1954 2904 row.find('.pagelayer-elp-icon-selector').slideUp();
1955 2905
1956 2906 _pagelayer_set_atts(row, i);// Save and Render
1957 2907
2908 + row.find('.pagelayer-elp-icon-close').show();
1958 2909 return false;
1959 2910
1960 2911 });
1961 2912
2913 + // Delete the icon
2914 + row.find('.pagelayer-elp-icon-close').on('click', function(){
2915 +
2916 + // Set the icon in this list
2917 + row.find('.pagelayer-elp-icon-preview').html('<i class=""></i><span class="pagelayer-elp-icon-name">'+pagelayer_l('choose_icon')+'</span>');
2918 +
2919 + // Save and Render
2920 + _pagelayer_set_atts(row, '');
2921 + jQuery(this).hide();
2922 + return false;
2923 + });
2924 +
1962 2925 }
1963 2926
2927 +// The Access Property
2928 +function pagelayer_elp_access(row, prop){
2929 +
2930 + var div = '<div class="pagelayer-elp-access-div">'+
2931 + '<span class="pagelayer-elp-access"><i class="pli pli-caret-right" ></i></span>'+
2932 + '<div class="pagelayer-elp-access-holder"></div>'+
2933 + '</div>';
2934 +
2935 + row.append(div);
2936 +
2937 + var holder = row.find('.pagelayer-elp-access-holder');
2938 +
2939 + row.find('.pagelayer-elp-access').on('click', function(){
2940 +
2941 + // Setup first
2942 + if(holder.children().length < 1){
2943 + var p = row.parent().find('[pagelayer-access-item='+prop.show_group+']').detach();
2944 + p.appendTo(holder);
2945 + p.addClass('pagelayer-access-item-visible');
2946 + }
2947 +
2948 + // Show and hide
2949 + if(holder.is(':visible')){
2950 + holder.hide();
2951 + row.find('.pli-caret-right').removeClass('pli-caret-open');
2952 + }else{
2953 + holder.show();
2954 + row.find('.pli-caret-right').addClass('pli-caret-open');
2955 + }
2956 + });
2957 +
2958 +};
2959 +
2960 +// The Modal Property
2961 +function pagelayer_elp_modal(row, prop){
2962 +
2963 + var style = pagelayer_empty(prop.width) ? '' : 'style="width:'+prop.width+'"';
2964 +
2965 + var div = '<div class="pagelayer-elp-modal-div">'+
2966 + '<span class="pagelayer-elp-modal"><i class="pli pli-window" ></i></span>'+
2967 + '<div class="pagelayer-elp-modal-wrapper">'+
2968 + '<div class="pagelayer-elp-modal-wrap" '+style+'>'+
2969 + '<div class="pagelayer-elp-modal-header">'+
2970 + prop.label +'<i class="pagelayer-elp-modal-close pli pli-cross" aria-hidden="true"></i>'+
2971 + '</div><hr>'+
2972 + '<div class="pagelayer-elp-modal-holder"></div>'+
2973 + '</div>'+
2974 + '</div>'+
2975 + '</div>';
2976 +
2977 + row.append(div);
2978 +
2979 + var wrapper = row.find('.pagelayer-elp-modal-wrapper');
2980 + var holder = row.find('.pagelayer-elp-modal-holder');
2981 +
2982 + row.find('.pagelayer-elp-modal').on('click', function(){
2983 +
2984 + // Setup first
2985 + if(holder.children().length < 1){
2986 +
2987 + var p = row.parent().find('[pagelayer-access-item='+prop.show_group+']').detach();
2988 + p.appendTo(holder);
2989 + p.addClass('pagelayer-access-item-visible');
2990 + }
2991 +
2992 + // Show and hide
2993 + wrapper.show();
2994 +
2995 + });
2996 +
2997 + // Close Modal Property
2998 + row.find('.pagelayer-elp-modal-close').on('click', function(){
2999 + wrapper.hide();
3000 + });
3001 +
3002 + // On click Pagelayer setting icon
3003 + wrapper.on('click', function(event){
3004 + var target = jQuery(event.target);
3005 +
3006 + if(target.closest('.pagelayer-elp-modal-wrap').length > 0){
3007 + return;
3008 + }
3009 +
3010 + wrapper.hide();
3011 + });
3012 +
3013 +};
3014 +
1964 3015 // The Color Property
1965 3016 function pagelayer_elp_color(row, prop){
1966 3017
1967 - var div = '<div class="pagelayer-elp-color-div">'+
1968 - '<div class="pagelayer-elp-color-preview"></div>'+
1969 - '<span class="pagelayer-elp-remove-color pagelayer-prop-action"><i class="pli pli-cross" /></span>'+
1970 - '</div>';
3018 + var val = prop.c['val'];
3019 + var is_global = pagelayer_is_global_color(val);
3020 + var global_active = '';
1971 3021
3022 + // If global color not exist
3023 + if(!pagelayer_empty(is_global)){
3024 + val = pagelayer_global_colors[is_global]['value'];
3025 + global_active = 'pagelayer-active-global';
3026 + }
3027 +
3028 + var div = '<div class="pagelayer-elp-color-div-holder">'+
3029 + '<div class="pagelayer-elp-color-global '+global_active+'"></div>'+
3030 + '<div class="pagelayer-elp-color-div">'+
3031 + '<div class="pagelayer-elp-color-preview"></div>'+
3032 + '<span class="pagelayer-elp-remove-color"><i class="pli pli-cross" ></i></span>'+
3033 + '</div>'+
3034 + '<div class="pagelayer-global-color-list">'+
3035 + '<div class="pagelayer-global-setting-color">'+
3036 + '<b>Global Colors</b><span class="pli pli-service"></span>'+
3037 + '</div>';
3038 +
3039 + for( cid in pagelayer_global_colors ){
3040 +
3041 + var color = pagelayer_global_colors[cid];
3042 + var active_class = '';
3043 +
3044 + if(cid == is_global){
3045 + active_class = 'pagelayer-global-selected';
3046 + }
3047 +
3048 + div += '<div class="pagelayer-global-color-list-item '+ active_class +'" data-global-id="'+ cid +'">'+
3049 + '<span class="pagelayer-global-color-pre" style="background:'+ color['value'] +'"></span>'+
3050 + '<span class="pagelayer-global-color-title">'+ color['title'] +'</span>'+
3051 + '<span class="pagelayer-global-color-code">'+ color['value'] +'</span>'+
3052 + '</div>';
3053 + }
3054 + div += '</div></div>';
3055 +
1972 3056 row.append(div);
1973 3057
1974 - row.find('.pagelayer-elp-color-preview').css('background', prop.c['val']);
3058 + row.find('.pagelayer-elp-color-preview').css('background', val);
1975 3059
1976 - var picker = new Picker({
3060 + var picker = new pagelayer_Picker({
1977 3061 parent : row.find('.pagelayer-elp-color-div')[0],
1978 3062 popup : 'left',
1979 - color : prop.c['val'],
3063 + color : val,
1980 3064 doc: window.parent.document
1981 3065 });
1982 3066
3067 + var preview = row.find('.pagelayer-elp-color-preview');
3068 +
3069 + // If no val, then set blank
3070 + if(pagelayer_empty(val)){
3071 + preview.addClass('pagelayer-blank-preview');
3072 + }
3073 +
3074 + var handle_white = function(col){
3075 + if(col.charAt(1) == 'f'){
3076 + preview.addClass('pagelayer-white-border');
3077 + }else{
3078 + preview.removeClass('pagelayer-white-border');
3079 + }
3080 + }
3081 +
3082 + handle_white(val);
3083 +
1983 3084 // Handle selected color
1984 - picker.onChange = function(color) {
3085 + picker.onChange = function(color) {
3086 + preview.removeClass('pagelayer-blank-preview').css('background', color.rgbaString);
3087 + handle_white(color.hex);
3088 + _pagelayer_set_atts(row, color.hex);// Save and Render
1985 3089
1986 - row.find('.pagelayer-elp-color-preview').removeClass('pagelayer-blank-preview').css('background', color.rgbaString);
1987 - _pagelayer_set_atts(row, color.hex);// Save and Render
3090 + // Remove global
3091 + row.find('.pagelayer-elp-color-global').removeClass('pagelayer-active-global');
3092 + row.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
3093 + row.find('.pagelayer-global-color-list').hide();
1988 3094 };
1989 3095
1990 3096 picker.onOpen = picker.onChange;
1991 3097
@@ -1991,12 +3097,47 @@
1991 3097
1992 3098 row.find('.pagelayer-elp-remove-color').on('click', function(event){
1993 3099 event.stopPropagation();
1994 3100 picker.setColor(prop.default, true);
1995 - row.find('.pagelayer-elp-color-preview').addClass('pagelayer-blank-preview');
3101 + preview.addClass('pagelayer-blank-preview');
3102 + handle_white('');
1996 3103 _pagelayer_set_atts(row, ' ');// Save and Render
1997 - })
3104 + });
1998 3105
3106 + // Handle for global color
3107 + row.find('.pagelayer-elp-color-global').on('click', function(e){
3108 + row.find('.pagelayer-global-color-list').slideToggle();
3109 + });
3110 +
3111 + row.find('.pagelayer-global-setting-color').on('click', function(e){
3112 + e.stopPropagation();
3113 +
3114 + if(jQuery(e.target).closest('.pli-service').length < 1){
3115 + return;
3116 + }
3117 + window.open(pagelayer_customizer_url+'&autofocus%5Bsection%5D=pagelayer_global_colors_sec', '_blank');
3118 + });
3119 +
3120 + // Handle for global color
3121 + row.find('.pagelayer-global-color-list-item ').on('click', function(e){
3122 + e.stopPropagation();
3123 +
3124 + var listItem = jQuery(this);
3125 + var globalID = listItem.data('global-id');
3126 + var listHolder = row.find('.pagelayer-global-color-list');
3127 +
3128 + // Remove previous selecttion
3129 + listHolder.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
3130 + listItem.addClass('pagelayer-global-selected');
3131 + row.find('.pagelayer-elp-color-global').addClass('pagelayer-active-global');
3132 + listHolder.slideUp();
3133 +
3134 + var color = pagelayer_global_colors[globalID]['value'];
3135 + preview.removeClass('pagelayer-blank-preview').css('background', color);
3136 + handle_white(color);
3137 + _pagelayer_set_atts(row, '$'+globalID);// Save and Render
3138 +
3139 + });
1999 3140 }
2000 3141
2001 3142 // The Spinner property
2002 3143 function pagelayer_elp_spinner(row, prop){
@@ -2002,15 +3143,21 @@
2002 3143 function pagelayer_elp_spinner(row, prop){
2003 3144
2004 3145 var div = '<div class="pagelayer-elp-spinner-div">'+
2005 3146 '<input type="number" class="pagelayer-elp-spinner" name="'+prop.c['name']+'"'+
2006 - ' min="'+prop['min']+'" max="'+prop['max']+'" step="'+prop['step']+'" value="'+prop.c['val']+'"/>'+
3147 + ' min="'+prop['min']+'" max="'+prop['max']+'" step="'+prop['step']+'" value="'+parseFloat(prop.c['val'])+'"/>'+
2007 3148 '</div>';
2008 3149
2009 3150 row.append(div);
2010 3151
2011 3152 row.find('input').on('input', function(){
2012 - _pagelayer_set_atts(row, jQuery(this).val());// Save and Render
3153 + var value = parseFloat(this.value);
3154 + var max = parseFloat(this.max);
3155 +
3156 + if(!pagelayer_empty(max) && value > max){
3157 + value = max;
3158 + }
3159 + _pagelayer_set_atts(row, value);// Save and Render
2013 3160 });
2014 3161
2015 3162 }
2016 3163
@@ -2016,13 +3163,20 @@
2016 3163
2017 3164 // The Group Property
2018 3165 function pagelayer_elp_group(row, prop){
2019 3166
3167 + var btnHidden = '';
3168 +
3169 + // Hide button, clone and delete
3170 + if(!pagelayer_empty(prop['hide'])){
3171 + btnHidden = 'pagelayer-hidden';
3172 + }
3173 +
2020 3174 // Remove the pagelayer-show-tab
2021 3175 row.removeAttr('pagelayer-show-tab');
2022 3176
2023 3177 var div = '<div class="pagelayer-elp-group-div"></div>'+
2024 - '<center><button class="pagelayer-elp-button">'+prop['text']+'</button></center>';
3178 + '<center><button class="pagelayer-elp-button '+btnHidden+'">'+prop['text']+'</button></center>';
2025 3179
2026 3180 row.append(div);
2027 3181
2028 3182 // Add button
@@ -2031,9 +3185,9 @@
2031 3185 var ele_id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id') || '';
2032 3186 var pEle = jQuery('[pagelayer-id="'+ele_id+'"]');
2033 3187
2034 3188 // First add the element inside the group element
2035 - var id = pagelayer_element_add_child(pEle, prop['sc']);
3189 + var id = pagelayer_element_add_child(pEle, prop['sc'], prop);
2036 3190 //pagelayer_element_setup('[pagelayer-id='+id+']', true);
2037 3191
2038 3192 show_item(id);
2039 3193
@@ -2070,12 +3224,12 @@
2070 3224
2071 3225 // Create the HTML
2072 3226 var holder = jQuery('<div class="pagelayer-elp-group-item" pagelayer-group-item-id="'+id+'">'+
2073 3227 '<div class="pagelayer-elp-group-item-head">'+
2074 - '<span class="pagelayer-elp-group-item-drag"><i class="pli pli-menu" /></span>'+
3228 + '<span class="pagelayer-elp-group-item-drag"><i class="pli pli-menu" ></i></span>'+
2075 3229 '<span class="pagelayer-elp-group-item-title">'+title+'</span>'+
2076 - '<span class="pagelayer-elp-group-item-clone"><i class="pli pli-clone" /></span>'+
2077 - '<span class="pagelayer-elp-group-item-del"><i class="pli pli-trashcan" /></span>'+
3230 + '<span class="pagelayer-elp-group-item-clone '+btnHidden+'"><i class="pli pli-clone" ></i></span>'+
3231 + '<span class="pagelayer-elp-group-item-del '+btnHidden+'"><i class="pli pli-trashcan" ></i></span>'+
2078 3232 '</div>'+
2079 3233 '<div class="pagelayer-elp-group-item-body"></div>'+
2080 3234 '</div>');
2081 3235
@@ -2086,9 +3240,12 @@
2086 3240 row.find('.pagelayer-elp-group-div').first().append(holder);
2087 3241 }
2088 3242
2089 3243 // Setup the toggle
2090 - holder.find('.pagelayer-elp-group-item-title').first().on('click', function(){
3244 + holder.find('.pagelayer-elp-group-item-head').first().on('click', function(e){
3245 + if(jQuery(e.target).closest('.pagelayer-elp-group-item-clone, .pagelayer-elp-group-item-del, .pagelayer-elp-group-item-drag').length > 0){
3246 + return;
3247 + }
2091 3248 var rEle = holder.find('.pagelayer-elp-group-item-body').first();
2092 3249 var r_id = holder.attr('pagelayer-group-item-id');
2093 3250
2094 3251 // If the props are not already setup
@@ -2106,9 +3263,9 @@
2106 3263 }
2107 3264
2108 3265 }
2109 3266
2110 - rEle.toggle('slow');
3267 + rEle.toggle();
2111 3268 });
2112 3269
2113 3270 // Clone the item
2114 3271 holder.find('.pagelayer-elp-group-item-head .pli-clone').on('click', function(){
@@ -2139,16 +3296,43 @@
2139 3296 }
2140 3297 });
2141 3298
2142 3299 };
3300 +
3301 + // Setup the drag
3302 + pagelayer.$$(".pagelayer-elp-group-div").sortable({
3303 + axis: 'y',
3304 + nested : false,
3305 + vertical : true,
3306 + handle : ".pagelayer-elp-group-item-drag",
3307 + placeholder: "pagelayer-drag-highlight",
3308 + start : function(event, ui) {
3309 + var start_pos = ui.item.index();
3310 + ui.item.data('start_pos', start_pos);
3311 + },
3312 + stop : function(event, ui){
3313 + var end_pos = ui.item.index();
3314 + var id = jQuery(ui.item).closest('[pagelayer-group-item-id]').attr('pagelayer-group-item-id');
3315 + var jEle = jQuery('[pagelayer-id="'+id+'"]');
3316 + pagelayer_moving_element(jEle, ui.item.data('start_pos'), end_pos);
3317 + var par = pagelayer_get_parent(jEle);
3318 + if(par){
3319 + pagelayer_sc_render(pagelayer_ele_by_id(par));
3320 + }
3321 + }
3322 + });
2143 3323
2144 3324 // Handle click of the group
2145 3325 row.find('.pagelayer-elp-button').on('click', function(){
3326 + if('pro' in prop && pagelayer_empty(pagelayer_pro)){
3327 + pagelayer_pro_notice();
3328 + return;
3329 + }
2146 3330 add_item(row);
2147 3331 });
2148 3332
2149 3333 // Find the existing items
2150 - prop.el.$.find('[pagelayer-tag='+prop['sc']+']').each(function(){
3334 + prop.el.$.find('[pagelayer-parent="'+prop.el['id']+'"]').each(function(){
2151 3335 var jEle = jQuery(this);
2152 3336 var id = pagelayer_assign_id(jEle);
2153 3337 show_item(id);
2154 3338 });
@@ -2153,12 +3337,50 @@
2153 3337 show_item(id);
2154 3338 });
2155 3339 };
2156 3340
3341 +function pagelayer_pro_notice(){
3342 + var div = pagelayer.$$('.pagelayer-pro-notice');
3343 +
3344 + div.find('.pagelayer-pro-x').click(function(){
3345 + div.hide();
3346 + });
3347 +
3348 + div.show();
3349 +}
3350 +
3351 +// Moving an element
3352 +function pagelayer_moving_element(jEle, start_pos, end_pos){
3353 + if(start_pos==end_pos){
3354 + return;
3355 + }
3356 +
3357 + var id = pagelayer_assign_id(jEle);
3358 +
3359 + // Is there a wrap
3360 + var wrap = pagelayer_wrap_by_id(id);
3361 +
3362 + var par = wrap.parent();
3363 + var children = par.children("div");
3364 +
3365 + // This is required for Owl Carousel
3366 + if(children.length==1){
3367 + par = par.parent();
3368 + children = par.children("div");
3369 + }
3370 +
3371 + var element = children.eq(start_pos).detach();
3372 + if(end_pos < start_pos){
3373 + children.eq(end_pos).before(element);
3374 + }else{
3375 + children.eq(end_pos).after(element);
3376 + }
3377 +}
3378 +
2157 3379 // The Datetime Property
2158 3380 function pagelayer_elp_datetime(row, prop){
2159 3381
2160 - var div = '<div class="pagelayer-elp-datetime-div pagelayer-elp-input-icon">'+
3382 + var div = '<div class="pagelayer-elp-datetime-div">'+
2161 3383 '<input type="date" class="pagelayer-elp-datetime" name="'+prop.c['name']+'" value="'+prop.c['val']+'" />'+
2162 3384 '</div>';
2163 3385
2164 3386 row.append(div);
@@ -2172,19 +3394,21 @@
2172 3394 // The padding property
2173 3395 function pagelayer_elp_padding(row, prop){
2174 3396 var val = ['', '', '', ''];
2175 3397
2176 - if(prop.c['val'].length > 0){
2177 - val = prop.c['val'].split(',');
2178 - //console.log(val)
3398 + if(!pagelayer_empty(prop.c['val'])){
3399 + val = prop.c['val'];
3400 + if(pagelayer_is_string(val)){
3401 + val = val.split(',');
3402 + }
2179 3403 }
2180 3404
2181 3405 var div = '<div class="pagelayer-elp-padding-div">'+
2182 - '<input type="number" class="pagelayer-elp-padding" value="'+parseInt(val[0])+'"></input>'+
2183 - '<input type="number" class="pagelayer-elp-padding" value="'+parseInt(val[1])+'"></input>'+
2184 - '<input type="number" class="pagelayer-elp-padding" value="'+parseInt(val[2])+'"></input>'+
2185 - '<input type="number" class="pagelayer-elp-padding" value="'+parseInt(val[3])+'"></input>'+
2186 - '<i class="pli pli-link" />'+
3406 + '<div class="pagelayer-elp-padding-inner"><input type="number" class="pagelayer-elp-padding" value="'+parseFloat(val[0])+'"></input><span class="pagelayer-elp-padding-lbl">Top</span></div>'+
3407 + '<div class="pagelayer-elp-padding-inner"><input type="number" class="pagelayer-elp-padding" value="'+parseFloat(val[1])+'"></input><span class="pagelayer-elp-padding-lbl">Right</span></div>'+
3408 + '<div class="pagelayer-elp-padding-inner"><input type="number" class="pagelayer-elp-padding" value="'+parseFloat(val[2])+'"></input><span class="pagelayer-elp-padding-lbl">Bottom</span></div>'+
3409 + '<div class="pagelayer-elp-padding-inner"><input type="number" class="pagelayer-elp-padding" value="'+parseFloat(val[3])+'"></input><span class="pagelayer-elp-padding-lbl">Left</span></div>'+
3410 + '<i class="pli pli-link" ></i>'+
2187 3411 '</div>';
2188 3412
2189 3413 row.append(div);
2190 3414
@@ -2254,9 +3478,12 @@
2254 3478 var val =['','','',''];
2255 3479
2256 3480 // Do we have a val ?
2257 3481 if(!pagelayer_empty(prop.c['val'])){
2258 - val = prop.c['val'].split(',');
3482 + val = prop.c['val'];
3483 + if(pagelayer_is_string(val)){
3484 + val = val.split(',');
3485 + }
2259 3486 }
2260 3487
2261 3488 //var val = {color: '', blur: '', horizontal: '', vertical: ''};
2262 3489
@@ -2277,8 +3504,9 @@
2277 3504 '<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-color">'+
2278 3505 '<label class="pagelayer-elp-label">Color</label>'+
2279 3506 '<div class="pagelayer-elp-color-div">'+
2280 3507 '<div class="pagelayer-elp-color-preview"></div>'+
3508 + '<span class="pagelayer-elp-remove-color"><i class="pli pli-cross" ></i></span>'+
2281 3509 '</div>'+
2282 3510 '</div>'+
2283 3511 '</div>';
2284 3512
@@ -2287,23 +3515,51 @@
2287 3515 row.find('.pagelayer-prop-edit').on('click', function(){
2288 3516 row.find('.pagelayer-elp-shadow-div').toggleClass('pagelayer-prop-show');
2289 3517 });
2290 3518
2291 - row.find('.pagelayer-elp-color-preview').css('background', val[3]);
3519 + var preview = row.find('.pagelayer-elp-color-preview');
3520 + preview.css('background', val[3]);
2292 3521
2293 - var picker = new Picker({
3522 + var picker = new pagelayer_Picker({
2294 3523 parent : row.find('.pagelayer-elp-color-div')[0],
2295 3524 popup : 'left',
3525 + color : val[3],
2296 3526 doc: window.parent.document
2297 3527 });
2298 3528
3529 + // If no val, then set blank
3530 + if(pagelayer_empty(val[3])){
3531 + preview.addClass('pagelayer-blank-preview');
3532 + }
3533 +
3534 + var handle_white = function(col){
3535 + if(col.charAt(1) == 'f'){
3536 + preview.addClass('pagelayer-white-border');
3537 + }else{
3538 + preview.removeClass('pagelayer-white-border');
3539 + }
3540 + }
3541 +
3542 + handle_white(val[3]);
3543 +
2299 3544 // Handle selected color
2300 3545 picker.onChange = function(color) {
2301 - row.find('.pagelayer-elp-color-preview').css('background', color.rgbaString);
3546 + preview.removeClass('pagelayer-blank-preview').css('background', color.rgbaString);
3547 + handle_white(color.hex);
2302 3548 val[3] = (color.hex ? color.hex : '');
2303 3549 _pagelayer_set_atts(row, val);
2304 3550 };
2305 3551
3552 + // Remove Color
3553 + row.find('.pagelayer-elp-remove-color').on('click', function(event){
3554 + event.stopPropagation();
3555 + picker.setColor(prop.default, true);
3556 + preview.addClass('pagelayer-blank-preview');
3557 + handle_white('');
3558 + val[3] = '';
3559 + _pagelayer_set_atts(row, val);
3560 + });
3561 +
2306 3562 row.find('input').on('input', function(){
2307 3563 var i = 0;
2308 3564 row.find('.pagelayer-elp-shadow-input').each(function(){
2309 3565 var value = jQuery(this).val();
@@ -2321,9 +3577,12 @@
2321 3577 var val = ['','','','','',''];
2322 3578
2323 3579 // Do we have a val ?
2324 3580 if(!pagelayer_empty(prop.c['val'])){
2325 - val = prop.c['val'].split(',');
3581 + val = prop.c['val'];
3582 + if(pagelayer_is_string(val)){
3583 + val = val.split(',');
3584 + }
2326 3585 }
2327 3586
2328 3587 var val_pos = ['horizontal','vertical','blur','color','spread','inset'];
2329 3588
@@ -2348,13 +3607,14 @@
2348 3607 '<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-color">'+
2349 3608 '<label class="pagelayer-elp-label">Color</label>'+
2350 3609 '<div class="pagelayer-elp-color-div">'+
2351 3610 '<div class="pagelayer-elp-color-preview"></div>'+
3611 + '<span class="pagelayer-elp-remove-color"><i class="pli pli-cross" ></i></span>'+
2352 3612 '</div>'+
2353 3613 '</div>'+
2354 3614 '<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-inset">'+
2355 3615 '<label class="pagelayer-elp-label">Shadow</label>'+
2356 - '<select class="pagelayer-elp-shadow-input" name="inset" type="checkbox" class="pagelayer-elp-shadow-inset">'+
3616 + '<select class="pagelayer-elp-shadow-input pagelayer-elp-select" name="inset" type="checkbox" class="pagelayer-elp-shadow-inset">'+
2357 3617 '<option value="">Outset</option>'+
2358 3618 '<option value="inset"'+(pagelayer_empty(val[5]) ? '' : ' selected' )+'>Inset</option>'+
2359 3619 '</select>'+
2360 3620 '</div>'+
@@ -2365,23 +3625,52 @@
2365 3625 row.find('.pagelayer-prop-edit').on('click', function(){
2366 3626 row.find('.pagelayer-elp-shadow-div').toggleClass('pagelayer-prop-show');
2367 3627 });
2368 3628
2369 - row.find('.pagelayer-elp-color-preview').css('background', val[3]);
3629 + var preview = row.find('.pagelayer-elp-color-preview');
3630 + preview.css('background', val[3]);
2370 3631
2371 - var picker = new Picker({
3632 + var picker = new pagelayer_Picker({
2372 3633 parent : row.find('.pagelayer-elp-color-div')[0],
2373 3634 popup : 'left',
3635 + color : val[3],
2374 3636 doc: window.parent.document
2375 3637 });
2376 3638
3639 + // If no val, then set blank
3640 + if(pagelayer_empty(val[3])){
3641 + preview.addClass('pagelayer-blank-preview');
3642 + }
3643 +
3644 + var handle_white = function(col){
3645 + if(col.charAt(1) == 'f'){
3646 + preview.addClass('pagelayer-white-border');
3647 + }else{
3648 + preview.removeClass('pagelayer-white-border');
3649 + }
3650 + }
3651 +
3652 + handle_white(val[3]);
3653 +
2377 3654 // Handle selected color
2378 3655 picker.onChange = function(color) {
2379 - row.find('.pagelayer-elp-color-preview').css('background', color.rgbaString);
3656 + row.find('.pagelayer-elp-color-preview').removeClass('pagelayer-blank-preview').css('background', color.rgbaString);
3657 + handle_white(color.hex);
2380 3658 val[3] = (color.hex ? color.hex : '');
2381 3659 _pagelayer_set_atts(row, val);
2382 3660 };
2383 3661
3662 + // Remove Color
3663 + row.find('.pagelayer-elp-remove-color').on('click', function(event){
3664 + event.stopPropagation();
3665 + picker.setColor(prop.default, true);
3666 + preview.addClass('pagelayer-blank-preview');
3667 + handle_white('');
3668 + val[3] = '';
3669 + _pagelayer_set_atts(row, val);
3670 + });
3671 +
3672 + // Onchange set props
2384 3673 row.find('.pagelayer-elp-shadow-input').on('input change', function(){
2385 3674 //var i = 0;
2386 3675 row.find('.pagelayer-elp-shadow-input').each(function(){
2387 3676 var value = jQuery(this).val();
@@ -2400,9 +3689,12 @@
2400 3689 var val = [0,100,100,0,0,100,100];
2401 3690
2402 3691 // Do we have a val ?
2403 3692 if(!pagelayer_empty(prop.c['val'])){
2404 - val = prop.c['val'].split(',');
3693 + val = prop.c['val'];
3694 + if(pagelayer_is_string(val)){
3695 + val = val.split(',');
3696 + }
2405 3697 }
2406 3698
2407 3699 var filters = [['blur','10','0.1'],['brightness','200','1'],['contrast','200','1'],['grayscale','200','1'],['hue','360','1'],['opacity','100','1'],['saturate','200','1']];
2408 3700
@@ -2411,9 +3703,9 @@
2411 3703
2412 3704 jQuery.each(val,function(key, value){
2413 3705 div += '<div class="pagelayer-elp-prop-grp pagelayer-elp-filter-'+filters[key][0]+'">'+
2414 3706 '<label class="pagelayer-elp-label">'+filters[key][0]+'</label>'+
2415 - '<input class="pagelayer-elp-slider pagelayer-elp-filter-input" type="range" max="'+filters[key][1]+'" min="0" step="'+filters[key][2]+'" class="pagelayer-elp-filter-'+filters[key][0]+'" value="'+value+'"></input>'+
3707 + '<input class="pagelayer-elp-slider pagelayer-elp-filter-input pagelayer-elp-filter-'+filters[key][0]+'" type="range" max="'+filters[key][1]+'" min="0" step="'+filters[key][2]+'" value="'+value+'"></input>'+
2416 3708 '<span class="pagelayer-elp-filter-val">'+value+'</span>'+
2417 3709 '</div>';
2418 3710 });
2419 3711
@@ -2439,16 +3731,53 @@
2439 3731
2440 3732 // The gradient property
2441 3733 function pagelayer_elp_gradient(row, prop){
2442 3734
2443 - var val =['','','','','','',''];
3735 + var val = ['','','','','','',''];
2444 3736
2445 3737 // Do we have a val ?
2446 3738 if(!pagelayer_empty(prop.c['val'])){
2447 - val = prop.c['val'].split(',');
3739 + val = prop.c['val'];
3740 + if(pagelayer_is_string(val)){
3741 + val = val.split(',');
3742 + }
2448 3743 }
2449 3744
3745 + var setColor = [val[1], val[3], val[5]];
3746 +
2450 3747 //var val = {color: '', blur: '', horizontal: '', vertical: ''};
3748 + var getColorList = function(num){
3749 +
3750 + var is_global = pagelayer_is_global_color(setColor[num]);
3751 + var global_list = '<div class="pagelayer-global-color-list">'+
3752 + '<div class="pagelayer-global-setting-color">'+
3753 + '<b>Global Colors</b><span class="pli pli-service"></span>'+
3754 + '</div>';
3755 +
3756 + for( cid in pagelayer_global_colors ){
3757 +
3758 + var color = pagelayer_global_colors[cid];
3759 + var active_class = '';
3760 +
3761 + if(cid == is_global){
3762 + active_class = 'pagelayer-global-selected';
3763 + }
3764 +
3765 + // If global color not exist
3766 + if(!pagelayer_empty(is_global)){
3767 + setColor[num] = pagelayer_global_colors[is_global]['value'];
3768 + }
3769 +
3770 + global_list += '<div class="pagelayer-global-color-list-item '+ active_class +'" data-global-id="'+ cid +'">'+
3771 + '<span class="pagelayer-global-color-pre" style="background:'+ color['value'] +'"></span>'+
3772 + '<span class="pagelayer-global-color-title">'+ color['title'] +'</span>'+
3773 + '<span class="pagelayer-global-color-code">'+ color['value'] +'</span>'+
3774 + '</div>';
3775 + }
3776 + global_list += '</div>';
3777 +
3778 + return global_list;
3779 + }
2451 3780
2452 3781 var div = '<div class="pagelayer-elp-gradient-div">'+
2453 3782 '<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-angle">'+
2454 3783 '<label class="pagelayer-elp-label">Angle</label>'+
@@ -2453,12 +3782,16 @@
2453 3782 '<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-angle">'+
2454 3783 '<label class="pagelayer-elp-label">Angle</label>'+
2455 3784 '<input class="pagelayer-elp-gradient-input" type="number" max="360" min="0" step="1" class="pagelayer-elp-gradient-angle" value="'+val[0]+'"></input>'+
2456 3785 '</div>'+
2457 - '<div class="pagelayer-elp-prop-grp">'+
2458 - '<label class="pagelayer-elp-label">color 1</label>'+
2459 - '<div class="pagelayer-elp-color-div">'+
2460 - '<div class="pagelayer-elp-gradient-color1 pagelayer-elp-color-preview"></div>'+
3786 + '<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-color">'+
3787 + '<label class="pagelayer-elp-label">Color 1</label>'+
3788 + '<div class="pagelayer-elp-color-div-holder">'+
3789 + '<div class="pagelayer-elp-color-global"></div>'+
3790 + '<div class="pagelayer-elp-color-div">'+
3791 + '<div class="pagelayer-elp-gradient-color1 pagelayer-elp-color-preview"></div>'+
3792 + '</div>'+
3793 + getColorList(0)+
2461 3794 '</div>'+
2462 3795 '</div>'+
2463 3796 '<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-per1">'+
2464 3797 '<label class="pagelayer-elp-label">Percentage 1</label>'+
@@ -2463,12 +3796,16 @@
2463 3796 '<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-per1">'+
2464 3797 '<label class="pagelayer-elp-label">Percentage 1</label>'+
2465 3798 '<input class="pagelayer-elp-gradient-input" type="number" max="100" min="-100" step="1" class="pagelayer-elp-gradient-per1" value="'+val[2]+'"></input>'+
2466 3799 '</div>'+
2467 - '<div class="pagelayer-elp-prop-grp">'+
2468 - '<label class="pagelayer-elp-label">color 2</label>'+
2469 - '<div class="pagelayer-elp-color-div">'+
2470 - '<div class="pagelayer-elp-gradient-color2 pagelayer-elp-color-preview"></div>'+
3800 + '<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-color">'+
3801 + '<label class="pagelayer-elp-label">Color 2</label>'+
3802 + '<div class="pagelayer-elp-color-div-holder">'+
3803 + '<div class="pagelayer-elp-color-global"></div>'+
3804 + '<div class="pagelayer-elp-color-div">'+
3805 + '<div class="pagelayer-elp-gradient-color2 pagelayer-elp-color-preview"></div>'+
3806 + '</div>'+
3807 + getColorList(1)+
2471 3808 '</div>'+
2472 3809 '</div>'+
2473 3810 '<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-per2">'+
2474 3811 '<label class="pagelayer-elp-label">Percentage 2</label>'+
@@ -2473,12 +3810,16 @@
2473 3810 '<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-per2">'+
2474 3811 '<label class="pagelayer-elp-label">Percentage 2</label>'+
2475 3812 '<input class="pagelayer-elp-gradient-input" type="number" max="100" min="0" step="1" class="pagelayer-elp-gradient-per2" value="'+val[4]+'"></input>'+
2476 3813 '</div>'+
2477 - '<div class="pagelayer-elp-prop-grp">'+
2478 - '<label class="pagelayer-elp-label">color 3</label>'+
2479 - '<div class="pagelayer-elp-color-div">'+
2480 - '<div class="pagelayer-elp-gradient-color3 pagelayer-elp-color-preview"></div>'+
3814 + '<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-color">'+
3815 + '<label class="pagelayer-elp-label">Color 3</label>'+
3816 + '<div class="pagelayer-elp-color-div-holder">'+
3817 + '<div class="pagelayer-elp-color-global"></div>'+
3818 + '<div class="pagelayer-elp-color-div">'+
3819 + '<div class="pagelayer-elp-gradient-color3 pagelayer-elp-color-preview"></div>'+
3820 + '</div>'+
3821 + getColorList(2)+
2481 3822 '</div>'+
2482 3823 '</div>'+
2483 3824 '<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-per3">'+
2484 3825 '<label class="pagelayer-elp-label">Percentage 3</label>'+
@@ -2486,54 +3827,70 @@
2486 3827 '</div>'+
2487 3828 '</div>';
2488 3829
2489 3830 row.append(div);
2490 - var i = 1;
3831 + var i = 0;
2491 3832 row.find('.pagelayer-elp-color-preview').each(function(){
2492 - jQuery(this).css('background', val[i]);
2493 - i = i+2;
3833 + jQuery(this).css('background', setColor[i]);
3834 + i++;
2494 3835 });
2495 3836
2496 - var picker1 = new Picker({
3837 + // Remove global
3838 + var removeGlobal = function(holder){
3839 + holder.find('.pagelayer-elp-color-global').removeClass('pagelayer-active-global');
3840 + holder.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
3841 + holder.find('.pagelayer-global-color-list').hide();
3842 + }
3843 +
3844 + var picker1 = new pagelayer_Picker({
2497 3845 parent : row.find('.pagelayer-elp-gradient-color1')[0],
2498 3846 popup : 'left',
2499 - color : val[1],
3847 + color : setColor[0],
2500 3848 doc: window.parent.document
2501 3849 });
2502 3850
2503 3851 // Handle selected color
2504 3852 picker1.onChange = function(color) {
2505 - row.find('.pagelayer-elp-gradient-color1').css('background', color.rgbaString);
3853 + var cPreview = row.find('.pagelayer-elp-gradient-color1')
3854 + cPreview.css('background', color.rgbaString);
2506 3855 val[1] = (color.hex ? color.hex : '');
2507 3856 _pagelayer_set_atts(row, val);
3857 +
3858 + removeGlobal(cPreview.closest('.pagelayer-elp-color-div-holder'));
2508 3859 };
2509 3860
2510 - var picker2 = new Picker({
3861 + var picker2 = new pagelayer_Picker({
2511 3862 parent : row.find('.pagelayer-elp-gradient-color2')[0],
2512 3863 popup : 'left',
2513 - color : val[3],
3864 + color : setColor[1],
2514 3865 doc: window.parent.document
2515 3866 });
2516 3867
2517 3868 // Handle selected color
2518 3869 picker2.onChange = function(color) {
2519 - row.find('.pagelayer-elp-gradient-color2').css('background', color.rgbaString);
3870 + var cPreview = row.find('.pagelayer-elp-gradient-color2');
3871 + cPreview.css('background', color.rgbaString);
2520 3872 val[3] = (color.hex ? color.hex : '');
2521 3873 _pagelayer_set_atts(row, val);
3874 +
3875 + removeGlobal(cPreview.closest('.pagelayer-elp-color-div-holder'));
2522 3876 };
2523 3877
2524 - var picker3 = new Picker({
3878 + var picker3 = new pagelayer_Picker({
2525 3879 parent : row.find('.pagelayer-elp-gradient-color3')[0],
2526 3880 popup : 'left',
2527 - color : val[5],
3881 + color : setColor[2],
2528 3882 doc: window.parent.document
2529 3883 });
2530 3884
2531 3885 // Handle selected color
2532 3886 picker3.onChange = function(color) {
2533 - row.find('.pagelayer-elp-gradient-color3').css('background', color.rgbaString);
3887 + var cPreview = row.find('.pagelayer-elp-gradient-color3');
3888 + cPreview.css('background', color.rgbaString);
2534 3889 val[5] = (color.hex ? color.hex : '');
2535 3890 _pagelayer_set_atts(row, val);
3891 +
3892 + removeGlobal(cPreview.closest('.pagelayer-elp-color-div-holder'));
2536 3893 };
2537 3894
2538 3895 row.find('input').on('input', function(){
2539 3896 var i = 0;
@@ -2544,125 +3901,280 @@
2544 3901 });
2545 3902 _pagelayer_set_atts(row, val);
2546 3903 });
2547 3904
3905 + row.find('.pagelayer-global-selected').each(function(){
3906 + jQuery(this).closest('.pagelayer-elp-color-div-holder').find('.pagelayer-elp-color-global').addClass('pagelayer-active-global');
3907 + });
3908 +
3909 + // Handle for global color
3910 + row.find('.pagelayer-elp-color-global').on('click', function(e){
3911 + jQuery(this).closest('.pagelayer-elp-color-div-holder').find('.pagelayer-global-color-list').slideToggle();
3912 + });
3913 +
3914 + row.find('.pagelayer-global-setting-color').on('click', function(e){
3915 + e.stopPropagation();
3916 +
3917 + if(jQuery(e.target).closest('.pli-service').length < 1){
3918 + return;
3919 + }
3920 +
3921 + window.open( pagelayer_customizer_url + '&autofocus%5Bsection%5D=pagelayer_global_colors_sec', '_blank' );
3922 + });
3923 +
3924 + // Handle for global color
3925 + row.find('.pagelayer-global-color-list-item ').on('click', function(e){
3926 + e.stopPropagation();
3927 +
3928 + var listItem = jQuery(this);
3929 + var globalID = listItem.data('global-id');
3930 + var listHolder = listItem.closest('.pagelayer-global-color-list');
3931 + var colorHolder = listItem.closest('.pagelayer-elp-color-div-holder');
3932 + var colorPreview = colorHolder.find('.pagelayer-elp-color-preview');
3933 +
3934 + // Remove previous selecttion
3935 + listHolder.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
3936 + listItem.addClass('pagelayer-global-selected');
3937 + colorHolder.find('.pagelayer-elp-color-global').addClass('pagelayer-active-global');
3938 + listHolder.slideUp();
3939 +
3940 + var color = pagelayer_global_colors[globalID]['value'];
3941 + colorPreview.removeClass('pagelayer-blank-preview').css('background', color);
3942 +
3943 + var i = 1;
3944 +
3945 + if(colorPreview.hasClass('pagelayer-elp-gradient-color2')){
3946 + i = 3;
3947 + }
3948 +
3949 + if(colorPreview.hasClass('pagelayer-elp-gradient-color3')){
3950 + i = 5;
3951 + }
3952 +
3953 + val[i] = '$'+globalID;
3954 + _pagelayer_set_atts(row, val);// Save and Render
3955 +
3956 + });
3957 +
2548 3958 }
2549 3959
3960 +function pagelayer_elp_font_family(row, prop){
3961 +
3962 + var options = '';
3963 + var option = function(val, lang, type){
3964 + var selected = (val != prop.c['val']) ? '' : 'selected="selected"';
3965 + var lang = pagelayer_empty(lang) ? 'Default' : lang;
3966 + return '<option class="pagelayer-elp-select-option" value="'+val+'" type="'+type+'" '+selected+'>'+lang+'</option>';
3967 + }
3968 +
3969 + for(y in pagelayer_fonts){
3970 + if(y != 'default'){
3971 + options += '<optgroup label="'+pagelayer_ucwords(y)+'">';
3972 + }
3973 + for (x in pagelayer_fonts[y]){
3974 + options += option((jQuery.isNumeric(x) ? pagelayer_fonts[y][x] : x), pagelayer_fonts[y][x], y);
3975 + }
3976 + }
3977 +
3978 + var div = '<div class="pagelayer-elp-select-div pagelayer-elp-pos-rel">'+
3979 + '<select class="pagelayer-elp-select pagelayer-select" name="'+prop.c['name']+'">'+options+'</select>'+
3980 + '</div>';
3981 +
3982 + row.append(div);
3983 +
3984 + row.find('select').on('change', function(){
3985 +
3986 + var sEle = jQuery(this);
3987 +
3988 + pagelayer_link_font_family(sEle);
3989 + _pagelayer_set_atts(row, sEle.val());// Save and Render
3990 +
3991 + });
3992 +
3993 +}
3994 +
2550 3995 // The typography property
2551 3996 function pagelayer_elp_typography(row, prop){
2552 3997
2553 - var val =['','','','','','','','','',''];
3998 + var val = pagelayer_parse_typo(prop.c['val'], true);
3999 + var is_typo = pagelayer_is_global_typo(prop.c['val']);
4000 + var global_active = '';
4001 + var save_timer = {};
2554 4002
2555 - // Do we have a val ?
2556 - if(!pagelayer_empty(prop.c['val'])){
2557 - val = prop.c['val'].split(',');
4003 + // Load value of tablet and mobile
4004 + var val_tablet = pagelayer_get_att(prop.el.$, prop.c['name']+'_tablet');
4005 + var val_mobile = pagelayer_get_att(prop.el.$, prop.c['name']+'_mobile');
4006 +
4007 + val_tablet = pagelayer_parse_typo(val_tablet);
4008 + val_mobile = pagelayer_parse_typo(val_mobile);
4009 +
4010 +
4011 + // If global color not exist
4012 + if(!pagelayer_empty(is_typo)){
4013 + global_active = 'pagelayer-active-global';
2558 4014 }
2559 4015
2560 - var select = { 'style' : ['', 'Normal', 'Italic', 'Oblique'],
2561 - 'weight' : ['', '100', '200', '300', '400', '500', '600', '700', '800', '900'],
2562 - 'variant' : ['', 'Normal', 'Small-caps'],
2563 - 'deco-line' : ['', 'None', 'Overline', 'Line-through', 'Underline', 'Underline Overline'],
2564 - 'deco-style' : ['Solid', 'Double', 'Dotted', 'Dashed', 'Wavy'],
2565 - 'transform' : ['', 'Capitalize', 'Uppercase', 'Lowercase'],
2566 - 'fonts' : ['', 'ABeeZee', 'Abel', 'Abhaya Libre', 'Abril Fatface', 'Aclonica', 'Acme', 'Actor', 'Adamina', 'Advent Pro', 'Aguafina Script', 'Akronim', 'Aladin', 'Aldrich', 'Alef', 'Alegreya', 'Alegreya SC', 'Alegreya Sans', 'Alegreya Sans SC', 'Aleo', 'Alex Brush', 'Alfa Slab One', 'Alice', 'Alike', 'Alike Angular', 'Allan', 'Allerta', 'Allerta Stencil', 'Allura', 'Almendra', 'Almendra Display', 'Almendra SC', 'Amarante', 'Amaranth', 'Amatic SC', 'Amethysta', 'Amiko', 'Amiri', 'Amita', 'Anaheim', 'Andada', 'Andika', 'Angkor', 'Annie Use Your Telescope', 'Anonymous Pro', 'Antic', 'Antic Didone', 'Antic Slab', 'Anton', 'Arapey', 'Arbutus', 'Arbutus Slab', 'Architects Daughter', 'Archivo', 'Archivo Black', 'Archivo Narrow', 'Aref Ruqaa', 'Arima Madurai', 'Arimo', 'Arizonia', 'Armata', 'Arsenal', 'Artifika', 'Arvo', 'Arya', 'Asap', 'Asap Condensed', 'Asar', 'Asset', 'Assistant', 'Astloch', 'Asul', 'Athiti', 'Atma', 'Atomic Age', 'Aubrey', 'Audiowide', 'Autour One', 'Average', 'Average Sans', 'Averia Gruesa Libre', 'Averia Libre', 'Averia Sans Libre', 'Averia Serif Libre', 'B612', 'B612 Mono', 'Bad Script', 'Bahiana', 'Bai Jamjuree', 'Baloo', 'Baloo Bhai', 'Baloo Bhaijaan', 'Baloo Bhaina', 'Baloo Chettan', 'Baloo Da', 'Baloo Paaji', 'Baloo Tamma', 'Baloo Tammudu', 'Baloo Thambi', 'Balthazar', 'Bangers', 'Barlow', 'Barlow Condensed', 'Barlow Semi Condensed', 'Barrio', 'Basic', 'Battambang', 'Baumans', 'Bayon', 'Belgrano', 'Bellefair', 'Belleza', 'BenchNine', 'Bentham', 'Berkshire Swash', 'Bevan', 'Bigelow Rules', 'Bigshot One', 'Bilbo', 'Bilbo Swash Caps', 'BioRhyme', 'BioRhyme Expanded', 'Biryani', 'Bitter', 'Black And White Picture', 'Black Han Sans', 'Black Ops One', 'Bokor', 'Bonbon', 'Boogaloo', 'Bowlby One', 'Bowlby One SC', 'Brawler', 'Bree Serif', 'Bubblegum Sans', 'Bubbler One', 'Buda', 'Buenard', 'Bungee', 'Bungee Hairline', 'Bungee Inline', 'Bungee Outline', 'Bungee Shade', 'Butcherman', 'Butterfly Kids', 'Cabin', 'Cabin Condensed', 'Cabin Sketch', 'Caesar Dressing', 'Cagliostro', 'Cairo', 'Calligraffitti', 'Cambay', 'Cambo', 'Candal', 'Cantarell', 'Cantata One', 'Cantora One', 'Capriola', 'Cardo', 'Carme', 'Carrois Gothic', 'Carrois Gothic SC', 'Carter One', 'Catamaran', 'Caudex', 'Caveat', 'Caveat Brush', 'Cedarville Cursive', 'Ceviche One', 'Chakra Petch', 'Changa', 'Changa One', 'Chango', 'Charm', 'Charmonman', 'Chathura', 'Chau Philomene One', 'Chela One', 'Chelsea Market', 'Chenla', 'Cherry Cream Soda', 'Cherry Swash', 'Chewy', 'Chicle', 'Chivo', 'Chonburi', 'Cinzel', 'Cinzel Decorative', 'Clicker Script', 'Coda', 'Coda Caption', 'Codystar', 'Coiny', 'Combo', 'Comfortaa', 'Coming Soon', 'Concert One', 'Condiment', 'Content', 'Contrail One', 'Convergence', 'Cookie', 'Copse', 'Corben', 'Cormorant', 'Cormorant Garamond', 'Cormorant Infant', 'Cormorant SC', 'Cormorant Unicase', 'Cormorant Upright', 'Courgette', 'Cousine', 'Coustard', 'Covered By Your Grace', 'Crafty Girls', 'Creepster', 'Crete Round', 'Crimson Text', 'Croissant One', 'Crushed', 'Cuprum', 'Cute Font', 'Cutive', 'Cutive Mono', 'Damion', 'Dancing Script', 'Dangrek', 'David Libre', 'Dawning of a New Day', 'Days One', 'Dekko', 'Delius', 'Delius Swash Caps', 'Delius Unicase', 'Della Respira', 'Denk One', 'Devonshire', 'Dhurjati', 'Didact Gothic', 'Diplomata', 'Diplomata SC', 'Do Hyeon', 'Dokdo', 'Domine', 'Donegal One', 'Doppio One', 'Dorsa', 'Dosis', 'Dr Sugiyama', 'Duru Sans', 'Dynalight', 'EB Garamond', 'Eagle Lake', 'East Sea Dokdo', 'Eater', 'Economica', 'Eczar', 'El Messiri', 'Electrolize', 'Elsie', 'Elsie Swash Caps', 'Emblema One', 'Emilys Candy', 'Encode Sans', 'Encode Sans Condensed', 'Encode Sans Expanded', 'Encode Sans Semi Condensed', 'Encode Sans Semi Expanded', 'Engagement', 'Englebert', 'Enriqueta', 'Erica One', 'Esteban', 'Euphoria Script', 'Ewert', 'Exo', 'Exo 2', 'Expletus Sans', 'Fahkwang', 'Fanwood Text', 'Farsan', 'Fascinate', 'Fascinate Inline', 'Faster One', 'Fasthand', 'Fauna One', 'Faustina', 'Federant', 'Federo', 'Felipa', 'Fenix', 'Finger Paint', 'Fira Mono', 'Fira Sans', 'Fira Sans Condensed', 'Fira Sans Extra Condensed', 'Fjalla One', 'Fjord One', 'Flamenco', 'Flavors', 'Fondamento', 'Fontdiner Swanky', 'Forum', 'Francois One', 'Frank Ruhl Libre', 'Freckle Face', 'Fredericka the Great', 'Fredoka One', 'Freehand', 'Fresca', 'Frijole', 'Fruktur', 'Fugaz One', 'GFS Didot', 'GFS Neohellenic', 'Gabriela', 'Gaegu', 'Gafata', 'Galada', 'Galdeano', 'Galindo', 'Gamja Flower', 'Gentium Basic', 'Gentium Book Basic', 'Geo', 'Geostar', 'Geostar Fill', 'Germania One', 'Gidugu', 'Gilda Display', 'Give You Glory', 'Glass Antiqua', 'Glegoo', 'Gloria Hallelujah', 'Goblin One', 'Gochi Hand', 'Gorditas', 'Gothic A1', 'Goudy Bookletter 1911', 'Graduate', 'Grand Hotel', 'Gravitas One', 'Great Vibes', 'Griffy', 'Gruppo', 'Gudea', 'Gugi', 'Gurajada', 'Habibi', 'Halant', 'Hammersmith One', 'Hanalei', 'Hanalei Fill', 'Handlee', 'Hanuman', 'Happy Monkey', 'Harmattan', 'Headland One', 'Heebo', 'Henny Penny', 'Herr Von Muellerhoff', 'Hi Melody', 'Hind', 'Hind Guntur', 'Hind Madurai', 'Hind Siliguri', 'Hind Vadodara', 'Holtwood One SC', 'Homemade Apple', 'Homenaje', 'IBM Plex Mono', 'IBM Plex Sans', 'IBM Plex Sans Condensed', 'IBM Plex Serif', 'IM Fell DW Pica', 'IM Fell DW Pica SC', 'IM Fell Double Pica', 'IM Fell Double Pica SC', 'IM Fell English', 'IM Fell English SC', 'IM Fell French Canon', 'IM Fell French Canon SC', 'IM Fell Great Primer', 'IM Fell Great Primer SC', 'Iceberg', 'Iceland', 'Imprima', 'Inconsolata', 'Inder', 'Indie Flower', 'Inika', 'Inknut Antiqua', 'Irish Grover', 'Istok Web', 'Italiana', 'Italianno', 'Itim', 'Jacques Francois', 'Jacques Francois Shadow', 'Jaldi', 'Jim Nightshade', 'Jockey One', 'Jolly Lodger', 'Jomhuria', 'Josefin Sans', 'Josefin Slab', 'Joti One', 'Jua', 'Judson', 'Julee', 'Julius Sans One', 'Junge', 'Jura', 'Just Another Hand', 'Just Me Again Down Here', 'K2D', 'Kadwa', 'Kalam', 'Kameron', 'Kanit', 'Kantumruy', 'Karla', 'Karma', 'Katibeh', 'Kaushan Script', 'Kavivanar', 'Kavoon', 'Kdam Thmor', 'Keania One', 'Kelly Slab', 'Kenia', 'Khand', 'Khmer', 'Khula', 'Kirang Haerang', 'Kite One', 'Knewave', 'KoHo', 'Kodchasan', 'Kosugi', 'Kosugi Maru', 'Kotta One', 'Koulen', 'Kranky', 'Kreon', 'Kristi', 'Krona One', 'Krub', 'Kumar One', 'Kumar One Outline', 'Kurale', 'La Belle Aurore', 'Laila', 'Lakki Reddy', 'Lalezar', 'Lancelot', 'Lateef', 'Lato', 'League Script', 'Leckerli One', 'Ledger', 'Lekton', 'Lemon', 'Lemonada', 'Libre Barcode 128', 'Libre Barcode 128 Text', 'Libre Barcode 39', 'Libre Barcode 39 Extended', 'Libre Barcode 39 Extended Text', 'Libre Barcode 39 Text', 'Libre Baskerville', 'Libre Franklin', 'Life Savers', 'Lilita One', 'Lily Script One', 'Limelight', 'Linden Hill', 'Lobster', 'Lobster Two', 'Londrina Outline', 'Londrina Shadow', 'Londrina Sketch', 'Londrina Solid', 'Lora', 'Love Ya Like A Sister', 'Loved by the King', 'Lovers Quarrel', 'Luckiest Guy', 'Lusitana', 'Lustria', 'M PLUS 1p', 'M PLUS Rounded 1c', 'Macondo', 'Macondo Swash Caps', 'Mada', 'Magra', 'Maiden Orange', 'Maitree', 'Major Mono Display', 'Mako', 'Mali', 'Mallanna', 'Mandali', 'Manuale', 'Marcellus', 'Marcellus SC', 'Marck Script', 'Margarine', 'Markazi Text', 'Marko One', 'Marmelad', 'Martel', 'Martel Sans', 'Marvel', 'Mate', 'Mate SC', 'Maven Pro', 'McLaren', 'Meddon', 'MedievalSharp', 'Medula One', 'Meera Inimai', 'Megrim', 'Meie Script', 'Merienda', 'Merienda One', 'Merriweather', 'Merriweather Sans', 'Metal', 'Metal Mania', 'Metamorphous', 'Metrophobic', 'Michroma', 'Milonga', 'Miltonian', 'Miltonian Tattoo', 'Mina', 'Miniver', 'Miriam Libre', 'Mirza', 'Miss Fajardose', 'Mitr', 'Modak', 'Modern Antiqua', 'Mogra', 'Molengo', 'Molle', 'Monda', 'Monofett', 'Monoton', 'Monsieur La Doulaise', 'Montaga', 'Montez', 'Montserrat', 'Montserrat Alternates', 'Montserrat Subrayada', 'Moul', 'Moulpali', 'Mountains of Christmas', 'Mouse Memoirs', 'Mr Bedfort', 'Mr Dafoe', 'Mr De Haviland', 'Mrs Saint Delafield', 'Mrs Sheppards', 'Mukta', 'Mukta Mahee', 'Mukta Malar', 'Mukta Vaani', 'Muli', 'Mystery Quest', 'NTR', 'Nanum Brush Script', 'Nanum Gothic', 'Nanum Gothic Coding', 'Nanum Myeongjo', 'Nanum Pen Script', 'Neucha', 'Neuton', 'New Rocker', 'News Cycle', 'Niconne', 'Niramit', 'Nixie One', 'Nobile', 'Nokora', 'Norican', 'Nosifer', 'Notable', 'Nothing You Could Do', 'Noticia Text', 'Noto Sans', 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans SC', 'Noto Sans TC', 'Noto Serif', 'Noto Serif JP', 'Noto Serif KR', 'Noto Serif SC', 'Noto Serif TC', 'Nova Cut', 'Nova Flat', 'Nova Mono', 'Nova Oval', 'Nova Round', 'Nova Script', 'Nova Slim', 'Nova Square', 'Numans', 'Nunito', 'Nunito Sans', 'Odor Mean Chey', 'Offside', 'Old Standard TT', 'Oldenburg', 'Oleo Script', 'Oleo Script Swash Caps', 'Open Sans', 'Open Sans Condensed', 'Oranienbaum', 'Orbitron', 'Oregano', 'Orienta', 'Original Surfer', 'Oswald', 'Over the Rainbow', 'Overlock', 'Overlock SC', 'Overpass', 'Overpass Mono', 'Ovo', 'Oxygen', 'Oxygen Mono', 'PT Mono', 'PT Sans', 'PT Sans Caption', 'PT Sans Narrow', 'PT Serif', 'PT Serif Caption', 'Pacifico', 'Padauk', 'Palanquin', 'Palanquin Dark', 'Pangolin', 'Paprika', 'Parisienne', 'Passero One', 'Passion One', 'Pathway Gothic One', 'Patrick Hand', 'Patrick Hand SC', 'Pattaya', 'Patua One', 'Pavanam', 'Paytone One', 'Peddana', 'Peralta', 'Permanent Marker', 'Petit Formal Script', 'Petrona', 'Philosopher', 'Piedra', 'Pinyon Script', 'Pirata One', 'Plaster', 'Play', 'Playball', 'Playfair Display', 'Playfair Display SC', 'Podkova', 'Poiret One', 'Poller One', 'Poly', 'Pompiere', 'Pontano Sans', 'Poor Story', 'Poppins', 'Port Lligat Sans', 'Port Lligat Slab', 'Pragati Narrow', 'Prata', 'Preahvihear', 'Press Start 2P', 'Pridi', 'Princess Sofia', 'Prociono', 'Prompt', 'Prosto One', 'Proza Libre', 'Puritan', 'Purple Purse', 'Quando', 'Quantico', 'Quattrocento', 'Quattrocento Sans', 'Questrial', 'Quicksand', 'Quintessential', 'Qwigley', 'Racing Sans One', 'Radley', 'Rajdhani', 'Rakkas', 'Raleway', 'Raleway Dots', 'Ramabhadra', 'Ramaraja', 'Rambla', 'Rammetto One', 'Ranchers', 'Rancho', 'Ranga', 'Rasa', 'Rationale', 'Ravi Prakash', 'Redressed', 'Reem Kufi', 'Reenie Beanie', 'Revalia', 'Rhodium Libre', 'Ribeye', 'Ribeye Marrow', 'Righteous', 'Risque', 'Roboto', 'Roboto Condensed', 'Roboto Mono', 'Roboto Slab', 'Rochester', 'Rock Salt', 'Rokkitt', 'Romanesco', 'Ropa Sans', 'Rosario', 'Rosarivo', 'Rouge Script', 'Rozha One', 'Rubik', 'Rubik Mono One', 'Ruda', 'Rufina', 'Ruge Boogie', 'Ruluko', 'Rum Raisin', 'Ruslan Display', 'Russo One', 'Ruthie', 'Rye', 'Sacramento', 'Sahitya', 'Sail', 'Saira', 'Saira Condensed', 'Saira Extra Condensed', 'Saira Semi Condensed', 'Salsa', 'Sanchez', 'Sancreek', 'Sansita', 'Sarabun', 'Sarala', 'Sarina', 'Sarpanch', 'Satisfy', 'Sawarabi Gothic', 'Sawarabi Mincho', 'Scada', 'Scheherazade', 'Schoolbell', 'Scope One', 'Seaweed Script', 'Secular One', 'Sedgwick Ave', 'Sedgwick Ave Display', 'Sevillana', 'Seymour One', 'Shadows Into Light', 'Shadows Into Light Two', 'Shanti', 'Share', 'Share Tech', 'Share Tech Mono', 'Shojumaru', 'Short Stack', 'Shrikhand', 'Siemreap', 'Sigmar One', 'Signika', 'Signika Negative', 'Simonetta', 'Sintony', 'Sirin Stencil', 'Six Caps', 'Skranji', 'Slabo 13px', 'Slabo 27px', 'Slackey', 'Smokum', 'Smythe', 'Sniglet', 'Snippet', 'Snowburst One', 'Sofadi One', 'Sofia', 'Song Myung', 'Sonsie One', 'Sorts Mill Goudy', 'Source Code Pro', 'Source Sans Pro', 'Source Serif Pro', 'Space Mono', 'Special Elite', 'Spectral', 'Spectral SC', 'Spicy Rice', 'Spinnaker', 'Spirax', 'Squada One', 'Sree Krushnadevaraya', 'Sriracha', 'Srisakdi', 'Staatliches', 'Stalemate', 'Stalinist One', 'Stardos Stencil', 'Stint Ultra Condensed', 'Stint Ultra Expanded', 'Stoke', 'Strait', 'Stylish', 'Sue Ellen Francisco', 'Suez One', 'Sumana', 'Sunflower', 'Sunshiney', 'Supermercado One', 'Sura', 'Suranna', 'Suravaram', 'Suwannaphum', 'Swanky and Moo Moo', 'Syncopate', 'Tajawal', 'Tangerine', 'Taprom', 'Tauri', 'Taviraj', 'Teko', 'Telex', 'Tenali Ramakrishna', 'Tenor Sans', 'Text Me One', 'Thasadith', 'The Girl Next Door', 'Tienne', 'Tillana', 'Timmana', 'Tinos', 'Titan One', 'Titillium Web', 'Trade Winds', 'Trirong', 'Trocchi', 'Trochut', 'Trykker', 'Tulpen One', 'Ubuntu', 'Ubuntu Condensed', 'Ubuntu Mono', 'Ultra', 'Uncial Antiqua', 'Underdog', 'Unica One', 'UnifrakturCook', 'UnifrakturMaguntia', 'Unkempt', 'Unlock', 'Unna', 'VT323', 'Vampiro One', 'Varela', 'Varela Round', 'Vast Shadow', 'Vesper Libre', 'Vibur', 'Vidaloka', 'Viga', 'Voces', 'Volkhov', 'Vollkorn', 'Vollkorn SC', 'Voltaire', 'Waiting for the Sunrise', 'Wallpoet', 'Walter Turncoat', 'Warnes', 'Wellfleet', 'Wendy One', 'Wire One', 'Work Sans', 'Yanone Kaffeesatz', 'Yantramanav', 'Yatra One', 'Yellowtail', 'Yeon Sung', 'Yeseva One', 'Yesteryear', 'Yrsa', 'ZCOOL KuaiLe', 'ZCOOL QingKe HuangYou', 'ZCOOL XiaoWei', 'Zeyada', 'Zilla Slab', 'Zilla Slab Highlight']
4016 + var select = {
4017 + 'style' : {'' : 'Default', 'normal' : 'Normal', 'italic' : 'Italic', 'oblique' : 'Oblique'},
4018 + 'weight' : {'' : 'Default', '100' : '100', '200' : '200', '300' : '300', '400' : '400', '500' : '500', '600' : '600', '700' : '700', '800' : '800', '900' : '900', 'normal' : 'Normal', 'lighter' : 'Lighter', 'bold' : 'Bold', 'bolder' :'Bolder', 'unset' : 'Unset'},
4019 + 'variant' : {'' : 'Default', 'normal' : 'Normal', 'small-caps' : 'Small Caps'},
4020 + 'deco-line' : {'' : 'Default', 'none' : 'None', 'overline' : 'Overline', 'line-through' : 'Line Through', 'underline' : 'Underline', 'underline overline' : 'Underline Overline'},
4021 + 'deco-style' : {'' : 'Default', 'solid' : 'Solid', 'double' : 'Double', 'dotted' : 'Dotted', 'dashed' : 'Dashed', 'wavy' : 'Wavy'},
4022 + 'transform' : {'' : 'Default', 'capitalize' : 'Capitalize', 'uppercase' : 'Uppercase', 'lowercase' : 'Lowercase'},
4023 + 'fonts' : pagelayer_fonts,
2567 4024 }
2568 4025
2569 - var option = function(val, setVal){
2570 - var selected = (val != setVal) ? '' : 'selected="selected"';
2571 - var lang = pagelayer_empty(val) ? 'Default' : val;
4026 + var option = function(val, lang, setVal){
4027 + var selected = (val.toLowerCase() != setVal.toLowerCase()) ? '' : 'selected="selected"';
4028 +
4029 + var lang = pagelayer_empty(lang) ? 'Default' : lang;
2572 4030 return '<option value="'+val+'" '+selected+'>'+ lang +'</option>';
2573 4031 }
2574 4032
2575 - var font_option = function(val, setVal){
4033 + var font_options = '';
4034 + var font_option = function(val, lang, type, setVal){
2576 4035 var selected = (val != setVal) ? '' : 'selected="selected"';
2577 - var lang = pagelayer_empty(val) ? 'Default' : val;
2578 - return '<span style="font-family:'+lang+'" value="'+val+'" '+selected+'>'+ lang +'</span>';
4036 + var lang = pagelayer_empty(lang) ? 'Default' : lang;
4037 + return '<option class="pagelayer-elp-typo-sele-op" value="'+val+'" type="'+type+'" '+selected+'>'+lang+'</option>';
2579 4038 }
4039 +
4040 + for(y in select['fonts']){
4041 + if(y != 'default'){
4042 + font_options += '<optgroup label="'+pagelayer_ucwords(y)+'">';
4043 + }
4044 + for (x in select['fonts'][y]){
4045 + font_options += font_option((jQuery.isNumeric(x) ? select['fonts'][y][x] : x), select['fonts'][y][x], y, val[0]);
4046 + }
4047 + }
2580 4048
2581 - var div = '<span class="pagelayer-prop-edit"><i class="pli pli-pencil"></i></span>'+
2582 - '<div class="pagelayer-elp-typo-div">'+
2583 - '<div class="pagelayer-elp-typo pagelayer-elp-typo-fonts">'+
2584 - '<label class="pagelayer-elp-label">Font-Family</label>'+
2585 - '<div class="pagelayer-elp-typo-sele" data-val="'+val[0]+'">'+val[0]+'</div>'+
2586 - '<div class="pagelayer-ele-type-sec">'+
2587 - '<input class="pagelayer-elp-typo-search" placeholder="Search here..."></input>'+
2588 - '<div class="pagelayer-elp-typo-container">';
4049 + var modes = {desktop: '', tablet: '_tablet', mobile: '_mobile'};
4050 + var mode = pagelayer_get_screen_mode();
4051 + var screen = '<div class="pagelayer-elp-screen">'+
4052 + '<i class="pli pli-desktop" ></i>'+
4053 + '<i class="pli pli-tablet" ></i>'+
4054 + '<i class="pli pli-mobile" ></i>'+
4055 + '<i class="pagelayer-prop-screen pli pli-'+mode+'" ></i>'+
4056 + '</div>';
2589 4057
2590 - jQuery.each(select['fonts'],function(key, value){
2591 - div += font_option(value, val[0]);
2592 - });
2593 - div +='</div></div>'+
4058 + var div = '<span class="pagelayer-elp-typo-edit-div">'+
4059 + '<i class="pli pli-pencil"></i>'+
4060 + '</span>'+
4061 + '<div class="pagelayer-elp-typo-div" pagelayer-screen-mode="'+mode+'">'+
4062 + '<div class="pagelayer-elp-typo-fonts">'+
4063 + '<div class="pagelayer-elp-global-typo">'+
4064 + '<label class="pagelayer-elp-label">'+pagelayer_l('global_fonts')+'</label>'+
4065 + '<span class="pagelayer-elp-typo-icons">'+
4066 + '<span class="pagelayer-elp-global-icon '+global_active+'"></span>'+
4067 + '<span class="pli pli-service"></span>'+
4068 + '</span>'+
4069 + '<div class="pagelayer-global-font-list">';
4070 +
4071 + for( cid in pagelayer_global_fonts ){
4072 +
4073 + var font = pagelayer_global_fonts[cid];
4074 +
4075 + div += '<div class="pagelayer-global-font-list-item" data-global-id="'+ cid +'">'+
4076 + '<span class="pagelayer-global-font-title">'+font['title']+'</span>'+
4077 + '</div>';
4078 + }
4079 + div += '</div>'+
4080 + '</div>'+
4081 + '<div class="pagelayer-elp-typo pagelayer-elp-typo-family">'+
4082 + '<label class="pagelayer-elp-label">'+pagelayer_l('font_family')+'</label>'+
4083 + '<select class="pagelayer-elp-typo-input pagelayer-elp-select" name="font-family">'+font_options+'</select>'+
4084 + '</div>';
4085 +
4086 + div += '<div class="pagelayer-elp-typo pagelayer-elp-typo-size">'+
4087 + '<label class="pagelayer-elp-label">'+pagelayer_l('font_size')+' '+screen+'</label>'+
4088 + '<input name="font-size" pagelayer-show-device="desktop" class="pagelayer-elp-typo-input" type="number" max="200" min="0" step="1" value="'+val[1]+'"></input>'+
4089 + '<input name="font-size_tablet" pagelayer-show-device="tablet" class="pagelayer-elp-typo-input" type="number" max="200" min="0" step="1" value="'+val_tablet[1]+'"></input>'+
4090 + '<input name="font-size_mobile" pagelayer-show-device="mobile" class="pagelayer-elp-typo-input" type="number" max="200" min="0" step="1" value="'+val_mobile[1]+'"></input>'+
2594 4091 '</div>'+
2595 - '<div class="pagelayer-elp-typo pagelayer-elp-typo-size">'+
2596 - '<label class="pagelayer-elp-label">Font-Size</label>'+
2597 - '<input class="pagelayer-elp-typo-input" type="number" max="200" min="0" step="1" value="'+val[1]+'"></input>'+
2598 - '</div>'+
2599 4092 '<div class="pagelayer-elp-typo pagelayer-elp-typo-style">'+
2600 - '<label class="pagelayer-elp-label">Font-Style</label>'+
2601 - '<select class="pagelayer-elp-typo-input">';
4093 + '<label class="pagelayer-elp-label">'+pagelayer_l('font_style')+'</label>'+
4094 + '<select name="font-style" class="pagelayer-elp-typo-input pagelayer-elp-select">';
2602 4095
2603 4096 jQuery.each(select['style'],function(key, value){
2604 - div += option(value, val[2]);
4097 + div += option(key, value, val[2]);
2605 4098 });
2606 4099 div +='</select>'+
2607 4100 '</div>'+
2608 4101 '<div class="pagelayer-elp-typo pagelayer-elp-typo-weight">'+
2609 - '<label class="pagelayer-elp-label">Font-Weight</label>'+
2610 - '<select class="pagelayer-elp-typo-input">';
4102 + '<label class="pagelayer-elp-label">'+pagelayer_l('font_weight')+' '+screen+'</label>'+
4103 + '<select name="font-weight" pagelayer-show-device="desktop" class="pagelayer-elp-typo-input pagelayer-elp-select">';
2611 4104 jQuery.each(select['weight'],function(key, value){
2612 - div += option(value, val[3]);
4105 + div += option(key, value, val[3]);
2613 4106 });
2614 4107
2615 4108 div += '</select>'+
4109 + '<select name="font-weight_tablet" pagelayer-show-device="tablet" class="pagelayer-elp-typo-input pagelayer-elp-select">';
4110 + jQuery.each(select['weight'],function(key, value){
4111 + div += option(key, value, val_tablet[3]);
4112 + });
4113 +
4114 + div += '</select>'+
4115 + '<select name="font-weight_mobile" pagelayer-show-device="mobile" class="pagelayer-elp-typo-input pagelayer-elp-select">';
4116 + jQuery.each(select['weight'],function(key, value){
4117 + div += option(key, value, val_mobile[3]);
4118 + });
4119 +
4120 + div += '</select>'+
2616 4121 '</div>'+
2617 4122 '<div class="pagelayer-elp-typo pagelayer-elp-typo-variant">'+
2618 - '<label class="pagelayer-elp-label">Font-variant</label>'+
2619 - '<select class="pagelayer-elp-typo-input">';
4123 + '<label class="pagelayer-elp-label">'+pagelayer_l('font_variant')+'</label>'+
4124 + '<select name="font-variant" class="pagelayer-elp-typo-input pagelayer-elp-select">';
2620 4125 jQuery.each(select['variant'],function(key, value){
2621 - div += option(value, val[4]);
4126 + div += option(key, value, val[4]);
2622 4127 });
2623 4128
2624 4129 div += '</select>'+
2625 4130 '</div>'+
2626 4131 '<div class="pagelayer-elp-typo pagelayer-elp-typo-deco-line">'+
2627 - '<label class="pagelayer-elp-label">Decoration Line</label>'+
2628 - '<select class="pagelayer-elp-typo-input">';
4132 + '<label class="pagelayer-elp-label">'+pagelayer_l('decoration_line')+'</label>'+
4133 + '<select name="text-decoration-line" class="pagelayer-elp-typo-input pagelayer-elp-select">';
2629 4134 jQuery.each(select['deco-line'],function(key, value){
2630 - div += option(value, val[5]);
4135 + div += option(key, value, val[5]);
2631 4136 });
2632 4137
2633 4138 div += '</select>'+
2634 4139 '</div>'+
2635 4140 '<div class="pagelayer-elp-typo pagelayer-elp-typo-deco-style">'+
2636 - '<label class="pagelayer-elp-label">Decoration Style</label>'+
2637 - '<select class="pagelayer-elp-typo-input">';
4141 + '<label class="pagelayer-elp-label">'+pagelayer_l('decoration_style')+'</label>'+
4142 + '<select name="text-decoration-style" class="pagelayer-elp-typo-input pagelayer-elp-select">';
2638 4143 jQuery.each(select['deco-style'],function(key, value){
2639 - div += option(value, val[6]);
4144 + div += option(key, value, val[6]);
2640 4145 });
2641 4146
2642 4147 div += '</select>'+
2643 4148 '</div>'+
2644 4149 '<div class="pagelayer-elp-typo pagelayer-elp-typo-height">'+
2645 - '<label class="pagelayer-elp-label">Line Height</label>'+
2646 - '<input class="pagelayer-elp-typo-input" type="number" max="15" min="0" step="0.1" value="'+val[7]+'"></input>'+
4150 + '<label class="pagelayer-elp-label">'+pagelayer_l('line_height')+' '+screen+'</label>'+
4151 + '<input name="line-height" class="pagelayer-elp-typo-input" pagelayer-show-device="desktop" type="number" max="15" min="0" step="0.1" value="'+val[7]+'"></input>'+
4152 + '<input name="line-height_tablet" pagelayer-show-device="tablet" class="pagelayer-elp-typo-input" type="number" max="15" min="0" step="0.1" value="'+val_tablet[7]+'"</input>'+
4153 + '<input name="line-height_mobile" class="pagelayer-elp-typo-input" pagelayer-show-device="mobile" type="number" max="15" min="0" step="0.1" value="'+val_mobile[7]+'"></input>'+
2647 4154 '</div>'+
2648 4155 '<div class="pagelayer-elp-typo pagelayer-elp-typo-transform">'+
2649 - '<label class="pagelayer-elp-label">Text Transform</label>'+
2650 - '<select class="pagelayer-elp-typo-input">';
4156 + '<label class="pagelayer-elp-label">'+pagelayer_l('text_transform')+'</label>'+
4157 + '<select name="text-transform" class="pagelayer-elp-typo-input pagelayer-elp-select">';
2651 4158 jQuery.each(select['transform'],function(key, value){
2652 - div += option(value, val[8]);
4159 + div += option(key, value, val[8]);
2653 4160 });
2654 4161
2655 4162 div += '</select>'+
2656 4163 '</div>'+
2657 4164 '<div class="pagelayer-elp-typo pagelayer-elp-typo-lspacing">'+
2658 - '<label class="pagelayer-elp-label">Letter Spacing</label>'+
2659 - '<input class="pagelayer-elp-typo-input" type="number" max="10" min="-10" step="0.1" value="'+val[9]+'"></input>'+
4165 + '<label class="pagelayer-elp-label">'+pagelayer_l('text_spacing')+' '+screen+'</label>'+
4166 + '<input name="letter-spacing" pagelayer-show-device="desktop" class="pagelayer-elp-typo-input" type="number" max="10" min="-10" step="0.1" value="'+val[9]+'"></input>'+
4167 + '<input name="letter-spacing_tablet" pagelayer-show-device="tablet" class="pagelayer-elp-typo-input" type="number" max="10" min="-10" step="0.1" value="'+val_tablet[9]+'"></input>'+
4168 + '<input name="letter-spacing_mobile" pagelayer-show-device="mobile" class="pagelayer-elp-typo-input" type="number" max="10" min="-10" step="0.1" value="'+val_mobile[9]+'"></input>'+
2660 4169 '</div>'+
2661 4170 '<div class="pagelayer-elp-typo pagelayer-elp-typo-wspacing">'+
2662 - '<label class="pagelayer-elp-label">Word Spacing</label>'+
2663 - '<input class="pagelayer-elp-typo-input" type="number" max="50" min="0" step="1" value="'+val[10]+'"></input>'+
4171 + '<label class="pagelayer-elp-label">'+pagelayer_l('word_spacing')+' '+screen+'</label>'+
4172 + '<input name="word-spacing" pagelayer-show-device="desktop" class="pagelayer-elp-typo-input" type="number" max="50" min="0" step="1" value="'+val[10]+'"></input>'+
4173 + '<input name="word-spacing_tablet" pagelayer-show-device="tablet" class="pagelayer-elp-typo-input" type="number" max="50" min="0" step="1" value="'+val_tablet[10]+'"></input>'+
4174 + '<input name="word-spacing_mobile" pagelayer-show-device="mobile" class="pagelayer-elp-typo-input" type="number" max="50" min="0" step="1" value="'+val_mobile[10]+'"></input>'+
2664 4175 '</div>'+
4176 + '</div>'+
2665 4177 '</div>';
2666 4178
2667 4179 row.append(div);
2668 4180
@@ -2669,83 +4181,226 @@
2669 4181 if(pagelayer_empty(val[5]) || val[5]=='none'){
2670 4182 row.find('.pagelayer-elp-typo-deco-style').hide();
2671 4183 }
2672 4184
2673 - row.find('.pagelayer-prop-edit').on('click', function(){
2674 - row.find('.pagelayer-elp-typo-div').toggleClass('pagelayer-prop-show');
4185 + row.find('.pagelayer-elp-typo-edit-div .pli-pencil').on('click', function(){
4186 + row.find('.pagelayer-elp-typo-div').toggleClass('pagelayer-prop-show');
2675 4187 });
2676 4188
2677 - row.find('.pagelayer-elp-typo-sele').on('click', function(){
2678 - row.find('.pagelayer-ele-type-sec').slideToggle();
2679 - });
4189 + var save_typography = function(){
4190 + var globalEle = row.find('.pagelayer-global-selected');
4191 + var atts = {};
4192 +
4193 + atts[prop.c['name']] = {};
4194 + atts[prop.c['name']+'_tablet'] = {};
4195 + atts[prop.c['name']+'_mobile'] = {};
4196 +
4197 + if(globalEle.length > 0){
4198 + atts[prop.c['name']]['global-font'] = globalEle.attr('data-global-id');
4199 + }
4200 +
4201 + row.find('.pagelayer-elp-typo-input').each(function(){
4202 +
4203 + var iEle = jQuery(this);
4204 + var name = iEle.attr('name');
4205 + var value = iEle.val();
4206 + var isGlobal = iEle.closest('[pagelayer-set-global]');
4207 +
4208 + if((value == '' && isGlobal.length < 1 && globalEle.length < 1) || isGlobal.length > 0){
4209 + return;
4210 + }
4211 +
4212 + if(name.indexOf('_tablet') > -1){
4213 + name = name.replace('_tablet', '');
4214 + atts[prop.c['name']+'_tablet'][name] = value;
4215 + return;
4216 + }
4217 +
4218 + if(name.indexOf('_mobile') > -1){
4219 + name = name.replace('_mobile', '');
4220 + atts[prop.c['name']+'_mobile'][name] = value;
4221 + return;
4222 + }
4223 +
4224 + atts[prop.c['name']][name] = value;
4225 + });
4226 +
4227 + pagelayer_set_atts(prop.el.$, atts);
4228 + pagelayer_sc_render(prop.el.$); // Render
4229 + }
2680 4230
2681 - row.find('.pagelayer-elp-typo-container').on('click', function(e){
4231 + row.find('.pagelayer-elp-typo-input').on('change', function(e){
4232 +
2682 4233 var jEle = jQuery(e.target);
2683 - var set_val = jEle.attr('value');
2684 - row.find('.pagelayer-elp-typo-sele').data('val',set_val).html(set_val);
2685 - row.find('.pagelayer-ele-type-sec').slideUp();
2686 - val = [];
2687 - val[0] = set_val;
2688 - row.find('.pagelayer-elp-typo-input').each(function(){
2689 - var value = jQuery(this).val();
2690 - val.push(value ? value : '');
2691 - });
2692 - _pagelayer_set_atts(row, val);
4234 +
4235 + pagelayer_link_font_family(jEle);
4236 + jEle.closest('[pagelayer-set-global]').removeAttr('pagelayer-set-global');
4237 +
4238 + // Save value
4239 + save_typography();
2693 4240 });
2694 4241
2695 - row.find('.pagelayer-elp-typo-search').on('input', function(){
2696 - var val = jQuery(this).val().toLowerCase();
2697 - console.log(val);
2698 - var html = '';
2699 - jQuery.each(select['fonts'],function(key, value){
2700 - //value = value.toLowerCase();
2701 - if(value.toLowerCase().includes(val)){
2702 - html += font_option(value, val[0]);
2703 - }
2704 - });
2705 - row.find('.pagelayer-elp-typo-container').html(html);
4242 + row.find('.pagelayer-elp-typo-deco-line select').on('change', function(){
4243 + var value = jQuery(this).val();
4244 + if(pagelayer_empty(value) || value=='none'){
4245 + row.find('.pagelayer-elp-typo-deco-style').hide();
4246 + }else{
4247 + row.find('.pagelayer-elp-typo-deco-style').show();
4248 + }
4249 + });
2706 4250
4251 + // Handle for global font
4252 + row.find('.pagelayer-elp-global-typo .pagelayer-elp-global-icon').on('click', function(e){
4253 + e.stopPropagation();
4254 + row.find('.pagelayer-global-font-list').slideToggle();
4255 +
2707 4256 });
2708 4257
4258 + row.find('.pagelayer-elp-global-typo .pli-service').on('click', function(e){
4259 + e.stopPropagation();
4260 + window.open(pagelayer_customizer_url+'&autofocus%5Bsection%5D=pagelayer_global_fonts_sec', '_blank');
4261 + });
2709 4262
2710 - row.find('.pagelayer-elp-typo-input').on('change', function(){
2711 - val = [];
2712 - val[0] = row.find('.pagelayer-elp-typo-sele').data('val');
2713 - row.find('.pagelayer-elp-typo-input').each(function(){
2714 - var value = jQuery(this).val();
2715 - val.push(value ? value : '');
2716 - });
2717 - _pagelayer_set_atts(row, val);
4263 + // Added restore global val
4264 + row.find('.pagelayer-elp-typo > .pagelayer-elp-label').each(function(){
4265 + var label = jQuery(this);
4266 + var defaultButton = '<span class="pagelayer-typo-default" title="'+pagelayer_l('restore_global')+'" ><i class="fas fa-undo"></i></span>';
4267 + label.append(defaultButton);
4268 +
4269 + label.find('.pagelayer-typo-default').on('click', function(e, skip_save){
4270 +
4271 + skip_save = skip_save || false;
4272 +
4273 + var globalID = row.find('.pagelayer-global-selected').data('global-id');
4274 +
4275 + if(pagelayer_empty(globalID) || pagelayer_empty(pagelayer_global_fonts[globalID])){
4276 + return;
4277 + }
4278 +
4279 + var setFonts = pagelayer_global_fonts[globalID]['value'];
4280 + var holder = label.closest('.pagelayer-elp-typo');
4281 + var inputs = holder.find('.pagelayer-elp-typo-input');
4282 + var name = inputs.first().attr('name');
4283 + var val = '';
4284 +
4285 + holder.attr('pagelayer-set-global', 1);
4286 +
4287 + if(name in setFonts){
4288 + val = setFonts[name];
4289 + }
4290 +
4291 + if(typeof val == 'object'){
4292 + for(var mode in modes){
4293 + var _val = '';
4294 + if(mode in val){
4295 + _val = val[mode];
4296 + }
4297 +
4298 + holder.find('.pagelayer-elp-typo-input[name="'+name+modes[mode]+'"]').val(_val);
4299 + }
4300 + }else{
4301 +
4302 + if(inputs.length > 1){
4303 + inputs.val('');
4304 + }
4305 +
4306 + inputs.first().val(val);
4307 + }
4308 +
4309 + if(skip_save){
4310 + return;
4311 + }
4312 +
4313 + // save value
4314 + clearTimeout(save_timer);
4315 + save_timer = setTimeout(save_typography, 200);
4316 +
4317 + });
2718 4318 });
2719 4319
2720 - row.find('.pagelayer-elp-typo-container').on('click', function(e){
2721 - var jEle = jQuery(e.target);
2722 - var value = jEle.attr('value');
2723 - value = value.replace(' ', '+');
4320 + // Handle for global font
4321 + row.find('.pagelayer-global-font-list-item').on('click', function(e){
4322 + e.stopPropagation();
2724 4323
2725 - if(jQuery('#pagelayer-google-fonts').length == 0){
4324 + var listItem = jQuery(this);
4325 + var fontSelect = row.find('.pagelayer-elp-typo-family .pagelayer-elp-typo-input');
4326 +
4327 + // Remove global typo
4328 + if(listItem.hasClass('pagelayer-global-selected')){
4329 + row.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
4330 + row.find('.pagelayer-elp-global-icon').removeClass('pagelayer-active-global');
4331 + row.find('[pagelayer-set-global]').removeAttr('pagelayer-set-global');
4332 + row.find('.pagelayer-global-on').removeClass('pagelayer-global-on');
2726 4333
2727 - jQuery('head').append('<link id="pagelayer-google-fonts" href="https://fonts.googleapis.com/css?family='+value+':100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">');
4334 + // To save and render the typo
4335 + fontSelect.trigger('change');
4336 + return;
4337 + }
4338 +
4339 + var globalID = listItem.data('global-id');
4340 + var listHolder = row.find('.pagelayer-global-font-list');
4341 +
4342 + // Remove previous selecttion
4343 + listHolder.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
4344 + listItem.addClass('pagelayer-global-selected');
4345 + row.find('.pagelayer-elp-global-icon').addClass('pagelayer-active-global');
4346 + row.find('.pagelayer-elp-typo-fonts').addClass('pagelayer-global-on');
4347 + listHolder.slideUp();
4348 +
4349 + pagelayer_link_font_family(fontSelect); // Apply google fonts
4350 +
4351 + // Set global value to all fields and save
4352 + row.find('.pagelayer-elp-label .pagelayer-typo-default').click();
4353 + });
4354 +
4355 + // Active global typography
4356 + if(!pagelayer_empty(is_typo)){
4357 + row.find('[data-global-id="'+is_typo+'"]').addClass('pagelayer-global-selected');
4358 + row.find('.pagelayer-elp-global-icon').addClass('pagelayer-active-global');
4359 + row.find('.pagelayer-elp-typo-fonts').addClass('pagelayer-global-on');
4360 +
4361 + // Show the global values if is not customize
4362 + row.find('.pagelayer-elp-typo').attr('pagelayer-set-global', 1);
4363 + row.find('.pagelayer-elp-typo').find('select, input').each(function(){
4364 + var sEle = jQuery(this);
4365 + var val = sEle.val();
2728 4366
2729 - }else{
2730 -
2731 - var url = jQuery('#pagelayer-google-fonts').attr('href');
2732 - if(url.indexOf(value) == -1){
2733 - url = url+'|'+value+':100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i';
2734 - jQuery('#pagelayer-google-fonts').attr('href', url);
4367 + if(pagelayer_empty(val)){
4368 + return true;
2735 4369 }
2736 4370
4371 + sEle.closest('.pagelayer-elp-typo').removeAttr('pagelayer-set-global');
4372 + });
4373 +
4374 + row.find('[pagelayer-set-global="1"] .pagelayer-typo-default').trigger('click', [true]);
4375 + }
4376 +
4377 + // Set screen mode on change
4378 + row.find('.pagelayer-elp-screen .pli:not(.pagelayer-prop-screen)').on('click', function(){
4379 + var mode = 'desktop';
4380 + var jEle = jQuery(this);
4381 +
4382 + // Tablet ?
4383 + if(jEle.hasClass('pli-tablet')){
4384 + mode = 'tablet';
2737 4385 }
4386 +
4387 + // Mobile ?
4388 + if(jEle.hasClass('pli-mobile')){
4389 + mode = 'mobile';
4390 + }
4391 +
4392 + pagelayer_set_screen_mode(mode);
4393 + row.find('.pagelayer-elp-screen .pli').removeClass('open');
4394 + });
2738 4395
4396 + row.find('.pagelayer-elp-screen').on('pagelayer-screen-changed', function(e){
4397 + var mode = pagelayer_get_screen_mode();
4398 + row.find('[pagelayer-screen-mode]').attr('pagelayer-screen-mode', mode);
2739 4399 });
2740 4400
2741 - row.find('.pagelayer-elp-typo-deco-line select').on('change', function(){
2742 - var value = jQuery(this).val();
2743 - if(pagelayer_empty(value) || value=='none'){
2744 - row.find('.pagelayer-elp-typo-deco-style').hide();
2745 - }else{
2746 - row.find('.pagelayer-elp-typo-deco-style').show();
2747 - }
4401 + row.find('.pagelayer-elp-screen .pagelayer-prop-screen').on('click', function(e){
4402 + jQuery(this).siblings().toggleClass('open');
2748 4403 });
2749 4404
2750 4405 }
2751 4406
@@ -2753,17 +4408,22 @@
2753 4408 function pagelayer_elp_dimension(row, prop){
2754 4409
2755 4410 var val = ['', ''];
2756 4411
2757 - if(prop.c['val'].length > 0){
2758 - val = prop.c['val'].split(',');
2759 - //console.log(val)
4412 + if(!pagelayer_empty(prop.c['val'])){
4413 +
4414 + val = prop.c['val'];
4415 + if(pagelayer_is_string(val)){
4416 + val = val.split(',');
4417 + //console.log(val);
4418 + }
4419 +
2760 4420 }
2761 4421
2762 4422 var div = '<div class="pagelayer-elp-dimension-div">'+
2763 - '<input type="number" class="pagelayer-elp-dimension" value="'+parseInt(val[0])+'"></input>'+
2764 - '<input type="number" class="pagelayer-elp-dimension" value="'+parseInt(val[1])+'"></input>'+
2765 - '<i class="pli pli-link" />'+
4423 + '<input type="number" class="pagelayer-elp-dimension" value="'+parseFloat(val[0])+'"></input>'+
4424 + '<input type="number" class="pagelayer-elp-dimension" value="'+parseFloat(val[1])+'"></input>'+
4425 + '<i class="pli pli-link" ></i>'+
2766 4426 '</div>';
2767 4427
2768 4428 row.append(div);
2769 4429
@@ -2824,8 +4484,762 @@
2824 4484 });
2825 4485
2826 4486 };
2827 4487
4488 +var first_time_cat = true;
4489 +// Post Category property
4490 +function pagelayer_elp_postCategory(row, prop){
4491 +
4492 + if(pagelayer_empty(pagelayer_post_categories)){
4493 + return;
4494 + }
4495 +
4496 + // Placing the checked categories on the top.
4497 + var checked_on_top = function(with_checkbox){
4498 + var checked_list = '';
4499 + var unchecked_list = '';
4500 +
4501 + jQuery(with_checkbox).children().each(function(){
4502 + var list = this;
4503 + var temp = jQuery(list).find('input[checked=checked]');
4504 +
4505 + if(!pagelayer_empty(temp.length)){
4506 + checked_list += list.outerHTML;
4507 + }else{
4508 + unchecked_list += list.outerHTML;
4509 + }
4510 +
4511 + });
4512 +
4513 + return ('<div class="pagelayer-post-cat-div" ><ul class="pagelayer-post-category" >'+checked_list+unchecked_list+'</ul></div>');
4514 + }
4515 +
4516 + // Getting checked and unchecked categories on opening of page props settings.
4517 + if(first_time_cat == false){
4518 +
4519 + var $div = jQuery('<div>').html(pagelayer_post_categories.with_checkbox);
4520 + $div.find('input[type=checkbox]').attr('checked', false);
4521 +
4522 + if(!pagelayer_empty(prop.c['val'])){
4523 +
4524 + var check_val = prop.c['val'];
4525 + if(pagelayer_is_string(check_val)){
4526 + check_val = check_val.split(',');
4527 + }
4528 +
4529 + for(var no in check_val){
4530 + $div.find('input[type=checkbox][value='+check_val[no]+']').attr('checked', true);
4531 + }
4532 + }
4533 +
4534 + pagelayer_post_categories.with_checkbox = $div.html();
4535 +
4536 + }
4537 +
4538 + first_time_cat = false;
4539 +
4540 + // For making insert new categories functionality.
4541 + row.append(checked_on_top(pagelayer_post_categories.with_checkbox));
4542 +
4543 + var div = '<div class="pagelayer-elp-postCategory">'+
4544 + '<span class="pagelayer-add-cat-btn">Add New Category</span>'+
4545 + '<form style="display:none;">'+
4546 + '<div>'+
4547 + '<label>New Category Name</label>'+
4548 + '<input type="text" name="category_name" required>'+
4549 + '</div>'+
4550 + '<div>'+
4551 + '<label>Parent Category</label>'+
4552 + '<div class="pagelayer-parent-category"></div>'+
4553 + '</div>'+
4554 + '<button type="submit" class="pagelayer-cat-submit" >Add New Category</button>'+
4555 + '</form>'+
4556 + '</div>';
4557 +
4558 + row.append(div);
4559 +
4560 + // For making categories drop down options and adding an empty option.
4561 + if(!pagelayer_empty(pagelayer_post_categories.without_checkbox)){
4562 + var options = pagelayer_post_categories.without_checkbox.replace('>', '><option class="level-0" value="0">--No Parent--</option>');
4563 + var options = jQuery(options);
4564 + row.find('.pagelayer-parent-category').append(options);
4565 + }
4566 +
4567 + // For initiating ajax call when user create new category
4568 + row.find('form').on('submit', function(e){
4569 + e.preventDefault();
4570 + jQuery.ajax({
4571 + type: 'post',
4572 + url: pagelayer_ajax_url+'&action=pagelayer_get_cat_checkboxes',
4573 + dataType: 'json',
4574 + data: {
4575 + pagelayer_nonce: pagelayer_ajax_nonce,
4576 + 'postid': pagelayer_postID,
4577 + 'new_cat': row.find('form').serialize()
4578 + },
4579 + success: function(obj){
4580 +
4581 + if(pagelayer_empty(obj)){
4582 + return;
4583 + }
4584 +
4585 + if('error' in obj){
4586 + alert(obj.error);
4587 + }
4588 +
4589 + if(!pagelayer_empty(obj.new_cat_id)){
4590 + obj.with_checkbox = obj.with_checkbox.replace('value="'+obj.new_cat_id+'"', 'value="'+obj.new_cat_id+'" checked="checked"');
4591 + }
4592 +
4593 + var new_cat_elem = jQuery(obj.with_checkbox).find('input[value='+obj.new_cat_id+']').closest('li');
4594 + var post_cat = row.find('.pagelayer-post-category');
4595 +
4596 + // Does the new element have no parents ? Then prepend the <LI> to the existing list shown
4597 + if(!pagelayer_empty(new_cat_elem.parent('.pagelayer-post-category').length)){
4598 + post_cat.prepend(new_cat_elem);
4599 + }else{
4600 +
4601 + // Siblings are already there ?
4602 + if(!pagelayer_empty(new_cat_elem.siblings().length)){
4603 + post_cat.find('#'+new_cat_elem.parent().parent('li').attr('id')).children('ul').append(new_cat_elem);
4604 + // No siblings, hence append
4605 + }else{
4606 + new_cat_elem = new_cat_elem.parent();
4607 + post_cat.find('#'+new_cat_elem.closest('li').attr('id')).append(new_cat_elem);
4608 + }
4609 +
4610 + post_cat.prepend(new_cat_elem.parentsUntil('.pagelayer-post-category').last());
4611 + }
4612 +
4613 + row.find('#pagelayer_cat_parent').replaceWith(obj.without_checkbox.replace('>', '><option class="level-0" value="0">--No Parent--</option>'));
4614 +
4615 + row.find('input[name="category_name"]').val('');
4616 + row.find('#pagelayer_cat_parent option[value="0"]').attr('selected', true);
4617 + checked_cat(row.find('.pagelayer-post-cat-div'));
4618 + event_function();
4619 + pagelayer_post_categories = obj;
4620 + }
4621 + });
4622 + });
4623 +
4624 + // Show and hide 'Add new Category' button.
4625 + row.find('.pagelayer-add-cat-btn').on('click', function(){
4626 + row.find('form').toggle('fast');
4627 + });
4628 +
4629 + var checked_cat = function(elem){
4630 + var jEle = elem.find('input:checked');
4631 + var cat_array = [];
4632 + for(var checked_input of jEle){
4633 + cat_array.push(jQuery(checked_input).attr('value'));
4634 + }
4635 + _pagelayer_set_atts(row, cat_array);
4636 + };
4637 +
4638 + var event_function = function(){row.find('.pagelayer-post-cat-div').on('change', function(){
4639 + checked_cat(jQuery(this));
4640 + });
4641 + };
4642 + event_function();
4643 +}
4644 +
4645 +var first_time_tag = true;
4646 +// Post tags property
4647 +function pagelayer_elp_postTags(row, prop){
4648 +
4649 + if(pagelayer_empty(pagelayer_post_tags)){
4650 + return;
4651 + }
4652 +
4653 + var div = '<div class="pagelayer-elp-postTags" >'+
4654 + '<div class="pagelayer-post-tags" >'+
4655 + '<input type="text" autocomplete="off" class="pagelayer-elp-postTags-inp" autofocus="autofocus"/>'+
4656 + '<ul class="pagelayer-postTags-list" >'+
4657 + '</ul>'+
4658 + '</div>'+
4659 + '</div>';
4660 +
4661 + row.append(div);
4662 +
4663 + // Single tag html
4664 + var singleTag = function(tags){
4665 + var html = '';
4666 + jQuery.each(tags, function(index, value){
4667 + if(pagelayer_empty(value['term_id'])){
4668 + return;
4669 + }
4670 + html += '<span class="pagelayer-elp-tags-ele" data-val="'+value['term_id']+'"><span class="pagelayer-tags-label" >'+value['name']+'</span><span class="pagelayer-elp-tags-remove"><i class="fas fa-times"></i></span></span>';
4671 + });
4672 + return html;
4673 + }
4674 +
4675 + // Single list item html
4676 + var singleLi= function(tags){
4677 + var html = '';
4678 + jQuery.each(tags, function(index, value){
4679 + html += '<li data-val="'+value['term_id']+'">'+value['name']+'</li>';
4680 + });
4681 + return html;
4682 + }
4683 +
4684 + // For making new tags as well as removing using keyboard inputs.
4685 + var keypresses = function(obj){
4686 + row.find('.pagelayer-elp-postTags-inp').on('keydown', function(e){
4687 + var val = e.target.value.trim();
4688 + var keycode = (event.keyCode ? event.keyCode : event.which);
4689 +
4690 + if(keycode == '13' || keycode == '188'){
4691 +
4692 + for(var tag of obj.allTags){
4693 + if(tag['name']==val){
4694 + insertTags(val, tag['term_id']);
4695 + return false;
4696 + }
4697 + }
4698 +
4699 + jQuery.ajax({
4700 + url: pagelayer_ajax_url+'&action=pagelayer_get_post_tags',
4701 + type: 'post',
4702 + dataType: 'json',
4703 + data: {
4704 + pagelayer_nonce: pagelayer_ajax_nonce,
4705 + 'postid': pagelayer_postID,
4706 + 'new_tag': val
4707 + },
4708 + success: function(resp){
4709 + if(pagelayer_empty(resp)){
4710 + return;
4711 + }
4712 + if('error' in resp){
4713 + alert(resp.error);
4714 + }
4715 + if(!pagelayer_empty(resp.tag_id)){
4716 + insertTags(val, resp.tag_id);
4717 + tagSearching(resp);
4718 + pagelayer_post_tags = resp;
4719 + }
4720 + }
4721 + });
4722 +
4723 + return false;
4724 + }else if(keycode == '8'){
4725 + if(!pagelayer_empty(val)){
4726 + return true;
4727 + }
4728 + row.find('.pagelayer-post-tags').children('span').last().remove();
4729 + selected_tags();
4730 + }
4731 + return true;
4732 + });
4733 + }
4734 +
4735 + // Inserting tags in the Metabox.
4736 + var insertTags = function(name, tag_id){
4737 + var newItem = [];
4738 + newItem[0] = {
4739 + name:name,
4740 + term_id:tag_id
4741 + };
4742 + row.find('.pagelayer-post-tags').children('input').before(singleTag(newItem));
4743 + row.find('.pagelayer-elp-postTags .pagelayer-elp-postTags-inp').val('').focus();
4744 + tag_remove();
4745 + selected_tags();
4746 + }
4747 +
4748 + // Removing tags by clicking on the x button.
4749 + var tag_remove = function(){
4750 + row.find('.pagelayer-elp-tags-remove').each(function(){
4751 + jQuery(this).on('click',function(){
4752 + jQuery(this).parent().remove();
4753 + selected_tags();
4754 + });
4755 + });
4756 + }
4757 +
4758 + // For searching tag name in the list of the fetched tags
4759 + var tagSearching = function(obj){
4760 + row.find('.pagelayer-elp-postTags-inp').off('keyup');
4761 + row.find('.pagelayer-elp-postTags-inp').on("keyup", function() {
4762 + var value = jQuery(this).val().toLowerCase();
4763 +
4764 + var listUl = row.find('.pagelayer-postTags-list');
4765 + listUl.empty();
4766 +
4767 + if(value.length<2){
4768 + return;
4769 + }
4770 +
4771 + var listValues = obj.allTags.filter(function(currentValue){
4772 + if(currentValue.name.indexOf(this)>-1){
4773 + var temp = false;
4774 + var tags = row.find('.pagelayer-post-tags').children('span');
4775 + for(var indi of tags){
4776 + if(jQuery(indi).attr('data-val')==currentValue.term_id){
4777 + temp = true;
4778 + }
4779 + }
4780 + if(temp==false){
4781 + return currentValue;
4782 + }
4783 + }
4784 + }, value);
4785 +
4786 + if(!pagelayer_empty(listValues.length)){
4787 + listUl.append(singleLi(listValues));
4788 + listUl.children().each(function(index, value){
4789 + var ele = jQuery(this);
4790 + ele.off('click');
4791 + ele.on('click', function(){
4792 + insertTags(ele.text(), ele.attr('data-val'));
4793 + listUl.empty();
4794 + });
4795 + });
4796 + }
4797 +
4798 +
4799 + });
4800 + }
4801 +
4802 + var tagsArray = pagelayer_post_tags.postTags;
4803 +
4804 + // Getting tags on opening of page props settings.
4805 + if( first_time_tag == false ){
4806 +
4807 + var i=0;
4808 + var tags_array = [];
4809 +
4810 + // Create array for needed term_id with corresponding to the name.
4811 + if(!pagelayer_empty(prop.c['val'])){
4812 +
4813 + var tags_val = prop.c['val'];
4814 + if(pagelayer_is_string(tags_val)){
4815 + tags_val = tags_val.split(',');
4816 + }
4817 +
4818 + for(var name in tags_val){
4819 + tags_array[i] = pagelayer_post_tags.allTags.find(function(val){return val['name'] == tags_val[name]});
4820 + i++;
4821 + }
4822 + }
4823 +
4824 + tagsArray = tags_array;
4825 + }
4826 +
4827 + row.find('.pagelayer-post-tags').prepend(singleTag(tagsArray));
4828 +
4829 + first_time_tag = false;
4830 +
4831 + tagSearching(pagelayer_post_tags);
4832 +
4833 + keypresses(pagelayer_post_tags);
4834 +
4835 + tag_remove();
4836 +
4837 + var selected_tags = function(){
4838 + var jEle = row.find('.pagelayer-elp-postTags .pagelayer-elp-tags-ele');
4839 + var tag_array = [];
4840 + for(var selec_tag of jEle){
4841 + tag_array.push(jQuery(selec_tag).text());
4842 + }
4843 + _pagelayer_set_atts(row, tag_array);
4844 + };
4845 +}
4846 +
4847 +function pagelayer_elp_permalink(row, prop){
4848 +
4849 + var tmp = '';
4850 + var link = '';
4851 +
4852 + if(!pagelayer_empty(pagelayer_permalink_structure)){
4853 + tmp = pagelayer_post_permalink.replace(/\/$/,'');
4854 + link = tmp.substring(0, tmp.lastIndexOf('/'));
4855 +
4856 + var new_link = link+'/'+prop.c['val'];
4857 + prop.default = pagelayer_post.post_name;
4858 +
4859 + var div = '<div class="pagelayer-elp-text-div">'+
4860 + '<input type="text" class="pagelayer-elp-text" name="'+prop.c['name']+'" value="'+pagelayer_htmlEntities(prop.c['val'])+'"></input>'+
4861 + '<a href="'+pagelayer_post_permalink+'" class="pagelayer-elp-permalink-a" target="_blank" >'+new_link+'</a></p>'+
4862 + '</div>';
4863 + }else{
4864 + var div = '<div class="pagelayer-elp-text-div">'+
4865 + '<a href="'+pagelayer_post.guid+'" class="pagelayer-elp-permalink-a" target="_blank" >'+pagelayer_post.guid+'</a></p>'+
4866 + '</div>';
4867 + }
4868 +
4869 + row.append(div);
4870 +
4871 + setTimeout(function(){
4872 + row.find(".pagelayer-post-type").html(pagelayer_post.post_type);
4873 + }, 1000);
4874 +
4875 + var string_to_slug = function (str){
4876 + str = str.replace(/^\s+|\s+$/g, ''); // trim
4877 + str = str.toLowerCase();
4878 +
4879 + // remove accents, swap ñ for n, etc
4880 + var char_map = {
4881 + // Latin
4882 + 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 'Ç': 'C',
4883 + 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 'Î': 'I', 'Ï': 'I',
4884 + 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö': 'O', 'Ő': 'O',
4885 + 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH',
4886 + 'ß': 'ss',
4887 + 'à': 'a', 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c',
4888 + 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i',
4889 + 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ő': 'o',
4890 + 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', 'ű': 'u', 'ý': 'y', 'þ': 'th',
4891 + 'ÿ': 'y',
4892 +
4893 + // Latin symbols
4894 + '©': '(c)',
4895 +
4896 + // Greek
4897 + 'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', 'Η': 'H', 'Θ': '8',
4898 + 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N', 'Ξ': '3', 'Ο': 'O', 'Π': 'P',
4899 + 'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y', 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W',
4900 + 'Ά': 'A', 'Έ': 'E', 'Ί': 'I', 'Ό': 'O', 'Ύ': 'Y', 'Ή': 'H', 'Ώ': 'W', 'Ϊ': 'I',
4901 + 'Ϋ': 'Y',
4902 + 'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h', 'θ': '8',
4903 + 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3', 'ο': 'o', 'π': 'p',
4904 + 'ρ': 'r', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f', 'χ': 'x', 'ψ': 'ps', 'ω': 'w',
4905 + 'ά': 'a', 'έ': 'e', 'ί': 'i', 'ό': 'o', 'ύ': 'y', 'ή': 'h', 'ώ': 'w', 'ς': 's',
4906 + 'ϊ': 'i', 'ΰ': 'y', 'ϋ': 'y', 'ΐ': 'i',
4907 +
4908 + // Turkish
4909 + 'Ş': 'S', 'İ': 'I', 'Ç': 'C', 'Ü': 'U', 'Ö': 'O', 'Ğ': 'G',
4910 + 'ş': 's', 'ı': 'i', 'ç': 'c', 'ü': 'u', 'ö': 'o', 'ğ': 'g',
4911 +
4912 + // Russian
4913 + 'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'Yo', 'Ж': 'Zh',
4914 + 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', 'Н': 'N', 'О': 'O',
4915 + 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', 'Ф': 'F', 'Х': 'H', 'Ц': 'C',
4916 + 'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '', 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu',
4917 + 'Я': 'Ya',
4918 + 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo', 'ж': 'zh',
4919 + 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o',
4920 + 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'h', 'ц': 'c',
4921 + 'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': '', 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu',
4922 + 'я': 'ya',
4923 +
4924 + // Ukrainian
4925 + 'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ґ': 'G',
4926 + 'є': 'ye', 'і': 'i', 'ї': 'yi', 'ґ': 'g',
4927 +
4928 + // Czech
4929 + 'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R', 'Š': 'S', 'Ť': 'T', 'Ů': 'U',
4930 + 'Ž': 'Z',
4931 + 'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't', 'ů': 'u',
4932 + 'ž': 'z',
4933 +
4934 + // Polish
4935 + 'Ą': 'A', 'Ć': 'C', 'Ę': 'e', 'Ł': 'L', 'Ń': 'N', 'Ó': 'o', 'Ś': 'S', 'Ź': 'Z',
4936 + 'Ż': 'Z',
4937 + 'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', 'ź': 'z',
4938 + 'ż': 'z',
4939 +
4940 + // Latvian
4941 + 'Ā': 'A', 'Č': 'C', 'Ē': 'E', 'Ģ': 'G', 'Ī': 'i', 'Ķ': 'k', 'Ļ': 'L', 'Ņ': 'N',
4942 + 'Š': 'S', 'Ū': 'u', 'Ž': 'Z',
4943 + 'ā': 'a', 'č': 'c', 'ē': 'e', 'ģ': 'g', 'ī': 'i', 'ķ': 'k', 'ļ': 'l', 'ņ': 'n',
4944 + 'š': 's', 'ū': 'u', 'ž': 'z'
4945 + };
4946 +
4947 + for(var k in char_map) {
4948 + str = str.replace(new RegExp(k, 'g'), char_map[k]);
4949 + }
4950 +
4951 + str = str.replace('.', '-')// replace a dot by a dash
4952 + .replace(/[^a-z0-9 -]/g, '') // remove invalid chars
4953 + .replace(/\s+/g, '-') // collapse whitespace and replace by a dash
4954 + .replace(/-+/g, '-') // collapse dashes
4955 + .replace( /\//g, '' ); // collapse all forward-slashes
4956 +
4957 + return str;
4958 + }
4959 +
4960 + var editSlug = function(jEle, val){
4961 +
4962 + // Convert to slug
4963 + val = string_to_slug(val);
4964 +
4965 + var new_link = link+'/'+val;
4966 + var a = row.find('a');
4967 + a.html(new_link);
4968 + jEle.val(val);
4969 +
4970 + return val;
4971 + }
4972 +
4973 + var input = row.find('input');
4974 +
4975 + if(pagelayer_empty(prop.c['val'])){
4976 + editSlug(input, pagelayer_post.post_title);
4977 +
4978 + input.on('focusin', function(){
4979 + if(!pagelayer_empty(pagelayer_get_att(prop.el.$, prop.c['name']))){
4980 + return;
4981 + }
4982 +
4983 + editSlug(input, pagelayer_get_att(prop.el.$, 'post_title'));
4984 + });
4985 + }
4986 +
4987 + input.on('focusout', function(){
4988 + var val = jQuery(this).val();
4989 + val = editSlug(jQuery(this), val);
4990 +
4991 + if(pagelayer_empty(pagelayer_get_att(prop.el.$, prop.c['name']))){
4992 + return;
4993 + }
4994 + _pagelayer_set_atts(row, val);// Save and Render
4995 + });
4996 +
4997 + input.on('input', function(){
4998 + var new_link = link+'/'+jQuery(this).val();
4999 + var a = row.find('a');
5000 + a.html(new_link);
5001 + _pagelayer_set_atts(row, jQuery(this).val());// Save and Render
5002 + });
5003 +}
5004 +
5005 +// The Datetime Property
5006 +function pagelayer_elp_postDate(row, prop){
5007 +
5008 + var date_array = prop.c['val'].split(" ");
5009 +
5010 + var div = '<div class="pagelayer-elp-postdate-div">'+
5011 + '<input type="date" class="pagelayer-elp-postdate" name="'+prop.c['name']+'" value="'+date_array[0]+'" />'+
5012 + '<input type="time" class="pagelayer-elp-postdate" name="'+prop.c['name']+'" value="'+date_array[1]+'" />'+
5013 + '</div>';
5014 +
5015 + row.append(div);
5016 +
5017 + row.find('.pagelayer-elp-postdate-div').on('change', function(){
5018 + var date_string = jQuery(this).children().eq(0).val() +' '+ jQuery(this).children().eq(1).val();
5019 + _pagelayer_set_atts(row, date_string);// Save and Render
5020 + });
5021 +
5022 +};
5023 +
5024 +// The button Property
5025 +function pagelayer_elp_trashButton(row, prop){
5026 +
5027 + var div = '<div class="pagelayer-elp-trash-button-div">'+
5028 + '<button class="pagelayer-elp-trash-button">Move to trash</button>'+
5029 + '</div>';
5030 +
5031 + row.append(div);
5032 +
5033 + row.find('.pagelayer-elp-trash-button').on('click', function(event){
5034 + event.preventDefault();
5035 + if(!confirm(pagelayer_l('delete_post_conf'))){
5036 + return;
5037 + }
5038 + //console.log(pagelayer_postID);
5039 + jQuery.ajax({
5040 + url: pagelayer_ajax_url+'&action=pagelayer_trash_post',
5041 + type: 'post',
5042 + dataType: 'json',
5043 + data: {
5044 + pagelayer_nonce: pagelayer_ajax_nonce,
5045 + 'postid': pagelayer_postID
5046 + },
5047 + success: function(resp){
5048 +
5049 + if('error' in resp){
5050 + alert(resp.error);
5051 + }
5052 +
5053 + if('url' in resp){
5054 + window.top.location.href = resp.url;
5055 + }
5056 + }
5057 + });
5058 + });
5059 +
5060 +};
5061 +
5062 +// The Menus list property
5063 +function pagelayer_elp_menus(row, prop){
5064 +
5065 + var jEle = prop.el.$;
5066 + var options = '';
5067 + var option = function(val, lang){
5068 + var selected = (val != prop.c['val']) ? '' : 'selected="selected"';
5069 + return '<option class="pagelayer-elp-select-option" value="'+val+'" '+selected+'>'+lang+'</option>';
5070 + }
5071 +
5072 + for(x in prop['list']){
5073 +
5074 + // Single item
5075 + if(typeof prop['list'][x] == 'string'){
5076 + options += option(x, prop['list'][x]);
5077 +
5078 + // Groups
5079 + }else{
5080 + options += '<optgroup label="'+x+'">';
5081 +
5082 + for(var y in prop['list'][x]){
5083 + options += option(y, prop['list'][x][y]);
5084 + }
5085 +
5086 + options += '</optgroup>';
5087 + }
5088 + }
5089 +
5090 + var div = '<div class="pagelayer-elp-select-div pagelayer-elp-pos-rel">'+
5091 + '<select class="pagelayer-elp-select pagelayer-elp-select-menus" name="'+prop.c['name']+'">'+options+'</select>'+
5092 + '</div>'+
5093 + '<div class="pagelayer-elp-menu-items-holder pagelayer-elp-pos-rel"></div>';
5094 +
5095 + row.append(div);
5096 +
5097 + // Show the properties of the existing things
5098 + var show_item = function(item, child_elements, depth){
5099 +
5100 + depth = depth || 0;
5101 +
5102 + var title = item['title'] || '';
5103 +
5104 + // Create the HTML
5105 + var holder = jQuery('<div class="pagelayer-elp-group-item pagelayer-menu-depth-'+depth+'" pagelayer-menu-item="'+item['ID']+'">'+
5106 + '<div class="pagelayer-elp-group-item-head">'+
5107 + '<span class="pagelayer-elp-group-item-drag"><i class="pli pli-menu" ></i></span>'+
5108 + '<span class="pagelayer-elp-group-item-title">'+title+'</span>'+
5109 + '</div>'+
5110 + '<div class="pagelayer-elp-group-item-body"></div>'+
5111 + '<div class="menu-item-transport"></div>'+
5112 + '</div>');
5113 +
5114 + // Append to the row
5115 + row.find('.pagelayer-elp-menu-items-holder').append(holder);
5116 +
5117 + // Setup the toggle
5118 + holder.find('.pagelayer-elp-group-item-head').first().on('click', function(e){
5119 + if(jQuery(e.target).closest('.pagelayer-elp-group-item-clone, .pagelayer-elp-group-item-del, .pagelayer-elp-group-item-drag').length > 0){
5120 + return;
5121 + }
5122 +
5123 + var editArea = jEle.find('.pagelayer-mega-editor-'+item['ID']);
5124 + var child = editArea.find('[pagelayer-tag="pl_nav_menu_item"]');
5125 + var cid;
5126 +
5127 + if(child.length < 1){
5128 +
5129 + // First add the element inside the group element
5130 + var _child = jQuery('<div pagelayer-tag="pl_nav_menu_item"></div>');
5131 +
5132 + editArea.append(_child);
5133 +
5134 + cid = pagelayer_onadd(_child, false);
5135 +
5136 + child = jQuery('[pagelayer-id='+cid+']');
5137 +
5138 + // Set Attributes
5139 + pagelayer_set_atts(child, item);
5140 + }else{
5141 + cid = pagelayer_id(child);
5142 + }
5143 +
5144 + var rEle = holder.find('.pagelayer-elp-group-item-body').first();
5145 +
5146 + holder.attr('pagelayer-group-item-id', cid);
5147 +
5148 + // If the props are not already setup
5149 + if(rEle.html().length < 1){
5150 + pagelayer_elpd_generate(jQuery('[pagelayer-id="'+cid+'"]'), rEle);
5151 +
5152 + // Change the group item title
5153 + var tmp_title = holder.find('[pagelayer-elp-name="'+item['title']+'"] [name="'+item['title']+'"]');
5154 +
5155 + if(tmp_title.length > 0){
5156 + jQuery(tmp_title).on('input', function(){
5157 + holder.find('.pagelayer-elp-group-item-title').html(tmp_title.val());
5158 + });
5159 + }
5160 + }
5161 +
5162 + if(!rEle.is(':visible')){
5163 + jQuery('.pagelayer-active-mega-menu').removeClass('pagelayer-active-mega-menu');
5164 + jEle.find('.pagelayer-mega-menu-item.menu-item-'+item['ID']).addClass('pagelayer-active-mega-menu');
5165 + }
5166 +
5167 + rEle.slideToggle();
5168 + });
5169 +
5170 + // Add child elements
5171 + if(!pagelayer_empty(child_elements[item['ID']])){
5172 +
5173 + depth++;
5174 +
5175 + for(var i in child_elements[item['ID']]){
5176 + show_item(child_elements[item['ID']][i], child_elements, depth);
5177 + }
5178 + }
5179 +
5180 + holder.on('change', 'select[name="menu_type"]', function(){
5181 + var mType = jQuery(this).val();
5182 + var rowGroup = holder.find('[pagelayer-elp-name="element"]');
5183 +
5184 + if(mType != 'mega' || rowGroup.find('.pagelayer-elp-group-div .pagelayer-elp-group-item').length > 0){
5185 + return;
5186 + }
5187 +
5188 + rowGroup.find('.pagelayer-elp-button').click();
5189 +
5190 + });
5191 + };
5192 +
5193 + var createItemsList = function(menuID){
5194 +
5195 + // Remove previous items
5196 + row.find('.pagelayer-elp-menu-items-holder').empty();
5197 +
5198 + if(!(menuID in pagelayer_menus_items_list)){
5199 + return;
5200 + }
5201 +
5202 + var $elements = pagelayer_menus_items_list[menuID];
5203 + var top_level_elements = [];
5204 + var children_elements = [];
5205 +
5206 + for($e in $elements){
5207 +
5208 + // Make a referrer of each menu
5209 + pagelayer_menus_items_ref[$elements[$e]['ID']] = $elements[$e];
5210 +
5211 + if ( pagelayer_empty( $elements[$e]['menu_item_parent'] ) ) {
5212 + top_level_elements.push($elements[$e]);
5213 + } else {
5214 + if(pagelayer_empty(children_elements[ $elements[$e]['menu_item_parent'] ])){
5215 + children_elements[ $elements[$e]['menu_item_parent'] ] = [];
5216 + }
5217 + children_elements[ $elements[$e]['menu_item_parent'] ].push($elements[$e]);
5218 + }
5219 + }
5220 +
5221 + for(var i in top_level_elements){
5222 + show_item(top_level_elements[i], children_elements, 0);
5223 + }
5224 +
5225 + }
5226 +
5227 + createItemsList(prop.c['val']);
5228 +
5229 + row.find('select.pagelayer-elp-select-menus').on('change', function(){
5230 +
5231 + var ID = jQuery(this).val();
5232 +
5233 + // Load Menu list
5234 + createItemsList(ID);
5235 +
5236 + _pagelayer_set_atts(row, ID);// Save and Render
5237 +
5238 + });
5239 +
5240 +}
5241 +
2828 5242 // Select frame to upload media
2829 5243 function pagelayer_select_frame(tag, state){
2830 5244
2831 5245 var state = state || '';
@@ -2842,9 +5256,9 @@
2842 5256
2843 5257 id: 'pagelayer-wp-multi-image-library',
2844 5258 frame: 'post',
2845 5259 state: state,
2846 - title: pagelayer_l('frame_'+tag),
5260 + title: pagelayer_l('frame_multi_image'),
2847 5261 multiple: true,
2848 5262 library: wp.media.query({type: 'image'}),
2849 5263 button: {
2850 5264 text: pagelayer_l('insert')
@@ -2861,14 +5275,14 @@
2861 5275
2862 5276 id: 'pagelayer-wp-media-library',
2863 5277 frame: 'post',
2864 5278 state: 'pagelayer-media',
2865 - title: pagelayer_l('frame_'+tag),
5279 + title: pagelayer_l('frame_media'),
2866 5280 multiple: false,
2867 5281 states: [
2868 5282 new wp.media.controller.Library({
2869 5283 id: 'pagelayer-media',
2870 - title: pagelayer_l('frame_'+tag),
5284 + title: pagelayer_l('frame_media'),
2871 5285 multiple: false,
2872 5286 date: true
2873 5287 })
2874 5288 ],
@@ -2887,15 +5301,15 @@
2887 5301
2888 5302 id: 'pagelayer-wp-'+tag+'-library',
2889 5303 frame: 'post',
2890 5304 state: 'pagelayer-'+tag,
2891 - title: pagelayer_l('frame_'+tag),
5305 + title: pagelayer_l('frame_media'),
2892 5306 multiple: false,
2893 5307 library: wp.media.query({type: tag}),
2894 5308 states: [
2895 5309 new wp.media.controller.Library({
2896 5310 id: 'pagelayer-'+tag,
2897 - title: pagelayer_l('frame_'+tag),
5311 + title: pagelayer_l('frame_media'),
2898 5312 library: wp.media.query( { type: tag } ),
2899 5313 multiple: false,
2900 5314 date: true
2901 5315 })
@@ -2921,4 +5335,88 @@
2921 5335
2922 5336 return frame;
2923 5337
2924 5338 }
5339 +
5340 +// function to show default button
5341 +function pagelayer_show_default_button(row, prop, value){
5342 +
5343 + // Default button is visible or not
5344 + if(row.find('.pagelayer-elp-default').attr('data_show')){
5345 + return;
5346 + }
5347 +
5348 + // value is an object or not
5349 + if(typeof value == 'object'){
5350 + // Checking value for NaN, empty and default.
5351 +
5352 + for(var i = 0; i < pagelayer_length(value); i++){
5353 + if(value[i]!= prop.default && value[i] == value[i] && value[i] != ''){
5354 + row.find('.pagelayer-elp-default').attr('data_show',true);
5355 + break;
5356 + }
5357 + }
5358 + }else{
5359 + if('default' in prop && value!=prop.default){
5360 + row.find('.pagelayer-elp-default').attr('data_show',true);
5361 + }else if(value!=prop.default && value==value && value!=''){
5362 + row.find('.pagelayer-elp-default').attr('data_show',true);
5363 + }
5364 + }
5365 +}
5366 +
5367 +// Function which checks the properties to not to show default button
5368 +function pagelayer_properties_filter(property){
5369 + var propTypeDefault = ['image', 'text', 'editor', 'textarea', 'checkbox', 'access', 'modal', 'group', 'radio', 'postCategory', 'postTags', 'postDate', 'gradient'];
5370 +
5371 + return (jQuery.inArray(property, propTypeDefault) == -1)
5372 +}
5373 +
5374 +// Link font family
5375 +function pagelayer_link_font_family(sEle){
5376 +
5377 + var value = sEle.val();
5378 +
5379 + if(sEle.val() == 'Default'){
5380 + return;
5381 + }
5382 +
5383 + value = value.replace(' ', '+');
5384 + var t = sEle.find("option:selected").attr('type');
5385 + switch(t){
5386 + case 'google':
5387 + if(jQuery('#pagelayer-google-fonts').length == 0){
5388 + if(value==''){
5389 + return;
5390 + }
5391 + jQuery('head').append('<link id="pagelayer-google-fonts" href="https://fonts.googleapis.com/css?family='+value+':100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">');
5392 +
5393 + }else{
5394 + var url = jQuery('#pagelayer-google-fonts').attr('href');
5395 + if(url.indexOf(value) == -1){
5396 + url = url+'|'+value+':100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i';
5397 + jQuery('#pagelayer-google-fonts').attr('href', url);
5398 + }
5399 + }
5400 + break;
5401 +
5402 + case 'custom':
5403 + if(!pagelayer_empty(jQuery('style[id='+value+'_plf]').length)){
5404 + break;
5405 + }
5406 + jQuery.ajax({
5407 + url: pagelayer_ajax_url+'&action=pagelayer_custom_font',
5408 + type: 'POST',
5409 + dataType: 'json',
5410 + data: {
5411 + 'pagelayer_nonce': pagelayer_ajax_nonce,
5412 + 'font_name': value
5413 + },
5414 + success: function(data) {
5415 + if('style' in data){
5416 + jQuery('body').append(data['style']);
5417 + }
5418 + }
5419 + });
5420 + break;
5421 + }
5422 +}