Page Builder: PageLayer – Drag and Drop website builder - Version 1.5.8

Version Description

(Oct 20, 2021) = * [Improvement] The link property has been further improved to add target, rel and other attributes. * [Improvement] Added the color options in the social share widget for the labels. * [Improvement] Added alignment option in Pricing table widget and also added screen mode option where needed. * [Task] The list of Google fonts has been updated. * [Bug-Fix] In some cases, the JS/CSS files compressor was not loaded properly. This is fixed and also added option in Pagelayer setting to enable/disable JS/CSS giver. * [Bug-Fix] In the social share widget the "Open link in new window" was not working properly. This is fixed. * [Bug-Fix] In some cases, the Custom Attributes option was not working properly. This is fixed. * [Bug-Fix] In the Audio widget the time handler height was not set properly. This is fixed. * [Bug-Fix] In the options section the font family property was not working properly. This is fixed.

Download this release

Release Info

Developer pagelayer
Plugin Icon 128x128 Page Builder: PageLayer – Drag and Drop website builder
Version 1.5.8
Comparing to
See all releases

Code changes from version 1.5.7 to 1.5.8

css/pagelayer-admin.css CHANGED
@@ -144,7 +144,7 @@ text-align: center;
144
  }
145
 
146
  .pagelayer-pro-message{
147
- margin: 25px auto;
148
  font-size: 15px;
149
  padding: 2px 25px;
150
  text-align: center;
144
  }
145
 
146
  .pagelayer-pro-message{
147
+ margin: 25px auto;
148
  font-size: 15px;
149
  padding: 2px 25px;
150
  text-align: center;
css/pagelayer-editor.css CHANGED
@@ -667,7 +667,7 @@ border-bottom: 1px dashed #686870;
667
  display:initial;
668
  }
669
 
670
- .pagelayer-elp-label-div{
671
  padding:4px 0px 4px 0px;
672
  position:relative;
673
  }
@@ -676,7 +676,7 @@ position:relative;
676
  width:50%;
677
  }
678
 
679
- .pagelayer-elp-label{
680
  display: inline-block;
681
  color: #555;
682
  font-size: 12px;
@@ -684,6 +684,7 @@ line-height: 150%;
684
  }
685
 
686
  .pagelayer-dark .pagelayer-elp-label,
 
687
  .pagelayer-dark .pagelayer-post-category,
688
  .pagelayer-dark .pagelayer-elp-postCategory,
689
  .pagelayer-dark .pagelayer-elp-postdate::-webkit-datetime-edit-second-field{
@@ -828,7 +829,7 @@ color: black;
828
 
829
  /* Default button css ends */
830
 
831
- .pagelayer-elp-desc, .pagelayer-elp-permalink-a{
832
  color:#757575;
833
  font-size: 12px;
834
  line-height: 20px;
@@ -1635,6 +1636,14 @@ left: calc(100% - 1.5em);
1635
  position: relative;
1636
  }
1637
 
 
 
 
 
 
 
 
 
1638
  .pagelayer-elp-input-icon input{
1639
  width: 85%;
1640
  }
@@ -2439,6 +2448,22 @@ transition: all 0.3s;
2439
  padding:1px;
2440
  }
2441
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2442
  .pagelayer-dark .pagelayer-shortcode-text{
2443
  color: #bdbdbd;
2444
  }
@@ -3552,6 +3577,31 @@ margin-left:5px;
3552
  .pagelayer-elp-link-info span{
3553
  padding: 4px;
3554
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3555
  /* Property link end*/
3556
  /* Editor notice start*/
3557
  .pagelayer-editor-notice{
667
  display:initial;
668
  }
669
 
670
+ .pagelayer-elp-label-div, .pagelayer-elp-link-label-div{
671
  padding:4px 0px 4px 0px;
672
  position:relative;
673
  }
676
  width:50%;
677
  }
678
 
679
+ .pagelayer-elp-label, .pagelayer-elp-link-label{
680
  display: inline-block;
681
  color: #555;
682
  font-size: 12px;
684
  }
685
 
686
  .pagelayer-dark .pagelayer-elp-label,
687
+ .pagelayer-dark .pagelayer-elp-link-label,
688
  .pagelayer-dark .pagelayer-post-category,
689
  .pagelayer-dark .pagelayer-elp-postCategory,
690
  .pagelayer-dark .pagelayer-elp-postdate::-webkit-datetime-edit-second-field{
829
 
830
  /* Default button css ends */
831
 
832
+ .pagelayer-elp-desc, .pagelayer-elp-permalink-a, .pagelayer-elp-link-desc{
833
  color:#757575;
834
  font-size: 12px;
835
  line-height: 20px;
1636
  position: relative;
1637
  }
1638
 
1639
+ .pagelayer-elp-link-no-addons > .pagelayer-elp-link{
1640
+ width:100% !important;
1641
+ }
1642
+
1643
+ .pagelayer-elp-link-no-addons > .pagelayer-elp-link-icon{
1644
+ display:none !important;
1645
+ }
1646
+
1647
  .pagelayer-elp-input-icon input{
1648
  width: 85%;
1649
  }
2448
  padding:1px;
2449
  }
2450
 
2451
+ .pagelayer-leftbar-search-empty{
2452
+ display: none;
2453
+ padding: 40px;
2454
+ text-align: center;
2455
+ color: #777;
2456
+ font-family: 'Roboto';
2457
+ }
2458
+
2459
+ .pagelayer-leftbar-search-empty p{
2460
+ margin: 8px;
2461
+ }
2462
+
2463
+ .pagelayer-leftbar-search-empty .fa-sad-tear{
2464
+ font-size: 24px;
2465
+ }
2466
+
2467
  .pagelayer-dark .pagelayer-shortcode-text{
2468
  color: #bdbdbd;
2469
  }
3577
  .pagelayer-elp-link-info span{
3578
  padding: 4px;
3579
  }
3580
+
3581
+ .pagelayer-elp-link-div .pagelayer-elp-link-addons{
3582
+ margin-right: 30px;
3583
+ display: none;
3584
+ }
3585
+
3586
+ .pagelayer-elp-link-div .pagelayer-elp-link-cb-div{
3587
+ display: flex;
3588
+ justify-content: space-between;
3589
+ align-items: center;
3590
+ padding-top: 5px;
3591
+ }
3592
+
3593
+ .pagelayer-elp-link-div .pagelayer-elp-link-cb-div:first-child{
3594
+ margin-top: 10px;
3595
+ }
3596
+
3597
+ .pagelayer-elp-link-div .pagelayer-elp-link-ca{
3598
+ margin: 5px 0px;
3599
+ }
3600
+
3601
+ .pagelayer-elp-link-ca input{
3602
+ width: 100%;
3603
+ }
3604
+
3605
  /* Property link end*/
3606
  /* Editor notice start*/
3607
  .pagelayer-editor-notice{
init.php CHANGED
@@ -5,7 +5,7 @@ if (!defined('ABSPATH')) exit;
5
 
6
  define('PAGELAYER_BASE', plugin_basename(PAGELAYER_FILE));
7
  define('PAGELAYER_PRO_BASE', 'pagelayer-pro/pagelayer-pro.php');
8
- define('PAGELAYER_VERSION', '1.5.7');
9
  define('PAGELAYER_DIR', dirname(PAGELAYER_FILE));
10
  define('PAGELAYER_SLUG', 'pagelayer');
11
  define('PAGELAYER_URL', plugins_url('', PAGELAYER_FILE));
5
 
6
  define('PAGELAYER_BASE', plugin_basename(PAGELAYER_FILE));
7
  define('PAGELAYER_PRO_BASE', 'pagelayer-pro/pagelayer-pro.php');
8
+ define('PAGELAYER_VERSION', '1.5.8');
9
  define('PAGELAYER_DIR', dirname(PAGELAYER_FILE));
10
  define('PAGELAYER_SLUG', 'pagelayer');
11
  define('PAGELAYER_URL', plugins_url('', PAGELAYER_FILE));
js/pagelayer-editor.js CHANGED
@@ -28,6 +28,39 @@ var pagelayer_add_section_data = {};
28
 
29
  // Console error manager
30
  window.onerror = function (msg, url, lineNo, columnNo, error) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  var string = msg.toLowerCase();
32
  var substring = "script error";
33
 
@@ -57,7 +90,7 @@ window.onerror = function (msg, url, lineNo, columnNo, error) {
57
  pagelayer.$$('.pagelayer-errorBox').fadeOut();
58
  });
59
  pagelayer.$$('.pagelayer-errorBox').fadeIn();
60
-
61
  return false;
62
  };
63
 
@@ -3548,6 +3581,57 @@ function pagelayer_sc_render(jEle){
3548
  elCSS.edit.push({prop: x, sel: props[x]['edit']});
3549
  }
3550
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3551
  // Do we have a addClass ?
3552
  // We are checking before the element has a value so that we can add or remove the class
3553
  if('addClass' in props[x]){
@@ -3828,7 +3912,7 @@ function pagelayer_sc_render(jEle){
3828
  for(var c in elCSS.attr){
3829
  var tSel = elCSS.attr[c]['sel'].replace('{{element}}', '');
3830
  var node = tSel.length < 1 ? jEle : jEle.find(tSel);
3831
- var att = elCSS.attr[c]['val'].split('=');
3832
  att[1] = pagelayer_parse_vars(att[1], el);
3833
  att[1] = pagelayer_trim(att[1], '"');
3834
 
28
 
29
  // Console error manager
30
  window.onerror = function (msg, url, lineNo, columnNo, error) {
31
+
32
+ if (typeof pagelayer_doc_width === 'undefined') {
33
+ var test_giver = -1;
34
+
35
+ jQuery.ajax({
36
+ url: pagelayer_url+'/js/givejs.php?test=1',
37
+ type: "GET",
38
+ dataType: "text",
39
+ success: function(data){
40
+
41
+ if(data != 1){
42
+ return;
43
+ }
44
+
45
+ test_giver = 1;
46
+ },
47
+ complete: function(data){
48
+ jQuery.ajax({
49
+ type: "POST",
50
+ url: pagelayer_ajax_url+"&action=pagelayer_set_jscss_giver",
51
+ data: {
52
+ pagelayer_nonce: pagelayer_ajax_nonce,
53
+ set : test_giver
54
+ },
55
+ error: function(errorThrown){
56
+ console.log("Error saving giver data");
57
+ console.log(errorThrown);
58
+ }
59
+ });
60
+ }
61
+ });
62
+ }
63
+
64
  var string = msg.toLowerCase();
65
  var substring = "script error";
66
 
90
  pagelayer.$$('.pagelayer-errorBox').fadeOut();
91
  });
92
  pagelayer.$$('.pagelayer-errorBox').fadeIn();
93
+
94
  return false;
95
  };
96
 
3581
  elCSS.edit.push({prop: x, sel: props[x]['edit']});
3582
  }
3583
 
3584
+ // Load permalink values
3585
+ if(props[x]['type'] == 'link'){
3586
+
3587
+ if('selector' in props[x] && typeof el.atts[x] == 'object'){
3588
+ var tmp = {};
3589
+
3590
+ // Link is required for check IF and IF-EXT in html
3591
+ if(pagelayer_length(el.atts[x]['link']) < 1){
3592
+ delete el.atts[x];
3593
+ continue;
3594
+ }
3595
+
3596
+ if( 'target' in el.atts[x] && !pagelayer_empty(el.atts[x]['target']) ){
3597
+ tmp = {'sel': props[x]['selector'], 'val': 'target="_blank"'};
3598
+ elCSS['attr'].push(tmp);
3599
+ }
3600
+
3601
+ if( 'rel' in el.atts[x] && !pagelayer_empty(el.atts[x]['rel']) ){
3602
+ tmp = {'sel': props[x]['selector'], 'val': 'rel="nofollow"'};
3603
+ elCSS['attr'].push(tmp);
3604
+ }
3605
+
3606
+ if( 'attrs' in el.atts[x] && !pagelayer_empty(el.atts[x]['attrs']) ){
3607
+
3608
+ var attrsVal = pagelayer_trim(el.atts[x]['attrs'].split(';'));
3609
+
3610
+ attrsVal.forEach(function(item, index){
3611
+
3612
+ var splitValue = item.split(/=(.*)/);
3613
+ var attKey = pagelayer_trim(splitValue[0]);
3614
+ var setAtt = '';
3615
+
3616
+ // Validate the attrs name
3617
+ if(attKey.length < 1 || pagelayer_empty(attKey.match(/^[a-z_]+[\w:.-]*$/i))){
3618
+ return;
3619
+ }
3620
+
3621
+ if(splitValue.length < 2){
3622
+ setAtt = attKey+'=""';
3623
+ }else{
3624
+ setAtt = attKey+'="'+splitValue[1]+'"';
3625
+ }
3626
+
3627
+ tmp = {'sel': props[x]['selector'], 'val': setAtt};
3628
+ elCSS['attr'].push(tmp);
3629
+
3630
+ });
3631
+ }
3632
+ }
3633
+ }
3634
+
3635
  // Do we have a addClass ?
3636
  // We are checking before the element has a value so that we can add or remove the class
3637
  if('addClass' in props[x]){
3912
  for(var c in elCSS.attr){
3913
  var tSel = elCSS.attr[c]['sel'].replace('{{element}}', '');
3914
  var node = tSel.length < 1 ? jEle : jEle.find(tSel);
3915
+ var att = elCSS.attr[c]['val'].split(/=(.*)/);
3916
  att[1] = pagelayer_parse_vars(att[1], el);
3917
  att[1] = pagelayer_trim(att[1], '"');
3918
 
js/properties.js CHANGED
@@ -2204,17 +2204,63 @@ function pagelayer_elp_editor(row, prop){
2204
 
2205
  // The Link proprety
2206
  function pagelayer_elp_link(row, prop){
 
 
 
2207
 
 
 
 
 
 
 
 
 
 
 
 
 
2208
  var tmp = prop.c['name'];
2209
- var link = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : prop.c['val'];
2210
  var jEle = jQuery('[pagelayer-id='+prop.el.id+']');
2211
 
2212
- var div = '<div class="pagelayer-elp-link-div pagelayer-elp-input-icon">'+
2213
- '<input class="pagelayer-elp-link" type="text" value="'+link+'" />'+
2214
- '<i class="pli pli-link pagelayer-elp-link-icon" ></i>'+
2215
- '<div class="pagelayer-elp-link-list">'+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2216
  '</div>'+
2217
  '</div>';
 
 
 
2218
 
2219
  row.append(div);
2220
 
@@ -2227,22 +2273,44 @@ function pagelayer_elp_link(row, prop){
2227
 
2228
  var lDiv = row.closest('[pagelayer-elp-name]').find('.pagelayer-elp-label-div');
2229
  if(permaID){
2230
- lDiv.append('<span class="pagelayer-elp-link-id">ID : '+permaID+'</span>');
 
2231
  }else{
2232
  lDiv.find('.pagelayer-elp-link-id').remove();
2233
  }
2234
  };
2235
 
2236
- if(!isNaN(prop.c['val'])){
2237
- addID(prop.c['val']);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2238
  }
2239
 
2240
  // Set a Link
2241
  row.find('.pagelayer-elp-link').on('change', function(){
2242
 
 
 
 
2243
  // Save and Render
2244
- _pagelayer_set_tmp_atts(row, '', jQuery(this).val());
2245
- _pagelayer_set_atts(row, jQuery(this).val());
2246
 
2247
  // Remove ID Holder
2248
  addID();
@@ -2319,11 +2387,13 @@ function pagelayer_elp_link(row, prop){
2319
 
2320
  var perma = lEle.attr('data-permalink');
2321
  var ID = lEle.attr('data-id');
 
2322
 
2323
  // Save and Render
2324
  row.find('.pagelayer-elp-link').val(perma);
2325
  _pagelayer_set_tmp_atts(row, '', perma);
2326
- _pagelayer_set_atts(row, ID);
 
2327
  listWrap.hide();
2328
 
2329
  // Show ID
@@ -2333,6 +2403,56 @@ function pagelayer_elp_link(row, prop){
2333
  pagelayer.gDocument.on('click', function(e){
2334
  listWrap.hide();
2335
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2336
 
2337
  }
2338
 
@@ -3631,7 +3751,9 @@ function pagelayer_elp_font_family(row, prop){
3631
 
3632
  row.find('select').on('change', function(){
3633
 
3634
- pagelayer_link_font_family(jQuery(this));
 
 
3635
  _pagelayer_set_atts(row, sEle.val());// Save and Render
3636
 
3637
  });
2204
 
2205
  // The Link proprety
2206
  function pagelayer_elp_link(row, prop){
2207
+
2208
+ var values = {};
2209
+ var settingOpt = false;
2210
 
2211
+ // Show link options?
2212
+ if('selector' in prop){
2213
+ settingOpt = true;
2214
+ }
2215
+
2216
+ // Previously saved values
2217
+ if(typeof prop.c['val'] === 'object'){
2218
+ values = prop.c['val'];
2219
+ }else{
2220
+ values['link'] = prop.c['val'];
2221
+ }
2222
+
2223
  var tmp = prop.c['name'];
2224
+ var link = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : values['link'];
2225
  var jEle = jQuery('[pagelayer-id='+prop.el.id+']');
2226
 
2227
+ var div = '<div class="pagelayer-elp-link-div pagelayer-elp-input-icon '+(settingOpt ? '' : 'pagelayer-elp-link-no-addons')+'">'+
2228
+ '<input class="pagelayer-elp-link" type="text" value="'+link+'" />'+
2229
+ '<i class="pli pli-service pagelayer-elp-link-icon" title="'+pagelayer_l('link_options')+'" ></i>'+
2230
+ '<div class="pagelayer-elp-link-list">'+
2231
+ '</div>';
2232
+
2233
+ if(settingOpt){
2234
+ div += '<div class="pagelayer-elp-link-addons">'+
2235
+ '<div class="pagelayer-elp-link-cb-div">'+
2236
+ '<div class="pagelayer-elp-link-label-div" type="'+prop['type']+'">'+
2237
+ '<label class="pagelayer-elp-link-label">'+pagelayer_l('open_link_in_new_window')+'</label>'+
2238
+ '</div>'+
2239
+ '<div>'+
2240
+ '<input type="checkbox" name="link_new_tab" class="pagelayer-elp-checkbox" '+(!pagelayer_empty(values['target']) ? 'checked="checked"' : '')+' />'+
2241
+ '</div>'+
2242
+ '</div>'+
2243
+ '<div class="pagelayer-elp-link-cb-div" >'+
2244
+ '<div class="pagelayer-elp-link-label-div" type="'+prop['type']+'">'+
2245
+ '<label class="pagelayer-elp-link-label">'+pagelayer_l('add_nofollow')+'</label>'+
2246
+ '</div>'+
2247
+ '<div>'+
2248
+ '<input type="checkbox" name="link_no_follow" class="pagelayer-elp-checkbox" '+(!pagelayer_empty(values['rel']) ? 'checked="checked"' : '')+'/>'+
2249
+ '</div>'+
2250
+ '</div>'+
2251
+ '<div class="pagelayer-elp-link-ca" >'+
2252
+ '<div class="pagelayer-elp-link-label-div" type="'+prop['type']+'">'+
2253
+ '<label class="pagelayer-elp-link-label">'+pagelayer_l('custom_attributes')+'</label>'+
2254
+ '</div>'+
2255
+ '<div>'+
2256
+ '<input type="text" class="pagelayer-elp-text" placeholder="key = value" name="'+prop.c['name']+'" value="'+(pagelayer_empty(values['attrs']) ? '' : values['attrs'])+'"/>'+
2257
+ '<p class="pagelayer-elp-link-desc">'+pagelayer_l('link_custom_attr_desc')+'</p>'+
2258
+ '</div>'+
2259
  '</div>'+
2260
  '</div>';
2261
+ }
2262
+
2263
+ div += '</div>';
2264
 
2265
  row.append(div);
2266
 
2273
 
2274
  var lDiv = row.closest('[pagelayer-elp-name]').find('.pagelayer-elp-label-div');
2275
  if(permaID){
2276
+ lDiv = lDiv.find('.pagelayer-elp-label');
2277
+ lDiv.after('<span class="pagelayer-elp-link-id">ID : '+permaID+'</span>');
2278
  }else{
2279
  lDiv.find('.pagelayer-elp-link-id').remove();
2280
  }
2281
  };
2282
 
2283
+ if(!isNaN(values['link'])){
2284
+ addID(values['link']);
2285
+ }
2286
+
2287
+ var getLinkVal = function(val){
2288
+
2289
+ if(typeof val === 'object' && pagelayer_length(val) == 1 && 'link' in val){
2290
+ return val['link'];
2291
+ }
2292
+
2293
+ return val;
2294
+ }
2295
+
2296
+ var setTmpEmpty = function(){
2297
+
2298
+ if( 'link' in values && !pagelayer_empty(values['link']) ){
2299
+ return;
2300
+ }
2301
+
2302
+ _pagelayer_set_tmp_atts(row, '', '');
2303
  }
2304
 
2305
  // Set a Link
2306
  row.find('.pagelayer-elp-link').on('change', function(){
2307
 
2308
+ var linkVal = jQuery(this).val();
2309
+ values['link'] = linkVal;
2310
+
2311
  // Save and Render
2312
+ _pagelayer_set_tmp_atts(row, '', linkVal);
2313
+ _pagelayer_set_atts(row, getLinkVal(values));
2314
 
2315
  // Remove ID Holder
2316
  addID();
2387
 
2388
  var perma = lEle.attr('data-permalink');
2389
  var ID = lEle.attr('data-id');
2390
+ values['link'] = ID;
2391
 
2392
  // Save and Render
2393
  row.find('.pagelayer-elp-link').val(perma);
2394
  _pagelayer_set_tmp_atts(row, '', perma);
2395
+ _pagelayer_set_atts(row, getLinkVal(values));
2396
+
2397
  listWrap.hide();
2398
 
2399
  // Show ID
2403
  pagelayer.gDocument.on('click', function(e){
2404
  listWrap.hide();
2405
  });
2406
+
2407
+ row.find('.pagelayer-elp-checkbox').on('change', function(event){
2408
+
2409
+ var cEle = jQuery(this);
2410
+
2411
+ // Save or delete the value
2412
+ var saveVal = function(key){
2413
+ if(cEle.is(':checked')){
2414
+ values[key] = true;
2415
+ return;
2416
+ }
2417
+
2418
+ delete values[key];
2419
+ }
2420
+
2421
+ switch(cEle.attr('name')){
2422
+ case 'link_new_tab':
2423
+ saveVal('target');
2424
+ break;
2425
+ case 'link_no_follow':
2426
+ saveVal('rel');
2427
+ break;
2428
+ }
2429
+
2430
+ setTmpEmpty();
2431
+ _pagelayer_set_atts(row, getLinkVal(values));
2432
+
2433
+ });
2434
+
2435
+ var linkTime = '';
2436
+ row.find('.pagelayer-elp-text').on('input', function(event){
2437
+ var cEle = jQuery(this);
2438
+
2439
+ clearTimeout(linkTime);
2440
+ linkTime = setTimeout(function(){
2441
+ values['attrs'] = cEle.val();
2442
+
2443
+ if(pagelayer_empty(values['attrs'])){
2444
+ delete values['attrs'];
2445
+ }
2446
+
2447
+ setTmpEmpty();
2448
+ _pagelayer_set_atts(row, getLinkVal(values));
2449
+
2450
+ }, 500);
2451
+ });
2452
+
2453
+ row.find('.pagelayer-elp-link-icon').on('click', function(){
2454
+ row.find('.pagelayer-elp-link-addons').slideToggle('slow');
2455
+ });
2456
 
2457
  }
2458
 
3751
 
3752
  row.find('select').on('change', function(){
3753
 
3754
+ var sEle = jQuery(this);
3755
+
3756
+ pagelayer_link_font_family(sEle);
3757
  _pagelayer_set_atts(row, sEle.val());// Save and Render
3758
 
3759
  });
js/widgets.js CHANGED
@@ -455,7 +455,7 @@ function pagelayer_render_pl_image_slider(el){
455
 
456
  if(is_link){
457
  var link = (el.atts['link_type'] == 'media_file' ? (!pagelayer_empty(img_urls[x]) ? img_urls[x] : url) : (el.tmp['link'] || ''))
458
- ul += '<a href="'+link+'">';
459
  }
460
 
461
  ul += '<img class="pagelayer-img" src="'+url+'" title="'+img_title[x]+'" alt="'+img_title[x]+'">';
455
 
456
  if(is_link){
457
  var link = (el.atts['link_type'] == 'media_file' ? (!pagelayer_empty(img_urls[x]) ? img_urls[x] : url) : (el.tmp['link'] || ''))
458
+ ul += '<a href="'+link+'" class="pagelayer-link-sel">';
459
  }
460
 
461
  ul += '<img class="pagelayer-img" src="'+url+'" title="'+img_title[x]+'" alt="'+img_title[x]+'">';
languages/en.json CHANGED
@@ -1921,5 +1921,10 @@
1921
  "map_type" : "Map type",
1922
  "roadmap" : "Roadmap",
1923
  "satellite" : "Satellite",
1924
- "thumb_img_type" : "Thumbnail Image Type"
 
 
 
 
 
1925
  }
1921
  "map_type" : "Map type",
1922
  "roadmap" : "Roadmap",
1923
  "satellite" : "Satellite",
1924
+ "thumb_img_type" : "Thumbnail Image Type",
1925
+ "add_nofollow" : "Add Nofollow",
1926
+ "link_custom_attr_desc" : "Setting custom attribute for link. '<strong>attribute = value</strong>' In this way the attribute and its value can be added. Separate key-value pairs using <strong>semicolon ;</strong>.",
1927
+ "link_to" : "Link To",
1928
+ "link_options" : "Link Options",
1929
+ "no_result" : "No results found."
1930
  }
main/ajax.php CHANGED
@@ -1866,6 +1866,8 @@ function pagelayer_export_template(){
1866
 
1867
  }
1868
 
 
 
1869
  }
1870
 
1871
  }
1866
 
1867
  }
1868
 
1869
+ ksort($conf[$type]);
1870
+
1871
  }
1872
 
1873
  }
main/font-options.php CHANGED
@@ -47,7 +47,7 @@ if(!empty($query)){
47
  $pagelayer->fonts['system'] = $pagelayer->system_fonts;
48
 
49
  // Fonts
50
- $pagelayer->fonts['google'] = ['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', 'Bellota', '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', 'Sen', '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'];
51
 
52
  $pagelayer->font_style = ['' => 'Default',
53
  'normal' => 'Normal',
47
  $pagelayer->fonts['system'] = $pagelayer->system_fonts;
48
 
49
  // Fonts
50
+ $pagelayer->fonts['google'] = ['ABeeZee', 'Abel', 'Abhaya Libre', 'Abril Fatface', 'Aclonica', 'Acme', 'Actor', 'Adamina', 'Advent Pro', 'Aguafina Script', 'Akaya Kanadaka', 'Akaya Telivigala', 'Akronim', 'Aladin', 'Alata', 'Alatsi', 'Aldrich', 'Alef', 'Alegreya', 'Alegreya Sans', 'Alegreya Sans SC', 'Alegreya SC', 'Aleo', 'Alex Brush', 'Alfa Slab One', 'Alice', 'Alike', 'Alike Angular', 'Allan', 'Allerta', 'Allerta Stencil', 'Allison', 'Allura', 'Almarai', 'Almendra', 'Almendra Display', 'Almendra SC', 'Alumni Sans', 'Amarante', 'Amaranth', 'Amatic SC', 'Amethysta', 'Amiko', 'Amiri', 'Amita', 'Anaheim', 'Andada Pro', 'Andika', 'Andika New Basic', 'Angkor', 'Annie Use Your Telescope', 'Anonymous Pro', 'Antic', 'Antic Didone', 'Antic Slab', 'Anton', 'Antonio', 'Arapey', 'Arbutus', 'Arbutus Slab', 'Architects Daughter', 'Archivo', 'Archivo Black', 'Archivo Narrow', 'Are You Serious', 'Aref Ruqaa', 'Arima Madurai', 'Arimo', 'Arizonia', 'Armata', 'Arsenal', 'Artifika', 'Arvo', 'Arya', 'Asap', 'Asap Condensed', 'Asar', 'Asset', 'Assistant', 'Astloch', 'Asul', 'Athiti', 'Atkinson Hyperlegible', 'Atma', 'Atomic Age', 'Aubrey', 'Audiowide', 'Autour One', 'Average', 'Average Sans', 'Averia Gruesa Libre', 'Averia Libre', 'Averia Sans Libre', 'Averia Serif Libre', 'Azeret Mono', 'B612', 'B612 Mono', 'Bad Script', 'Bahiana', 'Bahianita', 'Bai Jamjuree', 'Ballet', 'Baloo 2', 'Baloo Bhai 2', 'Baloo Bhaina 2', 'Baloo Chettan 2', 'Baloo Da 2', 'Baloo Paaji 2', 'Baloo Tamma 2', 'Baloo Tammudu 2', 'Baloo Thambi 2', 'Balsamiq Sans', 'Balthazar', 'Bangers', 'Barlow', 'Barlow Condensed', 'Barlow Semi Condensed', 'Barriecito', 'Barrio', 'Basic', 'Baskervville', 'Battambang', 'Baumans', 'Bayon', 'Be Vietnam', 'Be Vietnam Pro', 'Bebas Neue', 'Belgrano', 'Bellefair', 'Belleza', 'Bellota', 'Bellota Text', 'BenchNine', 'Benne', 'Bentham', 'Berkshire Swash', 'Besley', 'Beth Ellen', 'Bevan', 'Big Shoulders Display', 'Big Shoulders Inline Display', 'Big Shoulders Inline Text', 'Big Shoulders Stencil Display', 'Big Shoulders Stencil Text', 'Big Shoulders Text', 'Bigelow Rules', 'Bigshot One', 'Bilbo', 'Bilbo Swash Caps', 'BioRhyme', 'BioRhyme Expanded', 'Birthstone', 'Birthstone Bounce', 'Biryani', 'Bitter', 'Black And White Picture', 'Black Han Sans', 'Black Ops One', 'Blinker', 'Bodoni Moda', 'Bokor', 'Bona Nova', 'Bonbon', 'Bonheur Royale', 'Boogaloo', 'Bowlby One', 'Bowlby One SC', 'Brawler', 'Bree Serif', 'Brygada 1918', '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', 'Caladea', 'Calistoga', 'Calligraffitti', 'Cambay', 'Cambo', 'Candal', 'Cantarell', 'Cantata One', 'Cantora One', 'Capriola', 'Caramel', 'Carattere', 'Cardo', 'Carme', 'Carrois Gothic', 'Carrois Gothic SC', 'Carter One', 'Castoro', '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', 'Cherish', 'Cherry Cream Soda', 'Cherry Swash', 'Chewy', 'Chicle', 'Chilanka', 'Chivo', 'Chonburi', 'Cinzel', 'Cinzel Decorative', 'Clicker Script', 'Coda', 'Coda Caption', 'Codystar', 'Coiny', 'Combo', 'Comfortaa', 'Comic Neue', 'Coming Soon', 'Commissioner', 'Concert One', 'Condiment', 'Content', 'Contrail One', 'Convergence', 'Cookie', 'Copse', 'Corben', 'Cormorant', 'Cormorant Garamond', 'Cormorant Infant', 'Cormorant SC', 'Cormorant Unicase', 'Cormorant Upright', 'Courgette', 'Courier Prime', 'Cousine', 'Coustard', 'Covered By Your Grace', 'Crafty Girls', 'Creepster', 'Crete Round', 'Crimson Pro', 'Crimson Text', 'Croissant One', 'Crushed', 'Cuprum', 'Cute Font', 'Cutive', 'Cutive Mono', 'Damion', 'Dancing Script', 'Dangrek', 'Darker Grotesque', 'David Libre', 'Dawning of a New Day', 'Days One', 'Dekko', 'Dela Gothic One', 'Delius', 'Delius Swash Caps', 'Delius Unicase', 'Della Respira', 'Denk One', 'Devonshire', 'Dhurjati', 'Didact Gothic', 'Diplomata', 'Diplomata SC', 'DM Mono', 'DM Sans', 'DM Serif Display', 'DM Serif Text', 'Do Hyeon', 'Dokdo', 'Domine', 'Donegal One', 'Doppio One', 'Dorsa', 'Dosis', 'DotGothic16', 'Dr Sugiyama', 'Duru Sans', 'Dynalight', 'Eagle Lake', 'East Sea Dokdo', 'Eater', 'EB Garamond', 'Economica', 'Eczar', 'El Messiri', 'Electrolize', 'Elsie', 'Elsie Swash Caps', 'Emblema One', 'Emilys Candy', 'Encode Sans', 'Encode Sans Condensed', 'Encode Sans Expanded', 'Encode Sans SC', 'Encode Sans Semi Condensed', 'Encode Sans Semi Expanded', 'Engagement', 'Englebert', 'Enriqueta', 'Ephesis', 'Epilogue', 'Erica One', 'Esteban', 'Euphoria Script', 'Ewert', 'Exo', 'Exo 2', 'Expletus Sans', 'Explora', 'Fahkwang', 'Fanwood Text', 'Farro', 'Farsan', 'Fascinate', 'Fascinate Inline', 'Faster One', 'Fasthand', 'Fauna One', 'Faustina', 'Federant', 'Federo', 'Felipa', 'Fenix', 'Festive', 'Finger Paint', 'Fira Code', 'Fira Mono', 'Fira Sans', 'Fira Sans Condensed', 'Fira Sans Extra Condensed', 'Fjalla One', 'Fjord One', 'Flamenco', 'Flavors', 'Fleur De Leah', 'Fondamento', 'Fontdiner Swanky', 'Forum', 'Francois One', 'Frank Ruhl Libre', 'Fraunces', 'Freckle Face', 'Fredericka the Great', 'Fredoka One', 'Freehand', 'Fresca', 'Frijole', 'Fruktur', 'Fugaz One', 'Fuggles', 'Gabriela', 'Gaegu', 'Gafata', 'Galada', 'Galdeano', 'Galindo', 'Gamja Flower', 'Gayathri', 'Gelasio', 'Gemunu Libre', 'Gentium Basic', 'Gentium Book Basic', 'Geo', 'Georama', 'Geostar', 'Geostar Fill', 'Germania One', 'GFS Didot', 'GFS Neohellenic', 'Gideon Roman', 'Gidugu', 'Gilda Display', 'Girassol', 'Give You Glory', 'Glass Antiqua', 'Glegoo', 'Gloria Hallelujah', 'Glory', 'Gluten', 'Goblin One', 'Gochi Hand', 'Goldman', 'Gorditas', 'Gothic A1', 'Gotu', 'Goudy Bookletter 1911', 'Gowun Batang', 'Gowun Dodum', 'Graduate', 'Grand Hotel', 'Grandstander', 'Gravitas One', 'Great Vibes', 'Grechen Fuemen', 'Grenze', 'Grenze Gotisch', 'Grey Qo', 'Griffy', 'Gruppo', 'Gudea', 'Gugi', 'Gupter', 'Gurajada', 'Habibi', 'Hachi Maru Pop', 'Hahmlet', 'Halant', 'Hammersmith One', 'Hanalei', 'Hanalei Fill', 'Handlee', 'Hanuman', 'Happy Monkey', 'Harmattan', 'Headland One', 'Heebo', 'Henny Penny', 'Hepta Slab', 'Herr Von Muellerhoff', 'Hi Melody', 'Hina Mincho', 'Hind', 'Hind Guntur', 'Hind Madurai', 'Hind Siliguri', 'Hind Vadodara', 'Holtwood One SC', 'Homemade Apple', 'Homenaje', 'Ibarra Real Nova', 'IBM Plex Mono', 'IBM Plex Sans', 'IBM Plex Sans Arabic', 'IBM Plex Sans Condensed', 'IBM Plex Sans Devanagari', 'IBM Plex Sans Hebrew', 'IBM Plex Sans KR', 'IBM Plex Sans Thai', 'IBM Plex Sans Thai Looped', 'IBM Plex Serif', 'Iceberg', 'Iceland', 'IM Fell Double Pica', 'IM Fell Double Pica SC', 'IM Fell DW Pica', 'IM Fell DW 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', 'Imbue', 'Imprima', 'Inconsolata', 'Inder', 'Indie Flower', 'Inika', 'Inknut Antiqua', 'Inria Sans', 'Inria Serif', 'Inter', 'Irish Grover', 'Istok Web', 'Italiana', 'Italianno', 'Itim', 'Jacques Francois', 'Jacques Francois Shadow', 'Jaldi', 'JetBrains Mono', 'Jim Nightshade', 'Jockey One', 'Jolly Lodger', 'Jomhuria', 'Jomolhari', 'Josefin Sans', 'Josefin Slab', 'Jost', 'Joti One', 'Jua', 'Judson', 'Julee', 'Julius Sans One', 'Junge', 'Jura', 'Just Another Hand', 'Just Me Again Down Here', 'K2D', 'Kadwa', 'Kaisei Decol', 'Kaisei HarunoUmi', 'Kaisei Opti', 'Kaisei Tokumin', 'Kalam', 'Kameron', 'Kanit', 'Kantumruy', 'Karantina', 'Karla', 'Karma', 'Katibeh', 'Kaushan Script', 'Kavivanar', 'Kavoon', 'Kdam Thmor', 'Keania One', 'Kelly Slab', 'Kenia', 'Khand', 'Khmer', 'Khula', 'Kirang Haerang', 'Kite One', 'Kiwi Maru', 'Klee One', 'Knewave', 'Kodchasan', 'Koh Santepheap', 'KoHo', 'Kosugi', 'Kosugi Maru', 'Kotta One', 'Koulen', 'Kranky', 'Kreon', 'Kristi', 'Krona One', 'Krub', 'Kufam', 'Kulim Park', 'Kumar One', 'Kumar One Outline', 'Kumbh Sans', 'Kurale', 'La Belle Aurore', 'Lacquer', 'Laila', 'Lakki Reddy', 'Lalezar', 'Lancelot', 'Langar', 'Lateef', 'Lato', 'League Script', 'Leckerli One', 'Ledger', 'Lekton', 'Lemon', 'Lemonada', 'Lexend', 'Lexend Deca', 'Lexend Exa', 'Lexend Giga', 'Lexend Mega', 'Lexend Peta', 'Lexend Tera', 'Lexend Zetta', 'Libre Barcode 128', 'Libre Barcode 128 Text', 'Libre Barcode 39', 'Libre Barcode 39 Extended', 'Libre Barcode 39 Extended Text', 'Libre Barcode 39 Text', 'Libre Barcode EAN13 Text', 'Libre Baskerville', 'Libre Caslon Display', 'Libre Caslon Text', 'Libre Franklin', 'Life Savers', 'Lilita One', 'Lily Script One', 'Limelight', 'Linden Hill', 'Literata', 'Liu Jian Mao Cao', 'Livvic', 'Lobster', 'Lobster Two', 'Londrina Outline', 'Londrina Shadow', 'Londrina Sketch', 'Londrina Solid', 'Long Cang', 'Lora', 'Love Ya Like A Sister', 'Loved by the King', 'Lovers Quarrel', 'Luckiest Guy', 'Lusitana', 'Lustria', 'M PLUS 1p', 'M PLUS Rounded 1c', 'Ma Shan Zheng', 'Macondo', 'Macondo Swash Caps', 'Mada', 'Magra', 'Maiden Orange', 'Maitree', 'Major Mono Display', 'Mako', 'Mali', 'Mallanna', 'Mandali', 'Manjari', 'Manrope', 'Mansalva', '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', 'MonteCarlo', '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', 'Mulish', 'MuseoModerno', 'Mystery Quest', 'Nanum Brush Script', 'Nanum Gothic', 'Nanum Gothic Coding', 'Nanum Myeongjo', 'Nanum Pen Script', 'Nerko One', 'Neucha', 'Neuton', 'New Rocker', 'New Tegomin', 'News Cycle', 'Newsreader', 'Niconne', 'Niramit', 'Nixie One', 'Nobile', 'Nokora', 'Norican', 'Nosifer', 'Notable', 'Nothing You Could Do', 'Noticia Text', 'Noto Kufi Arabic', 'Noto Music', 'Noto Naskh Arabic', 'Noto Nastaliq Urdu', 'Noto Rashi Hebrew', 'Noto Sans', 'Noto Sans Adlam', 'Noto Sans Adlam Unjoined', 'Noto Sans Anatolian Hieroglyphs', 'Noto Sans Arabic', 'Noto Sans Armenian', 'Noto Sans Avestan', 'Noto Sans Balinese', 'Noto Sans Bamum', 'Noto Sans Bassa Vah', 'Noto Sans Batak', 'Noto Sans Bengali', 'Noto Sans Bhaiksuki', 'Noto Sans Brahmi', 'Noto Sans Buginese', 'Noto Sans Buhid', 'Noto Sans Canadian Aboriginal', 'Noto Sans Carian', 'Noto Sans Caucasian Albanian', 'Noto Sans Chakma', 'Noto Sans Cham', 'Noto Sans Cherokee', 'Noto Sans Coptic', 'Noto Sans Cuneiform', 'Noto Sans Cypriot', 'Noto Sans Deseret', 'Noto Sans Devanagari', 'Noto Sans Display', 'Noto Sans Duployan', 'Noto Sans Egyptian Hieroglyphs', 'Noto Sans Elbasan', 'Noto Sans Elymaic', 'Noto Sans Georgian', 'Noto Sans Glagolitic', 'Noto Sans Gothic', 'Noto Sans Grantha', 'Noto Sans Gujarati', 'Noto Sans Gunjala Gondi', 'Noto Sans Gurmukhi', 'Noto Sans Hanifi Rohingya', 'Noto Sans Hanunoo', 'Noto Sans Hatran', 'Noto Sans Hebrew', 'Noto Sans Hong Kong', 'Noto Sans Imperial Aramaic', 'Noto Sans Indic Siyaq Numbers', 'Noto Sans Inscriptional Pahlavi', 'Noto Sans Inscriptional Parthian', 'Noto Sans Japanese', 'Noto Sans Javanese', 'Noto Sans Kaithi', 'Noto Sans Kannada', 'Noto Sans Kayah Li', 'Noto Sans Kharoshthi', 'Noto Sans Khmer', 'Noto Sans Khojki', 'Noto Sans Khudawadi', 'Noto Sans Korean', 'Noto Sans Lao', 'Noto Sans Lepcha', 'Noto Sans Limbu', 'Noto Sans Linear A', 'Noto Sans Linear B', 'Noto Sans Lisu', 'Noto Sans Lycian', 'Noto Sans Lydian', 'Noto Sans Mahajani', 'Noto Sans Malayalam', 'Noto Sans Mandaic', 'Noto Sans Manichaean', 'Noto Sans Marchen', 'Noto Sans Masaram Gondi', 'Noto Sans Math', 'Noto Sans Mayan Numerals', 'Noto Sans Medefaidrin', 'Noto Sans Meroitic', 'Noto Sans Miao', 'Noto Sans Modi', 'Noto Sans Mongolian', 'Noto Sans Mono', 'Noto Sans Mro', 'Noto Sans Multani', 'Noto Sans Myanmar', 'Noto Sans Nabataean', 'Noto Sans New Tai Lue', 'Noto Sans Newa', 'Noto Sans Nüshu', 'Noto Sans Ogham', 'Noto Sans Ol Chiki', 'Noto Sans Old Hungarian', 'Noto Sans Old Italic', 'Noto Sans Old North Arabian', 'Noto Sans Old Permic', 'Noto Sans Old Persian', 'Noto Sans Old Sogdian', 'Noto Sans Old South Arabian', 'Noto Sans Old Turkic', 'Noto Sans Oriya', 'Noto Sans Osage', 'Noto Sans Osmanya', 'Noto Sans Pahawh Hmong', 'Noto Sans Palmyrene', 'Noto Sans Pau Cin Hau', 'Noto Sans Phags Pa', 'Noto Sans Phoenician', 'Noto Sans Psalter Pahlavi', 'Noto Sans Rejang', 'Noto Sans Runic', 'Noto Sans Samaritan', 'Noto Sans Saurashtra', 'Noto Sans Sharada', 'Noto Sans Shavian', 'Noto Sans Siddham', 'Noto Sans Simplified Chinese', 'Noto Sans Sinhala', 'Noto Sans Sogdian', 'Noto Sans Sora Sompeng', 'Noto Sans Soyombo', 'Noto Sans Sundanese', 'Noto Sans Syloti Nagri', 'Noto Sans Symbols', 'Noto Sans Symbols 2', 'Noto Sans Syriac', 'Noto Sans Tagalog', 'Noto Sans Tagbanwa', 'Noto Sans Tai Le', 'Noto Sans Tai Tham', 'Noto Sans Tai Viet', 'Noto Sans Takri', 'Noto Sans Tamil', 'Noto Sans Tamil Supplement', 'Noto Sans Telugu', 'Noto Sans Thaana', 'Noto Sans Thai', 'Noto Sans Thai Looped', 'Noto Sans Tifinagh', 'Noto Sans Tirhuta', 'Noto Sans Traditional Chinese', 'Noto Sans Ugaritic', 'Noto Sans Vai', 'Noto Sans Wancho', 'Noto Sans Warang Citi', 'Noto Sans Yi', 'Noto Sans Zanabazar Square', 'Noto Serif', 'Noto Serif Ahom', 'Noto Serif Armenian', 'Noto Serif Balinese', 'Noto Serif Bengali', 'Noto Serif Devanagari', 'Noto Serif Display', 'Noto Serif Dogra', 'Noto Serif Ethiopic', 'Noto Serif Georgian', 'Noto Serif Grantha', 'Noto Serif Gujarati', 'Noto Serif Gurmukhi', 'Noto Serif Hebrew', 'Noto Serif Japanese', 'Noto Serif Kannada', 'Noto Serif Khmer', 'Noto Serif KR', 'Noto Serif Lao', 'Noto Serif Malayalam', 'Noto Serif Myanmar', 'Noto Serif Nyiakeng Puachue Hmong', 'Noto Serif Simplified Chinese', 'Noto Serif Sinhala', 'Noto Serif Tamil', 'Noto Serif Tangut', 'Noto Serif Telugu', 'Noto Serif Thai', 'Noto Serif Tibetan', 'Noto Serif Traditional Chinese', 'Noto Serif Yezidi', 'Noto Traditional Nüshu', 'Nova Cut', 'Nova Flat', 'Nova Mono', 'Nova Oval', 'Nova Round', 'Nova Script', 'Nova Slim', 'Nova Square', 'NTR', 'Numans', 'Nunito', 'Nunito Sans', 'Odibee Sans', 'Odor Mean Chey', 'Offside', 'Oi', 'Old Standard TT', 'Oldenburg', 'Oleo Script', 'Oleo Script Swash Caps', 'Open Sans', 'Open Sans Condensed', 'Oranienbaum', 'Orbitron', 'Oregano', 'Orelega One', 'Orienta', 'Original Surfer', 'Oswald', 'Otomanopee One', 'Over the Rainbow', 'Overlock', 'Overlock SC', 'Overpass', 'Overpass Mono', 'Ovo', 'Oxanium', 'Oxygen', 'Oxygen Mono', 'Pacifico', 'Padauk', 'Palanquin', 'Palanquin Dark', 'Palette Mosaic', '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', 'Piazzolla', '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', 'Potta One', 'Pragati Narrow', 'Prata', 'Preahvihear', 'Press Start 2P', 'Pridi', 'Princess Sofia', 'Prociono', 'Prompt', 'Prosto One', 'Proza Libre', 'PT Mono', 'PT Sans', 'PT Sans Caption', 'PT Sans Narrow', 'PT Serif', 'PT Serif Caption', 'Public Sans', 'Puritan', 'Purple Purse', 'Qahiri', 'Quando', 'Quantico', 'Quattrocento', 'Quattrocento Sans', 'Questrial', 'Quicksand', 'Quintessential', 'Qwigley', 'Racing Sans One', 'Radley', 'Rajdhani', 'Rakkas', 'Raleway', 'Raleway Dots', 'Ramabhadra', 'Ramaraja', 'Rambla', 'Rammetto One', 'Rampart One', 'Ranchers', 'Rancho', 'Ranga', 'Rasa', 'Rationale', 'Ravi Prakash', 'Recursive', 'Red Hat Display', 'Red Hat Text', 'Red Rose', 'Redressed', 'Reem Kufi', 'Reenie Beanie', 'Reggae One', 'Revalia', 'Rhodium Libre', 'Ribeye', 'Ribeye Marrow', 'Righteous', 'Risque', 'Roboto', 'Roboto Condensed', 'Roboto Mono', 'Roboto Slab', 'Rochester', 'Rock Salt', 'RocknRoll One', 'Rokkitt', 'Romanesco', 'Ropa Sans', 'Rosario', 'Rosarivo', 'Rouge Script', 'Rowdies', 'Rozha One', 'Rubik', 'Rubik Beastly', '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', 'Saira Stencil One', 'Salsa', 'Sanchez', 'Sancreek', 'Sansita', 'Sansita Swashed', 'Sarabun', 'Sarala', 'Sarina', 'Sarpanch', 'Satisfy', 'Sawarabi Gothic', 'Sawarabi Mincho', 'Scada', 'Scheherazade', 'Scheherazade New', 'Schoolbell', 'Scope One', 'Seaweed Script', 'Secular One', 'Sedgwick Ave', 'Sedgwick Ave Display', 'Sen', 'Sevillana', 'Seymour One', 'Shadows Into Light', 'Shadows Into Light Two', 'Shanti', 'Share', 'Share Tech', 'Share Tech Mono', 'Shippori Mincho', 'Shippori Mincho B1', 'Shojumaru', 'Short Stack', 'Shrikhand', 'Siemreap', 'Sigmar One', 'Signika', 'Signika Negative', 'Simonetta', 'Single Day', 'Sintony', 'Sirin Stencil', 'Six Caps', 'Skranji', 'Slabo 13px', 'Slabo 27px', 'Slackey', 'Smokum', 'Smythe', 'Sniglet', 'Snippet', 'Snowburst One', 'Sofadi One', 'Sofia', 'Solway', 'Song Myung', 'Sonsie One', 'Sora', 'Sorts Mill Goudy', 'Source Code Pro', 'Source Sans Pro', 'Source Serif Pro', 'Space Grotesk', 'Space Mono', 'Spartan', 'Special Elite', 'Spectral', 'Spectral SC', 'Spicy Rice', 'Spinnaker', 'Spirax', 'Squada One', 'Sree Krushnadevaraya', 'Sriracha', 'Srisakdi', 'Staatliches', 'Stalemate', 'Stalinist One', 'Stardos Stencil', 'Stick', 'Stick No Bills', 'Stint Ultra Condensed', 'Stint Ultra Expanded', 'STIX Two Text', 'Stoke', 'Strait', 'Style Script', 'Stylish', 'Sue Ellen Francisco', 'Suez One', 'Sulphur Point', 'Sumana', 'Sunflower', 'Sunshiney', 'Supermercado One', 'Sura', 'Suranna', 'Suravaram', 'Suwannaphum', 'Swanky and Moo Moo', 'Syncopate', 'Syne', 'Syne Mono', 'Syne Tactile', 'Tajawal', 'Tangerine', 'Taprom', 'Tauri', 'Taviraj', 'Teko', 'Telex', 'Tenali Ramakrishna', 'Tenor Sans', 'Text Me One', 'Texturina', 'Thasadith', 'The Girl Next Door', 'Tienne', 'Tillana', 'Timmana', 'Tinos', 'Titan One', 'Titillium Web', 'Tomorrow', 'Tourney', 'Trade Winds', 'Train One', 'Trirong', 'Trispace', 'Trocchi', 'Trochut', 'Truculenta', 'Trykker', 'Tulpen One', 'Turret Road', 'Ubuntu', 'Ubuntu Condensed', 'Ubuntu Mono', 'Uchen', 'Ultra', 'Uncial Antiqua', 'Underdog', 'Unica One', 'UnifrakturCook', 'UnifrakturMaguntia', 'Unkempt', 'Unlock', 'Unna', 'Urbanist', 'Vampiro One', 'Varela', 'Varela Round', 'Varta', 'Vast Shadow', 'Vesper Libre', 'Viaoda Libre', 'Vibes', 'Vibur', 'Vidaloka', 'Viga', 'Voces', 'Volkhov', 'Vollkorn', 'Vollkorn SC', 'Voltaire', 'VT323', 'Waiting for the Sunrise', 'Wallpoet', 'Walter Turncoat', 'Warnes', 'Wellfleet', 'Wendy One', 'WindSong', 'Wire One', 'Work Sans', 'Xanh Mono', 'Yaldevi', 'Yanone Kaffeesatz', 'Yantramanav', 'Yatra One', 'Yellowtail', 'Yeon Sung', 'Yeseva One', 'Yesteryear', 'Yomogi', 'Yrsa', 'Yusei Magic', 'ZCOOL KuaiLe', 'ZCOOL QingKe HuangYou', 'ZCOOL XiaoWei', 'Zen Dots', 'Zen Loop', 'Zen Tokyo Zoo', 'Zeyada', 'Zhi Mang Xing', 'Zilla Slab', 'Zilla Slab Highlight'];
51
 
52
  $pagelayer->font_style = ['' => 'Default',
53
  'normal' => 'Normal',
main/functions.php CHANGED
@@ -1635,7 +1635,7 @@ function pagelayer_posts($params, $args = []){
1635
  $data = '';
1636
 
1637
  if(!$postsquery->have_posts()){
1638
- return '<h3>Something went wrong, Please give proper inputs!</h3>';
1639
  }
1640
 
1641
  while($postsquery->have_posts()) : $postsquery->the_post();
@@ -2274,17 +2274,36 @@ function pagelayer_export_media($parsed){
2274
  continue;
2275
  }
2276
 
2277
- // Is it our default image ?
2278
- if(preg_match('/pagelayer-pro\/images\/default-image.png$/is', $v['attrs'][$kk])){
2279
- $parsed[$k]['attrs'][$kk] = '';
2280
- continue;
2281
- }
2282
 
2283
- if(!is_numeric($v['attrs'][$kk]) && !preg_match('/^((\d*)(,?))*$/is', $v['attrs'][$kk])){
2284
- continue;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2285
  }
2286
 
2287
- $ids = pagelayer_maybe_explode(',', $v['attrs'][$kk]);
2288
  $ret = [];
2289
 
2290
  foreach($ids as $id){
@@ -2299,8 +2318,8 @@ function pagelayer_export_media($parsed){
2299
  $ret[] = $exp_img_url;
2300
 
2301
  }
2302
-
2303
- $parsed[$k]['attrs'][$kk] = implode(',', $ret);
2304
  //echo $tag;echo '-'.$kk;r_print($parsed[$k]['attrs']);die();
2305
  }
2306
 
1635
  $data = '';
1636
 
1637
  if(!$postsquery->have_posts()){
1638
+ return '<h3>No posts found!</h3>';
1639
  }
1640
 
1641
  while($postsquery->have_posts()) : $postsquery->the_post();
2274
  continue;
2275
  }
2276
 
2277
+ $is_array = 0;
 
 
 
 
2278
 
2279
+ // Is it of the format 1,2,3
2280
+ if(preg_match('/^((\d*)(,?))*$/is', $v['attrs'][$kk])){
2281
+
2282
+ $ids = pagelayer_maybe_explode(',', $v['attrs'][$kk]);
2283
+
2284
+ // Is it an array
2285
+ }elseif(is_array($v['attrs'][$kk])){
2286
+
2287
+ $ids = $v['attrs'][$kk];
2288
+ $is_array = 1;
2289
+
2290
+ // Its a number or string
2291
+ }else{
2292
+
2293
+ // Is it our default image ?
2294
+ if(preg_match('/pagelayer-pro\/images\/default-image.png$/is', $v['attrs'][$kk])){
2295
+ $parsed[$k]['attrs'][$kk] = '';
2296
+ continue;
2297
+ }
2298
+
2299
+ // It should be a number
2300
+ if(!is_numeric($v['attrs'][$kk])){
2301
+ continue;
2302
+ }
2303
+
2304
+ $ids = [$v['attrs'][$kk]];
2305
  }
2306
 
 
2307
  $ret = [];
2308
 
2309
  foreach($ids as $id){
2318
  $ret[] = $exp_img_url;
2319
 
2320
  }
2321
+
2322
+ $parsed[$k]['attrs'][$kk] = $is_array ? $ret : implode(',', $ret);
2323
  //echo $tag;echo '-'.$kk;r_print($parsed[$k]['attrs']);die();
2324
  }
2325
 
main/import.php CHANGED
@@ -449,7 +449,7 @@ global $pagelayer, $pl_error, $sitepad;
449
  //die($pagelayer_theme_path);
450
 
451
  // Delete Old Data ?
452
- if(isset($_POST['delete_old_import']) && !isset($_POST['maintain_ids'])){
453
  $args = array(
454
  'post_type' => ['page', 'post', $pagelayer->builder['name']],
455
  'meta_query' => array(
@@ -638,7 +638,7 @@ global $pagelayer, $pl_error, $sitepad;
638
  if(empty($_POST['no_header_menu'])){
639
 
640
  // Is there any MENU in this theme ?
641
- if(empty($data['menus'])){
642
  $menu_id = pagelayer_import_create_menu($template_name.' Header Menu');
643
  }else{
644
 
@@ -844,7 +844,7 @@ global $pagelayer, $pl_error, $sitepad;
844
  $new_post['post_type'] = $data_type;
845
  $new_post['post_status'] = 'publish';
846
 
847
- if(isset($_POST['maintain_ids'])){
848
  $new_post['import_id'] = $v['ID'];
849
  }
850
 
449
  //die($pagelayer_theme_path);
450
 
451
  // Delete Old Data ?
452
+ if(isset($_POST['delete_old_import'])){
453
  $args = array(
454
  'post_type' => ['page', 'post', $pagelayer->builder['name']],
455
  'meta_query' => array(
638
  if(empty($_POST['no_header_menu'])){
639
 
640
  // Is there any MENU in this theme ?
641
+ if(empty($data['menus'])){
642
  $menu_id = pagelayer_import_create_menu($template_name.' Header Menu');
643
  }else{
644
 
844
  $new_post['post_type'] = $data_type;
845
  $new_post['post_status'] = 'publish';
846
 
847
+ if(isset($_POST['maintain_ids']) && empty($new_post['ID'])){
848
  $new_post['import_id'] = $v['ID'];
849
  }
850
 
main/live.php CHANGED
@@ -166,6 +166,8 @@ pagelayer_ajax_post_data = {};';
166
  if(empty($pagelayer->settings['enable_giver'])){
167
  echo '
168
  jQuery(document).ready(function(){
 
 
169
  return jQuery.ajax({
170
  url: "'.PAGELAYER_JS.'/givejs.php?test=1",
171
  type: "GET",
@@ -173,15 +175,18 @@ jQuery(document).ready(function(){
173
  success:function(data){
174
 
175
  if(data !== "1"){
176
- data = -1;
177
  }
178
 
 
 
 
179
  jQuery.ajax({
180
  type: "POST",
181
  url: pagelayer_ajax_url+"&action=pagelayer_set_jscss_giver",
182
  data: {
183
  pagelayer_nonce: pagelayer_ajax_nonce,
184
- set : data
185
  },
186
  error: function(errorThrown){
187
  console.log("Error saving giver data");
166
  if(empty($pagelayer->settings['enable_giver'])){
167
  echo '
168
  jQuery(document).ready(function(){
169
+ var test_giver = -1;
170
+
171
  return jQuery.ajax({
172
  url: "'.PAGELAYER_JS.'/givejs.php?test=1",
173
  type: "GET",
175
  success:function(data){
176
 
177
  if(data !== "1"){
178
+ return;
179
  }
180
 
181
+ test_giver = 1;
182
+ },
183
+ complete:function(data){
184
  jQuery.ajax({
185
  type: "POST",
186
  url: pagelayer_ajax_url+"&action=pagelayer_set_jscss_giver",
187
  data: {
188
  pagelayer_nonce: pagelayer_ajax_nonce,
189
+ set : test_giver
190
  },
191
  error: function(errorThrown){
192
  console.log("Error saving giver data");
main/settings.php CHANGED
@@ -471,6 +471,17 @@ function pagelayer_settings_page(){
471
  // Dark Mode
472
  $enable_dark_mode = get_option('pagelayer_enable_dark_mode');
473
 
 
 
 
 
 
 
 
 
 
 
 
474
  // Saved ?
475
  if(!empty($done)){
476
  echo '<div class="notice notice-success"><p>'. __('The settings were saved successfully', 'pagelayer'). '</p></div><br />';
@@ -545,6 +556,14 @@ function pagelayer_settings_page(){
545
  </label>
546
  </td>
547
  </tr>
 
 
 
 
 
 
 
 
548
  </table>
549
  </div>
550
  <div class="pagelayer-tab-panel" id="icons">
471
  // Dark Mode
472
  $enable_dark_mode = get_option('pagelayer_enable_dark_mode');
473
 
474
+ // Enable JS/CSS Giver
475
+ if(isset($_POST['submit']) || isset($_POST['pagelayer_enable_jscss_giver'])){
476
+ $done = 1;
477
+ $enable_jscss_giver = empty($_REQUEST['pagelayer_enable_jscss_giver']) ? -1 : 1;
478
+
479
+ update_option( 'pagelayer_enable_giver', $enable_jscss_giver );
480
+ }
481
+
482
+ // Enable JS/CSS Giver
483
+ $enable_jscss_giver = get_option('pagelayer_enable_giver');
484
+
485
  // Saved ?
486
  if(!empty($done)){
487
  echo '<div class="notice notice-success"><p>'. __('The settings were saved successfully', 'pagelayer'). '</p></div><br />';
556
  </label>
557
  </td>
558
  </tr>
559
+ <tr>
560
+ <th scope="row"><?php _e('Enable JS/CSS Giver');?></th>
561
+ <td>
562
+ <label>
563
+ <input type="checkbox" name="pagelayer_enable_jscss_giver" <?php echo ((!empty($enable_jscss_giver) && $enable_jscss_giver == 1) ? 'checked' : '');?> /><?php _e('Enable JS/CSS Giver') ?></br>
564
+ </label>
565
+ </td>
566
+ </tr>
567
  </table>
568
  </div>
569
  <div class="pagelayer-tab-panel" id="icons">
main/shortcode_functions.php CHANGED
@@ -303,7 +303,41 @@ function pagelayer_render_shortcode($atts, $content = '', $tag = '', $inner_bloc
303
 
304
  // Load permalink values
305
  if($param['type'] == 'link'){
306
- $el['tmp'][$prop] = pagelayer_permalink($el['atts'][$prop]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
  }
308
 
309
  // Handle the AddClasses
@@ -611,12 +645,11 @@ function pagelayer_render_shortcode($atts, $content = '', $tag = '', $inner_bloc
611
 
612
  // Adding Custom Attributes
613
  if(!empty($el['atts']['ele_attributes'])){
614
-
615
- $val = explode(';', $el['atts']['ele_attributes']);
616
- foreach($val as $value){
617
- if(strpos($value, '=')){
618
- $att = explode('=', $value);
619
- $node->query($el['selector'])->attr($att[0], $att[1]);
620
  }
621
  }
622
 
@@ -1022,8 +1055,45 @@ function pagelayer_bg_video(&$el){
1022
  }
1023
  }
1024
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1025
  // Image Handler
1026
  function pagelayer_sc_social(&$el){
 
 
 
 
 
 
 
 
1027
  if(empty($el['atts']['icon'])) return;
1028
  $icon = explode(' fa-', $el['atts']['icon']);
1029
  $el['classes'][] = ['.pagelayer-icon-holder' => 'pagelayer-'.$icon[1]];
@@ -1032,6 +1102,11 @@ function pagelayer_sc_social(&$el){
1032
  // Image Handler
1033
  function pagelayer_sc_image(&$el){
1034
 
 
 
 
 
 
1035
  // Decide the image URL
1036
  $el['atts']['func_id'] = @$el['tmp']['id-'.$el['atts']['id-size'].'-url'];
1037
  $el['atts']['func_id'] = empty($el['atts']['func_id']) ? @$el['tmp']['id-url'] : $el['atts']['func_id'];
@@ -1071,6 +1146,11 @@ function pagelayer_sc_image(&$el){
1071
  // Image Slider Handler
1072
  function pagelayer_sc_image_slider(&$el){
1073
 
 
 
 
 
 
1074
  if(empty($el['atts']['ids'])){
1075
  $el['atts']['ids'] = '';
1076
  }
@@ -1103,7 +1183,7 @@ function pagelayer_sc_image_slider(&$el){
1103
  // Any Link ?
1104
  if(!empty($el['atts']['link_type'])){
1105
  $link = ($el['atts']['link_type'] == 'media_file' ? (!empty($image['url']) ? $image['url'] : $final_urls[$v]) : @$el['tmp']['link']);
1106
- $li .= '<a href="'.$link.'">';
1107
  }
1108
 
1109
  // The Image
@@ -1316,6 +1396,30 @@ function pagelayer_sc_wp_widgets(&$el){
1316
  // Service Handler
1317
  function pagelayer_sc_service(&$el){
1318
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1319
  if(!empty($el['atts']['service_image'])){
1320
 
1321
  // Decide the image URL
@@ -1333,6 +1437,27 @@ function pagelayer_sc_service(&$el){
1333
  }
1334
  }
1335
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1336
  function pagelayer_sc_google_maps(&$el){
1337
 
1338
  $el['atts']['show_v2'] = true;
@@ -1410,6 +1535,32 @@ function pagelayer_icon_class_list(){
1410
  return array();
1411
  }
1412
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1413
  // Retina image setting attribute.
1414
  function pagelayer_get_img_srcset(&$el, $image_atts){
1415
 
@@ -1426,4 +1577,55 @@ function pagelayer_get_img_srcset(&$el, $image_atts){
1426
  $retina_image_mobile = empty($retina_image_mobile) ? @$el['tmp'][$image_atts['name'].'-retina-mobile-url'] : $retina_image_mobile;
1427
  $el['atts']['pagelayer-srcset'] .= $retina_image_mobile.' 3x';
1428
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1429
  }
303
 
304
  // Load permalink values
305
  if($param['type'] == 'link'){
306
+
307
+ $link = $el['atts'][$prop];
308
+
309
+ if( is_array($el['atts'][$prop]) ){
310
+
311
+ // Link is required for check IF and IF-EXT in html
312
+ if(!isset($el['atts'][$prop]['link']) || strlen(trim($el['atts'][$prop]['link'])) < 1){
313
+ $link = '';
314
+ unset($el['atts'][$prop]);
315
+ continue;
316
+ }
317
+
318
+ $link = $el['atts'][$prop]['link'];
319
+
320
+ if(!empty($el['atts'][$prop]['target'])){
321
+ $el['attr'][][$param['selector']] = 'target="_blank"';
322
+ }
323
+
324
+ if(!empty($el['atts'][$prop]['rel'])){
325
+ $el['attr'][][$param['selector']] = 'rel="nofollow"';
326
+ }
327
+
328
+ if(!empty($el['atts'][$prop]['attrs'])){
329
+
330
+ $atts_ar = pagelayer_string_to_attributes($el['atts'][$prop]['attrs']);
331
+
332
+ if(!empty($atts_ar)){
333
+ foreach($atts_ar as $att => $value){
334
+ $el['attr'][][$param['selector']] = $att.'="'.$value.'"';
335
+ }
336
+ }
337
+ }
338
+ }
339
+
340
+ $el['tmp'][$prop] = pagelayer_permalink($link);
341
  }
342
 
343
  // Handle the AddClasses
645
 
646
  // Adding Custom Attributes
647
  if(!empty($el['atts']['ele_attributes'])){
648
+
649
+ $val = pagelayer_string_to_attributes($el['atts']['ele_attributes']);
650
+ if(!empty($val)){
651
+ foreach($val as $att => $value ){
652
+ $node->query($el['selector'])->attr($att, $value);
 
653
  }
654
  }
655
 
1055
  }
1056
  }
1057
 
1058
+ // Heading Handler
1059
+ function pagelayer_sc_heading(&$el){
1060
+ //Backward compatibility for new link props
1061
+ pagelayer_add_link_backward($el, array('rel' => '', 'selector' => '.pagelayer-link-sel'));
1062
+ }
1063
+
1064
+ // Heading Handler
1065
+ function pagelayer_sc_icon(&$el){
1066
+ //Backward compatibility for new link props
1067
+ pagelayer_add_link_backward($el, array('rel' => '', 'selector' => '.pagelayer-ele-link'));
1068
+ }
1069
+
1070
+ // Heading Handler
1071
+ function pagelayer_sc_badge(&$el){
1072
+ //Backward compatibility for new link props
1073
+ pagelayer_add_link_backward($el, array(
1074
+ 'link' => 'badge_url',
1075
+ 'rel' => '',
1076
+ 'target' => 'badge_target',
1077
+ 'selector' => '.pagelayer-ele-link'
1078
+ ));
1079
+ }
1080
+
1081
+ // Heading Handler
1082
+ function pagelayer_sc_btn(&$el){
1083
+ //Backward compatibility for new link props
1084
+ pagelayer_add_link_backward($el, array('selector' => '.pagelayer-btn-holder'));
1085
+ }
1086
+
1087
  // Image Handler
1088
  function pagelayer_sc_social(&$el){
1089
+
1090
+ //Backward compatibility for new link props
1091
+ pagelayer_add_link_backward($el, array(
1092
+ 'link' => 'social_url',
1093
+ 'rel' => '',
1094
+ 'selector' => '.pagelayer-ele-link'
1095
+ ));
1096
+
1097
  if(empty($el['atts']['icon'])) return;
1098
  $icon = explode(' fa-', $el['atts']['icon']);
1099
  $el['classes'][] = ['.pagelayer-icon-holder' => 'pagelayer-'.$icon[1]];
1102
  // Image Handler
1103
  function pagelayer_sc_image(&$el){
1104
 
1105
+ // Backward compatibility for new link props
1106
+ if($el['atts']['link_type'] == 'custom_url'){
1107
+ pagelayer_add_link_backward($el, array( 'rel' => '', 'selector' => '.pagelayer-ele-link'));
1108
+ }
1109
+
1110
  // Decide the image URL
1111
  $el['atts']['func_id'] = @$el['tmp']['id-'.$el['atts']['id-size'].'-url'];
1112
  $el['atts']['func_id'] = empty($el['atts']['func_id']) ? @$el['tmp']['id-url'] : $el['atts']['func_id'];
1146
  // Image Slider Handler
1147
  function pagelayer_sc_image_slider(&$el){
1148
 
1149
+ // Backward compatibility for new link props
1150
+ if($el['atts']['link_type'] == 'custom_url'){
1151
+ pagelayer_add_link_backward($el, array( 'rel' => '', 'selector' => '.pagelayer-link-sel'));
1152
+ }
1153
+
1154
  if(empty($el['atts']['ids'])){
1155
  $el['atts']['ids'] = '';
1156
  }
1183
  // Any Link ?
1184
  if(!empty($el['atts']['link_type'])){
1185
  $link = ($el['atts']['link_type'] == 'media_file' ? (!empty($image['url']) ? $image['url'] : $final_urls[$v]) : @$el['tmp']['link']);
1186
+ $li .= '<a href="'.$link.'" class="pagelayer-link-sel">';
1187
  }
1188
 
1189
  // The Image
1396
  // Service Handler
1397
  function pagelayer_sc_service(&$el){
1398
 
1399
+ //Backward compatibility for new link props
1400
+ pagelayer_add_link_backward($el, array(
1401
+ 'link' => 'box_url',
1402
+ 'rel' => '',
1403
+ 'target' => 'box_target',
1404
+ 'selector' => '.pagelayer-box-link'
1405
+ ));
1406
+
1407
+ //Backward compatibility for new link props
1408
+ pagelayer_add_link_backward($el, array(
1409
+ 'link' => 'heading_url',
1410
+ 'rel' => '',
1411
+ 'target' => 'heading_target',
1412
+ 'selector' => '.pagelayer-service-heading-link'
1413
+ ));
1414
+
1415
+ //Backward compatibility for new link props
1416
+ pagelayer_add_link_backward($el, array(
1417
+ 'link' => 'service_button_url',
1418
+ 'rel' => '',
1419
+ 'target' => 'service_button_target',
1420
+ 'selector' => '.pagelayer-service-btn'
1421
+ ));
1422
+
1423
  if(!empty($el['atts']['service_image'])){
1424
 
1425
  // Decide the image URL
1437
  }
1438
  }
1439
 
1440
+ // Icon box Handler
1441
+ function pagelayer_sc_iconbox(&$el){
1442
+
1443
+ //Backward compatibility for new link props
1444
+ pagelayer_add_link_backward($el, array(
1445
+ 'link' => 'box_url',
1446
+ 'rel' => '',
1447
+ 'target' => 'box_target',
1448
+ 'selector' => '.pagelayer-box-link'
1449
+ ));
1450
+
1451
+ //Backward compatibility for new link props
1452
+ pagelayer_add_link_backward($el, array(
1453
+ 'link' => 'heading_url',
1454
+ 'rel' => '',
1455
+ 'target' => 'heading_target',
1456
+ 'selector' => '.pagelayer-service-heading-link',
1457
+ ));
1458
+
1459
+ }
1460
+
1461
  function pagelayer_sc_google_maps(&$el){
1462
 
1463
  $el['atts']['show_v2'] = true;
1535
  return array();
1536
  }
1537
 
1538
+ // Function to convert string into set of attributes and their corresponding values.
1539
+ function pagelayer_string_to_attributes($val){
1540
+
1541
+ $final_att = [];
1542
+ $semi_arr = explode(';', $val);
1543
+
1544
+ foreach($semi_arr as $att){
1545
+
1546
+ $attrs = preg_split("/=/", trim($att), 2);
1547
+
1548
+ if(empty($attrs[0]) || !preg_match("/^[a-z_]+[\w:.-]*$/i", $attrs[0]) ){
1549
+ continue;
1550
+ }
1551
+
1552
+ if(!isset( $attrs[1])){
1553
+ $final_att[$attrs[0]] = '';
1554
+ continue;
1555
+ }
1556
+
1557
+ $final_att[$attrs[0]] = $attrs[1];
1558
+ }
1559
+
1560
+ return $final_att;
1561
+
1562
+ }
1563
+
1564
  // Retina image setting attribute.
1565
  function pagelayer_get_img_srcset(&$el, $image_atts){
1566
 
1577
  $retina_image_mobile = empty($retina_image_mobile) ? @$el['tmp'][$image_atts['name'].'-retina-mobile-url'] : $retina_image_mobile;
1578
  $el['atts']['pagelayer-srcset'] .= $retina_image_mobile.' 3x';
1579
  }
1580
+ }
1581
+
1582
+ // Backward compatibility of target and rel attrs for link
1583
+ function pagelayer_add_link_backward(&$el, $atts = array()){
1584
+ global $pagelayer;
1585
+
1586
+ $defaults = array(
1587
+ 'link' => 'link',
1588
+ 'target' => 'target',
1589
+ 'rel' => 'rel',
1590
+ 'selector' => 0,
1591
+ );
1592
+
1593
+ $_atts = wp_parse_args( $atts, $defaults );
1594
+
1595
+ if(empty($el['atts'][$_atts['link']])){
1596
+ return;
1597
+ }
1598
+
1599
+ $link = array();
1600
+
1601
+ if(!empty($_atts['target']) && !empty($el['atts'][$_atts['target']]) ){
1602
+ $link['target'] = true;
1603
+ unset($el['oAtts'][$_atts['target']]);
1604
+ }
1605
+
1606
+ if(!empty($_atts['rel']) && !empty($el['atts'][$_atts['rel']]) ){
1607
+ $link['attrs'] = 'rel='.$el['atts'][$_atts['rel']];
1608
+ unset($el['oAtts'][$_atts['rel']]);
1609
+ }
1610
+
1611
+ if(empty($link)){
1612
+ return;
1613
+ }
1614
+
1615
+ // Set Attributes for backward compatibility
1616
+ if(!empty($link['target'])){
1617
+ $el['attr'][][$_atts['selector']] = 'target="_blank"';
1618
+ }
1619
+
1620
+ // Set Attributes for backward compatibility
1621
+ if(!empty($link['attrs']) ){
1622
+ $el['attr'][][$_atts['selector']] = $link['attrs'];
1623
+ }
1624
+
1625
+ if(!is_array($el['atts'][$_atts['link']])){
1626
+ $link['link'] = @$el['atts'][$_atts['link']];
1627
+ }
1628
+
1629
+ $el['oAtts'][$_atts['link']] = $link;
1630
+ $el['atts'][$_atts['link']] = $link;
1631
  }
main/shortcodes.php CHANGED
@@ -2861,7 +2861,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_heading', array(
2861
  'name' => __pl('title'),
2862
  'group' => 'text',
2863
  'innerHTML' => 'text',
2864
- 'html' => '<a if-ext="{{link}}" href="{{{link}}}">
2865
  <div if={{text}} class="pagelayer-heading-holder">{{text}}</div>
2866
  </a>',
2867
  'params' => array(
@@ -2874,17 +2874,9 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_heading', array(
2874
  'edit' => '.pagelayer-heading-holder', // Edit the text and also mirror the same
2875
  ),
2876
  'link' => array(
2877
- 'label' => __pl('image_link_label'),
2878
- 'desc' => __pl('image_link_desc'),
2879
  'type' => 'link',
2880
- ),
2881
- 'target' => array(
2882
- 'label' => __pl('open_link_in_new_window'),
2883
- 'type' => 'checkbox',
2884
- 'addAttr' => ['{{element}} a' => 'target="_blank"'],
2885
- 'req' => array(
2886
- '!link' => ''
2887
- )
2888
  ),
2889
  'align' => array(
2890
  'label' => __pl('obj_align_label'),
@@ -2988,7 +2980,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_quote', array(
2988
  <i if="{{double_indent}}" class="fa fa-quote-right"></i>
2989
  </div>
2990
  <div if="{{cite}}" class="pagelayer-quote-cite">
2991
- <a if-ext="{{cite_url}}" href="{{{cite_url}}}">
2992
  <span class="pagelayer-cite-holder">{{cite}}</span>
2993
  </a>
2994
  </div>
@@ -3137,6 +3129,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_quote', array(
3137
  'cite_url' => array(
3138
  'type' => 'link',
3139
  'label' => __pl('quotes_url_label'),
 
3140
  'desc' => __pl('quotes_url_desc'),
3141
  ),
3142
  'cite_text_color' => array(
@@ -3234,6 +3227,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_list_item', array(
3234
  'item_url' => array(
3235
  'type' => 'link',
3236
  'label' => __pl('list_item_url_label'),
 
3237
  ),
3238
  'show_icon' => array(
3239
  'type' => 'checkbox',
@@ -3518,12 +3512,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_icon', array(
3518
  'link' => array(
3519
  'type' => 'link',
3520
  'label' => __pl('icon_link_field_label'),
3521
- 'default' => ''
3522
- ),
3523
- 'target' => array(
3524
- 'type' => 'checkbox',
3525
- 'label' => __pl('open_link_in_new_window'),
3526
- 'addAttr' => ['{{element}} a' => 'target="_blank"']
3527
  ),
3528
  'icon_alignment' => array(
3529
  'type' => 'radio',
@@ -3922,14 +3911,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_badge', array(
3922
  'badge_url' => array(
3923
  'type' => 'link',
3924
  'label' => __pl('badge_url_label'),
3925
- ),
3926
- 'badge_target' => array(
3927
- 'label' => __pl('open_link_in_new_window'),
3928
- 'type' => 'checkbox',
3929
- 'addAttr' => ['{{element}} a' => 'target="_blank"'],
3930
- 'req' => array(
3931
- '!badge_url' => ''
3932
- )
3933
  ),
3934
  'badge_notification_type' => array(
3935
  'type' => 'select',
@@ -4518,8 +4500,8 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_image', array(
4518
  // Image related Styles
4519
  'link_settings' => [
4520
  'link_type' => array(
4521
- 'label' => __pl('image_link_label'),
4522
  'type' => 'select',
 
4523
  'default' => '',
4524
  'list' => array(
4525
  '' => __pl('none'),
@@ -4529,16 +4511,17 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_image', array(
4529
  )
4530
  ),
4531
  'link' => array(
 
4532
  'label' => __pl('image_link_label'),
4533
  'desc' => __pl('image_link_desc'),
4534
- 'type' => 'link',
4535
  'req' => array(
4536
  'link_type' => 'custom_url'
4537
  )
4538
  ),
4539
  'rel' => array(
4540
- 'label' => __pl('image_rel_label'),
4541
  'type' => 'text',
 
4542
  'default' => '',
4543
  'addAttr' => ['{{element}} a' => 'rel="{{rel}}"'],
4544
  'req' => array(
@@ -4551,7 +4534,8 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_image', array(
4551
  'addAttr' => ['{{element}} a' => 'target="_blank"'],
4552
  'req' => array(
4553
  'link_type' => ['custom_url', 'media_file']
4554
- )
 
4555
  ),
4556
  ],
4557
  // Caption related Styles
@@ -4734,9 +4718,10 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_image_slider', array(
4734
  )
4735
  ),
4736
  'link' => array(
 
4737
  'label' => __pl('image_link_url'),
4738
  'desc' => __pl('image_link_desc'),
4739
- 'type' => 'link',
4740
  'req' => array(
4741
  'link_type' => 'custom_url'
4742
  )
@@ -4747,7 +4732,8 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_image_slider', array(
4747
  'addAttr' => ['{{element}} a' => 'target="_blank"'],
4748
  'req' => array(
4749
  'link_type' => ['custom_url', 'media_file']
4750
- )
 
4751
  ),
4752
  'slider_img_gap' => array(
4753
  'type' => 'dimension',
@@ -5019,20 +5005,10 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_btn', array(
5019
  'type' => 'link',
5020
  'label' => __pl('button_link_label'),
5021
  'desc' => __pl('button_link_desc'),
 
5022
  'addAttr' => ['{{element}} .pagelayer-btn-holder' => 'href="{{{link}}}"'],
5023
  'req' => ['ele_scrollto' => '']
5024
  ),
5025
- 'rel' => array(
5026
- 'type' => 'text',
5027
- 'label' => __pl('rel'),
5028
- 'addAttr' => ['{{element}} .pagelayer-btn-holder' => 'rel="{{rel}}"']
5029
- ),
5030
- 'target' => array(
5031
- 'type' => 'checkbox',
5032
- 'label' => __pl('open_link_in_new_window'),
5033
- 'addAttr' => ['{{element}} a' => 'target="_blank"'],
5034
- 'req' => ['ele_scrollto' => '']
5035
- ),
5036
  'full_width' => array(
5037
  'type' => 'checkbox',
5038
  'label' => __pl('stretch'),
@@ -5474,13 +5450,9 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_social', array(
5474
  'social_url' => array(
5475
  'type' => 'link',
5476
  'label' => __pl('social_url_label'),
 
5477
  'default' => get_option('pagelayer-facebook-url'),
5478
  ),
5479
- 'target' => array(
5480
- 'type' => 'checkbox',
5481
- 'label' => __pl('open_link_in_new_window'),
5482
- 'addAttr' => ['{{element}} a' => 'target="_blank"']
5483
- )
5484
  )
5485
  )
5486
  );
@@ -5921,7 +5893,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_service', array(
5921
  <img class="pagelayer-img pagelayer-animation-{{anim_hover}}" src="{{func_image}}" title="{{{service_image-title}}}" alt="{{{service_image-alt}}}" srcset="{{pagelayer-srcset}}" />
5922
  </div>
5923
  <div class="pagelayer-service-details">
5924
- <a if-ext={{heading_url}} href="{{{heading_url}}}" class="pagelayer-ele-link">
5925
  <div if={{service_heading}} class="pagelayer-service-heading">{{service_heading}}</div>
5926
  </a>
5927
  <div if={{service_text}} class="pagelayer-service-text">{{service_text}}</div>
@@ -5961,14 +5933,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_service', array(
5961
  'box_url' => array(
5962
  'type' => 'link',
5963
  'label' => __pl('url'),
5964
- ),
5965
- 'box_target' => array(
5966
- 'label' => __pl('open_link_in_new_window'),
5967
- 'type' => 'checkbox',
5968
- 'addAttr' => ['{{element}} .pagelayer-box-link' => 'target="_blank"'],
5969
- 'req' => array(
5970
- '!box_url' => ''
5971
- )
5972
  ),
5973
  'anim_hover' => array(
5974
  'type' => 'select',
@@ -6212,14 +6177,9 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_service', array(
6212
  'heading_url' => array(
6213
  'type' => 'link',
6214
  'label' => __pl('url'),
 
6215
  'req' => ['!service_heading' => '', 'box_url' => '']
6216
  ),
6217
- 'heading_target' => array(
6218
- 'label' => __pl('open_link_in_new_window'),
6219
- 'type' => 'checkbox',
6220
- 'addAttr' => ['{{element}} .pagelayer-service-details a' => 'target="_blank"'],
6221
- 'req' => [ '!service_heading' => '', 'box_url' => '', '!heading_url' => '']
6222
- ),
6223
  'heading_alignment' => array(
6224
  'type' => 'radio',
6225
  'label' => __pl('service_box_heading_alignment'),
@@ -6380,18 +6340,11 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_service', array(
6380
  'service_button_url' => array(
6381
  'type' => 'link',
6382
  'label' => __pl('service_btn_url_label'),
 
6383
  'req' => array(
6384
  'service_button' => 'true'
6385
  ),
6386
  ),
6387
- 'service_button_target' => array(
6388
- 'label' => __pl('open_link_in_new_window'),
6389
- 'type' => 'checkbox',
6390
- 'addAttr' => ['{{element}} .pagelayer-service-btn' => 'target="_blank"'],
6391
- 'req' => array(
6392
- '!service_button_url' => ''
6393
- )
6394
- ),
6395
  'service_button_text' => array(
6396
  'type' => 'text',
6397
  'label' => __pl('service_button_text_label'),
@@ -6617,7 +6570,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_iconbox', array(
6617
  <i class="{{service_icon}} pagelayer-icon-{{service_icon_shape_type}} pagelayer-animation-{{anim_hover}}" aria-hidden="true"></i>
6618
  </div>
6619
  <div class="pagelayer-service-details">
6620
- <a if-ext={{heading_url}} href="{{{heading_url}}}" class="pagelayer-ele-link">
6621
  <div if="{{service_heading}}" class="pagelayer-service-heading">{{service_heading}}</div>
6622
  </a>
6623
  <div if="{{service_text}}" class="pagelayer-service-text">{{service_text}}</div>
@@ -6670,14 +6623,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_iconbox', array(
6670
  'box_url' => array(
6671
  'type' => 'link',
6672
  'label' => __pl('url'),
6673
- ),
6674
- 'box_target' => array(
6675
- 'label' => __pl('open_link_in_new_window'),
6676
- 'type' => 'checkbox',
6677
- 'addAttr' => ['{{element}} .pagelayer-box-link' => 'target="_blank"'],
6678
- 'req' => array(
6679
- '!box_url' => ''
6680
- )
6681
  ),
6682
  ),
6683
  // icon style
@@ -6949,14 +6895,9 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_iconbox', array(
6949
  'heading_url' => array(
6950
  'type' => 'link',
6951
  'label' => __pl('url'),
 
6952
  'req' => ['!service_heading' => '', 'box_url' => '']
6953
  ),
6954
- 'heading_target' => array(
6955
- 'label' => __pl('open_link_in_new_window'),
6956
- 'type' => 'checkbox',
6957
- 'addAttr' => ['{{element}} .pagelayer-service-details a' => 'target="_blank"'],
6958
- 'req' => [ '!service_heading' => '', 'box_url' => '', '!heading_url' => '']
6959
- ),
6960
  'heading_alignment' => array(
6961
  'type' => 'radio',
6962
  'label' => __pl('service_box_heading_alignment'),
@@ -7110,6 +7051,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_iconbox', array(
7110
  'service_button_url' => array(
7111
  'type' => 'link',
7112
  'label' => __pl('iconbox_btn_url_label'),
 
7113
  'req' => ['service_button' => 'true']
7114
  ),
7115
  'service_button_text' => array(
@@ -8147,6 +8089,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_google_maps', array(
8147
  'ferries' => __pl('ferries'),
8148
  'highways' => __pl('highways'),
8149
  ),
 
8150
  'req' => [
8151
  'api_version' => 'v3',
8152
  'map_modes' => 'directions'
@@ -8421,6 +8364,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_testimonial', array(
8421
  'cite_url' => array(
8422
  'type' => 'link',
8423
  'label' => __pl('testimonial_url_label'),
 
8424
  'desc' => __pl('testimonial_url_desc'),
8425
  ),
8426
  'cite_spacing' => array(
@@ -8603,7 +8547,6 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_progress', array(
8603
  'label' => __pl('percentage'),
8604
  'min' => 0,
8605
  'max' => 100,
8606
- 'screen' => 1,
8607
  'css' => ['{{element}} .pagelayer-progress-container > .pagelayer-progress-bar:after' => 'width:{{val}}%;',],
8608
  'addAttr' => ['{{element}} .pagelayer-progress-bar' => 'pagelayer-progress-width="{{progress_percentage}}"'],
8609
  'default' => 75,
2861
  'name' => __pl('title'),
2862
  'group' => 'text',
2863
  'innerHTML' => 'text',
2864
+ 'html' => '<a if-ext="{{link}}" href="{{{link}}}" class="pagelayer-link-sel">
2865
  <div if={{text}} class="pagelayer-heading-holder">{{text}}</div>
2866
  </a>',
2867
  'params' => array(
2874
  'edit' => '.pagelayer-heading-holder', // Edit the text and also mirror the same
2875
  ),
2876
  'link' => array(
 
 
2877
  'type' => 'link',
2878
+ 'label' => __pl('image_link_label'),
2879
+ 'selector' => '.pagelayer-link-sel'
 
 
 
 
 
 
2880
  ),
2881
  'align' => array(
2882
  'label' => __pl('obj_align_label'),
2980
  <i if="{{double_indent}}" class="fa fa-quote-right"></i>
2981
  </div>
2982
  <div if="{{cite}}" class="pagelayer-quote-cite">
2983
+ <a if-ext="{{cite_url}}" href="{{{cite_url}}}" class="pagelayer-link-sel">
2984
  <span class="pagelayer-cite-holder">{{cite}}</span>
2985
  </a>
2986
  </div>
3129
  'cite_url' => array(
3130
  'type' => 'link',
3131
  'label' => __pl('quotes_url_label'),
3132
+ 'selector' => '.pagelayer-link-sel',
3133
  'desc' => __pl('quotes_url_desc'),
3134
  ),
3135
  'cite_text_color' => array(
3227
  'item_url' => array(
3228
  'type' => 'link',
3229
  'label' => __pl('list_item_url_label'),
3230
+ 'selector' => '.pagelayer-list-url',
3231
  ),
3232
  'show_icon' => array(
3233
  'type' => 'checkbox',
3512
  'link' => array(
3513
  'type' => 'link',
3514
  'label' => __pl('icon_link_field_label'),
3515
+ 'selector' => '.pagelayer-ele-link'
 
 
 
 
 
3516
  ),
3517
  'icon_alignment' => array(
3518
  'type' => 'radio',
3911
  'badge_url' => array(
3912
  'type' => 'link',
3913
  'label' => __pl('badge_url_label'),
3914
+ 'selector' => '.pagelayer-ele-link',
 
 
 
 
 
 
 
3915
  ),
3916
  'badge_notification_type' => array(
3917
  'type' => 'select',
4500
  // Image related Styles
4501
  'link_settings' => [
4502
  'link_type' => array(
 
4503
  'type' => 'select',
4504
+ 'label' => __pl('image_link_label'),
4505
  'default' => '',
4506
  'list' => array(
4507
  '' => __pl('none'),
4511
  )
4512
  ),
4513
  'link' => array(
4514
+ 'type' => 'link',
4515
  'label' => __pl('image_link_label'),
4516
  'desc' => __pl('image_link_desc'),
4517
+ 'selector' => '.pagelayer-ele-link',
4518
  'req' => array(
4519
  'link_type' => 'custom_url'
4520
  )
4521
  ),
4522
  'rel' => array(
 
4523
  'type' => 'text',
4524
+ 'label' => __pl('image_rel_label'),
4525
  'default' => '',
4526
  'addAttr' => ['{{element}} a' => 'rel="{{rel}}"'],
4527
  'req' => array(
4534
  'addAttr' => ['{{element}} a' => 'target="_blank"'],
4535
  'req' => array(
4536
  'link_type' => ['custom_url', 'media_file']
4537
+ ),
4538
+ 'show' => ['link_type' => 'media_file']
4539
  ),
4540
  ],
4541
  // Caption related Styles
4718
  )
4719
  ),
4720
  'link' => array(
4721
+ 'type' => 'link',
4722
  'label' => __pl('image_link_url'),
4723
  'desc' => __pl('image_link_desc'),
4724
+ 'selector' => '.pagelayer-link-sel',
4725
  'req' => array(
4726
  'link_type' => 'custom_url'
4727
  )
4732
  'addAttr' => ['{{element}} a' => 'target="_blank"'],
4733
  'req' => array(
4734
  'link_type' => ['custom_url', 'media_file']
4735
+ ),
4736
+ 'show' => ['link_type' => 'media_file'] // Backward compatibility of link props
4737
  ),
4738
  'slider_img_gap' => array(
4739
  'type' => 'dimension',
5005
  'type' => 'link',
5006
  'label' => __pl('button_link_label'),
5007
  'desc' => __pl('button_link_desc'),
5008
+ 'selector' => '.pagelayer-btn-holder',
5009
  'addAttr' => ['{{element}} .pagelayer-btn-holder' => 'href="{{{link}}}"'],
5010
  'req' => ['ele_scrollto' => '']
5011
  ),
 
 
 
 
 
 
 
 
 
 
 
5012
  'full_width' => array(
5013
  'type' => 'checkbox',
5014
  'label' => __pl('stretch'),
5450
  'social_url' => array(
5451
  'type' => 'link',
5452
  'label' => __pl('social_url_label'),
5453
+ 'selector' => '.pagelayer-ele-link',
5454
  'default' => get_option('pagelayer-facebook-url'),
5455
  ),
 
 
 
 
 
5456
  )
5457
  )
5458
  );
5893
  <img class="pagelayer-img pagelayer-animation-{{anim_hover}}" src="{{func_image}}" title="{{{service_image-title}}}" alt="{{{service_image-alt}}}" srcset="{{pagelayer-srcset}}" />
5894
  </div>
5895
  <div class="pagelayer-service-details">
5896
+ <a if-ext={{heading_url}} href="{{{heading_url}}}" class="pagelayer-ele-link pagelayer-service-heading-link" >
5897
  <div if={{service_heading}} class="pagelayer-service-heading">{{service_heading}}</div>
5898
  </a>
5899
  <div if={{service_text}} class="pagelayer-service-text">{{service_text}}</div>
5933
  'box_url' => array(
5934
  'type' => 'link',
5935
  'label' => __pl('url'),
5936
+ 'selector' => '.pagelayer-box-link',
 
 
 
 
 
 
 
5937
  ),
5938
  'anim_hover' => array(
5939
  'type' => 'select',
6177
  'heading_url' => array(
6178
  'type' => 'link',
6179
  'label' => __pl('url'),
6180
+ 'selector' => '.pagelayer-service-heading-link',
6181
  'req' => ['!service_heading' => '', 'box_url' => '']
6182
  ),
 
 
 
 
 
 
6183
  'heading_alignment' => array(
6184
  'type' => 'radio',
6185
  'label' => __pl('service_box_heading_alignment'),
6340
  'service_button_url' => array(
6341
  'type' => 'link',
6342
  'label' => __pl('service_btn_url_label'),
6343
+ 'selector' => '.pagelayer-service-btn',
6344
  'req' => array(
6345
  'service_button' => 'true'
6346
  ),
6347
  ),
 
 
 
 
 
 
 
 
6348
  'service_button_text' => array(
6349
  'type' => 'text',
6350
  'label' => __pl('service_button_text_label'),
6570
  <i class="{{service_icon}} pagelayer-icon-{{service_icon_shape_type}} pagelayer-animation-{{anim_hover}}" aria-hidden="true"></i>
6571
  </div>
6572
  <div class="pagelayer-service-details">
6573
+ <a if-ext={{heading_url}} href="{{{heading_url}}}" class="pagelayer-ele-link pagelayer-service-heading-link" >
6574
  <div if="{{service_heading}}" class="pagelayer-service-heading">{{service_heading}}</div>
6575
  </a>
6576
  <div if="{{service_text}}" class="pagelayer-service-text">{{service_text}}</div>
6623
  'box_url' => array(
6624
  'type' => 'link',
6625
  'label' => __pl('url'),
6626
+ 'selector' => '.pagelayer-box-link',
 
 
 
 
 
 
 
6627
  ),
6628
  ),
6629
  // icon style
6895
  'heading_url' => array(
6896
  'type' => 'link',
6897
  'label' => __pl('url'),
6898
+ 'selector' => '.pagelayer-service-heading-link',
6899
  'req' => ['!service_heading' => '', 'box_url' => '']
6900
  ),
 
 
 
 
 
 
6901
  'heading_alignment' => array(
6902
  'type' => 'radio',
6903
  'label' => __pl('service_box_heading_alignment'),
7051
  'service_button_url' => array(
7052
  'type' => 'link',
7053
  'label' => __pl('iconbox_btn_url_label'),
7054
+ 'selector' => '.pagelayer-service-btn',
7055
  'req' => ['service_button' => 'true']
7056
  ),
7057
  'service_button_text' => array(
8089
  'ferries' => __pl('ferries'),
8090
  'highways' => __pl('highways'),
8091
  ),
8092
+ 'desc' => __pl('direc_avoid_desc'),
8093
  'req' => [
8094
  'api_version' => 'v3',
8095
  'map_modes' => 'directions'
8364
  'cite_url' => array(
8365
  'type' => 'link',
8366
  'label' => __pl('testimonial_url_label'),
8367
+ 'selector' => '.pagelayer-ele-link',
8368
  'desc' => __pl('testimonial_url_desc'),
8369
  ),
8370
  'cite_spacing' => array(
8547
  'label' => __pl('percentage'),
8548
  'min' => 0,
8549
  'max' => 100,
 
8550
  'css' => ['{{element}} .pagelayer-progress-container > .pagelayer-progress-bar:after' => 'width:{{val}}%;',],
8551
  'addAttr' => ['{{element}} .pagelayer-progress-bar' => 'pagelayer-progress-width="{{progress_percentage}}"'],
8552
  'default' => 75,
pagelayer.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: PageLayer
4
  Plugin URI: http://wordpress.org/plugins/pagelayer/
5
  Description: PageLayer is a WordPress page builder plugin. Its very easy to use and very light on the browser.
6
- Version: 1.5.7
7
  Author: Pagelayer Team
8
  Author URI: https://pagelayer.com/
9
  License: LGPL v2.1
3
  Plugin Name: PageLayer
4
  Plugin URI: http://wordpress.org/plugins/pagelayer/
5
  Description: PageLayer is a WordPress page builder plugin. Its very easy to use and very light on the browser.
6
+ Version: 1.5.8
7
  Author: Pagelayer Team
8
  Author URI: https://pagelayer.com/
9
  License: LGPL v2.1
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: page builder, editor, drag-and-drop, landing page, replace image, pagelaye
4
  Requires at least: 4.7
5
  Tested up to: 5.8
6
  Requires PHP: 5.5
7
- Stable tag: 1.5.7
8
  License: LGPL v2.1
9
  License URI: http://www.gnu.org/licenses/lgpl-2.1.html
10
 
@@ -111,6 +111,17 @@ Do you have questions related to PageLayer ? Use the following links :
111
 
112
  == Changelog ==
113
 
 
 
 
 
 
 
 
 
 
 
 
114
  = 1.5.7 (Sep 28, 2021) =
115
  * [Bug-Fix] In some cases, the widget dropdown list was not hiding properly. This is fixed.
116
 
4
  Requires at least: 4.7
5
  Tested up to: 5.8
6
  Requires PHP: 5.5
7
+ Stable tag: 1.5.8
8
  License: LGPL v2.1
9
  License URI: http://www.gnu.org/licenses/lgpl-2.1.html
10
 
111
 
112
  == Changelog ==
113
 
114
+ = 1.5.8 (Oct 20, 2021) =
115
+ * [Improvement] The link property has been further improved to add target, rel and other attributes.
116
+ * [Improvement] Added the color options in the social share widget for the labels.
117
+ * [Improvement] Added alignment option in Pricing table widget and also added screen mode option where needed.
118
+ * [Task] The list of Google fonts has been updated.
119
+ * [Bug-Fix] In some cases, the JS/CSS files compressor was not loaded properly. This is fixed and also added option in Pagelayer setting to enable/disable JS/CSS giver.
120
+ * [Bug-Fix] In the social share widget the "Open link in new window" was not working properly. This is fixed.
121
+ * [Bug-Fix] In some cases, the Custom Attributes option was not working properly. This is fixed.
122
+ * [Bug-Fix] In the Audio widget the time handler height was not set properly. This is fixed.
123
+ * [Bug-Fix] In the options section the font family property was not working properly. This is fixed.
124
+
125
  = 1.5.7 (Sep 28, 2021) =
126
  * [Bug-Fix] In some cases, the widget dropdown list was not hiding properly. This is fixed.
127