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

Version Description

(June 21, 2019) = * [Feature] Added revision control * [Feature] Added the ability to manage actions while editing i.e. undo and redo * [Feature] Added keyboard options like ctrl+c, ctrl+v, ctrl+z, ctrl+y

Download this release

Release Info

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

Code changes from version 0.9.4 to 0.9.5

css/pagelayer-editor.css CHANGED
@@ -393,7 +393,8 @@ float:right;
393
 
394
  /* Pagelayer editor panel tabs*/
395
 
396
- .pagelayer-elpd-tab{
 
397
  display: inline-block;
398
  font-size: 13px;
399
  cursor: pointer;
@@ -417,11 +418,32 @@ display: none;
417
  display: block;
418
  }
419
 
420
- [pagelayer-elpd-active-tab="1"] {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
421
  color: #3e8ef7;
422
  }
423
 
424
- .pagelayer-elpd-tabs {
 
425
  background-color: #fff;
426
  border-bottom: 1px solid #d3d3d3;
427
  }
@@ -1463,6 +1485,7 @@ padding:1px;
1463
  .pagelayer-pl_countdown:before{content:"\e941"}
1464
  .pagelayer-pl_pricing:before{content:"\e933"}
1465
  .pagelayer-pl_contact:before{content:"\f298"}
 
1466
  .pagelayer-pl_testimonial:before{content:"\e906"}
1467
  .pagelayer-pl_alert:before{content:"\f06a"}
1468
  .pagelayer-pl_anchor:before{content:"\f13d"}
@@ -1477,6 +1500,9 @@ padding:1px;
1477
  .pagelayer-pl_collapse:before{content:"\f233"}
1478
  .pagelayer-pl_iconbox:before{content:"\e912"}
1479
  .pagelayer-pl_tooltip:before{content:"\f27a"} /*f18d*/
 
 
 
1480
  .pagelayer-pl_badge:before{content:"\f2c1"}
1481
  .pagelayer-pl_wp_widgets:before{content:"\e945"}
1482
  .pagelayer-pl_wp_custom_menu:before{content:"\e92a"}
@@ -1541,4 +1567,72 @@ box-shadow: #000 0 0 2px;
1541
  z-index: 10;
1542
  }
1543
 
1544
- /* Trumbowyg color widget style end */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
393
 
394
  /* Pagelayer editor panel tabs*/
395
 
396
+ .pagelayer-elpd-tab,
397
+ .pagelayer-history-tab{
398
  display: inline-block;
399
  font-size: 13px;
400
  cursor: pointer;
418
  display: block;
419
  }
420
 
421
+ .pagelayer-history-section{
422
+ display:none;
423
+ }
424
+
425
+ .pagelayer-history-body{
426
+ margin:10px 0px;
427
+ padding:10px;
428
+ background-color:#ffffff;
429
+ }
430
+
431
+ .pagelayer-history-section.active{
432
+ display:block;
433
+ }
434
+
435
+ .pagelayer-history-section.active[pagelayer-show-tab="actions"]{
436
+ display:flex;
437
+ flex-direction:column-reverse;
438
+ }
439
+
440
+ [pagelayer-elpd-active-tab="1"],
441
+ [pagelayer-history-active-tab="1"] {
442
  color: #3e8ef7;
443
  }
444
 
445
+ .pagelayer-elpd-tabs,
446
+ .pagelayer-history-tabs {
447
  background-color: #fff;
448
  border-bottom: 1px solid #d3d3d3;
449
  }
1485
  .pagelayer-pl_countdown:before{content:"\e941"}
1486
  .pagelayer-pl_pricing:before{content:"\e933"}
1487
  .pagelayer-pl_contact:before{content:"\f298"}
1488
+ .pagelayer-pl_search:before{content:"\f002"}
1489
  .pagelayer-pl_testimonial:before{content:"\e906"}
1490
  .pagelayer-pl_alert:before{content:"\f06a"}
1491
  .pagelayer-pl_anchor:before{content:"\f13d"}
1500
  .pagelayer-pl_collapse:before{content:"\f233"}
1501
  .pagelayer-pl_iconbox:before{content:"\e912"}
1502
  .pagelayer-pl_tooltip:before{content:"\f27a"} /*f18d*/
1503
+ .pagelayer-pl_post_comment:before{content:"\f0e6"}
1504
+ .pagelayer-pl_post_info:before{content:"\f05a"}
1505
+ .pagelayer-pl_post_nav:before{content:"\f0ec"}
1506
  .pagelayer-pl_badge:before{content:"\f2c1"}
1507
  .pagelayer-pl_wp_widgets:before{content:"\e945"}
1508
  .pagelayer-pl_wp_custom_menu:before{content:"\e92a"}
1567
  z-index: 10;
1568
  }
1569
 
1570
+ /* Trumbowyg color widget style end */
1571
+
1572
+ /* Pagelayer history style*/
1573
+
1574
+ .pagelayer-revision-holder,
1575
+ .pagelayer-history-holder{
1576
+ border: 1px solid #b7b5b5fa;
1577
+ margin-bottom: 10px;
1578
+ padding: 10px;
1579
+ display: -webkit-box;
1580
+ display: -webkit-flex;
1581
+ display: -ms-flexbox;
1582
+ display: flex;
1583
+ -webkit-box-align: center;
1584
+ -webkit-align-items: center;
1585
+ -ms-flex-align: center;
1586
+ align-items: center;
1587
+ font-size: 12px;
1588
+ color:#505050;
1589
+ }
1590
+
1591
+ .pagelayer-history,
1592
+ .pagelayer-history-hidden{
1593
+ display:none;
1594
+ }
1595
+
1596
+ .pagelayer-revision-holder:hover,
1597
+ .pagelayer-history-holder:hover,
1598
+ .pagelayer-history-holder.current_active_item{
1599
+ background-color:#efefef;
1600
+ }
1601
+
1602
+ .pagelayer-revision-img-holder{
1603
+ border-radius: 50%;
1604
+ overflow: hidden;
1605
+ margin-right:10px;
1606
+ }
1607
+
1608
+ .pagelayer-revision-detail-holder,
1609
+ .pagelayer-history-detail-holder{
1610
+ flex:1;
1611
+ }
1612
+
1613
+ .pagelayer-revision-holder .pagelayer-revision-delete,
1614
+ .pagelayer-history-holder .pagelayer-history-check{
1615
+ display:none;
1616
+ }
1617
+
1618
+ .pagelayer-revision-holder:hover .pagelayer-revision-delete,
1619
+ .pagelayer-history-holder.current_active_item .pagelayer-history-check{
1620
+ display:block;
1621
+ }
1622
+
1623
+ .pagelayer-revision-delete:hover{
1624
+ cursor:pointer;
1625
+ }
1626
+
1627
+ .pagelayer-revision-img-holder img{
1628
+ max-width: 100%;
1629
+ width: 20px;
1630
+ height: 20px;
1631
+ }
1632
+
1633
+ .pagelayer-history-holder span{
1634
+ margin-right:5px;
1635
+ }
1636
+
1637
+
1638
+ /* Pagelayer history end*/
css/pagelayer-frontend.css CHANGED
@@ -2002,27 +2002,250 @@ box-shadow: none !important;
2002
  }
2003
 
2004
 
2005
- /* Primary Menu End */
2006
- .pagelayer-menu-type-vertical li{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2007
  display: inline-block;
2008
  font-weight: 600;
2009
  }
2010
 
2011
- .pagelayer-menu-type-vertical li a{
2012
  box-shadow: none;
2013
  border: none;
2014
  }
2015
 
2016
- .pagelayer-menu-type-horizontal li{
2017
- margin-top: 6px !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2018
  list-style: none;
2019
  }
2020
 
2021
- .pagelayer-menu-type-horizontal li a{
 
2022
  box-shadow: none;
2023
  border: none;
2024
  }
2025
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2026
  /* Primary Menu End */
2027
 
2028
 
@@ -2722,3 +2945,113 @@ visibility:visible;
2722
 
2723
  /* Image Hotspot end */
2724
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2002
  }
2003
 
2004
 
2005
+ /* Primary Menu */
2006
+
2007
+ .pagelayer-wp-menu-container .menu a{
2008
+ display:flex;
2009
+ box-shadow: none;
2010
+ white-space: nowrap;
2011
+ position:relative;
2012
+ }
2013
+
2014
+ .pagelayer-menu-type-horizontal .sub-menu{
2015
+ z-index:999;
2016
+ }
2017
+
2018
+ .pagelayer-wp-menu-container ul,
2019
+ .pagelayer-wp-menu-container ul.sub-menu{
2020
+ margin-left:0px;
2021
+ }
2022
+
2023
+ .pagelayer-menu-type-horizontal *{
2024
+ transition: all 0.5s;
2025
+ }
2026
+
2027
+ .pagelayer-menu-type-horizontal li{
2028
  display: inline-block;
2029
  font-weight: 600;
2030
  }
2031
 
2032
+ .pagelayer-menu-type-horizontal li a{
2033
  box-shadow: none;
2034
  border: none;
2035
  }
2036
 
2037
+ .pagelayer-menu-type-horizontal .sub-menu{
2038
+ position:absolute;
2039
+ min-width: 100%;
2040
+ }
2041
+
2042
+ .pagelayer-menu-type-horizontal .sub-menu .sub-menu{
2043
+ top:0px
2044
+ }
2045
+
2046
+ .pagelayer-menu-type-horizontal ul li{
2047
+ position:relative;
2048
+ }
2049
+
2050
+ .pagelayer-wp-menu-container ul li span.after-icon{
2051
+ height: auto;
2052
+ width: 100%;
2053
+ position: relative;
2054
+ pointer-events: auto;
2055
+ line-height:inherit;
2056
+ color: inherit;
2057
+ font-size: inherit;
2058
+ margin-left:10px;
2059
+ padding-left:5px;
2060
+ padding-right:5px;
2061
+ }
2062
+
2063
+ .pagelayer-wp-menu-container:not([data-align="left"]) .menu span.after-icon{
2064
+ width:auto;
2065
+ }
2066
+
2067
+ .pagelayer-wp-menu-container[data-align="right"] .menu a{justify-content: flex-end;}
2068
+ .pagelayer-wp-menu-container[data-align="left"] .menu a{justify-content: left;}
2069
+ .pagelayer-wp-menu-container[data-align="center"] .menu a{justify-content: center;}
2070
+
2071
+ .pagelayer-wp-menu-container ul li span.after-icon:before{
2072
+ position:absolute;
2073
+ right:0;
2074
+ }
2075
+
2076
+ .pagelayer-wp-menu-container .sub-menu,
2077
+ .pagelayer-primary-menu-bar{
2078
+ display:none;
2079
+ }
2080
+
2081
+ .pagelayer-menu-type-horizontal .sub-menu li{
2082
+ display:block;
2083
+ }
2084
+
2085
+ .pagelayer-primary-menu-bar .fa{
2086
+ padding:5px;
2087
+ }
2088
+
2089
+ /* define fa-times-thin icon*/
2090
+ .fa-times-thin:before {
2091
+ content: '\00d7';
2092
+ }
2093
+
2094
+ .pagelayer-menu-type-vertical li{
2095
  list-style: none;
2096
  }
2097
 
2098
+ .pagelayer-menu-type-vertical li a{
2099
+ margin-top: 6px !important;
2100
  box-shadow: none;
2101
  border: none;
2102
  }
2103
 
2104
+ .pagelayer-menu-type-vertical ul.menu>li>ul.sub-menu{
2105
+ margin-left:0px;
2106
+ }
2107
+
2108
+ .pagelayer-wp-menu-holder[data-layout="dropdown"] .pagelayer-primary-menu-bar{
2109
+ display:block;
2110
+ }
2111
+
2112
+ .pagelayer-wp-menu-holder[data-layout="dropdown"] ul.menu{
2113
+ display:none;
2114
+ }
2115
+
2116
+ .pagelayer-menu-hover-underline:not(.none) ul.menu>li>a:before,
2117
+ .pagelayer-menu-hover-framed:not(.none) ul.menu>li>a:before,
2118
+ .pagelayer-menu-hover-doubleline:not(.none) ul.menu>li>a:before,
2119
+ .pagelayer-menu-hover-doubleline:not(.none) ul.menu>li>a:after,
2120
+ .pagelayer-menu-hover-overline:not(.none) ul.menu>li>a:before{
2121
+ position: absolute;
2122
+ content: '';
2123
+ left: 0px;
2124
+ bottom: 0px;
2125
+ height: 3px;
2126
+ width: 0px;
2127
+ background-color: #2154CF;
2128
+ transition: all 500ms ease;
2129
+ -moz-transition: all 500ms ease;
2130
+ -webkit-transition: all 500ms ease;
2131
+ -ms-transition: all 500ms ease;
2132
+ -o-transition: all 500ms ease;
2133
+ border-width:0px;
2134
+ }
2135
+
2136
+ .pagelayer-menu-hover-doubleline ul.menu>li>a:after{
2137
+ left:unset;
2138
+ right:0;
2139
+ }
2140
+
2141
+ .pagelayer-menu-hover-framed ul.menu>li>a:before{
2142
+ background-color:unset !important;
2143
+ height:100%;
2144
+ }
2145
+ .pagelayer-menu-hover-framed ul.menu>li>a:hover:before{
2146
+ border:3px solid #2154CF;
2147
+ }
2148
+
2149
+ .pagelayer-menu-hover-overline ul.menu>li>a:before,
2150
+ .pagelayer-menu-hover-doubleline ul.menu>li>a:before{
2151
+ top:0;
2152
+ bottom:unset;
2153
+ }
2154
+
2155
+ .pagelayer-menu-hover-underline.dropin ul.menu>li>a:before,
2156
+ .pagelayer-menu-hover-framed.dropin ul.menu>li>a:before,
2157
+ .pagelayer-menu-hover-doubleline.dropin ul.menu>li>a:before,
2158
+ .pagelayer-menu-hover-doubleline.dropin ul.menu>li>a:after,
2159
+ .pagelayer-menu-hover-overline.dropin ul.menu>li>a:before{
2160
+ width:100%;
2161
+ opacity:0;
2162
+ bottom:-5px;
2163
+ }
2164
+
2165
+ .pagelayer-menu-hover-underline.dropout ul.menu>li>a:before,
2166
+ .pagelayer-menu-hover-framed.dropout ul.menu>li>a:before,
2167
+ .pagelayer-menu-hover-doubleline.dropout ul.menu>li>a:before,
2168
+ .pagelayer-menu-hover-doubleline.dropout ul.menu>li>a:after,
2169
+ .pagelayer-menu-hover-overline.dropout ul.menu>li>a:before{
2170
+ width:100%;
2171
+ opacity:0;
2172
+ bottom:5px;
2173
+ }
2174
+
2175
+ .pagelayer-menu-hover-underline.dropin ul.menu>li>a:hover:before,
2176
+ .pagelayer-menu-hover-framed.dropin ul.menu>li>a:hover:before,
2177
+ .pagelayer-menu-hover-doubleline.dropin ul.menu>li>a:hover:before,
2178
+ .pagelayer-menu-hover-doubleline.dropin ul.menu>li>a:hover:after,
2179
+ .pagelayer-menu-hover-overline.dropin ul.menu>li>a:hover:before,
2180
+ .pagelayer-menu-hover-underline.dropout ul.menu>li>a:hover:before,
2181
+ .pagelayer-menu-hover-framed.dropout ul.menu>li>a:hover:before,
2182
+ .pagelayer-menu-hover-doubleline.dropout ul.menu>li>a:hover:before,
2183
+ .pagelayer-menu-hover-doubleline.dropout ul.menu>li>a:hover:after,
2184
+ .pagelayer-menu-hover-overline.dropout ul.menu>li>a:hover:before{
2185
+ bottom:0px;
2186
+ }
2187
+
2188
+ .pagelayer-menu-hover-underline.grow ul.menu>li>a:before,
2189
+ .pagelayer-menu-hover-framed.grow ul.menu>li>a:before,
2190
+ .pagelayer-menu-hover-doubleline.grow ul.menu>li>a:before,
2191
+ .pagelayer-menu-hover-doubleline.grow ul.menu>li>a:after,
2192
+ .pagelayer-menu-hover-overline.grow ul.menu>li>a:before{
2193
+ width:100%;
2194
+ transform:scale(0);
2195
+ }
2196
+
2197
+ .pagelayer-menu-hover-underline.fade ul.menu>li>a:before,
2198
+ .pagelayer-menu-hover-framed.fade ul.menu>li>a:before,
2199
+ .pagelayer-menu-hover-doubleline.fade ul.menu>li>a:before,
2200
+ .pagelayer-menu-hover-doubleline.fade ul.menu>li>a:after,
2201
+ .pagelayer-menu-hover-overline.fade ul.menu>li>a:before{
2202
+ width:100%;
2203
+ transition-duration:1000ms;
2204
+ opacity:0;
2205
+ }
2206
+
2207
+ .pagelayer-menu-hover-underline ul.menu>li>a:hover:before,
2208
+ .pagelayer-menu-hover-framed ul.menu>li>a:hover:before,
2209
+ .pagelayer-menu-hover-doubleline ul.menu>li>a:hover:before,
2210
+ .pagelayer-menu-hover-doubleline ul.menu>li>a:hover:after,
2211
+ .pagelayer-menu-hover-overline ul.menu>li>a:hover:before{
2212
+ transform:scale(1);
2213
+ opacity:1;
2214
+ width:100%;
2215
+ }
2216
+
2217
+ .pagelayer-menu-hover-text ul.menu>li>a:hover{
2218
+ transform:scale(1.2);
2219
+ }
2220
+
2221
+ @media screen and (min-width: 782px){
2222
+ .pagelayer-menu-type-horizontal .menu li:hover > ul.sub-menu{
2223
+ display:block;
2224
+ }
2225
+
2226
+ .pagelayer-menu-type-horizontal .sub-menu a{
2227
+ margin-left:0px !important;
2228
+ }
2229
+ }
2230
+
2231
+ @media screen and (max-width: 782px){
2232
+ .pagelayer-menu-type-horizontal ul.menu{
2233
+ display:none;
2234
+ }
2235
+ .pagelayer-menu-type-horizontal li,
2236
+ .pagelayer-primary-menu-bar{
2237
+ display: block;
2238
+ }
2239
+ .pagelayer-menu-type-horizontal .sub-menu{
2240
+ position:relative;
2241
+ }
2242
+ }
2243
+
2244
+ .pagelayer-togglt-on ul.menu,
2245
+ .active-sub-menu > ul{
2246
+ display:block !important;
2247
+ }
2248
+
2249
  /* Primary Menu End */
2250
 
2251
 
2945
 
2946
  /* Image Hotspot end */
2947
 
2948
+ /* Search Form */
2949
+ .pagelayer-search-classic .pagelayer-search-fields{
2950
+ display: flex;
2951
+ overflow:hidden;
2952
+ }
2953
+
2954
+ .pagelayer-search-classic .pagelayer-search-fields input.pagelayer-search-input{
2955
+ /*background:none;*/
2956
+ border-width:0px;
2957
+ }
2958
+
2959
+ .pagelayer-search-classic .pagelayer-search-fields .pagelayer-search-submit{
2960
+ border-radius:0px;
2961
+ }
2962
+
2963
+ .pagelayer-search-toggle,
2964
+ .pagelayer-search-full-screen .pagelayer-search-fields{
2965
+ display:none;
2966
+ }
2967
+
2968
+ .pagelayer-search-full-screen .pagelayer-search-toggle{
2969
+ display:inline-block;
2970
+ text-align: center;
2971
+ }
2972
+
2973
+ .pagelayer-search-full-screen .pagelayer-search-fields.show{
2974
+ position: fixed;
2975
+ top: 0;
2976
+ left: 0;
2977
+ background: #211c1c;
2978
+ bottom: 0;
2979
+ right: 0;
2980
+ z-index: 99;
2981
+ align-items: center;
2982
+ display: flex;
2983
+ text-align: center;
2984
+ flex-direction: column;
2985
+ }
2986
+
2987
+ .pagelayer-search-full-screen .pagelayer-search-input,
2988
+ .pagelayer-search-full-screen .pagelayer-search-input:focus{
2989
+ width: 60%;
2990
+ text-align: center;
2991
+ background: transparent;
2992
+ border-width: 0;
2993
+ border-bottom-width: 2px;
2994
+ position: absolute;
2995
+ top: 50%;
2996
+ color:#fff;
2997
+ }
2998
+
2999
+ .pagelayer-search-full-screen .pagelayer-search-submit{
3000
+ display:none;
3001
+ }
3002
+
3003
+ .pagelayer-post-nav-container{
3004
+ display: flex;
3005
+ align-items: center;
3006
+ }
3007
+
3008
+ .pagelayer-prev-post a,
3009
+ .pagelayer-next-post a{
3010
+ display: inline-flex;
3011
+ align-items: center;
3012
+ }
3013
+
3014
+ .pagelayer-next-post a .pagelayer-post-nav-icon{
3015
+ padding-left:12px;
3016
+ }
3017
+
3018
+ .pagelayer-prev-post a .pagelayer-post-nav-icon{
3019
+ padding-right:12px;
3020
+ }
3021
+
3022
+ .pagelayer-next-post{
3023
+ text-align:right;
3024
+ }
3025
+
3026
+ .pagelayer-prev-post a:hover,
3027
+ .pagelayer-next-post a:hover{
3028
+ text-decoration:none;
3029
+ }
3030
+
3031
+ .pagelayer-prev-post, .pagelayer-next-post{
3032
+ width: calc(50% - 1px);
3033
+ }
3034
+
3035
+ .pagelayer-post-nav-container .pagelayer-prev-holder,
3036
+ .pagelayer-post-nav-container .pagelayer-next-holder{
3037
+ display: -webkit-box;
3038
+ display: -webkit-flex;
3039
+ display: -ms-flexbox;
3040
+ display: flex;
3041
+ -webkit-box-orient: vertical;
3042
+ -webkit-box-direction: normal;
3043
+ -webkit-flex-direction: column;
3044
+ -ms-flex-direction: column;
3045
+ flex-direction: column;
3046
+ }
3047
+
3048
+ .pagelayer-post-nav-separator{
3049
+ align-self: stretch;
3050
+ }
3051
+
3052
+ /* Search Form end*/
3053
+ /* Post info*/
3054
+ .pagelayer-post-info-vertical > div{
3055
+ display:inline-block;
3056
+ }
3057
+ /* Post info end*/
init.php CHANGED
@@ -5,7 +5,7 @@ if (!defined('ABSPATH')) exit;
5
 
6
  define('PAGELAYER_BASE', plugin_basename(__FILE__));
7
  define('PAGELAYER_FILE', __FILE__);
8
- define('PAGELAYER_VERSION', '0.9.4');
9
  define('PAGELAYER_DIR', WP_PLUGIN_DIR.'/'.basename(dirname(PAGELAYER_FILE)));
10
  define('PAGELAYER_SLUG', 'pagelayer');
11
  define('PAGELAYER_URL', plugins_url('', PAGELAYER_FILE));
@@ -216,9 +216,14 @@ function pagelayer_enqueue_frontend($force = false){
216
 
217
  pagelayer_load_shortcodes();
218
  $pagelayer->cache['enqueue_frontend'] = true;
219
-
 
 
 
 
 
220
  // Enqueue our Editor's Frontend JS
221
- wp_register_script('pagelayer-frontend', PAGELAYER_JS.'/givejs.php?give=pagelayer-frontend.js,nivo-lightbox.min.js,slippry.min.js,wow.min.js,jquery-numerator.js,simpleParallax.min.js', array('jquery'), PAGELAYER_VERSION);
222
  wp_enqueue_script('pagelayer-frontend');
223
 
224
  wp_register_style('pagelayer-frontend', PAGELAYER_CSS.'/givecss.php?give=pagelayer-frontend.css,nivo-lightbox.css,slippry.css,animate.min.css', array(), PAGELAYER_VERSION);
@@ -300,6 +305,11 @@ function pagelayer_load_live(){
300
 
301
  }
302
 
 
 
 
 
 
303
  // Show the backend editor options
304
  add_action('edit_form_after_title', 'pagelayer_after_title');
305
  function pagelayer_after_title(){
@@ -373,231 +383,3 @@ function pagelayer_quick_link($actions, $post){
373
 
374
  return $actions;
375
  }
376
-
377
- // The ajax handler
378
- add_action('wp_ajax_pagelayer_wp_widget', 'pagelayer_wp_widget_ajax');
379
- function pagelayer_wp_widget_ajax(){
380
-
381
- global $pagelayer;
382
-
383
- // Some AJAX security
384
- check_ajax_referer('pagelayer_ajax', 'nonce');
385
-
386
- pagelayer_load_shortcodes();
387
-
388
- header('Content-Type: application/json');
389
-
390
- $ret = [];
391
- $tag = @$_POST['tag'];
392
- //pagelayer_print($pagelayer->shortcodes[$tag]);
393
-
394
- // No tag ?
395
- if(empty($pagelayer->shortcodes[$tag])){
396
- $ret['error'][] = 'No Tag';
397
- echo json_encode($ret);
398
- wp_die();
399
- }
400
-
401
- // Include the widgets
402
- include_once(ABSPATH . 'wp-admin/includes/widgets.php');
403
-
404
- $class = $pagelayer->shortcodes[$tag]['widget'];
405
-
406
- // Check the widget class exists ?
407
- if(empty($class) || !class_exists($class)){
408
- $ret['error'][] = 'No Widget Class';
409
- echo json_encode($ret);
410
- wp_die();
411
- }
412
-
413
- $instance = [];
414
- $widget = new $class();
415
- $widget->_set('pagelayer-widget-1234567890');
416
-
417
- // Is there any existing data ?
418
- if(!empty($_POST['widget_data'])){
419
- $json = json_decode(stripslashes($_POST['widget_data']), true);
420
- //pagelayer_print($json);die();
421
- if(!empty($json)){
422
- $instance = $json;
423
- }
424
- }
425
-
426
- // Are there any form values ?
427
- if(!empty($_POST['values'])){
428
- parse_str(stripslashes($_POST['values']), $data);
429
- //pagelayer_print($data);die();
430
-
431
- // Any data ?
432
- if(!empty($data)){
433
-
434
- // First key is useless
435
- $data = current($data);
436
-
437
- // Do we still have valid data ?
438
- if(!empty($data)){
439
-
440
- // 2nd key is useless and just over-ride instance
441
- $instance = current($data);
442
-
443
- }
444
- }
445
- }
446
-
447
- // Get the form
448
- ob_start();
449
- $widget->form($instance);
450
- $ret['form'] = ob_get_contents();
451
- ob_end_clean();
452
-
453
- // Get the html
454
- ob_start();
455
- $widget->widget([], $instance);
456
- $ret['html'] = ob_get_contents();
457
- ob_end_clean();
458
-
459
- // Widget data to set
460
- if(!empty($instance)){
461
- $ret['widget_data'] = $instance;
462
- }
463
-
464
- echo json_encode($ret);
465
- wp_die();
466
-
467
- }
468
-
469
- // Update Post content
470
- add_action('wp_ajax_pagelayer_save_content', 'pagelayer_save_content');
471
- function pagelayer_save_content(){
472
-
473
- // Some AJAX security
474
- check_ajax_referer('pagelayer_ajax', 'nonce');
475
-
476
- $content = $_POST['pagelayer_update_content'];
477
-
478
- $postID = (int) $_GET['postID'];
479
-
480
- if(empty($postID)){
481
- $msg['error'] = 'Invalid post ID';
482
- }
483
-
484
- // Check if the post exists
485
-
486
- if(!empty($postID) && !empty($content)){
487
-
488
- $post = array(
489
- 'ID' => $postID,
490
- 'post_content' => $content,
491
- );
492
-
493
- // Update the post into the database
494
- wp_update_post($post);
495
-
496
- if (is_wp_error($postID)) {
497
- $msg['error'] = 'Unable to update the Post Content for some reason';
498
- }else{
499
- $msg['success'] = 'Post Content was updated successfully!';
500
- }
501
-
502
- }else{
503
- $msg['error'] = "Unable to update the Post Content for some reason";
504
- }
505
-
506
- echo json_encode($msg);
507
- wp_die();
508
-
509
- }
510
-
511
- // Shortcodes Widget Handler
512
- add_action('wp_ajax_pagelayer_do_shortcodes', 'pagelayer_do_shortcodes');
513
- function pagelayer_do_shortcodes(){
514
-
515
- // Some AJAX security
516
- check_ajax_referer('pagelayer_ajax', 'nonce');
517
-
518
- $data = '';
519
- if(isset($_REQUEST['shortcode_data'])){
520
- $data = stripslashes($_REQUEST['shortcode_data']);
521
- }
522
-
523
- echo do_shortcode($data);
524
- wp_die();
525
-
526
- }
527
-
528
- // Get the Site Title
529
- add_action('wp_ajax_pagelayer_fetch_site_title', 'pagelayer_fetch_site_title');
530
- function pagelayer_fetch_site_title(){
531
-
532
- // Some AJAX security
533
- check_ajax_referer('pagelayer_ajax', 'nonce');
534
-
535
- echo get_bloginfo('name');
536
- wp_die();
537
- }
538
-
539
- // Update the Site Title
540
- add_action('wp_ajax_pagelayer_update_site_title', 'pagelayer_update_site_title');
541
- function pagelayer_update_site_title(){
542
- global $wpdb;
543
-
544
- // Some AJAX security
545
- check_ajax_referer('pagelayer_ajax', 'nonce');
546
-
547
- $site_title = $_POST['site_title'];
548
-
549
- update_option('blogname', $site_title);
550
-
551
- $wpdb->query("UPDATE `sm_sitemeta`
552
- SET meta_value = '".$site_title."'
553
- WHERE meta_key = 'site_name'");
554
- wp_die();
555
- }
556
-
557
- // Show the SideBars
558
- add_action('wp_ajax_pagelayer_fetch_sidebar', 'pagelayer_fetch_sidebar');
559
- function pagelayer_fetch_sidebar(){
560
-
561
- global $wp_registered_sidebars;
562
-
563
- // Some AJAX security
564
- check_ajax_referer('pagelayer_ajax', 'nonce');
565
-
566
- // Create a list
567
- $pagelayer_wp_widgets = array();
568
-
569
- foreach($wp_registered_sidebars as $v){
570
- $pagelayer_wp_widgets[$v['id']] = $v['name'];
571
- }
572
-
573
- $id = @$_REQUEST['sidebar'];
574
-
575
- if(function_exists('dynamic_sidebar') && !empty($pagelayer_wp_widgets[$id])) {
576
- ob_start();
577
- dynamic_sidebar($id);
578
- $result = ob_get_clean();
579
- }else{
580
- $result = 'No such Widget Area !';
581
- }
582
-
583
- echo $result;
584
- wp_die();
585
-
586
- }
587
-
588
- // Show the primary menu !
589
- add_action('wp_ajax_pagelayer_fetch_primary_menu', 'pagelayer_fetch_primary_menu');
590
- function pagelayer_fetch_primary_menu(){
591
-
592
- // Some AJAX security
593
- check_ajax_referer('pagelayer_ajax', 'nonce');
594
-
595
- echo wp_nav_menu( array(
596
- 'menu' => 'primary-menu',
597
- 'menu_id' => 'pagelayer-header-menu',
598
- 'theme_location' => 'primary',
599
- 'menu_class' => 'primary-menu',
600
- ) );
601
-
602
- wp_die();
603
- }
5
 
6
  define('PAGELAYER_BASE', plugin_basename(__FILE__));
7
  define('PAGELAYER_FILE', __FILE__);
8
+ define('PAGELAYER_VERSION', '0.9.5');
9
  define('PAGELAYER_DIR', WP_PLUGIN_DIR.'/'.basename(dirname(PAGELAYER_FILE)));
10
  define('PAGELAYER_SLUG', 'pagelayer');
11
  define('PAGELAYER_URL', plugins_url('', PAGELAYER_FILE));
216
 
217
  pagelayer_load_shortcodes();
218
  $pagelayer->cache['enqueue_frontend'] = true;
219
+
220
+ $premium_js = '';
221
+ if(defined('PAGELAYER_PREMIUM')){
222
+ $premium_js = ',chartist.min.js';
223
+ }
224
+
225
  // Enqueue our Editor's Frontend JS
226
+ wp_register_script('pagelayer-frontend', PAGELAYER_JS.'/givejs.php?give=pagelayer-frontend.js,nivo-lightbox.min.js,slippry.min.js,wow.min.js,jquery-numerator.js,simpleParallax.min.js'.$premium_js, array('jquery'), PAGELAYER_VERSION);
227
  wp_enqueue_script('pagelayer-frontend');
228
 
229
  wp_register_style('pagelayer-frontend', PAGELAYER_CSS.'/givecss.php?give=pagelayer-frontend.css,nivo-lightbox.css,slippry.css,animate.min.css', array(), PAGELAYER_VERSION);
305
 
306
  }
307
 
308
+ // If we are doing ajax and its a pagelayer ajax
309
+ if(wp_doing_ajax()){
310
+ include_once(PAGELAYER_DIR.'/main/ajax.php');
311
+ }
312
+
313
  // Show the backend editor options
314
  add_action('edit_form_after_title', 'pagelayer_after_title');
315
  function pagelayer_after_title(){
383
 
384
  return $actions;
385
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/pagelayer-editor.js CHANGED
@@ -11,9 +11,12 @@ pagelayer = {
11
  },
12
  p : this,
13
  copy_selected: '',
14
- mouse: {x: -1, y: -1}
 
15
  }
16
 
 
 
17
  // Lets start
18
  jQuery(document).ready(function(){
19
 
@@ -48,6 +51,10 @@ jQuery(document).ready(function(){
48
  // Set up right click
49
  pagelayer_left_click();
50
  pagelayer_right_click();
 
 
 
 
51
 
52
  });
53
 
@@ -600,6 +607,9 @@ function pagelayer_element_added(jEle){
600
  var sc = jEle.attr('pagelayer-tag');
601
  var id, par_id;
602
 
 
 
 
603
  // Generate the HTML
604
  html = pagelayer_create_sc(sc);
605
  id = pagelayer_assign_id(html);
@@ -632,6 +642,20 @@ function pagelayer_element_added(jEle){
632
 
633
  }
634
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
635
  return id;
636
 
637
  };
@@ -922,6 +946,8 @@ function pagelayer_left_click(){
922
 
923
  jQuery('.entry-content').on('click', function(e){
924
 
 
 
925
  // Hide the context menu
926
  jQuery('.pagelayer-right-click-options').hide();
927
 
@@ -1059,6 +1085,41 @@ jQuery(document).keydown(function(event){
1059
  pagelayer_delete_element('[pagelayer-active]');
1060
  }
1061
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1062
  });
1063
 
1064
  // Delete an element as per the selector
@@ -1069,12 +1130,38 @@ function pagelayer_delete_element(selector){
1069
  if(jEle.length > 0){
1070
 
1071
  var id = pagelayer_assign_id(jEle);
 
1072
 
1073
  // Is there a wrap
1074
  var wrap = jQuery('[pagelayer-wrap-id="'+id+'"]');
1075
 
1076
  var par = wrap.parent();
1077
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1078
  wrap.remove();
1079
 
1080
  pagelayer_empty_col(par);
@@ -1084,6 +1171,7 @@ function pagelayer_delete_element(selector){
1084
  }
1085
 
1086
  }
 
1087
  pagelayer_isDirty = true;
1088
  };
1089
 
@@ -1169,6 +1257,18 @@ function pagelayer_copy_element(selector, insertAfter){
1169
 
1170
  pagelayer_element_setup('[pagelayer-id='+id+'], [pagelayer-id='+id+'] .pagelayer-ele', true);
1171
 
 
 
 
 
 
 
 
 
 
 
 
 
1172
  //If column then renumber columns
1173
  if(tag == 'pl_col'){
1174
  var row = src.parent().closest('.pagelayer-row');
@@ -1374,6 +1474,31 @@ function pagelayer_set_atts(jEle, atts, val){
1374
  continue;
1375
  }
1376
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1377
  // Remove the attribute if its BLANK and there is no default for it
1378
  // If there is a default, we set it to blank to keep record of the current val
1379
  if(atts[x].length < 1){
@@ -1439,6 +1564,24 @@ function pagelayer_set_tmp_atts(jEle, atts, val){
1439
  }
1440
 
1441
  for(var x in atts){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1442
  jEle.attr('pagelayer-tmp-'+x, atts[x]);
1443
  }
1444
 
@@ -1947,6 +2090,7 @@ function pagelayer_save(){
1947
  }else{
1948
  pagelayer_isDirty = false;
1949
  alert(obj['success']);
 
1950
  }
1951
  },
1952
  error: function(errorThrown){
@@ -2179,6 +2323,7 @@ function pagelayer_leftbar(){
2179
 
2180
  html += '</div>'+
2181
  '<div id="pagelayer-elpd" class="pagelayer-elpd"></div>'+
 
2182
  '</div>'+
2183
  '</div>';
2184
 
@@ -2229,6 +2374,399 @@ function pagelayer_leftbar(){
2229
 
2230
  };
2231
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2232
  // Report an error
2233
  function pagelayer_error(error, func){
2234
  var prefix = func || '';
@@ -2249,13 +2787,16 @@ function pagelayer_bottombar(){
2249
  '<i class="screen-mode fa fa-mobile" pagelayer-mode-data="mobile"></i>'+
2250
  '</div>'+
2251
  '</div>'+
 
2252
  '</div>'+
2253
  '</div>';
2254
 
2255
  holder.html(html);
2256
  holder.find('.pagelayer-update-button').on('click', function(){
2257
  pagelayer_save();
 
2258
  });
 
2259
  holder.find('.pagelayer-close-button').on('click', function(){
2260
  pagelayer_close();
2261
  });
@@ -2268,7 +2809,17 @@ function pagelayer_bottombar(){
2268
  holder.find('.pagelayer-mode-button').on('click', function(){
2269
  holder.find('.pagelayer-mode-buttons-wrapper').toggle();
2270
  });
2271
- }
 
 
 
 
 
 
 
 
 
 
2272
 
2273
 
2274
  ///////////////////////////////
11
  },
12
  p : this,
13
  copy_selected: '',
14
+ mouse: {x: -1, y: -1},
15
+ history_action : true,
16
  }
17
 
18
+ var pagelayer_history_obj = {}, pagelayer_revision_obj = {};
19
+
20
  // Lets start
21
  jQuery(document).ready(function(){
22
 
51
  // Set up right click
52
  pagelayer_left_click();
53
  pagelayer_right_click();
54
+
55
+ // Setup pagelayer history
56
+ pagelayer_history_obj['action_data'] = [];
57
+ pagelayer_history_setup(true);
58
 
59
  });
60
 
607
  var sc = jEle.attr('pagelayer-tag');
608
  var id, par_id;
609
 
610
+ // Set Pagelayer History FALSE to prevent saving attributes in action history
611
+ pagelayer.history_action = false;
612
+
613
  // Generate the HTML
614
  html = pagelayer_create_sc(sc);
615
  id = pagelayer_assign_id(html);
642
 
643
  }
644
 
645
+ // Save in action history
646
+ var cEle = pagelayer_near_by_ele(id, sc);
647
+
648
+ pagelayer_history_action_push({
649
+ 'title' : pagelayer_shortcodes[sc]['name'],
650
+ 'action' : 'Added',
651
+ 'pl_id' : id,
652
+ 'html' : html[0].outerHTML,
653
+ 'cEle' : cEle
654
+ });
655
+
656
+ // Set pagelayer history TRUE
657
+ pagelayer.history_action = true;
658
+
659
  return id;
660
 
661
  };
946
 
947
  jQuery('.entry-content').on('click', function(e){
948
 
949
+ e.preventDefault();// Added by Jivan in Actions / Revisions version
950
+
951
  // Hide the context menu
952
  jQuery('.pagelayer-right-click-options').hide();
953
 
1085
  pagelayer_delete_element('[pagelayer-active]');
1086
  }
1087
 
1088
+ // ctrl+z handle
1089
+ if(event.keyCode == 90 && event.ctrlKey){
1090
+ pagelayer_do_history('undo');
1091
+ }
1092
+
1093
+ // ctrl+y handle
1094
+ if(event.keyCode == 89 && event.ctrlKey){
1095
+ pagelayer_do_history('redo');
1096
+ }
1097
+
1098
+ // ctrl+c handle
1099
+ if(event.keyCode == 67 && event.ctrlKey){
1100
+
1101
+ // Check the active element
1102
+ if(pagelayer_active.el && pagelayer_active.el.id){
1103
+ pagelayer_copy_select("[pagelayer-id='"+pagelayer_active.el.id+"']");
1104
+ }
1105
+
1106
+ }
1107
+
1108
+ // ctrl+v handle
1109
+ if(event.keyCode == 86 && event.ctrlKey){
1110
+
1111
+ // Check the active element
1112
+ if(pagelayer_active.el && pagelayer_active.el.id){
1113
+
1114
+ var jEle = jQuery("[pagelayer-id='"+pagelayer_active.el.id+"']");
1115
+
1116
+ // Check if the any element is copied
1117
+ if(!pagelayer_empty(pagelayer.copy_selected) && pagelayer_can_copy_to(jEle)){
1118
+ pagelayer_paste_element("[pagelayer-id='"+pagelayer_active.el.id+"']");
1119
+ }
1120
+
1121
+ }
1122
+ }
1123
  });
1124
 
1125
  // Delete an element as per the selector
1130
  if(jEle.length > 0){
1131
 
1132
  var id = pagelayer_assign_id(jEle);
1133
+ var sc = pagelayer_tag(jEle);
1134
 
1135
  // Is there a wrap
1136
  var wrap = jQuery('[pagelayer-wrap-id="'+id+'"]');
1137
 
1138
  var par = wrap.parent();
1139
 
1140
+ // Save this element in history action
1141
+ if(pagelayer.history_action){
1142
+ var cEle = pagelayer_near_by_ele(id, sc);
1143
+
1144
+ // To save in history, we need to save only element not the wraps as we call setup if we redo or undo
1145
+ jEle.find('style').remove();
1146
+ jEle.find('.pagelayer-ele-overlay').remove();
1147
+
1148
+ // Unwrap the wraps
1149
+ jEle.find('.pagelayer-ele').each(function (){
1150
+ var ele = jQuery(this);
1151
+ if(ele.parent().is('.pagelayer-ele-wrap')){
1152
+ ele.unwrap();
1153
+ }
1154
+ });
1155
+
1156
+ pagelayer_history_action_push({
1157
+ 'title' : pagelayer_shortcodes[sc]['name'],
1158
+ 'action' : 'Deleted',
1159
+ 'pl_id' : id,
1160
+ 'html' : jEle,
1161
+ 'cEle' : cEle
1162
+ });
1163
+ }
1164
+
1165
  wrap.remove();
1166
 
1167
  pagelayer_empty_col(par);
1171
  }
1172
 
1173
  }
1174
+
1175
  pagelayer_isDirty = true;
1176
  };
1177
 
1257
 
1258
  pagelayer_element_setup('[pagelayer-id='+id+'], [pagelayer-id='+id+'] .pagelayer-ele', true);
1259
 
1260
+ // Save this element in history action
1261
+ if(pagelayer.history_action){
1262
+ var cEle = pagelayer_near_by_ele(id, tag);
1263
+ pagelayer_history_action_push({
1264
+ 'title' : pagelayer_shortcodes[tag]['name'],
1265
+ 'action' : 'Copied',
1266
+ 'pl_id' : id,
1267
+ 'html' : jEle,
1268
+ 'cEle' : cEle
1269
+ });
1270
+ }
1271
+
1272
  //If column then renumber columns
1273
  if(tag == 'pl_col'){
1274
  var row = src.parent().closest('.pagelayer-row');
1474
  continue;
1475
  }
1476
 
1477
+ // Record History
1478
+ if(pagelayer.history_action){
1479
+ var attr_label = '';
1480
+ for(var section in all_props){
1481
+ for(var props in all_props[section]){
1482
+ if(props == x){
1483
+ attr_label = all_props[section][props]['label'];
1484
+ }
1485
+ }
1486
+
1487
+ }
1488
+
1489
+ var old_val = pagelayer_get_att(jEle, x) || '';
1490
+ pagelayer_history_action_push({
1491
+ 'title' : all_props['name'],
1492
+ 'subTitle' : attr_label,
1493
+ 'action' : 'Edited',
1494
+ 'attrType' : 'a_attr',
1495
+ 'pl_id' : pagelayer_id(jEle),
1496
+ 'atts' : x,
1497
+ 'oldVal' : old_val,
1498
+ 'newVal' : atts[x]
1499
+ });
1500
+ }
1501
+
1502
  // Remove the attribute if its BLANK and there is no default for it
1503
  // If there is a default, we set it to blank to keep record of the current val
1504
  if(atts[x].length < 1){
1564
  }
1565
 
1566
  for(var x in atts){
1567
+
1568
+ // Record history
1569
+ if(pagelayer.history_action){
1570
+
1571
+ var old_val = pagelayer_get_tmp_att(jEle, x) || '';
1572
+ pagelayer_history_action_push({
1573
+ 'title' : pagelayer_shortcodes[pagelayer_tag(jEle)]['name'],
1574
+ 'subTitle' : x,
1575
+ 'action' : 'Edited',
1576
+ 'attrType' : 'tmp_attr',
1577
+ 'pl_id' : pagelayer_id(jEle),
1578
+ 'atts' : x,
1579
+ 'oldVal' : old_val,
1580
+ 'newVal' : atts[x]
1581
+ });
1582
+
1583
+ }
1584
+
1585
  jEle.attr('pagelayer-tmp-'+x, atts[x]);
1586
  }
1587
 
2090
  }else{
2091
  pagelayer_isDirty = false;
2092
  alert(obj['success']);
2093
+ pagelayer_get_revision();
2094
  }
2095
  },
2096
  error: function(errorThrown){
2323
 
2324
  html += '</div>'+
2325
  '<div id="pagelayer-elpd" class="pagelayer-elpd"></div>'+
2326
+ '<div id="pagelayer-history" class="pagelayer-history"></div>'+
2327
  '</div>'+
2328
  '</div>';
2329
 
2374
 
2375
  };
2376
 
2377
+ // Get the closest element and method
2378
+ function pagelayer_near_by_ele(id, sc){
2379
+
2380
+ // Get the previous element of the id element
2381
+ var prevEle_id = jQuery('[pagelayer-wrap-id="'+id+'"]').prev().attr('pagelayer-wrap-id') || '';
2382
+ var method, cEle, args = {};
2383
+
2384
+ if(prevEle_id.length > 0){
2385
+
2386
+ // If have previous element of the id element
2387
+ // Set the method and previous element selector
2388
+ args = {'method' : 'after', 'cEle' : '[pagelayer-wrap-id="'+prevEle_id+'"]'};
2389
+
2390
+ }else{
2391
+
2392
+ // If don't have previous element of the id element then get parent element
2393
+ if(sc == "pl_row"){
2394
+ args = {'method' : 'prepend', 'cEle' : '.entry-content'};
2395
+ }else{
2396
+
2397
+ // Get the parent element
2398
+ var pEle_id = pagelayer_id(jQuery('[pagelayer-wrap-id="'+id+'"]').closest('.pagelayer-ele'));
2399
+
2400
+ // Get the parent element tag
2401
+ var pEle_tag = pagelayer_tag(jQuery('[pagelayer-id="'+pEle_id+'"]'));
2402
+ var holder = pagelayer_shortcodes[pEle_tag]['holder'] || '';
2403
+ args = {'method' : 'prepend', 'cEle' : '[pagelayer-id="'+pEle_id+'"] '+ holder+' '};
2404
+
2405
+ }
2406
+
2407
+ }
2408
+
2409
+ return args;
2410
+
2411
+ };
2412
+
2413
+ // Push the action data in the pagelayer_history_obj object
2414
+ function pagelayer_history_action_push(args){
2415
+
2416
+ var history_obj_len = pagelayer_history_obj['action_data'].length;
2417
+
2418
+ // If the history_obj_len is less then 1 then set the data in array 0 position
2419
+ if(history_obj_len < 1){
2420
+ pagelayer_history_obj['action_data'][0] = {'title' : 'Start Editing', 'action' : 'Start' };
2421
+ pagelayer_history_obj['current_active_item_id'] = 0;
2422
+ }
2423
+
2424
+ // Remove the second array element if the history_obj_len greater then 100
2425
+ if(history_obj_len > 100){
2426
+ pagelayer_history_obj['action_data'].splice(1, 1);
2427
+ }
2428
+
2429
+ // Get current active history action id
2430
+ var action_id = parseInt(pagelayer_history_obj['current_active_item_id']) || '';
2431
+
2432
+ // Remove the all array element after the active array element
2433
+ var del_ele = history_obj_len - action_id - 1;
2434
+ pagelayer_history_obj['action_data'].splice(action_id + 1, del_ele);
2435
+
2436
+ // Check if the same attr set as current active history
2437
+ if(args.action == "Edited" && history_obj_len > 1){
2438
+ var atts = pagelayer_history_obj['action_data'][action_id] || '';
2439
+ if(atts['atts'] == args['atts']){
2440
+ args['oldVal'] = atts['oldVal'];
2441
+ pagelayer_history_obj['action_data'][action_id] = args;
2442
+ pagelayer_history_setup();
2443
+ return true;
2444
+ }
2445
+ }
2446
+
2447
+ pagelayer_history_obj['action_data'].push(args);
2448
+ pagelayer_history_obj['current_active_item_id'] ++;
2449
+ pagelayer_history_setup();
2450
+ }
2451
+
2452
+ // Setup pagelayer history
2453
+ function pagelayer_history_setup(force){
2454
+
2455
+ var force = force || false;
2456
+
2457
+ // If the history tab is visible, only then setup
2458
+ if(!pagelayer.$$('.pagelayer-history').is(':visible') && !force){
2459
+ return;
2460
+ }
2461
+
2462
+ // pagelayer-HISTORY - Element Properties Dialog
2463
+ var pagelayer_history_html = '<div class="pagelayer-history-tabs">'+
2464
+ '<div class="pagelayer-history-tab" pagelayer-history-tab="actions" pagelayer-history-active-tab="1">Actions</div>'+
2465
+ '<div class="pagelayer-history-tab" pagelayer-history-tab="revisions">Revisions</div>'+
2466
+ '</div>'+
2467
+ '<div class="pagelayer-history-body">'+
2468
+ '<div class="pagelayer-history-section active" pagelayer-show-tab="actions">';
2469
+
2470
+ // Any actions
2471
+ if(pagelayer_history_obj['action_data'].length > 0){
2472
+
2473
+ var current_active = pagelayer_history_obj['action_data'].length - 1 || '';
2474
+
2475
+ for(var x in pagelayer_history_obj['action_data']){
2476
+
2477
+ if(pagelayer_empty(pagelayer_history_obj['action_data'][x])){continue;}
2478
+
2479
+ var title = pagelayer_history_obj['action_data'][x]['title'] || '';
2480
+ var subTitle = pagelayer_history_obj['action_data'][x]['subTitle'] || '';
2481
+ var action = pagelayer_history_obj['action_data'][x]['action'] || '';
2482
+ var tmp_attr = pagelayer_history_obj['action_data'][x]['attrType'] || '';
2483
+ var eAttr = '';
2484
+
2485
+ if(!pagelayer_empty(tmp_attr) && tmp_attr == "tmp_attr"){
2486
+ eAttr = "pagelayer-history-hidden";
2487
+ }
2488
+
2489
+ pagelayer_history_html += '<div class="pagelayer-history-holder '+((current_active == x) ? 'current_active_item' : '' )+' '+eAttr+'" history-action-id="'+x+'" >'+
2490
+ '<div class="pagelayer-history-detail-holder">'+
2491
+ '<span class="pagelayer-history-title"><b> '+title+' </b></span>'+
2492
+ '<span class="pagelayer-history-subtitle"> '+subTitle+' </span>'+
2493
+ '<span class="pagelayer-history-action"><i> '+action+' </i></span>'+
2494
+ '</div>'+
2495
+ '<div class="pagelayer-history-icon">'+
2496
+ '<span class="pagelayer-history-check fa fa-check" aria-hidden="true"></span>'+
2497
+ '</div>'+
2498
+ '</div>';
2499
+ }
2500
+
2501
+ }else{
2502
+ pagelayer_history_html += 'No Actions history available yet';
2503
+ }
2504
+
2505
+ pagelayer_history_html += '</div>'+
2506
+ '<div class="pagelayer-history-section" pagelayer-show-tab="revisions">';
2507
+
2508
+ // Any revisions ?
2509
+ if(pagelayer_revision_obj){
2510
+ for(var x in pagelayer_revision_obj){
2511
+ pagelayer_history_html += '<div class="pagelayer-revision-holder" revision-id="'+pagelayer_revision_obj[x]['ID']+'">'+
2512
+ '<div class="pagelayer-revision-img-holder">'+
2513
+ '<img src="'+pagelayer_revision_obj[x]['post_author_url']+'" />'+
2514
+ '</div>'+
2515
+ '<div class="pagelayer-revision-detail-holder">'+
2516
+ '<div class="pagelayer-revision-date">'+
2517
+ pagelayer_revision_obj[x]['post_date_ago']+
2518
+ '('+pagelayer_revision_obj[x]['post_date']+')'+
2519
+ '</div>'+
2520
+ '<div class="pagelayer-revision-author">'+
2521
+ pagelayer_revision_obj[x]['post_type'] +' by '+
2522
+ pagelayer_revision_obj[x]['post_author_name']+
2523
+ '</div>'+
2524
+ '</div>'+
2525
+ '<div class="pagelayer-revision-icon-holder">'+
2526
+ '<i class="pagelayer-revision-delete fa fa-times"></i>'+
2527
+ '</div>'+
2528
+ '</div>';
2529
+ }
2530
+
2531
+ }else{
2532
+ pagelayer_history_html += 'No Revisions history available';
2533
+ }
2534
+
2535
+ pagelayer_history_html += '</div>'+
2536
+ '</div>';
2537
+
2538
+ // Create the dialog box
2539
+ pagelayer.$$('#pagelayer-history').html(pagelayer_history_html);
2540
+ var holder = pagelayer.$$('#pagelayer-history');
2541
+
2542
+ // Set active history holder
2543
+ holder.find('.pagelayer-history-holder').on('click', function(){
2544
+ var hEle = jQuery(this);
2545
+ var prev_item_id = pagelayer_history_obj['current_active_item_id'];
2546
+ hEle.parent().children().removeClass('current_active_item');
2547
+ hEle.addClass('current_active_item');
2548
+ pagelayer_history_obj['current_active_item_id'] = hEle.attr('history-action-id');
2549
+ pagelayer_history_action_setup(hEle, prev_item_id);
2550
+ });
2551
+
2552
+ // Apply revision
2553
+ holder.find('.pagelayer-revision-holder').on('click', function(){
2554
+ var revision_id = jQuery(this).attr('revision-id');
2555
+
2556
+ jQuery.ajax({
2557
+ url: pagelayer_ajax_url+'&action=pagelayer_apply_revision&revisionID='+revision_id,
2558
+ type: 'post',
2559
+ data: {
2560
+ nonce: pagelayer_ajax_nonce,
2561
+ 'pagelayer-live' : 1,
2562
+ },
2563
+ success: function(response, status, xhr){
2564
+
2565
+ var obj = jQuery.parseJSON(response);
2566
+ if(obj['error']){
2567
+ alert(obj['error']);
2568
+ }else{
2569
+ jQuery('.entry-content').html(obj['content']);
2570
+ alert(obj['success']);
2571
+ pagelayer_element_setup();
2572
+ pagelayer_add_widget();
2573
+ }
2574
+ }
2575
+ });
2576
+ });
2577
+
2578
+ // Delete the revision
2579
+ holder.find('.pagelayer-revision-delete').click(function(e){
2580
+
2581
+ e.stopPropagation();
2582
+ var rEle = jQuery(this).closest('.pagelayer-revision-holder');
2583
+ var revision_id = rEle.attr('revision-id');
2584
+
2585
+ if(confirm("Are you sure you want to delete the revision ?")){
2586
+ jQuery.ajax({
2587
+ url: pagelayer_ajax_url+'&action=pagelayer_delete_revision&revisionID='+revision_id,
2588
+ type: 'post',
2589
+ data: {nonce: pagelayer_ajax_nonce},
2590
+ success: function(response, status, xhr){
2591
+
2592
+ var obj = jQuery.parseJSON(response);
2593
+ if(obj['error']){
2594
+ alert(obj['error']);
2595
+ }else{
2596
+ alert(obj['success']);
2597
+ rEle.hide();
2598
+ }
2599
+
2600
+ }
2601
+ });
2602
+ }
2603
+
2604
+ });
2605
+
2606
+ // The tabs
2607
+ holder.find('.pagelayer-history-tab').on('click', function(){
2608
+ var attr = 'pagelayer-history-active-tab';
2609
+ holder.find('.pagelayer-history-tab').each(function(){
2610
+ jQuery(this).removeAttr(attr);
2611
+ });
2612
+ jQuery(this).attr(attr, 1);
2613
+
2614
+ // Get the active tab
2615
+ var active_tab = holder.find('[pagelayer-history-active-tab]').attr('pagelayer-history-tab');
2616
+
2617
+ // Trigger the showing of rows
2618
+ holder.find('[pagelayer-show-tab]').each(function(){
2619
+ var sec = jQuery(this);
2620
+
2621
+ // Is it the active tab ?
2622
+ if(sec.attr('pagelayer-show-tab') != active_tab){
2623
+ sec.hide();
2624
+ }else{
2625
+ sec.show();
2626
+ }
2627
+ });
2628
+ });
2629
+ }
2630
+
2631
+ // Get evisions Handler
2632
+ function pagelayer_get_revision(){
2633
+
2634
+ jQuery.ajax({
2635
+ url: pagelayer_ajax_url+'&action=pagelayer_get_revision&postID='+pagelayer_postID,
2636
+ type: 'post',
2637
+ data: {
2638
+ nonce: pagelayer_ajax_nonce,
2639
+ },
2640
+ //async:false,
2641
+ success: function(response, status, xhr){
2642
+ var obj = jQuery.parseJSON(response);
2643
+
2644
+ if(!pagelayer_empty(obj['error'])){
2645
+ alert(obj['error']);
2646
+ }else{
2647
+ pagelayer_revision_obj = obj;
2648
+ pagelayer_history_setup(true);
2649
+ }
2650
+ }
2651
+ });
2652
+ };
2653
+
2654
+ // Do the history action - use for ctrl-z and ctrl-y
2655
+ function pagelayer_do_history(action){
2656
+
2657
+ var actions_section = pagelayer.$$('#pagelayer-history [pagelayer-show-tab="actions"]');
2658
+ var current_item = actions_section.find('.pagelayer-history-holder.current_active_item');
2659
+
2660
+ if(action == 'undo'){
2661
+ current_item = jQuery(current_item).prevAll(":not(.pagelayer-history-hidden)").first();
2662
+ }else if(action == 'redo'){
2663
+ current_item = jQuery(current_item).nextAll(":not(.pagelayer-history-hidden)").first();
2664
+ }
2665
+
2666
+ current_item.click();
2667
+
2668
+ };
2669
+
2670
+ // Action setup handle on ctrl-z and ctrl-y
2671
+ function pagelayer_history_action_setup(now_active, prev_item_id){
2672
+ var current_item_id = parseInt(now_active.attr('history-action-id'));
2673
+
2674
+ // Delete the element
2675
+ var delete_ele = function(id){
2676
+
2677
+ // Set Pagelayer History FALSE to prevent saving delete action in action history
2678
+ pagelayer.history_action = false;
2679
+
2680
+ pagelayer_delete_element('[pagelayer-id='+id+']');
2681
+
2682
+ // Set Pagelayer History TRUE
2683
+ pagelayer.history_action = true;
2684
+
2685
+ };
2686
+
2687
+ // Re-setup the element
2688
+ var resetup_ele = function(history_array){
2689
+ jQuery(history_array.cEle.cEle)[history_array.cEle.method](history_array.html);
2690
+ pagelayer_element_setup('[pagelayer-id='+history_array.pl_id+'], [pagelayer-id='+history_array.pl_id+'] .pagelayer-ele', true);
2691
+ pagelayer_empty_col(jQuery('[pagelayer-id="'+history_array.pl_id+'"]').closest('.pagelayer-col-holder'));
2692
+ };
2693
+
2694
+ // Re-setup the element attr
2695
+ var reset_ele_attr = function(hEle, atts, val, attrType){
2696
+
2697
+ // Set Pagelayer History FALSE to prevent saving attributes in action history
2698
+ pagelayer.history_action = false;
2699
+ if(attrType == "tmp_attr"){
2700
+ pagelayer_set_tmp_atts(hEle, atts, val);
2701
+ }else{
2702
+ pagelayer_set_atts(hEle, atts, val);
2703
+ }
2704
+
2705
+ // The property holder
2706
+ var holder = pagelayer.$$('.pagelayer-elpd-body');
2707
+ holder.html(' ');
2708
+ pagelayer_sc_render(hEle);
2709
+ pagelayer_elpd_generate(hEle, holder);
2710
+ pagelayer.history_action = true;
2711
+
2712
+ };
2713
+
2714
+ if(prev_item_id > current_item_id){
2715
+
2716
+ // All Actions for undo here
2717
+ var i = parseInt(prev_item_id);
2718
+
2719
+ for(i; i > current_item_id; i--){
2720
+
2721
+ var history_array = pagelayer_history_obj['action_data'][i];
2722
+ var action = history_array.action;
2723
+ var id = history_array.pl_id;
2724
+
2725
+ if(action == "Edited"){
2726
+ hEle = jQuery('[pagelayer-id="'+id+'"]');
2727
+ reset_ele_attr(hEle, history_array.atts, history_array.oldVal, history_array.attrType);
2728
+ }else if(action == "Added"){
2729
+ delete_ele(id);
2730
+ }else if(action == "Deleted"){
2731
+ resetup_ele(history_array);
2732
+ }else if(action == "Copied"){
2733
+ delete_ele(id);
2734
+ }
2735
+
2736
+ }
2737
+
2738
+ }else{
2739
+
2740
+ // All Actions for redo here
2741
+ var i = parseInt(prev_item_id)+1;
2742
+
2743
+ for(i; i <= current_item_id; i++){
2744
+
2745
+ var history_array = pagelayer_history_obj['action_data'][i];
2746
+ var action = history_array.action;
2747
+ var id = history_array.pl_id;
2748
+
2749
+ if(action == "Edited"){
2750
+ hEle = jQuery('[pagelayer-id="'+id+'"]');
2751
+ reset_ele_attr(hEle, history_array.atts, history_array.newVal, history_array.attrType);
2752
+ }else if(action == "Added"){
2753
+ resetup_ele(history_array);
2754
+
2755
+ if(history_array.tag != "pl_row" && history_array.tag != "pl_col" ){
2756
+ // Ensure the column is not empty
2757
+ pagelayer_empty_col(history_array.cEle.cEle);
2758
+ }
2759
+ }else if(action == "Deleted"){
2760
+ delete_ele(id);
2761
+ }else if(action == "Copied"){
2762
+ resetup_ele(history_array);
2763
+ }
2764
+
2765
+ }
2766
+ }
2767
+
2768
+ };
2769
+
2770
  // Report an error
2771
  function pagelayer_error(error, func){
2772
  var prefix = func || '';
2787
  '<i class="screen-mode fa fa-mobile" pagelayer-mode-data="mobile"></i>'+
2788
  '</div>'+
2789
  '</div>'+
2790
+ '<i class="pagelayer-history-icon fa fa-history"></i>'+
2791
  '</div>'+
2792
  '</div>';
2793
 
2794
  holder.html(html);
2795
  holder.find('.pagelayer-update-button').on('click', function(){
2796
  pagelayer_save();
2797
+ pagelayer_history_setup();// Setup history tab after update
2798
  });
2799
+
2800
  holder.find('.pagelayer-close-button').on('click', function(){
2801
  pagelayer_close();
2802
  });
2809
  holder.find('.pagelayer-mode-button').on('click', function(){
2810
  holder.find('.pagelayer-mode-buttons-wrapper').toggle();
2811
  });
2812
+
2813
+ holder.find('.pagelayer-history-icon').click(function(){
2814
+ pagelayer.$$('.pagelayer-elpd-header').show().find('.pagelayer-elpd-title').text('Pagelayer History');
2815
+ pagelayer.$$('.pagelayer-elpd').hide();
2816
+ pagelayer.$$('.pagelayer-logo').hide();
2817
+ pagelayer.$$('.pagelayer-shortcodes').hide();
2818
+ pagelayer.$$('.pagelayer-history').show();
2819
+ pagelayer_active = {};
2820
+ pagelayer_history_setup();
2821
+ });
2822
+ };
2823
 
2824
 
2825
  ///////////////////////////////
js/pagelayer-frontend.js CHANGED
@@ -85,6 +85,14 @@ jQuery(document).ready(function(){
85
  pagelayer_table(jQuery(this));
86
  });
87
 
 
 
 
 
 
 
 
 
88
  });
89
 
90
  // For automatic row change
@@ -803,3 +811,65 @@ function pagelayer_table(jEle){
803
  });
804
 
805
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  pagelayer_table(jQuery(this));
86
  });
87
 
88
+ jQuery('.pagelayer-wp_menu').each(function(){
89
+ pagelayer_primary_menu(jQuery(this));
90
+ });
91
+
92
+ jQuery('.pagelayer-search').each(function(){
93
+ pagelayer_search_form(jQuery(this));
94
+ });
95
+
96
  });
97
 
98
  // For automatic row change
811
  });
812
 
813
  }
814
+
815
+ // Primary Menu Handler - Premium
816
+ function pagelayer_primary_menu(jEle){
817
+
818
+ var container = jEle.find('.pagelayer-wp-menu-container');
819
+ var menu_bar = jEle.find('.pagelayer-primary-menu-bar').find('i.fa');
820
+ var layout = jEle.find('.pagelayer-wp-menu-holder').data('layout');
821
+ var submenu_ind = jEle.find('.pagelayer-wp-menu-holder').data('submenu_ind');
822
+
823
+ if(layout == 'vertical'){
824
+ menu_bar.hide();
825
+ }
826
+
827
+ // Menu toggle
828
+ jQuery(menu_bar).unbind('click');
829
+ jQuery(menu_bar).click(function(){
830
+ jQuery(container).toggleClass('pagelayer-togglt-on');
831
+ if(jQuery(container).hasClass('pagelayer-togglt-on')){
832
+ jQuery(this).removeClass('fa-bars');
833
+ jQuery(this).addClass('fa-times');
834
+ }else{
835
+ jQuery(this).addClass('fa-bars');
836
+ jQuery(this).removeClass('fa-times');
837
+ }
838
+ });
839
+
840
+ // If has sub-menu the as icon
841
+ var after_icons = '<span class="after-icon fa fa-'+submenu_ind+'"></span>';
842
+ jQuery(container).find('ul.menu li ul.sub-menu').parent().children('a').append(after_icons);
843
+
844
+ // Toggle Sub nav
845
+ var after_icon = jQuery(container).find('ul.menu li.menu-item-has-children .after-icon');
846
+
847
+ after_icon.unbind('click');
848
+ after_icon.click(function(e){
849
+ e.preventDefault();
850
+ if(window.matchMedia("(max-width: 782px)").matches || layout != 'horizontal'){
851
+ jQuery(this).closest('li').toggleClass('active-sub-menu');
852
+ }else{
853
+ jQuery(this).closest('li').removeClass('active-sub-menu');
854
+ }
855
+ });
856
+
857
+ }
858
+
859
+ // Search Form handler - Premium
860
+ function pagelayer_search_form(jEle){
861
+
862
+ // In full screen mode set auto complete offscreenBuffering
863
+ jEle.find('.pagelayer-search-full-screen form').attr('autocomplete', 'off');
864
+
865
+ jEle.find('.pagelayer-search-toggle').click(function(){
866
+ jEle.find('.pagelayer-search-fields').toggleClass('show');
867
+ });
868
+
869
+ jEle.find('.pagelayer-search-fields').click(function(e){
870
+ e = window.event || e;
871
+ if(this === e.target) {
872
+ jQuery(this).removeClass('show');
873
+ }
874
+ });
875
+ }
js/properties.js CHANGED
@@ -169,6 +169,7 @@ function pagelayer_elpd_setup(){
169
  pagelayer.$$('.pagelayer-elpd-header').hide();
170
  pagelayer.$$('.pagelayer-shortcodes').show();
171
  pagelayer.$$('.pagelayer-logo').show();
 
172
  pagelayer.$$('.pagelayer-elpd-body').removeAttr('pagelayer-element-id').empty();
173
  pagelayer_active = {};
174
  });
@@ -201,6 +202,9 @@ function pagelayer_elpd_setup(){
201
  // Open the properties
202
  function pagelayer_elpd_open(jEle){
203
 
 
 
 
204
  // Set the position of the element and show
205
  //pagelayer_elpd.css('left', pagelayer_elpd_pos[0]);
206
  //pagelayer_elpd.css('top', pagelayer_elpd_pos[1]);
@@ -208,6 +212,7 @@ function pagelayer_elpd_open(jEle){
208
  pagelayer.$$('.pagelayer-elpd-header').show();
209
  pagelayer.$$('.pagelayer-logo').hide();
210
  pagelayer.$$('.pagelayer-shortcodes').hide();
 
211
 
212
  // The property holder
213
  var holder = pagelayer.$$('.pagelayer-elpd-body');
@@ -221,6 +226,9 @@ function pagelayer_elpd_open(jEle){
221
  // Set the header
222
  pagelayer.$$('.pagelayer-elpd-title').html('Edit '+pagelayer_shortcodes[el.tag]['name']);
223
 
 
 
 
224
  };
225
 
226
  // Show the properties window
@@ -1600,7 +1608,7 @@ function pagelayer_elp_icon(row, prop){
1600
 
1601
  pagelayer_icons = $.map($.map(document.styleSheets, function(s){
1602
 
1603
- if(s.href && s.href.endsWith('font-awesome.min.css?ver='+pagelayer_ver)){
1604
  return s;
1605
  }
1606
  return null;
@@ -1786,6 +1794,18 @@ function pagelayer_elp_group(row, prop){
1786
  var label_param = prop['item_label']['param'] || '';
1787
  var title = pagelayer_get_att(jEle, label_param) || prop['item_label']['default'];
1788
 
 
 
 
 
 
 
 
 
 
 
 
 
1789
  // Create the HTML
1790
  var holder = jQuery('<div class="pagelayer-elp-group-item" pagelayer-group-item-id="'+id+'">'+
1791
  '<div class="pagelayer-elp-group-item-head">'+
@@ -2193,12 +2213,12 @@ function pagelayer_elp_typography(row, prop){
2193
  val = prop.c['val'].split(',');
2194
  }
2195
 
2196
- var select = { 'style' : ['', 'normal', 'italic', 'oblique'],
2197
  'weight' : ['', '100', '200', '300', '400', '500', '600', '700', '800', '900'],
2198
- 'variant' : ['', 'normal', 'small-caps'],
2199
- 'deco-line' : ['', 'none', 'overline', 'line-through', 'underline', 'underline overline'],
2200
- 'deco-style' : ['solid', 'double', 'dotted', 'dashed', 'wavy'],
2201
- 'transform' : ['', 'capitalize', 'uppercase', 'lowercase'],
2202
  'fonts' : ['', 'ABeeZee', 'Abel', 'Abhaya Libre', 'Abril Fatface', 'Aclonica', 'Acme', 'Actor', 'Adamina', 'Advent Pro', 'Aguafina Script', 'Akronim', 'Aladin', 'Aldrich', 'Alef', 'Alegreya', 'Alegreya SC', 'Alegreya Sans', 'Alegreya Sans SC', 'Aleo', 'Alex Brush', 'Alfa Slab One', 'Alice', 'Alike', 'Alike Angular', 'Allan', 'Allerta', 'Allerta Stencil', 'Allura', 'Almendra', 'Almendra Display', 'Almendra SC', 'Amarante', 'Amaranth', 'Amatic SC', 'Amethysta', 'Amiko', 'Amiri', 'Amita', 'Anaheim', 'Andada', 'Andika', 'Angkor', 'Annie Use Your Telescope', 'Anonymous Pro', 'Antic', 'Antic Didone', 'Antic Slab', 'Anton', 'Arapey', 'Arbutus', 'Arbutus Slab', 'Architects Daughter', 'Archivo', 'Archivo Black', 'Archivo Narrow', 'Aref Ruqaa', 'Arima Madurai', 'Arimo', 'Arizonia', 'Armata', 'Arsenal', 'Artifika', 'Arvo', 'Arya', 'Asap', 'Asap Condensed', 'Asar', 'Asset', 'Assistant', 'Astloch', 'Asul', 'Athiti', 'Atma', 'Atomic Age', 'Aubrey', 'Audiowide', 'Autour One', 'Average', 'Average Sans', 'Averia Gruesa Libre', 'Averia Libre', 'Averia Sans Libre', 'Averia Serif Libre', 'B612', 'B612 Mono', 'Bad Script', 'Bahiana', 'Bai Jamjuree', 'Baloo', 'Baloo Bhai', 'Baloo Bhaijaan', 'Baloo Bhaina', 'Baloo Chettan', 'Baloo Da', 'Baloo Paaji', 'Baloo Tamma', 'Baloo Tammudu', 'Baloo Thambi', 'Balthazar', 'Bangers', 'Barlow', 'Barlow Condensed', 'Barlow Semi Condensed', 'Barrio', 'Basic', 'Battambang', 'Baumans', 'Bayon', 'Belgrano', 'Bellefair', 'Belleza', 'BenchNine', 'Bentham', 'Berkshire Swash', 'Bevan', 'Bigelow Rules', 'Bigshot One', 'Bilbo', 'Bilbo Swash Caps', 'BioRhyme', 'BioRhyme Expanded', 'Biryani', 'Bitter', 'Black And White Picture', 'Black Han Sans', 'Black Ops One', 'Bokor', 'Bonbon', 'Boogaloo', 'Bowlby One', 'Bowlby One SC', 'Brawler', 'Bree Serif', 'Bubblegum Sans', 'Bubbler One', 'Buda', 'Buenard', 'Bungee', 'Bungee Hairline', 'Bungee Inline', 'Bungee Outline', 'Bungee Shade', 'Butcherman', 'Butterfly Kids', 'Cabin', 'Cabin Condensed', 'Cabin Sketch', 'Caesar Dressing', 'Cagliostro', 'Cairo', 'Calligraffitti', 'Cambay', 'Cambo', 'Candal', 'Cantarell', 'Cantata One', 'Cantora One', 'Capriola', 'Cardo', 'Carme', 'Carrois Gothic', 'Carrois Gothic SC', 'Carter One', 'Catamaran', 'Caudex', 'Caveat', 'Caveat Brush', 'Cedarville Cursive', 'Ceviche One', 'Chakra Petch', 'Changa', 'Changa One', 'Chango', 'Charm', 'Charmonman', 'Chathura', 'Chau Philomene One', 'Chela One', 'Chelsea Market', 'Chenla', 'Cherry Cream Soda', 'Cherry Swash', 'Chewy', 'Chicle', 'Chivo', 'Chonburi', 'Cinzel', 'Cinzel Decorative', 'Clicker Script', 'Coda', 'Coda Caption', 'Codystar', 'Coiny', 'Combo', 'Comfortaa', 'Coming Soon', 'Concert One', 'Condiment', 'Content', 'Contrail One', 'Convergence', 'Cookie', 'Copse', 'Corben', 'Cormorant', 'Cormorant Garamond', 'Cormorant Infant', 'Cormorant SC', 'Cormorant Unicase', 'Cormorant Upright', 'Courgette', 'Cousine', 'Coustard', 'Covered By Your Grace', 'Crafty Girls', 'Creepster', 'Crete Round', 'Crimson Text', 'Croissant One', 'Crushed', 'Cuprum', 'Cute Font', 'Cutive', 'Cutive Mono', 'Damion', 'Dancing Script', 'Dangrek', 'David Libre', 'Dawning of a New Day', 'Days One', 'Dekko', 'Delius', 'Delius Swash Caps', 'Delius Unicase', 'Della Respira', 'Denk One', 'Devonshire', 'Dhurjati', 'Didact Gothic', 'Diplomata', 'Diplomata SC', 'Do Hyeon', 'Dokdo', 'Domine', 'Donegal One', 'Doppio One', 'Dorsa', 'Dosis', 'Dr Sugiyama', 'Duru Sans', 'Dynalight', 'EB Garamond', 'Eagle Lake', 'East Sea Dokdo', 'Eater', 'Economica', 'Eczar', 'El Messiri', 'Electrolize', 'Elsie', 'Elsie Swash Caps', 'Emblema One', 'Emilys Candy', 'Encode Sans', 'Encode Sans Condensed', 'Encode Sans Expanded', 'Encode Sans Semi Condensed', 'Encode Sans Semi Expanded', 'Engagement', 'Englebert', 'Enriqueta', 'Erica One', 'Esteban', 'Euphoria Script', 'Ewert', 'Exo', 'Exo 2', 'Expletus Sans', 'Fahkwang', 'Fanwood Text', 'Farsan', 'Fascinate', 'Fascinate Inline', 'Faster One', 'Fasthand', 'Fauna One', 'Faustina', 'Federant', 'Federo', 'Felipa', 'Fenix', 'Finger Paint', 'Fira Mono', 'Fira Sans', 'Fira Sans Condensed', 'Fira Sans Extra Condensed', 'Fjalla One', 'Fjord One', 'Flamenco', 'Flavors', 'Fondamento', 'Fontdiner Swanky', 'Forum', 'Francois One', 'Frank Ruhl Libre', 'Freckle Face', 'Fredericka the Great', 'Fredoka One', 'Freehand', 'Fresca', 'Frijole', 'Fruktur', 'Fugaz One', 'GFS Didot', 'GFS Neohellenic', 'Gabriela', 'Gaegu', 'Gafata', 'Galada', 'Galdeano', 'Galindo', 'Gamja Flower', 'Gentium Basic', 'Gentium Book Basic', 'Geo', 'Geostar', 'Geostar Fill', 'Germania One', 'Gidugu', 'Gilda Display', 'Give You Glory', 'Glass Antiqua', 'Glegoo', 'Gloria Hallelujah', 'Goblin One', 'Gochi Hand', 'Gorditas', 'Gothic A1', 'Goudy Bookletter 1911', 'Graduate', 'Grand Hotel', 'Gravitas One', 'Great Vibes', 'Griffy', 'Gruppo', 'Gudea', 'Gugi', 'Gurajada', 'Habibi', 'Halant', 'Hammersmith One', 'Hanalei', 'Hanalei Fill', 'Handlee', 'Hanuman', 'Happy Monkey', 'Harmattan', 'Headland One', 'Heebo', 'Henny Penny', 'Herr Von Muellerhoff', 'Hi Melody', 'Hind', 'Hind Guntur', 'Hind Madurai', 'Hind Siliguri', 'Hind Vadodara', 'Holtwood One SC', 'Homemade Apple', 'Homenaje', 'IBM Plex Mono', 'IBM Plex Sans', 'IBM Plex Sans Condensed', 'IBM Plex Serif', 'IM Fell DW Pica', 'IM Fell DW Pica SC', 'IM Fell Double Pica', 'IM Fell Double Pica SC', 'IM Fell English', 'IM Fell English SC', 'IM Fell French Canon', 'IM Fell French Canon SC', 'IM Fell Great Primer', 'IM Fell Great Primer SC', 'Iceberg', 'Iceland', 'Imprima', 'Inconsolata', 'Inder', 'Indie Flower', 'Inika', 'Inknut Antiqua', 'Irish Grover', 'Istok Web', 'Italiana', 'Italianno', 'Itim', 'Jacques Francois', 'Jacques Francois Shadow', 'Jaldi', 'Jim Nightshade', 'Jockey One', 'Jolly Lodger', 'Jomhuria', 'Josefin Sans', 'Josefin Slab', 'Joti One', 'Jua', 'Judson', 'Julee', 'Julius Sans One', 'Junge', 'Jura', 'Just Another Hand', 'Just Me Again Down Here', 'K2D', 'Kadwa', 'Kalam', 'Kameron', 'Kanit', 'Kantumruy', 'Karla', 'Karma', 'Katibeh', 'Kaushan Script', 'Kavivanar', 'Kavoon', 'Kdam Thmor', 'Keania One', 'Kelly Slab', 'Kenia', 'Khand', 'Khmer', 'Khula', 'Kirang Haerang', 'Kite One', 'Knewave', 'KoHo', 'Kodchasan', 'Kosugi', 'Kosugi Maru', 'Kotta One', 'Koulen', 'Kranky', 'Kreon', 'Kristi', 'Krona One', 'Krub', 'Kumar One', 'Kumar One Outline', 'Kurale', 'La Belle Aurore', 'Laila', 'Lakki Reddy', 'Lalezar', 'Lancelot', 'Lateef', 'Lato', 'League Script', 'Leckerli One', 'Ledger', 'Lekton', 'Lemon', 'Lemonada', 'Libre Barcode 128', 'Libre Barcode 128 Text', 'Libre Barcode 39', 'Libre Barcode 39 Extended', 'Libre Barcode 39 Extended Text', 'Libre Barcode 39 Text', 'Libre Baskerville', 'Libre Franklin', 'Life Savers', 'Lilita One', 'Lily Script One', 'Limelight', 'Linden Hill', 'Lobster', 'Lobster Two', 'Londrina Outline', 'Londrina Shadow', 'Londrina Sketch', 'Londrina Solid', 'Lora', 'Love Ya Like A Sister', 'Loved by the King', 'Lovers Quarrel', 'Luckiest Guy', 'Lusitana', 'Lustria', 'M PLUS 1p', 'M PLUS Rounded 1c', 'Macondo', 'Macondo Swash Caps', 'Mada', 'Magra', 'Maiden Orange', 'Maitree', 'Major Mono Display', 'Mako', 'Mali', 'Mallanna', 'Mandali', 'Manuale', 'Marcellus', 'Marcellus SC', 'Marck Script', 'Margarine', 'Markazi Text', 'Marko One', 'Marmelad', 'Martel', 'Martel Sans', 'Marvel', 'Mate', 'Mate SC', 'Maven Pro', 'McLaren', 'Meddon', 'MedievalSharp', 'Medula One', 'Meera Inimai', 'Megrim', 'Meie Script', 'Merienda', 'Merienda One', 'Merriweather', 'Merriweather Sans', 'Metal', 'Metal Mania', 'Metamorphous', 'Metrophobic', 'Michroma', 'Milonga', 'Miltonian', 'Miltonian Tattoo', 'Mina', 'Miniver', 'Miriam Libre', 'Mirza', 'Miss Fajardose', 'Mitr', 'Modak', 'Modern Antiqua', 'Mogra', 'Molengo', 'Molle', 'Monda', 'Monofett', 'Monoton', 'Monsieur La Doulaise', 'Montaga', 'Montez', 'Montserrat', 'Montserrat Alternates', 'Montserrat Subrayada', 'Moul', 'Moulpali', 'Mountains of Christmas', 'Mouse Memoirs', 'Mr Bedfort', 'Mr Dafoe', 'Mr De Haviland', 'Mrs Saint Delafield', 'Mrs Sheppards', 'Mukta', 'Mukta Mahee', 'Mukta Malar', 'Mukta Vaani', 'Muli', 'Mystery Quest', 'NTR', 'Nanum Brush Script', 'Nanum Gothic', 'Nanum Gothic Coding', 'Nanum Myeongjo', 'Nanum Pen Script', 'Neucha', 'Neuton', 'New Rocker', 'News Cycle', 'Niconne', 'Niramit', 'Nixie One', 'Nobile', 'Nokora', 'Norican', 'Nosifer', 'Notable', 'Nothing You Could Do', 'Noticia Text', 'Noto Sans', 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans SC', 'Noto Sans TC', 'Noto Serif', 'Noto Serif JP', 'Noto Serif KR', 'Noto Serif SC', 'Noto Serif TC', 'Nova Cut', 'Nova Flat', 'Nova Mono', 'Nova Oval', 'Nova Round', 'Nova Script', 'Nova Slim', 'Nova Square', 'Numans', 'Nunito', 'Nunito Sans', 'Odor Mean Chey', 'Offside', 'Old Standard TT', 'Oldenburg', 'Oleo Script', 'Oleo Script Swash Caps', 'Open Sans', 'Open Sans Condensed', 'Oranienbaum', 'Orbitron', 'Oregano', 'Orienta', 'Original Surfer', 'Oswald', 'Over the Rainbow', 'Overlock', 'Overlock SC', 'Overpass', 'Overpass Mono', 'Ovo', 'Oxygen', 'Oxygen Mono', 'PT Mono', 'PT Sans', 'PT Sans Caption', 'PT Sans Narrow', 'PT Serif', 'PT Serif Caption', 'Pacifico', 'Padauk', 'Palanquin', 'Palanquin Dark', 'Pangolin', 'Paprika', 'Parisienne', 'Passero One', 'Passion One', 'Pathway Gothic One', 'Patrick Hand', 'Patrick Hand SC', 'Pattaya', 'Patua One', 'Pavanam', 'Paytone One', 'Peddana', 'Peralta', 'Permanent Marker', 'Petit Formal Script', 'Petrona', 'Philosopher', 'Piedra', 'Pinyon Script', 'Pirata One', 'Plaster', 'Play', 'Playball', 'Playfair Display', 'Playfair Display SC', 'Podkova', 'Poiret One', 'Poller One', 'Poly', 'Pompiere', 'Pontano Sans', 'Poor Story', 'Poppins', 'Port Lligat Sans', 'Port Lligat Slab', 'Pragati Narrow', 'Prata', 'Preahvihear', 'Press Start 2P', 'Pridi', 'Princess Sofia', 'Prociono', 'Prompt', 'Prosto One', 'Proza Libre', 'Puritan', 'Purple Purse', 'Quando', 'Quantico', 'Quattrocento', 'Quattrocento Sans', 'Questrial', 'Quicksand', 'Quintessential', 'Qwigley', 'Racing Sans One', 'Radley', 'Rajdhani', 'Rakkas', 'Raleway', 'Raleway Dots', 'Ramabhadra', 'Ramaraja', 'Rambla', 'Rammetto One', 'Ranchers', 'Rancho', 'Ranga', 'Rasa', 'Rationale', 'Ravi Prakash', 'Redressed', 'Reem Kufi', 'Reenie Beanie', 'Revalia', 'Rhodium Libre', 'Ribeye', 'Ribeye Marrow', 'Righteous', 'Risque', 'Roboto', 'Roboto Condensed', 'Roboto Mono', 'Roboto Slab', 'Rochester', 'Rock Salt', 'Rokkitt', 'Romanesco', 'Ropa Sans', 'Rosario', 'Rosarivo', 'Rouge Script', 'Rozha One', 'Rubik', 'Rubik Mono One', 'Ruda', 'Rufina', 'Ruge Boogie', 'Ruluko', 'Rum Raisin', 'Ruslan Display', 'Russo One', 'Ruthie', 'Rye', 'Sacramento', 'Sahitya', 'Sail', 'Saira', 'Saira Condensed', 'Saira Extra Condensed', 'Saira Semi Condensed', 'Salsa', 'Sanchez', 'Sancreek', 'Sansita', 'Sarabun', 'Sarala', 'Sarina', 'Sarpanch', 'Satisfy', 'Sawarabi Gothic', 'Sawarabi Mincho', 'Scada', 'Scheherazade', 'Schoolbell', 'Scope One', 'Seaweed Script', 'Secular One', 'Sedgwick Ave', 'Sedgwick Ave Display', 'Sevillana', 'Seymour One', 'Shadows Into Light', 'Shadows Into Light Two', 'Shanti', 'Share', 'Share Tech', 'Share Tech Mono', 'Shojumaru', 'Short Stack', 'Shrikhand', 'Siemreap', 'Sigmar One', 'Signika', 'Signika Negative', 'Simonetta', 'Sintony', 'Sirin Stencil', 'Six Caps', 'Skranji', 'Slabo 13px', 'Slabo 27px', 'Slackey', 'Smokum', 'Smythe', 'Sniglet', 'Snippet', 'Snowburst One', 'Sofadi One', 'Sofia', 'Song Myung', 'Sonsie One', 'Sorts Mill Goudy', 'Source Code Pro', 'Source Sans Pro', 'Source Serif Pro', 'Space Mono', 'Special Elite', 'Spectral', 'Spectral SC', 'Spicy Rice', 'Spinnaker', 'Spirax', 'Squada One', 'Sree Krushnadevaraya', 'Sriracha', 'Srisakdi', 'Staatliches', 'Stalemate', 'Stalinist One', 'Stardos Stencil', 'Stint Ultra Condensed', 'Stint Ultra Expanded', 'Stoke', 'Strait', 'Stylish', 'Sue Ellen Francisco', 'Suez One', 'Sumana', 'Sunflower', 'Sunshiney', 'Supermercado One', 'Sura', 'Suranna', 'Suravaram', 'Suwannaphum', 'Swanky and Moo Moo', 'Syncopate', 'Tajawal', 'Tangerine', 'Taprom', 'Tauri', 'Taviraj', 'Teko', 'Telex', 'Tenali Ramakrishna', 'Tenor Sans', 'Text Me One', 'Thasadith', 'The Girl Next Door', 'Tienne', 'Tillana', 'Timmana', 'Tinos', 'Titan One', 'Titillium Web', 'Trade Winds', 'Trirong', 'Trocchi', 'Trochut', 'Trykker', 'Tulpen One', 'Ubuntu', 'Ubuntu Condensed', 'Ubuntu Mono', 'Ultra', 'Uncial Antiqua', 'Underdog', 'Unica One', 'UnifrakturCook', 'UnifrakturMaguntia', 'Unkempt', 'Unlock', 'Unna', 'VT323', 'Vampiro One', 'Varela', 'Varela Round', 'Vast Shadow', 'Vesper Libre', 'Vibur', 'Vidaloka', 'Viga', 'Voces', 'Volkhov', 'Vollkorn', 'Vollkorn SC', 'Voltaire', 'Waiting for the Sunrise', 'Wallpoet', 'Walter Turncoat', 'Warnes', 'Wellfleet', 'Wendy One', 'Wire One', 'Work Sans', 'Yanone Kaffeesatz', 'Yantramanav', 'Yatra One', 'Yellowtail', 'Yeon Sung', 'Yeseva One', 'Yesteryear', 'Yrsa', 'ZCOOL KuaiLe', 'ZCOOL QingKe HuangYou', 'ZCOOL XiaoWei', 'Zeyada', 'Zilla Slab', 'Zilla Slab Highlight']
2203
  }
2204
 
169
  pagelayer.$$('.pagelayer-elpd-header').hide();
170
  pagelayer.$$('.pagelayer-shortcodes').show();
171
  pagelayer.$$('.pagelayer-logo').show();
172
+ pagelayer.$$('.pagelayer-history').hide();
173
  pagelayer.$$('.pagelayer-elpd-body').removeAttr('pagelayer-element-id').empty();
174
  pagelayer_active = {};
175
  });
202
  // Open the properties
203
  function pagelayer_elpd_open(jEle){
204
 
205
+ // Set pagelayer history FALSE
206
+ pagelayer.history_action = false;
207
+
208
  // Set the position of the element and show
209
  //pagelayer_elpd.css('left', pagelayer_elpd_pos[0]);
210
  //pagelayer_elpd.css('top', pagelayer_elpd_pos[1]);
212
  pagelayer.$$('.pagelayer-elpd-header').show();
213
  pagelayer.$$('.pagelayer-logo').hide();
214
  pagelayer.$$('.pagelayer-shortcodes').hide();
215
+ pagelayer.$$('.pagelayer-history').hide();
216
 
217
  // The property holder
218
  var holder = pagelayer.$$('.pagelayer-elpd-body');
226
  // Set the header
227
  pagelayer.$$('.pagelayer-elpd-title').html('Edit '+pagelayer_shortcodes[el.tag]['name']);
228
 
229
+ // Set pagelayer history TRUE
230
+ pagelayer.history_action = true;
231
+
232
  };
233
 
234
  // Show the properties window
1608
 
1609
  pagelayer_icons = $.map($.map(document.styleSheets, function(s){
1610
 
1611
+ if(s.href && s.href.match(/font\-awesome\.min\.css/)){
1612
  return s;
1613
  }
1614
  return null;
1794
  var label_param = prop['item_label']['param'] || '';
1795
  var title = pagelayer_get_att(jEle, label_param) || prop['item_label']['default'];
1796
 
1797
+ // We need to get the correct value for select based params which are the label
1798
+ var child_props = pagelayer_shortcodes[prop.sc];
1799
+ for(var section in child_props){
1800
+ for(var _param in child_props[section]){
1801
+ if(child_props[section][_param]['type'] == 'select'){
1802
+ if(title in child_props[section][_param]['list']){
1803
+ title = child_props[section][_param]['list'][title];
1804
+ }
1805
+ }
1806
+ }
1807
+ }
1808
+
1809
  // Create the HTML
1810
  var holder = jQuery('<div class="pagelayer-elp-group-item" pagelayer-group-item-id="'+id+'">'+
1811
  '<div class="pagelayer-elp-group-item-head">'+
2213
  val = prop.c['val'].split(',');
2214
  }
2215
 
2216
+ var select = { 'style' : ['', 'Normal', 'Italic', 'Oblique'],
2217
  'weight' : ['', '100', '200', '300', '400', '500', '600', '700', '800', '900'],
2218
+ 'variant' : ['', 'Normal', 'Small-caps'],
2219
+ 'deco-line' : ['', 'None', 'Overline', 'Line-through', 'Underline', 'Underline Overline'],
2220
+ 'deco-style' : ['Solid', 'Double', 'Dotted', 'Dashed', 'Wavy'],
2221
+ 'transform' : ['', 'Capitalize', 'Uppercase', 'Lowercase'],
2222
  'fonts' : ['', 'ABeeZee', 'Abel', 'Abhaya Libre', 'Abril Fatface', 'Aclonica', 'Acme', 'Actor', 'Adamina', 'Advent Pro', 'Aguafina Script', 'Akronim', 'Aladin', 'Aldrich', 'Alef', 'Alegreya', 'Alegreya SC', 'Alegreya Sans', 'Alegreya Sans SC', 'Aleo', 'Alex Brush', 'Alfa Slab One', 'Alice', 'Alike', 'Alike Angular', 'Allan', 'Allerta', 'Allerta Stencil', 'Allura', 'Almendra', 'Almendra Display', 'Almendra SC', 'Amarante', 'Amaranth', 'Amatic SC', 'Amethysta', 'Amiko', 'Amiri', 'Amita', 'Anaheim', 'Andada', 'Andika', 'Angkor', 'Annie Use Your Telescope', 'Anonymous Pro', 'Antic', 'Antic Didone', 'Antic Slab', 'Anton', 'Arapey', 'Arbutus', 'Arbutus Slab', 'Architects Daughter', 'Archivo', 'Archivo Black', 'Archivo Narrow', 'Aref Ruqaa', 'Arima Madurai', 'Arimo', 'Arizonia', 'Armata', 'Arsenal', 'Artifika', 'Arvo', 'Arya', 'Asap', 'Asap Condensed', 'Asar', 'Asset', 'Assistant', 'Astloch', 'Asul', 'Athiti', 'Atma', 'Atomic Age', 'Aubrey', 'Audiowide', 'Autour One', 'Average', 'Average Sans', 'Averia Gruesa Libre', 'Averia Libre', 'Averia Sans Libre', 'Averia Serif Libre', 'B612', 'B612 Mono', 'Bad Script', 'Bahiana', 'Bai Jamjuree', 'Baloo', 'Baloo Bhai', 'Baloo Bhaijaan', 'Baloo Bhaina', 'Baloo Chettan', 'Baloo Da', 'Baloo Paaji', 'Baloo Tamma', 'Baloo Tammudu', 'Baloo Thambi', 'Balthazar', 'Bangers', 'Barlow', 'Barlow Condensed', 'Barlow Semi Condensed', 'Barrio', 'Basic', 'Battambang', 'Baumans', 'Bayon', 'Belgrano', 'Bellefair', 'Belleza', 'BenchNine', 'Bentham', 'Berkshire Swash', 'Bevan', 'Bigelow Rules', 'Bigshot One', 'Bilbo', 'Bilbo Swash Caps', 'BioRhyme', 'BioRhyme Expanded', 'Biryani', 'Bitter', 'Black And White Picture', 'Black Han Sans', 'Black Ops One', 'Bokor', 'Bonbon', 'Boogaloo', 'Bowlby One', 'Bowlby One SC', 'Brawler', 'Bree Serif', 'Bubblegum Sans', 'Bubbler One', 'Buda', 'Buenard', 'Bungee', 'Bungee Hairline', 'Bungee Inline', 'Bungee Outline', 'Bungee Shade', 'Butcherman', 'Butterfly Kids', 'Cabin', 'Cabin Condensed', 'Cabin Sketch', 'Caesar Dressing', 'Cagliostro', 'Cairo', 'Calligraffitti', 'Cambay', 'Cambo', 'Candal', 'Cantarell', 'Cantata One', 'Cantora One', 'Capriola', 'Cardo', 'Carme', 'Carrois Gothic', 'Carrois Gothic SC', 'Carter One', 'Catamaran', 'Caudex', 'Caveat', 'Caveat Brush', 'Cedarville Cursive', 'Ceviche One', 'Chakra Petch', 'Changa', 'Changa One', 'Chango', 'Charm', 'Charmonman', 'Chathura', 'Chau Philomene One', 'Chela One', 'Chelsea Market', 'Chenla', 'Cherry Cream Soda', 'Cherry Swash', 'Chewy', 'Chicle', 'Chivo', 'Chonburi', 'Cinzel', 'Cinzel Decorative', 'Clicker Script', 'Coda', 'Coda Caption', 'Codystar', 'Coiny', 'Combo', 'Comfortaa', 'Coming Soon', 'Concert One', 'Condiment', 'Content', 'Contrail One', 'Convergence', 'Cookie', 'Copse', 'Corben', 'Cormorant', 'Cormorant Garamond', 'Cormorant Infant', 'Cormorant SC', 'Cormorant Unicase', 'Cormorant Upright', 'Courgette', 'Cousine', 'Coustard', 'Covered By Your Grace', 'Crafty Girls', 'Creepster', 'Crete Round', 'Crimson Text', 'Croissant One', 'Crushed', 'Cuprum', 'Cute Font', 'Cutive', 'Cutive Mono', 'Damion', 'Dancing Script', 'Dangrek', 'David Libre', 'Dawning of a New Day', 'Days One', 'Dekko', 'Delius', 'Delius Swash Caps', 'Delius Unicase', 'Della Respira', 'Denk One', 'Devonshire', 'Dhurjati', 'Didact Gothic', 'Diplomata', 'Diplomata SC', 'Do Hyeon', 'Dokdo', 'Domine', 'Donegal One', 'Doppio One', 'Dorsa', 'Dosis', 'Dr Sugiyama', 'Duru Sans', 'Dynalight', 'EB Garamond', 'Eagle Lake', 'East Sea Dokdo', 'Eater', 'Economica', 'Eczar', 'El Messiri', 'Electrolize', 'Elsie', 'Elsie Swash Caps', 'Emblema One', 'Emilys Candy', 'Encode Sans', 'Encode Sans Condensed', 'Encode Sans Expanded', 'Encode Sans Semi Condensed', 'Encode Sans Semi Expanded', 'Engagement', 'Englebert', 'Enriqueta', 'Erica One', 'Esteban', 'Euphoria Script', 'Ewert', 'Exo', 'Exo 2', 'Expletus Sans', 'Fahkwang', 'Fanwood Text', 'Farsan', 'Fascinate', 'Fascinate Inline', 'Faster One', 'Fasthand', 'Fauna One', 'Faustina', 'Federant', 'Federo', 'Felipa', 'Fenix', 'Finger Paint', 'Fira Mono', 'Fira Sans', 'Fira Sans Condensed', 'Fira Sans Extra Condensed', 'Fjalla One', 'Fjord One', 'Flamenco', 'Flavors', 'Fondamento', 'Fontdiner Swanky', 'Forum', 'Francois One', 'Frank Ruhl Libre', 'Freckle Face', 'Fredericka the Great', 'Fredoka One', 'Freehand', 'Fresca', 'Frijole', 'Fruktur', 'Fugaz One', 'GFS Didot', 'GFS Neohellenic', 'Gabriela', 'Gaegu', 'Gafata', 'Galada', 'Galdeano', 'Galindo', 'Gamja Flower', 'Gentium Basic', 'Gentium Book Basic', 'Geo', 'Geostar', 'Geostar Fill', 'Germania One', 'Gidugu', 'Gilda Display', 'Give You Glory', 'Glass Antiqua', 'Glegoo', 'Gloria Hallelujah', 'Goblin One', 'Gochi Hand', 'Gorditas', 'Gothic A1', 'Goudy Bookletter 1911', 'Graduate', 'Grand Hotel', 'Gravitas One', 'Great Vibes', 'Griffy', 'Gruppo', 'Gudea', 'Gugi', 'Gurajada', 'Habibi', 'Halant', 'Hammersmith One', 'Hanalei', 'Hanalei Fill', 'Handlee', 'Hanuman', 'Happy Monkey', 'Harmattan', 'Headland One', 'Heebo', 'Henny Penny', 'Herr Von Muellerhoff', 'Hi Melody', 'Hind', 'Hind Guntur', 'Hind Madurai', 'Hind Siliguri', 'Hind Vadodara', 'Holtwood One SC', 'Homemade Apple', 'Homenaje', 'IBM Plex Mono', 'IBM Plex Sans', 'IBM Plex Sans Condensed', 'IBM Plex Serif', 'IM Fell DW Pica', 'IM Fell DW Pica SC', 'IM Fell Double Pica', 'IM Fell Double Pica SC', 'IM Fell English', 'IM Fell English SC', 'IM Fell French Canon', 'IM Fell French Canon SC', 'IM Fell Great Primer', 'IM Fell Great Primer SC', 'Iceberg', 'Iceland', 'Imprima', 'Inconsolata', 'Inder', 'Indie Flower', 'Inika', 'Inknut Antiqua', 'Irish Grover', 'Istok Web', 'Italiana', 'Italianno', 'Itim', 'Jacques Francois', 'Jacques Francois Shadow', 'Jaldi', 'Jim Nightshade', 'Jockey One', 'Jolly Lodger', 'Jomhuria', 'Josefin Sans', 'Josefin Slab', 'Joti One', 'Jua', 'Judson', 'Julee', 'Julius Sans One', 'Junge', 'Jura', 'Just Another Hand', 'Just Me Again Down Here', 'K2D', 'Kadwa', 'Kalam', 'Kameron', 'Kanit', 'Kantumruy', 'Karla', 'Karma', 'Katibeh', 'Kaushan Script', 'Kavivanar', 'Kavoon', 'Kdam Thmor', 'Keania One', 'Kelly Slab', 'Kenia', 'Khand', 'Khmer', 'Khula', 'Kirang Haerang', 'Kite One', 'Knewave', 'KoHo', 'Kodchasan', 'Kosugi', 'Kosugi Maru', 'Kotta One', 'Koulen', 'Kranky', 'Kreon', 'Kristi', 'Krona One', 'Krub', 'Kumar One', 'Kumar One Outline', 'Kurale', 'La Belle Aurore', 'Laila', 'Lakki Reddy', 'Lalezar', 'Lancelot', 'Lateef', 'Lato', 'League Script', 'Leckerli One', 'Ledger', 'Lekton', 'Lemon', 'Lemonada', 'Libre Barcode 128', 'Libre Barcode 128 Text', 'Libre Barcode 39', 'Libre Barcode 39 Extended', 'Libre Barcode 39 Extended Text', 'Libre Barcode 39 Text', 'Libre Baskerville', 'Libre Franklin', 'Life Savers', 'Lilita One', 'Lily Script One', 'Limelight', 'Linden Hill', 'Lobster', 'Lobster Two', 'Londrina Outline', 'Londrina Shadow', 'Londrina Sketch', 'Londrina Solid', 'Lora', 'Love Ya Like A Sister', 'Loved by the King', 'Lovers Quarrel', 'Luckiest Guy', 'Lusitana', 'Lustria', 'M PLUS 1p', 'M PLUS Rounded 1c', 'Macondo', 'Macondo Swash Caps', 'Mada', 'Magra', 'Maiden Orange', 'Maitree', 'Major Mono Display', 'Mako', 'Mali', 'Mallanna', 'Mandali', 'Manuale', 'Marcellus', 'Marcellus SC', 'Marck Script', 'Margarine', 'Markazi Text', 'Marko One', 'Marmelad', 'Martel', 'Martel Sans', 'Marvel', 'Mate', 'Mate SC', 'Maven Pro', 'McLaren', 'Meddon', 'MedievalSharp', 'Medula One', 'Meera Inimai', 'Megrim', 'Meie Script', 'Merienda', 'Merienda One', 'Merriweather', 'Merriweather Sans', 'Metal', 'Metal Mania', 'Metamorphous', 'Metrophobic', 'Michroma', 'Milonga', 'Miltonian', 'Miltonian Tattoo', 'Mina', 'Miniver', 'Miriam Libre', 'Mirza', 'Miss Fajardose', 'Mitr', 'Modak', 'Modern Antiqua', 'Mogra', 'Molengo', 'Molle', 'Monda', 'Monofett', 'Monoton', 'Monsieur La Doulaise', 'Montaga', 'Montez', 'Montserrat', 'Montserrat Alternates', 'Montserrat Subrayada', 'Moul', 'Moulpali', 'Mountains of Christmas', 'Mouse Memoirs', 'Mr Bedfort', 'Mr Dafoe', 'Mr De Haviland', 'Mrs Saint Delafield', 'Mrs Sheppards', 'Mukta', 'Mukta Mahee', 'Mukta Malar', 'Mukta Vaani', 'Muli', 'Mystery Quest', 'NTR', 'Nanum Brush Script', 'Nanum Gothic', 'Nanum Gothic Coding', 'Nanum Myeongjo', 'Nanum Pen Script', 'Neucha', 'Neuton', 'New Rocker', 'News Cycle', 'Niconne', 'Niramit', 'Nixie One', 'Nobile', 'Nokora', 'Norican', 'Nosifer', 'Notable', 'Nothing You Could Do', 'Noticia Text', 'Noto Sans', 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans SC', 'Noto Sans TC', 'Noto Serif', 'Noto Serif JP', 'Noto Serif KR', 'Noto Serif SC', 'Noto Serif TC', 'Nova Cut', 'Nova Flat', 'Nova Mono', 'Nova Oval', 'Nova Round', 'Nova Script', 'Nova Slim', 'Nova Square', 'Numans', 'Nunito', 'Nunito Sans', 'Odor Mean Chey', 'Offside', 'Old Standard TT', 'Oldenburg', 'Oleo Script', 'Oleo Script Swash Caps', 'Open Sans', 'Open Sans Condensed', 'Oranienbaum', 'Orbitron', 'Oregano', 'Orienta', 'Original Surfer', 'Oswald', 'Over the Rainbow', 'Overlock', 'Overlock SC', 'Overpass', 'Overpass Mono', 'Ovo', 'Oxygen', 'Oxygen Mono', 'PT Mono', 'PT Sans', 'PT Sans Caption', 'PT Sans Narrow', 'PT Serif', 'PT Serif Caption', 'Pacifico', 'Padauk', 'Palanquin', 'Palanquin Dark', 'Pangolin', 'Paprika', 'Parisienne', 'Passero One', 'Passion One', 'Pathway Gothic One', 'Patrick Hand', 'Patrick Hand SC', 'Pattaya', 'Patua One', 'Pavanam', 'Paytone One', 'Peddana', 'Peralta', 'Permanent Marker', 'Petit Formal Script', 'Petrona', 'Philosopher', 'Piedra', 'Pinyon Script', 'Pirata One', 'Plaster', 'Play', 'Playball', 'Playfair Display', 'Playfair Display SC', 'Podkova', 'Poiret One', 'Poller One', 'Poly', 'Pompiere', 'Pontano Sans', 'Poor Story', 'Poppins', 'Port Lligat Sans', 'Port Lligat Slab', 'Pragati Narrow', 'Prata', 'Preahvihear', 'Press Start 2P', 'Pridi', 'Princess Sofia', 'Prociono', 'Prompt', 'Prosto One', 'Proza Libre', 'Puritan', 'Purple Purse', 'Quando', 'Quantico', 'Quattrocento', 'Quattrocento Sans', 'Questrial', 'Quicksand', 'Quintessential', 'Qwigley', 'Racing Sans One', 'Radley', 'Rajdhani', 'Rakkas', 'Raleway', 'Raleway Dots', 'Ramabhadra', 'Ramaraja', 'Rambla', 'Rammetto One', 'Ranchers', 'Rancho', 'Ranga', 'Rasa', 'Rationale', 'Ravi Prakash', 'Redressed', 'Reem Kufi', 'Reenie Beanie', 'Revalia', 'Rhodium Libre', 'Ribeye', 'Ribeye Marrow', 'Righteous', 'Risque', 'Roboto', 'Roboto Condensed', 'Roboto Mono', 'Roboto Slab', 'Rochester', 'Rock Salt', 'Rokkitt', 'Romanesco', 'Ropa Sans', 'Rosario', 'Rosarivo', 'Rouge Script', 'Rozha One', 'Rubik', 'Rubik Mono One', 'Ruda', 'Rufina', 'Ruge Boogie', 'Ruluko', 'Rum Raisin', 'Ruslan Display', 'Russo One', 'Ruthie', 'Rye', 'Sacramento', 'Sahitya', 'Sail', 'Saira', 'Saira Condensed', 'Saira Extra Condensed', 'Saira Semi Condensed', 'Salsa', 'Sanchez', 'Sancreek', 'Sansita', 'Sarabun', 'Sarala', 'Sarina', 'Sarpanch', 'Satisfy', 'Sawarabi Gothic', 'Sawarabi Mincho', 'Scada', 'Scheherazade', 'Schoolbell', 'Scope One', 'Seaweed Script', 'Secular One', 'Sedgwick Ave', 'Sedgwick Ave Display', 'Sevillana', 'Seymour One', 'Shadows Into Light', 'Shadows Into Light Two', 'Shanti', 'Share', 'Share Tech', 'Share Tech Mono', 'Shojumaru', 'Short Stack', 'Shrikhand', 'Siemreap', 'Sigmar One', 'Signika', 'Signika Negative', 'Simonetta', 'Sintony', 'Sirin Stencil', 'Six Caps', 'Skranji', 'Slabo 13px', 'Slabo 27px', 'Slackey', 'Smokum', 'Smythe', 'Sniglet', 'Snippet', 'Snowburst One', 'Sofadi One', 'Sofia', 'Song Myung', 'Sonsie One', 'Sorts Mill Goudy', 'Source Code Pro', 'Source Sans Pro', 'Source Serif Pro', 'Space Mono', 'Special Elite', 'Spectral', 'Spectral SC', 'Spicy Rice', 'Spinnaker', 'Spirax', 'Squada One', 'Sree Krushnadevaraya', 'Sriracha', 'Srisakdi', 'Staatliches', 'Stalemate', 'Stalinist One', 'Stardos Stencil', 'Stint Ultra Condensed', 'Stint Ultra Expanded', 'Stoke', 'Strait', 'Stylish', 'Sue Ellen Francisco', 'Suez One', 'Sumana', 'Sunflower', 'Sunshiney', 'Supermercado One', 'Sura', 'Suranna', 'Suravaram', 'Suwannaphum', 'Swanky and Moo Moo', 'Syncopate', 'Tajawal', 'Tangerine', 'Taprom', 'Tauri', 'Taviraj', 'Teko', 'Telex', 'Tenali Ramakrishna', 'Tenor Sans', 'Text Me One', 'Thasadith', 'The Girl Next Door', 'Tienne', 'Tillana', 'Timmana', 'Tinos', 'Titan One', 'Titillium Web', 'Trade Winds', 'Trirong', 'Trocchi', 'Trochut', 'Trykker', 'Tulpen One', 'Ubuntu', 'Ubuntu Condensed', 'Ubuntu Mono', 'Ultra', 'Uncial Antiqua', 'Underdog', 'Unica One', 'UnifrakturCook', 'UnifrakturMaguntia', 'Unkempt', 'Unlock', 'Unna', 'VT323', 'Vampiro One', 'Varela', 'Varela Round', 'Vast Shadow', 'Vesper Libre', 'Vibur', 'Vidaloka', 'Viga', 'Voces', 'Volkhov', 'Vollkorn', 'Vollkorn SC', 'Voltaire', 'Waiting for the Sunrise', 'Wallpoet', 'Walter Turncoat', 'Warnes', 'Wellfleet', 'Wendy One', 'Wire One', 'Work Sans', 'Yanone Kaffeesatz', 'Yantramanav', 'Yatra One', 'Yellowtail', 'Yeon Sung', 'Yeseva One', 'Yesteryear', 'Yrsa', 'ZCOOL KuaiLe', 'ZCOOL QingKe HuangYou', 'ZCOOL XiaoWei', 'Zeyada', 'Zilla Slab', 'Zilla Slab Highlight']
2223
  }
2224
 
languages/en.json CHANGED
@@ -236,11 +236,11 @@
236
  "ribbon_text_color": "Color",
237
  "currency_style": "Currency",
238
  "price_style": "Price",
239
- "title_style": "Title",
240
  "period_style": "Period",
241
  "header_style": "Header",
242
  "feature_style": "Feature",
243
- "button_style": "Button",
244
  "ribbon_style": "Ribbon",
245
  "label": "Label",
246
  "customize_style_fields": "Customize Style for Fields",
@@ -882,7 +882,7 @@
882
  "testimonial_cite_title_size_desc": "Enter Author Designation",
883
  "testimonial_url_label": "Link",
884
  "testimonial_url_desc": "Author URL",
885
- "image_position": "Position",
886
  "aside": "Aside",
887
  "testimonial_alignment_label": "Alignment",
888
  "testimonial_border_color_label": "Color",
@@ -976,5 +976,87 @@
976
  "content_pos" : "Content V-Align",
977
  "color_hover" : "Color Hover",
978
  "col_width" : "Column Width",
979
- "link_settings" : "Link"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
980
  }
236
  "ribbon_text_color": "Color",
237
  "currency_style": "Currency",
238
  "price_style": "Price",
239
+ "title_style": "Title Style",
240
  "period_style": "Period",
241
  "header_style": "Header",
242
  "feature_style": "Feature",
243
+ "button_style": "Button Style",
244
  "ribbon_style": "Ribbon",
245
  "label": "Label",
246
  "customize_style_fields": "Customize Style for Fields",
882
  "testimonial_cite_title_size_desc": "Enter Author Designation",
883
  "testimonial_url_label": "Link",
884
  "testimonial_url_desc": "Author URL",
885
+ "position": "Position",
886
  "aside": "Aside",
887
  "testimonial_alignment_label": "Alignment",
888
  "testimonial_border_color_label": "Color",
976
  "content_pos" : "Content V-Align",
977
  "color_hover" : "Color Hover",
978
  "col_width" : "Column Width",
979
+ "link_settings" : "Link",
980
+ "search_form" : "Search Form",
981
+ "form_type" : "Form Type",
982
+ "button_type" : "Button Type",
983
+ "button_text" : "Button Text",
984
+ "button_icon" : "Button Icon",
985
+ "font_size" : "Font Size",
986
+ "post_nav" : "Post Navigation",
987
+ "input_style" : "Input Style",
988
+ "prev_label" : "Previous Label",
989
+ "next_label" : "Next Label",
990
+ "arrows_list" : "Arrows List",
991
+ "in_same_term" : "Same Taxonomy Term",
992
+ "Post_taxonomy" : "Post Taxonomy",
993
+ "post_type" : "Post Type",
994
+ "post_commment" : "Post Comments",
995
+ "theme_commment" : "Theme Comments",
996
+ "post_info" : "Post Info",
997
+ "post_info_list" : "Post Info List",
998
+ "post_list" : "Post List",
999
+ "post_title" : "Post Title",
1000
+ "classic" : "Classic",
1001
+ "full_screen" : "Full Screen",
1002
+ "placeholder" : "Place Holder",
1003
+ "focus" : "Focus",
1004
+ "width" : "Width",
1005
+ "separator" : "Separator",
1006
+ "skin" : "Skin",
1007
+ "current" : "Current",
1008
+ "author" : "Author",
1009
+ "date" : "Date",
1010
+ "time" : "Time",
1011
+ "comments" : "Comments",
1012
+ "terms" : "Terms",
1013
+ "date_format" : "Date Format",
1014
+ "time_format" : "Time Format",
1015
+ "custom_date_format" : "Custom Date Format",
1016
+ "custom_time_format" : "Custom Time Format",
1017
+ "before" : "Before",
1018
+ "custom_link" : "Custom Link",
1019
+ "primary_menu" : "Primary Menu",
1020
+ "select_menu" : "Select Menu",
1021
+ "icon_list" : "Icon List",
1022
+ "dropdown" : "Dropdown",
1023
+ "pointer" : "Pointer",
1024
+ "underline" : "Underline",
1025
+ "overline" : "Overline",
1026
+ "double_line" : "Double Line",
1027
+ "toggle_style" : "Toggle Style",
1028
+ "submenu_style" : "Submenu Style",
1029
+ "menu_style" : "Menu Style",
1030
+ "left_margin" : "Left Margin",
1031
+ "vertical_padding" : "Vertical Padding",
1032
+ "horizontal_padding" : "Horizontal Padding",
1033
+ "plus" : "Plus",
1034
+ "arrow_down" : "Arrow Down",
1035
+ "caret_down" : "Caret Down",
1036
+ "sbmenu_indicator" : "Submenu Indicator",
1037
+ "lower_alpha" : "Lower Alpha",
1038
+ "lower_roman" : "Lower Roman",
1039
+ "upper_roman" : "Upper Roman",
1040
+ "upper_alpha" : "Upper Alpha",
1041
+ "inherit" : "Inherit",
1042
+ "decimal" : "Decimal",
1043
+ "list_style" : "List Style",
1044
+ "slide" : "Slide",
1045
+ "drop_in" : "Drop In",
1046
+ "label_style" : "Label Style",
1047
+ "separator_style" : "Separator Style",
1048
+ "theme_tamplate" : "Theme Template",
1049
+ "Drop_out" : "Drop Out",
1050
+ "no_tag" : "No Tag",
1051
+ "no_widget_class" : "No Widget Class",
1052
+ "invalid_post_id" : "Invalid post ID",
1053
+ "post_update_err" : "Unable to update the Post content for some reason",
1054
+ "post_update_success" : "Post Content was updated successfully!",
1055
+ "no_widget_area" : "No such Widget Area !",
1056
+ "invalid_revision" : "Invalid revision",
1057
+ "rev_load_error" : "Unable to load the Post revision content for some reason",
1058
+ "rev_load_success" : "Post revision was loaded successfully!",
1059
+ "access_denied" : "Access denied.",
1060
+ "delete_rev_error" : "Can't delete this revision.",
1061
+ "delete_rev_success" : "Revision was deleted Successfully"
1062
  }
main/ajax.php ADDED
@@ -0,0 +1,529 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ //////////////////////////////////////////////////////////////
4
+ //===========================================================
5
+ // ajax.php
6
+ //===========================================================
7
+ // PAGELAYER
8
+ // Inspired by the DESIRE to be the BEST OF ALL
9
+ // ----------------------------------------------------------
10
+ // Started by: Pulkit Gupta
11
+ // Date: 23rd Jan 2017
12
+ // Time: 23:00 hrs
13
+ // Site: http://pagelayer.com/wordpress (PAGELAYER)
14
+ // ----------------------------------------------------------
15
+ // Please Read the Terms of use at http://pagelayer.com/tos
16
+ // ----------------------------------------------------------
17
+ //===========================================================
18
+ // (c)Pagelayer Team
19
+ //===========================================================
20
+ //////////////////////////////////////////////////////////////
21
+
22
+ // Are we being accessed directly ?
23
+ if(!defined('PAGELAYER_VERSION')) {
24
+ exit('Hacking Attempt !');
25
+ }
26
+
27
+
28
+ // The ajax handler
29
+ add_action('wp_ajax_pagelayer_wp_widget', 'pagelayer_wp_widget_ajax');
30
+ function pagelayer_wp_widget_ajax(){
31
+
32
+ global $pagelayer;
33
+
34
+ // Some AJAX security
35
+ check_ajax_referer('pagelayer_ajax', 'nonce');
36
+
37
+ pagelayer_load_shortcodes();
38
+
39
+ header('Content-Type: application/json');
40
+
41
+ $ret = [];
42
+ $tag = @$_POST['tag'];
43
+ //pagelayer_print($pagelayer->shortcodes[$tag]);
44
+
45
+ // No tag ?
46
+ if(empty($pagelayer->shortcodes[$tag])){
47
+ $ret['error'][] = __pl('no_tag');
48
+ echo json_encode($ret);
49
+ wp_die();
50
+ }
51
+
52
+ // Include the widgets
53
+ include_once(ABSPATH . 'wp-admin/includes/widgets.php');
54
+
55
+ $class = $pagelayer->shortcodes[$tag]['widget'];
56
+
57
+ // Check the widget class exists ?
58
+ if(empty($class) || !class_exists($class)){
59
+ $ret['error'][] = __pl('no_widget_class');
60
+ echo json_encode($ret);
61
+ wp_die();
62
+ }
63
+
64
+ $instance = [];
65
+ $widget = new $class();
66
+ $widget->_set('pagelayer-widget-1234567890');
67
+
68
+ // Is there any existing data ?
69
+ if(!empty($_POST['widget_data'])){
70
+ $json = json_decode(stripslashes($_POST['widget_data']), true);
71
+ //pagelayer_print($json);die();
72
+ if(!empty($json)){
73
+ $instance = $json;
74
+ }
75
+ }
76
+
77
+ // Are there any form values ?
78
+ if(!empty($_POST['values'])){
79
+ parse_str(stripslashes($_POST['values']), $data);
80
+ //pagelayer_print($data);die();
81
+
82
+ // Any data ?
83
+ if(!empty($data)){
84
+
85
+ // First key is useless
86
+ $data = current($data);
87
+
88
+ // Do we still have valid data ?
89
+ if(!empty($data)){
90
+
91
+ // 2nd key is useless and just over-ride instance
92
+ $instance = current($data);
93
+
94
+ }
95
+ }
96
+ }
97
+
98
+ // Get the form
99
+ ob_start();
100
+ $widget->form($instance);
101
+ $ret['form'] = ob_get_contents();
102
+ ob_end_clean();
103
+
104
+ // Get the html
105
+ ob_start();
106
+ $widget->widget([], $instance);
107
+ $ret['html'] = ob_get_contents();
108
+ ob_end_clean();
109
+
110
+ // Widget data to set
111
+ if(!empty($instance)){
112
+ $ret['widget_data'] = $instance;
113
+ }
114
+
115
+ echo json_encode($ret);
116
+ wp_die();
117
+
118
+ }
119
+
120
+ // Update Post content
121
+ add_action('wp_ajax_pagelayer_save_content', 'pagelayer_save_content');
122
+ function pagelayer_save_content(){
123
+
124
+ // Some AJAX security
125
+ check_ajax_referer('pagelayer_ajax', 'nonce');
126
+
127
+ $content = $_POST['pagelayer_update_content'];
128
+
129
+ $postID = (int) $_GET['postID'];
130
+
131
+ if(empty($postID)){
132
+ $msg['error'] = __pl('invalid_post_id');
133
+ }
134
+
135
+ // Check if the post exists
136
+
137
+ if(!empty($postID) && !empty($content)){
138
+
139
+ $post = array(
140
+ 'ID' => $postID,
141
+ 'post_content' => $content,
142
+ );
143
+
144
+ // Update the post into the database
145
+ wp_update_post($post);
146
+
147
+ if (is_wp_error($postID)) {
148
+ $msg['error'] = __pl('post_update_err');
149
+ }else{
150
+ $msg['success'] = __pl('post_update_success');
151
+ }
152
+
153
+ }else{
154
+ $msg['error'] = __pl('post_update_err');
155
+ }
156
+
157
+ echo json_encode($msg);
158
+ wp_die();
159
+
160
+ }
161
+
162
+ // Shortcodes Widget Handler
163
+ add_action('wp_ajax_pagelayer_do_shortcodes', 'pagelayer_do_shortcodes');
164
+ function pagelayer_do_shortcodes(){
165
+
166
+ // Some AJAX security
167
+ check_ajax_referer('pagelayer_ajax', 'nonce');
168
+
169
+ $data = '';
170
+ if(isset($_REQUEST['shortcode_data'])){
171
+ $data = stripslashes($_REQUEST['shortcode_data']);
172
+ }
173
+
174
+ echo do_shortcode($data);
175
+ wp_die();
176
+
177
+ }
178
+
179
+ // Get the Site Title
180
+ add_action('wp_ajax_pagelayer_fetch_site_title', 'pagelayer_fetch_site_title');
181
+ function pagelayer_fetch_site_title(){
182
+
183
+ // Some AJAX security
184
+ check_ajax_referer('pagelayer_ajax', 'nonce');
185
+
186
+ echo get_bloginfo('name');
187
+ wp_die();
188
+ }
189
+
190
+ // Update the Site Title
191
+ add_action('wp_ajax_pagelayer_update_site_title', 'pagelayer_update_site_title');
192
+ function pagelayer_update_site_title(){
193
+ global $wpdb;
194
+
195
+ // Some AJAX security
196
+ check_ajax_referer('pagelayer_ajax', 'nonce');
197
+
198
+ $site_title = $_POST['site_title'];
199
+
200
+ update_option('blogname', $site_title);
201
+
202
+ $wpdb->query("UPDATE `sm_sitemeta`
203
+ SET meta_value = '".$site_title."'
204
+ WHERE meta_key = 'site_name'");
205
+ wp_die();
206
+ }
207
+
208
+ // Show the SideBars
209
+ add_action('wp_ajax_pagelayer_fetch_sidebar', 'pagelayer_fetch_sidebar');
210
+ function pagelayer_fetch_sidebar(){
211
+
212
+ global $wp_registered_sidebars;
213
+
214
+ // Some AJAX security
215
+ check_ajax_referer('pagelayer_ajax', 'nonce');
216
+
217
+ // Create a list
218
+ $pagelayer_wp_widgets = array();
219
+
220
+ foreach($wp_registered_sidebars as $v){
221
+ $pagelayer_wp_widgets[$v['id']] = $v['name'];
222
+ }
223
+
224
+ $id = @$_REQUEST['sidebar'];
225
+
226
+ if(function_exists('dynamic_sidebar') && !empty($pagelayer_wp_widgets[$id])) {
227
+ ob_start();
228
+ dynamic_sidebar($id);
229
+ $result = ob_get_clean();
230
+ }else{
231
+ $result = __pl('no_widget_area');
232
+ }
233
+
234
+ echo $result;
235
+ wp_die();
236
+
237
+ }
238
+
239
+ // Show the primary menu !
240
+ add_action('wp_ajax_pagelayer_fetch_primary_menu', 'pagelayer_fetch_primary_menu');
241
+ function pagelayer_fetch_primary_menu(){
242
+
243
+ // Some AJAX security
244
+ check_ajax_referer('pagelayer_ajax', 'nonce');
245
+
246
+ if(isset($_POST['nav_list'])){
247
+ echo wp_nav_menu([
248
+ 'menu' => wp_get_nav_menu_object($_POST['nav_list']),
249
+ 'menu_id' => $_POST["nav_list"],
250
+ //'theme_location' => 'primary',
251
+ //'menu_class' => 'primary-menu',
252
+ ]);
253
+ }
254
+
255
+ wp_die();
256
+ }
257
+
258
+ // Get post revision
259
+ add_action('wp_ajax_pagelayer_get_revision', 'pagelayer_get_revision');
260
+ function pagelayer_get_revision(){
261
+
262
+ // Some AJAX security
263
+ check_ajax_referer('pagelayer_ajax', 'nonce');
264
+
265
+ $postID = (int) $_GET['postID'];
266
+ $post_revisions = array();
267
+
268
+ if(empty($postID)){
269
+ $post_revisions['error'] = __pl('invalid_post_id');
270
+ }else{
271
+ $post_revisions = pagelayer_get_post_revision_by_id($postID);
272
+ }
273
+
274
+ echo json_encode($post_revisions);
275
+ wp_die();
276
+ }
277
+
278
+ // Get post revision
279
+ add_action('wp_ajax_pagelayer_apply_revision', 'pagelayer_apply_revision');
280
+ function pagelayer_apply_revision(){
281
+
282
+ // Some AJAX security
283
+ check_ajax_referer('pagelayer_ajax', 'nonce');
284
+
285
+ $revisionID = (int) $_REQUEST['revisionID'];
286
+ $post_data = array();
287
+
288
+ if(empty($revisionID)){
289
+ $post_data['error'] = __pl('invalid_post_id');
290
+ }else{
291
+
292
+ $post = get_post( $revisionID );
293
+
294
+ if ( empty( $post ) ) {
295
+ $post_data['error'] = __pl('invalid_revision');
296
+ echo json_encode($post_data);
297
+ return false;
298
+ }
299
+
300
+ // Need to make the reviews post global
301
+ $GLOBALS['post'] = $post;
302
+
303
+ // Need to reload the shortcodes
304
+ pagelayer_load_shortcodes();
305
+
306
+ $post_data['content'] = do_shortcode($post->post_content);
307
+
308
+ if (is_wp_error($postID)) {
309
+ $post_data['error'] = __pl('rev_load_error');
310
+ }else{
311
+ $post_data['success'] = __pl('rev_load_success');
312
+ }
313
+
314
+ wp_reset_postdata();
315
+ }
316
+
317
+ echo json_encode($post_data);
318
+ wp_die();
319
+ }
320
+
321
+ // Get post revision
322
+ add_action('wp_ajax_pagelayer_delete_revision', 'pagelayer_delete_revision');
323
+ function pagelayer_delete_revision() {
324
+
325
+ // Some AJAX security
326
+ check_ajax_referer('pagelayer_ajax', 'nonce');
327
+
328
+ $revisionID = (int) $_REQUEST['revisionID'];
329
+
330
+ if(empty($revisionID)){
331
+ $post_data['error'] = __pl('invalid_post_id');
332
+ }else{
333
+
334
+ $revision = get_post( $revisionID );
335
+
336
+ if ( empty( $revision ) ) {
337
+ $post_data['error'] = __pl('invalid_revision');
338
+ }else{
339
+
340
+ if ( ! current_user_can( 'delete_post', $revision->ID ) ) {
341
+ $post_data['error'] = __pl('access_denied');
342
+ echo json_encode($post_data);
343
+ return false;
344
+ }
345
+
346
+ $deleted = wp_delete_post_revision( $revision->ID );
347
+
348
+ if ( ! $deleted || is_wp_error( $deleted ) ) {
349
+ $post_data['error'] = __pl('delete_rev_error');
350
+ }else{
351
+ $post_data['success'] = __pl('delete_rev_success');
352
+ }
353
+ }
354
+ }
355
+
356
+ echo json_encode($post_data);
357
+ wp_die();
358
+ }
359
+
360
+ // Get post revision
361
+ add_action('wp_ajax_pagelayer_post_nav', 'pagelayer_post_nav');
362
+ function pagelayer_post_nav() {
363
+
364
+ // Some AJAX security
365
+ check_ajax_referer('pagelayer_ajax', 'nonce');
366
+
367
+ if(!isset($_REQUEST['data']) || !isset($_REQUEST['postID'])){
368
+ return;
369
+ }
370
+
371
+ $el['atts'] = $_REQUEST['data'];
372
+
373
+ $post = get_post($_REQUEST['postID']);
374
+
375
+ // Need to make this post global
376
+ $GLOBALS['post'] = $post;
377
+
378
+ $in_same_term = false;
379
+ $taxonomies = 'category';
380
+ $title = '';
381
+ $arrows_list = $el['atts']['arrows_list'];
382
+
383
+ if($el['atts']['in_same_term']){
384
+ $in_same_term = true;
385
+ $taxonomies = $el['atts']['taxonomies'];
386
+ }
387
+
388
+ if($el['atts']['post_title']){
389
+ $title = '<span class="pagelayer-post-nav-title">%title</span>';
390
+ }
391
+
392
+ $next_label = '<span class="pagelayer-next-holder">
393
+ <span class="pagelayer-post-nav-link"> '.$el["atts"]["next_label"].'</span>'.$title.'
394
+ </span>
395
+ <span class="pagelayer-post-nav-icon fa fa-'.$arrows_list.'-right"></span>';
396
+
397
+ $prev_label = '<span class="pagelayer-post-nav-icon fa fa-'.$arrows_list.'-left"></span>
398
+ <span class="pagelayer-next-holder">
399
+ <span class="pagelayer-post-nav-link"> '.$el["atts"]["prev_label"].'</span>'.$title.'
400
+ </span>';
401
+
402
+ $el['atts']['next_link'] = get_next_post_link('%link', $next_label, $in_same_term, '', $taxonomies);
403
+
404
+ $el['atts']['prev_link'] = get_previous_post_link('%link', $prev_label, $in_same_term, '', $taxonomies );
405
+
406
+ echo json_encode($el);
407
+ wp_die();
408
+
409
+ }
410
+
411
+ // Get post comment template
412
+ add_action('wp_ajax_pagelayer_post_comment', 'pagelayer_post_comment');
413
+ function pagelayer_post_comment() {
414
+ global $post;
415
+
416
+ // Some AJAX security
417
+ check_ajax_referer('pagelayer_ajax', 'nonce');
418
+
419
+ if(!isset($_REQUEST['postID'])){
420
+ return true;
421
+ }
422
+
423
+ $GLOBALS['post'] = get_post($_REQUEST['postID']);
424
+ $GLOBALS['withcomments'] = true;
425
+
426
+ if ( comments_open() || get_comments_number() ) {
427
+ echo '<div class="pagelayer-comments-template">'.comments_template().'</div>';
428
+ }else{
429
+ echo '<div class="pagelayer-comments-close">
430
+ <h2>Comments are closed!</h2>
431
+ </div>';
432
+ }
433
+ wp_die();
434
+
435
+ }
436
+
437
+ // Get post comment template
438
+ add_action('wp_ajax_pagelayer_post_info', 'pagelayer_post_info');
439
+ function pagelayer_post_info() {
440
+ global $post;
441
+
442
+ // Some AJAX security
443
+ check_ajax_referer('pagelayer_ajax', 'nonce');
444
+
445
+ if(!isset($_REQUEST['postID']) || !isset($_REQUEST['el'])){
446
+ return true;
447
+ }
448
+
449
+ $el['atts'] = $_REQUEST['el'];
450
+
451
+ $GLOBALS['post'] = get_post($_REQUEST['postID']);
452
+
453
+ $post_info_content ='';
454
+ $link ='';
455
+ $info_content ='';
456
+ $avatar_url ='';
457
+
458
+ switch($el['atts']['type']){
459
+ case 'author':
460
+
461
+ $link = get_author_posts_url( get_the_author_meta( 'ID' ) );
462
+ $avatar_url = get_avatar_url( get_the_author_meta( 'ID' ), 96 );
463
+ $post_info_content = get_the_author_meta( 'display_name', $post->post_author );
464
+ break;
465
+
466
+ case 'date':
467
+
468
+ $format = [
469
+ 'default' => 'F j, Y',
470
+ '0' => 'F j, Y',
471
+ '1' => 'Y-m-d',
472
+ '2' => 'm/d/Y',
473
+ '3' => 'd/m/Y',
474
+ 'custom' => empty( $el['atts']['date_format_custom'] ) ? 'F j, Y' : $el['atts']['date_format_custom'],
475
+ ];
476
+
477
+ $post_info_content = get_the_time( $format[ $el['atts']['date_format'] ] );
478
+ $link = get_day_link( get_post_time( 'Y' ), get_post_time( 'm' ), get_post_time( 'j' ) );
479
+
480
+ break;
481
+
482
+ case 'time':
483
+
484
+ $format = [
485
+ 'default' => 'g:i a',
486
+ '0' => 'g:i a',
487
+ '1' => 'g:i A',
488
+ '2' => 'H:i',
489
+ 'custom' => empty( $el['atts']['time_format_custom'] ) ? 'F j, Y' : $el['atts']['time_format_custom'],
490
+ ];
491
+ $post_info_content = get_the_time( $format[ $el['atts']['time_format'] ] );
492
+
493
+ break;
494
+
495
+ case 'comments':
496
+
497
+ if (comments_open()) {
498
+ $post_info_content = (int) get_comments_number();
499
+ $link = get_comments_link();
500
+ }
501
+
502
+ break;
503
+
504
+ case 'terms':
505
+
506
+ $taxonomy = $el['atts']['taxonomy'];
507
+ $terms = wp_get_post_terms( get_the_ID(), $taxonomy );
508
+ foreach ( $terms as $term ) {
509
+ $post_info_content .= ' <a if-ext="{{info_link}}" href="'. get_term_link( $term ) .'" class="pagelayer-post-info-list-link"> '. $term->name .' </a>';
510
+ }
511
+
512
+ break;
513
+
514
+ case 'custom':
515
+
516
+ $post_info_content = $el['atts']['type_custom'];
517
+ $link = $el['atts']['info_custom_link'];
518
+
519
+ break;
520
+ }
521
+
522
+ $el['atts']['post_info_content'] = $post_info_content;
523
+ $el['atts']['avatar_url'] = $avatar_url;
524
+ $el['atts']['link'] = $link;
525
+
526
+ echo json_encode($el['atts']);
527
+ wp_die();
528
+
529
+ }
main/functions.php CHANGED
@@ -896,3 +896,36 @@ function pagelayer_maybe_promo($opts){
896
  }
897
 
898
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
896
  }
897
 
898
  }
899
+
900
+ // Get Post Revision
901
+ function pagelayer_get_post_revision_by_id($postID){
902
+
903
+ // Insert the post revision into the database
904
+ $post_revisions = array();
905
+ $reviews = wp_get_post_revisions($postID);
906
+
907
+ foreach($reviews as $values){
908
+
909
+ $date_format = date_i18n('j-M @ H:i', strtotime( $values->post_modified ) );
910
+ $user_meta = get_userdata($values->post_author);
911
+
912
+ if ( false !== strpos( $values->post_name, 'autosave' ) ) {
913
+ $type = 'autosave';
914
+ } else {
915
+ $type = 'revision';
916
+ }
917
+
918
+ $post_tmp_data = array(
919
+ 'ID' => $values->ID,
920
+ 'post_author_name' => $user_meta->data->display_name,
921
+ 'post_author_url' => get_avatar_url($values->post_author),
922
+ 'post_date' => $date_format,
923
+ 'post_date_ago' => human_time_diff(strtotime($values->post_modified), current_time( 'timestamp' )) . ' ago ',
924
+ 'post_type' => $type,
925
+ );
926
+
927
+ $post_revisions[] = $post_tmp_data;
928
+ }
929
+
930
+ return $post_revisions;
931
+ }
main/live.php CHANGED
@@ -103,6 +103,7 @@ pagelayer_postID = "'.$post->ID.'";
103
  pagelayer_tabs = '.json_encode($pagelayer->tabs).';
104
  pagelayer_isDirty = false;
105
  pagelayer_returnURL = "'.$returnURL.'";
 
106
  </script>';
107
  }
108
 
103
  pagelayer_tabs = '.json_encode($pagelayer->tabs).';
104
  pagelayer_isDirty = false;
105
  pagelayer_returnURL = "'.$returnURL.'";
106
+ pagelayer_revision_obj = '.json_encode( pagelayer_get_post_revision_by_id( $post->ID ) ).';
107
  </script>';
108
  }
109
 
main/shortcode_functions.php CHANGED
@@ -1184,6 +1184,156 @@ function pagelayer_sc_service(&$el){
1184
  }
1185
  }
1186
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1187
  /*pagelayer_print($atts);
1188
  pagelayer_print($content);
1189
  die();*/
@@ -1262,3 +1412,47 @@ function pagelayer_tax_list($item, $page = false){
1262
  return $taxonomies;
1263
  }
1264
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1184
  }
1185
  }
1186
 
1187
+ // Primary menu Handler
1188
+ function pagelayer_sc_wp_menu(&$el){
1189
+
1190
+ $el['atts']['nav_menu'] = wp_nav_menu( array(
1191
+ 'menu' => wp_get_nav_menu_object($el['atts']['nav_list']),
1192
+ 'menu_id' => $el['atts']['nav_list'],
1193
+ //'theme_location' => 'primary',
1194
+ //'menu_class' => 'primary-menu',
1195
+ 'echo' => false,
1196
+ ) );
1197
+ }
1198
+
1199
+ // Post Navigation Handler
1200
+ function pagelayer_sc_post_nav(&$el){
1201
+
1202
+ $in_same_term = false;
1203
+ $taxonomies = 'category';
1204
+ $title = '';
1205
+ $arrows_list = $el['atts']['arrows_list'];
1206
+
1207
+ if($el['atts']['in_same_term']){
1208
+ $in_same_term = true;
1209
+ $taxonomies = $el['atts']['taxonomies'];
1210
+ }
1211
+
1212
+ if($el['atts']['post_title']){
1213
+ $title = '<span class="pagelayer-post-nav-title">%title</span>';
1214
+ }
1215
+
1216
+ $next_label = '<span class="pagelayer-next-holder">
1217
+ <span class="pagelayer-post-nav-link"> '.$el["atts"]["next_label"].'</span>'.$title.'
1218
+ </span>
1219
+ <span class="pagelayer-post-nav-icon fa fa-'.$arrows_list.'-right"></span>';
1220
+
1221
+ $prev_label = '<span class="pagelayer-post-nav-icon fa fa-'.$arrows_list.'-left"></span>
1222
+ <span class="pagelayer-next-holder">
1223
+ <span class="pagelayer-post-nav-link"> '.$el["atts"]["prev_label"].'</span>'.$title.'
1224
+ </span>';
1225
+
1226
+ $el['atts']['next_link'] = get_next_post_link('%link', $next_label, $in_same_term, '', $taxonomies);
1227
+
1228
+ $el['atts']['prev_link'] = get_previous_post_link('%link', $prev_label, $in_same_term, '', $taxonomies );
1229
+ }
1230
+
1231
+ // Comments Handler
1232
+ function pagelayer_sc_post_comment(&$el){
1233
+ global $post;
1234
+
1235
+ // Is it custom ?
1236
+ if($el['atts']['post_type'] == 'custom' && !empty($el['atts']['post_id'])){
1237
+ $orig_post = $post;
1238
+ $post = get_post($el['atts']['post_id']);
1239
+ }
1240
+
1241
+ $post_id = $post->ID;
1242
+ //echo $post_id.' - '.$el['atts']['post_id'];
1243
+
1244
+ if ( comments_open($post_id) || get_comments_number($post_id) ) {
1245
+
1246
+ // Handel comments template echo
1247
+ ob_start();
1248
+ comments_template();
1249
+
1250
+ $el['atts']['post_comment'] = '<div class="pagelayer-comments-template">'.ob_get_clean().'</div>';
1251
+ }else{
1252
+ $el['atts']['post_comment'] = '<div class="pagelayer-comments-close">
1253
+ <h2>Comments are closed!</h2>
1254
+ </div>';
1255
+ }
1256
+
1257
+ if(!empty($orig_post)){
1258
+ $post = $orig_post;
1259
+ }
1260
+
1261
+ }
1262
+
1263
+ // post navigation Handler
1264
+ function pagelayer_sc_post_info_list(&$el){
1265
+
1266
+ $el['atts']['post_info_content'] ='';
1267
+
1268
+ switch($el['atts']['type']){
1269
+ case 'author':
1270
+
1271
+ $el['atts']['link'] = get_author_posts_url( get_the_author_meta( 'ID' ) );
1272
+ $el['atts']['avatar_url'] = get_avatar_url( get_the_author_meta( 'ID' ), 96 );
1273
+ $el['atts']['post_info_content'] = get_the_author_meta( 'display_name' );
1274
+
1275
+ break;
1276
+
1277
+ case 'date':
1278
+
1279
+ $format = [
1280
+ 'default' => 'F j, Y',
1281
+ '0' => 'F j, Y',
1282
+ '1' => 'Y-m-d',
1283
+ '2' => 'm/d/Y',
1284
+ '3' => 'd/m/Y',
1285
+ 'custom' => empty( $el['atts']['date_format_custom'] ) ? 'F j, Y' : $el['atts']['date_format_custom'],
1286
+ ];
1287
+
1288
+ $el['atts']['post_info_content'] = get_the_time( $format[ $el['atts']['date_format'] ] );
1289
+ $el['atts']['link'] = get_day_link( get_post_time( 'Y' ), get_post_time( 'm' ), get_post_time( 'j' ) );
1290
+
1291
+ break;
1292
+
1293
+ case 'time':
1294
+
1295
+ $format = [
1296
+ 'default' => 'g:i a',
1297
+ '0' => 'g:i a',
1298
+ '1' => 'g:i A',
1299
+ '2' => 'H:i',
1300
+ 'custom' => empty( $el['atts']['time_format_custom'] ) ? 'F j, Y' : $el['atts']['time_format_custom'],
1301
+ ];
1302
+ $el['atts']['post_info_content'] = get_the_time( $format[ $el['atts']['time_format'] ] );
1303
+
1304
+ break;
1305
+
1306
+ case 'comments':
1307
+
1308
+ if (comments_open()) {
1309
+ $el['atts']['post_info_content'] = (int) get_comments_number();
1310
+ $el['atts']['link'] = get_comments_link();
1311
+ }
1312
+
1313
+ break;
1314
+
1315
+ case 'terms':
1316
+
1317
+ $taxonomy = $el['atts']['taxonomy'];
1318
+ $terms = wp_get_post_terms( get_the_ID(), $taxonomy );
1319
+ foreach ( $terms as $term ) {
1320
+ $el['atts']['post_info_content'] .= ' <a href="'. get_term_link( $term ) .'"> '. $term->name .' </a>';
1321
+ }
1322
+
1323
+ $el['atts']['info_link'] = '';
1324
+ break;
1325
+
1326
+ case 'custom':
1327
+
1328
+ $el['atts']['post_info_content'] = $el['atts']['type_custom'];
1329
+ $el['atts']['link'] = $el['atts']['info_custom_link'];
1330
+
1331
+ break;
1332
+ }
1333
+
1334
+
1335
+ }
1336
+
1337
  /*pagelayer_print($atts);
1338
  pagelayer_print($content);
1339
  die();*/
1412
  return $taxonomies;
1413
  }
1414
 
1415
+ // Get all posts and pages list
1416
+ function pagelayer_get_posts($args){
1417
+
1418
+ if(empty($args)){
1419
+ $args = array_keys(pagelayer_post_types(true));
1420
+ }
1421
+
1422
+ $posts_list = array();
1423
+
1424
+ // Get type
1425
+ foreach($args as $p){
1426
+
1427
+ // Create post list
1428
+ foreach(get_posts(['post_type' => $p]) as $post){
1429
+ $posts_list[$post->ID] = $post->post_title;
1430
+ }
1431
+ }
1432
+
1433
+ return $posts_list;
1434
+ }
1435
+
1436
+ // Get Menu List()
1437
+ function pagelayer_get_menu_list($return_def = false){
1438
+
1439
+ $menus = wp_get_nav_menus();
1440
+ $nav_menu = array();
1441
+
1442
+ $default = $menus[0]->term_id;
1443
+
1444
+ foreach ( $menus as $menu ) {
1445
+ $nav_menu[$menu->term_id] = $menu->name;
1446
+
1447
+ if($default > $menu->term_id){
1448
+ $default = $menu->term_id;
1449
+ }
1450
+ }
1451
+
1452
+ if($return_def){
1453
+ return $default;
1454
+ }
1455
+
1456
+ return $nav_menu;
1457
+
1458
+ }
main/shortcodes.php CHANGED
@@ -5463,7 +5463,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_testimonial', array(
5463
  'params' => array(
5464
  'image_position' => array(
5465
  'type' => 'select',
5466
- 'label' => __pl('image_position'),
5467
  'default' => 'aside-position',
5468
  'list' =>array(
5469
  'aside-position' => __pl('aside'),
@@ -5976,7 +5976,7 @@ pagelayer_add_shortcode(PAGELAYER_SC_PREFIX.'_stars', array(
5976
  ),
5977
  ],
5978
  'styles' => [
5979
- 'title_style' => __pl('title_style'),
5980
  'stars_style' => __pl('stars_style'),
5981
  ],
5982
  )
5463
  'params' => array(
5464
  'image_position' => array(
5465
  'type' => 'select',
5466
+ 'label' => __pl('position'),
5467
  'default' => 'aside-position',
5468
  'list' =>array(
5469
  'aside-position' => __pl('aside'),
5976
  ),
5977
  ],
5978
  'styles' => [
5979
+ 'title_style' => __pl('title'),
5980
  'stars_style' => __pl('stars_style'),
5981
  ],
5982
  )
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: 0.9.4
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: 0.9.5
7
  Author: Pagelayer Team
8
  Author URI: https://pagelayer.com/
9
  License: LGPL v2.1
readme.txt CHANGED
@@ -2,8 +2,9 @@
2
  Contributors: pagelayer
3
  Tags: page builder, editor, landing page, drag-and-drop, pagelayer, softaculous, visual editor, wysiwyg, design, maintenance mode, coming soon, under construction, website builder, landing page builder, front-end builder
4
  Requires at least: 4.7
5
- Tested up to: 5.1
6
- Stable tag: 0.9.4
 
7
  License: LGPL v2.1
8
  License URI: http://www.gnu.org/licenses/lgpl-2.1.html
9
 
@@ -112,6 +113,11 @@ Do you have questions related to PageLayer ? Use the following links :
112
 
113
  == Changelog ==
114
 
 
 
 
 
 
115
  = 0.9.4 (May 7, 2019) =
116
  * [Feature] Added Inner Row which allows to create columns within columns for complex designs
117
  * [Task] The PageLayer Admin JS and CSS was loaded everywhere in the admin panel. This is fixed.
2
  Contributors: pagelayer
3
  Tags: page builder, editor, landing page, drag-and-drop, pagelayer, softaculous, visual editor, wysiwyg, design, maintenance mode, coming soon, under construction, website builder, landing page builder, front-end builder
4
  Requires at least: 4.7
5
+ Tested up to: 5.2
6
+ Requires PHP: 5.2.4
7
+ Stable tag: 0.9.5
8
  License: LGPL v2.1
9
  License URI: http://www.gnu.org/licenses/lgpl-2.1.html
10
 
113
 
114
  == Changelog ==
115
 
116
+ = 0.9.5 (June 21, 2019) =
117
+ * [Feature] Added revision control
118
+ * [Feature] Added the ability to manage actions while editing i.e. undo and redo
119
+ * [Feature] Added keyboard options like ctrl+c, ctrl+v, ctrl+z, ctrl+y
120
+
121
  = 0.9.4 (May 7, 2019) =
122
  * [Feature] Added Inner Row which allows to create columns within columns for complex designs
123
  * [Task] The PageLayer Admin JS and CSS was loaded everywhere in the admin panel. This is fixed.