Nimble Page Builder - Version 1.5.0

Version Description

Introducing a section navigation UI. A new interface allowing users to navigate in the structure of Nimble Builder elements : locations, sections, columns and modules. Added a new option for the Menu module to expand the mobile menu in full width below the hamburger icon.

=

Download this release

Release Info

Developer nikeo
Plugin Icon 128x128 Nimble Page Builder
Version 1.5.0
Comparing to
See all releases

Code changes from version 1.4.14 to 1.5.0

assets/czr/sek/css/sek-control.css CHANGED
@@ -111,7 +111,7 @@ li[id*="sek_draggable_modules"] [data-sek-content-type="preset_section"] {
111
  bottom: 0;
112
  background-color: #000000;
113
  opacity: 0;
114
- -webkit-transition: opacity .35s ease;
115
  transition: opacity .35s ease;
116
  -o-transition: opacity .35s ease;
117
  }
@@ -1139,7 +1139,6 @@ body.nimble-save-ui-visible #nimble-top-save-ui {
1139
 
1140
  /* LEVEL TREE */
1141
  /* space for the Level Tree */
1142
- #nimble-top-bar .sek-level-tree { display: none;}
1143
  #customize-preview iframe, #nimble-level-tree {
1144
  -webkit-transition: top 0.3s ease-in-out;
1145
  -moz-transition: top, 0.3s ease-in-out;
@@ -1152,23 +1151,25 @@ body.nimble-save-ui-visible #nimble-top-save-ui {
1152
  }
1153
  .sek-level-tree-expanded #customize-preview iframe {
1154
  top: 366px;
 
1155
  }
1156
  /* highlight icon */
1157
  .sek-level-tree-expanded #nimble-top-bar .sek-level-tree button {
1158
  color: #44b9e2;
1159
  }
1160
  #nimble-level-tree {
1161
- position: absolute;
1162
- top: 36px;
1163
- right: 0;
1164
- left: 0;
1165
- background: #000000ad;
1166
- min-height: 20px;
1167
- color: #32ff1e;
1168
- height: 300px;
1169
- overflow: auto;
1170
- padding: 15px;
1171
- z-index: 0;
 
1172
  }
1173
  /*.sek-level-tree-expanded #nimble-level-tree {
1174
  top: 36px;
@@ -1179,13 +1180,91 @@ body.nimble-save-ui-visible #nimble-top-save-ui {
1179
  transition: all 0.3s ease-in-out;
1180
  }*/
1181
  #nimble-level-tree ul li {
1182
- padding-left: 25px;
1183
- line-height: 1.5em;
1184
- font-size: 12px;
1185
  cursor: pointer;
1186
  margin-bottom: 8px;
1187
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1188
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1189
 
1190
 
1191
 
111
  bottom: 0;
112
  background-color: #000000;
113
  opacity: 0;
114
+ -webkit-transition: opacity .35s ease;
115
  transition: opacity .35s ease;
116
  -o-transition: opacity .35s ease;
117
  }
1139
 
1140
  /* LEVEL TREE */
1141
  /* space for the Level Tree */
 
1142
  #customize-preview iframe, #nimble-level-tree {
1143
  -webkit-transition: top 0.3s ease-in-out;
1144
  -moz-transition: top, 0.3s ease-in-out;
1151
  }
1152
  .sek-level-tree-expanded #customize-preview iframe {
1153
  top: 366px;
1154
+ height: calc(100vh - 366px);
1155
  }
1156
  /* highlight icon */
1157
  .sek-level-tree-expanded #nimble-top-bar .sek-level-tree button {
1158
  color: #44b9e2;
1159
  }
1160
  #nimble-level-tree {
1161
+ background: #f0f0f0!important;
1162
+ border-bottom: 1px solid #aaa!important;
1163
+ color: #222!important;
1164
+ font-size: 12px!important;
1165
+ position: absolute;
1166
+ top: 36px;
1167
+ right: 0;
1168
+ left: 0;
1169
+ height: 299px;
1170
+ overflow: auto;
1171
+ padding: 15px;
1172
+ z-index: 0;
1173
  }
1174
  /*.sek-level-tree-expanded #nimble-level-tree {
1175
  top: 36px;
1180
  transition: all 0.3s ease-in-out;
1181
  }*/
1182
  #nimble-level-tree ul li {
1183
+ padding-left: 30px;
 
 
1184
  cursor: pointer;
1185
  margin-bottom: 8px;
1186
  }
1187
+ #nimble-level-tree ul li .sek-remove-level {
1188
+ font-size: 16px;
1189
+ opacity: 0.6;
1190
+ }
1191
+ #nimble-level-tree ul li .sek-remove-level:hover{
1192
+ opacity: 1;
1193
+ }
1194
+ #nimble-level-tree ul li .sek-level-infos {
1195
+ line-height: 30px;
1196
+ height: 30px;
1197
+ padding-left: 33px;
1198
+ position: relative;
1199
+ width: calc(100% - 25px);
1200
+ }
1201
+ .sek-level-infos .sek-inner-level-infos {
1202
+ background: inherit;
1203
+ width: inherit;
1204
+ height: inherit;
1205
+ line-height: inherit;
1206
+ padding-left: 4px;
1207
+ display: -webkit-inline-box;
1208
+ display: -ms-inline-flexbox;
1209
+ display: inline-flex;
1210
+ -webkit-box-align: center;
1211
+ -ms-flex-align: center;
1212
+ align-items: center;
1213
+ -webkit-transition: background .20s ease;
1214
+ transition: background .20s ease;
1215
+ -o-transition: background .20s ease;
1216
+ }
1217
+
1218
+ .sek-inner-level-infos:hover {
1219
+ color: #000;
1220
+ background: white;
1221
+ }
1222
+ .sek-close-level-tree {
1223
+ position: fixed;
1224
+ top: 44px;
1225
+ right: 25px;
1226
+ }
1227
+
1228
+ img.sek-svg-mod-icon {
1229
+ max-width: 45px;
1230
+ }
1231
 
1232
+ /* TREE */
1233
+ .sek-level-infos::before {
1234
+ position: absolute;
1235
+ left: -31px;
1236
+ background: #a2aab2;
1237
+ width: 63px;
1238
+ height: 2px;
1239
+ content: "";
1240
+ top: calc(50% - 1px);
1241
+ }
1242
+ #nimble-level-tree ul > li:first-child::before {
1243
+ position: absolute;
1244
+ content: "";
1245
+ background: #a2aab2;
1246
+ top: -15px;
1247
+ height: 16px;
1248
+ bottom: 0;
1249
+ left: -2px;
1250
+ width: 2px;
1251
+ }
1252
+ #nimble-level-tree ul > li:last-child::after {
1253
+ position: absolute;
1254
+ content: "";
1255
+ background: #f0f0f0;
1256
+ top: 16px;
1257
+ bottom: 0;
1258
+ left: -2px;
1259
+ width: 2px;
1260
+ }
1261
+ #nimble-level-tree ul {
1262
+ border-left: 2px solid #a2aab2;
1263
+ position:relative;
1264
+ }
1265
+ #nimble-level-tree ul > li:last-child {
1266
+ position: relative;
1267
+ }
1268
 
1269
 
1270
 
assets/czr/sek/css/sek-control.min.css CHANGED
@@ -1 +1 @@
1
- @font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(../fonts/material-icons/MaterialIcons-Regular.eot);src:local('Material Icons'),local('MaterialIcons-Regular'),url(../fonts/material-icons/MaterialIcons-Regular.woff2) format('woff2'),url(../fonts/material-icons/MaterialIcons-Regular.woff) format('woff'),url(../fonts/material-icons/MaterialIcons-Regular.ttf) format('truetype')}.material-icons{font-family:'Material Icons';font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;-webkit-font-feature-settings:'liga';font-feature-settings:'liga'}ul[id*=sub-accordion-section-__nimble__]{background:#f2f2f2!important}#customize-theme-controls .customize-pane-child[id*="__nimble__"]{-webkit-transition:unset;-o-transition:unset;transition:unset}li[id*="__nimble__"].customize-control{margin:8px 0;padding:2px;width:calc(100% - 4px);border:1px solid rgba(221,221,221,.43);box-shadow:1px 1px 2px 0 rgba(75,75,85,.2);-webkit-box-shadow:1px 1px 2px 0 rgba(75,75,85,.2);background-color:#fff}li[id*="__nimble__"].customize-control span.customize-control-title:first-child{margin-left:21px}[data-sek-content-type]{float:left;padding:0;margin:1.8%;text-align:center;cursor:move;-webkit-transition:-webkit-box-shadow .2s ease;transition:-webkit-box-shadow .2s ease;-o-transition:box-shadow .2s ease;transition:box-shadow .2s ease;transition:box-shadow .2s ease,-webkit-box-shadow .2s ease;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.25);box-shadow:0 2px 5px rgba(0,0,0,.25);border-radius:4px}[data-sek-content-type=module]{width:29%;height:130px}li[id*=sek_draggable_modules] [data-sek-content-type=preset_section]{width:29%}[data-sek-content-type=preset_section]{width:95%;height:165px;position:relative}[data-sek-content-type=preset_section] .sek-overlay{display:block;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#000;opacity:0;-webkit-transition:opacity .35s ease;transition:opacity .35s ease;-o-transition:opacity .35s ease}[data-sek-content-type=preset_section]:hover .sek-overlay{opacity:.15}[data-sek-content-type][draggable=true]:hover{-webkit-box-shadow:0 12px 20px rgba(0,0,0,.2);box-shadow:0 12px 20px rgba(0,0,0,.2)}[data-sek-content-type][draggable=false]{background:#eee;opacity:.8}.sek-user-section-wrapper{margin-bottom:15px;float:left}.sek-user-section-wrapper{width:100%}.sek-user-section-wrapper [data-sek-is-user-section=true]{height:auto;padding:2%;width:89%}.sek-saved-section-date{font-size:11px;text-align:left}.sek-saved-section-description{font-size:13px;font-style:italic;text-align:left}.sek-dragging [data-sek-content-type]{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.25)!important;box-shadow:0 2px 5px rgba(0,0,0,.25)!important}.sek-dragged{background:#33b3db3d;background:rgba(51,179,219,.24)}[data-sek-content-type] .sek-module-icon{display:block;padding:0}[data-sek-content-type] .sek-module-icon .nimble-module-icons{font-size:3rem;max-width:100%;color:#878787;max-height:86px}[data-sek-content-type] .sek-module-icon.is-font-icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%;min-height:70%}[data-sek-content-type] .sek-module-icon.is-font-icon i{font-size:35px}[data-sek-content-type] .sek-module-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 6px 0;font-size:.75rem;height:45px;justify-content:center;position:relative;top:-18px}.sek-centered-module-title{overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.sek-pad-marg-inner{font-size:12px;display:-webkit-box;display:-ms-flexbox;display:flex;margin:10px auto 10px auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:0;background-color:#e6e6e6;border:1px solid #c5c5c5;height:192px;width:232px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-transition:background-color .2s ease;-o-transition:background-color .2s ease;transition:background-color .2s ease}.sek-pm-top-bottom-wrap{height:46px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.sek-flex-center-stretch{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.sek-pm-input{width:35px;height:15px;padding:0;text-align:center;font-family:Source Sans Pro;padding:5px;border-radius:3px;text-align:left;font-size:13px;outline:0;-webkit-box-shadow:inset 1px 1px 3px rgba(0,0,0,.15);box-shadow:inset 1px 1px 3px rgba(0,0,0,.15);border:1px solid #ced6d9}.sek-pm-input-parent .sek-pm-input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:block;margin:auto 3px;-webkit-box-sizing:border-box;box-sizing:border-box;padding:1px 3px;font-size:12px;font-weight:300;min-width:34px;min-height:20px;color:#313131}.sek-pm-middle-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;height:100px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.sek-pm-margin-left,.sek-pm-margin-right{width:46px}.sek-pm-padding-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background-color:#fff;border:1px solid #ced6d9;height:100px;width:140px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:5px;-webkit-transition:background-color .2s ease;-o-transition:background-color .2s ease;transition:background-color .2s ease;-webkit-box-sizing:border-box;box-sizing:border-box;margin:auto}.sek-flex-justify-center{min-height:0;min-width:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.sek-flex-space-between{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.sek-pm-input-parent{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex}.sek-pm-input-parent .sek-pm-input{min-height:25px;min-width:40px;background-color:#fff}.sek-pm-input-parent .sek-pm-input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:block;margin:auto 3px!important;-webkit-box-sizing:border-box;box-sizing:border-box;padding:1px 3px;font-size:12px;font-weight:300;min-width:34px;min-height:20px;color:#313131;width:40px!important;text-align:center}.sek-pm-padding-wrapper label{margin:0}.sek-pad-marg-inner label{-webkit-box-flex:0;-ms-flex:0;flex:0}.reset-spacing-wrap{padding:10px 0 0;font-size:.8em;text-decoration:underline;cursor:pointer;text-align:center}.reset-spacing-wrap:hover{color:#006799}.sek-bg-pos-wrapper{padding:10px;text-align:center;display:inline-block;width:90px;height:90px}.sek-bg-pos-wrapper{display:inline-block;width:90px;height:90px}.sek-bg-pos-wrapper .sek-bg-pos{cursor:pointer;width:24px;height:24px;margin:3px;float:left}.sek-bg-pos-wrapper input[type=radio]{display:none}.sek-bg-pos-wrapper .sek-bg-pos span{display:inline-block;width:100%;height:100%;border-radius:6px;background:#e6e6e6 no-repeat center;-webkit-transition:background-color .2s ease;-o-transition:background-color .2s ease;transition:background-color .2s ease}.sek-bg-pos-wrapper .sek-bg-pos span:hover{background-color:#33b3db}.sek-bg-pos-wrapper .sek-bg-pos span:hover svg{visibility:visible}.sek-bg-pos-wrapper .sek-bg-pos input[type=radio]:checked+span{background-color:#33b3db}.sek-bg-pos-wrapper .sek-bg-pos input[type=radio]:checked+span svg{visibility:visible}.sek-bg-pos-wrapper .sek-bg-pos span svg{visibility:hidden;shape-rendering:crispEdges}.sek-bg-pos-wrapper .sek-svg-bg-pos{fill:#fff}div[data-sek-align]{margin:0 5px;padding:4px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;text-align:center;width:23px;height:24px;top:-4px;border-radius:4px;cursor:pointer}horizAlignmentWithDeviceSwitcher div[data-input-type=horizTextAlignmentWithDeviceSwitcher] .czr-input{text-align:center}div[data-input-type=horizTextAlignmentWithDeviceSwitcher] .sek-h-align-wrapper{display:inline-block}div[data-input-type=horizAlignmentWithDeviceSwitcher] .czr-input{text-align:center}div[data-input-type=horizAlignmentWithDeviceSwitcher] .sek-h-align-wrapper{display:inline-block}.sek-h-align-wrapper .sek-align-icons{float:right}div[data-sek-align]:hover{-webkit-box-shadow:inset 0 0 0 1px #555d66,inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 1px #555d66,inset 0 0 0 2px #fff}div[data-sek-align].selected{outline:0;color:#fff;-webkit-box-shadow:none;box-shadow:none;background:#555d66}.sek-side-nimble-logo-wrapper{padding:4px 25px 0 2px!important}.sek-side-nimble-logo-wrapper .sek-nimble-logo{height:45px}[data-input-type=code_editor] .czr-input{width:100%;float:left}.sek-unit-wrapper{text-align:center}.sek-ui-button-group{display:inline-block}.sek-ui-button-group .sek-ui-button:first-child{border-radius:3px 0 0 3px}.sek-ui-button-group .sek-ui-button+.sek-ui-button{margin-left:-1px}.sek-ui-button-group .sek-ui-button:last-child{border-radius:0 3px 3px 0}.sek-ui-button{height:28px;line-height:25px;padding:0 10px 2px;border-radius:3px;white-space:nowrap;border-width:1px;border-style:solid;display:inline-flex;text-decoration:none;font-size:12px;margin:0;cursor:pointer;-webkit-appearance:none;background:0 0;color:#555;border-color:#ccc;background:#f7f7f7;box-shadow:inset 0 -1px 0 #ccc;vertical-align:top}.sek-ui-button:hover{background:#fafafa;border-color:#999;box-shadow:inset 0 -1px 0 #999;color:#23282d}.sek-ui-button:active:not(:disabled){background:#eee;border-color:#999;box-shadow:inset 0 1px 0 #999}.sek-ui-button:focus:not(:disabled){background:#fafafa;color:#23282d;border-color:#999;box-shadow:inset 0 -1px 0 #999,0 0 0 2px #fbfbfb;outline:0}.sek-ui-button.is-selected{background:#555d66;border-color:#555d66;box-shadow:inset 0 -1px 0 #555d66;color:#fff;text-decoration:none}.sek-ui-button.is-selected:focus:not(:disabled),.sek-ui-button.is-selected:hover{background:#555d66;border-color:#4f4f4f;color:#fff}.sek-ui-button.is-selected:focus:not(:disabled){box-shadow:inset 0 -1px 0 #4f4f4f}.sek-ui-button.is-selected:focus:not(:disabled){outline:0}.sek-content-type-wrapper{margin-bottom:8px;width:100%;float:left}.sek-content-type-wrapper .sek-ui-button-group{display:block}.sek-content-type-wrapper .sek-ui-button{width:49%;text-align:center;display:inline-block;padding:3px 0;height:auto;text-transform:uppercase}.sek-input-device-switcher .sek-switcher:before{display:inline-block;-webkit-font-smoothing:antialiased;font:normal 20px/30px dashicons;vertical-align:top;color:#656a6f;position:relative;top:-5px}.sek-input-device-switcher .sek-switcher{cursor:pointer;background:0 0;border:none;padding:0 1px;margin:0 0 0 -2px;box-shadow:none;border-top:1px solid transparent;border-bottom:4px solid transparent;-webkit-transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out;-o-transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out;transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out}.sek-input-device-switcher .sek-switcher:focus,.sek-input-device-switcher .sek-switcher:hover{background-color:#fff}.sek-input-device-switcher .sek-switcher.active:before{color:#191e23}.sek-input-device-switcher .sek-switcher:focus:before,.sek-input-device-switcher .sek-switcher:hover:before{color:#0073aa}.sek-input-device-switcher .preview-desktop:before{content:"\f472"}.sek-input-device-switcher .preview-tablet:before{content:"\f471"}.sek-input-device-switcher .preview-mobile:before{content:"\f470"}.sek-range-with-unit-picker-wrapper{width:100%;float:left;margin-bottom:8px}.sek-range-with-unit-picker-wrapper .sek-unit-wrapper{float:right}.sek-range-with-unit-picker-wrapper>div{float:left}.sek-borders{width:100%;float:left;margin-bottom:8px}.sek-borders>div{float:left;width:100%}.sek-borders .sek-range-unit-wrapper>div{float:left}.sek-borders .sek-border-type-wrapper{margin-bottom:5px}.sek-borders .sek-range-unit-wrapper{margin-bottom:5px}.sek-borders .sek-range-unit-wrapper .sek-unit-wrapper{float:right}.sek-borders .sek-color-wrapper{width:100%}.sek-borders .sek-color-wrapper .sek-color-picker{width:50%;float:left}.sek-borders .sek-color-wrapper .sek-reset-button{width:50%;float:right}[data-sek-radius-type=top_right]>i.material-icons{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}[data-sek-radius-type=bottom_right]>i.material-icons{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}[data-sek-radius-type=bottom_left]>i.material-icons{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.sek-range-wrapper{width:44%;margin-right:4px}.sek-no-unit-picker .sek-range-wrapper{width:70%}.sek-number-wrapper{width:50px;margin-right:5px}.sek-range-input{flex:1;width:100%;padding:0;-webkit-appearance:none;background:0 0}.sek-range-input::-webkit-slider-thumb{-webkit-appearance:none;height:20px;width:20px;border-radius:50%;cursor:pointer;background:#555d66;border:4px solid transparent;background-clip:padding-box;box-sizing:border-box;margin-top:-8px}.sek-range-input::-moz-range-thumb{height:20px;width:20px;border-radius:50%;cursor:pointer;background:#555d66;border:4px solid transparent;background-clip:padding-box;box-sizing:border-box;margin-top:-7px}.sek-range-input::-ms-thumb{height:20px;width:20px;border-radius:50%;cursor:pointer;background:#555d66;border:4px solid transparent;background-clip:padding-box;box-sizing:border-box;margin-top:-8px}.sek-range-input:focus{outline:0}.sek-range-input::-webkit-slider-runnable-track{height:3px;cursor:pointer;background:#e2e4e7;border-radius:1.5px;margin-top:-4px}.sek-range-input::-moz-range-track{height:3px;cursor:pointer;background:#e2e4e7;border-radius:1.5px}.sek-range-input::-ms-track{margin-top:-4px;background:0 0;border-color:transparent;color:transparent;height:3px;cursor:pointer;background:#e2e4e7;border-radius:1.5px}.sek-animated-arrow{position:absolute;left:-20px;margin-left:6px;top:3px;font-size:10px;color:#617379;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;-o-transition:transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}[data-sek-expanded=true] label>.customize-control-title .sek-animated-arrow{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}[data-sek-expanded=true] label>.customize-control-title .sek-ctrl-accordion-title,[data-sek-expanded] label>.customize-control-title .sek-ctrl-accordion-title:hover{text-decoration:underline;text-underline-position:under}.sek-level-option-icon{padding-right:5px;min-width:22px;text-align:center}#customize-preview iframe{top:36px}#nimble-top-bar{max-height:36px;position:absolute;text-align:center;right:0;left:0;z-index:20;color:#fff;display:block;-webkit-transition:all .3s ease-in-out;-moz-transition:all,.3s ease-in-out;-ms-transition:all,.3s ease-in-out;-o-transition:all,.3s ease-in-out;transition:all .3s ease-in-out;opacity:.3;top:0;background:rgba(0,0,0,.5);padding:2px;z-index:99999;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;flex:0 0 100%;max-width:100%}body.nimble-top-bar-visible #nimble-top-bar{opacity:1}#nimble-top-bar:hover{background:rgba(0,0,0,.7)}#nimble-top-bar .nimble-top-bar-content{display:inline-block;line-height:20px;width:80%}#nimble-top-bar .sek-do-undo .icon:before{display:inline-block;-webkit-font-smoothing:antialiased;font:normal 20px/30px dashicons;vertical-align:top;color:#fff}#nimble-top-bar .sek-settings{font-size:18px;padding:0 10px}#nimble-top-bar button{background:0 0;border:none;color:#fff;cursor:pointer}#nimble-top-bar button[data-nimble-state=disabled]{cursor:inherit;opacity:.4!important;cursor:not-allowed}#nimble-top-bar .sek-do-undo button:hover{opacity:1}#nimble-top-bar .sek-do-undo button:focus{outline:0}#nimble-top-bar .sek-do-undo .icon.undo:before{content:"\f171";-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}#nimble-top-bar .sek-do-undo .icon.do:before{content:"\f172";-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}#nimble-top-bar .sek-add-content button{padding-top:3px}#nimble-top-bar .sek-nimble-doc{position:absolute;right:10px;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;flex:0 0 100%;max-width:100%}#nimble-top-bar .sek-nimble-doc img{width:30px;height:30px;position:relative;top:2px;-webkit-filter:grayscale(100%);filter:grayscale(100%);-webkit-filter:gray;filter:gray}#nimble-top-bar .sek-nimble-doc:hover img{-webkit-filter:none;filter:none;-webkit-filter:none;filter:none}#nimble-top-bar .sek-notifications{max-width:300px;overflow:hidden}#nimble-top-save-ui{height:300px;padding:20px;position:absolute;top:-300px;right:0;left:0;z-index:20;color:#fff;display:block;-webkit-transition:all .3s ease-in-out;-moz-transition:all,.3s ease-in-out;-ms-transition:all,.3s ease-in-out;-o-transition:all,.3s ease-in-out;transition:all .3s ease-in-out;opacity:.3;background:rgba(0,0,0,.5);z-index:99999;max-width:100%}#nimble-top-save-ui>div{width:100%}body.nimble-save-ui-visible #nimble-top-save-ui{opacity:1;top:36px}#nimble-top-save-ui .sek-cancel-save{position:absolute;bottom:10px;right:10px}#nimble-top-save-ui #sek-saved-section-title.error{border:1px solid red}#nimble-top-bar .sek-level-tree{display:none}#customize-preview iframe,#nimble-level-tree{-webkit-transition:top .3s ease-in-out;-moz-transition:top,.3s ease-in-out;-ms-transition:top,.3s ease-in-out;-o-transition:top,.3s ease-in-out;transition:top .3s ease-in-out}#customize-preview iframe{z-index:1}.sek-level-tree-expanded #customize-preview iframe{top:366px}.sek-level-tree-expanded #nimble-top-bar .sek-level-tree button{color:#44b9e2}#nimble-level-tree{position:absolute;top:36px;right:0;left:0;background:#000000ad;min-height:20px;color:#32ff1e;height:300px;overflow:auto;padding:15px;z-index:0}#nimble-level-tree ul li{padding-left:25px;line-height:1.5em;font-size:12px;cursor:pointer;margin-bottom:8px}.sek-float-right{float:right}.sek-float-left{float:left}.sek-flex-vertical-center{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}li[id^=accordion-section-__nimble__]{margin-top:16px}li[id^=accordion-section-__nimble__]>h3{border-top:1px solid #ddd}
1
+ @font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(../fonts/material-icons/MaterialIcons-Regular.eot);src:local('Material Icons'),local('MaterialIcons-Regular'),url(../fonts/material-icons/MaterialIcons-Regular.woff2) format('woff2'),url(../fonts/material-icons/MaterialIcons-Regular.woff) format('woff'),url(../fonts/material-icons/MaterialIcons-Regular.ttf) format('truetype')}.material-icons{font-family:'Material Icons';font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;-webkit-font-feature-settings:'liga';font-feature-settings:'liga'}ul[id*=sub-accordion-section-__nimble__]{background:#f2f2f2!important}#customize-theme-controls .customize-pane-child[id*="__nimble__"]{-webkit-transition:unset;-o-transition:unset;transition:unset}li[id*="__nimble__"].customize-control{margin:8px 0;padding:2px;width:calc(100% - 4px);border:1px solid rgba(221,221,221,.43);box-shadow:1px 1px 2px 0 rgba(75,75,85,.2);-webkit-box-shadow:1px 1px 2px 0 rgba(75,75,85,.2);background-color:#fff}li[id*="__nimble__"].customize-control span.customize-control-title:first-child{margin-left:21px}[data-sek-content-type]{float:left;padding:0;margin:1.8%;text-align:center;cursor:move;-webkit-transition:-webkit-box-shadow .2s ease;transition:-webkit-box-shadow .2s ease;-o-transition:box-shadow .2s ease;transition:box-shadow .2s ease;transition:box-shadow .2s ease,-webkit-box-shadow .2s ease;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.25);box-shadow:0 2px 5px rgba(0,0,0,.25);border-radius:4px}[data-sek-content-type=module]{width:29%;height:130px}li[id*=sek_draggable_modules] [data-sek-content-type=preset_section]{width:29%}[data-sek-content-type=preset_section]{width:95%;height:165px;position:relative}[data-sek-content-type=preset_section] .sek-overlay{display:block;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#000;opacity:0;-webkit-transition:opacity .35s ease;transition:opacity .35s ease;-o-transition:opacity .35s ease}[data-sek-content-type=preset_section]:hover .sek-overlay{opacity:.15}[data-sek-content-type][draggable=true]:hover{-webkit-box-shadow:0 12px 20px rgba(0,0,0,.2);box-shadow:0 12px 20px rgba(0,0,0,.2)}[data-sek-content-type][draggable=false]{background:#eee;opacity:.8}.sek-user-section-wrapper{margin-bottom:15px;float:left}.sek-user-section-wrapper{width:100%}.sek-user-section-wrapper [data-sek-is-user-section=true]{height:auto;padding:2%;width:89%}.sek-saved-section-date{font-size:11px;text-align:left}.sek-saved-section-description{font-size:13px;font-style:italic;text-align:left}.sek-dragging [data-sek-content-type]{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.25)!important;box-shadow:0 2px 5px rgba(0,0,0,.25)!important}.sek-dragged{background:#33b3db3d;background:rgba(51,179,219,.24)}[data-sek-content-type] .sek-module-icon{display:block;padding:0}[data-sek-content-type] .sek-module-icon .nimble-module-icons{font-size:3rem;max-width:100%;color:#878787;max-height:86px}[data-sek-content-type] .sek-module-icon.is-font-icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%;min-height:70%}[data-sek-content-type] .sek-module-icon.is-font-icon i{font-size:35px}[data-sek-content-type] .sek-module-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 6px 0;font-size:.75rem;height:45px;justify-content:center;position:relative;top:-18px}.sek-centered-module-title{overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.sek-pad-marg-inner{font-size:12px;display:-webkit-box;display:-ms-flexbox;display:flex;margin:10px auto 10px auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:0;background-color:#e6e6e6;border:1px solid #c5c5c5;height:192px;width:232px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-transition:background-color .2s ease;-o-transition:background-color .2s ease;transition:background-color .2s ease}.sek-pm-top-bottom-wrap{height:46px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.sek-flex-center-stretch{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.sek-pm-input{width:35px;height:15px;padding:0;text-align:center;font-family:Source Sans Pro;padding:5px;border-radius:3px;text-align:left;font-size:13px;outline:0;-webkit-box-shadow:inset 1px 1px 3px rgba(0,0,0,.15);box-shadow:inset 1px 1px 3px rgba(0,0,0,.15);border:1px solid #ced6d9}.sek-pm-input-parent .sek-pm-input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:block;margin:auto 3px;-webkit-box-sizing:border-box;box-sizing:border-box;padding:1px 3px;font-size:12px;font-weight:300;min-width:34px;min-height:20px;color:#313131}.sek-pm-middle-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;height:100px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.sek-pm-margin-left,.sek-pm-margin-right{width:46px}.sek-pm-padding-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background-color:#fff;border:1px solid #ced6d9;height:100px;width:140px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:5px;-webkit-transition:background-color .2s ease;-o-transition:background-color .2s ease;transition:background-color .2s ease;-webkit-box-sizing:border-box;box-sizing:border-box;margin:auto}.sek-flex-justify-center{min-height:0;min-width:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.sek-flex-space-between{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.sek-pm-input-parent{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex}.sek-pm-input-parent .sek-pm-input{min-height:25px;min-width:40px;background-color:#fff}.sek-pm-input-parent .sek-pm-input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:block;margin:auto 3px!important;-webkit-box-sizing:border-box;box-sizing:border-box;padding:1px 3px;font-size:12px;font-weight:300;min-width:34px;min-height:20px;color:#313131;width:40px!important;text-align:center}.sek-pm-padding-wrapper label{margin:0}.sek-pad-marg-inner label{-webkit-box-flex:0;-ms-flex:0;flex:0}.reset-spacing-wrap{padding:10px 0 0;font-size:.8em;text-decoration:underline;cursor:pointer;text-align:center}.reset-spacing-wrap:hover{color:#006799}.sek-bg-pos-wrapper{padding:10px;text-align:center;display:inline-block;width:90px;height:90px}.sek-bg-pos-wrapper{display:inline-block;width:90px;height:90px}.sek-bg-pos-wrapper .sek-bg-pos{cursor:pointer;width:24px;height:24px;margin:3px;float:left}.sek-bg-pos-wrapper input[type=radio]{display:none}.sek-bg-pos-wrapper .sek-bg-pos span{display:inline-block;width:100%;height:100%;border-radius:6px;background:#e6e6e6 no-repeat center;-webkit-transition:background-color .2s ease;-o-transition:background-color .2s ease;transition:background-color .2s ease}.sek-bg-pos-wrapper .sek-bg-pos span:hover{background-color:#33b3db}.sek-bg-pos-wrapper .sek-bg-pos span:hover svg{visibility:visible}.sek-bg-pos-wrapper .sek-bg-pos input[type=radio]:checked+span{background-color:#33b3db}.sek-bg-pos-wrapper .sek-bg-pos input[type=radio]:checked+span svg{visibility:visible}.sek-bg-pos-wrapper .sek-bg-pos span svg{visibility:hidden;shape-rendering:crispEdges}.sek-bg-pos-wrapper .sek-svg-bg-pos{fill:#fff}div[data-sek-align]{margin:0 5px;padding:4px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;position:relative;text-align:center;width:23px;height:24px;top:-4px;border-radius:4px;cursor:pointer}horizAlignmentWithDeviceSwitcher div[data-input-type=horizTextAlignmentWithDeviceSwitcher] .czr-input{text-align:center}div[data-input-type=horizTextAlignmentWithDeviceSwitcher] .sek-h-align-wrapper{display:inline-block}div[data-input-type=horizAlignmentWithDeviceSwitcher] .czr-input{text-align:center}div[data-input-type=horizAlignmentWithDeviceSwitcher] .sek-h-align-wrapper{display:inline-block}.sek-h-align-wrapper .sek-align-icons{float:right}div[data-sek-align]:hover{-webkit-box-shadow:inset 0 0 0 1px #555d66,inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 1px #555d66,inset 0 0 0 2px #fff}div[data-sek-align].selected{outline:0;color:#fff;-webkit-box-shadow:none;box-shadow:none;background:#555d66}.sek-side-nimble-logo-wrapper{padding:4px 25px 0 2px!important}.sek-side-nimble-logo-wrapper .sek-nimble-logo{height:45px}[data-input-type=code_editor] .czr-input{width:100%;float:left}.sek-unit-wrapper{text-align:center}.sek-ui-button-group{display:inline-block}.sek-ui-button-group .sek-ui-button:first-child{border-radius:3px 0 0 3px}.sek-ui-button-group .sek-ui-button+.sek-ui-button{margin-left:-1px}.sek-ui-button-group .sek-ui-button:last-child{border-radius:0 3px 3px 0}.sek-ui-button{height:28px;line-height:25px;padding:0 10px 2px;border-radius:3px;white-space:nowrap;border-width:1px;border-style:solid;display:inline-flex;text-decoration:none;font-size:12px;margin:0;cursor:pointer;-webkit-appearance:none;background:0 0;color:#555;border-color:#ccc;background:#f7f7f7;box-shadow:inset 0 -1px 0 #ccc;vertical-align:top}.sek-ui-button:hover{background:#fafafa;border-color:#999;box-shadow:inset 0 -1px 0 #999;color:#23282d}.sek-ui-button:active:not(:disabled){background:#eee;border-color:#999;box-shadow:inset 0 1px 0 #999}.sek-ui-button:focus:not(:disabled){background:#fafafa;color:#23282d;border-color:#999;box-shadow:inset 0 -1px 0 #999,0 0 0 2px #fbfbfb;outline:0}.sek-ui-button.is-selected{background:#555d66;border-color:#555d66;box-shadow:inset 0 -1px 0 #555d66;color:#fff;text-decoration:none}.sek-ui-button.is-selected:focus:not(:disabled),.sek-ui-button.is-selected:hover{background:#555d66;border-color:#4f4f4f;color:#fff}.sek-ui-button.is-selected:focus:not(:disabled){box-shadow:inset 0 -1px 0 #4f4f4f}.sek-ui-button.is-selected:focus:not(:disabled){outline:0}.sek-content-type-wrapper{margin-bottom:8px;width:100%;float:left}.sek-content-type-wrapper .sek-ui-button-group{display:block}.sek-content-type-wrapper .sek-ui-button{width:49%;text-align:center;display:inline-block;padding:3px 0;height:auto;text-transform:uppercase}.sek-input-device-switcher .sek-switcher:before{display:inline-block;-webkit-font-smoothing:antialiased;font:normal 20px/30px dashicons;vertical-align:top;color:#656a6f;position:relative;top:-5px}.sek-input-device-switcher .sek-switcher{cursor:pointer;background:0 0;border:none;padding:0 1px;margin:0 0 0 -2px;box-shadow:none;border-top:1px solid transparent;border-bottom:4px solid transparent;-webkit-transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out;-o-transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out;transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out}.sek-input-device-switcher .sek-switcher:focus,.sek-input-device-switcher .sek-switcher:hover{background-color:#fff}.sek-input-device-switcher .sek-switcher.active:before{color:#191e23}.sek-input-device-switcher .sek-switcher:focus:before,.sek-input-device-switcher .sek-switcher:hover:before{color:#0073aa}.sek-input-device-switcher .preview-desktop:before{content:"\f472"}.sek-input-device-switcher .preview-tablet:before{content:"\f471"}.sek-input-device-switcher .preview-mobile:before{content:"\f470"}.sek-range-with-unit-picker-wrapper{width:100%;float:left;margin-bottom:8px}.sek-range-with-unit-picker-wrapper .sek-unit-wrapper{float:right}.sek-range-with-unit-picker-wrapper>div{float:left}.sek-borders{width:100%;float:left;margin-bottom:8px}.sek-borders>div{float:left;width:100%}.sek-borders .sek-range-unit-wrapper>div{float:left}.sek-borders .sek-border-type-wrapper{margin-bottom:5px}.sek-borders .sek-range-unit-wrapper{margin-bottom:5px}.sek-borders .sek-range-unit-wrapper .sek-unit-wrapper{float:right}.sek-borders .sek-color-wrapper{width:100%}.sek-borders .sek-color-wrapper .sek-color-picker{width:50%;float:left}.sek-borders .sek-color-wrapper .sek-reset-button{width:50%;float:right}[data-sek-radius-type=top_right]>i.material-icons{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}[data-sek-radius-type=bottom_right]>i.material-icons{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}[data-sek-radius-type=bottom_left]>i.material-icons{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.sek-range-wrapper{width:44%;margin-right:4px}.sek-no-unit-picker .sek-range-wrapper{width:70%}.sek-number-wrapper{width:50px;margin-right:5px}.sek-range-input{flex:1;width:100%;padding:0;-webkit-appearance:none;background:0 0}.sek-range-input::-webkit-slider-thumb{-webkit-appearance:none;height:20px;width:20px;border-radius:50%;cursor:pointer;background:#555d66;border:4px solid transparent;background-clip:padding-box;box-sizing:border-box;margin-top:-8px}.sek-range-input::-moz-range-thumb{height:20px;width:20px;border-radius:50%;cursor:pointer;background:#555d66;border:4px solid transparent;background-clip:padding-box;box-sizing:border-box;margin-top:-7px}.sek-range-input::-ms-thumb{height:20px;width:20px;border-radius:50%;cursor:pointer;background:#555d66;border:4px solid transparent;background-clip:padding-box;box-sizing:border-box;margin-top:-8px}.sek-range-input:focus{outline:0}.sek-range-input::-webkit-slider-runnable-track{height:3px;cursor:pointer;background:#e2e4e7;border-radius:1.5px;margin-top:-4px}.sek-range-input::-moz-range-track{height:3px;cursor:pointer;background:#e2e4e7;border-radius:1.5px}.sek-range-input::-ms-track{margin-top:-4px;background:0 0;border-color:transparent;color:transparent;height:3px;cursor:pointer;background:#e2e4e7;border-radius:1.5px}.sek-animated-arrow{position:absolute;left:-20px;margin-left:6px;top:3px;font-size:10px;color:#617379;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;-o-transition:transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}[data-sek-expanded=true] label>.customize-control-title .sek-animated-arrow{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}[data-sek-expanded=true] label>.customize-control-title .sek-ctrl-accordion-title,[data-sek-expanded] label>.customize-control-title .sek-ctrl-accordion-title:hover{text-decoration:underline;text-underline-position:under}.sek-level-option-icon{padding-right:5px;min-width:22px;text-align:center}#customize-preview iframe{top:36px}#nimble-top-bar{max-height:36px;position:absolute;text-align:center;right:0;left:0;z-index:20;color:#fff;display:block;-webkit-transition:all .3s ease-in-out;-moz-transition:all,.3s ease-in-out;-ms-transition:all,.3s ease-in-out;-o-transition:all,.3s ease-in-out;transition:all .3s ease-in-out;opacity:.3;top:0;background:rgba(0,0,0,.5);padding:2px;z-index:99999;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;flex:0 0 100%;max-width:100%}body.nimble-top-bar-visible #nimble-top-bar{opacity:1}#nimble-top-bar:hover{background:rgba(0,0,0,.7)}#nimble-top-bar .nimble-top-bar-content{display:inline-block;line-height:20px;width:80%}#nimble-top-bar .sek-do-undo .icon:before{display:inline-block;-webkit-font-smoothing:antialiased;font:normal 20px/30px dashicons;vertical-align:top;color:#fff}#nimble-top-bar .sek-settings{font-size:18px;padding:0 10px}#nimble-top-bar button{background:0 0;border:none;color:#fff;cursor:pointer}#nimble-top-bar button[data-nimble-state=disabled]{cursor:inherit;opacity:.4!important;cursor:not-allowed}#nimble-top-bar .sek-do-undo button:hover{opacity:1}#nimble-top-bar .sek-do-undo button:focus{outline:0}#nimble-top-bar .sek-do-undo .icon.undo:before{content:"\f171";-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}#nimble-top-bar .sek-do-undo .icon.do:before{content:"\f172";-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}#nimble-top-bar .sek-add-content button{padding-top:3px}#nimble-top-bar .sek-nimble-doc{position:absolute;right:10px;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;flex:0 0 100%;max-width:100%}#nimble-top-bar .sek-nimble-doc img{width:30px;height:30px;position:relative;top:2px;-webkit-filter:grayscale(100%);filter:grayscale(100%);-webkit-filter:gray;filter:gray}#nimble-top-bar .sek-nimble-doc:hover img{-webkit-filter:none;filter:none;-webkit-filter:none;filter:none}#nimble-top-bar .sek-notifications{max-width:300px;overflow:hidden}#nimble-top-save-ui{height:300px;padding:20px;position:absolute;top:-300px;right:0;left:0;z-index:20;color:#fff;display:block;-webkit-transition:all .3s ease-in-out;-moz-transition:all,.3s ease-in-out;-ms-transition:all,.3s ease-in-out;-o-transition:all,.3s ease-in-out;transition:all .3s ease-in-out;opacity:.3;background:rgba(0,0,0,.5);z-index:99999;max-width:100%}#nimble-top-save-ui>div{width:100%}body.nimble-save-ui-visible #nimble-top-save-ui{opacity:1;top:36px}#nimble-top-save-ui .sek-cancel-save{position:absolute;bottom:10px;right:10px}#nimble-top-save-ui #sek-saved-section-title.error{border:1px solid red}#customize-preview iframe,#nimble-level-tree{-webkit-transition:top .3s ease-in-out;-moz-transition:top,.3s ease-in-out;-ms-transition:top,.3s ease-in-out;-o-transition:top,.3s ease-in-out;transition:top .3s ease-in-out}#customize-preview iframe{z-index:1}.sek-level-tree-expanded #customize-preview iframe{top:366px;height:calc(100vh - 366px)}.sek-level-tree-expanded #nimble-top-bar .sek-level-tree button{color:#44b9e2}#nimble-level-tree{background:#f0f0f0!important;border-bottom:1px solid #aaa!important;color:#222!important;font-size:12px!important;position:absolute;top:36px;right:0;left:0;height:299px;overflow:auto;padding:15px;z-index:0}#nimble-level-tree ul li{padding-left:30px;cursor:pointer;margin-bottom:8px}#nimble-level-tree ul li .sek-remove-level{font-size:16px;opacity:.6}#nimble-level-tree ul li .sek-remove-level:hover{opacity:1}#nimble-level-tree ul li .sek-level-infos{line-height:30px;height:30px;padding-left:33px;position:relative;width:calc(100% - 25px)}.sek-level-infos .sek-inner-level-infos{background:inherit;width:inherit;height:inherit;line-height:inherit;padding-left:4px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:background .2s ease;transition:background .2s ease;-o-transition:background .2s ease}.sek-inner-level-infos:hover{color:#000;background:#fff}.sek-close-level-tree{position:fixed;top:44px;right:25px}img.sek-svg-mod-icon{max-width:45px}.sek-level-infos::before{position:absolute;left:-31px;background:#a2aab2;width:63px;height:2px;content:"";top:calc(50% - 1px)}#nimble-level-tree ul>li:first-child::before{position:absolute;content:"";background:#a2aab2;top:-15px;height:16px;bottom:0;left:-2px;width:2px}#nimble-level-tree ul>li:last-child::after{position:absolute;content:"";background:#f0f0f0;top:16px;bottom:0;left:-2px;width:2px}#nimble-level-tree ul{border-left:2px solid #a2aab2;position:relative}#nimble-level-tree ul>li:last-child{position:relative}.sek-float-right{float:right}.sek-float-left{float:left}.sek-flex-vertical-center{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}li[id^=accordion-section-__nimble__]{margin-top:16px}li[id^=accordion-section-__nimble__]>h3{border-top:1px solid #ddd}
assets/czr/sek/js/ccat-sek-control.js CHANGED
@@ -1,4 +1,4 @@
1
-
2
  var CZRSeksPrototype = CZRSeksPrototype || {};
3
  (function ( api, $ ) {
4
  $.extend( CZRSeksPrototype, {
@@ -8,42 +8,115 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8
  if ( _.isUndefined( window.sektionsLocalizedData ) ) {
9
  throw new Error( 'CZRSeksPrototype => missing localized server params sektionsLocalizedData' );
10
  }
 
11
  if ( ! _.isFunction( api.czr_activeSkopes ) ) {
12
  throw new Error( 'CZRSeksPrototype => api.czr_activeSkopes' );
13
  }
 
14
  self.SECTION_ID_FOR_GLOBAL_OPTIONS = '__globalOptionsSectionId';
15
  self.SECTION_ID_FOR_LOCAL_OPTIONS = '__localOptionsSection';
 
 
16
  self.SECTION_ID_FOR_CONTENT_PICKER = '__content_picker__';
 
 
17
  self.MAX_NUMBER_OF_COLUMNS = 12;
 
 
 
18
  self.SETTING_UPDATE_BUFFER = 100;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  self.defaultLocalSektionSettingValue = self.getDefaultSektionSettingValue( 'local' );
 
 
20
  self.localSectionsSettingId = new api.Value( {} );
 
 
 
 
21
  self.registered = new api.Value([]);
22
 
23
 
24
  api.bind( 'ready', function() {
25
  self.doSektionThinksOnApiReady();
26
  });//api.bind( 'ready' )
 
 
 
 
 
 
 
 
27
  api.bind( 'save-request-params', function( query ) {
28
  $.extend( query, { local_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' ) } );
29
  });
30
 
31
  },// initialize()
 
 
 
 
32
  doSektionThinksOnApiReady : function() {
33
  var self = this;
 
 
34
  self.registerAndSetupDefaultPanelSectionOptions();
 
 
 
 
 
 
 
 
 
 
35
  self.localSectionsSettingId.callbacks.add( function( collectionSettingIds, previousCollectionSettingIds ) {
 
 
36
  try { self.setupSettingsToBeSaved(); } catch( er ) {
37
  api.errare( 'Error in self.localSectionsSettingId.callbacks => self.setupSettingsToBeSaved()' , er );
38
  }
 
 
39
  self.initializeHistoryLogWhenSettingsRegistered();
 
 
 
 
 
 
 
40
  });
 
 
 
 
 
41
  var doSkopeDependantActions = function( newSkopes, previousSkopes ) {
42
  self.setContextualCollectionSettingIdWhenSkopeSet( newSkopes, previousSkopes );
 
 
43
  api.section( self.SECTION_ID_FOR_LOCAL_OPTIONS, function( _section_ ) {
44
  _section_.deferred.embedded.done( function() {
45
  if( true === _section_.boundForLocalOptionGeneration )
46
  return;
 
47
  _section_.boundForLocalOptionGeneration = true;
48
  _section_.expanded.bind( function( expanded ) {
49
  if ( true === expanded ) {
@@ -52,27 +125,58 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
52
  });
53
  });
54
  });
 
 
 
 
55
  api.section( self.SECTION_ID_FOR_GLOBAL_OPTIONS, function( _section_ ) {
56
  if ( true === _section_.nimbleGlobalOptionGenerated )
57
  return;
58
  self.generateUI({ action : 'sek-generate-global-options-ui'});
59
  _section_.nimbleGlobalOptionGenerated = true;
60
  });
 
 
61
  api.trigger('nimble-ready-for-current-skope');
62
  };//doSkopeDependantActions()
 
 
63
  if ( ! _.isEmpty( api.czr_activeSkopes().local ) ) {
64
  doSkopeDependantActions();
65
  }
 
 
 
 
66
  api.czr_activeSkopes.callbacks.add( function( newSkopes, previousSkopes ) {
67
  doSkopeDependantActions( newSkopes, previousSkopes );
68
  });
 
 
 
69
  self.reactToPreviewMsg();
 
 
70
  self.setupDnd();
 
 
 
 
71
  self.setupTinyMceEditor();
 
 
72
  self.schedulePrintSectionJson();
 
 
 
 
73
  self.bind( 'sek-ui-removed', function() {
74
  api.previewedDevice( 'desktop' );
75
  });
 
 
 
 
76
  api.previewedDevice.bind( function( device ) {
77
  var currentControls = _.filter( self.registered(), function( uiData ) {
78
  return 'control' == uiData.what;
@@ -85,10 +189,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
85
  });
86
  });
87
  });
 
 
88
  $('#customize-notifications-area').on( 'click', '[data-sek-reset="true"]', function() {
89
  self.resetCollectionSetting();
90
  });
 
 
 
 
 
91
  self.bind( 'sek-ui-pre-removal', function( params ) {
 
92
  if ( 'control' == params.what && -1 < params.id.indexOf( 'draggable') ) {
93
  api.control( params.id, function( _ctrl_ ) {
94
  _ctrl_.container.find( '[draggable]' ).each( function() {
@@ -96,6 +208,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
96
  });
97
  });
98
  }
 
 
 
99
  if ( 'control' == params.what ) {
100
  api.control( params.id, function( _ctrl_ ) {
101
  _ctrl_.container.find( 'select' ).each( function() {
@@ -106,57 +221,121 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
106
  });
107
  }
108
  });
 
 
 
 
109
  api.bind( 'czr-new-registered', function( params ) {
 
 
110
  if ( _.isUndefined( params.origin ) ) {
111
  throw new Error( 'czr-new-registered event => missing params.origin' );
112
  }
113
  if ( 'nimble' !== params.origin )
114
  return;
 
 
115
  if ( false !== params.track ) {
116
  var currentlyRegistered = self.registered();
117
  var newRegistered = $.extend( true, [], currentlyRegistered );
 
118
  var duplicateCandidate = _.findWhere( newRegistered, { id : params.id } );
119
  if ( ! _.isEmpty( duplicateCandidate ) && _.isEqual( duplicateCandidate, params ) ) {
120
  throw new Error( 'register => duplicated element in self.registered() collection ' + params.id );
121
  }
122
  newRegistered.push( params );
123
  self.registered( newRegistered );
 
 
 
124
  }
125
  });
 
 
 
 
 
 
 
 
 
 
 
 
126
  self.setupTopBar();//@see specific dev file
 
 
127
  if ( sektionsLocalizedData.isSavedSectionEnabled ) {
128
  self.setupSaveUI();
129
  }
 
 
 
 
 
130
  self.lastClickedTargetInPreview = new api.Value();
131
  self.lastClickedTargetInPreview.bind( function( to, from ) {
 
 
 
 
 
132
  if ( _.isObject( to ) && to.id ) {
133
  api.previewer.send( 'sek-set-double-click-target', to );
134
  } else {
 
135
  api.previewer.send( 'sek-reset-double-click-target' );
136
  }
 
 
137
  clearTimeout( $(window).data('_preview_target_timer_') );
138
  $(window).data('_preview_target_timer_', setTimeout(function() {
 
139
  self.lastClickedTargetInPreview( {} );
 
140
  api.previewer.send( 'sek-reset-double-click-target' );
141
  }, 20000 ) );
142
  });
 
 
 
 
143
  api.previewer.bind( 'sek-clean-target-drop-zone', function() {
 
144
  self.lastClickedTargetInPreview({});
145
  });
 
 
146
  $(document).keydown(function( evt ) {
 
147
  if ( evt && 27 === evt.keyCode ) {
148
  self.lastClickedTargetInPreview({});
149
  }
150
  });
151
  },//doSektionThinksOnApiReady
 
 
 
 
 
 
 
 
152
  registerAndSetupDefaultPanelSectionOptions : function() {
153
  var self = this;
 
 
154
  var SektionPanelConstructor = api.Panel.extend({
 
 
155
  isContextuallyActive : function () {
156
  return this.active();
157
  },
158
  _toggleActive : function(){ return true; }
159
  });
 
 
 
160
  api.panel( sektionsLocalizedData.sektionsPanelId, function( _mainPanel_ ) {
161
  _mainPanel_.deferred.embedded.done( function() {
162
  var $sidePanelTitleEl = _mainPanel_.container.find('h3.accordion-section-title'),
@@ -164,14 +343,25 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
164
  logoHtml = [ '<img class="sek-nimble-logo" alt="'+ _mainPanel_.params.title +'" src="', sektionsLocalizedData.baseUrl, '/assets/img/nimble/nimble_horizontal.svg?ver=' + sektionsLocalizedData.nimbleVersion , '"/>' ].join('');
165
 
166
  if ( 0 < $sidePanelTitleEl.length ) {
 
 
167
  var $sidePanelTitleElSpan = $sidePanelTitleEl.find('span');
168
  $sidePanelTitleEl
169
  .addClass('sek-side-nimble-logo-wrapper')
170
  .html( logoHtml )
171
  .append( $sidePanelTitleElSpan );
172
  }
 
 
 
 
 
 
 
173
  });
174
  });
 
 
175
  api.CZR_Helpers.register({
176
  origin : 'nimble',
177
  what : 'panel',
@@ -181,6 +371,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
181
  constructWith : SektionPanelConstructor,
182
  track : false,//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
183
  });
 
 
 
184
  api.CZR_Helpers.register({
185
  origin : 'nimble',
186
  what : 'section',
@@ -190,6 +383,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
190
  priority : 20,
191
  track : false,//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
192
  constructWith : api.Section.extend({
 
 
193
  isContextuallyActive : function () {
194
  return this.active();
195
  },
@@ -197,17 +392,26 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
197
  })
198
  }).done( function() {
199
  api.section( self.SECTION_ID_FOR_GLOBAL_OPTIONS, function( _section_ ) {
 
200
  var $sectionTitleEl = _section_.container.find('.accordion-section-title'),
201
  $panelTitleEl = _section_.container.find('.customize-section-title h3');
 
 
202
  if ( 0 < $sectionTitleEl.length ) {
203
  $sectionTitleEl.prepend( '<i class="fas fa-globe sek-level-option-icon"></i>' );
204
  }
 
 
205
  if ( 0 < $panelTitleEl.length ) {
206
  $panelTitleEl.find('.customize-action').after( '<i class="fas fa-globe sek-level-option-icon"></i>' );
207
  }
 
 
208
  self.scheduleModuleAccordion.call( _section_ );
209
  });
210
  });
 
 
211
  api.CZR_Helpers.register({
212
  origin : 'nimble',
213
  what : 'section',
@@ -217,6 +421,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
217
  priority : 10,
218
  track : false,//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
219
  constructWith : api.Section.extend({
 
 
220
  isContextuallyActive : function () {
221
  return this.active();
222
  },
@@ -224,19 +430,32 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
224
  })
225
  }).done( function() {
226
  api.section( self.SECTION_ID_FOR_LOCAL_OPTIONS, function( _section_ ) {
 
227
  var $sectionTitleEl = _section_.container.find('.accordion-section-title'),
228
  $panelTitleEl = _section_.container.find('.customize-section-title h3');
 
 
229
  if ( 0 < $sectionTitleEl.length ) {
230
  $sectionTitleEl.prepend( '<i class="fas fa-map-marker-alt sek-level-option-icon"></i>' );
231
  }
 
 
232
  if ( 0 < $panelTitleEl.length ) {
233
  $panelTitleEl.find('.customize-action').after( '<i class="fas fa-map-marker-alt sek-level-option-icon"></i>' );
234
  }
 
 
235
  self.scheduleModuleAccordion.call( _section_ );
236
  });
237
  });
 
 
 
 
 
238
  api.CZR_Helpers.register( {
239
  origin : 'nimble',
 
240
  what : 'setting',
241
  id : sektionsLocalizedData.optNameForGlobalOptions,
242
  dirty : false,
@@ -244,6 +463,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
244
  transport : 'refresh',//'refresh',//// ,
245
  type : 'option'
246
  });
 
 
 
247
  api.CZR_Helpers.register({
248
  origin : 'nimble',
249
  what : 'section',
@@ -253,12 +475,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
253
  priority : 30,
254
  track : false,//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
255
  constructWith : api.Section.extend({
 
 
256
  isContextuallyActive : function () {
257
  return this.active();
258
  },
259
  _toggleActive : function(){ return true; }
260
  })
261
  }).done( function() {
 
 
 
 
 
262
  api.section( self.SECTION_ID_FOR_CONTENT_PICKER, function( _section_ ) {
263
  if ( 'resolved' != api.czr_initialSkopeCollectionPopulated.state() ) {
264
  api.czr_initialSkopeCollectionPopulated.done( function() {
@@ -270,12 +499,28 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
270
  });
271
  });
272
  },//registerAndSetupDefaultPanelSectionOptions()
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  setContextualCollectionSettingIdWhenSkopeSet : function( newSkopes, previousSkopes ) {
274
  var self = this;
275
  previousSkopes = previousSkopes || {};
 
276
  if ( ! _.isEmpty( previousSkopes.local ) && api.panel( sektionsLocalizedData.sektionsPanelId ).expanded() ) {
277
  api.previewer.trigger('sek-pick-content');
278
  }
 
 
279
  sektionsData = api.czr_skopeBase.getSkopeProperty( 'sektions', 'local');
280
  if ( sektionsLocalizedData.isDevMode ) {
281
  api.infoLog( '::setContextualCollectionSettingIdWhenSkopeSet => SEKTIONS DATA ? ', sektionsData );
@@ -290,9 +535,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
290
  }
291
  });//$.extend()
292
  })( wp.customize, jQuery );
 
293
  var CZRSeksPrototype = CZRSeksPrototype || {};
294
  (function ( api, $ ) {
295
  $.extend( CZRSeksPrototype, {
 
296
  setupTopBar : function() {
297
  var self = this;
298
  self.topBarId = '#nimble-top-bar';
@@ -319,14 +566,23 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
319
  api.previewer.bind('ready', function() {
320
  $(api.previewer.targetWindow().document ).on( 'mousemove scroll,', _.throttle( trackMouseMovements , 50 ) );
321
  });
 
 
322
  self.setupLevelTree();
323
  },
 
 
 
 
 
 
324
  toggleTopBar : function( visible ) {
325
  visible = _.isUndefined( visible ) ? true : visible;
326
  var self = this,
327
  _renderAndSetup = function() {
328
  $.when( self.renderAndSetupTopBarTmpl({}) ).done( function( $_el ) {
329
  self.topBarContainer = $_el;
 
330
  _.delay( function() {
331
  $('body').addClass('nimble-top-bar-visible');
332
  }, 200 );
@@ -336,7 +592,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
336
  var dfd = $.Deferred();
337
  $('body').removeClass('nimble-top-bar-visible');
338
  if ( self.topBarContainer && self.topBarContainer.length ) {
 
339
  _.delay( function() {
 
340
  dfd.resolve();
341
  }, 300 );
342
  } else {
@@ -353,10 +611,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
353
  });
354
  }
355
  },
 
 
 
356
  renderAndSetupTopBarTmpl : function( params ) {
357
- var self = this;
 
 
 
358
  if ( $( self.topBarId ).length > 0 )
359
  return $( self.topBarId );
 
 
360
  try {
361
  _tmpl = wp.template( 'nimble-top-bar' )( {} );
362
  } catch( er ) {
@@ -364,6 +630,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
364
  return false;
365
  }
366
  $('#customize-preview').after( $( _tmpl ) );
 
 
367
  $(document).keydown( function( evt ) {
368
  if ( evt.ctrlKey && _.contains( [89, 90], evt.keyCode ) ) {
369
  try { self.navigateHistory( 90 === evt.keyCode ? 'undo' : 'redo'); } catch( er ) {
@@ -371,6 +639,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
371
  }
372
  }
373
  });
 
 
 
 
374
  $('.sek-add-content', self.topBarId).on( 'click', function(evt) {
375
  evt.preventDefault();
376
  api.previewer.trigger( 'sek-pick-content', { content_type : 'module' });
@@ -385,16 +657,26 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
385
  }
386
  });
387
  $('.sek-settings', self.topBarId).on( 'click', function(evt) {
 
388
  api.panel( sektionsLocalizedData.sektionsPanelId, function( _panel_ ) {
389
  self.rootPanelFocus();
390
  _panel_.focus();
391
  });
 
 
 
 
 
 
392
  });
393
 
394
  $('.sek-nimble-doc', self.topBarId).on( 'click', function(evt) {
395
  evt.preventDefault();
396
  window.open($(this).data('doc-href'), '_blank');
397
  });
 
 
 
398
  var maybePrintNotificationForUsageOfNimbleTemplate = function( templateSettingValue ) {
399
  if ( $(self.topBarId).length < 1 )
400
  return;
@@ -409,18 +691,28 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
409
  };
410
 
411
  var initOnSkopeReady = function() {
 
 
412
  api( self.localSectionsSettingId(), function( _localSectionsSetting_ ) {
413
  var localSectionsValue = _localSectionsSetting_(),
414
  initialLocalTemplateValue = ( _.isObject( localSectionsValue ) && localSectionsValue.local_options && localSectionsValue.local_options.template ) ? localSectionsValue.local_options.template : null;
 
415
  maybePrintNotificationForUsageOfNimbleTemplate( initialLocalTemplateValue );
416
  });
 
 
 
417
  api( self.getLocalSkopeOptionId() + '__template', function( _set_ ) {
418
  _set_.bind( function( to, from ) {
419
  maybePrintNotificationForUsageOfNimbleTemplate( to );
420
  });
421
  });
422
  };
 
 
423
  initOnSkopeReady();
 
 
424
  api.bind('nimble-ready-for-current-skope', function() {
425
  initOnSkopeReady();
426
  });
@@ -429,13 +721,24 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
429
  }
430
  });//$.extend()
431
  })( wp.customize, jQuery );
 
432
  var CZRSeksPrototype = CZRSeksPrototype || {};
433
  (function ( api, $ ) {
434
  $.extend( CZRSeksPrototype, {
435
  /* HISTORY */
 
 
436
  navigateHistory : function( direction ) {
437
  var self = this,
438
  historyLog = $.extend( true, [], self.historyLog() );
 
 
 
 
 
 
 
 
439
  var previous,
440
  current,
441
  future,
@@ -461,6 +764,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
461
  }
462
  switch( direction ) {
463
  case 'undo' :
 
464
  if ( ! _.isEmpty( current ) && ! _.isEmpty( previous ) ) {
465
  newSettingValue = previous.value;
466
  previousSektionToRefresh = current.sektionToRefresh;
@@ -468,6 +772,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
468
  }
469
  break;
470
  case 'redo' :
 
471
  if ( ! _.isEmpty( future ) ) {
472
  newSettingValue = future.value;
473
  previousSektionToRefresh = current.sektionToRefresh;
@@ -476,6 +781,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
476
  break;
477
  }
478
  });
 
 
479
  if( ! _.isUndefined( newSettingValue ) ) {
480
  if ( ! _.isEmpty( newSettingValue.local ) ) {
481
  api( self.localSectionsSettingId() )( self.validateSettingValue( newSettingValue.local ), { navigatingHistoryLogs : true } );
@@ -483,12 +790,40 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
483
  if ( ! _.isEmpty( newSettingValue.global ) ) {
484
  api( self.getGlobalSectionsSettingId() )( self.validateSettingValue( newSettingValue.global ), { navigatingHistoryLogs : true } );
485
  }
 
 
486
  var previewHasBeenRefreshed = false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
487
  api.previewer.refresh();
 
 
488
  api.previewer.trigger( 'sek-pick-content', {});
 
 
489
  self.cleanRegistered();//<= normal cleaning
490
  self.cleanRegisteredLevelSettingsAfterHistoryNavigation();// setting cleaning
491
  }
 
 
492
  var currentKey = _.findKey( historyLog, { status : 'current'} );
493
  currentKey = Number( currentKey );
494
  if ( ! _.isNumber( currentKey ) ) {
@@ -498,6 +833,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
498
 
499
  _.each( historyLog, function( log, key ) {
500
  newLog = $.extend( true, {}, log );
 
501
  key = Number( key );
502
  switch( direction ) {
503
  case 'undo' :
@@ -525,22 +861,31 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
525
  }
526
  });//$.extend()
527
  })( wp.customize, jQuery );
 
528
  var CZRSeksPrototype = CZRSeksPrototype || {};
529
  (function ( api, $ ) {
530
  $.extend( CZRSeksPrototype, {
 
531
  setupLevelTree : function() {
532
  var self = this;
533
  self.levelTree = new api.Value([]);
534
- self.levelTree.bind( function( _collection ) {
 
535
  if ( self.levelTreeExpanded() ) {
536
  self.renderOrRefreshTree();
537
  }
538
  });
 
 
 
539
  self.levelTreeExpanded = new api.Value(false);
540
  self.levelTreeExpanded.bind( function(expanded) {
541
  $('body').toggleClass( 'sek-level-tree-expanded', expanded );
542
  if ( expanded ) {
 
543
  self.setLevelTreeValue();
 
 
544
  if ( _.isEmpty( self.levelTree() ) ) {
545
  api.previewer.trigger('sek-notify', {
546
  type : 'info',
@@ -551,6 +896,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
551
  '</span>'
552
  ].join('')
553
  });
 
554
  self.levelTreeExpanded(false);
555
  return;
556
  }
@@ -563,9 +909,25 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
563
  }, 300 );
564
  }
565
  });
 
 
 
 
 
 
 
 
 
 
566
  api.previewer.bind('ready', function() {
 
 
 
 
567
  self.localSectionsSettingId.callbacks.add( function() {
568
- _.each( [ self.getGlobalSectionsSettingId(), self.localSectionsSettingId() ], function( setId ){
 
 
569
  if ( api(setId)._isBoundForNimbleLevelTree )
570
  return;
571
 
@@ -576,12 +938,17 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
576
  });
577
  });
578
  });
 
 
 
 
579
  $('body').on('click', '#nimble-level-tree [data-nimb-level]', function(evt) {
580
  evt.preventDefault();
581
  evt.stopPropagation();
582
- var $el = $(evt.target);
583
- api.previewer.send('sek-animate-to-level', { id : $el.data('nimb-id') });
584
- api.previewer.send('sek-display-level-ui', { id : $el.data('nimb-id') });
 
585
  });
586
 
587
  $('body').on('click', '#nimble-level-tree .sek-remove-level', function(evt) {
@@ -596,41 +963,163 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
596
  in_column : $el.closest('[data-nimb-level="column"]').data('nimb-id')
597
  });
598
  $el.fadeOut('slow');
 
599
  self.renderOrRefreshTree();
600
  });
 
 
 
 
 
 
601
  },
602
- hasLocalHeaderFooter : function() {
603
- if ( ! api.has( self.localSectionsSettingId() ) )
604
- return;
605
- },
606
  setLevelTreeValue : function() {
607
  var self = this,
608
- globalId = self.getGlobalSectionsSettingId(),
609
- localId = self.localSectionsSettingId();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
610
 
611
- _global_col = api(globalId)();
612
- _global_col = ( _.isObject( _global_col ) && ! _.isEmpty( _global_col.collection ) ) ? _global_col.collection : [];
613
- _global_col = _.isArray( _global_col ) ? _global_col : [];
 
614
 
615
- _local_col = api(localId)();
616
- _local_col = ( _.isObject( _local_col ) && ! _.isEmpty( _local_col.collection ) ) ? _local_col.collection : [];
617
- _local_col = _.isArray( _local_col ) ? _local_col : [];
618
- self.levelTree( _.union( _global_col, _local_col ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
619
  },
 
 
 
620
  renderOrRefreshTree : function() {
621
- var self = this;
 
622
  if( $('#nimble-level-tree').length < 1 ) {
623
- $( '#customize-preview' ).after( $('<div/>', { id : 'nimble-level-tree' } ) );
 
 
 
 
 
 
 
624
  }
625
- $('#nimble-level-tree').html( self.getLevelTreeHtml( self.levelTree() ) );
626
  },
 
 
 
627
  getLevelTreeHtml : function( _col, level ) {
628
  var self = this;
 
 
 
 
 
 
 
629
  if ( !_.isArray( _col ) || _.isEmpty( _col ) ) {
630
  api.errare('::buildLevelTree => invalid collection param', _col );
631
  return _html;
632
  }
633
- var remove_icon_html = '<i class="material-icons sek-remove-level" title="">delete_forever</i>';
634
  _html = '<ul>';
635
  _.each( _col, function( _level_param ) {
636
  if ( _.isUndefined( _level_param.level ) ){
@@ -642,24 +1131,100 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
642
  return;
643
  }
644
 
645
- if ( 'module' !== _level_param.level && ( _.isUndefined( _level_param.collection ) || !_.isArray( _level_param.collection ) || _.isEmpty( _level_param.collection ) ) )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
646
  return;
647
- remove_icon_html = 'location' !== _level_param.level ? remove_icon_html : '';
648
- _html = _html + '<li data-nimb-level="'+_level_param.level+'" data-nimb-id="'+_level_param.id+'">';
649
- _html = _html + [ _level_param.level , ' id :', _level_param.id, ' ', remove_icon_html ].join('');
650
- if ( _.isArray( _level_param.collection ) && ! _.isEmpty( _level_param.collection ) ) {
651
- _html = _html + self.getLevelTreeHtml( _level_param.collection, level );
652
  }
653
- _html = _html + '</li>';
654
  });
655
- _html = _html + '</ul>';
656
- return _html;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
657
  }
658
  });//$.extend()
659
  })( wp.customize, jQuery );
 
660
  var CZRSeksPrototype = CZRSeksPrototype || {};
661
  (function ( api, $ ) {
662
  $.extend( CZRSeksPrototype, {
 
 
663
  setupSaveUI : function() {
664
  var self = this;
665
  self.saveUIVisible = new api.Value( false );
@@ -667,15 +1232,23 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
667
  self.toggleSaveUI( to, params ? params.id : null );
668
  });
669
  },
 
 
 
 
 
 
670
  toggleSaveUI : function( visible, sectionId ) {
671
  visible = _.isUndefined( visible ) ? true : visible;
672
  var self = this,
673
  _renderAndSetup = function() {
674
  $.when( self.renderAndSetupSaveUITmpl({}) ).done( function( $_el ) {
675
  self.saveUIContainer = $_el;
 
676
  _.delay( function() {
677
  $('body').addClass('nimble-save-ui-visible');
678
  }, 200 );
 
679
  $('#sek-saved-section-id').val( sectionId );
680
  });
681
  },
@@ -683,6 +1256,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
683
  var dfd = $.Deferred();
684
  $('body').removeClass('nimble-save-ui-visible');
685
  if ( $( '#nimble-top-save-ui' ).length > 0 ) {
 
686
  _.delay( function() {
687
 
688
  self.saveUIContainer.remove();
@@ -702,12 +1276,27 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
702
  });
703
  }
704
  },
 
 
 
 
 
 
 
 
 
 
 
 
705
  preProcessSektion : function( sectionModel ) {
706
  var self = this, sektionCandidate = self.cleanIds( sectionModel );
707
  return _.omit( sektionCandidate, function( val, key ) {
708
  return _.contains( ['id', 'level'], key );
709
  });
710
  },
 
 
 
711
  renderAndSetupSaveUITmpl : function( params ) {
712
  if ( $( '#nimble-top-save-ui' ).length > 0 )
713
  return $( '#nimble-top-save-ui' );
@@ -721,6 +1310,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
721
  return false;
722
  }
723
  $('#customize-preview').after( $( _tmpl ) );
 
 
724
  $('.sek-do-save-section', '#nimble-top-save-ui').on( 'click', function(evt) {
725
  evt.preventDefault();
726
  var sectionModel = $.extend( true, {}, self.getLevelModel( $('#sek-saved-section-id').val() ) ),
@@ -754,6 +1345,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
754
  sek_data: JSON.stringify( sek_data )
755
  })
756
  .done( function( response ) {
 
 
757
  api.previewer.trigger('sek-notify', {
758
  type : 'success',
759
  duration : 10000,
@@ -787,12 +1380,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
787
  }
788
  });//$.extend()
789
  })( wp.customize, jQuery );
 
790
  var CZRSeksPrototype = CZRSeksPrototype || {};
791
  (function ( api, $ ) {
792
  $.extend( CZRSeksPrototype, {
 
 
 
 
 
793
  setupSettingsToBeSaved : function() {
794
  var self = this,
795
  serverCollection;
 
 
796
  var _settingsToRegister_ = {
797
  'local' : { collectionSettingId : self.localSectionsSettingId() },//<= "nimble___[skp__post_page_10]"
798
  'global' : { collectionSettingId : self.getGlobalSectionsSettingId() }//<= "nimble___[skp__global]"
@@ -803,6 +1404,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
803
  if ( _.isEmpty( settingData.collectionSettingId ) ) {
804
  throw new Error( 'setupSettingsToBeSaved => the collectionSettingId is invalid' );
805
  }
 
 
 
806
  if ( ! api.has( settingData.collectionSettingId ) ) {
807
  var __collectionSettingInstance__ = api.CZR_Helpers.register({
808
  what : 'setting',
@@ -813,18 +1417,60 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
813
  track : false,//don't register in the self.registered()
814
  origin : 'nimble'
815
  });
 
 
 
816
  api( settingData.collectionSettingId, function( sektionSetInstance ) {
 
 
817
  sektionSetInstance.bind( _.debounce( function( newSektionSettingValue, previousValue, params ) {
 
 
 
 
 
 
 
818
  self.trackHistoryLog( sektionSetInstance, params );
819
 
820
  }, 1000 ) );
821
  });//api( settingData.collectionSettingId, function( sektionSetInstance ){}
822
  }//if ( ! api.has( settingData.collectionSettingId ) ) {
823
  });//_.each(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
824
  },// SetupSettingsToBeSaved()
 
 
 
825
  trackHistoryLog : function( sektionSetInstance, params ) {
826
  var self = this,
827
  _isGlobal = sektionSetInstance.id === self.getGlobalSectionsSettingId();
 
 
 
828
  if ( params && true !== params.navigatingHistoryLogs ) {
829
  var newHistoryLog = [],
830
  historyLog = $.extend( true, [], self.historyLog() ),
@@ -835,6 +1481,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
835
  } else if ( ! _.isEmpty( params.to_sektion ) ) {// column moved /
836
  sektionToRefresh = params.to_sektion;
837
  }
 
 
838
  _.each( historyLog, function( log ) {
839
  var newStatus = 'previous';
840
  if ( 'future' == log.status )
@@ -851,8 +1499,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
851
  self.historyLog( newHistoryLog );
852
  }
853
  },
 
 
 
 
854
  initializeHistoryLogWhenSettingsRegistered : function() {
855
  var self = this;
 
856
  self.historyLog = new api.Value([{
857
  status : 'current',
858
  value : {
@@ -861,6 +1514,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
861
  },
862
  action : 'initial'
863
  }]);
 
864
  self.historyLog.bind( function( newLog ) {
865
  if ( _.isEmpty( newLog ) )
866
  return;
@@ -876,6 +1530,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
876
  });
877
  });
878
  },
 
 
 
 
 
879
  validateSettingValue : function( valCandidate ) {
880
  if ( ! _.isObject( valCandidate ) ) {
881
  api.errare('validation error => the setting should be an object', valCandidate );
@@ -884,6 +1543,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
884
  var parentLevel = {},
885
  errorDetected = false,
886
  levelIds = [];
 
887
  var _errorDetected_ = function( msg ) {
888
  api.errare( msg , valCandidate );
889
  api.previewer.trigger('sek-notify', {
@@ -893,7 +1553,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
893
  '<span style="font-size:0.95em">',
894
  '<strong>' + msg + '</strong>',
895
  '<br>',
896
- sektionsLocalizedData.i18n['If this problem locks the Nimble builder, you might try to reset the sections for this page.'],
897
  '<br>',
898
  '<span style="text-align:center;display:block">',
899
  '<button type="button" class="button" aria-label="' + sektionsLocalizedData.i18n.Reset + '" data-sek-reset="true">' + sektionsLocalizedData.i18n.Reset + '</button>',
@@ -909,8 +1569,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
909
  return;
910
  }
911
  if ( _.isUndefined( level ) && _.isEmpty( parentLevel ) ) {
 
912
  level = $.extend( true, {}, valCandidate );
913
  if ( _.isUndefined( level.id ) || _.isUndefined( level.level ) ) {
 
 
 
914
  if ( _.isUndefined( level.collection ) ) {
915
  _errorDetected_( 'validation error => the root level is missing the collection of locations' );
916
  return;
@@ -919,12 +1583,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
919
  _errorDetected_( 'validation error => the root level should not have a "level" or an "id" property' );
920
  return;
921
  }
 
 
922
  _.each( valCandidate.collection, function( _l_ ) {
 
923
  parentLevel = level;
 
924
  _checkWalker_( _l_ );
925
  });
926
  }
927
  } else {
 
 
 
 
928
  if ( _.isEmpty( level.id ) || ! _.isString( level.id )) {
929
  _errorDetected_('validation error => a ' + level.level + ' level must have a valid id' );
930
  return;
@@ -934,6 +1606,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
934
  } else {
935
  levelIds.push( level.id );
936
  }
 
 
 
 
 
 
 
 
937
  if ( _.isEmpty( level.level ) || ! _.isString( level.level ) ) {
938
  _errorDetected_('validation error => a ' + level.level + ' level must have a level property' );
939
  return;
@@ -941,6 +1621,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
941
  _errorDetected_('validation error => the level "' + level.level + '" is not authorized' );
942
  return;
943
  }
 
 
 
944
  if ( 'module' == level.level ) {
945
  if ( ! _.isUndefined( level.collection ) ) {
946
  _errorDetected_('validation error => a module can not have a collection property' );
@@ -952,9 +1635,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
952
  return;
953
  }
954
  }
 
 
955
  if ( _.isUndefined( level.ver_ini ) ) {
 
 
956
  api.errare( 'validateSettingValue() => validation error => a ' + level.level + ' should have a version property : "ver_ini"' );
957
  }
 
 
958
  switch ( level.level ) {
959
  case 'location' :
960
  if ( ! _.isEmpty( parentLevel.level ) ) {
@@ -988,31 +1677,65 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
988
  }
989
  break;
990
  }
 
 
991
  if ( 'module' != level.level ) {
992
  _.each( level.collection, function( _l_ ) {
 
993
  parentLevel = $.extend( true, {}, level );
 
994
  _checkWalker_( _l_ );
995
  });
996
  }
997
  }
998
  };
999
  _checkWalker_();
 
 
 
1000
  return errorDetected ? null : valCandidate;
1001
  },//validateSettingValue
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1002
  resetCollectionSetting : function() {
1003
  var self = this;
1004
  if ( _.isEmpty( self.localSectionsSettingId() ) ) {
1005
  throw new Error( 'setupSettingsToBeSaved => the collectionSettingId is invalid' );
1006
  }
 
1007
  api( self.localSectionsSettingId() )( self.getDefaultSektionSettingValue( 'local' ) );
 
1008
  api.previewer.refresh();
 
1009
  api.notifications.remove( 'sek-notify' );
 
1010
  api.panel( sektionsLocalizedData.sektionsPanelId, function( __main_panel__ ) {
1011
  api.notifications.add( new api.Notification( 'sek-reset-done', {
1012
  type: 'success',
1013
  message: sektionsLocalizedData.i18n['Reset complete'],
1014
  dismissible: true
1015
  } ) );
 
 
1016
  _.delay( function() {
1017
  api.notifications.remove( 'sek-reset-done' );
1018
  }, 5000 );
@@ -1023,12 +1746,26 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1023
  var CZRSeksPrototype = CZRSeksPrototype || {};
1024
  (function ( api, $ ) {
1025
  $.extend( CZRSeksPrototype, {
 
 
 
 
 
 
 
1026
  reactToPreviewMsg : function() {
1027
  var self = this,
1028
  apiParams = {},
1029
  uiParams = {},
1030
  sendToPreview = true, //<= the default behaviour is to send a message to the preview when the setting has been changed
1031
  msgCollection = {
 
 
 
 
 
 
 
1032
  'sek-add-section' : {
1033
  callback : function( params ) {
1034
  sendToPreview = ! _.isUndefined( params.send_to_preview ) ? params.send_to_preview : true;//<= when the level is refreshed when complete, we don't need to send to preview.
@@ -1047,6 +1784,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1047
  return self.updateAPISetting( apiParams );
1048
  },
1049
  complete : function( params ) {
 
1050
  if ( params.apiParams.is_first_section ) {
1051
  api.previewer.trigger( 'sek-refresh-level', {
1052
  level : 'location',
@@ -1054,6 +1792,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1054
  });
1055
  }
1056
  api.previewer.trigger( 'sek-pick-content', {
 
 
1057
  id : params.apiParams ? params.apiParams.id : '',
1058
  content_type : 'section'
1059
  });
@@ -1075,6 +1815,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1075
  return self.updateAPISetting( apiParams );
1076
  },
1077
  complete : function( params ) {
 
 
 
1078
  if ( false !== params.apiParams.autofocus ) {
1079
  api.previewer.trigger( 'sek-pick-content', {});
1080
  }
@@ -1103,10 +1846,17 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1103
  in_sektion : params.apiParams.in_sektion,
1104
  in_column : params.apiParams.in_column
1105
  });
 
 
1106
  self.updateAPISetting({
1107
  action : 'sek-update-fonts',
1108
  is_global_location : self.isGlobalLocation( params.apiParams )
1109
  });
 
 
 
 
 
1110
  api.previewer.trigger('sek-refresh-stylesheet', {
1111
  id : params.apiParams.in_column,
1112
  location_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' )//<= send skope id to the preview so we can use it when ajaxing
@@ -1156,10 +1906,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1156
  },
1157
  complete : function( params ) {
1158
  api.previewer.trigger( 'sek-pick-content', {});
 
 
1159
  self.updateAPISetting({
1160
  action : 'sek-update-fonts',
1161
  is_global_location : self.isGlobalLocation( params.apiParams )
1162
  });
 
 
1163
  if ( 'sek-remove-section' === params.apiParams.action ) {
1164
  var locationLevel = self.getLevelModel( params.apiParams.location );
1165
  if ( _.isEmpty( locationLevel.collection ) ) {
@@ -1218,6 +1972,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1218
  level : 'section',
1219
  in_sektion : params.apiParams.id
1220
  });
 
1221
  if ( params.apiParams.from_location != params.apiParams.to_location ) {
1222
  api.previewer.trigger( 'sek-refresh-level', {
1223
  level : 'location',
@@ -1291,6 +2046,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1291
  });
1292
  }
1293
  },
 
 
 
1294
  'sek-duplicate' : {
1295
  callback : function( params ) {
1296
  sendToPreview = true;
@@ -1335,6 +2093,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1335
  in_sektion : params.apiParams.id
1336
  });
1337
  idForStyleSheetRefresh = params.apiParams.location;
 
1338
  api.previewer.send('sek-animate-to-level', { id : params.apiParams.id });
1339
  break;
1340
  case 'sek-duplicate-column' :
@@ -1356,6 +2115,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1356
  idForStyleSheetRefresh = params.apiParams.in_column;
1357
  break;
1358
  }
 
 
 
 
1359
  api.previewer.trigger('sek-refresh-stylesheet', {
1360
  id : idForStyleSheetRefresh,
1361
  location_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' )//<= send skope id to the preview so we can use it when ajaxing
@@ -1369,6 +2132,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1369
  apiParams = params;
1370
  return self.updateAPISetting( apiParams );
1371
  },
 
 
 
 
 
 
 
 
 
1372
  'sek-add-content-in-new-sektion' : {
1373
  callback : function( params ) {
1374
  sendToPreview = ! _.isUndefined( params.send_to_preview ) ? params.send_to_preview : true;//<= when the level is refreshed when complete, we don't need to send to preview.
@@ -1377,9 +2149,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1377
  apiParams.action = 'sek-add-content-in-new-sektion';
1378
  apiParams.id = sektionsLocalizedData.optPrefixForSektionsNotSaved + self.guid();//we set the id here because it will be needed when ajaxing
1379
  switch( params.content_type) {
 
1380
  case 'module' :
1381
  apiParams.droppedModuleId = sektionsLocalizedData.optPrefixForSektionsNotSaved + self.guid();//we set the id here because it will be needed when ajaxing
1382
  break;
 
 
1383
  case 'preset_section' :
1384
  api.previewer.send( 'sek-maybe-print-loader', { loader_located_in_level_id : params.location });
1385
  api.previewer.send( 'sek-maybe-print-loader', { fullPageLoader : true });
@@ -1395,28 +2170,44 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1395
  id : params.apiParams.droppedModuleId
1396
  });
1397
  break;
 
1398
  case 'preset_section' :
1399
  api.previewer.send( 'sek-clean-loader', { cleanFullPageLoader : true });
1400
  break;
1401
  }
 
 
 
1402
  self.updateAPISetting({
1403
  action : 'sek-update-fonts',
1404
  is_global_location : self.isGlobalLocation( params.apiParams )
1405
  });
 
 
 
 
 
 
 
1406
  var location_skope_id = params.location_skope_id;
1407
  if ( _.isUndefined( location_skope_id ) ) {
1408
  location_skope_id = true === params.is_global_location ? sektionsLocalizedData.globalSkopeId : api.czr_skopeBase.getSkopeProperty( 'skope_id' );
1409
  }
1410
  api.previewer.trigger('sek-refresh-stylesheet', {
 
1411
  location_skope_id : location_skope_id,//<= send skope id to the preview so we can use it when ajaxing
1412
  is_global_location : self.isGlobalLocation( params.apiParams )
1413
  });
 
 
1414
  if ( params.apiParams.is_first_section ) {
1415
  api.previewer.trigger( 'sek-refresh-level', {
1416
  level : 'location',
1417
  id : params.apiParams.location
1418
  });
1419
  }
 
 
1420
  if ( params.apiParams.sektion_to_replace ) {
1421
  api.previewer.trigger( 'sek-remove', {
1422
  id : params.apiParams.sektion_to_replace,
@@ -1425,8 +2216,28 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1425
  level : 'section'
1426
  });
1427
  }
 
 
 
 
 
 
 
 
 
 
1428
  }
1429
  },
 
 
 
 
 
 
 
 
 
 
1430
  'sek-add-preset-section-in-new-nested-sektion' : {
1431
  callback : function( params ) {
1432
  sendToPreview = false;//<= when the level is refreshed when complete, we don't need to send to preview.
@@ -1438,10 +2249,17 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1438
  return self.updateAPISetting( apiParams );
1439
  },
1440
  complete : function( params ) {
 
 
 
 
1441
  api.previewer.trigger('sek-refresh-stylesheet', {
1442
  id : params.apiParams.in_sektion,
1443
  location_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' )//<= send skope id to the preview so we can use it when ajaxing
1444
  });
 
 
 
1445
  self.updateAPISetting({
1446
  action : 'sek-update-fonts',
1447
  is_global_location : self.isGlobalLocation( params.apiParams )
@@ -1453,11 +2271,27 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1453
  });
1454
  }
1455
  },
 
 
 
 
 
 
 
 
1456
  'sek-pick-content' : function( params ) {
1457
  params = _.isObject(params) ? params : {};
 
 
 
1458
  api.czr_sektions.currentContentPickerType = api.czr_sektions.currentContentPickerType || new api.Value();
1459
  api.czr_sektions.currentContentPickerType( params.content_type || 'module' );
 
 
1460
  if ( _.isObject( params ) && params.id ) {
 
 
 
1461
  self.lastClickedTargetInPreview( { id : params.id } );
1462
  }
1463
 
@@ -1467,6 +2301,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1467
  uiParams = {
1468
  action : 'sek-generate-draggable-candidates-picker-ui',
1469
  content_type : params.content_type || 'module',
 
 
 
1470
  was_triggered : _.has( params, 'was_triggered' ) ? params.was_triggered : true,
1471
  focus : _.has( params, 'focus' ) ? params.focus : true
1472
  };
@@ -1504,6 +2341,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1504
  };
1505
  return self.generateUI( uiParams );
1506
  },
 
 
 
 
 
 
 
 
1507
  'sek-notify' : function( params ) {
1508
  sendToPreview = false;
1509
  return $.Deferred(function() {
@@ -1513,10 +2358,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1513
  message: params.message,
1514
  dismissible: true
1515
  } ) );
 
 
1516
  _.delay( function() {
1517
  api.notifications.remove( 'sek-notify' );
1518
  }, params.duration || 5000 );
1519
  });
 
 
1520
  this.resolve({
1521
  is_global_location : self.isGlobalLocation( params )
1522
  });
@@ -1532,6 +2381,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1532
  id : params.id
1533
  };
1534
  uiParams = {};
 
 
1535
  _dfd_.resolve({
1536
  is_global_location : self.isGlobalLocation( params )
1537
  });
@@ -1544,6 +2395,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1544
  return $.Deferred(function(_dfd_) {
1545
  apiParams = {id : params.id};
1546
  uiParams = {};
 
 
1547
  _dfd_.resolve({
1548
  is_global_location : self.isGlobalLocation( params )
1549
  });
@@ -1555,14 +2408,22 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1555
  self.saveUIVisible( true, params );
1556
  return $.Deferred(function(_dfd_) {
1557
  apiParams = {
 
 
 
1558
  };
1559
  uiParams = {};
 
 
1560
  _dfd_.resolve({
1561
  is_global_location : self.isGlobalLocation( params )
1562
  });
1563
  });
1564
  }
1565
  };//msgCollection
 
 
 
1566
  _.each( msgCollection, function( callbackFn, msgId ) {
1567
  api.previewer.bind( msgId, function( params ) {
1568
  var _cb_;
@@ -1576,8 +2437,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1576
  }
1577
 
1578
  try { _cb_( params )
 
 
1579
  .done( function( promiseParams ) {
1580
  promiseParams = promiseParams || {};
 
1581
  if ( sendToPreview ) {
1582
  api.previewer.send(
1583
  msgId,
@@ -1590,12 +2454,26 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1590
  }
1591
  );
1592
  } else {
 
1593
  api.previewer.trigger( [ msgId, 'done' ].join('_'), { apiParams : apiParams, uiParams : uiParams } );
1594
  }
 
1595
  self.trigger( [ msgId, 'done' ].join('_'), params );
1596
  })
1597
  .fail( function( er ) {
1598
  api.errare( 'reactToPreviewMsg => error when firing ' + msgId, er );
 
 
 
 
 
 
 
 
 
 
 
 
1599
  api.previewer.trigger('sek-notify', {
1600
  type : 'error',
1601
  duration : 30000,
@@ -1603,7 +2481,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1603
  '<span style="font-size:0.95em">',
1604
  '<strong>' + er + '</strong>',
1605
  '<br>',
1606
- sektionsLocalizedData.i18n['If this problem locks the Nimble builder, you might try to reset the sections for this page.'],
1607
  '<br>',
1608
  '<span style="text-align:center;display:block">',
1609
  '<button type="button" class="button" aria-label="' + sektionsLocalizedData.i18n.Reset + '" data-sek-reset="true">' + sektionsLocalizedData.i18n.Reset + '</button>',
@@ -1617,6 +2495,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1617
  }
1618
  });
1619
  });
 
 
 
1620
  _.each( msgCollection, function( callbackFn, msgId ) {
1621
  api.previewer.bind( [ msgId, 'done' ].join('_'), function( params ) {
1622
  if ( _.isFunction( callbackFn.complete ) ) {
@@ -1627,11 +2508,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1627
  });
1628
  });
1629
  },//reactToPreview();
 
 
 
 
 
 
 
1630
  schedulePrintSectionJson : function() {
1631
  var self = this;
1632
  var popupCenter = function ( content ) {
1633
  w = 400;
1634
  h = 300;
 
1635
  var dualScreenLeft = ! _.isUndefined( window.screenLeft ) ? window.screenLeft : window.screenX;
1636
  var dualScreenTop = ! _.isUndefined( window.screenTop ) ? window.screenTop : window.screenY;
1637
 
@@ -1645,6 +2534,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1645
  doc.open("text/html");
1646
  doc.write( content );
1647
  doc.close();
 
1648
  if (window.focus) {
1649
  newWindow.focus();
1650
  }
@@ -1653,6 +2543,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1653
  api.previewer.bind( 'sek-to-json', function( params ) {
1654
  var sectionModel = $.extend( true, {}, self.getLevelModel( params.id ) );
1655
  console.log( JSON.stringify( self.cleanIds( sectionModel ) ) );
 
1656
  });
1657
  }//schedulePrintSectionJson
1658
  });//$.extend()
@@ -1660,6 +2551,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1660
  var CZRSeksPrototype = CZRSeksPrototype || {};
1661
  (function ( api, $ ) {
1662
  $.extend( CZRSeksPrototype, {
 
 
 
 
 
 
 
 
 
1663
  generateUI : function( params ) {
1664
  var self = this,
1665
  dfd = $.Deferred();
@@ -1667,7 +2567,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1667
  if ( _.isEmpty( params.action ) ) {
1668
  dfd.reject( 'generateUI => missing action' );
1669
  }
 
 
1670
  switch ( params.action ) {
 
 
 
1671
  case 'sek-generate-module-ui' :
1672
  try{ dfd = self.generateUIforFrontModules( params, dfd ); } catch( er ) {
1673
  api.errare( '::generateUI() => error', er );
@@ -1681,21 +2586,32 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1681
  dfd = $.Deferred();
1682
  }
1683
  break;
 
 
 
 
1684
  case 'sek-generate-draggable-candidates-picker-ui' :
 
1685
  self.cleanRegistered();
1686
  try{ dfd = self.generateUIforDraggableContent( params, dfd ); } catch( er ) {
1687
  api.errare( '::generateUI() => error', er );
1688
  dfd = $.Deferred();
1689
  }
1690
  break;
 
 
1691
  case 'sek-generate-local-skope-options-ui' :
 
1692
  self.cleanRegistered();
1693
  try{ dfd = self.generateUIforLocalSkopeOptions( params, dfd ); } catch( er ) {
1694
  api.errare( '::generateUI() => error', er );
1695
  dfd = $.Deferred();
1696
  }
1697
  break;
 
 
1698
  case 'sek-generate-global-options-ui' :
 
1699
  self.cleanRegistered();
1700
  try{ dfd = self.generateUIforGlobalOptions( params, dfd ); } catch( er ) {
1701
  api.errare( '::generateUI() => error', er );
@@ -1706,12 +2622,56 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1706
 
1707
  return 'pending' == dfd.state() ? dfd.resolve().promise() : dfd.promise();//<= we might want to resolve on focus.completeCallback ?
1708
  },//generateUI()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1709
  updateAPISettingAndExecutePreviewActions : function( params ) {
1710
  if ( _.isEmpty( params.settingParams ) || ! _.has( params.settingParams, 'to' ) ) {
1711
  api.errare( 'updateAPISettingAndExecutePreviewActions => missing params.settingParams.to. The api main setting can not be updated', params );
1712
  return;
1713
  }
1714
  var self = this;
 
 
 
 
1715
  var rawModuleValue = params.settingParams.to,
1716
  moduleValueCandidate,// {} or [] if mono item of multi-item module
1717
  parentModuleType = null,
@@ -1732,6 +2692,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1732
  } else {
1733
  api.errare( 'updateAPISettingAndExecutePreviewActions => missing parentModuleInstance', params );
1734
  }
 
 
 
 
 
1735
  if ( ! isMultiItemModule && _.isObject( rawModuleValue ) ) {
1736
  moduleValueCandidate = self.normalizeAndSanitizeSingleItemInputValues( rawModuleValue, parentModuleType );
1737
  } else {
@@ -1740,14 +2705,22 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1740
  moduleValueCandidate.push( self.normalizeAndSanitizeSingleItemInputValues( item, parentModuleType ) );
1741
  });
1742
  }
 
 
 
 
 
1743
  if ( _.isEmpty( params.defaultPreviewAction ) ) {
1744
  api.errare( 'updateAPISettingAndExecutePreviewActions => missing defaultPreviewAction in passed params. No action can be triggered to the api.previewer.', params );
1745
  return;
1746
  }
 
1747
  var refresh_stylesheet = 'refresh_stylesheet' === params.defaultPreviewAction,//<= default action for level options
1748
  refresh_markup = 'refresh_markup' === params.defaultPreviewAction,//<= default action for module options
1749
  refresh_fonts = 'refresh_fonts' === params.defaultPreviewAction,
1750
  refresh_preview = 'refresh_preview' === params.defaultPreviewAction;
 
 
1751
  var input_id = params.settingParams.args.input_changed;
1752
  var inputRegistrationParams;
1753
  if ( ! _.isUndefined( input_id ) ) {
@@ -1767,33 +2740,46 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1767
  }
1768
 
1769
  var _doUpdateWithRequestedAction = function() {
 
1770
  if ( true === params.isGlobalOptions ) {
1771
  if ( _.isEmpty( params.options_type ) ) {
1772
  api.errare( 'updateAPISettingAndExecutePreviewActions => error when updating the global options => missing options_type');
1773
  return;
1774
  }
 
1775
  var rawGlobalOptions = api( sektionsLocalizedData.optNameForGlobalOptions )(),
1776
  clonedGlobalOptions = $.extend( true, {}, _.isObject( rawGlobalOptions ) ? rawGlobalOptions : {} ),
1777
  _valueCandidate = {};
 
 
 
1778
  _.each( moduleValueCandidate || {}, function( _val_, _key_ ) {
 
 
1779
  if ( ! _.isBoolean( _val_ ) && _.isEmpty( _val_ + "" ) )
1780
  return;
1781
  _valueCandidate[ _key_ ] = _val_;
1782
  });
1783
 
1784
  clonedGlobalOptions[ params.options_type ] = _valueCandidate;
 
 
1785
  api( sektionsLocalizedData.optNameForGlobalOptions )( clonedGlobalOptions );
1786
  } else {
 
1787
  return self.updateAPISetting({
1788
  action : params.uiParams.action,// mandatory : 'sek-generate-level-options-ui', 'sek-generate-local-skope-options-ui',...
1789
  id : params.uiParams.id,
1790
  value : moduleValueCandidate,
1791
  in_column : params.uiParams.in_column,//not mandatory
1792
  in_sektion : params.uiParams.in_sektion,//not mandatory
 
 
1793
  options_type : params.options_type,// mandatory : 'layout', 'spacing', 'bg_border', 'height', ...
1794
 
1795
  settingParams : params.settingParams
1796
  }).done( function( promiseParams ) {
 
1797
  if ( true === refresh_stylesheet ) {
1798
  api.previewer.send( 'sek-refresh-stylesheet', {
1799
  location_skope_id : true === promiseParams.is_global_location ? sektionsLocalizedData.globalSkopeId : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),//<= send skope id to the preview so we can use it when ajaxing
@@ -1805,6 +2791,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1805
  },
1806
  });
1807
  }
 
 
1808
  if ( true === refresh_markup ) {
1809
  api.previewer.send( 'sek-refresh-level', {
1810
  location_skope_id : true === promiseParams.is_global_location ? sektionsLocalizedData.globalSkopeId : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),//<= send skope id to the preview so we can use it when ajaxing
@@ -1817,26 +2805,42 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1817
  skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),//<= send skope id to the preview so we can use it when ajaxing
1818
  });
1819
  }
 
 
1820
  if ( true === refresh_preview ) {
1821
  api.previewer.refresh();
1822
  }
1823
  });//self.updateAPISetting()
1824
  }
1825
  };//_doUpdateWithRequestedAction
 
 
 
 
1826
  if ( true === refresh_fonts ) {
1827
  var newFontFamily = params.settingParams.args.input_value;
1828
  if ( ! _.isString( newFontFamily ) ) {
1829
  api.errare( 'updateAPISettingAndExecutePreviewActions => font-family must be a string', newFontFamily );
1830
  return;
1831
  }
 
 
1832
  if ( newFontFamily.indexOf('gfont') > -1 ) {
1833
  self.updateAPISetting({
1834
  action : 'sek-update-fonts',
1835
  font_family : newFontFamily,
1836
  is_global_location : self.isGlobalLocation( params.uiParams )
1837
  })
 
 
 
1838
  .always( function() {
1839
  _doUpdateWithRequestedAction().then( function() {
 
 
 
 
 
1840
  self.updateAPISetting({
1841
  action : 'sek-update-fonts',
1842
  is_global_location : self.isGlobalLocation( params.uiParams )
@@ -1850,6 +2854,22 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1850
  _doUpdateWithRequestedAction();
1851
  }
1852
  },//updateAPISettingAndExecutePreviewActions
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1853
  normalizeAndSanitizeSingleItemInputValues : function( _item_, parentModuleType ) {
1854
  var itemNormalized = {},
1855
  itemNormalizedAndSanitized = {},
@@ -1868,12 +2888,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1868
  } else if ( _.isObject( _val ) && _.isObject( _default ) ) {
1869
  equal = _.isEqual( _val,_default );
1870
  } else if ( _.isArray( _val ) && _.isArray( _default ) ) {
 
1871
  equal = JSON.stringify(_val.sort()) === JSON.stringify(_default.sort());
1872
  } else {
1873
  equal = _val === _default;
1874
  }
1875
  return equal;
1876
  };
 
 
 
 
 
1877
  _.each( _item_, function( _val, input_id ) {
1878
  if ( _.contains( ['title', 'id' ], input_id ) )
1879
  return;
@@ -1886,13 +2912,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1886
  }
1887
  if ( isEqualToDefault( _val, inputDefaultValue ) ) {
1888
  return;
 
1889
  } else if ( ( _.isString( _val ) || _.isObject( _val ) ) && _.isEmpty( _val ) ) {
1890
  return;
1891
  } else {
1892
  itemNormalized[ input_id ] = _val;
1893
  }
1894
  });
 
 
 
1895
  _.each( itemNormalized, function( _val, input_id ) {
 
 
1896
  switch( self.getInputType( input_id, parentModuleType ) ) {
1897
  case 'text' :
1898
  case 'textarea' :
@@ -1932,16 +2964,34 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1932
  });
1933
  return itemNormalizedAndSanitized;
1934
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1935
  isUIControlAlreadyRegistered : function( uiElementId ) {
1936
  var self = this,
1937
  uiCandidate = _.filter( self.registered(), function( registered ) {
1938
  return registered.id == uiElementId && 'control' === registered.what;
1939
  }),
1940
  controlIsAlreadyRegistered = false;
 
 
 
1941
  if ( _.isEmpty( uiCandidate ) ) {
1942
  controlIsAlreadyRegistered = api.control.has( uiElementId );
1943
  } else {
1944
  controlIsAlreadyRegistered = true;
 
1945
  if ( uiCandidate.length > 1 ) {
1946
  api.errare( 'generateUI => why is this control registered more than once ? => ' + uiElementId );
1947
  }
@@ -1953,8 +3003,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1953
  var CZRSeksPrototype = CZRSeksPrototype || {};
1954
  (function ( api, $ ) {
1955
  $.extend( CZRSeksPrototype, {
 
 
 
 
 
 
 
 
 
 
1956
  generateUIforDraggableContent : function( params, dfd ) {
1957
  var self = this;
 
1958
  var registrationParams = {};
1959
 
1960
  $.extend( registrationParams, {
@@ -1964,6 +3025,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
1964
  controlLabel : sektionsLocalizedData.i18n['Select a content type'],
1965
  priority : 0,
1966
  settingValue : { content_type : params.content_type }
 
1967
  },
1968
  module_picker : {
1969
  settingControlId : sektionsLocalizedData.optPrefixForSektionsNotSaved + '_sek_draggable_modules_ui',
@@ -2011,6 +3073,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2011
  icon : '<i class="fas fa-grip-vertical sek-level-option-icon"></i>'
2012
  }
2013
  });
 
 
 
2014
  if ( sektionsLocalizedData.isNimbleHeaderFooterEnabled ) {
2015
  $.extend( registrationParams, {
2016
  sek_header_sec_picker_module : {
@@ -2047,6 +3112,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2047
  }
2048
  });
2049
  }
 
 
 
 
 
 
 
2050
  var firstKey = _.keys( registrationParams )[0],
2051
  firstControlId = registrationParams[firstKey].settingControlId;
2052
 
@@ -2055,6 +3127,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2055
  _control_.focus({
2056
  completeCallback : function() {
2057
  var $container = _control_.container;
 
2058
  if ( $container.hasClass( 'button-see-me') )
2059
  return;
2060
  $container.addClass('button-see-me');
@@ -2067,9 +3140,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2067
 
2068
  return dfd;
2069
  }//if
 
 
 
2070
  _do_register_ = function() {
2071
  _.each( registrationParams, function( optionData, optionType ){
2072
  if ( ! api.has( optionData.settingControlId ) ) {
 
2073
  api( optionData.settingControlId, function( _setting_ ) {
2074
  _setting_.bind( function( to, from ) {
2075
  api.errare('generateUIforDraggableContent => the setting() should not changed');
@@ -2101,7 +3178,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2101
  track : false//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
2102
  }).done( function() {
2103
  api.control( optionData.settingControlId, function( _control_ ) {
 
2104
  _control_.content_type = optionData.content_type;//<= used to handle visibility when switching content type with the "content_type_switcher" control
 
 
2105
  if ( true === params.focus ) {
2106
  _control_.focus({
2107
  completeCallback : function() {}
@@ -2110,13 +3190,22 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2110
 
2111
  var $title = _control_.container.find('label > .customize-control-title'),
2112
  _titleContent = $title.html();
 
2113
  $title.html( ['<span class="sek-ctrl-accordion-title">', _titleContent, '</span>' ].join('') );
 
 
2114
  if ( ! _.isUndefined( optionData.icon ) ) {
2115
  $title.addClass('sek-flex-vertical-center').prepend( optionData.icon );
2116
  }
 
 
 
2117
  if ( 'section' === _control_.content_type ) {
 
2118
  _control_.container.find('.czr-items-wrapper').hide();
 
2119
  $title.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>');
 
2120
  _control_.container.attr('data-sek-expanded', "false" );
2121
  if ( true === optionData.expandAndFocusOnInit && "false" == _control_.container.attr('data-sek-expanded' ) ) {
2122
  _control_.container.find('.czr-items-wrapper').show();
@@ -2130,17 +3219,32 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2130
  });
2131
  });//_.each
2132
  };//_do_register_
 
 
 
 
2133
  api.section( self.SECTION_ID_FOR_CONTENT_PICKER, function( _section_ ) {
2134
  _do_register_();
 
 
2135
  var $sectionTitleEl = _section_.container.find('.accordion-section-title'),
2136
  $panelTitleEl = _section_.container.find('.customize-section-title h3');
 
 
2137
  if ( 0 < $sectionTitleEl.length && $sectionTitleEl.find('.sek-level-option-icon').length < 1 ) {
2138
  $sectionTitleEl.prepend( '<i class="fas fa-grip-vertical sek-level-option-icon"></i>' );
2139
  }
 
 
2140
  if ( 0 < $panelTitleEl.length && $panelTitleEl.find('.sek-level-option-icon').length < 1 ) {
2141
  $panelTitleEl.find('.customize-action').after( '<i class="fas fa-grip-vertical sek-level-option-icon"></i>' );
2142
  }
 
 
2143
  self.scheduleModuleAccordion.call( _section_, { expand_first_control : true } );
 
 
 
2144
  self._maybeFetchSectionsFromServer();
2145
  });
2146
  return dfd;
@@ -2150,11 +3254,23 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2150
  var CZRSeksPrototype = CZRSeksPrototype || {};
2151
  (function ( api, $ ) {
2152
  $.extend( CZRSeksPrototype, {
 
 
 
 
 
 
 
 
 
 
2153
  generateUIforFrontModules : function( params, dfd ) {
2154
  var self = this;
2155
  if ( _.isEmpty( params.id ) ) {
2156
  dfd.reject( 'generateUI => missing id' );
2157
  }
 
 
2158
  var moduleValue = self.getLevelProperty({
2159
  property : 'value',
2160
  id : params.id
@@ -2170,6 +3286,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2170
  if ( _.isEmpty( moduleType ) ) {
2171
  dfd.reject( 'generateUI => module => invalid module_type' );
2172
  }
 
 
2173
  var modulesRegistrationParams = {};
2174
 
2175
  if ( true === self.getRegisteredModuleProperty( moduleType, 'is_father' ) ) {
@@ -2182,6 +3300,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2182
  settingControlId : params.id + '__' + optionType,
2183
  module_type : mod_type,
2184
  controlLabel : self.getRegisteredModuleProperty( mod_type, 'name' )
 
2185
  };
2186
  });
2187
  }
@@ -2190,8 +3309,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2190
  settingControlId : params.id,
2191
  module_type : moduleType,
2192
  controlLabel : moduleName
 
2193
  };
2194
  }
 
 
 
 
 
2195
  var firstKey = _.keys( modulesRegistrationParams )[0],
2196
  firstControlId = modulesRegistrationParams[firstKey].settingControlId;
2197
 
@@ -2199,6 +3324,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2199
  api.control( firstControlId ).focus({
2200
  completeCallback : function() {
2201
  var $container = api.control( firstControlId ).container;
 
2202
  if ( $container.hasClass( 'button-see-me') )
2203
  return;
2204
  $container.addClass('button-see-me');
@@ -2209,10 +3335,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2209
  });
2210
  return dfd;
2211
  }//if
 
 
2212
  self.cleanRegistered();
2213
 
2214
  _do_register_ = function() {
2215
  _.each( modulesRegistrationParams, function( optionData, optionType ){
 
2216
  if ( ! api.has( optionData.settingControlId ) ) {
2217
  var doUpdate = function( to, from, args ) {
2218
  try { self.updateAPISettingAndExecutePreviewActions({
@@ -2228,6 +3357,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2228
  api.errare( '::generateUIforFrontModules => Error in updateAPISettingAndExecutePreviewActions', er );
2229
  }
2230
  };
 
 
 
 
 
2231
  api( optionData.settingControlId, function( _setting_ ) {
2232
  _setting_.bind( _.debounce( doUpdate, self.SETTING_UPDATE_BUFFER ) );//_setting_.bind( _.debounce( function( to, from, args ) {}
2233
  });
@@ -2255,33 +3389,47 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2255
  what : 'control',
2256
  id : optionData.settingControlId,
2257
  label : optionData.controlLabel,
 
2258
  type : 'czr_module',//sekData.controlType,
2259
  module_type : optionData.module_type,
2260
  section : params.id,
2261
  priority : 10,
2262
  settings : { default : optionData.settingControlId }
2263
  }).done( function() {});
 
 
2264
  api.control( optionData.settingControlId, function( _control_ ) {
2265
  api.control( optionData.settingControlId ).focus({
2266
  completeCallback : function() {}
2267
  });
 
2268
  _control_.container.find('.czr-items-wrapper').hide();
2269
  var $title = _control_.container.find('label > .customize-control-title'),
2270
  _titleContent = $title.html();
2271
 
2272
  $title.html( ['<span class="sek-ctrl-accordion-title">', _titleContent, '</span>' ].join('') );
 
2273
  if ( ! _.isUndefined( optionData.icon ) ) {
2274
  $title.addClass('sek-flex-vertical-center').prepend( optionData.icon );
2275
  }
 
2276
  $title.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>');
 
2277
  _control_.container.attr('data-sek-expanded', "false" );
2278
  });
2279
  });//each()
2280
  };//_do_register()
 
 
 
 
2281
  api.section.when( params.id, function() {
2282
  api.section(params.id).focus();
2283
  _do_register_();
2284
  });
 
 
 
2285
  api.CZR_Helpers.register({
2286
  origin : 'nimble',
2287
  what : 'section',
@@ -2289,14 +3437,23 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2289
  title: sektionsLocalizedData.i18n['Content for'] + ' ' + moduleName,
2290
  panel : sektionsLocalizedData.sektionsPanelId,
2291
  priority : 1000,
 
 
2292
  }).done( function() {});
2293
 
2294
  api.section( params.id, function( _section_ ) {
 
2295
  _section_.container.find('.accordion-section-title').first().hide();
 
 
2296
  var $panelTitleEl = _section_.container.find('.customize-section-title h3');
 
 
2297
  if ( 0 < $panelTitleEl.length ) {
2298
  $panelTitleEl.find('.customize-action').after( '<i class="fas fa-pencil-alt sek-level-option-icon"></i>' );
2299
  }
 
 
2300
  self.scheduleModuleAccordion.call( _section_, { expand_first_control : true } );
2301
  });
2302
  return dfd;
@@ -2306,13 +3463,27 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2306
  var CZRSeksPrototype = CZRSeksPrototype || {};
2307
  (function ( api, $ ) {
2308
  $.extend( CZRSeksPrototype, {
 
 
 
 
 
 
 
 
 
 
2309
  generateUIforLevelOptions : function( params, dfd ) {
2310
  var self = this;
 
2311
  var levelOptionValues = self.getLevelProperty({
2312
  property : 'options',
2313
  id : params.id
2314
  });
2315
  levelOptionValues = _.isObject( levelOptionValues ) ? levelOptionValues : {};
 
 
 
2316
  var modulesRegistrationParams = {};
2317
 
2318
  $.extend( modulesRegistrationParams, {
@@ -2327,6 +3498,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2327
  settingControlId : params.id + '__border_options',
2328
  module_type : 'sek_level_border_module',
2329
  controlLabel : sektionsLocalizedData.i18n['Borders settings for the'] + ' ' + sektionsLocalizedData.i18n[params.level],
 
2330
  icon : '<i class="material-icons sek-level-option-icon">rounded_corner</i>'//'<i class="material-icons sek-level-option-icon">brush</i>'
2331
  },
2332
  spacing : {
@@ -2338,7 +3510,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2338
  anchor : {
2339
  settingControlId : params.id + '__anchor_options',
2340
  module_type : 'sek_level_anchor_module',
2341
- controlLabel : sektionsLocalizedData.i18n['Set a custom anchor for the'] + ' ' + sektionsLocalizedData.i18n[params.level],
2342
  icon : '<i class="fas fa-anchor sek-level-option-icon"></i>'
2343
  },
2344
  visibility : {
@@ -2364,6 +3536,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2364
  icon : '<i class="fas fa-ruler-horizontal sek-level-option-icon"></i>'
2365
  }
2366
  });
 
 
 
 
 
 
 
 
 
 
2367
  $.extend( modulesRegistrationParams, {
2368
  breakpoint : {
2369
  settingControlId : params.id + '__breakpoint_options',
@@ -2383,6 +3565,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2383
  }
2384
  });
2385
  }
 
 
 
 
 
 
2386
  var firstKey = _.keys( modulesRegistrationParams )[0],
2387
  firstControlId = modulesRegistrationParams[firstKey].settingControlId;
2388
 
@@ -2390,6 +3578,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2390
  api.control( firstControlId ).focus({
2391
  completeCallback : function() {
2392
  var $container = api.control( firstControlId ).container;
 
2393
  if ( $container.hasClass( 'button-see-me') )
2394
  return;
2395
  $container.addClass('button-see-me');
@@ -2400,9 +3589,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2400
  });
2401
  return dfd;
2402
  }//if
 
 
2403
  self.cleanRegistered();
 
 
 
2404
  _do_register_ = function() {
2405
  _.each( modulesRegistrationParams, function( optionData, optionType ){
 
 
2406
  if ( self.isUIControlAlreadyRegistered( optionData.settingControlId ) ) {
2407
  api.section( api.control( optionData.settingControlId ).section() ).expanded( true );
2408
  return;
@@ -2422,12 +3618,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2422
  api.errare( '::generateUIforLevelOptions => Error in updateAPISettingAndExecutePreviewActions', er );
2423
  }
2424
  };
 
 
 
 
 
2425
  api( optionData.settingControlId, function( _setting_ ) {
2426
  _setting_.bind( _.debounce( doUpdate, self.SETTING_UPDATE_BUFFER ) );//_setting_.bind( _.debounce( function( to, from, args ) {}
2427
  });//api( Id, function( _setting_ ) {})
 
 
2428
  var initialModuleValues = levelOptionValues[ optionType ] || {};
2429
  var startingModuleValue = self.getModuleStartingValue( optionData.module_type );
2430
  if ( 'no_starting_value' !== startingModuleValue && _.isObject( startingModuleValue ) ) {
 
2431
  var clonedStartingModuleValue = $.extend( true, {}, startingModuleValue );
2432
  initialModuleValues = $.extend( clonedStartingModuleValue, initialModuleValues );
2433
  }
@@ -2457,26 +3661,41 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2457
  priority : 0,
2458
  settings : { default : optionData.settingControlId }
2459
  }).done( function() {});
 
 
2460
  api.control( optionData.settingControlId, function( _control_ ) {
2461
  if ( true === optionData.expandAndFocusOnInit ) {
2462
  _control_.focus({
2463
  completeCallback : function() {}
2464
  });
2465
  }
 
 
2466
  _control_.container.find('.czr-items-wrapper').hide();
2467
  var $title = _control_.container.find('label > .customize-control-title'),
2468
  _titleContent = $title.html();
 
2469
  $title.html( ['<span class="sek-ctrl-accordion-title">', _titleContent, '</span>' ].join('') );
 
2470
  if ( ! _.isUndefined( optionData.icon ) ) {
2471
  $title.addClass('sek-flex-vertical-center').prepend( optionData.icon );
2472
  }
 
2473
  $title.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>');
 
2474
  _control_.container.attr('data-sek-expanded', "false" );
 
 
 
2475
  });
2476
  });//_.each()
2477
  };//_do_register_()
 
 
 
2478
  if ( ! api.section.has( params.id ) ) {
2479
  api.section( params.id, function( _section_ ) {
 
2480
  self.scheduleModuleAccordion.call( _section_, { expand_first_control : true } );
2481
  });
2482
  }
@@ -2488,11 +3707,21 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2488
  title: sektionsLocalizedData.i18n['Settings for the'] + ' ' + params.level,
2489
  panel : sektionsLocalizedData.sektionsPanelId,
2490
  priority : 10,
 
 
2491
  }).done( function() {});
 
 
 
2492
  api.section( params.id, function( _section_ ) {
2493
  _do_register_();
 
2494
  _section_.container.find('.accordion-section-title').first().hide();
 
 
2495
  var $panelTitleEl = _section_.container.find('.customize-section-title h3');
 
 
2496
  if ( 0 < $panelTitleEl.length && $panelTitleEl.find('.sek-level-option-icon').length < 1 ) {
2497
  $panelTitleEl.find('.customize-action').after( '<i class="fas fa-sliders-h sek-level-option-icon"></i>' );
2498
  }
@@ -2513,17 +3742,33 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2513
  }
2514
  return sektionsLocalizedData.optPrefixForSektionsNotSaved + skope_id + '__localSkopeOptions';
2515
  },
 
 
 
 
 
 
 
 
 
 
2516
  generateUIforLocalSkopeOptions : function( params, dfd ) {
2517
  var self = this,
2518
  _id_ = self.getLocalSkopeOptionId();
 
 
2519
  if ( self.isUIControlAlreadyRegistered( _id_ ) ) {
2520
  return dfd;
2521
  }
 
 
2522
  var registrationParams = {};
2523
  if ( _.isUndefined( sektionsLocalizedData.localOptionsMap ) || ! _.isObject( sektionsLocalizedData.localOptionsMap ) ) {
2524
  api.errare( '::generateUIforGlobalOptions => missing or invalid localOptionsMap');
2525
  return dfd;
2526
  }
 
 
2527
  _.each( sektionsLocalizedData.localOptionsMap, function( mod_type, opt_name ) {
2528
  switch( opt_name ) {
2529
  case 'template' :
@@ -2535,6 +3780,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2535
  icon : '<i class="material-icons sek-level-option-icon">check_box_outline_blank</i>'
2536
  };
2537
  break;
 
2538
  case 'local_header_footer':
2539
  if ( sektionsLocalizedData.isNimbleHeaderFooterEnabled ) {
2540
  registrationParams[ opt_name ] = {
@@ -2601,9 +3847,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2601
  api.errare( '::generateUIforLocalSkopeOptions => Error in updateAPISettingAndExecutePreviewActions', er );
2602
  }
2603
  };
 
 
 
 
 
2604
  api( optionData.settingControlId, function( _setting_ ) {
2605
  _setting_.bind( _.debounce( doUpdate, self.SETTING_UPDATE_BUFFER ) );//_setting_.bind( _.debounce( function( to, from, args ) {}
2606
  });//api( Id, function( _setting_ ) {})
 
 
2607
  var startingModuleValue = self.getModuleStartingValue( optionData.module_type ),
2608
  currentSetValue = api( self.localSectionsSettingId() )(),
2609
  allSkopeOptions = $.extend( true, {}, _.isObject( currentSetValue.local_options ) ? currentSetValue.local_options : {} ),
@@ -2611,6 +3864,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2611
  initialModuleValues = optionTypeValue;
2612
 
2613
  if ( 'no_starting_value' !== startingModuleValue && _.isObject( startingModuleValue ) ) {
 
2614
  var clonedStartingModuleValue = $.extend( true, {}, startingModuleValue );
2615
  initialModuleValues = $.extend( clonedStartingModuleValue, initialModuleValues );
2616
  }
@@ -2637,16 +3891,31 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2637
  section : self.SECTION_ID_FOR_LOCAL_OPTIONS,
2638
  priority : 10,
2639
  settings : { default : optionData.settingControlId },
 
2640
  }).done( function() {
 
 
 
 
 
 
 
 
2641
  api.control( optionData.settingControlId, function( _control_ ) {
 
2642
  _control_.container.find('.czr-items-wrapper').hide();
2643
  var $title = _control_.container.find('label > .customize-control-title'),
2644
  _titleContent = $title.html();
 
2645
  $title.html( ['<span class="sek-ctrl-accordion-title">', _titleContent, '</span>' ].join('') );
 
 
2646
  if ( ! _.isUndefined( optionData.icon ) ) {
2647
  $title.addClass('sek-flex-vertical-center').prepend( optionData.icon );
2648
  }
 
2649
  $title.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>');
 
2650
  _control_.container.attr('data-sek-expanded', "false" );
2651
  if ( true === optionData.expandAndFocusOnInit && "false" == _control_.container.attr('data-sek-expanded' ) ) {
2652
  $title.trigger('click');
@@ -2655,6 +3924,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2655
  });
2656
  });//_.each()
2657
  };//_do_register()
 
 
2658
  _do_register_();
2659
 
2660
  return dfd;
@@ -2664,19 +3935,37 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2664
  var CZRSeksPrototype = CZRSeksPrototype || {};
2665
  (function ( api, $ ) {
2666
  $.extend( CZRSeksPrototype, {
 
 
 
 
 
 
 
 
 
 
2667
  generateUIforGlobalOptions : function( params, dfd ) {
2668
  var self = this,
2669
  _id_ = sektionsLocalizedData.optPrefixForSektionsNotSaved + sektionsLocalizedData.optNameForGlobalOptions;
 
 
 
2670
  if ( self.isUIControlAlreadyRegistered( _id_ ) ) {
2671
  return dfd;
2672
  }
 
 
2673
  var registrationParams = {};
2674
  if ( _.isUndefined( sektionsLocalizedData.globalOptionsMap ) || ! _.isObject( sektionsLocalizedData.globalOptionsMap ) ) {
2675
  api.errare( '::generateUIforGlobalOptions => missing or invalid globalOptionsMap');
2676
  return dfd;
2677
  }
 
 
2678
  _.each( sektionsLocalizedData.globalOptionsMap, function( mod_type, opt_name ) {
2679
  switch( opt_name ) {
 
2680
  case 'global_header_footer':
2681
  if ( sektionsLocalizedData.isNimbleHeaderFooterEnabled ) {
2682
  registrationParams[ opt_name ] = {
@@ -2753,14 +4042,22 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2753
  api.errare( '::generateUIforGlobalOptions => Error in updateAPISettingAndExecutePreviewActions', er );
2754
  }
2755
  };
 
 
 
 
 
2756
  api( optionData.settingControlId, function( _setting_ ) {
2757
  _setting_.bind( _.debounce( doUpdate, self.SETTING_UPDATE_BUFFER ) );//_setting_.bind( _.debounce( function( to, from, args ) {}
2758
  });//api( Id, function( _setting_ ) {})
 
 
2759
  var dbValues = sektionsLocalizedData.globalOptionDBValues,
2760
  startingModuleValue = self.getModuleStartingValue( optionData.module_type ),
2761
  initialModuleValues = ( _.isObject( dbValues ) && ! _.isEmpty( dbValues[ optionType ] ) ) ? dbValues[ optionType ] : {};
2762
 
2763
  if ( 'no_starting_value' !== startingModuleValue && _.isObject( startingModuleValue ) ) {
 
2764
  var clonedStartingModuleValue = $.extend( true, {}, startingModuleValue );
2765
  initialModuleValues = $.extend( clonedStartingModuleValue, initialModuleValues );
2766
  }
@@ -2790,15 +4087,28 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2790
  settings : { default : optionData.settingControlId },
2791
  track : false//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
2792
  }).done( function() {
 
 
 
 
 
 
 
2793
  api.control( optionData.settingControlId, function( _control_ ) {
 
2794
  _control_.container.find('.czr-items-wrapper').hide();
2795
  var $title = _control_.container.find('label > .customize-control-title'),
2796
  _titleContent = $title.html();
 
2797
  $title.html( ['<span class="sek-ctrl-accordion-title">', _titleContent, '</span>' ].join('') );
 
 
2798
  if ( ! _.isUndefined( optionData.icon ) ) {
2799
  $title.addClass('sek-flex-vertical-center').prepend( optionData.icon );
2800
  }
 
2801
  $title.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>');
 
2802
  _control_.container.attr('data-sek-expanded', "false" );
2803
  if ( true === optionData.expandAndFocusOnInit && "false" == _control_.container.attr('data-sek-expanded' ) ) {
2804
  $title.trigger('click');
@@ -2807,6 +4117,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2807
  });
2808
  });//_.each();
2809
  };//do register
 
 
2810
  _do_register_();
2811
 
2812
  return dfd;
@@ -2816,31 +4128,60 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2816
  var CZRSeksPrototype = CZRSeksPrototype || {};
2817
  (function ( api, $ ) {
2818
  $.extend( CZRSeksPrototype, {
 
 
 
 
 
 
2819
  updateAPISetting : function( params ) {
2820
 
2821
  var self = this,
2822
  __updateAPISettingDeferred__ = $.Deferred();
 
 
 
 
2823
  params = params || {};
2824
  params.is_global_location = self.isGlobalLocation( params );
2825
 
2826
  var _collectionSettingId_ = params.is_global_location ? self.getGlobalSectionsSettingId() : self.localSectionsSettingId();
 
 
2827
  api( _collectionSettingId_, function( sektionSetInstance ) {
 
 
 
 
 
 
 
 
 
2828
  var currentSetValue = sektionSetInstance(),
2829
  newSetValue = _.isObject( currentSetValue ) ? $.extend( true, {}, currentSetValue ) : self.getDefaultSektionSettingValue( params.is_global_location ? 'global' : 'local' ),
2830
  locationCandidate,
2831
  sektionCandidate,
2832
  columnCandidate,
2833
  moduleCandidate,
 
2834
  originalCollection,
2835
  reorderedCollection,
 
2836
  cloneId, //will be passed in resolve()
2837
  startingModuleValue,// will be populated by the optional starting value specificied on module registration
2838
  __presetSectionInjected__ = false,
2839
  parentSektionCandidate;
 
 
2840
  newSetValue.collection = _.isArray( newSetValue.collection ) ? newSetValue.collection : self.getDefaultSektionSettingValue( params.is_global_location ? 'global' : 'local' ).collection;
2841
 
2842
  switch( params.action ) {
 
 
 
2843
  case 'sek-add-section' :
 
2844
  if ( _.isEmpty( params.id ) ) {
2845
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
2846
  }
@@ -2848,8 +4189,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2848
  if ( _.isEmpty( params.location ) ) {
2849
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing location' );
2850
  }
 
2851
  if ( true === params.is_nested ) {
2852
  columnCandidate = self.getLevelModel( params.in_column, newSetValue.collection );
 
 
2853
  parentSektionCandidate = self.getLevelModel( params.in_sektion, newSetValue.collection );
2854
  if ( 'no_match' == parentSektionCandidate ) {
2855
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => no grand parent sektion found');
@@ -2893,7 +4237,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2893
  position = index + 1;
2894
  }
2895
  });
 
 
2896
  locationCandidate.collection = _.isArray( locationCandidate.collection ) ? locationCandidate.collection : [];
 
2897
  locationCandidate.collection.splice( position, 0, {
2898
  id : params.id,
2899
  level : 'section',
@@ -2910,6 +4257,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2910
 
2911
 
2912
  case 'sek-duplicate-section' :
 
 
2913
  if ( _.isEmpty( params.id ) ) {
2914
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
2915
  }
@@ -2924,6 +4273,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2924
  }
2925
 
2926
  var _position_ = self.getLevelPositionInCollection( params.id, newSetValue.collection );
 
2927
  if ( true === params.is_nested ) {
2928
  columnCandidate = self.getLevelModel( params.in_column, newSetValue.collection );
2929
  if ( 'no_match' == columnCandidate ) {
@@ -2944,12 +4294,17 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2944
  break;
2945
  }
2946
  locationCandidate.collection = _.isArray( locationCandidate.collection ) ? locationCandidate.collection : [];
 
2947
  locationCandidate.collection.splice( parseInt( _position_ + 1, 10 ), 0, deepClonedSektion );
2948
 
2949
  }
2950
  cloneId = deepClonedSektion.id;//will be passed in resolve()
2951
  break;
 
 
 
2952
  case 'sek-remove-section' :
 
2953
  if ( true === params.is_nested ) {
2954
  columnCandidate = self.getLevelModel( params.in_column, newSetValue.collection );
2955
  if ( 'no_match' != columnCandidate ) {
@@ -2974,6 +4329,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2974
  break;
2975
 
2976
  case 'sek-move-section' :
 
2977
  var toLocationCandidate = self.getLevelModel( params.to_location, newSetValue.collection ),
2978
  movedSektionCandidate,
2979
  copyOfMovedSektionCandidate;
@@ -2981,23 +4337,33 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
2981
  if ( _.isEmpty( toLocationCandidate ) || 'no_match' == toLocationCandidate ) {
2982
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing target location' );
2983
  }
 
 
 
 
2984
  if ( params.from_location != params.to_location ) {
 
2985
  var fromLocationCandidate = self.getLevelModel( params.from_location, newSetValue.collection );
2986
  if ( _.isEmpty( fromLocationCandidate ) || 'no_match' == fromLocationCandidate ) {
2987
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing source location' );
2988
  }
2989
 
2990
  fromLocationCandidate.collection = _.isArray( fromLocationCandidate.collection ) ? fromLocationCandidate.collection : [];
 
2991
  movedSektionCandidate = self.getLevelModel( params.id, fromLocationCandidate.collection );
2992
  copyOfMovedSektionCandidate = $.extend( true, {}, movedSektionCandidate );
 
2993
  fromLocationCandidate.collection = _.filter( fromLocationCandidate.collection, function( sektion ) {
2994
  return sektion.id != params.id;
2995
  });
2996
  }
 
 
2997
  toLocationCandidate.collection = _.isArray( toLocationCandidate.collection ) ? toLocationCandidate.collection : [];
2998
  originalCollection = $.extend( true, [], toLocationCandidate.collection );
2999
  reorderedCollection = [];
3000
  _.each( params.newOrder, function( _id_ ) {
 
3001
  if ( params.from_location != params.to_location && _id_ == copyOfMovedSektionCandidate.id ) {
3002
  reorderedCollection.push( copyOfMovedSektionCandidate );
3003
  } else {
@@ -3011,7 +4377,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3011
  toLocationCandidate.collection = reorderedCollection;
3012
 
3013
  break;
 
 
 
3014
  case 'sek-move-section-up-down' :
 
3015
 
3016
  inLocationCandidate = self.getLevelModel( params.location, newSetValue.collection );
3017
 
@@ -3025,16 +4395,31 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3025
  var _indexInOriginal = _.findIndex( originalCollection, function( _sec_ ) {
3026
  return _sec_.id === params.id;
3027
  });
 
3028
  if ( -1 === _indexInOriginal ) {
3029
  throw new Error( 'updateAPISetting => ' + params.action + ' => invalid index' );
3030
  }
 
 
3031
  var direction = params.direction || 'up';
3032
  reorderedCollection[ _indexInOriginal ] = originalCollection[ 'up' === direction ? _indexInOriginal - 1 : _indexInOriginal + 1 ];
3033
  reorderedCollection[ 'up' === direction ? _indexInOriginal - 1 : _indexInOriginal + 1 ] = originalCollection[ _indexInOriginal ];
3034
 
3035
  inLocationCandidate.collection = reorderedCollection;
3036
  break;
 
 
 
 
 
 
 
 
 
 
 
3037
  case 'sek-add-column' :
 
3038
  if ( _.isEmpty( params.id ) ) {
3039
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
3040
  }
@@ -3046,10 +4431,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3046
  }
3047
 
3048
  sektionCandidate.collection = _.isArray( sektionCandidate.collection ) ? sektionCandidate.collection : [];
 
3049
  if ( ( self.MAX_NUMBER_OF_COLUMNS - 1 ) < _.size( sektionCandidate.collection ) ) {
3050
  __updateAPISettingDeferred__.reject( sektionsLocalizedData.i18n["You've reached the maximum number of columns allowed in this section."]);
3051
  break;
3052
  }
 
 
3053
  _.each( sektionCandidate.collection, function( colModel ) {
3054
  colModel.width = '';
3055
  });
@@ -3065,6 +4453,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3065
  case 'sek-remove-column' :
3066
  sektionCandidate = self.getLevelModel( params.in_sektion, newSetValue.collection );
3067
  if ( 'no_match' != sektionCandidate ) {
 
3068
  if ( 1 === _.size( sektionCandidate.collection ) ) {
3069
  __updateAPISettingDeferred__.reject( sektionsLocalizedData.i18n["A section must have at least one column."]);
3070
  break;
@@ -3073,6 +4462,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3073
  sektionCandidate.collection = _.filter( sektionCandidate.collection, function( column ) {
3074
  return column.id != params.id;
3075
  });
 
3076
  _.each( sektionCandidate.collection, function( colModel ) {
3077
  colModel.width = '';
3078
  });
@@ -3083,6 +4473,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3083
  break;
3084
 
3085
  case 'sek-duplicate-column' :
 
3086
  if ( _.isEmpty( params.id ) ) {
3087
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
3088
  }
@@ -3095,6 +4486,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3095
  }
3096
 
3097
  sektionCandidate.collection = _.isArray( sektionCandidate.collection ) ? sektionCandidate.collection : [];
 
3098
  if ( ( self.MAX_NUMBER_OF_COLUMNS - 1 ) < _.size( sektionCandidate.collection ) ) {
3099
  __updateAPISettingDeferred__.reject( sektionsLocalizedData.i18n["You've reached the maximum number of columns allowed in this section."]);
3100
  break;
@@ -3108,16 +4500,24 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3108
  var _position = self.getLevelPositionInCollection( params.id, newSetValue.collection );
3109
  cloneId = deepClonedColumn.id;//will be passed in resolve()
3110
  sektionCandidate.collection.splice( parseInt( _position + 1, 10 ), 0, deepClonedColumn );
 
3111
  _.each( sektionCandidate.collection, function( colModel ) {
3112
  colModel.width = '';
3113
  });
3114
  break;
 
 
 
3115
  case 'sek-resize-columns' :
3116
  if ( params.col_number < 2 )
3117
  break;
3118
 
3119
  var resizedColumn = self.getLevelModel( params.resized_column, newSetValue.collection ),
3120
  sistercolumn = self.getLevelModel( params.sister_column, newSetValue.collection );
 
 
 
 
3121
  if ( 'no_match' == resizedColumn ) {
3122
  api.errare( 'updateAPISetting => ' + params.action + ' => no resized column matched' );
3123
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => no resized column matched');
@@ -3125,6 +4525,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3125
  }
3126
 
3127
  resizedColumn.width = parseFloat( params.resizedColumnWidthInPercent );
 
 
 
3128
  var parentSektion = self.getLevelModel( params.in_sektion, newSetValue.collection );
3129
  var otherColumns = _.filter( parentSektion.collection, function( _col_ ) {
3130
  return _col_.id != resizedColumn.id && _col_.id != sistercolumn.id;
@@ -3137,10 +4540,25 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3137
  if ( ! _.has( colModel, 'width') || ! _.isNumber( currentColWidth * 1 ) || _.isEmpty( currentColWidth + '' ) || 1 > currentColWidth ) {
3138
  colModel.width = parseFloat( ( 100 / params.col_number ).toFixed(3) );
3139
  }
 
3140
  otherColumnsWidth = parseFloat( ( otherColumnsWidth + colModel.width ).toFixed(3) );
3141
  });
3142
  }
 
 
 
 
 
 
 
 
 
3143
  sistercolumn.width = parseFloat( ( 100 - otherColumnsWidth ).toFixed(3) );
 
 
 
 
 
3144
  break;
3145
 
3146
 
@@ -3156,25 +4574,32 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3156
  }
3157
 
3158
  if ( params.from_sektion != params.to_sektion ) {
 
3159
  var fromSektionCandidate = self.getLevelModel( params.from_sektion, newSetValue.collection );
3160
  if ( _.isEmpty( fromSektionCandidate ) || 'no_match' == fromSektionCandidate ) {
3161
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing source column' );
3162
  }
3163
 
3164
  fromSektionCandidate.collection = _.isArray( fromSektionCandidate.collection ) ? fromSektionCandidate.collection : [];
 
3165
  movedColumnCandidate = self.getLevelModel( params.id, fromSektionCandidate.collection );
3166
  copyOfMovedColumnCandidate = $.extend( true, {}, movedColumnCandidate );
 
3167
  fromSektionCandidate.collection = _.filter( fromSektionCandidate.collection, function( column ) {
3168
  return column.id != params.id;
3169
  });
 
3170
  _.each( fromSektionCandidate.collection, function( colModel ) {
3171
  colModel.width = '';
3172
  });
3173
  }
 
 
3174
  toSektionCandidate.collection = _.isArray( toSektionCandidate.collection ) ? toSektionCandidate.collection : [];
3175
  originalCollection = $.extend( true, [], toSektionCandidate.collection );
3176
  reorderedCollection = [];
3177
  _.each( params.newOrder, function( _id_ ) {
 
3178
  if ( params.from_sektion != params.to_sektion && _id_ == copyOfMovedColumnCandidate.id ) {
3179
  reorderedCollection.push( copyOfMovedColumnCandidate );
3180
  } else {
@@ -3186,15 +4611,34 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3186
  }
3187
  });
3188
  toSektionCandidate.collection = reorderedCollection;
 
 
3189
  _.each( toSektionCandidate.collection, function( colModel ) {
3190
  colModel.width = '';
3191
  });
3192
 
3193
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3194
  case 'sek-add-module' :
 
3195
  if ( _.isEmpty( params.id ) ) {
3196
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
3197
  }
 
3198
  if ( _.isEmpty( params.module_type ) ) {
3199
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing module_type' );
3200
  }
@@ -3207,6 +4651,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3207
 
3208
  var position = 0;
3209
  columnCandidate.collection = _.isArray( columnCandidate.collection ) ? columnCandidate.collection : [];
 
3210
  _.each( columnCandidate.collection, function( moduleModel, index ) {
3211
  if ( params.before_module === moduleModel.id ) {
3212
  position = index;
@@ -3222,6 +4667,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3222
  module_type : params.module_type,
3223
  ver_ini : sektionsLocalizedData.nimbleVersion
3224
  };
 
3225
  startingModuleValue = self.getModuleStartingValue( params.module_type );
3226
  if ( 'no_starting_value' !== startingModuleValue ) {
3227
  _moduleParams.value = startingModuleValue;
@@ -3231,6 +4677,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3231
  break;
3232
 
3233
  case 'sek-duplicate-module' :
 
3234
  if ( _.isEmpty( params.id ) ) {
3235
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
3236
  }
@@ -3256,6 +4703,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3256
  break;
3257
 
3258
  case 'sek-remove-module' :
 
3259
  if ( _.isEmpty( params.id ) ) {
3260
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
3261
  }
@@ -3275,11 +4723,23 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3275
  var toColumnCandidate,
3276
  movedModuleCandidate,
3277
  copyOfMovedModuleCandidate;
 
 
 
 
 
 
 
 
 
3278
  toColumnCandidate = self.getLevelModel( params.to_column, newSetValue.collection );
3279
 
3280
  if ( _.isEmpty( toColumnCandidate ) || 'no_match' == toColumnCandidate ) {
3281
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing target column' );
3282
  }
 
 
 
3283
  if ( params.from_column != params.to_column ) {
3284
  var fromColumnCandidate;
3285
  fromColumnCandidate = self.getLevelModel( params.from_column, newSetValue.collection );
@@ -3289,12 +4749,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3289
  }
3290
 
3291
  fromColumnCandidate.collection = _.isArray( fromColumnCandidate.collection ) ? fromColumnCandidate.collection : [];
 
3292
  movedModuleCandidate = self.getLevelModel( params.id, newSetValue.collection );
3293
  copyOfMovedModuleCandidate = $.extend( true, {}, movedModuleCandidate );
 
3294
  fromColumnCandidate.collection = _.filter( fromColumnCandidate.collection, function( module ) {
3295
  return module.id != params.id;
3296
  });
3297
  }// if params.from_column != params.to_column
 
 
3298
  toColumnCandidate.collection = _.isArray( toColumnCandidate.collection ) ? toColumnCandidate.collection : [];
3299
  originalCollection = $.extend( true, [], toColumnCandidate.collection );
3300
  reorderedCollection = [];
@@ -3309,6 +4773,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3309
  reorderedCollection.push( moduleCandidate );
3310
  }
3311
  });
 
3312
  if ( reorderedCollection.length != _.uniq( reorderedCollection ).length ) {
3313
  throw new Error( 'updateAPISetting => ' + params.action + ' => there are duplicated modules in column : ' + toColumnCandidate.id );
3314
  } else {
@@ -3321,7 +4786,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3321
  moduleCandidate = self.getLevelModel( params.id, newSetValue.collection );
3322
 
3323
  var _value_ = {};
 
 
3324
  _.each( params.value || {}, function( _val_, _key_ ) {
 
 
3325
  if ( ! _.isBoolean( _val_ ) && _.isEmpty( _val_ + "" ) )
3326
  return;
3327
  _value_[ _key_ ] = _val_;
@@ -3336,6 +4805,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3336
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => missing options_type');
3337
  break;
3338
  }
 
 
 
 
3339
  if ( '__no_option_group_to_be_updated_by_children_modules__' === params.options_type ) {
3340
  moduleCandidate.value = _value_;
3341
  } else {
@@ -3344,6 +4817,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3344
  }
3345
 
3346
  break;
 
 
 
 
 
 
 
 
 
3347
  case 'sek-generate-level-options-ui' :
3348
  var _candidate_ = self.getLevelModel( params.id, newSetValue.collection ),
3349
  _valueCandidate = {};
@@ -3353,7 +4835,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3353
  break;
3354
  }
3355
  _candidate_.options = _candidate_.options || {};
 
 
 
3356
  _.each( params.value || {}, function( _val_, _key_ ) {
 
 
3357
  if ( ! _.isBoolean( _val_ ) && _.isEmpty( _val_ + "" ) )
3358
  return;
3359
  _valueCandidate[ _key_ ] = _val_;
@@ -3363,11 +4850,24 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3363
  }
3364
  _candidate_.options[ params.options_type ] = _valueCandidate;
3365
  break;
 
 
 
 
 
 
 
 
 
3366
  case 'sek-generate-local-skope-options-ui' :
3367
  _valueCandidate = {};
3368
 
3369
  var _currentOptions = $.extend( true, {}, _.isObject( newSetValue.local_options ) ? newSetValue.local_options : {} );
 
 
3370
  _.each( params.value || {}, function( _val_, _key_ ) {
 
 
3371
  if ( ! _.isBoolean( _val_ ) && _.isEmpty( _val_ + "" ) )
3372
  return;
3373
  _valueCandidate[ _key_ ] = _val_;
@@ -3380,10 +4880,33 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3380
  newSetValue.local_options = $.extend( _currentOptions, newOptionsValues );
3381
  }
3382
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3383
  case 'sek-add-content-in-new-sektion' :
 
 
3384
  if ( _.isEmpty( params.id ) ) {
3385
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
3386
  }
 
3387
  position = 0;
3388
  locationCandidate = self.getLevelModel( params.location, newSetValue.collection );
3389
  if ( 'no_match' == locationCandidate ) {
@@ -3402,8 +4925,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3402
  });
3403
 
3404
  switch( params.content_type) {
 
3405
  case 'module' :
 
 
3406
  startingModuleValue = self.getModuleStartingValue( params.content_id );
 
 
3407
  locationCandidate.collection.splice( position, 0, {
3408
  id : params.id,
3409
  level : 'section',
@@ -3426,16 +4954,25 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3426
  ver_ini : sektionsLocalizedData.nimbleVersion
3427
  });
3428
  break;
 
 
3429
  case 'preset_section' :
 
3430
  __presetSectionInjected__ = $.Deferred();//defined at the beginning of the method
3431
 
3432
  var _doWhenPresetSectionCollectionFetched = function( presetColumnCollection ) {
3433
  self.preparePresetSectionForInjection( presetColumnCollection )
3434
  .fail( function( _er_ ){
3435
  __updateAPISettingDeferred__.reject( 'updateAPISetting => error when preparePresetSectionForInjection => ' + params.action + ' => ' + _er_ );
 
 
3436
  __presetSectionInjected__.reject( _er_ );
3437
  })
3438
  .done( function( sectionReadyToInject ) {
 
 
 
 
3439
  var insertedInANestedSektion = false;
3440
  if ( ! _.isEmpty( params.sektion_to_replace ) ) {
3441
  var sektionToReplace = self.getLevelModel( params.sektion_to_replace, newSetValue.collection );
@@ -3462,6 +4999,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3462
  }
3463
 
3464
  columnCandidate.collection = _.isArray( columnCandidate.collection ) ? columnCandidate.collection : [];
 
3465
  _.each( columnCandidate.collection, function( moduleOrSectionModel, index ) {
3466
  if ( params.before_section === moduleOrSectionModel.id ) {
3467
  position = index;
@@ -3479,9 +5017,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3479
  ver_ini : sektionsLocalizedData.nimbleVersion
3480
  });
3481
  }
 
 
 
3482
  __presetSectionInjected__.resolve();
3483
  });// self.preparePresetSectionForInjection.done()
3484
  };//_doWhenPresetSectionCollectionFetched()
 
 
 
 
3485
  self.getPresetSectionCollection({
3486
  is_user_section : params.is_user_section,
3487
  presetSectionId : params.content_id,
@@ -3496,17 +5041,36 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3496
  api.errare( 'updateAPISetting => ' + params.action + ' => preset section type not found or empty : ' + params.content_id, presetColumnCollection );
3497
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => preset section type not found or empty');
3498
  }
 
3499
  _doWhenPresetSectionCollectionFetched( presetColumnCollection );
3500
  });//self.getPresetSectionCollection().done()
3501
  break;
3502
  }//switch( params.content_type)
3503
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3504
  case 'sek-add-preset-section-in-new-nested-sektion' :
 
3505
  if ( _.isEmpty( params.id ) ) {
3506
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
3507
  }
3508
 
3509
  columnCandidate = self.getLevelModel( params.in_column, newSetValue.collection );
 
 
 
3510
  parentSektionCandidate = self.getLevelModel( params.in_sektion, newSetValue.collection );
3511
  if ( 'no_match' == parentSektionCandidate ) {
3512
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => no grand parent sektion found');
@@ -3522,6 +5086,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3522
  break;
3523
  }
3524
  columnCandidate.collection = _.isArray( columnCandidate.collection ) ? columnCandidate.collection : [];
 
 
3525
  var presetColumnCollection;
3526
  __presetSectionInjected__ = $.Deferred();//defined at the beginning of the method
3527
 
@@ -3529,6 +5095,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3529
  self.preparePresetSectionForInjection( presetColumnCollection )
3530
  .fail( function( _er_ ){
3531
  __updateAPISettingDeferred__.reject( 'updateAPISetting => error when preparePresetSectionForInjection => ' + params.action + ' => ' + _er_ );
 
 
3532
  __presetSectionInjected__.reject( _er_ );
3533
  })
3534
  .done( function( sectionReadyToInject ) {
@@ -3540,9 +5108,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3540
  is_nested : true,
3541
  ver_ini : sektionsLocalizedData.nimbleVersion
3542
  });
 
 
 
3543
  __presetSectionInjected__.resolve();
3544
  });//self.preparePresetSectionForInjection.done()
3545
  };//_doWhenPresetSectionCollectionFetched
 
 
 
 
3546
  self.getPresetSectionCollection({
3547
  is_user_section : params.is_user_section,
3548
  presetSectionId : params.content_id,
@@ -3557,10 +5132,31 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3557
  api.errare( 'updateAPISetting => ' + params.action + ' => preset section type not found or empty : ' + params.content_id, presetColumnCollection );
3558
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => preset section type not found or empty');
3559
  }
 
3560
  _doWhenPresetSectionCollectionFetched( presetColumnCollection );
3561
  });//self.getPresetSectionCollection().done()
3562
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3563
  case 'sek-update-fonts' :
 
3564
  var currentGfonts = self.sniffGFonts( { is_global_location : params && true === params.is_global_location } );
3565
  if ( ! _.isEmpty( params.font_family ) && _.isString( params.font_family ) && ! _.contains( currentGfonts, params.font_family ) ) {
3566
  if ( params.font_family.indexOf('gfont') < 0 ) {
@@ -3570,9 +5166,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3570
  }
3571
  currentGfonts.push( params.font_family );
3572
  }
 
 
3573
  newSetValue.fonts = currentGfonts;
3574
  break;
3575
  }// switch
 
 
 
 
 
3576
  if ( 'pending' == __updateAPISettingDeferred__.state() ) {
3577
  var mayBeUpdateSektionsSetting = function() {
3578
  if ( _.isEqual( currentSetValue, newSetValue ) ) {
@@ -3582,11 +5185,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3582
  } else {
3583
  if ( null !== self.validateSettingValue( newSetValue ) ) {
3584
  sektionSetInstance( newSetValue, params );
 
 
3585
  params.cloneId = cloneId;
3586
  __updateAPISettingDeferred__.resolve( params );
3587
  } else {
3588
  __updateAPISettingDeferred__.reject( 'Validation problem for action ' + params.action );
3589
  }
 
3590
  }
3591
  };//mayBeUpdateSektionsSetting()
3592
 
@@ -3605,6 +5211,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3605
  });//api( _collectionSettingId_, function( sektionSetInstance ) {}
3606
  return __updateAPISettingDeferred__.promise();
3607
  },//updateAPISetting
 
 
 
 
 
 
 
 
 
 
3608
  _maybeFetchSectionsFromServer : function( params ) {
3609
  var dfd = $.Deferred(),
3610
  _ajaxRequest_;
@@ -3625,6 +5241,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3625
  api.sek_fetchingUserSavedSections = _ajaxRequest_;
3626
  }
3627
  _ajaxRequest_.done( function( _sectionData_ ) {
 
3628
  api.sek_userSavedSections[ params.preset_section_id ] = _sectionData_;
3629
  dfd.resolve( api.sek_userSavedSections );
3630
  }).fail( function( _r_ ) {
@@ -3642,6 +5259,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3642
  api.sek_fetchingPresetSections = _ajaxRequest_;
3643
  }
3644
  _ajaxRequest_.done( function( _collection_ ) {
 
3645
  api.sek_presetSections = _collection_;
3646
  dfd.resolve( api.sek_presetSections );
3647
  }).fail( function( _r_ ) {
@@ -3652,6 +5270,24 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3652
 
3653
  return dfd.promise();
3654
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3655
  getPresetSectionCollection : function( sectionParams ) {
3656
  var self = this,
3657
  __dfd__ = $.Deferred();
@@ -3664,6 +5300,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3664
  __dfd__.reject( er );
3665
  })
3666
  .done( function( _collection_ ) {
 
3667
  var presetSection,
3668
  allPresets = $.extend( true, {}, _.isObject( _collection_ ) ? _collection_ : {} );
3669
 
@@ -3675,6 +5312,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3675
  }
3676
  var presetCandidate = allPresets[ sectionParams.presetSectionId ];
3677
 
 
 
 
 
 
 
3678
  var setIds = function( collection ) {
3679
  _.each( collection, function( levelData ) {
3680
  levelData.id = sektionsLocalizedData.optPrefixForSektionsNotSaved + self.guid();
@@ -3694,25 +5337,44 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3694
  });
3695
  return collection;
3696
  };
 
 
 
3697
  presetCandidate.id = sectionParams.section_id;
 
3698
  presetCandidate.collection = setIds( presetCandidate.collection );
 
 
 
3699
  presetCandidate.ver_ini = sektionsLocalizedData.nimbleVersion;
 
3700
  presetCandidate.collection = setVersion( presetCandidate.collection );
3701
  __dfd__.resolve( presetCandidate );
3702
  });//_maybeFetchSectionsFromServer.done()
3703
 
3704
  return __dfd__.promise();
3705
  },
 
 
 
 
 
 
 
3706
  preparePresetSectionForInjection : function( columnCollection ) {
3707
  var self = this,
3708
  deferreds = {},
3709
  preparedSection = {},
3710
  _dfd_ = $.Deferred();
 
 
3711
  var _sniffImg = function( data ) {
3712
  _.each( data, function( val, key ) {
3713
  if ( _.isObject( val ) || _.isArray( val ) ) {
3714
  _sniffImg( val );
3715
  } else if ( _.isString( val ) && -1 != val.indexOf( '::img-path::' ) ) {
 
 
3716
  if ( ! _.has( deferreds, val ) ) {
3717
  deferreds[ val ] = self.importAttachment( val.replace( '::img-path::', '' ) );
3718
  }
@@ -3720,6 +5382,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3720
  });
3721
  return deferreds;
3722
  };
 
 
 
 
 
 
3723
  var _replaceImgPlaceholderById = function( data, imgList) {
3724
  _.each( data, function( val, key ) {
3725
  if ( _.isObject( val ) || _.isArray( val ) ) {
@@ -3747,6 +5415,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3747
  var CZRSeksPrototype = CZRSeksPrototype || {};
3748
  (function ( api, $ ) {
3749
  $.extend( CZRSeksPrototype, {
 
 
 
 
 
 
 
3750
  cleanRegistered : function( _id_ ) {
3751
  var self = this,
3752
  registered = $.extend( true, [], self.registered() || [] );
@@ -3756,11 +5431,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3756
  if ( api[ _reg_.what ].has( _reg_.id ) ) {
3757
  if ( ! _.isEmpty( _id_ ) && _reg_.id !== _id_ )
3758
  return;
 
3759
  if ( _.isFunction( api[ _reg_.what ]( _reg_.id ).trigger ) ) {//<= Section and Panel constructor are not extended with the Event class, that's why we check if this method exists
3760
  self.trigger( 'sek-ui-pre-removal', { what : _reg_.what, id : _reg_.id } );
3761
  }
3762
  $.when( api[ _reg_.what ]( _reg_.id ).container.remove() ).done( function() {
 
3763
  api[ _reg_.what ].remove( _reg_.id );
 
3764
  self.trigger( 'sek-ui-removed', { what : _reg_.what, id : _reg_.id } );
3765
  });
3766
  }
@@ -3769,13 +5447,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3769
  });
3770
  self.registered( registered );
3771
  },
 
 
 
3772
  cleanRegisteredLevelSettingsAfterHistoryNavigation : function() {
3773
  var self = this,
3774
  registered = $.extend( true, [], self.registered() || [] );
3775
 
3776
  registered = _.filter( registered, function( _reg_ ) {
 
3777
  if ( ! _.isEmpty( _reg_.level ) && 'setting' === _reg_.what ) {
3778
  if ( api.has( _reg_.id ) ) {
 
3779
  api.remove( _reg_.id );
3780
  }
3781
  }
@@ -3789,7 +5472,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3789
  var CZRSeksPrototype = CZRSeksPrototype || {};
3790
  (function ( api, $ ) {
3791
  $.extend( CZRSeksPrototype, {
 
3792
  rootPanelFocus : function() {
 
3793
  if ( api.section.has( api.czr_activeSectionId() ) ) {
3794
  api.section( api.czr_activeSectionId() ).expanded( false );
3795
  } else {
@@ -3801,6 +5486,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3801
  _p.expanded( false );
3802
  });
3803
  },
 
 
3804
  guid : function() {
3805
  function s4() {
3806
  return Math.floor((1 + Math.random()) * 0x10000)
@@ -3809,18 +5496,31 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3809
  }
3810
  return s4() + s4() + s4();//s4() + s4() + s4() + s4() + s4() + s4();
3811
  },
 
 
3812
  getGlobalSectionsSettingId : function() {
3813
  return sektionsLocalizedData.settingIdForGlobalSections;
3814
  },
 
 
 
 
3815
  getLevelModel : function( id, collection ) {
3816
  var self = this, _data_ = 'no_match',
 
 
 
 
3817
  _walk_ = function( id, collection, collectionSettingId, localOrGlobal ) {
 
 
3818
  if ( _.isUndefined( collection ) ) {
3819
  var currentSektionSettingValue = api( collectionSettingId )();
3820
  var sektionSettingValue = _.isObject( currentSektionSettingValue ) ? $.extend( true, {}, currentSektionSettingValue ) : $.extend( true, {}, self.getDefaultSektionSettingValue( localOrGlobal ) );
3821
  collection = _.isArray( sektionSettingValue.collection ) ? sektionSettingValue.collection : [];
3822
  }
3823
  _.each( collection, function( levelData ) {
 
3824
  if ( 'no_match' != _data_ )
3825
  return;
3826
  if ( id === levelData.id ) {
@@ -3833,6 +5533,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3833
  });
3834
  return _data_;
3835
  };
 
 
 
3836
  if ( ! _.isEmpty( collection ) ) {
3837
  _walk_( id, collection );
3838
  } else {
@@ -3848,6 +5551,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3848
 
3849
  return _data_;
3850
  },
 
 
 
 
 
 
3851
  isGlobalLocation : function( params ) {
3852
  var self = this, is_global_location = false;
3853
  params = params || {};
@@ -3862,16 +5571,23 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3862
  }
3863
  return is_global_location;
3864
  },
 
 
 
 
3865
  isChildOfAGlobalLocation : function( id ) {
3866
  var self = this,
3867
  walkCollection = function( id, collection ) {
3868
  var _data_ = 'no_match';
 
 
3869
  if ( _.isUndefined( collection ) ) {
3870
  var currentSettingValue = api( self.getGlobalSectionsSettingId() )();
3871
  var sektionSettingValue = _.isObject( currentSettingValue ) ? $.extend( true, {}, currentSettingValue ) : self.getDefaultSektionSettingValue( 'global' );
3872
  collection = _.isArray( sektionSettingValue.collection ) ? sektionSettingValue.collection : [];
3873
  }
3874
  _.each( collection, function( levelData ) {
 
3875
  if ( 'no_match' != _data_ )
3876
  return;
3877
  if ( id === levelData.id ) {
@@ -3890,13 +5606,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3890
 
3891
  getLevelPositionInCollection : function( id, collection ) {
3892
  var self = this, _position_ = 'no_match',
 
 
 
 
3893
  _walk_ = function( id, collection, collectionSettingId, localOrGlobal ) {
 
 
3894
  if ( _.isUndefined( collection ) ) {
3895
  var currentSektionSettingValue = api( collectionSettingId )();
3896
  var sektionSettingValue = _.isObject( currentSektionSettingValue ) ? $.extend( true, {}, currentSektionSettingValue ) : $.extend( true, {}, self.getDefaultSektionSettingValue( localOrGlobal ) );
3897
  collection = _.isArray( sektionSettingValue.collection ) ? sektionSettingValue.collection : [];
3898
  }
3899
  _.each( collection, function( levelData, _key_ ) {
 
3900
  if ( 'no_match' != _position_ )
3901
  return;
3902
  if ( id === levelData.id ) {
@@ -3908,6 +5631,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3908
  }
3909
  });
3910
  };
 
 
 
3911
  if ( ! _.isEmpty( collection ) ) {
3912
  _walk_( id, collection );
3913
  } else {
@@ -3922,6 +5648,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3922
  }
3923
  return _position_;
3924
  },
 
 
 
 
3925
  getLevelProperty : function( params ) {
3926
  params = _.extend( {
3927
  id : '',
@@ -3944,6 +5674,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3944
  }
3945
  return modelCandidate[ params.property ];
3946
  },
 
 
3947
  cloneLevel : function( levelId ) {
3948
  var self = this;
3949
  var levelModelCandidate = self.getLevelModel( levelId );
@@ -3951,10 +5683,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3951
  throw new Error( 'cloneLevel => no match for level id : ' + levelId );
3952
  }
3953
  var deepClonedLevel = $.extend( true, {}, levelModelCandidate );
 
3954
  var newIdWalker = function( level_model ) {
3955
  if ( _.isEmpty( level_model.id ) ) {
3956
  throw new Error( 'cloneLevel => missing level id');
3957
  }
 
3958
  level_model.id = sektionsLocalizedData.optPrefixForSektionsNotSaved + self.guid();
3959
  if ( ! _.isEmpty( level_model.collection ) ) {
3960
  if ( ! _.isArray( level_model.collection ) ) {
@@ -3967,17 +5701,37 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
3967
  }
3968
  return level_model;
3969
  };
 
3970
  return newIdWalker( deepClonedLevel );
3971
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3972
  getDefaultItemModelFromRegisteredModuleData : function( moduleType ) {
3973
  if ( ! this.isModuleRegistered( moduleType ) ) {
3974
  return {};
3975
  }
 
3976
  if ( sektionsLocalizedData.registeredModules[moduleType].is_father ) {
3977
  api.errare( 'getDefaultItemModelFromRegisteredModuleData => Father modules should be treated specifically' );
3978
  return;
3979
  }
3980
  var data = sektionsLocalizedData.registeredModules[ moduleType ].tmpl['item-inputs'],
 
 
3981
  defaultItemModel = {
3982
  id : '',
3983
  title : ''
@@ -4000,15 +5754,29 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4000
  });
4001
  return defaultItemModel;
4002
  },
 
 
4003
  getRegisteredModuleProperty : function( moduleType, property ) {
4004
  if ( ! this.isModuleRegistered( moduleType ) ) {
4005
  return 'not_set';
4006
  }
4007
  return sektionsLocalizedData.registeredModules[ moduleType ][ property ];
4008
  },
 
 
4009
  isModuleRegistered : function( moduleType ) {
4010
  return sektionsLocalizedData.registeredModules && ! _.isUndefined( sektionsLocalizedData.registeredModules[ moduleType ] );
4011
  },
 
 
 
 
 
 
 
 
 
 
4012
  sniffGFonts : function( args ) {
4013
  args = args || { is_global_location : false };
4014
  var self = this,
@@ -4019,6 +5787,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4019
  level = _.isObject( currentSektionSettingValue ) ? $.extend( true, {}, currentSektionSettingValue ) : $.extend( true, {}, self.getDefaultSektionSettingValue( localOrGlobal ) );
4020
  }
4021
  _.each( level, function( levelData, _key_ ) {
 
4022
  if ( _.isString( _key_ ) && '_css' === _key_.substr( _key_.length - 4 ) ) {
4023
  if ( true === self.inputIsAFontFamilyModifier( _key_ ) ) {
4024
  if ( levelData.indexOf('gfont') > -1 && ! _.contains( gfonts, levelData ) ) {
@@ -4040,8 +5809,26 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4040
 
4041
  return gfonts;
4042
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4043
  getInputDefaultValue : function( input_id, module_type, level ) {
4044
  var self = this;
 
 
4045
  self.cachedDefaultInputValues = self.cachedDefaultInputValues || {};
4046
  self.cachedDefaultInputValues[ module_type ] = self.cachedDefaultInputValues[ module_type ] || {};
4047
  if ( _.has( self.cachedDefaultInputValues[ module_type ], input_id ) ) {
@@ -4055,6 +5842,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4055
  api.errare( 'getInputDefaultValue => missing ' + module_type + ' in sektionsLocalizedData.registeredModules' );
4056
  return;
4057
  }
 
4058
  if ( sektionsLocalizedData.registeredModules[module_type].is_father ) {
4059
  api.errare( 'getInputDefaultValue => Father modules should be treated specifically' );
4060
  return;
@@ -4064,22 +5852,34 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4064
  }
4065
  var _defaultVal_ = 'no_default_value_specified';
4066
  _.each( level, function( levelData, _key_ ) {
 
4067
  if ( 'no_default_value_specified' !== _defaultVal_ )
4068
  return;
4069
  if ( input_id === _key_ && ! _.isUndefined( levelData.default ) ) {
4070
  _defaultVal_ = levelData.default;
4071
  }
 
4072
  if ( 'no_default_value_specified' === _defaultVal_ && ( _.isArray( levelData ) || _.isObject( levelData ) ) ) {
4073
  _defaultVal_ = self.getInputDefaultValue( input_id, module_type, levelData );
4074
  }
4075
  if ( 'no_default_value_specified' !== _defaultVal_ ) {
 
4076
  self.cachedDefaultInputValues[ module_type ][ input_id ] = _defaultVal_;
4077
  }
4078
  });
4079
  return _defaultVal_;
4080
  },
 
 
 
 
 
 
 
4081
  getInputType : function( input_id, module_type, level ) {
4082
  var self = this;
 
 
4083
  self.cachedInputTypes = self.cachedInputTypes || {};
4084
  self.cachedInputTypes[ module_type ] = self.cachedInputTypes[ module_type ] || {};
4085
  if ( _.has( self.cachedInputTypes[ module_type ], input_id ) ) {
@@ -4102,22 +5902,36 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4102
  }
4103
  var _inputType_ = 'no_input_type_specified';
4104
  _.each( level, function( levelData, _key_ ) {
 
4105
  if ( 'no_input_type_specified' !== _inputType_ )
4106
  return;
4107
  if ( input_id === _key_ && ! _.isUndefined( levelData.input_type ) ) {
4108
  _inputType_ = levelData.input_type;
4109
  }
 
4110
  if ( 'no_input_type_specified' === _inputType_ && ( _.isArray( levelData ) || _.isObject( levelData ) ) ) {
4111
  _inputType_ = self.getInputType( input_id, module_type, levelData );
4112
  }
4113
  if ( 'no_input_type_specified' !== _inputType_ ) {
 
4114
  self.cachedInputTypes[ module_type ][ input_id ] = _inputType_;
4115
  }
4116
  });
4117
  return _inputType_;
4118
  },
 
 
 
 
 
 
 
 
 
4119
  getInputRegistrationParams : function( input_id, module_type, level ) {
4120
  var self = this;
 
 
4121
  self.cachedInputRegistrationParams = self.cachedInputRegistrationParams || {};
4122
  self.cachedInputRegistrationParams[ module_type ] = self.cachedInputRegistrationParams[ module_type ] || {};
4123
  if ( _.has( self.cachedInputRegistrationParams[ module_type ], input_id ) ) {
@@ -4131,6 +5945,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4131
  api.errare( 'getInputRegistrationParams => missing ' + module_type + ' in sektionsLocalizedData.registeredModules' );
4132
  return;
4133
  }
 
4134
  if ( sektionsLocalizedData.registeredModules[module_type].is_father ) {
4135
  api.errare( 'getInputRegistrationParams => Father modules should be treated specifically' );
4136
  return;
@@ -4140,22 +5955,33 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4140
  }
4141
  var _params_ = {};
4142
  _.each( level, function( levelData, _key_ ) {
 
4143
  if ( ! _.isEmpty( _params_ ) )
4144
  return;
4145
  if ( input_id === _key_ && ! _.isUndefined( levelData.input_type ) ) {
4146
  _params_ = levelData;
4147
  }
 
4148
  if ( _.isEmpty( _params_ ) && ( _.isArray( levelData ) || _.isObject( levelData ) ) ) {
4149
  _params_ = self.getInputRegistrationParams( input_id, module_type, levelData );
4150
  }
4151
  if ( ! _.isEmpty( _params_ ) ) {
 
4152
  self.cachedInputRegistrationParams[ module_type ][ input_id ] = _params_;
4153
  }
4154
  });
4155
  return _params_;
4156
  },
 
 
 
 
 
 
4157
  inputIsAFontFamilyModifier : function( input_id, level ) {
4158
  var self = this;
 
 
4159
  self.cachedFontFamilyModifier = self.cachedFontFamilyModifier || {};
4160
  if ( _.has( self.cachedFontFamilyModifier, input_id ) ) {
4161
  return self.cachedFontFamilyModifier[ input_id ];
@@ -4169,20 +5995,42 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4169
  }
4170
  var _bool_ = 'not_set';
4171
  _.each( level, function( levelData, _key_ ) {
 
4172
  if ( 'not_set' !== _bool_ )
4173
  return;
4174
  if ( input_id === _key_ && ! _.isUndefined( levelData.input_type ) ) {
4175
  _bool_ = _.isUndefined( levelData.refresh_fonts ) ? false : levelData.refresh_fonts;
4176
  }
 
4177
  if ( 'not_set' === _bool_ && ( _.isArray( levelData ) || _.isObject( levelData ) ) ) {
4178
  _bool_ = self.inputIsAFontFamilyModifier( input_id, levelData );
4179
  }
4180
  if ( 'not_set' !== _bool_ ) {
 
4181
  self.cachedFontFamilyModifier[ input_id ] = _bool_;
4182
  }
4183
  });
4184
  return _bool_;
4185
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4186
  getModuleStartingValue : function( module_type ) {
4187
  if ( ! sektionsLocalizedData.registeredModules ) {
4188
  api.errare( 'getModuleStartingValue => missing sektionsLocalizedData.registeredModules' );
@@ -4232,6 +6080,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4232
 
4233
  selectables.eq( prevIndex ).focus();
4234
  },
 
 
 
 
 
 
 
 
 
4235
  setupSelectInput : function( selectOptions ) {
4236
  var input = this,
4237
  item = input.input_parent,
@@ -4244,6 +6101,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4244
  api.errare( 'api.czr_sektions.setupSelectInput => missing select options for input id => ' + input.id + ' in image module');
4245
  return;
4246
  } else {
 
4247
  _.each( selectOptions , function( title, value ) {
4248
  var _attributes = {
4249
  value : value,
@@ -4259,6 +6117,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4259
  $( 'select[data-czrtype]', input.container ).selecter();
4260
  }
4261
  },
 
 
 
 
 
 
 
4262
  setupFontSizeAndLineHeightInputs : function( obj ) {
4263
  var input = this,
4264
  $wrapper = $('.sek-font-size-line-height-wrapper', input.container ),
@@ -4270,25 +6135,45 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4270
  }
4271
  return unit;
4272
  };
 
4273
  input.css_unit = new api.Value( _.isEmpty( initial_unit ) ? 'px' : validateUnit( initial_unit ) );
 
4274
  input.css_unit.bind( function( to ) {
4275
  to = _.isEmpty( to ) ? 'px' : to;
4276
  $wrapper.find( 'input[type="number"]').trigger('change');
4277
  });
 
 
4278
  $wrapper.find( 'input[type="number"]').on('input change', function( evt ) {
4279
  input( $(this).val() + validateUnit( input.css_unit() ) );
4280
  }).stepper();
 
 
 
4281
  $wrapper.on( 'click', '[data-sek-unit]', function(evt) {
4282
  evt.preventDefault();
 
4283
  $wrapper.find('[data-sek-unit]').removeClass('is-selected').attr( 'aria-pressed', false );
4284
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
 
4285
  $wrapper.find('input[data-czrtype]').data('sek-unit', $(this).data('sek-unit') );
 
4286
  input.css_unit( $(this).data('sek-unit') );
4287
  });
 
 
4288
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ initial_unit +'"]').addClass('is-selected').attr( 'aria-pressed', true );
4289
  },
 
 
 
 
 
 
 
4290
  maybeSetupDeviceSwitcherForInput : function() {
4291
  var input = this;
 
4292
  var deviceSwitcherHtml = [
4293
  '<span class="sek-input-device-switcher">',
4294
  '<i data-sek-device="desktop" class="sek-switcher preview-desktop active" title="'+ sektionsLocalizedData.i18n['Settings on desktops'] +'"></i>',
@@ -4314,16 +6199,31 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4314
  }
4315
  input.previewedDevice( device );
4316
  };
 
4317
  input.container.on( 'click', '[data-sek-device]', syncWithPreviewedDevice );
 
 
4318
  var $currentDeviceIcon = input.container.find('[data-sek-device="' + api.previewedDevice() + '"]');
4319
  if ( $currentDeviceIcon.length > 0 ) {
4320
  $currentDeviceIcon.trigger('click');
4321
  }
4322
  },
 
 
 
 
 
 
 
 
 
 
4323
  scheduleModuleAccordion : function( params ) {
4324
  params = params || { expand_first_control : true };
4325
  var _section_ = this;
 
4326
  $( _section_.container ).on( 'click', '.customize-control label > .customize-control-title', function( evt ) {
 
4327
  evt.stopPropagation();
4328
  var $control = $(this).closest( '.customize-control');
4329
 
@@ -4340,10 +6240,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4340
  duration : 0,
4341
  start : function() {
4342
  $control.attr('data-sek-expanded', "false" == $control.attr('data-sek-expanded') ? "true" : "false" );
 
 
 
4343
  $control.trigger( "true" == $control.attr('data-sek-expanded') ? 'sek-accordion-expanded' : 'sek-accordion-collapsed' );
4344
  }
4345
  });
4346
  });
 
 
4347
  if ( params.expand_first_control ) {
4348
  var firstControl = _.first( _section_.controls() );
4349
  if ( _.isObject( firstControl ) && ! _.isEmpty( firstControl.id ) ) {
@@ -4354,9 +6259,17 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4354
  }
4355
  }
4356
  },
 
 
 
 
 
 
4357
  isPromise : function (fn) {
4358
  return fn && typeof fn.then === 'function' && String( $.Deferred().then ) === String( fn.then );
4359
  },
 
 
4360
  whenAllPromisesInParallel : function ( deferreds ) {
4361
  var self = this,
4362
  mainDfd = $.Deferred(),
@@ -4385,6 +6298,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4385
 
4386
  return mainDfd;
4387
  },
 
 
 
 
4388
  whenAllPromisesInSerie : function ( deferreds, ind, promiseMessages, mainDfd ) {
4389
  ind = ind || 0;
4390
  promiseMessages = promiseMessages || {};
@@ -4407,7 +6324,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4407
  }//if
4408
  return mainDfd;
4409
  },
 
 
 
 
4410
  importAttachment : function( relpath ) {
 
4411
  return wp.ajax.post( 'sek_import_attachment', {
4412
  rel_path : relpath,
4413
  nonce: api.settings.nonce.save//<= do we need to set a specific nonce to fetch the attachment
@@ -4415,7 +6337,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4415
  .fail( function( _er_ ) {
4416
  api.errare( 'sek_import_attachment ajax action failed for image ' + relpath, _er_ );
4417
  });
 
 
 
4418
  },
 
 
 
 
 
 
 
 
4419
  cleanIds : function( levelData ) {
4420
  levelData.id = "";
4421
  var self = this;
@@ -4427,23 +6360,29 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4427
  });
4428
  return levelData;
4429
  },
 
 
4430
  getDefaultSektionSettingValue : function( localOrGlobal ) {
4431
  if ( _.isUndefined( localOrGlobal ) || !_.contains( [ 'local', 'global' ], localOrGlobal ) ) {
4432
  api.errare( 'getDefaultSektionSettingValue => the skope should be set to local or global');
4433
  }
4434
  return 'global' === localOrGlobal ? sektionsLocalizedData.defaultGlobalSektionSettingValue : sektionsLocalizedData.defaultLocalSektionSettingValue;
4435
  },
 
 
 
4436
  scheduleVisibilityOfInputId : function( controlledInputId, visibilityCallBack ) {
4437
  var item = this.input_parent;
4438
  if ( !_.isFunction(visibilityCallBack) || _.isEmpty(controlledInputId) ) {
4439
  throw new Error('::scheduleVisibilityOfInputId => error when firing for input id : ' + this.id );
4440
  }
 
4441
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
 
4442
  this.bind( function( to ) {
4443
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
4444
  });
4445
- },
4446
-
4447
  });//$.extend()
4448
  })( wp.customize, jQuery );//global sektionsLocalizedData
4449
  /**
@@ -4452,12 +6391,42 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4452
  * @https://html.spec.whatwg.org/multipage/dnd.html#dnd
4453
  * @https://caniuse.com/#feat=dragndrop
4454
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4455
  var CZRSeksPrototype = CZRSeksPrototype || {};
4456
  (function ( api, $ ) {
4457
  $.extend( CZRSeksPrototype, {
 
 
 
 
 
 
 
 
4458
  setupDnd : function() {
4459
  var self = this;
 
 
4460
  self.bind( 'sek-refresh-dragzones', function( params ) {
 
 
4461
  if ( true !== 'draggable' in document.createElement('span') ) {
4462
  api.panel( sektionsLocalizedData.sektionsPanelId, function( __main_panel__ ) {
4463
  api.notifications.add( new api.Notification( 'drag-drop-support', {
@@ -4465,6 +6434,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4465
  message: sektionsLocalizedData.i18n['This browser does not support drag and drop. You might need to update your browser or use another one.'],
4466
  dismissible: true
4467
  } ) );
 
 
4468
  _.delay( function() {
4469
  api.notifications.remove( 'drag-drop-support' );
4470
  }, 10000 );
@@ -4474,34 +6445,64 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4474
 
4475
  self.setupNimbleDragZones( params.input_container );//<= module or section picker
4476
  });
 
 
4477
  api.previewer.bind( 'ready', function() {
4478
  try { self.setupNimbleDropZones();//<= module or section picker
4479
  } catch( er ) {
4480
  api.errare( '::setupDnd => error on self.setupNimbleDropZones()', er );
4481
  }
 
 
 
 
 
 
 
 
4482
  if ( ! _.isUndefined( _.findWhere( self.registered(), { module_type : 'sek_intro_sec_picker_module' } ) ) ) {
4483
  self.rootPanelFocus();
4484
  } else if ( ! _.isUndefined( _.findWhere( self.registered(), { module_type : 'sek_module_picker_module' } ) ) ) {
4485
  self.rootPanelFocus();
4486
  }
4487
  });
 
 
4488
  self.reactToDrop();
4489
  },
 
 
 
 
 
 
4490
  setupNimbleDragZones : function( $draggableWrapper ) {
4491
  var self = this;
 
 
4492
  var _onStart = function( evt ) {
 
 
4493
  self.lastClickedTargetInPreview({});
4494
 
4495
  evt.originalEvent.dataTransfer.setData( "sek-content-type", $(this).data('sek-content-type') );
4496
  evt.originalEvent.dataTransfer.setData( "sek-content-id", $(this).data('sek-content-id') );
4497
  evt.originalEvent.dataTransfer.setData( "sek-section-type", $(this).data('sek-section-type') );
4498
  evt.originalEvent.dataTransfer.setData( "sek-is-user-section", $(this).data('sek-is-user-section') );
 
 
 
4499
  self.dndData = {
4500
  content_type : evt.originalEvent.dataTransfer.getData( "sek-content-type" ),
4501
  content_id : evt.originalEvent.dataTransfer.getData( "sek-content-id" ),
4502
  section_type : evt.originalEvent.dataTransfer.getData( "sek-section-type" ),
 
4503
  is_user_section : "true" === evt.originalEvent.dataTransfer.getData( "sek-is-user-section" )
4504
  };
 
 
 
 
4505
  try {
4506
  evt.originalEvent.dataTransfer.setData( 'browserSupport', 'browserSupport' );
4507
  evt.originalEvent.dataTransfer.clearData( 'browserSupport' );
@@ -4512,6 +6513,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4512
  message: sektionsLocalizedData.i18n['This browser does not support drag and drop. You might need to update your browser or use another one.'],
4513
  dismissible: true
4514
  } ) );
 
 
4515
  _.delay( function() {
4516
  api.notifications.remove( 'drag-drop-support' );
4517
  }, 10000 );
@@ -4521,11 +6524,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4521
  $('body').addClass('sek-dragging');
4522
  api.previewer.send( 'sek-drag-start', { type : self.dndData.content_type } );//fires the rendering of the dropzones
4523
  };
 
4524
  var _onEnd = function( evt ) {
4525
  $('body').removeClass('sek-dragging');
4526
  $(this).removeClass('sek-dragged');
4527
  api.previewer.send( 'sek-drag-stop' );
4528
  };
 
4529
  var _onDoubleClick = function( evt ) {
4530
  var _targetCandidate = self.lastClickedTargetInPreview();// { id : "__nimble__fb2ab3e47472" }
4531
  var $dropTarget;
@@ -4536,11 +6541,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4536
  }
4537
 
4538
  if ( $dropTarget && $dropTarget.length > 0 ) {
 
 
4539
  api.czr_sektions.trigger( 'sek-content-dropped', {
4540
  drop_target_element : $dropTarget,
4541
  location : $dropTarget.closest('[data-sek-level="location"]').data('sek-id'),
 
4542
  before_module : $dropTarget.data('drop-zone-before-module-or-nested-section'),
4543
  after_module : $dropTarget.data('drop-zone-after-module-or-nested-section'),
 
 
4544
  before_section : $dropTarget.data('drop-zone-before-section'),
4545
  after_section : $dropTarget.data('drop-zone-after-section'),
4546
 
@@ -4548,8 +6558,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4548
  content_id : $(this).data('sek-content-id'),
4549
 
4550
  section_type : $(this).data('sek-section-type'),
 
4551
  is_user_section : "true" === $(this).data('sek-is-user-section')
4552
  });
 
4553
  self.lastClickedTargetInPreview({});
4554
  } else {
4555
  _doubleClickTargetMissingNotif();
@@ -4562,17 +6574,38 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4562
  message: sektionsLocalizedData.i18n['You first need to click on a target ( with a + icon ) in the preview.'],
4563
  dismissible: true
4564
  } ) );
 
4565
  _.delay( function() {
4566
  api.notifications.remove( 'missing-injection-target' );
4567
  }, 30000 );
4568
  };
 
 
4569
  $draggableWrapper.find( '[draggable="true"]' ).each( function() {
4570
  $(this)
4571
  .on( 'dragstart', function( evt ) { _onStart.call( $(this), evt ); })
4572
  .on( 'dragend', function( evt ) { _onEnd.call( $(this), evt ); })
 
 
4573
  .dblclick( function( evt ) { _onDoubleClick.call( $(this), evt ); });
4574
  });
4575
  },//setupNimbleZones()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4576
  setupNimbleDropZones : function() {
4577
  var self = this;
4578
  this.$dropZones = this.dnd_getDropZonesElements();
@@ -4586,15 +6619,21 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4586
 
4587
  this.$dropZones.each( function() {
4588
  var $zone = $(this);
 
4589
  if ( true === $zone.data('zone-droppable-setup') )
4590
  return;
4591
 
4592
  self.enterOverTimer = null;
 
4593
  $zone
 
4594
  .on( 'dragenter dragover', sektionsLocalizedData.dropSelectors, function( evt ) {
 
4595
  if ( _.isNull( self.enterOverTimer ) ) {
4596
  self.enterOverTimer = true;
4597
  _.delay(function() {
 
 
4598
  if ( self.currentMousePosition && ( ( self.currentMousePosition + '' ) == ( evt.clientY + '' + evt.clientX + '') ) ) {
4599
  self.enterOverTimer = null;
4600
  return;
@@ -4618,6 +6657,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4618
  }
4619
  break;
4620
  case 'drop' :
 
4621
  this.$cachedDropZoneCandidates = null;//has been declared on enter over
4622
 
4623
  if ( ! self.dnd_canDrop( { targetEl : $(this), evt : evt } ) )
@@ -4625,6 +6665,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4625
  evt.preventDefault();//@see https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#drop
4626
  self.dnd_onDrop( $(this), evt );
4627
  self.dnd_cleanOnLeaveDrop( $(this), evt );
 
 
4628
  api.previewer.send( 'sek-drag-stop' );
4629
  break;
4630
  }
@@ -4644,6 +6686,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4644
  isInVertically = yPos >= dzoneRect.top && dzoneRect.bottom >= yPos;
4645
  return isInVertically && isInHorizontally;
4646
  },
 
 
 
 
 
 
 
 
 
 
4647
  dnd_toggleDragApproachClassesToDropZones : function( evt ) {
4648
 
4649
  var self = this,
@@ -4679,10 +6731,50 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4679
  isInHorizontally = xPos <= dzoneRect.right && dzoneRect.left <= xPos,
4680
  isInVertically = yPos >= dzoneRect.top && dzoneRect.bottom >= yPos;
4681
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4682
  self.distanceTable.push({
4683
  el : $(this),
4684
  dist : ( isInVertically && isInHorizontally ) ? 0 : getHypotenuse( mouseToXCenter, mouseToYCenter )
4685
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4686
  $(this).removeClass( 'sek-drag-is-in');
4687
 
4688
  if ( ( isVeryCloseVertically || isInVertically ) && ( isVeryCloseHorizontally || isInHorizontally ) ) {
@@ -4690,12 +6782,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4690
  $(this).removeClass( 'sek-drag-is-close' );
4691
  $(this).addClass( 'sek-drag-is-very-close');
4692
  $(this).removeClass( 'sek-drag-is-in');
 
4693
  } else {
4694
  $(this).removeClass( 'sek-drag-is-approaching');
4695
  $(this).removeClass( 'sek-drag-is-close' );
4696
  $(this).removeClass( 'sek-drag-is-very-close');
4697
  $(this).removeClass( 'sek-drag-is-in');
4698
  }
 
 
 
4699
  });//$('.sek-drop-zones').each()
4700
 
4701
 
@@ -4709,8 +6805,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4709
  if ( self.$dropTargetCandidate && self.$dropTargetCandidate.length > 0 && self.dnd_isInTarget( self.$dropTargetCandidate, evt ) ) {
4710
  self.$dropTargetCandidate.addClass('sek-drag-is-in');
4711
  }
 
4712
  self.enterOverTimer = null;
4713
  },
 
 
4714
  dnd_getPreDropElementContent : function( evt ) {
4715
  var $target = $( evt.currentTarget ),
4716
  html,
@@ -4738,9 +6837,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4738
  }
4739
  return preDropContent;
4740
  },
 
 
4741
  dnd_getDropZonesElements : function() {
4742
  return $( api.previewer.targetWindow().document );
4743
  },
 
 
 
 
4744
  dnd_canDrop : function( params ) {
4745
  params = _.extend( { targetEl : {}, evt : {} }, params || {} );
4746
  var self = this, $dropTarget = params.targetEl;
@@ -4784,11 +6889,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4784
 
4785
  return $dropTarget.hasClass('sek-drop-zone') && ( ( 'preset_section' === self.dndData.content_type && isSectionDropZone ) || ( 'module' === self.dndData.content_type && ! isSectionDropZone ) || ( 'preset_section' === self.dndData.content_type && sectionHasNoModule ) );
4786
  },
 
 
4787
  dnd_OnEnterOver : function( $dropTarget, evt ) {
4788
  evt.preventDefault();//@see :https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#droptargets
 
4789
  if ( true !== $dropTarget.data( 'is-drag-entered' ) ) {
 
4790
  $dropTarget.data( 'is-drag-entered', true );
4791
  $dropTarget.addClass( 'sek-active-drop-zone' );
 
4792
  this.$dropZones.addClass( 'sek-is-dragging' );
4793
  }
4794
 
@@ -4796,6 +6906,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4796
  api.errare('Error when trying to insert the preDrop content', er );
4797
  }
4798
  },
 
 
4799
  dnd_cleanOnLeaveDrop : function( $dropTarget, evt ) {
4800
  var self = this;
4801
  this.$dropZones = this.$dropZones || this.dnd_getDropZonesElements();
@@ -4806,6 +6918,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4806
  self.dnd_cleanSingleDropTarget( $(this) );
4807
  });
4808
  },
 
 
4809
  dnd_cleanSingleDropTarget : function( $dropTarget ) {
4810
  if ( _.isEmpty( $dropTarget ) || $dropTarget.length < 1 )
4811
  return;
@@ -4819,9 +6933,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4819
 
4820
  $dropTarget.find('.sek-no-drop-possible-message').remove();
4821
  },
 
 
 
4822
  dnd_getPosition : function( $dropTarget, evt ) {
4823
  var targetRect = $dropTarget[0].getBoundingClientRect(),
4824
  targetHeight = targetRect.height;
 
 
4825
  if ( 'before' === $dropTarget.data( 'preDrop-position' ) ) {
4826
  targetHeight = targetHeight + this.preDropElement.outerHeight();
4827
  } else if ( 'after' === $dropTarget.data( 'preDrop-position' ) ) {
@@ -4830,6 +6949,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4830
 
4831
  return evt.originalEvent.clientY - targetRect.top - ( targetHeight / 2 ) > 0 ? 'after' : 'before';
4832
  },
 
 
4833
  dnd_mayBePrintPreDropElement : function( $dropTarget, evt ) {
4834
  var self = this,
4835
  previousPosition = $dropTarget.data( 'preDrop-position' ),
@@ -4843,11 +6964,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4843
  }
4844
 
4845
  self.isPrintingPreDrop = true;
 
 
4846
  this.dnd_cleanSingleDropTarget( this.$currentPreDropTarget );
4847
  var inNewSection = 'between-sections' === $dropTarget.data('sek-location') || 'in-empty-location' === $dropTarget.data('sek-location');
4848
  $.when( self.preDropElement.remove() ).done( function(){
4849
  $dropTarget[ 'before' === newPosition ? 'prepend' : 'append' ]( self.preDropElement )
4850
  .find( '.' + sektionsLocalizedData.preDropElementClass ).html( self.dnd_getPreDropElementContent( evt ) );
 
4851
  $dropTarget.find( '.' + sektionsLocalizedData.preDropElementClass ).toggleClass('in-new-sektion', inNewSection );
4852
  $dropTarget.data( 'preDrop-position', newPosition );
4853
 
@@ -4857,6 +6981,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4857
  self.$currentPreDropTarget = $dropTarget;
4858
  });
4859
  },
 
 
4860
  dnd_isOveringDropTarget : function( $dropTarget, evt ) {
4861
  var targetRect = $dropTarget[0].getBoundingClientRect(),
4862
  mouseX = evt.clientX,
@@ -4869,14 +6995,21 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4869
  isYin = mouseY >= tTop && ( tBottom - tTop ) >= ( mouseY - tTop);
4870
  return isXin && isYin;
4871
  },
 
 
4872
  dnd_onDrop: function( $dropTarget, evt ) {
4873
  evt.stopPropagation();
4874
  var _position = 'after' === this.dnd_getPosition( $dropTarget, evt ) ? $dropTarget.index() + 1 : $dropTarget.index();
 
 
4875
  api.czr_sektions.trigger( 'sek-content-dropped', {
4876
  drop_target_element : $dropTarget,
4877
  location : $dropTarget.closest('[data-sek-level="location"]').data('sek-id'),
 
4878
  before_module : $dropTarget.data('drop-zone-before-module-or-nested-section'),
4879
  after_module : $dropTarget.data('drop-zone-after-module-or-nested-section'),
 
 
4880
  before_section : $dropTarget.data('drop-zone-before-section'),
4881
  after_section : $dropTarget.data('drop-zone-after-section'),
4882
 
@@ -4884,11 +7017,40 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4884
  content_id : evt.originalEvent.dataTransfer.getData( "sek-content-id" ),
4885
 
4886
  section_type : evt.originalEvent.dataTransfer.getData( "sek-section-type" ),
 
4887
  is_user_section : "true" === evt.originalEvent.dataTransfer.getData( "sek-is-user-section" )
4888
  });
4889
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4890
  reactToDrop : function() {
4891
  var self = this;
 
 
 
 
 
 
 
 
 
 
4892
  var _do_ = function( params ) {
4893
  if ( ! _.isObject( params ) ) {
4894
  throw new Error( 'Invalid params provided' );
@@ -4899,6 +7061,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4899
 
4900
  var $dropTarget = params.drop_target_element,
4901
  dropCase = 'content-in-column';
 
 
4902
  switch( $dropTarget.data('sek-location') ) {
4903
  case 'between-sections' :
4904
  dropCase = 'content-in-a-section-to-create';
@@ -4912,18 +7076,24 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4912
  dropCase = 'content-in-new-column';
4913
  break;
4914
  }
 
 
4915
  if ( 'preset_section' === params.content_type ) {
4916
  if ( $dropTarget.hasClass( 'sek-module-drop-zone-for-first-module' ) ) {
4917
  var $parentSektion = $dropTarget.closest('div[data-sek-level="section"]');
 
4918
  var colNumber = $parentSektion.find('.sek-sektion-inner').first().children( '[data-sek-level="column"]' ).length;
 
4919
  if ( colNumber > 1 ) {
4920
  dropCase = 'preset-section-in-a-nested-section-to-create';
4921
  params.is_nested = true;
4922
  params.in_column = $dropTarget.closest('[data-sek-level="column"]').data('sek-id');
4923
  params.in_sektion = $parentSektion.data('sek-id');
 
4924
  } else {
4925
  params.sektion_to_replace = $parentSektion.data('sek-id');
4926
  params.after_section = params.sektion_to_replace;
 
4927
  params.in_column = $parentSektion.closest('[data-sek-level="column"]').data('sek-id');
4928
  dropCase = 'content-in-a-section-to-replace';
4929
  }
@@ -4968,6 +7138,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4968
  case 'content-in-a-section-to-create' :
4969
  api.previewer.trigger( 'sek-add-content-in-new-sektion', params );
4970
  break;
 
4971
  case 'content-in-a-section-to-replace' :
4972
  api.previewer.trigger( 'sek-add-content-in-new-sektion', params );
4973
  break;
@@ -4981,9 +7152,24 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4981
  default :
4982
  api.errare( 'sek control panel => ::reactToDrop => invalid drop case : ' + dropCase );
4983
  break;
 
 
 
4984
  }
4985
  };
 
 
 
 
 
 
 
 
 
 
 
4986
  this.bind( 'sek-content-dropped', function( params ) {
 
4987
  try { _do_( params ); } catch( er ) {
4988
  api.errare( 'error when reactToDrop', er );
4989
  }
@@ -4998,12 +7184,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
4998
  Credits : xwp, westonruter, valendesigns, sayedwp, utkarshpatel.
4999
  Date of original code modification : July 2018
5000
  */
 
5001
  setupTinyMceEditor: function() {
5002
  var self = this;
 
5003
  api.sekEditorExpanded = new api.Value( false );
5004
  api.sekEditorSynchronizedInput = new api.Value();
5005
 
5006
  self.editorEventsListenerSetup = false;//this status will help us ensure that we bind the shared tinyMce instance only once
 
 
5007
  var mayBeAwakeTinyMceEditor = function() {
5008
  api.sekTinyMceEditor = api.sekTinyMceEditor || tinyMCE.get( 'czr-customize-content_editor' );
5009
 
@@ -5013,14 +7203,28 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5013
  self.trigger('sek-tiny-mce-editor-bound-and-instantiated');
5014
  }
5015
  };
 
 
 
 
 
 
 
 
 
 
5016
  self.bind( 'sek-edit-module_done', function( params ) {
5017
  params = _.isObject( params ) ? params : {};
5018
  if ( 'tiny_mce_editor' !== params.clicked_input_type && 'czr_tiny_mce_editor_module' !== params.module_type )
5019
  return;
 
 
 
5020
  if ( _.isEmpty( params.syncedTinyMceInputId ) )
5021
  return;
5022
 
5023
  var controlId = params.id;
 
5024
  if ( true === self.getRegisteredModuleProperty( params.module_type, 'is_father' ) ) {
5025
  var _childModules_ = self.getRegisteredModuleProperty( params.module_type, 'children' );
5026
  if ( _.isEmpty( _childModules_ ) ) {
@@ -5033,6 +7237,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5033
  });
5034
  }
5035
  }
 
 
5036
  api.sekEditorSynchronizedInput({
5037
  control_id : controlId,
5038
  input_id : params.syncedTinyMceInputId
@@ -5041,7 +7247,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5041
  api.sekEditorExpanded( true );
5042
  api.sekTinyMceEditor.focus();
5043
  });
 
 
 
 
 
5044
  $('#customize-theme-controls').on('click', '[data-czr-action="open-tinymce-editor"]', function() {
 
 
 
5045
  var control_id = $(this).data('czr-control-id'),
5046
  input_id = $(this).data('czr-input-id');
5047
  if ( _.isEmpty( control_id ) || _.isEmpty( input_id ) ) {
@@ -5057,11 +7271,26 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5057
  api.sekEditorExpanded( true );
5058
  api.sekTinyMceEditor.focus();
5059
  });
 
 
 
 
 
 
5060
  api.sekEditorSynchronizedInput.bind( function( to, from ) {
5061
  mayBeAwakeTinyMceEditor();
 
 
 
 
 
5062
  api( to.control_id, function( _setting_ ) {
5063
  var _currentModuleValue_ = _setting_(),
5064
  _currentInputContent_ = ( _.isObject( _currentModuleValue_ ) && ! _.isEmpty( _currentModuleValue_[ to.input_id ] ) ) ? _currentModuleValue_[ to.input_id ] : '';
 
 
 
 
5065
  _currentInputContent_ = _currentInputContent_.replace(/\r?\n/g, '<br/>');
5066
  try { api.sekTinyMceEditor.setContent( _currentInputContent_ ); } catch( er ) {
5067
  api.errare( 'Error when setting the tiny mce editor content in setupTinyMceEditor', er );
@@ -5070,8 +7299,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5070
  });
5071
 
5072
  });//api.sekEditorSynchronizedInput.bind( function( to, from )
 
 
 
 
 
 
 
 
 
5073
  api.sekEditorExpanded.bind( function ( expanded, from, params ) {
5074
  mayBeAwakeTinyMceEditor();
 
5075
  if ( expanded ) {
5076
  api.sekTinyMceEditor.focus();
5077
  }
@@ -5080,6 +7319,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5080
  /*
5081
  * Ensure only the latest input is bound
5082
  */
 
 
 
 
 
 
 
5083
 
5084
  $( window )[ expanded ? 'on' : 'off' ]('resize', function() {
5085
  if ( ! api.sekEditorExpanded() )
@@ -5093,18 +7339,31 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5093
  if ( expanded ) {
5094
  self.czrResizeEditor( window.innerHeight - self.$editorPane.height() );
5095
  } else {
 
 
5096
  self.$preview.css( 'bottom', '' );
5097
  self.$collapseSidebar.css( 'bottom', '' );
5098
  }
5099
  });
 
 
 
 
 
 
5100
  $('#czr-customize-content_editor-pane' ).on('click', '[data-czr-action="close-tinymce-editor"]', function() {
5101
  api.sekEditorExpanded( false );
5102
  });
 
 
5103
  $('#customize-controls' ).on('click', function( evt ) {
5104
  if ( 'open-tinymce-editor' == $( evt.target ).data( 'czr-action') )
5105
  return;
5106
  api.sekEditorExpanded( false, { context : "clicked anywhere"} );
5107
  });
 
 
 
5108
  $(document).on( 'keydown', _.throttle( function( evt ) {
5109
  if ( 27 === evt.keyCode ) {
5110
  api.sekEditorExpanded( false );
@@ -5150,6 +7409,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5150
 
5151
  attachEventsToEditor : function() {
5152
  var self = this;
 
5153
  self.$editorTextArea = $( '#czr-customize-content_editor' );
5154
  self.$editorPane = $( '#czr-customize-content_editor-pane' );
5155
  self.$editorDragbar = $( '#czr-customize-content_editor-dragbar' );
@@ -5160,7 +7420,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5160
 
5161
  self.$preview = $( '#customize-preview' );
5162
  self.$collapseSidebar = $( '.collapse-sidebar' );
 
 
 
 
 
 
5163
  api.sekTinyMceEditor.on( 'input change keyup', function( evt ) {
 
 
5164
  if ( api.control.has( api.sekEditorSynchronizedInput().control_id ) ) {
5165
  try { api.control( api.sekEditorSynchronizedInput().control_id )
5166
  .trigger( 'tinyMceEditorUpdated', {
@@ -5173,7 +7441,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5173
  }
5174
  }
5175
  });
 
 
5176
  self.$editorTextArea.on( 'input', function( evt ) {
 
5177
  try { api.control( api.sekEditorSynchronizedInput().control_id )
5178
  .trigger( 'tinyMceEditorUpdated', {
5179
  input_id : api.sekEditorSynchronizedInput().input_id,
@@ -5184,6 +7455,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5184
  api.errare( 'Error when triggering tinyMceEditorUpdated', er );
5185
  }
5186
  });
 
 
 
 
 
 
5187
  $('#czr-customize-content_editor-pane').on( 'mousedown mouseup', function( evt ) {
5188
  if ( 'mousedown' === evt.type && 'czr-customize-content_editor-dragbar' !== $(evt.target).attr('id') && ! $(evt.target).hasClass('czr-resize-handle') )
5189
  return;
@@ -5214,6 +7491,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5214
 
5215
  czrResizeEditor : function( position ) {
5216
  var self = this,
 
5217
  windowHeight = window.innerHeight,
5218
  windowWidth = window.innerWidth,
5219
  minScroll = 40,
@@ -5255,19 +7533,32 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5255
  'bottom',
5256
  collapseMinSpacing > windowHeight - args.height ? self.$mceStatusbar.outerHeight() + collapseBottomInsideEditor : args.height + collapseBottomOutsideEditor
5257
  );
 
 
5258
  }
5259
  });//$.extend()
5260
  })( wp.customize, jQuery );//global sektionsLocalizedData
5261
  var CZRSeksPrototype = CZRSeksPrototype || {};
5262
  (function ( api, $ ) {
 
5263
  $.extend( CZRSeksPrototype, api.Events );
5264
  var CZR_SeksConstructor = api.Class.extend( CZRSeksPrototype );
 
 
 
 
 
5265
  try { api.czr_sektions = new CZR_SeksConstructor(); } catch( er ) {
5266
  api.errare( 'api.czr_sektions => problem on instantiation', er );
5267
  }
5268
  })( wp.customize, jQuery );//global sektionsLocalizedData
5269
  ( function ( api, $, _ ) {
 
5270
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
5271
  var validateUnit = function( unit ) {
5272
  if ( ! _.contains( ['px', 'em', '%'], unit ) ) {
5273
  api.errare( 'error : invalid unit for input ' + this.id, unit );
@@ -5280,12 +7571,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5280
  },
5281
  unitButtonsSetup = function( $wrapper ) {
5282
  var input = this;
 
 
5283
  $wrapper.on( 'click', '.sek-ui-button', function( evt, params ) {
5284
  evt.preventDefault();
 
5285
  $wrapper.find('.sek-ui-button').removeClass('is-selected').attr( 'aria-pressed', false );
5286
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
 
5287
  input.css_unit( $(this).data('sek-unit'), params );
5288
  });
 
 
5289
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ ( input.initial_unit || 'px' ) +'"]').addClass('is-selected').attr( 'aria-pressed', true );
5290
  },
5291
  setupResetAction = function( $wrapper, defaultVal ) {
@@ -5297,6 +7594,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5297
  });
5298
 
5299
  input( defaultVal );
 
5300
  $('.sek-unit-wrapper', $wrapper ).find('[data-sek-unit="px"]').trigger('click');
5301
  });
5302
  };
@@ -5312,25 +7610,36 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5312
  $wrapper = $('.sek-spacing-wrapper', input.container ),
5313
  inputRegistrationParams = api.czr_sektions.getInputRegistrationParams( input.id, input.module.module_type ),
5314
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : [];
 
 
5315
  $wrapper.on( 'input', 'input[type="number"]', function(evt) {
5316
  var _type_ = $(this).closest('[data-sek-spacing]').data('sek-spacing'),
5317
  _newInputVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} ),
5318
  _rawVal = $(this).val();
 
 
 
5319
  if ( ( _.isString( _rawVal ) && ! _.isEmpty( _rawVal ) ) || _.isNumber( _rawVal ) ) {
5320
  _newInputVal[ _type_ ] = _rawVal;
5321
  } else {
 
5322
  _newInputVal = _.omit( _newInputVal, _type_ );
5323
  }
5324
  input( _newInputVal );
5325
  });
 
5326
  setupResetAction.call( input, $wrapper, defaultVal );
 
 
5327
  if ( _.isObject( input() ) ) {
5328
  _.each( input(), function( _val_, _key_ ) {
5329
  $( '[data-sek-spacing="' + _key_ +'"]', $wrapper ).find( 'input[type="number"]' ).val( _val_ );
5330
  });
 
5331
  var unitToActivate = 'px';
5332
  $('.sek-unit-wrapper .sek-ui-button', input.container ).each( function() {
5333
  var unit = $(this).data('sek-unit');
 
5334
  if ( ! _.isEmpty( input() ) ) {
5335
  if ( ! _.isEmpty( input()[ 'unit' ] ) ) {
5336
  if ( unit === input()[ 'unit' ] ) {
@@ -5341,12 +7650,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5341
  });
5342
  $('.sek-unit-wrapper', input.container ).find('[data-sek-unit="' + validateUnit.call( input, unitToActivate ) + '"]').trigger('click');
5343
  }
 
 
5344
  var initial_value = input();
5345
  input.initial_unit = 'px';
5346
  if ( ! _.isEmpty( initial_value ) ) {
5347
  input.initial_unit = _.isEmpty( initial_value['unit'] ) ? 'px' : initial_value['unit'];
5348
  }
 
 
5349
  input.css_unit = new api.Value( validateUnit.call( input, input.initial_unit ) );
 
 
5350
  input.css_unit.bind( function( to ) {
5351
  to = _.isEmpty( to ) ? 'px' : to;
5352
  var _newInputVal;
@@ -5355,6 +7670,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5355
  _newInputVal[ 'unit' ] = to;
5356
  input( _newInputVal );
5357
  });
 
 
 
5358
  unitButtonsSetup.call( input, $wrapper );
5359
  }
5360
  });//$.extend( api.czrInputMap, {})
@@ -5376,12 +7694,24 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5376
  /* ------------------------------------------------------------------------- *
5377
  * SPACING WITH DEVICE SWITCHER
5378
  /* ------------------------------------------------------------------------- */
 
 
 
 
5379
  $.extend( api.czrInputMap, {
5380
  spacingWithDeviceSwitcher : function( input_options ) {
 
5381
  var input = this,
5382
  $wrapper = $('.sek-spacing-wrapper', input.container ),
5383
  inputRegistrationParams = api.czr_sektions.getInputRegistrationParams( input.id, input.module.module_type ),
5384
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {};
 
 
 
 
 
 
 
5385
  var getCurrentDeviceActualOrInheritedValue = function( inputValues, currentDevice ) {
5386
  var deviceHierarchy = [ 'mobile' , 'tablet', 'desktop' ];
5387
  if ( _.has( inputValues, currentDevice ) ) {
@@ -5395,14 +7725,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5395
  }
5396
  }
5397
  };
 
 
5398
  var syncWithPreviewedDevice = function( currentDevice ) {
5399
  var inputValues = $.extend( true, {}, _.isObject( input() ) ? input() : {} ),
5400
  clonedDefault = $.extend( true, {}, defaultVal );
5401
  inputValues = _.isObject( inputValues ) ? $.extend( clonedDefault, inputValues ) : clonedDefault;
5402
  var _currentDeviceValues = getCurrentDeviceActualOrInheritedValue( inputValues, currentDevice );
 
 
5403
  $( '[data-sek-spacing]', $wrapper ).each( function() {
5404
  var spacingType = $(this).data('sek-spacing'),
5405
  _val_ = '';
 
5406
  if ( ! _.isEmpty( _currentDeviceValues ) ) {
5407
  if ( ! _.isEmpty( _currentDeviceValues[ spacingType ] ) ) {
5408
  _val_ = _currentDeviceValues[ spacingType ];
@@ -5410,9 +7745,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5410
  }
5411
  $(this).find( 'input[type="number"]' ).val( _val_ );
5412
  });
 
 
5413
  var unitToActivate = 'px';
5414
  $( '.sek-unit-wrapper .sek-ui-button', input.container).each( function() {
5415
  var unit = $(this).data('sek-unit');
 
5416
  if ( ! _.isEmpty( _currentDeviceValues ) ) {
5417
  if ( ! _.isEmpty( _currentDeviceValues[ 'unit' ] ) ) {
5418
  if ( unit === _currentDeviceValues[ 'unit' ] ) {
@@ -5423,13 +7761,28 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5423
  });
5424
  $('.sek-unit-wrapper', input.container ).find('[data-sek-unit="' + validateUnit.call( input, unitToActivate ) + '"]').trigger('click', { previewed_device_switched : true });// We don't want to update the input();
5425
  };
 
 
 
 
 
5426
  api.czr_sektions.maybeSetupDeviceSwitcherForInput.call( input );
 
 
5427
  var initial_value = input();
5428
  input.initial_unit = 'px';
5429
  if ( ! _.isEmpty( initial_value ) && ! _.isEmpty( initial_value[ input.previewedDevice() ] ) ) {
5430
  input.initial_unit = _.isEmpty( initial_value[ input.previewedDevice() ]['unit'] ) ? 'px' : initial_value[ input.previewedDevice() ]['unit'];
5431
  }
 
 
5432
  input.css_unit = new api.Value( validateUnit.call( input, input.initial_unit ) );
 
 
 
 
 
 
5433
  $wrapper.on( 'input', 'input[type="number"]', function(evt) {
5434
  var changedSpacingType = $(this).closest('[data-sek-spacing]').data('sek-spacing'),
5435
  changedNumberInputVal = $(this).val(),
@@ -5438,20 +7791,32 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5438
 
5439
  _newInputVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} );
5440
  _newInputVal[ previewedDevice ] = $.extend( true, {}, _newInputVal[ previewedDevice ] || {} );
 
 
5441
  if ( ( _.isString( changedNumberInputVal ) && ! _.isEmpty( changedNumberInputVal ) ) || _.isNumber( changedNumberInputVal ) ) {
5442
  _newInputVal[ previewedDevice ][ changedSpacingType ] = changedNumberInputVal;
5443
  } else {
 
5444
  _newInputVal[ previewedDevice ] = _.omit( _newInputVal[ previewedDevice ], changedSpacingType );
5445
  }
5446
 
5447
  input( _newInputVal );
5448
  });
 
 
5449
  setupResetAction.call( input, $wrapper, defaultVal );
 
 
 
5450
  input.previewedDevice.bind( function( currentDevice ) {
5451
  try { syncWithPreviewedDevice( currentDevice ); } catch( er ) {
5452
  api.errare('Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id ' + input.id , er );
5453
  }
5454
  });
 
 
 
 
5455
  input.css_unit.bind( function( to, from, params ) {
5456
  if ( _.isObject( params ) && true === params.previewed_device_switched )
5457
  return;
@@ -5464,7 +7829,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5464
  _newInputVal[ previewedDevice ][ 'unit' ] = to;
5465
  input( _newInputVal );
5466
  });
 
 
 
5467
  unitButtonsSetup.call( input, $wrapper );
 
 
 
 
5468
  try { syncWithPreviewedDevice( api.previewedDevice() ); } catch( er ) {
5469
  api.errare('Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id ' + input.id , er );
5470
  }
@@ -5474,16 +7846,25 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5474
 
5475
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
5476
  ( function ( api, $, _ ) {
 
5477
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
5478
  $.extend( api.czrInputMap, {
5479
  /* ------------------------------------------------------------------------- *
5480
  * BG POSITION SIMPLE
5481
  /* ------------------------------------------------------------------------- */
5482
  bg_position : function( input_options ) {
5483
  var input = this;
 
5484
  $('.sek-bg-pos-wrapper', input.container ).on( 'change', 'input[type="radio"]', function(evt) {
5485
  input( $(this).val() );
5486
  });
 
 
5487
  if ( ! _.isEmpty( input() ) ) {
5488
  input.container.find('input[value="'+ input() +'"]').attr('checked', true).trigger('click');
5489
  }
@@ -5497,6 +7878,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5497
  var input = this,
5498
  inputRegistrationParams = api.czr_sektions.getInputRegistrationParams( input.id, input.module.module_type ),
5499
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {};
 
 
5500
  api.czr_sektions.maybeSetupDeviceSwitcherForInput.call( input );
5501
 
5502
  var getCurrentDeviceActualOrInheritedValue = function( inputValues, currentDevice ) {
@@ -5512,6 +7895,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5512
  }
5513
  }
5514
  };
 
 
5515
  var syncWithPreviewedDevice = function( currentDevice ) {
5516
  var inputValues = $.extend( true, {}, _.isObject( input() ) ? input() : {} ),
5517
  clonedDefault = $.extend( true, {}, defaultVal );
@@ -5520,6 +7905,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5520
 
5521
  input.container.find('input[value="'+ _currentDeviceValue +'"]').attr('checked', true).trigger('click', { previewed_device_switched : true } );
5522
  };
 
 
 
 
5523
  $('.sek-bg-pos-wrapper', input.container ).on( 'change', 'input[type="radio"]', function( evt ) {
5524
  var changedRadioVal = $(this).val(),
5525
  _newInputVal;
@@ -5529,11 +7918,17 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5529
 
5530
  input( _newInputVal );
5531
  });
 
 
 
 
5532
  input.previewedDevice.bind( function( currentDevice ) {
5533
  try { syncWithPreviewedDevice( currentDevice ); } catch( er ) {
5534
  api.errare('Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id ' + input.id , er );
5535
  }
5536
  });
 
 
5537
  try { syncWithPreviewedDevice( api.previewedDevice() ); } catch( er ) {
5538
  api.errare('Error when firing syncWithPreviewedDevice for input type bgPositionWithDeviceSwitcher for input id ' + input.id , er );
5539
  }
@@ -5543,13 +7938,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5543
 
5544
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
5545
  ( function ( api, $, _ ) {
 
5546
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
5547
  var x_or_y_AlignWithDeviceSwitcher = function( params ) {
5548
  var input = this,
5549
  inputRegistrationParams = api.czr_sektions.getInputRegistrationParams( input.id, input.module.module_type ),
5550
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {},
5551
  tmplSelector = 'verticalAlignWithDeviceSwitcher' === input.type ? '.sek-v-align-wrapper' : '.sek-h-align-wrapper',// <= because used by 2 different input tmpl
5552
  $wrapper = $( tmplSelector, input.container );
 
 
5553
  api.czr_sektions.maybeSetupDeviceSwitcherForInput.call( input );
5554
 
5555
  var getCurrentDeviceActualOrInheritedValue = function( inputValues, currentDevice ) {
@@ -5565,14 +7967,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5565
  }
5566
  }
5567
  };
 
 
5568
  var syncWithPreviewedDevice = function( currentDevice ) {
5569
  var inputValues = $.extend( true, {}, _.isObject( input() ) ? input() : {} ),
5570
  clonedDefault = $.extend( true, {}, defaultVal );
5571
  inputValues = _.isObject( inputValues ) ? $.extend( clonedDefault, inputValues ) : clonedDefault;
5572
  var _currentDeviceValue = getCurrentDeviceActualOrInheritedValue( inputValues, currentDevice );
 
 
5573
  $wrapper.find('.selected').removeClass('selected');
5574
  $wrapper.find( 'div[data-sek-align="' + _currentDeviceValue +'"]' ).addClass('selected');
5575
  };
 
 
5576
  $wrapper.on( 'click', '[data-sek-align]', function(evt) {
5577
  evt.preventDefault();
5578
  var _newInputVal;
@@ -5585,15 +7993,26 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5585
  input( _newInputVal );
5586
  });
5587
  });
 
 
 
5588
  input.previewedDevice.bind( function( currentDevice ) {
5589
  try { syncWithPreviewedDevice( currentDevice ); } catch( er ) {
5590
  api.errare('Error when firing syncWithPreviewedDevice for input type : ' + input.type + ' for input id ' + input.id , er );
5591
  }
5592
  });
 
 
5593
  try { syncWithPreviewedDevice( api.previewedDevice() ); } catch( er ) {
5594
  api.errare('Error when firing syncWithPreviewedDevice for input type : ' + input.type + ' for input id ' + input.id , er );
5595
  }
5596
  };
 
 
 
 
 
 
5597
  $.extend( api.czrInputMap, {
5598
  horizTextAlignmentWithDeviceSwitcher : x_or_y_AlignWithDeviceSwitcher,
5599
  horizAlignmentWithDeviceSwitcher : x_or_y_AlignWithDeviceSwitcher,
@@ -5601,7 +8020,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5601
  });//$.extend( api.czrInputMap, {})
5602
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
5603
  ( function ( api, $, _ ) {
 
5604
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
5605
  $.extend( api.czrInputMap, {
5606
  font_size : function( params ) {
5607
  api.czr_sektions.setupFontSizeAndLineHeightInputs.call(this);
@@ -5612,7 +8037,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5612
 
5613
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
5614
  ( function ( api, $, _ ) {
 
5615
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
5616
  $.extend( api.czrInputMap, {
5617
  line_height : function( params ) {
5618
  api.czr_sektions.setupFontSizeAndLineHeightInputs.call(this);
@@ -5622,8 +8053,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5622
 
5623
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
5624
  ( function ( api, $, _ ) {
 
5625
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
5626
  $.extend( api.czrInputMap, {
 
5627
  font_picker : function( input_options ) {
5628
  var input = this,
5629
  item = input.input_parent;
@@ -5637,6 +8075,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5637
  if ( ! _.isUndefined( api.sek_fetchingFontCollection ) && 'pending' == api.sek_fetchingFontCollection.state() ) {
5638
  _ajaxRequest_ = api.sek_fetchingFontCollection;
5639
  } else {
 
 
5640
  _ajaxRequest_ = api.CZR_Helpers.getModuleTmpl( {
5641
  tmpl : 'font_list',
5642
  module_type: 'font_picker_input',
@@ -5645,6 +8085,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5645
  api.sek_fetchingFontCollection = _ajaxRequest_;
5646
  }
5647
  _ajaxRequest_.done( function( _serverTmpl_ ) {
 
5648
  if ( typeof _serverTmpl_ !== 'string' || _serverTmpl_[0] !== '{' ) {
5649
  throw new Error( 'font_picker => server list is not JSON.parse-able');
5650
  }
@@ -5691,6 +8132,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5691
  return selectFocusResults.promise();
5692
 
5693
  };//_preprocessSelect2ForFontFamily
 
 
 
 
5694
  var _setupSelectForFontFamilySelector = function( customResultsAdapter, fontCollections ) {
5695
  var _model = item(),
5696
  _googleFontsFilteredBySubset = function() {
@@ -5707,6 +8152,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5707
 
5708
  },
5709
  $fontSelectElement = $( 'select[data-czrtype="' + input.id + '"]', input.container );
 
 
 
5710
  var _generateFontOptions = function( fontList, type ) {
5711
  var _html_ = '';
5712
  _.each( fontList , function( font_data ) {
@@ -5726,11 +8174,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5726
  });
5727
  return _html_;
5728
  };
 
 
5729
  if ( _.isNull( input() ) || _.isEmpty( input() ) ) {
5730
  $fontSelectElement.append( '<option value="none" selected="selected">' + sektionsLocalizedData.i18n['Select a font family'] + '</option>' );
5731
  } else {
5732
  $fontSelectElement.append( '<option value="none">' + sektionsLocalizedData.i18n['Select a font family'] + '</option>' );
5733
  }
 
 
 
5734
  _.each( [
5735
  {
5736
  title : sektionsLocalizedData.i18n['Web Safe Fonts'],
@@ -5748,6 +8201,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5748
  });
5749
 
5750
  var _fonts_czrSelect2_params = {
 
 
 
5751
  escapeMarkup: function(m) { return m; },
5752
  };
5753
  /*
@@ -5759,13 +8215,24 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5759
  closeOnSelect: false,
5760
  } );
5761
  }
 
 
 
5762
  $fontSelectElement.czrSelect2( _fonts_czrSelect2_params );
5763
  $( '.czrSelect2-selection__rendered', input.container ).css( getInlineFontStyle( input() ) );
5764
 
5765
  };//_setupSelectForFontFamilySelector
 
 
 
 
 
5766
  var getInlineFontStyle = function( _fontFamily_ ){
 
5767
  if ( ! _.isString( _fontFamily_ ) || _.isEmpty( _fontFamily_ ) )
5768
  return {};
 
 
5769
  _fontFamily_ = _fontFamily_.replace('[gfont]', '').replace('[cfont]', '');
5770
 
5771
  var module = this,
@@ -5784,6 +8251,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5784
  'font-style' : font_style || 'normal'
5785
  };
5786
  };
 
 
 
 
5787
  var getFontFamilyName = function( rawFontFamily ) {
5788
  if ( ! _.isString( rawFontFamily ) || _.isEmpty( rawFontFamily ) )
5789
  return rawFontFamily;
@@ -5806,15 +8277,25 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5806
 
5807
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
5808
  ( function ( api, $, _ ) {
 
5809
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
5810
  $.extend( api.czrInputMap, {
 
 
5811
  fa_icon_picker : function() {
5812
  var input = this,
5813
  _selected_found = false;
 
 
5814
  var _generateOptions = function( iconCollection ) {
5815
  _.each( iconCollection , function( iconClass ) {
5816
  var _attributes = {
5817
  value: iconClass,
 
5818
  html: api.CZR_Helpers.capitalize( iconClass.substring( 7 ) )
5819
  };
5820
 
@@ -5828,17 +8309,22 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5828
 
5829
  var addIcon = function ( state ) {
5830
  if (! state.id) { return state.text; }
 
 
5831
  var $state = $(
5832
  '<span class="' + state.element.value + '"></span><span class="social-name">&nbsp;&nbsp;' + state.text + '</span>'
5833
  );
5834
  return $state;
5835
  };
 
 
5836
  var $_placeholder;
5837
  if ( _selected_found ) {
5838
  $_placeholder = $('<option>');
5839
  } else {
5840
  $_placeholder = $('<option>', { selected: 'selected' } );
5841
  }
 
5842
  $( 'select[data-czrtype]', input.container )
5843
  .prepend( $_placeholder )
5844
  .czrSelect2({
@@ -5855,11 +8341,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5855
  if ( ! _.isEmpty( input.sek_faIconCollection ) ) {
5856
  _dfd_.resolve( input.sek_faIconCollection );
5857
  } else {
 
 
5858
  api.CZR_Helpers.getModuleTmpl( {
5859
  tmpl : 'icon_list',
5860
  module_type: 'fa_icon_picker_input',
5861
  module_id : input.module.id
5862
  } ).done( function( _serverTmpl_ ) {
 
5863
  if ( typeof _serverTmpl_ !== 'string' || _serverTmpl_[0] !== '[' ) {
5864
  throw new Error( 'fa_icon_picker => server list is not JSON.parse-able');
5865
  }
@@ -5869,14 +8358,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5869
  _dfd_.reject( _r_ );
5870
  });
5871
  }
 
5872
  });
5873
  };//_getIconsCollections
 
 
5874
  var _do_ = function( params ) {
5875
  if ( true === input.iconCollectionSet )
5876
  return;
5877
  $.when( _getIconsCollections() ).done( function( iconCollection ) {
5878
  _generateOptions( iconCollection );
5879
  if ( params && true === params.open_on_init ) {
 
5880
  _.delay( function() {
5881
  try{ $( 'select[data-czrtype]', input.container ).czrSelect2('open'); }catch(er) {}
5882
  }, 100 );
@@ -5886,9 +8379,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5886
  });
5887
  input.iconCollectionSet = true;
5888
  };
 
 
5889
  input.container.on('click', function() {
5890
  _do_();
5891
  });
 
 
5892
  _.delay( function() { _do_( { open_on_init : false } );}, 1000 );
5893
 
5894
  }
@@ -5896,7 +8393,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5896
 
5897
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
5898
  ( function ( api, $, _ ) {
 
5899
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
5900
  $.extend( api.czrInputMap, {
5901
  code_editor : function( input_options ) {
5902
  var input = this,
@@ -5906,15 +8409,43 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5906
  $textarea = input.container.find( 'textarea' ),
5907
  $input_title = input.container.find( '.customize-control-title' ),
5908
  editor_params = $textarea.data( 'editor-params' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5909
  if ( wp.codeEditor && ( _.isUndefined( editor_params ) || false !== editor_params ) ) {
 
5910
  editorSettings = editor_params;
5911
  }
5912
 
5913
  input.isReady.done( function() {
5914
  var _doInstantiate = function( evt ) {
5915
  var input = this;
 
5916
  if ( ! _.isEmpty( input.editor ) )
5917
  return;
 
5918
  if ( _.isEmpty( input.module.control.container.attr('data-sek-expanded') ) || "false" == input.module.control.container.attr('data-sek-expanded') )
5919
  return;
5920
 
@@ -5927,10 +8458,17 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5927
  } else {
5928
  initPlainTextareaEditor();
5929
  }
 
5930
  $input_title.click();
5931
  }, 10 );
5932
  };
 
5933
  _doInstantiate.call(input);
 
 
 
 
 
5934
  input.module.control.container.on('sek-accordion-expanded', function() {
5935
  _doInstantiate.call( input );
5936
  });
@@ -5951,6 +8489,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5951
  });
5952
 
5953
  input.editor = wp.codeEditor.initialize( $textarea, settings );
 
 
 
5954
  $( input.editor.codemirror.display.lineDiv )
5955
  .attr({
5956
  role: 'textbox',
@@ -5958,6 +8499,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5958
  'aria-label': $input_title.html(),
5959
  'aria-describedby': 'editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4'
5960
  });
 
 
5961
  $input_title.on( 'click', function( evt ) {
5962
  evt.stopPropagation();
5963
  input.editor.codemirror.focus();
@@ -5975,12 +8518,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
5975
  });
5976
 
5977
  input.editor.codemirror.setValue( input() );
 
 
5978
  /* TODO: check this */
5979
  input.bind( input.id + ':changed', function( value ) {
5980
  if ( ! suspendEditorUpdate ) {
5981
  input.editor.codemirror.setValue( value );
5982
  }
5983
  });
 
 
5984
  input.editor.codemirror.on( 'keydown', function onKeydown( codemirror, event ) {
5985
  var escKeyCode = 27;
5986
  if ( escKeyCode === event.keyCode ) {
@@ -6011,9 +8558,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6011
  }
6012
  return;
6013
  }
 
 
6014
  if ( tabKeyCode !== event.keyCode || event.ctrlKey || event.altKey || event.shiftKey ) {
6015
  return;
6016
  }
 
 
6017
  if ( $textarea.data( 'next-tab-blurs' ) ) {
6018
  return;
6019
  }
@@ -6057,13 +8608,22 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6057
  });//$.extend( api.czrInputMap, {})
6058
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
6059
  ( function ( api, $, _ ) {
 
6060
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
6061
  $.extend( api.czrInputMap, {
6062
  range_simple : function( params ) {
6063
  var input = this,
6064
  $wrapper = $('.sek-range-with-unit-picker-wrapper', input.container ),
6065
  $numberInput = $wrapper.find( 'input[type="number"]'),
6066
  $rangeInput = $wrapper.find( 'input[type="range"]');
 
 
 
6067
  $rangeInput.on('input', function( evt ) {
6068
  $numberInput.val( $(this).val() ).trigger('input');
6069
  });
@@ -6071,6 +8631,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6071
  input( $(this).val() );
6072
  $rangeInput.val( $(this).val() );
6073
  });
 
6074
  $rangeInput.val( $numberInput.val() || 0 );
6075
  },
6076
 
@@ -6079,7 +8640,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6079
 
6080
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
6081
  ( function ( api, $, _ ) {
 
6082
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
6083
  $.extend( api.czrInputMap, {
6084
  range_with_unit_picker : function( params ) {
6085
  var input = this,
@@ -6094,11 +8661,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6094
  }
6095
  return unit;
6096
  };
 
6097
  input.css_unit = new api.Value( _.isEmpty( initial_unit ) ? 'px' : validateUnit( initial_unit ) );
 
6098
  input.css_unit.bind( function( to ) {
6099
  to = _.isEmpty( to ) ? 'px' : to;
6100
  $wrapper.find( 'input[type="number"]').trigger('input');
6101
  });
 
 
 
6102
  $rangeInput.on('input', function( evt ) {
6103
  $numberInput.val( $(this).val() ).trigger('input');
6104
  });
@@ -6106,14 +8678,22 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6106
  input( $(this).val() + validateUnit( input.css_unit() ) );
6107
  $rangeInput.val( $(this).val() );
6108
  });
 
6109
  $rangeInput.val( $numberInput.val() || 0 );
 
 
6110
  $wrapper.on( 'click', '.sek-ui-button', function(evt) {
6111
  evt.preventDefault();
 
6112
  $wrapper.find('.sek-ui-button').removeClass('is-selected').attr( 'aria-pressed', false );
6113
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
 
6114
  $wrapper.find('input[data-czrtype]').data('sek-unit', $(this).data('sek-unit') );
 
6115
  input.css_unit( $(this).data('sek-unit') );
6116
  });
 
 
6117
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ initial_unit +'"]').addClass('is-selected').attr( 'aria-pressed', true );
6118
  },
6119
 
@@ -6122,7 +8702,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6122
 
6123
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
6124
  ( function ( api, $, _ ) {
 
6125
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
6126
  $.extend( api.czrInputMap, {
6127
  range_with_unit_picker_device_switcher : function( params ) {
6128
  var input = this,
@@ -6136,6 +8722,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6136
  }
6137
  return unit;
6138
  },
 
6139
  _extractNumericVal = function( _rawVal ) {
6140
  return ( _.isEmpty( _rawVal ) || ! _.isString( _rawVal ) ) ? '16' : _rawVal.replace(/px|em|%/g,'');
6141
  },
@@ -6148,6 +8735,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6148
  var getInitialUnit = function() {
6149
  return $wrapper.find('input[data-czrtype]').data('sek-unit') || 'px';
6150
  };
 
 
 
 
 
 
 
6151
  var getCurrentDeviceActualOrInheritedValue = function( inputValues, currentDevice ) {
6152
  var deviceHierarchy = [ 'mobile' , 'tablet', 'desktop' ];
6153
  if ( _.has( inputValues, currentDevice ) ) {
@@ -6162,7 +8756,12 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6162
  }
6163
  }
6164
  };
 
 
6165
  var syncWithPreviewedDevice = function( currentDevice ) {
 
 
 
6166
  var inputVal = input(), inputValues = {}, clonedDefault = $.extend( true, {}, defaultVal );
6167
  inputValues = clonedDefault;
6168
  if ( _.isObject( inputVal ) ) {
@@ -6170,25 +8769,55 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6170
  } else if ( _.isString( inputVal ) && ! _.isEmpty( inputVal ) ) {
6171
  inputValues = { desktop : inputVal };
6172
  }
 
 
6173
  var _rawVal = getCurrentDeviceActualOrInheritedValue( inputValues, currentDevice ),
6174
  _unit = _extractUnit( _rawVal ),
6175
  _numberVal = _extractNumericVal( _rawVal );
 
 
6176
  $('.sek-unit-wrapper', $wrapper).find('[data-sek-unit="' + _unit +'"]').trigger('click', { previewed_device_switched : true });// We don't want to update the input()
 
6177
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ _unit +'"]').addClass('is-selected').attr( 'aria-pressed', true );
 
 
6178
  $numberInput.val( _numberVal ).trigger('input', { previewed_device_switched : true });// We don't want to update the input()
6179
  };
 
 
 
 
 
6180
  api.czr_sektions.maybeSetupDeviceSwitcherForInput.call( input );
 
 
6181
  input.css_unit = new api.Value( _.isEmpty( getInitialUnit() ) ? 'px' : validateUnit( getInitialUnit() ) );
 
 
6182
  var resetButton = '<button type="button" class="button sek-reset-button sek-float-right">' + sektionsLocalizedData.i18n['Reset'] + '</button>';
6183
  input.container.find('.customize-control-title').append( resetButton );
 
 
 
 
 
 
 
 
 
 
6184
  input.css_unit.bind( function( to, from, params ) {
6185
  if ( _.isObject( params ) && true === params.previewed_device_switched )
6186
  return;
6187
  $numberInput.trigger('input');
6188
  });
 
 
 
6189
  $rangeInput.on('input', function( evt ) {
6190
  $numberInput.val( $(this).val() ).trigger('input');
6191
  });
 
6192
  $numberInput.on('input', function( evt, params ) {
6193
  var previewedDevice = api.previewedDevice() || 'desktop',
6194
  changedNumberInputVal = $(this).val() + validateUnit( input.css_unit() ),
@@ -6196,26 +8825,41 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6196
 
6197
  _newInputVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} );
6198
  _newInputVal[ previewedDevice ] = $.extend( true, {}, _newInputVal[ previewedDevice ] || {} );
 
 
6199
  if ( ( _.isString( changedNumberInputVal ) && ! _.isEmpty( changedNumberInputVal ) ) ) {
6200
  _newInputVal[ previewedDevice ]= changedNumberInputVal;
6201
  }
 
 
6202
  if ( _.isEmpty( params ) || ( _.isObject( params ) && true !== params.previewed_device_switched ) ) {
6203
  input( _newInputVal );
6204
  }
6205
  $rangeInput.val( $(this).val() );
6206
  });
 
 
6207
  $wrapper.on( 'click', '.sek-ui-button', function( evt, params ) {
 
6208
  evt.stopPropagation();
 
6209
  $wrapper.find('.sek-ui-button').removeClass('is-selected').attr( 'aria-pressed', false );
6210
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
 
6211
  $wrapper.find('input[data-czrtype]').data('sek-unit', $(this).data('sek-unit') );
 
6212
  input.css_unit( $(this).data('sek-unit'), params );
6213
  });
 
 
 
6214
  input.previewedDevice.bind( function( currentDevice ) {
6215
  try { syncWithPreviewedDevice( currentDevice ); } catch( er ) {
6216
  api.errare('Error when firing syncWithPreviewedDevice for input type range_with_unit_picker_device_switcher for input id ' + input.id , er );
6217
  }
6218
  });
 
 
6219
  input.container.on( 'click', '.sek-reset-button', function( evt ) {
6220
  var _currentDevice = api.previewedDevice(),
6221
  _newVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} );
@@ -6225,6 +8869,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6225
  syncWithPreviewedDevice( api.previewedDevice() );
6226
  }
6227
  });
 
 
 
 
6228
  $rangeInput.val( $numberInput.val() || 0 );
6229
  try { syncWithPreviewedDevice( api.previewedDevice() ); } catch( er ) {
6230
  api.errare('Error when firing syncWithPreviewedDevice for input type range_with_unit_picker_device_switcher for input id ' + input.id , er );
@@ -6236,7 +8884,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6236
 
6237
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
6238
  ( function ( api, $, _ ) {
 
6239
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
6240
  $.extend( api.czrInputMap, {
6241
  borders : function( params ) {
6242
  var input = this,
@@ -6251,6 +8905,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6251
  }
6252
  return unit;
6253
  },
 
6254
  _extractNumericVal = function( _rawVal ) {
6255
  return ( _.isEmpty( _rawVal ) || ! _.isString( _rawVal ) ) ? '16' : _rawVal.replace(/px|em|%/g,'');
6256
  },
@@ -6261,6 +8916,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6261
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {};
6262
 
6263
  input.cssBorderTypes = [ 'top', 'left', 'right', 'bottom' ];
 
 
6264
  var getInitialUnit = function() {
6265
  var inputVal = input(), initial_unit = 'px';
6266
  if ( _.isObject( inputVal ) && _.has( inputVal, '_all_' ) && _.isObject( inputVal['_all_'] ) && ! _.isEmpty( inputVal['_all_'][ 'wght'] ) ) {
@@ -6268,6 +8925,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6268
  }
6269
  return initial_unit;
6270
  };
 
6271
  var getInitialWeight = function() {
6272
  var inputVal = input(), initial_weight = 1;
6273
  if ( _.isObject( inputVal ) && _.has( inputVal, '_all_' ) && _.isObject( inputVal['_all_'] ) && ! _.isEmpty( inputVal['_all_'][ 'wght'] ) ) {
@@ -6280,6 +8938,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6280
  }
6281
  return initial_weight;
6282
  };
 
6283
  var getInitialColor = function() {
6284
  var inputVal = input(), initial_color = '#000000';
6285
  if ( _.isObject( inputVal ) && _.has( inputVal, '_all_' ) && _.isObject( inputVal['_all_'] ) && ! _.isEmpty( inputVal['_all_'][ 'col'] ) ) {
@@ -6287,6 +8946,10 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6287
  }
6288
  return initial_color;
6289
  };
 
 
 
 
6290
  var getCurrentBorderTypeOrAllValue = function( inputValues, borderType ) {
6291
  var clonedDefaults = $.extend( true, {}, defaultVal ), _all_Value;
6292
  if ( ! _.has( clonedDefaults, '_all_' ) ) {
@@ -6300,10 +8963,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6300
  return clonedDefaults['_all_'];
6301
  }
6302
  };
 
 
6303
  var syncWithBorderType = function( borderType ) {
6304
  if ( ! _.contains( _.union( input.cssBorderTypes, [ '_all_' ] ) , borderType ) ) {
6305
  throw new Error( "Error in syncWithBorderType : the border type must be one of those values '_all_', 'top', 'left', 'right', 'bottom'" );
6306
  }
 
 
 
 
6307
  var inputVal = input(), inputValues = {}, clonedDefault = $.extend( true, {}, defaultVal );
6308
  if ( _.isObject( inputVal ) ) {
6309
  inputValues = $.extend( true, {}, inputVal );
@@ -6311,6 +8980,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6311
  inputValues = { _all_ : { wght : inputVal } };
6312
  }
6313
  inputValues = $.extend( clonedDefault, inputValues );
 
 
6314
  var _rawVal = getCurrentBorderTypeOrAllValue( inputValues, borderType ), _unit, _numberVal;
6315
  if ( _.isEmpty( _rawVal ) || ! _.isObject( _rawVal ) || _.isEmpty( _rawVal.wght ) || _.isEmpty( _rawVal.col ) ) {
6316
  throw new Error( "Error in syncWithBorderType : getCurrentBorderTypeOrAllValue must return an object formed : array( 'wght' => '1px', 'col' => '#000000' )");
@@ -6318,48 +8989,103 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6318
 
6319
  _unit = _extractUnit( _rawVal.wght );
6320
  _numberVal = _extractNumericVal( _rawVal.wght );
 
 
6321
  $('.sek-unit-wrapper', $wrapper).find('[data-sek-unit="' + _unit +'"]').trigger('click', { border_type_switched : true });// We don't want to update the input()
 
6322
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ _unit +'"]').addClass('is-selected').attr( 'aria-pressed', true );
 
6323
  $numberInput.val( _numberVal ).trigger('input', { border_type_switched : true });// We don't want to update the input()
 
 
 
6324
  $colorInput.data('border_type_switched', true );
6325
  $colorInput.val( _rawVal.col ).trigger( 'change' );
6326
  $colorInput.data('border_type_switched', false );
6327
  };
 
 
 
 
 
 
6328
  input.borderColor = new api.Value( _.isEmpty( getInitialColor() ) ? '#000000' : getInitialColor() );
 
6329
  input.css_unit = new api.Value( _.isEmpty( getInitialUnit() ) ? 'px' : validateUnit( getInitialUnit() ) );
 
6330
  input.borderType = new api.Value( '_all_');
 
6331
  $numberInput.val( getInitialWeight() );
 
6332
  $colorInput.val( input.borderColor() );
6333
  $colorInput.wpColorPicker({
6334
  palettes: true,
 
6335
  width: window.innerWidth >= 1440 ? 271 : 251,
6336
  change : function( evt, o ) {
 
 
 
 
 
 
 
 
6337
  $(this).val( o.color.toString() ).trigger('colorpickerchange');
6338
  input.borderColor( o.color.toString(), { border_type_switched : true === $(this).data('border_type_switched') } );
 
 
 
 
 
 
6339
  },
6340
  clear : function( e, o ) {
6341
  $(this).val('').trigger('colorpickerchange');
6342
  input.borderColor('');
6343
  }
6344
  });
 
 
 
 
 
 
 
 
 
 
6345
  input.css_unit.bind( function( to, from, params ) {
 
6346
  if ( _.isObject( params ) && ( true === params.border_type_switched || true === params.initializing_the_unit ) )
6347
  return;
6348
  $numberInput.trigger('input', params);
6349
  });
 
 
 
 
6350
  input.borderColor.bind( function( to, from, params ) {
 
6351
  if ( _.isObject( params ) && ( true === params.border_type_switched || true === params.initializing_the_color ) )
6352
  return;
6353
  $numberInput.trigger('input', params);
6354
  });
 
 
6355
  input.borderType.bind( function( borderType ) {
6356
  try { syncWithBorderType( borderType ); } catch( er ) {
6357
  api.errare('Error when firing syncWithBorderType for input type borders for module type ' + input.module.module_type , er );
6358
  }
6359
  });
 
 
 
6360
  $rangeInput.on('input', function( evt ) {
6361
  $numberInput.val( $(this).val() ).trigger('input');
6362
  });
 
 
6363
  $numberInput.on('input', function( evt, params ) {
6364
  var currentBorderType = input.borderType() || '_all_',
6365
  currentColor = input.borderColor(),
@@ -6369,10 +9095,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6369
 
6370
  _newInputVal = $.extend( true, {}, _.isObject( input() ) ? input() : clonedDefaults );
6371
  _newInputVal[ currentBorderType ] = $.extend( true, {}, _newInputVal[ currentBorderType ] || clonedDefaults[ currentBorderType ] );
 
 
6372
  if ( ( _.isString( changedNumberInputVal ) && ! _.isEmpty( changedNumberInputVal ) ) ) {
6373
  _newInputVal[ currentBorderType ][ 'wght' ] = changedNumberInputVal;
6374
  }
 
6375
  _newInputVal[ currentBorderType ][ 'col' ] = currentColor;
 
 
 
6376
  if ( _.isEmpty( params ) || ( _.isObject( params ) && true !== params.border_type_switched ) ) {
6377
  if ( '_all_' === currentBorderType ) {
6378
  _.each( input.cssBorderTypes, function( _type ) {
@@ -6381,17 +9113,27 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6381
  }
6382
  input( _newInputVal );
6383
  }
 
6384
  $rangeInput.val( $(this).val() );
6385
  });
 
 
 
6386
  $wrapper.on( 'click', '[data-sek-unit]', function( evt, params ) {
6387
  evt.preventDefault();
 
6388
  $wrapper.find('[data-sek-unit]').removeClass('is-selected').attr( 'aria-pressed', false );
6389
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
 
6390
  $wrapper.find('input[data-czrtype]').data('sek-unit', $(this).data('sek-unit') );
 
6391
  input.css_unit( $(this).data('sek-unit'), params );
6392
  });
 
 
6393
  $wrapper.on( 'click', '[data-sek-border-type]', function( evt, params ) {
6394
  evt.preventDefault();
 
6395
  $wrapper.find('[data-sek-border-type]').removeClass('is-selected').attr( 'aria-pressed', false );
6396
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
6397
  var border = '_all_';
@@ -6400,6 +9142,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6400
  }
6401
  input.borderType( border, params );
6402
  });
 
 
6403
  input.container.on( 'click', '.sek-reset-button', function( evt ) {
6404
  var currentBorderType = input.borderType() || '_all_',
6405
  _newVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} );
@@ -6409,10 +9153,22 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6409
  syncWithBorderType( currentBorderType );
6410
  }
6411
  });
 
 
 
 
 
 
 
 
 
 
6412
  $rangeInput.val( $numberInput.val() || 0 );
6413
  try { syncWithBorderType( input.borderType() ); } catch( er ) {
6414
  api.errare('Error when firing syncWithBorderType for input type borders for module type ' + input.module.module_type , er );
6415
  }
 
 
6416
  $( '[data-sek-unit="' + input.css_unit() + '"]', $wrapper ).trigger('click', { initializing_the_unit : true } );
6417
  },
6418
 
@@ -6421,7 +9177,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6421
 
6422
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
6423
  ( function ( api, $, _ ) {
 
6424
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
6425
  $.extend( api.czrInputMap, {
6426
  border_radius : function( params ) {
6427
  var input = this,
@@ -6435,6 +9197,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6435
  }
6436
  return unit;
6437
  },
 
6438
  _extractNumericVal = function( _rawVal ) {
6439
  return ( _.isEmpty( _rawVal ) || ! _.isString( _rawVal ) ) ? '16' : _rawVal.replace(/px|em|%/g,'');
6440
  },
@@ -6445,6 +9208,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6445
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {};
6446
 
6447
  input.cssRadiusTypes = [ 'top_left','top_right','bottom_right','bottom_left' ];
 
 
6448
  var getInitialUnit = function() {
6449
  var inputVal = input(), initial_unit = 'px';
6450
  if ( _.isObject( inputVal ) && _.has( inputVal, '_all_' ) ) {
@@ -6452,6 +9217,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6452
  }
6453
  return initial_unit;
6454
  };
 
6455
  var getInitialRadius = function() {
6456
  var inputVal = input(), initial_rad = 0;
6457
  if ( _.isObject( inputVal ) && _.has( inputVal, '_all_' ) ) {
@@ -6464,6 +9230,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6464
  }
6465
  return initial_rad;
6466
  };
 
 
 
 
 
6467
  var getCurrentRadiusTypeOrAllValue = function( inputValues, radiusType ) {
6468
  var clonedDefaults = $.extend( true, {}, defaultVal ), _all_Value;
6469
  if ( ! _.has( clonedDefaults, '_all_' ) ) {
@@ -6477,10 +9248,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6477
  return _all_Value;
6478
  }
6479
  };
 
 
6480
  var syncWithRadiusType = function( radiusType ) {
6481
  if ( ! _.contains( [ '_all_', 'top_left', 'top_right', 'bottom_right', 'bottom_left' ], radiusType ) ) {
6482
  throw new Error( "Error in syncWithRadiusType : the radius type must be one of those values '_all_', 'top_left', 'top_right', 'bottom_right', 'bottom_left', => radius type => " + radiusType );
6483
  }
 
 
 
 
6484
  var inputVal = input(), inputValues = {}, clonedDefault = $.extend( true, {}, defaultVal );
6485
  if ( _.isObject( inputVal ) ) {
6486
  inputValues = $.extend( true, {}, inputVal );
@@ -6488,6 +9265,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6488
  inputValues = { _all_ : '0px' };
6489
  }
6490
  inputValues = $.extend( clonedDefault, inputValues );
 
 
6491
  var _rawVal = getCurrentRadiusTypeOrAllValue( inputValues, radiusType ), _unit, _numberVal;
6492
  if ( _.isEmpty( _rawVal ) || ! _.isString( _rawVal ) ) {
6493
  throw new Error( "Error in syncWithRadiusType : getCurrentRadiusTypeOrAllValue must return a string like 3em");
@@ -6495,26 +9274,61 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6495
 
6496
  _unit = _extractUnit( _rawVal );
6497
  _numberVal = _extractNumericVal( _rawVal );
 
 
6498
  $('.sek-unit-wrapper', $wrapper).find('[data-sek-unit="' + _unit +'"]').trigger('click', { radius_type_switched : true });// We don't want to update the input()
 
6499
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ _unit +'"]').addClass('is-selected').attr( 'aria-pressed', true );
 
6500
  $numberInput.val( _numberVal ).trigger('input', { radius_type_switched : true });// We don't want to update the input()
6501
  };
 
 
 
 
 
 
 
 
 
6502
  input.css_unit = new api.Value( _.isEmpty( getInitialUnit() ) ? 'px' : validateUnit( getInitialUnit() ) );
 
6503
  input.radiusType = new api.Value('_all_');
 
6504
  $numberInput.val( getInitialRadius() );
 
 
 
 
 
 
 
 
 
 
 
 
6505
  input.css_unit.bind( function( to, from, params ) {
 
6506
  if ( _.isObject( params ) && ( true === params.radius_type_switched || true === params.initializing_the_unit ) )
6507
  return;
6508
  $numberInput.trigger('input', params);
6509
  });
 
 
6510
  input.radiusType.bind( function( radiusType ) {
6511
  try { syncWithRadiusType( radiusType ); } catch( er ) {
6512
  api.errare('Error when firing syncWithRadiusType for input type border_radius for module type ' + input.module.module_type , er );
6513
  }
6514
  });
 
 
 
6515
  $rangeInput.on('input', function( evt ) {
6516
  $numberInput.val( $(this).val() ).trigger('input');
6517
  });
 
 
6518
  $numberInput.on('input', function( evt, params ) {
6519
  var currentRadiusType = input.radiusType() || '_all_',
6520
  changedNumberInputVal = $(this).val() + validateUnit( input.css_unit() ),
@@ -6523,9 +9337,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6523
 
6524
  _newInputVal = $.extend( true, {}, _.isObject( input() ) ? input() : clonedDefaults );
6525
  _newInputVal[ currentRadiusType ] = $.extend( true, {}, _newInputVal[ currentRadiusType ] || clonedDefaults[ currentRadiusType ] );
 
 
6526
  if ( ( _.isString( changedNumberInputVal ) && ! _.isEmpty( changedNumberInputVal ) ) ) {
6527
  _newInputVal[ currentRadiusType ] = changedNumberInputVal;
6528
  }
 
 
6529
  if ( _.isEmpty( params ) || ( _.isObject( params ) && true !== params.radius_type_switched ) ) {
6530
  if ( '_all_' === currentRadiusType ) {
6531
  _.each( input.cssRadiusTypes, function( _type ) {
@@ -6534,17 +9352,27 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6534
  }
6535
  input( _newInputVal );
6536
  }
 
6537
  $rangeInput.val( $(this).val() );
6538
  });
 
 
 
6539
  $wrapper.on( 'click', '[data-sek-unit]', function( evt, params ) {
6540
  evt.preventDefault();
 
6541
  $wrapper.find('[data-sek-unit]').removeClass('is-selected').attr( 'aria-pressed', false );
6542
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
 
6543
  $wrapper.find('input[data-czrtype]').data('sek-unit', $(this).data('sek-unit') );
 
6544
  input.css_unit( $(this).data('sek-unit'), params );
6545
  });
 
 
6546
  $wrapper.on( 'click', '[data-sek-radius-type]', function( evt, params ) {
6547
  evt.preventDefault();
 
6548
  $wrapper.find('[data-sek-radius-type]').removeClass('is-selected').attr( 'aria-pressed', false );
6549
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
6550
  var border = '_all_';
@@ -6553,6 +9381,8 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6553
  }
6554
  input.radiusType( border, params );
6555
  });
 
 
6556
  input.container.on( 'click', '.sek-reset-button', function( evt ) {
6557
  var currentRadiusType = input.radiusType() || '_all_',
6558
  _newVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} );
@@ -6562,10 +9392,22 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6562
  syncWithRadiusType( currentRadiusType );
6563
  }
6564
  });
 
 
 
 
 
 
 
 
 
 
6565
  $rangeInput.val( $numberInput.val() || 0 );
6566
  try { syncWithRadiusType( input.radiusType() ); } catch( er ) {
6567
  api.errare('Error when firing syncWithRadiusType for input type border_radius for module type ' + input.module.module_type , er );
6568
  }
 
 
6569
  $( '[data-sek-unit="' + input.css_unit() + '"]', $wrapper ).trigger('click', { initializing_the_unit : true } );
6570
  },
6571
 
@@ -6574,7 +9416,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6574
 
6575
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
6576
  ( function ( api, $, _ ) {
 
6577
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
6578
  $.extend( api.czrInputMap, {
6579
  buttons_choice : function( params ) {
6580
  var input = this,
@@ -6582,9 +9430,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6582
  $mainInput = $wrapper.find( 'input[type="number"]'),
6583
  inputRegistrationParams = api.czr_sektions.getInputRegistrationParams( input.id, input.module.module_type ),
6584
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {};
 
 
 
6585
  $mainInput.val( input() );
 
 
6586
  $wrapper.on( 'click', '[data-sek-choice]', function( evt, params ) {
6587
  evt.stopPropagation();
 
6588
  $wrapper.find('[data-sek-choice]').removeClass('is-selected').attr( 'aria-pressed', false );
6589
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
6590
  var newChoice;
@@ -6593,15 +9447,28 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6593
  }
6594
  input( newChoice );
6595
  });
 
 
 
 
 
6596
  $( '[data-sek-choice="' + input() + '"]', $wrapper ).trigger('click', { initializing_the_unit : true } );
6597
  }
6598
  });//$.extend( api.czrInputMap, {})
6599
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
6600
  ( function ( api, $, _ ) {
 
6601
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
 
6602
  $.extend( api.czrInputMap, {
6603
  reset_button : function( params ) {
6604
  var input = this;
 
 
6605
  input.container.on( 'click', '[data-sek-reset-scope]', function( evt, params ) {
6606
  evt.stopPropagation();
6607
  var scope = $(this).data( 'sek-reset-scope' );
@@ -6614,13 +9481,23 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6614
  }
6615
  });//$.extend( api.czrInputMap, {})
6616
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
6617
  /* ------------------------------------------------------------------------- *
6618
  * CONTENT TYPE SWITCHER
6619
  /* ------------------------------------------------------------------------- */
6620
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
6621
  api.czrModuleMap = api.czrModuleMap || {};
6622
  $.extend( api.czrModuleMap, {
6623
  sek_content_type_switcher_module : {
 
6624
  crud : false,
6625
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_content_type_switcher_module', 'name' ),
6626
  has_mod_opt : false,
@@ -6633,6 +9510,9 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6633
  });
6634
 
6635
  api.czrInputMap = api.czrInputMap || {};
 
 
 
6636
  $.extend( api.czrInputMap, {
6637
  content_type_switcher : function( input_options ) {
6638
  var input = this,
@@ -6643,8 +9523,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6643
  throw new Error( 'api.czrInputMap.content_type_switcher => section not registered' );
6644
  }
6645
  _section_ = api.section( input.module.control.section() );
 
 
6646
  input.container.on('click', '[data-sek-content-type]', function( evt ) {
6647
  evt.preventDefault();
 
6648
  input.container.find('[data-sek-content-type]').removeClass('is-selected').attr( 'aria-pressed', false );
6649
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
6650
  api.czr_sektions.currentContentPickerType( $(this).data( 'sek-content-type') );
@@ -6659,8 +9542,13 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6659
  }
6660
  });
6661
  };
 
 
 
6662
  api.czr_sektions.currentContentPickerType = api.czr_sektions.currentContentPickerType || new api.Value( input() );
6663
  _do_( api.czr_sektions.currentContentPickerType() );
 
 
6664
  api.czr_sektions.currentContentPickerType.bind( function( contentType ) {
6665
  _do_( contentType );
6666
  });
@@ -6675,10 +9563,21 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6675
  /* ------------------------------------------------------------------------- *
6676
  * MODULE PICKER MODULE
6677
  /* ------------------------------------------------------------------------- */
 
 
6678
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
6679
  api.czrModuleMap = api.czrModuleMap || {};
6680
  $.extend( api.czrModuleMap, {
6681
  sek_module_picker_module : {
 
6682
  crud : false,
6683
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_module_picker_module', 'name' ),
6684
  has_mod_opt : false,
@@ -6691,10 +9590,28 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6691
  });
6692
 
6693
  api.czrInputMap = api.czrInputMap || {};
 
 
 
 
6694
  $.extend( api.czrInputMap, {
6695
  module_picker : function( input_options ) {
6696
  var input = this;
 
 
 
 
 
 
 
 
 
 
 
 
 
6697
  api.czr_sektions.trigger( 'sek-refresh-dragzones', { type : 'module', input_container : input.container } );
 
6698
  }
6699
  });
6700
  })( wp.customize , jQuery, _ );
@@ -6705,6 +9622,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6705
  * SECTION PICKER MODULES
6706
  /* ------------------------------------------------------------------------- */
6707
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
6708
  api.czrModuleMap = api.czrModuleMap || {};
6709
  var section_modules = [
6710
  'sek_intro_sec_picker_module',
@@ -6712,11 +9637,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6712
  'sek_contact_sec_picker_module',
6713
  'sek_column_layouts_sec_picker_module'
6714
  ];
 
 
6715
  if ( sektionsLocalizedData.isNimbleHeaderFooterEnabled ) {
6716
  section_modules = _.union( section_modules, [ 'sek_header_sec_picker_module','sek_footer_sec_picker_module' ] );
6717
  }
6718
  _.each( section_modules, function( module_type ) {
6719
  api.czrModuleMap[ module_type ] = {
 
6720
  crud : false,
6721
  name : api.czr_sektions.getRegisteredModuleProperty( module_type, 'name' ),
6722
  has_mod_opt : false,
@@ -6737,10 +9665,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6737
  /* ------------------------------------------------------------------------- *
6738
  * MY SECTIONS MODULE
6739
  /* ------------------------------------------------------------------------- */
 
 
6740
  ( function ( api, $, _ ) {
6741
  var Constructor = {
6742
  initialize: function( id, options ) {
6743
  var module = this;
 
 
6744
  module.inputConstructor = api.CZRInput.extend({
6745
  initialize : function( name, options ) {
6746
  var input = this;
@@ -6757,6 +9689,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6757
  html = '',
6758
  $wrapper = input.container.find('.sek-content-type-wrapper'),
6759
  creation_date = '',
 
6760
  formatDate = function(date) {
6761
  var monthNames = [
6762
  "January", "February", "March",
@@ -6776,6 +9709,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6776
  day,
6777
  monthNames[monthIndex],
6778
  year
 
6779
  ].join(' ');
6780
  };
6781
 
@@ -6797,9 +9731,27 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6797
  });
6798
  }
6799
  });
 
 
 
 
6800
  api.CZRDynModule.prototype.initialize.call( module, id, options );
 
 
 
 
6801
  },//initialize
6802
  };
 
 
 
 
 
 
 
 
 
 
6803
  api.czrModuleMap = api.czrModuleMap || {};
6804
  if ( sektionsLocalizedData.isSavedSectionEnabled ) {
6805
  $.extend( api.czrModuleMap, {
@@ -6826,17 +9778,43 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6826
  /* ------------------------------------------------------------------------- */
6827
  ( function ( api, $, _ ) {
6828
  api.czrInputMap = api.czrInputMap || {};
 
 
 
6829
  $.extend( api.czrInputMap, {
6830
  section_picker : function( input_options ) {
6831
  var input = this;
 
 
 
 
 
 
 
 
 
 
 
 
 
6832
  api.czr_sektions.trigger( 'sek-refresh-dragzones', { type : 'preset_section', input_container : input.container } );
6833
  }
6834
  });
6835
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
6836
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
6837
  api.czrModuleMap = api.czrModuleMap || {};
6838
  $.extend( api.czrModuleMap, {
6839
  sek_level_anchor_module : {
 
6840
  crud : false,
6841
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_level_anchor_module', 'name' ),
6842
  has_mod_opt : false,
@@ -6849,12 +9827,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6849
  },
6850
  });
6851
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
6852
  ( function ( api, $, _ ) {
6853
  var Constructor = {
6854
  initialize: function( id, options ) {
 
6855
  var module = this;
 
 
6856
  module.inputConstructor = api.CZRInput.extend( module.CZRInputMths || {} );
 
6857
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
 
6858
  api.CZRDynModule.prototype.initialize.call( module, id, options );
6859
  },//initialize
6860
 
@@ -6866,8 +9851,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6866
  },//CZRInputMths
6867
 
6868
  CZRItemConstructor : {
 
6869
  ready : function() {
6870
  var item = this;
 
 
6871
  item.inputCollection.bind( function( col ) {
6872
  if( _.isEmpty( col ) )
6873
  return;
@@ -6875,11 +9863,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6875
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
6876
  }
6877
  });//item.inputCollection.bind()
 
 
6878
  api.CZRItem.prototype.ready.call( item );
6879
  },
 
 
 
 
6880
  setInputVisibilityDeps : function() {
6881
  var item = this,
6882
  module = item.module;
 
6883
  item.czr_Input.each( function( input ) {
6884
  switch( input.id ) {
6885
  case 'bg-image' :
@@ -6935,6 +9930,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6935
  api.errare( module.id + ' => error in setInputVisibilityDeps', er );
6936
  }
6937
  });
 
6938
  input.bind( function( to ) {
6939
  if ( api.CZR_Helpers.isChecked( input() ) ) {
6940
  if ( api.CZR_Helpers.isChecked( item.czr_Input('bg-attachment')()) ) {
@@ -6944,6 +9940,7 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6944
  });
6945
  break;
6946
  case 'bg-attachment' :
 
6947
  input.bind( function( to ) {
6948
  if ( api.CZR_Helpers.isChecked( input() ) ) {
6949
  if ( api.CZR_Helpers.isChecked( item.czr_Input('bg-parallax')()) ) {
@@ -6957,6 +9954,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6957
  }
6958
  }//CZRItemConstructor
6959
  };
 
 
 
 
 
 
 
 
 
 
6960
  api.czrModuleMap = api.czrModuleMap || {};
6961
  $.extend( api.czrModuleMap, {
6962
  sek_level_bg_module : {
@@ -6973,12 +9980,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6973
  },
6974
  });
6975
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
6976
  ( function ( api, $, _ ) {
6977
  var Constructor = {
6978
  initialize: function( id, options ) {
 
6979
  var module = this;
 
 
6980
  module.inputConstructor = api.CZRInput.extend( module.CZRInputMths || {} );
 
6981
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
 
6982
  api.CZRDynModule.prototype.initialize.call( module, id, options );
6983
  },//initialize
6984
 
@@ -6990,8 +10004,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6990
  },//CZRInputMths
6991
 
6992
  CZRItemConstructor : {
 
6993
  ready : function() {
6994
  var item = this;
 
 
6995
  item.inputCollection.bind( function( col ) {
6996
  if( _.isEmpty( col ) )
6997
  return;
@@ -6999,11 +10016,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
6999
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7000
  }
7001
  });//item.inputCollection.bind()
 
 
7002
  api.CZRItem.prototype.ready.call( item );
7003
  },
 
 
 
 
7004
  setInputVisibilityDeps : function() {
7005
  var item = this,
7006
  module = item.module;
 
7007
  item.czr_Input.each( function( input ) {
7008
  switch( input.id ) {
7009
  case 'border-type' :
@@ -7020,6 +10044,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7020
  }
7021
  }//CZRItemConstructor
7022
  };
 
 
 
 
 
 
 
 
 
 
7023
  api.czrModuleMap = api.czrModuleMap || {};
7024
  $.extend( api.czrModuleMap, {
7025
  sek_level_border_module : {
@@ -7036,18 +10070,32 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7036
  },
7037
  });
7038
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7039
  ( function ( api, $, _ ) {
7040
  var Constructor = {
7041
  initialize: function( id, options ) {
7042
  var module = this;
 
 
 
7043
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
7044
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7045
 
7046
  },//initialize
7047
 
 
 
 
 
 
 
7048
  CZRItemConstructor : {
 
7049
  ready : function() {
7050
  var item = this;
 
 
7051
  item.inputCollection.bind( function( col ) {
7052
  if( _.isEmpty( col ) )
7053
  return;
@@ -7055,11 +10103,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7055
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7056
  }
7057
  });//item.inputCollection.bind()
 
 
7058
  api.CZRItem.prototype.ready.call( item );
7059
  },
 
 
 
 
7060
  setInputVisibilityDeps : function() {
7061
  var item = this,
7062
  module = item.module;
 
7063
  item.czr_Input.each( function( input ) {
7064
  switch( input.id ) {
7065
  case 'use-custom-breakpoint' :
@@ -7072,6 +10127,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7072
  }
7073
  }//CZRItemConstructor
7074
  };
 
 
 
 
 
 
 
 
 
7075
  api.czrModuleMap = api.czrModuleMap || {};
7076
  $.extend( api.czrModuleMap, {
7077
  sek_level_breakpoint_module : {
@@ -7088,12 +10152,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7088
  },
7089
  });
7090
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7091
  ( function ( api, $, _ ) {
7092
  var Constructor = {
7093
  initialize: function( id, options ) {
7094
  var module = this;
 
7095
  module.inputConstructor = api.CZRInput.extend( module.CZRInputMths || {} );
 
7096
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
7097
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7098
 
7099
  },//initialize
@@ -7105,8 +10173,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7105
  },//CZRInputMths
7106
 
7107
  CZRItemConstructor : {
 
7108
  ready : function() {
7109
  var item = this;
 
 
7110
  item.inputCollection.bind( function( col ) {
7111
  if( _.isEmpty( col ) )
7112
  return;
@@ -7114,11 +10185,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7114
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7115
  }
7116
  });//item.inputCollection.bind()
 
 
7117
  api.CZRItem.prototype.ready.call( item );
7118
  },
 
 
 
 
7119
  setInputVisibilityDeps : function() {
7120
  var item = this,
7121
  module = item.module;
 
7122
  item.czr_Input.each( function( input ) {
7123
  switch( input.id ) {
7124
  case 'height-type' :
@@ -7135,6 +10213,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7135
  }
7136
  }//CZRItemConstructor
7137
  };
 
 
 
 
 
 
 
 
 
 
7138
  api.czrModuleMap = api.czrModuleMap || {};
7139
  $.extend( api.czrModuleMap, {
7140
  sek_level_height_module : {
@@ -7151,10 +10239,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7151
  },
7152
  });
7153
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7154
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
7155
  api.czrModuleMap = api.czrModuleMap || {};
7156
  $.extend( api.czrModuleMap, {
7157
  sek_level_visibility_module : {
 
7158
  crud : false,
7159
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_level_visibility_module', 'name' ),
7160
  has_mod_opt : false,
@@ -7167,12 +10265,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7167
  },
7168
  });
7169
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7170
  ( function ( api, $, _ ) {
7171
  var Constructor = {
7172
  initialize: function( id, options ) {
7173
  var module = this;
 
7174
  module.inputConstructor = api.CZRInput.extend( module.CZRInputMths || {} );
 
7175
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
7176
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7177
 
7178
  },//initialize
@@ -7184,8 +10286,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7184
  },//CZRInputMths
7185
 
7186
  CZRItemConstructor : {
 
7187
  ready : function() {
7188
  var item = this;
 
 
7189
  item.inputCollection.bind( function( col ) {
7190
  if( _.isEmpty( col ) )
7191
  return;
@@ -7193,11 +10298,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7193
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7194
  }
7195
  });//item.inputCollection.bind()
 
 
7196
  api.CZRItem.prototype.ready.call( item );
7197
  },
 
 
 
 
7198
  setInputVisibilityDeps : function() {
7199
  var item = this,
7200
  module = item.module;
 
 
7201
  item.czr_Input.each( function( input ) {
7202
  switch( input.id ) {
7203
  case 'width-type' :
@@ -7213,6 +10326,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7213
  }
7214
  }//CZRItemConstructor
7215
  };
 
 
 
 
 
 
 
 
 
 
7216
  api.czrModuleMap = api.czrModuleMap || {};
7217
  $.extend( api.czrModuleMap, {
7218
  sek_level_width_module : {
@@ -7229,12 +10352,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7229
  },
7230
  });
7231
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7232
  ( function ( api, $, _ ) {
7233
  var Constructor = {
7234
  initialize: function( id, options ) {
7235
  var module = this;
 
7236
  module.inputConstructor = api.CZRInput.extend( module.CZRInputMths || {} );
 
7237
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
7238
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7239
 
7240
  },//initialize
@@ -7246,8 +10373,11 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7246
  },//CZRInputMths
7247
 
7248
  CZRItemConstructor : {
 
7249
  ready : function() {
7250
  var item = this;
 
 
7251
  item.inputCollection.bind( function( col ) {
7252
  if( _.isEmpty( col ) )
7253
  return;
@@ -7255,11 +10385,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7255
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7256
  }
7257
  });//item.inputCollection.bind()
 
 
7258
  api.CZRItem.prototype.ready.call( item );
7259
  },
 
 
 
 
7260
  setInputVisibilityDeps : function() {
7261
  var item = this,
7262
  module = item.module;
 
 
7263
  item.czr_Input.each( function( input ) {
7264
  switch( input.id ) {
7265
  case 'use-custom-outer-width' :
@@ -7277,6 +10415,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7277
  }
7278
  }//CZRItemConstructor
7279
  };
 
 
 
 
 
 
 
 
 
 
7280
  api.czrModuleMap = api.czrModuleMap || {};
7281
  $.extend( api.czrModuleMap, {
7282
  sek_level_width_section : {
@@ -7293,7 +10441,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7293
  },
7294
  });
7295
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7296
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
7297
  api.czrModuleMap = api.czrModuleMap || {};
7298
  $.extend( api.czrModuleMap, {
7299
  sek_level_spacing_module : {
@@ -7310,19 +10467,34 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7310
  },
7311
  });
7312
  })( wp.customize , jQuery, _ );
 
 
7313
  ( function ( api, $, _ ) {
7314
  var Constructor = {
7315
  initialize: function( id, options ) {
7316
  var module = this;
 
7317
  module.inputConstructor = api.CZRInput.extend({
7318
  setupSelect : function() {
7319
  api.czr_sektions.setupSelectInput.call( this );
7320
  }
7321
  });
 
 
 
7322
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7323
 
7324
  }//initialize
7325
  };
 
 
 
 
 
 
 
 
 
7326
  api.czrModuleMap = api.czrModuleMap || {};
7327
  $.extend( api.czrModuleMap, {
7328
  sek_local_template : {
@@ -7338,23 +10510,30 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7338
  },
7339
  });
7340
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7341
  ( function ( api, $, _ ) {
7342
  var Constructor = {
7343
  initialize: function( id, options ) {
7344
  var module = this;
 
7345
  module.inputConstructor = api.CZRInput.extend({
7346
  setupSelect : function() {
7347
  api.czr_sektions.setupSelectInput.call( this );
7348
  }
7349
  });
 
7350
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
7351
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7352
 
7353
  },//initialize
7354
 
7355
  CZRItemConstructor : {
 
7356
  ready : function() {
7357
  var item = this;
 
 
7358
  item.inputCollection.bind( function( col ) {
7359
  if( _.isEmpty( col ) )
7360
  return;
@@ -7362,11 +10541,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7362
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7363
  }
7364
  });//item.inputCollection.bind()
 
 
7365
  api.CZRItem.prototype.ready.call( item );
7366
  },
 
 
 
 
7367
  setInputVisibilityDeps : function() {
7368
  var item = this,
7369
  module = item.module;
 
 
7370
  item.czr_Input.each( function( input ) {
7371
  switch( input.id ) {
7372
  case 'use-custom-outer-width' :
@@ -7384,6 +10571,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7384
  }
7385
  }//CZRItemConstructor
7386
  };
 
 
 
 
 
 
 
 
 
 
7387
  api.czrModuleMap = api.czrModuleMap || {};
7388
  $.extend( api.czrModuleMap, {
7389
  sek_local_widths : {
@@ -7399,10 +10596,21 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7399
  },
7400
  });
7401
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7402
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
 
7403
  api.czrModuleMap = api.czrModuleMap || {};
7404
  $.extend( api.czrModuleMap, {
7405
  sek_local_custom_css : {
 
7406
  crud : false,
7407
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_local_custom_css', 'name' ),
7408
  has_mod_opt : false,
@@ -7414,10 +10622,21 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7414
  },
7415
  });
7416
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7417
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
 
7418
  api.czrModuleMap = api.czrModuleMap || {};
7419
  $.extend( api.czrModuleMap, {
7420
  sek_local_reset : {
 
7421
  crud : false,
7422
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_local_reset', 'name' ),
7423
  has_mod_opt : false,
@@ -7429,19 +10648,32 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7429
  },
7430
  });
7431
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7432
  ( function ( api, $, _ ) {
7433
  var Constructor = {
7434
  initialize: function( id, options ) {
7435
  var module = this;
 
7436
  module.inputConstructor = api.CZRInput.extend({
7437
  setupSelect : function() {
7438
  api.czr_sektions.setupSelectInput.call( this );
7439
  }
7440
  });
 
 
 
7441
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7442
 
7443
  }//initialize
7444
  };
 
 
 
 
 
 
 
 
7445
  api.czrModuleMap = api.czrModuleMap || {};
7446
  $.extend( api.czrModuleMap, {
7447
  sek_local_performances : {
@@ -7457,19 +10689,33 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7457
  },
7458
  });
7459
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7460
  ( function ( api, $, _ ) {
7461
  var Constructor = {
7462
  initialize: function( id, options ) {
7463
  var module = this;
 
7464
  module.inputConstructor = api.CZRInput.extend({
7465
  setupSelect : function() {
7466
  api.czr_sektions.setupSelectInput.call( this );
7467
  }
7468
  });
 
 
 
7469
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7470
 
7471
  }//initialize
7472
  };
 
 
 
 
 
 
 
 
 
7473
  api.czrModuleMap = api.czrModuleMap || {};
7474
  $.extend( api.czrModuleMap, {
7475
  sek_local_header_footer : {
@@ -7485,23 +10731,30 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7485
  },
7486
  });
7487
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7488
  ( function ( api, $, _ ) {
7489
  var Constructor = {
7490
  initialize: function( id, options ) {
7491
  var module = this;
 
7492
  module.inputConstructor = api.CZRInput.extend({
7493
  setupSelect : function() {
7494
  api.czr_sektions.setupSelectInput.call( this );
7495
  }
7496
  });
 
7497
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
7498
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7499
 
7500
  },//initialize
7501
 
7502
  CZRItemConstructor : {
 
7503
  ready : function() {
7504
  var item = this;
 
 
7505
  item.inputCollection.bind( function( col ) {
7506
  if( _.isEmpty( col ) )
7507
  return;
@@ -7509,11 +10762,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7509
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7510
  }
7511
  });//item.inputCollection.bind()
 
 
7512
  api.CZRItem.prototype.ready.call( item );
7513
  },
 
 
 
 
7514
  setInputVisibilityDeps : function() {
7515
  var item = this,
7516
  module = item.module;
 
 
7517
  item.czr_Input.each( function( input ) {
7518
  switch( input.id ) {
7519
  case 'use-custom-breakpoint' :
@@ -7526,6 +10787,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7526
  }
7527
  }//CZRItemConstructor
7528
  };
 
 
 
 
 
 
 
 
 
 
7529
  api.czrModuleMap = api.czrModuleMap || {};
7530
  $.extend( api.czrModuleMap, {
7531
  sek_global_breakpoint : {
@@ -7541,23 +10812,30 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7541
  },
7542
  });
7543
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7544
  ( function ( api, $, _ ) {
7545
  var Constructor = {
7546
  initialize: function( id, options ) {
7547
  var module = this;
 
7548
  module.inputConstructor = api.CZRInput.extend({
7549
  setupSelect : function() {
7550
  api.czr_sektions.setupSelectInput.call( this );
7551
  }
7552
  });
 
7553
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
7554
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7555
 
7556
  },//initialize
7557
 
7558
  CZRItemConstructor : {
 
7559
  ready : function() {
7560
  var item = this;
 
 
7561
  item.inputCollection.bind( function( col ) {
7562
  if( _.isEmpty( col ) )
7563
  return;
@@ -7565,11 +10843,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7565
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7566
  }
7567
  });//item.inputCollection.bind()
 
 
7568
  api.CZRItem.prototype.ready.call( item );
7569
  },
 
 
 
 
7570
  setInputVisibilityDeps : function() {
7571
  var item = this,
7572
  module = item.module;
 
 
7573
  item.czr_Input.each( function( input ) {
7574
  switch( input.id ) {
7575
  case 'use-custom-outer-width' :
@@ -7587,6 +10873,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7587
  }
7588
  }//CZRItemConstructor
7589
  };
 
 
 
 
 
 
 
 
 
 
7590
  api.czrModuleMap = api.czrModuleMap || {};
7591
  $.extend( api.czrModuleMap, {
7592
  sek_global_widths : {
@@ -7602,10 +10898,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7602
  },
7603
  });
7604
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7605
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
7606
  api.czrModuleMap = api.czrModuleMap || {};
7607
  $.extend( api.czrModuleMap, {
7608
  sek_global_performances : {
 
7609
  crud : false,
7610
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_global_performances', 'name' ),
7611
  has_mod_opt : false,
@@ -7617,19 +10923,33 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7617
  },
7618
  });
7619
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7620
  ( function ( api, $, _ ) {
7621
  var Constructor = {
7622
  initialize: function( id, options ) {
7623
  var module = this;
 
7624
  module.inputConstructor = api.CZRInput.extend({
7625
  setupSelect : function() {
7626
  api.czr_sektions.setupSelectInput.call( this );
7627
  }
7628
  });
 
 
 
7629
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7630
 
7631
  }//initialize
7632
  };
 
 
 
 
 
 
 
 
 
7633
  api.czrModuleMap = api.czrModuleMap || {};
7634
  $.extend( api.czrModuleMap, {
7635
  sek_global_header_footer : {
@@ -7645,18 +10965,30 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7645
  },
7646
  });
7647
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7648
  ( function ( api, $, _ ) {
7649
  var Constructor = {
7650
  initialize: function( id, options ) {
7651
  var module = this;
 
 
 
 
 
 
 
7652
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
7653
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7654
 
7655
  },//initialize
7656
 
7657
  CZRItemConstructor : {
 
7658
  ready : function() {
7659
  var item = this;
 
 
7660
  item.inputCollection.bind( function( col ) {
7661
  if( _.isEmpty( col ) )
7662
  return;
@@ -7664,11 +10996,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7664
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7665
  }
7666
  });//item.inputCollection.bind()
 
 
7667
  api.CZRItem.prototype.ready.call( item );
7668
  },
 
 
 
 
7669
  setInputVisibilityDeps : function() {
7670
  var item = this,
7671
  module = item.module;
 
 
7672
  item.czr_Input.each( function( input ) {
7673
  switch( input.id ) {
7674
  case 'enable' :
@@ -7703,6 +11043,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7703
  }
7704
  }//CZRItemConstructor
7705
  };
 
 
 
 
 
 
 
 
 
 
7706
  api.czrModuleMap = api.czrModuleMap || {};
7707
  $.extend( api.czrModuleMap, {
7708
  sek_global_recaptcha : {
@@ -7718,10 +11068,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7718
  },
7719
  });
7720
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7721
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
7722
  api.czrModuleMap = api.czrModuleMap || {};
7723
  $.extend( api.czrModuleMap, {
7724
  sek_global_beta_features : {
 
7725
  crud : false,
7726
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_global_beta_features', 'name' ),
7727
  has_mod_opt : false,
@@ -7735,17 +11095,28 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7735
  })( wp.customize , jQuery, _ );/* ------------------------------------------------------------------------- *
7736
  * IMAGE MAIN SETTINGS
7737
  /* ------------------------------------------------------------------------- */
 
 
7738
  ( function ( api, $, _ ) {
7739
  var Constructor = {
7740
  initialize: function( id, options ) {
7741
  var module = this;
 
7742
  module.inputConstructor = api.CZRInput.extend({
7743
  setupSelect : function() {
7744
  api.czr_sektions.setupSelectInput.call( this );
7745
  }
7746
  });
 
7747
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
 
 
 
7748
  api.CZRDynModule.prototype.initialize.call( module, id, options );
 
 
 
7749
  module.bind( 'set_default_content_picker_options', function( params ) {
7750
  params.defaultContentPickerOption.defaultOption = {
7751
  'title' : '<span style="font-weight:bold">' + sektionsLocalizedData.i18n['Set a custom url'] + '</span>',
@@ -7758,9 +11129,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7758
  return params;
7759
  });
7760
  },//initialize
 
 
 
 
 
 
 
 
7761
  CZRItemConstructor : {
 
7762
  ready : function() {
7763
  var item = this;
 
 
7764
  item.inputCollection.bind( function( col ) {
7765
  if( _.isEmpty( col ) )
7766
  return;
@@ -7768,11 +11150,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7768
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7769
  }
7770
  });//item.inputCollection.bind()
 
 
7771
  api.CZRItem.prototype.ready.call( item );
7772
  },
 
 
 
 
7773
  setInputVisibilityDeps : function() {
7774
  var item = this,
7775
  module = item.module;
 
 
7776
  item.czr_Input.each( function( input ) {
7777
  switch( input.id ) {
7778
  case 'img' :
@@ -7839,6 +11229,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7839
  },//CZRItemConstructor
7840
 
7841
  };//Constructor
 
 
 
 
 
 
 
 
 
7842
  api.czrModuleMap = api.czrModuleMap || {};
7843
  $.extend( api.czrModuleMap, {
7844
  czr_image_main_settings_child : {
@@ -7863,21 +11262,40 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7863
  /* ------------------------------------------------------------------------- *
7864
  * IMAGE BORDERS AND BORDER RADIUS
7865
  /* ------------------------------------------------------------------------- */
 
 
7866
  ( function ( api, $, _ ) {
7867
  var Constructor = {
7868
  initialize: function( id, options ) {
7869
  var module = this;
 
7870
  module.inputConstructor = api.CZRInput.extend({
7871
  setupSelect : function() {
7872
  api.czr_sektions.setupSelectInput.call( this );
7873
  }
7874
  });
 
7875
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
 
 
 
7876
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7877
  },//initialize
 
 
 
 
 
 
 
 
7878
  CZRItemConstructor : {
 
7879
  ready : function() {
7880
  var item = this;
 
 
7881
  item.inputCollection.bind( function( col ) {
7882
  if( _.isEmpty( col ) )
7883
  return;
@@ -7885,17 +11303,27 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7885
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7886
  }
7887
  });//item.inputCollection.bind()
 
 
7888
  api.CZRItem.prototype.ready.call( item );
7889
  },
 
 
 
 
7890
  setInputVisibilityDeps : function() {
7891
  var item = this,
7892
  module = item.module;
 
7893
  var scheduleVisibilityOfInputId = function( controlledInputId, visibilityCallBack ) {
 
7894
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
 
7895
  this.bind( function( to ) {
7896
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
7897
  });
7898
  };
 
7899
  item.czr_Input.each( function( input ) {
7900
  switch( input.id ) {
7901
  case 'border-type' :
@@ -7913,6 +11341,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7913
  },//CZRItemConstructor
7914
 
7915
  };//Constructor
 
 
 
 
 
 
 
 
 
7916
  api.czrModuleMap = api.czrModuleMap || {};
7917
  $.extend( api.czrModuleMap, {
7918
  czr_image_borders_corners_child : {
@@ -7926,17 +11363,27 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7926
  },
7927
  });
7928
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7929
  ( function ( api, $, _ ) {
7930
  var Constructor = {
7931
  initialize: function( id, options ) {
 
7932
  var module = this;
 
7933
  module.inputConstructor = api.CZRInput.extend( module.CZRTextEditorInputMths || {} );
 
 
 
 
 
 
7934
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7935
  },//initialize
7936
 
7937
  CZRTextEditorInputMths : {
7938
  initialize : function( name, options ) {
7939
  var input = this;
 
7940
  if ( 'tiny_mce_editor' == input.type ) {
7941
  input.isReady.then( function() {
7942
  input.container.find('[data-czr-action="open-tinymce-editor"]').trigger('click');
@@ -7949,7 +11396,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7949
  api.czr_sektions.setupSelectInput.call( this );
7950
  }
7951
  },//CZRTextEditorInputMths
 
 
7952
  };//Constructor
 
 
 
 
 
 
 
 
 
 
7953
  api.czrModuleMap = api.czrModuleMap || {};
7954
  $.extend( api.czrModuleMap, {
7955
  czr_tinymce_child : {
@@ -7963,10 +11422,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7963
  },
7964
  });
7965
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7966
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
7967
  api.czrModuleMap = api.czrModuleMap || {};
7968
  $.extend( api.czrModuleMap, {
7969
  czr_simple_html_module : {
 
7970
  crud : false,
7971
  name : api.czr_sektions.getRegisteredModuleProperty( 'czr_simple_html_module', 'name' ),
7972
  has_mod_opt : false,
@@ -7976,21 +11445,39 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7976
  },
7977
  });
7978
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
7979
  ( function ( api, $, _ ) {
7980
  var FeaturedPagesConstruct = {
7981
  initialize: function( id, options ) {
 
7982
  var module = this;
 
 
 
7983
  module.inputConstructor = api.CZRInput.extend({
7984
  setupSelect : function() {
7985
  api.czr_sektions.setupSelectInput.call( this );
7986
  }
7987
  });
 
 
7988
  module.itemConstructor = api.CZRItem.extend( module.CZRFPItemConstructor || {} );
 
 
 
 
7989
  api.CZRDynModule.prototype.initialize.call( module, id, options );
7990
  },//initialize
 
 
 
 
7991
  CZRFPItemConstructor : {
 
7992
  ready : function() {
7993
  var item = this;
 
 
7994
  item.inputCollection.bind( function( col ) {
7995
  if( _.isEmpty( col ) )
7996
  return;
@@ -7998,11 +11485,17 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
7998
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
7999
  }
8000
  });//item.inputCollection.bind()
 
 
8001
  api.CZRItem.prototype.ready.call( item );
8002
  },
 
 
8003
  setInputVisibilityDeps : function() {
8004
  var item = this,
8005
  module = item.module;
 
 
8006
  item.czr_Input.each( function( input ) {
8007
  switch( input.id ) {
8008
  case 'img-type' :
@@ -8046,6 +11539,15 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8046
  }
8047
  },//CZRFPItemConstructor
8048
  };//FeaturedPagesConstruct
 
 
 
 
 
 
 
 
 
8049
  api.czrModuleMap = api.czrModuleMap || {};
8050
  $.extend( api.czrModuleMap, {
8051
  czr_featured_pages_module : {
@@ -8061,16 +11563,27 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8061
  },
8062
  });
8063
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
8064
  ( function ( api, $, _ ) {
 
8065
  var Constructor = {
8066
  initialize: function( id, options ) {
 
8067
  var module = this;
 
 
8068
  module.inputConstructor = api.CZRInput.extend({
8069
  setupSelect : function() {
8070
  api.czr_sektions.setupSelectInput.call( this );
8071
  }
8072
  });
 
 
8073
  module.itemConstructor = api.CZRItem.extend( module.CZRIconItemConstructor || {} );
 
 
 
 
8074
  module.bind( 'set_default_content_picker_options', function( params ) {
8075
  params.defaultContentPickerOption.defaultOption = {
8076
  'title' : '<span style="font-weight:bold">' + sektionsLocalizedData.i18n['Set a custom url'] + '</span>',
@@ -8082,14 +11595,25 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8082
  };
8083
  return params;
8084
  });
 
 
 
 
8085
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8086
 
8087
  },//initialize
8088
 
8089
  /* Helpers */
 
 
 
 
8090
  CZRIconItemConstructor : {
 
8091
  ready : function() {
8092
  var item = this;
 
 
8093
  item.inputCollection.bind( function( col ) {
8094
  if( _.isEmpty( col ) )
8095
  return;
@@ -8097,11 +11621,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8097
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
8098
  }
8099
  });//item.inputCollection.bind()
 
 
8100
  api.CZRItem.prototype.ready.call( item );
8101
  },
 
 
 
 
8102
  setInputVisibilityDeps : function() {
8103
  var item = this,
8104
  module = item.module;
 
 
8105
  item.czr_Input.each( function( input ) {
8106
  switch( input.id ) {
8107
  case 'link-to' :
@@ -8142,6 +11674,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8142
  },//CZRIconItemConstructor
8143
 
8144
  };//Constructor
 
 
 
 
 
 
 
 
 
 
8145
  api.czrModuleMap = api.czrModuleMap || {};
8146
  $.extend( api.czrModuleMap, {
8147
  czr_icon_settings_child : {
@@ -8155,22 +11697,42 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8155
  },
8156
  });
8157
  })( wp.customize , jQuery, _ );
 
 
 
 
 
 
 
 
 
8158
  ( function ( api, $, _ ) {
 
8159
  var Constructor = {
8160
  initialize: function( id, options ) {
8161
  var module = this;
 
 
8162
  module.inputConstructor = api.CZRInput.extend({
8163
  setupSelect : function() {
8164
  api.czr_sektions.setupSelectInput.call( this );
8165
  }
8166
  });
 
8167
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
 
 
 
8168
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8169
  },//initialize
8170
 
8171
  CZRItemConstructor : {
 
8172
  ready : function() {
8173
  var item = this;
 
 
8174
  item.inputCollection.bind( function( col ) {
8175
  if( _.isEmpty( col ) )
8176
  return;
@@ -8178,17 +11740,27 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8178
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
8179
  }
8180
  });//item.inputCollection.bind()
 
 
8181
  api.CZRItem.prototype.ready.call( item );
8182
  },
 
 
 
 
8183
  setInputVisibilityDeps : function() {
8184
  var item = this,
8185
  module = item.module;
 
8186
  var scheduleVisibilityOfInputId = function( controlledInputId, visibilityCallBack ) {
 
8187
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
 
8188
  this.bind( function( to ) {
8189
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
8190
  });
8191
  };
 
8192
  item.czr_Input.each( function( input ) {
8193
  switch( input.id ) {
8194
  case 'border-type' :
@@ -8205,6 +11777,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8205
  }
8206
  }//CZRItemConstructor
8207
  };// Constructor
 
 
 
 
 
 
 
 
8208
  api.czrModuleMap = api.czrModuleMap || {};
8209
  $.extend( api.czrModuleMap, {
8210
  czr_icon_spacing_border_child: {
@@ -8220,13 +11800,28 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8220
  })( wp.customize , jQuery, _ );/* ------------------------------------------------------------------------- *
8221
  * HEADING MAIN CHILD
8222
  /* ------------------------------------------------------------------------- */
 
 
8223
  ( function ( api, $, _ ) {
 
8224
  var Constructor = {
8225
  initialize: function( id, options ) {
8226
  var module = this;
 
 
8227
  module.inputConstructor = api.CZRInput.extend( module.CZRHeadingInputMths || {} );
 
 
 
8228
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
 
 
 
8229
  api.CZRDynModule.prototype.initialize.call( module, id, options );
 
 
 
8230
  module.bind( 'set_default_content_picker_options', function( params ) {
8231
  params.defaultContentPickerOption.defaultOption = {
8232
  'title' : '<span style="font-weight:bold">' + sektionsLocalizedData.i18n['Set a custom url'] + '</span>',
@@ -8245,9 +11840,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8245
  api.czr_sektions.setupSelectInput.call( this );
8246
  }
8247
  },//CZRHeadingsInputMths
 
 
 
 
 
 
 
8248
  CZRItemConstructor : {
 
8249
  ready : function() {
8250
  var item = this;
 
 
8251
  item.inputCollection.bind( function( col ) {
8252
  if( _.isEmpty( col ) )
8253
  return;
@@ -8255,11 +11860,19 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8255
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
8256
  }
8257
  });//item.inputCollection.bind()
 
 
8258
  api.CZRItem.prototype.ready.call( item );
8259
  },
 
 
 
 
8260
  setInputVisibilityDeps : function() {
8261
  var item = this,
8262
  module = item.module;
 
 
8263
  item.czr_Input.each( function( input ) {
8264
  switch( input.id ) {
8265
  case 'link-to' :
@@ -8293,6 +11906,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8293
  }//setInputVisibilityDeps
8294
  },//CZRItemConstructor
8295
  };//Constructor
 
 
 
 
 
 
 
 
 
 
8296
  api.czrModuleMap = api.czrModuleMap || {};
8297
  $.extend( api.czrModuleMap, {
8298
  czr_heading_child : {
@@ -8311,10 +11934,21 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8311
  * HEADING SPACING
8312
  /* ------------------------------------------------------------------------- */
8313
  ( function ( api, $, _ ) {
 
8314
  var Constructor = {
8315
  initialize: function( id, options ) {
8316
  var module = this;
 
 
8317
  module.inputConstructor = api.CZRInput.extend( module.CZRHeadingInputMths || {} );
 
 
 
 
 
 
 
 
8318
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8319
  },//initialize
8320
 
@@ -8324,6 +11958,16 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8324
  }
8325
  },//CZRHeadingsInputMths
8326
  };//Constructor
 
 
 
 
 
 
 
 
 
 
8327
  api.czrModuleMap = api.czrModuleMap || {};
8328
  $.extend( api.czrModuleMap, {
8329
  czr_heading_spacing_child : {
@@ -8337,11 +11981,23 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8337
  }
8338
  });
8339
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
8340
  ( function ( api, $, _ ) {
 
8341
  var DividerModuleConstructor = {
8342
  initialize: function( id, options ) {
 
8343
  var module = this;
 
 
8344
  module.inputConstructor = api.CZRInput.extend( module.CZRDividerInputMths || {} );
 
 
 
 
 
 
 
8345
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8346
  },//initialize
8347
 
@@ -8352,6 +12008,17 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8352
  }
8353
  },//CZRDividerInputMths
8354
  };//DividerModuleConstructor
 
 
 
 
 
 
 
 
 
 
 
8355
  api.czrModuleMap = api.czrModuleMap || {};
8356
  $.extend( api.czrModuleMap, {
8357
  czr_divider_module : {
@@ -8365,10 +12032,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8365
  }
8366
  });
8367
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
8368
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
8369
  api.czrModuleMap = api.czrModuleMap || {};
8370
  $.extend( api.czrModuleMap, {
8371
  czr_spacer_module : {
 
8372
  crud : false,
8373
  name : api.czr_sektions.getRegisteredModuleProperty( 'czr_spacer_module', 'name' ),
8374
  has_mod_opt : false,
@@ -8378,10 +12055,20 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8378
  }
8379
  });
8380
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
8381
  ( function ( api, $, _ ) {
 
 
 
 
 
 
 
 
8382
  api.czrModuleMap = api.czrModuleMap || {};
8383
  $.extend( api.czrModuleMap, {
8384
  czr_map_module : {
 
8385
  crud : false,
8386
  name : api.czr_sektions.getRegisteredModuleProperty( 'czr_map_module', 'name' ),
8387
  has_mod_opt : false,
@@ -8391,25 +12078,44 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8391
  }
8392
  });
8393
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
8394
  /* ------------------------------------------------------------------------- *
8395
  * QUOTE DESIGN
8396
  /* ------------------------------------------------------------------------- */
 
 
8397
  ( function ( api, $, _ ) {
 
8398
  var Constructor = {
8399
  initialize: function( id, options ) {
8400
  var module = this;
 
 
8401
  module.inputConstructor = api.CZRInput.extend({
8402
  setupSelect : function() {
8403
  api.czr_sektions.setupSelectInput.call( this );
8404
  }
8405
  });
 
 
8406
  module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
 
 
 
 
8407
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8408
 
8409
  },//initialize
 
 
 
 
8410
  CZRButtonItemConstructor : {
 
8411
  ready : function() {
8412
  var item = this;
 
 
8413
  item.inputCollection.bind( function( col ) {
8414
  if( _.isEmpty( col ) )
8415
  return;
@@ -8417,11 +12123,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8417
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
8418
  }
8419
  });//item.inputCollection.bind()
 
 
8420
  api.CZRItem.prototype.ready.call( item );
8421
  },
 
 
 
8422
  setInputVisibilityDeps : function() {
8423
  var item = this,
8424
  module = item.module;
 
 
8425
  item.czr_Input.each( function( input ) {
8426
  switch( input.id ) {
8427
  case 'quote_design' :
@@ -8445,6 +12158,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8445
  }
8446
  }
8447
  };
 
 
 
 
 
 
 
 
8448
  api.czrModuleMap = api.czrModuleMap || {};
8449
  $.extend( api.czrModuleMap, {
8450
  czr_quote_design_child : {
@@ -8471,19 +12192,39 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8471
  /* ------------------------------------------------------------------------- *
8472
  * QUOTE CONTENT
8473
  /* ------------------------------------------------------------------------- */
 
 
8474
  ( function ( api, $, _ ) {
 
8475
  var Constructor = {
8476
  initialize: function( id, options ) {
8477
  var module = this;
 
 
8478
  module.inputConstructor = api.CZRInput.extend({
8479
  setupSelect : function() {
8480
  api.czr_sektions.setupSelectInput.call( this );
8481
  }
8482
  });
 
 
 
 
 
 
 
8483
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8484
 
8485
  },//initialize
8486
  };
 
 
 
 
 
 
 
 
8487
  api.czrModuleMap = api.czrModuleMap || {};
8488
  $.extend( api.czrModuleMap, {
8489
  czr_quote_quote_child : {
@@ -8506,19 +12247,39 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8506
  /* ------------------------------------------------------------------------- *
8507
  * CITE CONTENT
8508
  /* ------------------------------------------------------------------------- */
 
 
8509
  ( function ( api, $, _ ) {
 
8510
  var Constructor = {
8511
  initialize: function( id, options ) {
8512
  var module = this;
 
 
8513
  module.inputConstructor = api.CZRInput.extend({
8514
  setupSelect : function() {
8515
  api.czr_sektions.setupSelectInput.call( this );
8516
  }
8517
  });
 
 
 
 
 
 
 
8518
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8519
 
8520
  },//initialize
8521
  };
 
 
 
 
 
 
 
 
8522
  api.czrModuleMap = api.czrModuleMap || {};
8523
  $.extend( api.czrModuleMap, {
8524
  czr_quote_cite_child : {
@@ -8535,16 +12296,26 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8535
  /* ------------------------------------------------------------------------- *
8536
  * BUTTON CONTENT
8537
  /* ------------------------------------------------------------------------- */
 
 
8538
  ( function ( api, $, _ ) {
 
8539
  var Constructor = {
8540
  initialize: function( id, options ) {
8541
  var module = this;
 
 
8542
  module.inputConstructor = api.CZRInput.extend({
8543
  setupSelect : function() {
8544
  api.czr_sektions.setupSelectInput.call( this );
8545
  }
8546
  });
 
 
8547
  module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
 
 
 
8548
  module.bind( 'set_default_content_picker_options', function( params ) {
8549
  params.defaultContentPickerOption.defaultOption = {
8550
  'title' : '<span style="font-weight:bold">' + sektionsLocalizedData.i18n['Set a custom url'] + '</span>',
@@ -8556,12 +12327,23 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8556
  };
8557
  return params;
8558
  });
 
 
 
 
8559
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8560
 
8561
  },//initialize
 
 
 
 
8562
  CZRButtonItemConstructor : {
 
8563
  ready : function() {
8564
  var item = this;
 
 
8565
  item.inputCollection.bind( function( col ) {
8566
  if( _.isEmpty( col ) )
8567
  return;
@@ -8569,11 +12351,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8569
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
8570
  }
8571
  });//item.inputCollection.bind()
 
 
8572
  api.CZRItem.prototype.ready.call( item );
8573
  },
 
 
 
8574
  setInputVisibilityDeps : function() {
8575
  var item = this,
8576
  module = item.module;
 
 
8577
  item.czr_Input.each( function( input ) {
8578
  switch( input.id ) {
8579
  case 'link-to' :
@@ -8609,6 +12398,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8609
  }
8610
  }
8611
  };
 
 
 
 
 
 
 
 
8612
  api.czrModuleMap = api.czrModuleMap || {};
8613
  $.extend( api.czrModuleMap, {
8614
  czr_btn_content_child : {
@@ -8635,22 +12432,40 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8635
  /* ------------------------------------------------------------------------- *
8636
  * BUTTON DESIGN
8637
  /* ------------------------------------------------------------------------- */
 
 
8638
  ( function ( api, $, _ ) {
 
8639
  var Constructor = {
8640
  initialize: function( id, options ) {
8641
  var module = this;
 
 
8642
  module.inputConstructor = api.CZRInput.extend({
8643
  setupSelect : function() {
8644
  api.czr_sektions.setupSelectInput.call( this );
8645
  }
8646
  });
 
 
8647
  module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
 
 
 
 
8648
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8649
 
8650
  },//initialize
 
 
 
 
8651
  CZRButtonItemConstructor : {
 
8652
  ready : function() {
8653
  var item = this;
 
 
8654
  item.inputCollection.bind( function( col ) {
8655
  if( _.isEmpty( col ) )
8656
  return;
@@ -8658,17 +12473,26 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8658
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
8659
  }
8660
  });//item.inputCollection.bind()
 
 
8661
  api.CZRItem.prototype.ready.call( item );
8662
  },
 
 
 
8663
  setInputVisibilityDeps : function() {
8664
  var item = this,
8665
  module = item.module;
 
8666
  var scheduleVisibilityOfInputId = function( controlledInputId, visibilityCallBack ) {
 
8667
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
 
8668
  this.bind( function( to ) {
8669
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
8670
  });
8671
  };
 
8672
  item.czr_Input.each( function( input ) {
8673
  switch( input.id ) {
8674
  case 'use_custom_bg_color_on_hover' :
@@ -8703,6 +12527,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8703
  }
8704
  }
8705
  };
 
 
 
 
 
 
 
 
8706
  api.czrModuleMap = api.czrModuleMap || {};
8707
  $.extend( api.czrModuleMap, {
8708
  czr_btn_design_child : {
@@ -8718,40 +12550,34 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8718
  })( wp.customize , jQuery, _ );/* ------------------------------------------------------------------------- *
8719
  * MENU CONTENT
8720
  /* ------------------------------------------------------------------------- */
 
 
8721
  ( function ( api, $, _ ) {
8722
  var Constructor = {
8723
  initialize: function( id, options ) {
8724
  var module = this;
 
8725
  module.inputConstructor = api.CZRInput.extend({
8726
  setupSelect : function() {
8727
  api.czr_sektions.setupSelectInput.call( this );
8728
  }
8729
  });
8730
- module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
 
 
 
 
8731
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8732
  },//initialize
8733
- CZRButtonItemConstructor : {
8734
- ready : function() {
8735
- var item = this;
8736
- item.inputCollection.bind( function( col ) {
8737
- if( _.isEmpty( col ) )
8738
- return;
8739
- try { item.setInputVisibilityDeps(); } catch( er ) {
8740
- api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
8741
- }
8742
- });//item.inputCollection.bind()
8743
- api.CZRItem.prototype.ready.call( item );
8744
- },
8745
- setInputVisibilityDeps : function() {
8746
- var item = this,
8747
- module = item.module;
8748
- item.czr_Input.each( function( input ) {
8749
- switch( input.id ) {
8750
- }
8751
- });
8752
- }
8753
- }
8754
- };
8755
  api.czrModuleMap = api.czrModuleMap || {};
8756
  $.extend( api.czrModuleMap, {
8757
  czr_menu_content_child : {
@@ -8764,23 +12590,69 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8764
  defaultItemModel : api.czr_sektions.getDefaultItemModelFromRegisteredModuleData( 'czr_menu_content_child' )
8765
  }
8766
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8767
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
8768
  ( function ( api, $, _ ) {
 
8769
  var Constructor = {
8770
  initialize: function( id, options ) {
8771
  var module = this;
 
 
8772
  module.inputConstructor = api.CZRInput.extend({
8773
  setupSelect : function() {
8774
  api.czr_sektions.setupSelectInput.call( this );
8775
  }
8776
  });
 
 
8777
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
 
 
 
8778
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8779
 
8780
  },//initialize
 
 
 
 
8781
  CZRItemConstructor : {
 
8782
  ready : function() {
8783
  var item = this;
 
 
8784
  item.inputCollection.bind( function( col ) {
8785
  if( _.isEmpty( col ) )
8786
  return;
@@ -8788,11 +12660,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8788
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
8789
  }
8790
  });//item.inputCollection.bind()
 
 
8791
  api.CZRItem.prototype.ready.call( item );
8792
  },
 
 
 
8793
  setInputVisibilityDeps : function() {
8794
  var item = this,
8795
  module = item.module;
 
 
8796
  item.czr_Input.each( function( input ) {
8797
  switch( input.id ) {
8798
  case 'show_name_field' :
@@ -8834,6 +12713,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8834
  }
8835
  }
8836
  };
 
 
 
 
 
 
 
 
8837
  api.czrModuleMap = api.czrModuleMap || {};
8838
  $.extend( api.czrModuleMap, {
8839
  czr_simple_form_fields_child: {
@@ -8847,22 +12734,39 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8847
  }
8848
  });
8849
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
8850
  ( function ( api, $, _ ) {
 
8851
  var Constructor = {
8852
  initialize: function( id, options ) {
8853
  var module = this;
 
 
8854
  module.inputConstructor = api.CZRInput.extend({
8855
  setupSelect : function() {
8856
  api.czr_sektions.setupSelectInput.call( this );
8857
  }
8858
  });
 
 
8859
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
 
 
 
8860
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8861
 
8862
  },//initialize
 
 
 
 
8863
  CZRItemConstructor : {
 
8864
  ready : function() {
8865
  var item = this;
 
 
8866
  item.inputCollection.bind( function( col ) {
8867
  if( _.isEmpty( col ) )
8868
  return;
@@ -8870,11 +12774,17 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8870
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
8871
  }
8872
  });//item.inputCollection.bind()
 
 
8873
  api.CZRItem.prototype.ready.call( item );
8874
  },
 
 
 
8875
  setInputVisibilityDeps : function() {
8876
  var item = this,
8877
  module = item.module;
 
8878
  item.czr_Input.each( function( input ) {
8879
  switch( input.id ) {
8880
  case 'border-type' :
@@ -8891,6 +12801,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8891
  }
8892
  }
8893
  };
 
 
 
 
 
 
 
 
8894
  api.czrModuleMap = api.czrModuleMap || {};
8895
  $.extend( api.czrModuleMap, {
8896
  czr_simple_form_design_child: {
@@ -8904,22 +12822,39 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8904
  }
8905
  });
8906
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
8907
  ( function ( api, $, _ ) {
 
8908
  var Constructor = {
8909
  initialize: function( id, options ) {
8910
  var module = this;
 
 
8911
  module.inputConstructor = api.CZRInput.extend({
8912
  setupSelect : function() {
8913
  api.czr_sektions.setupSelectInput.call( this );
8914
  }
8915
  });
 
 
8916
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
 
 
 
 
8917
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8918
 
8919
  },//initialize
 
 
 
 
8920
  CZRItemConstructor : {
 
8921
  ready : function() {
8922
  var item = this;
 
 
8923
  item.inputCollection.bind( function( col ) {
8924
  if( _.isEmpty( col ) )
8925
  return;
@@ -8927,11 +12862,17 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8927
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
8928
  }
8929
  });//item.inputCollection.bind()
 
 
8930
  api.CZRItem.prototype.ready.call( item );
8931
  },
 
 
 
8932
  setInputVisibilityDeps : function() {
8933
  var item = this,
8934
  module = item.module;
 
8935
  item.czr_Input.each( function( input ) {
8936
  switch( input.id ) {
8937
  case 'use_custom_bg_color_on_hover' :
@@ -8966,6 +12907,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8966
  }
8967
  }
8968
  };
 
 
 
 
 
 
 
 
8969
  api.czrModuleMap = api.czrModuleMap || {};
8970
  $.extend( api.czrModuleMap, {
8971
  czr_simple_form_button_child: {
@@ -8979,19 +12928,35 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
8979
  }
8980
  });
8981
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
8982
  ( function ( api, $, _ ) {
 
8983
  var Constructor = {
8984
  initialize: function( id, options ) {
8985
  var module = this;
 
 
8986
  module.inputConstructor = api.CZRInput.extend({
8987
  setupSelect : function() {
8988
  api.czr_sektions.setupSelectInput.call( this );
8989
  }
8990
  });
 
 
 
 
8991
  api.CZRDynModule.prototype.initialize.call( module, id, options );
8992
 
8993
  },//initialize
8994
  };
 
 
 
 
 
 
 
 
8995
  api.czrModuleMap = api.czrModuleMap || {};
8996
  $.extend( api.czrModuleMap, {
8997
  czr_simple_form_fonts_child: {
@@ -9005,19 +12970,78 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
9005
  }
9006
  });
9007
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
9008
  ( function ( api, $, _ ) {
9009
  var Constructor = {
9010
  initialize: function( id, options ) {
9011
  var module = this;
 
9012
  module.inputConstructor = api.CZRInput.extend({
9013
  setupSelect : function() {
9014
  api.czr_sektions.setupSelectInput.call( this );
9015
  }
9016
  });
 
 
 
 
 
 
9017
  api.CZRDynModule.prototype.initialize.call( module, id, options );
9018
 
9019
  },//initialize
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9020
  };
 
 
 
 
 
 
 
 
9021
  api.czrModuleMap = api.czrModuleMap || {};
9022
  $.extend( api.czrModuleMap, {
9023
  czr_simple_form_submission_child: {
@@ -9031,22 +13055,39 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
9031
  }
9032
  });
9033
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
9034
  ( function ( api, $, _ ) {
 
9035
  var Constructor = {
9036
  initialize: function( id, options ) {
9037
  var module = this;
 
 
9038
  module.inputConstructor = api.CZRInput.extend({
9039
  setupSelect : function() {
9040
  api.czr_sektions.setupSelectInput.call( this );
9041
  }
9042
  });
 
 
9043
  module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
 
 
 
 
9044
  api.CZRDynModule.prototype.initialize.call( module, id, options );
9045
 
9046
  },//initialize
 
 
 
 
9047
  CZRButtonItemConstructor : {
 
9048
  ready : function() {
9049
  var item = this;
 
 
9050
  item.inputCollection.bind( function( col ) {
9051
  if( _.isEmpty( col ) )
9052
  return;
@@ -9054,11 +13095,18 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
9054
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
9055
  }
9056
  });//item.inputCollection.bind()
 
 
9057
  api.CZRItem.prototype.ready.call( item );
9058
  },
 
 
 
9059
  setInputVisibilityDeps : function() {
9060
  var item = this,
9061
  module = item.module;
 
 
9062
  item.czr_Input.each( function( input ) {
9063
  switch( input.id ) {
9064
  case 'use_custom_bg_color_on_hover' :
@@ -9107,6 +13155,14 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
9107
  }
9108
  }
9109
  };
 
 
 
 
 
 
 
 
9110
  api.czrModuleMap = api.czrModuleMap || {};
9111
  $.extend( api.czrModuleMap, {
9112
  czr_font_child : {
@@ -9120,19 +13176,35 @@ var CZRSeksPrototype = CZRSeksPrototype || {};
9120
  }
9121
  });
9122
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
 
9123
  ( function ( api, $, _ ) {
 
9124
  var Constructor = {
9125
  initialize: function( id, options ) {
9126
  var module = this;
 
 
9127
  module.inputConstructor = api.CZRInput.extend({
9128
  setupSelect : function() {
9129
  api.czr_sektions.setupSelectInput.call( this, sektionsLocalizedData.registeredWidgetZones );
9130
  }
9131
  });
 
 
 
 
9132
  api.CZRDynModule.prototype.initialize.call( module, id, options );
9133
 
9134
  },//initialize
9135
  };
 
 
 
 
 
 
 
 
9136
  api.czrModuleMap = api.czrModuleMap || {};
9137
  $.extend( api.czrModuleMap, {
9138
  czr_widget_area_module : {
1
+ //global sektionsLocalizedData
2
  var CZRSeksPrototype = CZRSeksPrototype || {};
3
  (function ( api, $ ) {
4
  $.extend( CZRSeksPrototype, {
8
  if ( _.isUndefined( window.sektionsLocalizedData ) ) {
9
  throw new Error( 'CZRSeksPrototype => missing localized server params sektionsLocalizedData' );
10
  }
11
+ // this class is skope dependant
12
  if ( ! _.isFunction( api.czr_activeSkopes ) ) {
13
  throw new Error( 'CZRSeksPrototype => api.czr_activeSkopes' );
14
  }
15
+ // SECTIONS ID FOR LOCAL AND GLOBAL OPTIONS
16
  self.SECTION_ID_FOR_GLOBAL_OPTIONS = '__globalOptionsSectionId';
17
  self.SECTION_ID_FOR_LOCAL_OPTIONS = '__localOptionsSection';
18
+
19
+ // SECTION ID FOR THE CONTENT PICKER
20
  self.SECTION_ID_FOR_CONTENT_PICKER = '__content_picker__';
21
+
22
+ // Max possible number of columns in a section
23
  self.MAX_NUMBER_OF_COLUMNS = 12;
24
+
25
+ // _.debounce param when updating the UI setting
26
+ // prevent hammering server + fixes https://github.com/presscustomizr/nimble-builder/issues/244
27
  self.SETTING_UPDATE_BUFFER = 100;
28
+
29
+ // Define a default value for the sektion setting value, used when no server value has been sent
30
+ // @see php function
31
+ // function sek_get_default_location_model() {
32
+ // $defaut_sektions_value = [ 'collection' => [], 'options' => [] ];
33
+ // foreach( sek_get_locations() as $location ) {
34
+ // $defaut_sektions_value['collection'][] = [
35
+ // 'id' => $location,
36
+ // 'level' => 'location',
37
+ // 'collection' => [],
38
+ // 'options' => []
39
+ // ];
40
+ // }
41
+ // return $defaut_sektions_value;
42
+ // }
43
  self.defaultLocalSektionSettingValue = self.getDefaultSektionSettingValue( 'local' );
44
+
45
+ // Store the contextual setting prefix
46
  self.localSectionsSettingId = new api.Value( {} );
47
+
48
+ // Keep track of the registered ui elements dynamically registered
49
+ // this collection is populated in ::register(), if the track param is true
50
+ // this is used to know what ui elements are currently being displayed
51
  self.registered = new api.Value([]);
52
 
53
 
54
  api.bind( 'ready', function() {
55
  self.doSektionThinksOnApiReady();
56
  });//api.bind( 'ready' )
57
+
58
+ // Add the skope id on save
59
+ // Uses a WP core hook to filter the query on a customize_save action
60
+ //
61
+ // This posted skope id is useful when we need to know the skope id during ajax.
62
+ // ( Note that with the nimble ajax action, the skope_id is always posted. Not in WP core ajax actions. )
63
+ // Example of use of $_POST['local_skope_id'] => @see sek_get_parent_level_model()
64
+ // Helps fixing : https://github.com/presscustomizr/nimble-builder/issues/242, for which sek_add_css_rules_for_spacing() couldn't be set for columns margins
65
  api.bind( 'save-request-params', function( query ) {
66
  $.extend( query, { local_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' ) } );
67
  });
68
 
69
  },// initialize()
70
+
71
+
72
+ // @ API READY
73
+ // Fired at api.bind( 'ready', function() {})
74
  doSektionThinksOnApiReady : function() {
75
  var self = this;
76
+ // the main sektion panel
77
+ // the local and global options section
78
  self.registerAndSetupDefaultPanelSectionOptions();
79
+
80
+ // Setup the collection settings => register the main settings for local and global skope and bind it
81
+ // schedule reaction to collection setting ids => the setup of the collection setting when the collection setting ids are set
82
+ //=> on skope change
83
+ //@see setContextualCollectionSettingIdWhenSkopeSet
84
+ //
85
+ // var _settingsToRegister_ = {
86
+ // 'local' : { collectionSettingId : self.localSectionsSettingId() },//<= "nimble___[skp__post_page_10]"
87
+ // 'global' : { collectionSettingId : self.getGlobalSectionsSettingId() }//<= "nimble___[skp__global]"
88
+ // };
89
  self.localSectionsSettingId.callbacks.add( function( collectionSettingIds, previousCollectionSettingIds ) {
90
+ // register the collection setting id
91
+ // and schedule the reaction to different collection changes : refreshModules, ...
92
  try { self.setupSettingsToBeSaved(); } catch( er ) {
93
  api.errare( 'Error in self.localSectionsSettingId.callbacks => self.setupSettingsToBeSaved()' , er );
94
  }
95
+
96
+ // Now that the local and global settings are registered, initialize the history log
97
  self.initializeHistoryLogWhenSettingsRegistered();
98
+
99
+ // On init and when skope changes, request the contextually active locations
100
+ // We should not need this call, because the preview sends it on initialize
101
+ // But this is safer.
102
+ // The preview send back the list of active locations 'sek-active-locations-in-preview'
103
+ // introduced for the level tree, https://github.com/presscustomizr/nimble-builder/issues/359
104
+ api.previewer.send('sek-request-active-locations');
105
  });
106
+
107
+
108
+ // POPULATE THE MAIN SETTING ID NOW
109
+ // + GENERATE UI FOR THE LOCAL SKOPE OPTIONS
110
+ // + GENERATE UI FOR THE GLOBAL OPTIONS
111
  var doSkopeDependantActions = function( newSkopes, previousSkopes ) {
112
  self.setContextualCollectionSettingIdWhenSkopeSet( newSkopes, previousSkopes );
113
+
114
+ // Generate UI for the local skope options and the global options
115
  api.section( self.SECTION_ID_FOR_LOCAL_OPTIONS, function( _section_ ) {
116
  _section_.deferred.embedded.done( function() {
117
  if( true === _section_.boundForLocalOptionGeneration )
118
  return;
119
+ // Defer the UI generation when the section is expanded
120
  _section_.boundForLocalOptionGeneration = true;
121
  _section_.expanded.bind( function( expanded ) {
122
  if ( true === expanded ) {
125
  });
126
  });
127
  });
128
+
129
+ // The UI of the global option must be generated only once.
130
+ // We don't want to re-generate on each skope change
131
+ // fixes https://github.com/presscustomizr/nimble-builder/issues/271
132
  api.section( self.SECTION_ID_FOR_GLOBAL_OPTIONS, function( _section_ ) {
133
  if ( true === _section_.nimbleGlobalOptionGenerated )
134
  return;
135
  self.generateUI({ action : 'sek-generate-global-options-ui'});
136
  _section_.nimbleGlobalOptionGenerated = true;
137
  });
138
+
139
+ // This event has been introduced when implementing https://github.com/presscustomizr/nimble-builder/issues/304
140
  api.trigger('nimble-ready-for-current-skope');
141
  };//doSkopeDependantActions()
142
+
143
+ // populate the setting ids now if skopes are set
144
  if ( ! _.isEmpty( api.czr_activeSkopes().local ) ) {
145
  doSkopeDependantActions();
146
  }
147
+ // ON SKOPE READY
148
+ // - Set the contextual setting prefix
149
+ // - Generate UI for Nimble local skope options
150
+ // - Generate the content picker
151
  api.czr_activeSkopes.callbacks.add( function( newSkopes, previousSkopes ) {
152
  doSkopeDependantActions( newSkopes, previousSkopes );
153
  });
154
+
155
+
156
+ // Communicate with the preview
157
  self.reactToPreviewMsg();
158
+
159
+ // Setup Dnd
160
  self.setupDnd();
161
+
162
+
163
+ // setup the tinyMce editor used for the tiny_mce_editor input
164
+ // => one object listened to by each tiny_mce_editor input
165
  self.setupTinyMceEditor();
166
+
167
+ // print json
168
  self.schedulePrintSectionJson();
169
+
170
+ // Always set the previewed device back to desktop on ui change
171
+ // event 'sek-ui-removed' id triggered when cleaning the registered ui controls
172
+ // @see ::cleanRegistered()
173
  self.bind( 'sek-ui-removed', function() {
174
  api.previewedDevice( 'desktop' );
175
  });
176
+
177
+ // Synchronize api.previewedDevice with the currently rendered ui
178
+ // ensure that the selected device tab of the spacing module is the one being previewed
179
+ // =>@see spacing module, in item constructor CZRSpacingItemMths
180
  api.previewedDevice.bind( function( device ) {
181
  var currentControls = _.filter( self.registered(), function( uiData ) {
182
  return 'control' == uiData.what;
189
  });
190
  });
191
  });
192
+
193
+ // Schedule a reset
194
  $('#customize-notifications-area').on( 'click', '[data-sek-reset="true"]', function() {
195
  self.resetCollectionSetting();
196
  });
197
+
198
+
199
+ // CLEAN UI BEFORE REMOVAL
200
+ // 'sek-ui-pre-removal' is triggered in ::cleanRegistered
201
+ // @params { what : control, id : '' }
202
  self.bind( 'sek-ui-pre-removal', function( params ) {
203
+ // CLEAN DRAG N DROP
204
  if ( 'control' == params.what && -1 < params.id.indexOf( 'draggable') ) {
205
  api.control( params.id, function( _ctrl_ ) {
206
  _ctrl_.container.find( '[draggable]' ).each( function() {
208
  });
209
  });
210
  }
211
+
212
+ // CLEAN SELECT2
213
+ // => we need to destroy the czrSelect2 instance, otherwise it can stay open when switching to another ui.
214
  if ( 'control' == params.what ) {
215
  api.control( params.id, function( _ctrl_ ) {
216
  _ctrl_.container.find( 'select' ).each( function() {
221
  });
222
  }
223
  });
224
+
225
+
226
+ // POPULATE THE REGISTERED COLLECTION
227
+ // 'czr-new-registered' is fired in api.CZR_Helpers.register()
228
  api.bind( 'czr-new-registered', function( params ) {
229
+ //console.log( 'czr-new-registered => ', params );
230
+ // Check that we have an origin property and that make sure we populate only the registration emitted by 'nimble'
231
  if ( _.isUndefined( params.origin ) ) {
232
  throw new Error( 'czr-new-registered event => missing params.origin' );
233
  }
234
  if ( 'nimble' !== params.origin )
235
  return;
236
+
237
+ // when no collection is provided, we use
238
  if ( false !== params.track ) {
239
  var currentlyRegistered = self.registered();
240
  var newRegistered = $.extend( true, [], currentlyRegistered );
241
+ //Check for duplicates
242
  var duplicateCandidate = _.findWhere( newRegistered, { id : params.id } );
243
  if ( ! _.isEmpty( duplicateCandidate ) && _.isEqual( duplicateCandidate, params ) ) {
244
  throw new Error( 'register => duplicated element in self.registered() collection ' + params.id );
245
  }
246
  newRegistered.push( params );
247
  self.registered( newRegistered );
248
+
249
+ // say it
250
+ //this.trigger( [params.what, params.id , 'registered' ].join('__'), params );
251
  }
252
  });
253
+
254
+
255
+ // store active locations
256
+ // introduced for the level tree, https://github.com/presscustomizr/nimble-builder/issues/359
257
+ self.activeLocations = new api.Value([]);
258
+ api.previewer.bind('sek-active-locations-in-preview', function( activelocs ){
259
+ self.activeLocations( ( _.isObject(activelocs) && _.isArray( activelocs.active_locations ) ) ? activelocs.active_locations : [] );
260
+ });
261
+
262
+
263
+ // TOP BAR
264
+ // Setup the topbar including do/undo action buttons
265
  self.setupTopBar();//@see specific dev file
266
+
267
+ // SAVE SECTION UI
268
  if ( sektionsLocalizedData.isSavedSectionEnabled ) {
269
  self.setupSaveUI();
270
  }
271
+
272
+
273
+ // SETUP DOUBLE CLICK INSERTION THINGS
274
+ // Stores the preview target for double click insertion
275
+ // implemented for https://github.com/presscustomizr/nimble-builder/issues/317
276
  self.lastClickedTargetInPreview = new api.Value();
277
  self.lastClickedTargetInPreview.bind( function( to, from ) {
278
+ // to and from are formed this way : { id : "__nimble__fb2ab3e47472" }
279
+ // @see 'sek-pick-content' event in ::reactToPreviewMsg()
280
+
281
+ // Send the level id of the current double-click insertion target
282
+ // => this will be used to style the level id container with a pulse animation
283
  if ( _.isObject( to ) && to.id ) {
284
  api.previewer.send( 'sek-set-double-click-target', to );
285
  } else {
286
+ // Tell the preview to clean the target highlight effect
287
  api.previewer.send( 'sek-reset-double-click-target' );
288
  }
289
+
290
+ // reset after a delay
291
  clearTimeout( $(window).data('_preview_target_timer_') );
292
  $(window).data('_preview_target_timer_', setTimeout(function() {
293
+ // Reset the click target
294
  self.lastClickedTargetInPreview( {} );
295
+ // Tell the preview to clean the target highlight effect
296
  api.previewer.send( 'sek-reset-double-click-target' );
297
  }, 20000 ) );
298
  });
299
+
300
+ // React to the preview to clean any currently highlighted drop zone
301
+ // This event is triggered on all click in the preview iframe
302
+ // @see preview::scheduleUiClickReactions()
303
  api.previewer.bind( 'sek-clean-target-drop-zone', function() {
304
+ // Reset the click target
305
  self.lastClickedTargetInPreview({});
306
  });
307
+
308
+ // Clean the current target when hitting escape
309
  $(document).keydown(function( evt ) {
310
+ // ESCAPE key pressed
311
  if ( evt && 27 === evt.keyCode ) {
312
  self.lastClickedTargetInPreview({});
313
  }
314
  });
315
  },//doSektionThinksOnApiReady
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+ // Fired at api "ready"
324
  registerAndSetupDefaultPanelSectionOptions : function() {
325
  var self = this;
326
+
327
+ // MAIN SEKTION PANEL
328
  var SektionPanelConstructor = api.Panel.extend({
329
+ //attachEvents : function () {},
330
+ // Always make the panel active, event if we have no sections / control in it
331
  isContextuallyActive : function () {
332
  return this.active();
333
  },
334
  _toggleActive : function(){ return true; }
335
  });
336
+
337
+ // Prepend the Nimble logo in the main panel title
338
+ // the panel.expanded() Value is not the right candidate to be observed because it gets changed on too many events, when generating the various UI.
339
  api.panel( sektionsLocalizedData.sektionsPanelId, function( _mainPanel_ ) {
340
  _mainPanel_.deferred.embedded.done( function() {
341
  var $sidePanelTitleEl = _mainPanel_.container.find('h3.accordion-section-title'),
343
  logoHtml = [ '<img class="sek-nimble-logo" alt="'+ _mainPanel_.params.title +'" src="', sektionsLocalizedData.baseUrl, '/assets/img/nimble/nimble_horizontal.svg?ver=' + sektionsLocalizedData.nimbleVersion , '"/>' ].join('');
344
 
345
  if ( 0 < $sidePanelTitleEl.length ) {
346
+ // The default title looks like this : Nimble Builder <span class="screen-reader-text">Press return or enter to open this section</span>
347
+ // we want to style "Nimble Builder" only.
348
  var $sidePanelTitleElSpan = $sidePanelTitleEl.find('span');
349
  $sidePanelTitleEl
350
  .addClass('sek-side-nimble-logo-wrapper')
351
  .html( logoHtml )
352
  .append( $sidePanelTitleElSpan );
353
  }
354
+
355
+ // default looks like
356
+ // <span class="preview-notice">You are customizing <strong class="panel-title">Nimble Builder</strong></span>
357
+ // if ( 0 < $topPanelTitleEl.length ) {
358
+ // var $topPanelTitleElInner = $topPanelTitleEl.find('.panel-title');
359
+ // $topPanelTitleElInner.html( logoHtml );
360
+ // }
361
  });
362
  });
363
+
364
+ // The parent panel for all ui sections + global options section
365
  api.CZR_Helpers.register({
366
  origin : 'nimble',
367
  what : 'panel',
371
  constructWith : SektionPanelConstructor,
372
  track : false,//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
373
  });
374
+
375
+
376
+ //GLOBAL OPTIONS SECTION
377
  api.CZR_Helpers.register({
378
  origin : 'nimble',
379
  what : 'section',
383
  priority : 20,
384
  track : false,//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
385
  constructWith : api.Section.extend({
386
+ //attachEvents : function () {},
387
+ // Always make the section active, event if we have no control in it
388
  isContextuallyActive : function () {
389
  return this.active();
390
  },
392
  })
393
  }).done( function() {
394
  api.section( self.SECTION_ID_FOR_GLOBAL_OPTIONS, function( _section_ ) {
395
+ // Style the section title
396
  var $sectionTitleEl = _section_.container.find('.accordion-section-title'),
397
  $panelTitleEl = _section_.container.find('.customize-section-title h3');
398
+
399
+ // The default title looks like this : Title <span class="screen-reader-text">Press return or enter to open this section</span>
400
  if ( 0 < $sectionTitleEl.length ) {
401
  $sectionTitleEl.prepend( '<i class="fas fa-globe sek-level-option-icon"></i>' );
402
  }
403
+
404
+ // The default title looks like this : <span class="customize-action">Customizing</span> Title
405
  if ( 0 < $panelTitleEl.length ) {
406
  $panelTitleEl.find('.customize-action').after( '<i class="fas fa-globe sek-level-option-icon"></i>' );
407
  }
408
+
409
+ // Schedule the accordion behaviour
410
  self.scheduleModuleAccordion.call( _section_ );
411
  });
412
  });
413
+
414
+ //LOCAL OPTIONS SECTION
415
  api.CZR_Helpers.register({
416
  origin : 'nimble',
417
  what : 'section',
421
  priority : 10,
422
  track : false,//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
423
  constructWith : api.Section.extend({
424
+ //attachEvents : function () {},
425
+ // Always make the section active, event if we have no control in it
426
  isContextuallyActive : function () {
427
  return this.active();
428
  },
430
  })
431
  }).done( function() {
432
  api.section( self.SECTION_ID_FOR_LOCAL_OPTIONS, function( _section_ ) {
433
+ // Style the section title
434
  var $sectionTitleEl = _section_.container.find('.accordion-section-title'),
435
  $panelTitleEl = _section_.container.find('.customize-section-title h3');
436
+
437
+ // The default title looks like this : Title <span class="screen-reader-text">Press return or enter to open this section</span>
438
  if ( 0 < $sectionTitleEl.length ) {
439
  $sectionTitleEl.prepend( '<i class="fas fa-map-marker-alt sek-level-option-icon"></i>' );
440
  }
441
+
442
+ // The default title looks like this : <span class="customize-action">Customizing</span> Title
443
  if ( 0 < $panelTitleEl.length ) {
444
  $panelTitleEl.find('.customize-action').after( '<i class="fas fa-map-marker-alt sek-level-option-icon"></i>' );
445
  }
446
+
447
+ // Schedule the accordion behaviour
448
  self.scheduleModuleAccordion.call( _section_ );
449
  });
450
  });
451
+
452
+
453
+ // GLOBAL OPTIONS SETTING
454
+ // Will Be updated in ::generateUIforGlobalOptions()
455
+ // has no control.
456
  api.CZR_Helpers.register( {
457
  origin : 'nimble',
458
+ //level : params.level,
459
  what : 'setting',
460
  id : sektionsLocalizedData.optNameForGlobalOptions,
461
  dirty : false,
463
  transport : 'refresh',//'refresh',//// ,
464
  type : 'option'
465
  });
466
+
467
+
468
+ // CONTENT PICKER SECTION
469
  api.CZR_Helpers.register({
470
  origin : 'nimble',
471
  what : 'section',
475
  priority : 30,
476
  track : false,//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
477
  constructWith : api.Section.extend({
478
+ //attachEvents : function () {},
479
+ // Always make the section active, event if we have no control in it
480
  isContextuallyActive : function () {
481
  return this.active();
482
  },
483
  _toggleActive : function(){ return true; }
484
  })
485
  }).done( function() {
486
+ // generate the UI for the content picker if not done yet
487
+ // defer this action when the section is instantiated AND the api.previewer is active, so we can trigger event on it
488
+ // => we also need the local skope to be set, that's why api.czr_initialSkopeCollectionPopulated is convenient because it ensures the api.previewer is ready and we have a local skope set.
489
+ // @see czr-skope-base.js
490
+ // @fixes https://github.com/presscustomizr/nimble-builder/issues/187
491
  api.section( self.SECTION_ID_FOR_CONTENT_PICKER, function( _section_ ) {
492
  if ( 'resolved' != api.czr_initialSkopeCollectionPopulated.state() ) {
493
  api.czr_initialSkopeCollectionPopulated.done( function() {
499
  });
500
  });
501
  },//registerAndSetupDefaultPanelSectionOptions()
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+ //@return void()
510
+ // sektionsData is built server side :
511
+ //array(
512
+ // 'db_values' => sek_get_skoped_seks( $skope_id ),
513
+ // 'setting_id' => sek_get_seks_setting_id( $skope_id )//nimble___[skp__post_page_home]
514
+ // )
515
  setContextualCollectionSettingIdWhenSkopeSet : function( newSkopes, previousSkopes ) {
516
  var self = this;
517
  previousSkopes = previousSkopes || {};
518
+ // Clear all previous sektions if the main panel is expanded and we're coming from a previousSkopes
519
  if ( ! _.isEmpty( previousSkopes.local ) && api.panel( sektionsLocalizedData.sektionsPanelId ).expanded() ) {
520
  api.previewer.trigger('sek-pick-content');
521
  }
522
+
523
+ // set the localSectionsSettingId now, and update it on skope change
524
  sektionsData = api.czr_skopeBase.getSkopeProperty( 'sektions', 'local');
525
  if ( sektionsLocalizedData.isDevMode ) {
526
  api.infoLog( '::setContextualCollectionSettingIdWhenSkopeSet => SEKTIONS DATA ? ', sektionsData );
535
  }
536
  });//$.extend()
537
  })( wp.customize, jQuery );
538
+ //global sektionsLocalizedData
539
  var CZRSeksPrototype = CZRSeksPrototype || {};
540
  (function ( api, $ ) {
541
  $.extend( CZRSeksPrototype, {
542
+ // fired in ::initialize(), at api.bind( 'ready', function() {})
543
  setupTopBar : function() {
544
  var self = this;
545
  self.topBarId = '#nimble-top-bar';
566
  api.previewer.bind('ready', function() {
567
  $(api.previewer.targetWindow().document ).on( 'mousemove scroll,', _.throttle( trackMouseMovements , 50 ) );
568
  });
569
+
570
+ // LEVEL TREE
571
  self.setupLevelTree();
572
  },
573
+
574
+
575
+ // @return void()
576
+ // self.topBarVisible.bind( function( visible ){
577
+ // self.toggleTopBar( visible );
578
+ // });
579
  toggleTopBar : function( visible ) {
580
  visible = _.isUndefined( visible ) ? true : visible;
581
  var self = this,
582
  _renderAndSetup = function() {
583
  $.when( self.renderAndSetupTopBarTmpl({}) ).done( function( $_el ) {
584
  self.topBarContainer = $_el;
585
+ //display
586
  _.delay( function() {
587
  $('body').addClass('nimble-top-bar-visible');
588
  }, 200 );
592
  var dfd = $.Deferred();
593
  $('body').removeClass('nimble-top-bar-visible');
594
  if ( self.topBarContainer && self.topBarContainer.length ) {
595
+ //remove Dom element after slide up
596
  _.delay( function() {
597
+ //self.topBarContainer.remove();
598
  dfd.resolve();
599
  }, 300 );
600
  } else {
611
  });
612
  }
613
  },
614
+
615
+
616
+ //@param = { }
617
  renderAndSetupTopBarTmpl : function( params ) {
618
+ var self = this,
619
+ _tmpl;
620
+
621
+ // CHECK IF ALREADY RENDERED
622
  if ( $( self.topBarId ).length > 0 )
623
  return $( self.topBarId );
624
+
625
+ // RENDER
626
  try {
627
  _tmpl = wp.template( 'nimble-top-bar' )( {} );
628
  } catch( er ) {
630
  return false;
631
  }
632
  $('#customize-preview').after( $( _tmpl ) );
633
+
634
+ // UNDO / REDO ON CTRL + Z / CTRL + Y EVENTS
635
  $(document).keydown( function( evt ) {
636
  if ( evt.ctrlKey && _.contains( [89, 90], evt.keyCode ) ) {
637
  try { self.navigateHistory( 90 === evt.keyCode ? 'undo' : 'redo'); } catch( er ) {
639
  }
640
  }
641
  });
642
+
643
+
644
+ // CLICK EVENTS
645
+ // Attach click events
646
  $('.sek-add-content', self.topBarId).on( 'click', function(evt) {
647
  evt.preventDefault();
648
  api.previewer.trigger( 'sek-pick-content', { content_type : 'module' });
657
  }
658
  });
659
  $('.sek-settings', self.topBarId).on( 'click', function(evt) {
660
+ // Focus on the Nimble panel
661
  api.panel( sektionsLocalizedData.sektionsPanelId, function( _panel_ ) {
662
  self.rootPanelFocus();
663
  _panel_.focus();
664
  });
665
+ // // Generate UI for the local skope options
666
+ // self.generateUI({ action : 'sek-generate-local-skope-options-ui'}).done( function() {
667
+ // api.control( self.getLocalSkopeOptionId(), function( _control_ ) {
668
+ // _control_.focus();
669
+ // });
670
+ // });
671
  });
672
 
673
  $('.sek-nimble-doc', self.topBarId).on( 'click', function(evt) {
674
  evt.preventDefault();
675
  window.open($(this).data('doc-href'), '_blank');
676
  });
677
+
678
+ // NOTIFICATION WHEN USING CUSTOM TEMPLATE
679
+ // implemented for https://github.com/presscustomizr/nimble-builder/issues/304
680
  var maybePrintNotificationForUsageOfNimbleTemplate = function( templateSettingValue ) {
681
  if ( $(self.topBarId).length < 1 )
682
  return;
691
  };
692
 
693
  var initOnSkopeReady = function() {
694
+ // Schedule notification rendering on init
695
+ // @see ::generateUIforLocalSkopeOptions()
696
  api( self.localSectionsSettingId(), function( _localSectionsSetting_ ) {
697
  var localSectionsValue = _localSectionsSetting_(),
698
  initialLocalTemplateValue = ( _.isObject( localSectionsValue ) && localSectionsValue.local_options && localSectionsValue.local_options.template ) ? localSectionsValue.local_options.template : null;
699
+ // on init
700
  maybePrintNotificationForUsageOfNimbleTemplate( initialLocalTemplateValue );
701
  });
702
+
703
+ // React to template changes
704
+ // @see ::generateUIforLocalSkopeOptions() for the declaration of self.getLocalSkopeOptionId() + '__template'
705
  api( self.getLocalSkopeOptionId() + '__template', function( _set_ ) {
706
  _set_.bind( function( to, from ) {
707
  maybePrintNotificationForUsageOfNimbleTemplate( to );
708
  });
709
  });
710
  };
711
+
712
+ // fire now
713
  initOnSkopeReady();
714
+ // and on skope change, when user navigates through the previewed pages
715
+ // 'nimble-ready-for-current-skope' declared in ::initialize()
716
  api.bind('nimble-ready-for-current-skope', function() {
717
  initOnSkopeReady();
718
  });
721
  }
722
  });//$.extend()
723
  })( wp.customize, jQuery );
724
+ //global sektionsLocalizedData
725
  var CZRSeksPrototype = CZRSeksPrototype || {};
726
  (function ( api, $ ) {
727
  $.extend( CZRSeksPrototype, {
728
  /* HISTORY */
729
+ // @param direction = string 'undo', 'redo'
730
+ // @return void()
731
  navigateHistory : function( direction ) {
732
  var self = this,
733
  historyLog = $.extend( true, [], self.historyLog() );
734
+ // log model
735
+ // {
736
+ // status : 'current', 'previous', 'future'
737
+ // value : {},
738
+ // action : 'sek-add-column'
739
+ // }
740
+
741
+ // UPDATE THE SETTING VALUE
742
  var previous,
743
  current,
744
  future,
764
  }
765
  switch( direction ) {
766
  case 'undo' :
767
+ // the last previous is our new setting value
768
  if ( ! _.isEmpty( current ) && ! _.isEmpty( previous ) ) {
769
  newSettingValue = previous.value;
770
  previousSektionToRefresh = current.sektionToRefresh;
772
  }
773
  break;
774
  case 'redo' :
775
+ // the first future is our new setting value
776
  if ( ! _.isEmpty( future ) ) {
777
  newSettingValue = future.value;
778
  previousSektionToRefresh = current.sektionToRefresh;
781
  break;
782
  }
783
  });
784
+
785
+ // set the new setting Value
786
  if( ! _.isUndefined( newSettingValue ) ) {
787
  if ( ! _.isEmpty( newSettingValue.local ) ) {
788
  api( self.localSectionsSettingId() )( self.validateSettingValue( newSettingValue.local ), { navigatingHistoryLogs : true } );
790
  if ( ! _.isEmpty( newSettingValue.global ) ) {
791
  api( self.getGlobalSectionsSettingId() )( self.validateSettingValue( newSettingValue.global ), { navigatingHistoryLogs : true } );
792
  }
793
+ // If the information is available, refresh only the relevant sections
794
+ // otherwise fallback on a full refresh
795
  var previewHasBeenRefreshed = false;
796
+
797
+ // if ( ! _.isEmpty( previousSektionToRefresh ) ) {
798
+ // api.previewer.trigger( 'sek-refresh-level', {
799
+ // level : 'section',
800
+ // id : previousSektionToRefresh
801
+ // });
802
+ // } else {
803
+ // api.previewer.refresh();
804
+ // previewHasBeenRefreshed = true;
805
+ // }
806
+ // if ( currentSektionToRefresh != previousSektionToRefresh ) {
807
+ // if ( ! _.isEmpty( currentSektionToRefresh ) ) {
808
+ // api.previewer.trigger( 'sek-refresh-level', {
809
+ // level : 'section',
810
+ // id : currentSektionToRefresh
811
+ // });
812
+ // } else if ( ! previewHasBeenRefreshed ) {
813
+ // api.previewer.refresh();
814
+ // }
815
+ // }
816
  api.previewer.refresh();
817
+
818
+ // Always make sure that the ui gets refreshed
819
  api.previewer.trigger( 'sek-pick-content', {});
820
+ // Clean registered setting and control, even the level settings
821
+ // => otherwise the level settings won't be synchronized when regenerating their ui.
822
  self.cleanRegistered();//<= normal cleaning
823
  self.cleanRegisteredLevelSettingsAfterHistoryNavigation();// setting cleaning
824
  }
825
+
826
+ // UPDATE THE HISTORY LOG
827
  var currentKey = _.findKey( historyLog, { status : 'current'} );
828
  currentKey = Number( currentKey );
829
  if ( ! _.isNumber( currentKey ) ) {
833
 
834
  _.each( historyLog, function( log, key ) {
835
  newLog = $.extend( true, {}, log );
836
+ // cast keys to number so we can compare them
837
  key = Number( key );
838
  switch( direction ) {
839
  case 'undo' :
861
  }
862
  });//$.extend()
863
  })( wp.customize, jQuery );
864
+ //global sektionsLocalizedData
865
  var CZRSeksPrototype = CZRSeksPrototype || {};
866
  (function ( api, $ ) {
867
  $.extend( CZRSeksPrototype, {
868
+ // fired in ::setupTopBar(), at api.bind( 'ready', function() {})
869
  setupLevelTree : function() {
870
  var self = this;
871
  self.levelTree = new api.Value([]);
872
+ self.levelTree.bind( function() {
873
+ // Refresh when the collection is being modified from the tree
874
  if ( self.levelTreeExpanded() ) {
875
  self.renderOrRefreshTree();
876
  }
877
  });
878
+
879
+
880
+ // SETUP AND REACT TO LEVEL TREE EXPANSION
881
  self.levelTreeExpanded = new api.Value(false);
882
  self.levelTreeExpanded.bind( function(expanded) {
883
  $('body').toggleClass( 'sek-level-tree-expanded', expanded );
884
  if ( expanded ) {
885
+ // Set the level tree now
886
  self.setLevelTreeValue();
887
+
888
+ // Make sure we the tree is set first
889
  if ( _.isEmpty( self.levelTree() ) ) {
890
  api.previewer.trigger('sek-notify', {
891
  type : 'info',
896
  '</span>'
897
  ].join('')
898
  });
899
+ // self disable
900
  self.levelTreeExpanded(false);
901
  return;
902
  }
909
  }, 300 );
910
  }
911
  });
912
+
913
+ // REFRESH THE TREE WHEN THE ACTIVE LOCATIONS CHANGE
914
+ // @see ::initialize to understand how active locations are updated
915
+ self.activeLocations.bind(function() {
916
+ if ( !_.isEmpty( self.levelTree() ) ) {
917
+ self.renderOrRefreshTree();
918
+ }
919
+ });
920
+
921
+ // API READY
922
  api.previewer.bind('ready', function() {
923
+ // LEVEL TREE
924
+ // on each skope change
925
+ // - set the level tree
926
+ // - bind the local and global settings so that they refresh the level tree when changed
927
  self.localSectionsSettingId.callbacks.add( function() {
928
+ self.levelTreeExpanded(false);
929
+ // Bind the global and local settings if not bound yet
930
+ _.each( [ self.getGlobalSectionsSettingId(), self.localSectionsSettingId(), sektionsLocalizedData.optNameForGlobalOptions ], function( setId ){
931
  if ( api(setId)._isBoundForNimbleLevelTree )
932
  return;
933
 
938
  });
939
  });
940
  });
941
+
942
+
943
+
944
+ // SETUP CLICK EVENTS IN THE TREE
945
  $('body').on('click', '#nimble-level-tree [data-nimb-level]', function(evt) {
946
  evt.preventDefault();
947
  evt.stopPropagation();
948
+ var $el = $(evt.target),
949
+ $closestLevel = $el.closest('[data-nimb-level]');
950
+ api.previewer.send('sek-animate-to-level', { id : $closestLevel.data('nimb-id') });
951
+ api.previewer.send('sek-display-level-ui', { id : $closestLevel.data('nimb-id') });
952
  });
953
 
954
  $('body').on('click', '#nimble-level-tree .sek-remove-level', function(evt) {
963
  in_column : $el.closest('[data-nimb-level="column"]').data('nimb-id')
964
  });
965
  $el.fadeOut('slow');
966
+ // Refresh
967
  self.renderOrRefreshTree();
968
  });
969
+
970
+ // Collapse tree ( also possible by clicking on the tree icon in the top Nimble bar )
971
+ $('body').on('click', '.sek-close-level-tree' , function(evt) {
972
+ evt.preventDefault();
973
+ self.levelTreeExpanded(false);
974
+ });
975
  },
976
+
977
+ // This method updates the levelTree observable api.Value()
 
 
978
  setLevelTreeValue : function() {
979
  var self = this,
980
+ globalCollSetId = self.getGlobalSectionsSettingId(),
981
+ localCollSetId = self.localSectionsSettingId(),
982
+ globalOptionSetId = sektionsLocalizedData.optNameForGlobalOptions,
983
+ globalColSetValue, localColSetValue,
984
+ globalCollection, localCollection,
985
+ rawGlobalOptionsValue,
986
+ missingDependantSettingId = false;
987
+
988
+ // Check if all dependant settings are registered
989
+ // we won't go further if any of the 3 setting id's is not yet registered
990
+ _.each( [globalCollSetId, localCollSetId, globalOptionSetId ], function( setId ) {
991
+ if ( !api.has(setId) ) {
992
+ missingDependantSettingId = setId;
993
+ return;
994
+ }
995
+ });
996
 
997
+ if ( false !== missingDependantSettingId ) {
998
+ api.errare( '::setLevelTreeValue => a setting id is not registered ');
999
+ return;
1000
+ }
1001
 
1002
+ // Normalizes the setting values
1003
+ globalColSetValue = api(globalCollSetId)();
1004
+ globalCollection = _.isObject( globalColSetValue ) ? $.extend( true, {}, globalColSetValue ) : {};
1005
+ globalCollection = ! _.isEmpty( globalCollection.collection )? globalCollection.collection : [];
1006
+ globalCollection = _.isArray( globalCollection ) ? globalCollection : [];
1007
+
1008
+ localColSetValue = api(localCollSetId)();
1009
+ localColSetValue = _.isObject( localColSetValue ) ? localColSetValue : {};
1010
+ localCollection = $.extend( true, {}, localColSetValue );
1011
+ localCollection = ! _.isEmpty( localCollection.collection ) ? localCollection.collection : [];
1012
+ localCollection = _.isArray( localCollection ) ? localCollection : [];
1013
+
1014
+ var raw_col = _.union( globalCollection, localCollection ),
1015
+ local_header_footer_value,
1016
+ global_header_footer_value,
1017
+ has_local_header_footer = false,
1018
+ has_global_header_footer = false;
1019
+
1020
+ rawGlobalOptionsValue = api( globalOptionSetId )();
1021
+ rawGlobalOptionsValue = _.isObject( rawGlobalOptionsValue ) ? rawGlobalOptionsValue : {};
1022
+
1023
+ // HEADER-FOOTER => do we have a header-footer set, local or global ?
1024
+ // LOCAL
1025
+ if ( localColSetValue.local_options && localColSetValue.local_options.local_header_footer ) {
1026
+ local_header_footer_value = localColSetValue.local_options.local_header_footer['header-footer'];
1027
+ has_local_header_footer = 'nimble_local' === local_header_footer_value;
1028
+ }
1029
+
1030
+ // GLOBAL
1031
+ // there can be a global header footer if
1032
+ // 1) local is not set to 'nimble_local' or 'theme'
1033
+ // and
1034
+ // 2) the global option is set to 'nimble_global'
1035
+ //
1036
+ // OR when
1037
+ // 1) local is set to 'nimble_global'
1038
+ if ( rawGlobalOptionsValue.global_header_footer && !has_local_header_footer && 'theme' !== local_header_footer_value) {
1039
+ global_header_footer_value = rawGlobalOptionsValue.global_header_footer['header-footer'];
1040
+ has_global_header_footer = 'nimble_global' === global_header_footer_value || 'nimble_global' === local_header_footer_value;
1041
+ }
1042
+
1043
+ var filteredCollection = $.extend( true, [], raw_col ),
1044
+ header_loc,
1045
+ footer_loc;
1046
+
1047
+ filteredCollection = _.filter( filteredCollection, function( loc, key ) {
1048
+ return !_.contains( ['nimble_global_header', 'nimble_global_footer', 'nimble_local_header', 'nimble_local_footer'], loc.id );
1049
+ });
1050
+
1051
+ // RE-ORGANIZE LOCATIONS SO THAT WE HAVE
1052
+ // - header
1053
+ // - content loc #1
1054
+ // - content loc #2
1055
+ // - ...
1056
+ // - footer
1057
+ var wrapContentLocationWithHeaderFoooterLocations = function( scope ) {
1058
+ header_loc = _.findWhere(raw_col, {id:'nimble_' + scope + '_header'});
1059
+ footer_loc = _.findWhere(raw_col, {id:'nimble_' + scope + '_footer'});
1060
+ filteredCollection.unshift(header_loc);
1061
+ filteredCollection.push(footer_loc);
1062
+ };
1063
+ if ( has_local_header_footer ) {
1064
+ wrapContentLocationWithHeaderFoooterLocations('local');
1065
+ } else if ( has_global_header_footer ) {
1066
+ wrapContentLocationWithHeaderFoooterLocations('global');
1067
+ }
1068
+
1069
+ // RE-ORDER LOCATIONS IN THE SAME ORDER AS THEY ARE IN THE DOM
1070
+ // @see ::initialize to understand how active locations are updated
1071
+ var contextuallyActiveLocactions = self.activeLocations(),
1072
+ orderedCollection = [],
1073
+ candidate;
1074
+ if ( !_.isEmpty(contextuallyActiveLocactions) ) {
1075
+ _.each( contextuallyActiveLocactions, function( loc ) {
1076
+ candidate = _.findWhere(filteredCollection, {id:loc});
1077
+ if( !_.isUndefined(candidate) ) {
1078
+ orderedCollection.push(candidate);
1079
+ }
1080
+ });
1081
+ } else {
1082
+ orderedCollection = filteredCollection;
1083
+ }
1084
+
1085
+ // Store it now
1086
+ self.levelTree( orderedCollection );
1087
  },
1088
+
1089
+
1090
+ // print the tree
1091
  renderOrRefreshTree : function() {
1092
+ var self = this,
1093
+ _tmpl;
1094
  if( $('#nimble-level-tree').length < 1 ) {
1095
+ // RENDER
1096
+ try {
1097
+ _tmpl = wp.template( 'nimble-level-tree' )( {} );
1098
+ } catch( er ) {
1099
+ api.errare( 'Error when parsing the the nimble-level-tree template', er );
1100
+ return false;
1101
+ }
1102
+ $( '#customize-preview' ).after( $( _tmpl ) );
1103
  }
1104
+ $('#nimble-level-tree').find('.sek-tree-wrap').html( self.getLevelTreeHtml() );
1105
  },
1106
+
1107
+ // recursive helper
1108
+ // return an html string describing the contextually printed sections
1109
  getLevelTreeHtml : function( _col, level ) {
1110
  var self = this;
1111
+ _col = _col || self.levelTree();
1112
+
1113
+ var levelType,
1114
+ levelName,
1115
+ _html,
1116
+ skipLevel = false;
1117
+
1118
  if ( !_.isArray( _col ) || _.isEmpty( _col ) ) {
1119
  api.errare('::buildLevelTree => invalid collection param', _col );
1120
  return _html;
1121
  }
1122
+ var remove_icon_html = '<i class="material-icons sek-remove-level" title="'+ sektionsLocalizedData.i18n['Remove this element'] +'">delete_forever</i>';
1123
  _html = '<ul>';
1124
  _.each( _col, function( _level_param ) {
1125
  if ( _.isUndefined( _level_param.level ) ){
1131
  return;
1132
  }
1133
 
1134
+ // Set some vars now
1135
+ levelType = _level_param.level;
1136
+ levelName = levelType;
1137
+
1138
+ // if the level is a location, is this location contextually active ?
1139
+ // @see ::initialize to understand how active locations are updated
1140
+ if ( 'location' === levelType ) {
1141
+ skipLevel = !_.contains( self.activeLocations(), _level_param.id );
1142
+ }
1143
+
1144
+ if ( !skipLevel ) {
1145
+ //try to get the i18n level name, fall back on the level type
1146
+ if ( sektionsLocalizedData.i18n[levelType] ) {
1147
+ levelName = sektionsLocalizedData.i18n[levelType];
1148
+ }
1149
+ if ( true === _level_param.is_nested ) {
1150
+ levelName = sektionsLocalizedData.i18n['nested section'];
1151
+ }
1152
+
1153
+ remove_icon_html = 'location' !== levelType ? remove_icon_html : '';
1154
+ _html += '<li data-nimb-level="'+levelType+'" data-nimb-id="'+_level_param.id+'">';
1155
+
1156
+ _html += '<div class="sek-level-infos"><div class="sek-inner-level-infos">';
1157
+ // add module type and icon
1158
+ if ( 'module' === levelType ) {
1159
+ _html += [
1160
+ self.getTreeModuleIcon( _level_param.module_type ),
1161
+ self.getTreeModuleTitle( _level_param.module_type )
1162
+ ].join(' ');
1163
+ }
1164
+ // add the rest of the html, common to all elements
1165
+ _html += [
1166
+ ' ',
1167
+ levelName,
1168
+ '( id :',
1169
+ _level_param.id,
1170
+ ')',
1171
+ remove_icon_html
1172
+ ].join(' ');
1173
+ _html += '</div></div>';
1174
+
1175
+ if ( _.isArray( _level_param.collection ) && ! _.isEmpty( _level_param.collection ) ) {
1176
+ _html += self.getLevelTreeHtml( _level_param.collection, level );
1177
+ }
1178
+ _html += '</li>';
1179
+ }//if ( !skipLevel )
1180
+ });//_.each
1181
+
1182
+ _html += '</ul>';
1183
+
1184
+ return _html;
1185
+ },
1186
+
1187
+ // the module icons can be
1188
+ // an svg file like Nimble__divider_icon.svg => in this case we build and return the full url
1189
+ // or a font_icon like '<i class="fab fa-wordpress-simple"></i>'
1190
+ getTreeModuleIcon : function( modType ) {
1191
+ var _icon = {};
1192
+ _.each( sektionsLocalizedData.moduleCollection, function( modData ) {
1193
+ if ( !_.isEmpty( _icon ) )
1194
  return;
1195
+ if ( modType === modData['content-id'] ) {
1196
+ _icon = {
1197
+ svg : modData.icon ? sektionsLocalizedData.moduleIconPath + modData.icon : '',
1198
+ font : modData.font_icon ? modData.font_icon : ''
1199
+ };
1200
  }
 
1201
  });
1202
+ if ( !_.isEmpty( _icon.svg ) ) {
1203
+ return '<img class="sek-svg-mod-icon" src="' + _icon.svg + '"/>';
1204
+ } else if ( !_.isEmpty( _icon.font ) ) {
1205
+ return _icon.font;
1206
+ }
1207
+ },
1208
+
1209
+ getTreeModuleTitle : function( modType ) {
1210
+ var _title = {};
1211
+ _.each( sektionsLocalizedData.moduleCollection, function( modData ) {
1212
+ if ( !_.isEmpty( _title ) )
1213
+ return;
1214
+ if ( modType === modData['content-id'] ) {
1215
+ _title = modData.title;
1216
+ }
1217
+ });
1218
+ return _title;
1219
  }
1220
  });//$.extend()
1221
  })( wp.customize, jQuery );
1222
+ //global sektionsLocalizedData
1223
  var CZRSeksPrototype = CZRSeksPrototype || {};
1224
  (function ( api, $ ) {
1225
  $.extend( CZRSeksPrototype, {
1226
+ // SAVE DIALOG BLOCK
1227
+ // fired in ::initialize()
1228
  setupSaveUI : function() {
1229
  var self = this;
1230
  self.saveUIVisible = new api.Value( false );
1232
  self.toggleSaveUI( to, params ? params.id : null );
1233
  });
1234
  },
1235
+
1236
+
1237
+ // @return void()
1238
+ // self.saveUIVisible.bind( function( visible ){
1239
+ // self.toggleSaveUI( visible );
1240
+ // });
1241
  toggleSaveUI : function( visible, sectionId ) {
1242
  visible = _.isUndefined( visible ) ? true : visible;
1243
  var self = this,
1244
  _renderAndSetup = function() {
1245
  $.when( self.renderAndSetupSaveUITmpl({}) ).done( function( $_el ) {
1246
  self.saveUIContainer = $_el;
1247
+ //display
1248
  _.delay( function() {
1249
  $('body').addClass('nimble-save-ui-visible');
1250
  }, 200 );
1251
+ // set section id input value
1252
  $('#sek-saved-section-id').val( sectionId );
1253
  });
1254
  },
1256
  var dfd = $.Deferred();
1257
  $('body').removeClass('nimble-save-ui-visible');
1258
  if ( $( '#nimble-top-save-ui' ).length > 0 ) {
1259
+ //remove Dom element after slide up
1260
  _.delay( function() {
1261
 
1262
  self.saveUIContainer.remove();
1276
  });
1277
  }
1278
  },
1279
+
1280
+
1281
+ // @return a section model with clean ids
1282
+ // also removes the section properties "id" and "level", which are dynamically set when dragging and dropping
1283
+ // Example of section model before preprocessing
1284
+ // {
1285
+ // collection: [{…}]
1286
+ // id: "" //<= to remove
1287
+ // level: "section" // <= to remove
1288
+ // options: {bg: {…}}
1289
+ // ver_ini: "1.1.8"
1290
+ // }
1291
  preProcessSektion : function( sectionModel ) {
1292
  var self = this, sektionCandidate = self.cleanIds( sectionModel );
1293
  return _.omit( sektionCandidate, function( val, key ) {
1294
  return _.contains( ['id', 'level'], key );
1295
  });
1296
  },
1297
+
1298
+
1299
+ //@param = { }
1300
  renderAndSetupSaveUITmpl : function( params ) {
1301
  if ( $( '#nimble-top-save-ui' ).length > 0 )
1302
  return $( '#nimble-top-save-ui' );
1310
  return false;
1311
  }
1312
  $('#customize-preview').after( $( _tmpl ) );
1313
+
1314
+ // Attach click events
1315
  $('.sek-do-save-section', '#nimble-top-save-ui').on( 'click', function(evt) {
1316
  evt.preventDefault();
1317
  var sectionModel = $.extend( true, {}, self.getLevelModel( $('#sek-saved-section-id').val() ) ),
1345
  sek_data: JSON.stringify( sek_data )
1346
  })
1347
  .done( function( response ) {
1348
+ // response is {section_post_id: 436}
1349
+ //self.saveUIVisible( false );
1350
  api.previewer.trigger('sek-notify', {
1351
  type : 'success',
1352
  duration : 10000,
1380
  }
1381
  });//$.extend()
1382
  })( wp.customize, jQuery );
1383
+ //global sektionsLocalizedData
1384
  var CZRSeksPrototype = CZRSeksPrototype || {};
1385
  (function ( api, $ ) {
1386
  $.extend( CZRSeksPrototype, {
1387
+ // Fired on api 'ready', in reaction to ::setContextualCollectionSettingIdWhenSkopeSet => ::localSectionsSettingId
1388
+ // 1) register the collection setting nimble___[{$skope_id}] ( ex : nimble___[skp__post_page_20] )
1389
+ // 2) validate that the setting is well formed before being changed
1390
+ // 3) schedule reactions on change ?
1391
+ // @return void()
1392
  setupSettingsToBeSaved : function() {
1393
  var self = this,
1394
  serverCollection;
1395
+
1396
+ // maybe register the sektion_collection settings
1397
  var _settingsToRegister_ = {
1398
  'local' : { collectionSettingId : self.localSectionsSettingId() },//<= "nimble___[skp__post_page_10]"
1399
  'global' : { collectionSettingId : self.getGlobalSectionsSettingId() }//<= "nimble___[skp__global]"
1404
  if ( _.isEmpty( settingData.collectionSettingId ) ) {
1405
  throw new Error( 'setupSettingsToBeSaved => the collectionSettingId is invalid' );
1406
  }
1407
+ // if the collection setting is not registered yet
1408
+ // => register it and bind it
1409
+ // => ensure that it will be bound only once, because the setting are never unregistered
1410
  if ( ! api.has( settingData.collectionSettingId ) ) {
1411
  var __collectionSettingInstance__ = api.CZR_Helpers.register({
1412
  what : 'setting',
1417
  track : false,//don't register in the self.registered()
1418
  origin : 'nimble'
1419
  });
1420
+
1421
+
1422
+ //if ( sektionsLocalizedData.isDevMode ) {}
1423
  api( settingData.collectionSettingId, function( sektionSetInstance ) {
1424
+
1425
+ // Schedule reactions to a collection change
1426
  sektionSetInstance.bind( _.debounce( function( newSektionSettingValue, previousValue, params ) {
1427
+ // api.infoLog( 'sektionSettingValue is updated',
1428
+ // {
1429
+ // newValue : newSektionSettingValue,
1430
+ // previousValue : previousValue,
1431
+ // params : params
1432
+ // }
1433
+ // );
1434
  self.trackHistoryLog( sektionSetInstance, params );
1435
 
1436
  }, 1000 ) );
1437
  });//api( settingData.collectionSettingId, function( sektionSetInstance ){}
1438
  }//if ( ! api.has( settingData.collectionSettingId ) ) {
1439
  });//_.each(
1440
+
1441
+ // global options for all collection setting of this skope_id
1442
+ // loop_start, before_content, after_content, loop_end
1443
+
1444
+ // Global Options : section
1445
+ // api.CZR_Helpers.register({
1446
+ // what : 'section',
1447
+ // id : sektionsLocalizedData.optPrefixForSektionGlobalOptsSetting,//'__sektions__'
1448
+ // title: 'Global Options',
1449
+ // priority : 1000,
1450
+ // constructWith : SektionPanelConstructor,
1451
+ // track : false//don't register in the self.registered()
1452
+ // });
1453
+
1454
+ // // => register a control
1455
+ // // Template
1456
+ // api.CZR_Helpers.register({
1457
+ // what : 'control',
1458
+ // id : sektionsLocalizedData.sektionsPanelId,//'__sektions__'
1459
+ // title: 'Main sektions panel',
1460
+ // priority : 1000,
1461
+ // constructWith : SektionPanelConstructor,
1462
+ // track : false//don't register in the self.registered()
1463
+ // });
1464
  },// SetupSettingsToBeSaved()
1465
+
1466
+
1467
+ // React to a local or global setting change api( settingData.collectionSettingId )
1468
  trackHistoryLog : function( sektionSetInstance, params ) {
1469
  var self = this,
1470
  _isGlobal = sektionSetInstance.id === self.getGlobalSectionsSettingId();
1471
+
1472
+ // Track changes, if not currently navigating the logs
1473
+ // Always clean future values if the logs have been previously navigated back
1474
  if ( params && true !== params.navigatingHistoryLogs ) {
1475
  var newHistoryLog = [],
1476
  historyLog = $.extend( true, [], self.historyLog() ),
1481
  } else if ( ! _.isEmpty( params.to_sektion ) ) {// column moved /
1482
  sektionToRefresh = params.to_sektion;
1483
  }
1484
+
1485
+ // Reset all status but 'future' to 'previous'
1486
  _.each( historyLog, function( log ) {
1487
  var newStatus = 'previous';
1488
  if ( 'future' == log.status )
1499
  self.historyLog( newHistoryLog );
1500
  }
1501
  },
1502
+
1503
+
1504
+
1505
+ // Fired in ::initialize(), at api 'ready'
1506
  initializeHistoryLogWhenSettingsRegistered : function() {
1507
  var self = this;
1508
+ // This api.Value() is bound in ::setupTopBar
1509
  self.historyLog = new api.Value([{
1510
  status : 'current',
1511
  value : {
1514
  },
1515
  action : 'initial'
1516
  }]);
1517
+ // LISTEN TO HISTORY LOG CHANGES TO UPDATE THE BUTTON STATE
1518
  self.historyLog.bind( function( newLog ) {
1519
  if ( _.isEmpty( newLog ) )
1520
  return;
1530
  });
1531
  });
1532
  },
1533
+
1534
+ // Fired :
1535
+ // 1) when instantiating the setting
1536
+ // 2) on each setting change, as an override of api.Value::validate( to ) @see customize-base.js
1537
+ // @return {} or null if did not pass the checks
1538
  validateSettingValue : function( valCandidate ) {
1539
  if ( ! _.isObject( valCandidate ) ) {
1540
  api.errare('validation error => the setting should be an object', valCandidate );
1543
  var parentLevel = {},
1544
  errorDetected = false,
1545
  levelIds = [];
1546
+ // walk the collections tree and verify it passes the various consistency checks
1547
  var _errorDetected_ = function( msg ) {
1548
  api.errare( msg , valCandidate );
1549
  api.previewer.trigger('sek-notify', {
1553
  '<span style="font-size:0.95em">',
1554
  '<strong>' + msg + '</strong>',
1555
  '<br>',
1556
+ sektionsLocalizedData.i18n['If this problem locks Nimble Builder, you can try resetting the sections of this page.'],
1557
  '<br>',
1558
  '<span style="text-align:center;display:block">',
1559
  '<button type="button" class="button" aria-label="' + sektionsLocalizedData.i18n.Reset + '" data-sek-reset="true">' + sektionsLocalizedData.i18n.Reset + '</button>',
1569
  return;
1570
  }
1571
  if ( _.isUndefined( level ) && _.isEmpty( parentLevel ) ) {
1572
+ // we are at the root level
1573
  level = $.extend( true, {}, valCandidate );
1574
  if ( _.isUndefined( level.id ) || _.isUndefined( level.level ) ) {
1575
+ // - there should be no 'level' property or 'id'
1576
+ // - there should be a collection of registered locations
1577
+ // - there should be no parent level defined
1578
  if ( _.isUndefined( level.collection ) ) {
1579
  _errorDetected_( 'validation error => the root level is missing the collection of locations' );
1580
  return;
1583
  _errorDetected_( 'validation error => the root level should not have a "level" or an "id" property' );
1584
  return;
1585
  }
1586
+
1587
+ // Walk the section collection
1588
  _.each( valCandidate.collection, function( _l_ ) {
1589
+ // Set the parent level now
1590
  parentLevel = level;
1591
+ // walk
1592
  _checkWalker_( _l_ );
1593
  });
1594
  }
1595
  } else {
1596
+ // we have a level.
1597
+ // - make sure we have at least the following properties : id, level
1598
+
1599
+ // ID
1600
  if ( _.isEmpty( level.id ) || ! _.isString( level.id )) {
1601
  _errorDetected_('validation error => a ' + level.level + ' level must have a valid id' );
1602
  return;
1606
  } else {
1607
  levelIds.push( level.id );
1608
  }
1609
+
1610
+ // OPTIONS
1611
+ // if ( _.isEmpty( level.options ) || ! _.isObject( level.options )) {
1612
+ // _errorDetected_('validation error => a ' + level.level + ' level must have a valid options property' );
1613
+ // return;
1614
+ // }
1615
+
1616
+ // LEVEL
1617
  if ( _.isEmpty( level.level ) || ! _.isString( level.level ) ) {
1618
  _errorDetected_('validation error => a ' + level.level + ' level must have a level property' );
1619
  return;
1621
  _errorDetected_('validation error => the level "' + level.level + '" is not authorized' );
1622
  return;
1623
  }
1624
+
1625
+ // - Unless we are in a module, there should be a collection property
1626
+ // - make sure a module doesn't have a collection property
1627
  if ( 'module' == level.level ) {
1628
  if ( ! _.isUndefined( level.collection ) ) {
1629
  _errorDetected_('validation error => a module can not have a collection property' );
1635
  return;
1636
  }
1637
  }
1638
+
1639
+ // a level should always have a version "ver_ini" property
1640
  if ( _.isUndefined( level.ver_ini ) ) {
1641
+ //_errorDetected_('validation error => a ' + level.level + ' should have a version property : "ver_ini"' );
1642
+ //return;
1643
  api.errare( 'validateSettingValue() => validation error => a ' + level.level + ' should have a version property : "ver_ini"' );
1644
  }
1645
+
1646
+ // Specific checks by level type
1647
  switch ( level.level ) {
1648
  case 'location' :
1649
  if ( ! _.isEmpty( parentLevel.level ) ) {
1677
  }
1678
  break;
1679
  }
1680
+
1681
+ // If we are not in a module, keep walking the collections
1682
  if ( 'module' != level.level ) {
1683
  _.each( level.collection, function( _l_ ) {
1684
+ // Set the parent level now
1685
  parentLevel = $.extend( true, {}, level );
1686
+ // And walk sub levels
1687
  _checkWalker_( _l_ );
1688
  });
1689
  }
1690
  }
1691
  };
1692
  _checkWalker_();
1693
+
1694
+ //api.infoLog('in ::validateSettingValue', valCandidate );
1695
+ // if null is returned, the setting value is not set @see customize-base.js
1696
  return errorDetected ? null : valCandidate;
1697
  },//validateSettingValue
1698
+
1699
+
1700
+
1701
+ // triggered when clicking on [data-sek-reset="true"]
1702
+ // scheduled in ::initialize()
1703
+ // Note :
1704
+ // 1) this is not a real reset, the customizer setting is set to self.getDefaultSektionSettingValue( 'local' )
1705
+ // @see php function which defines the defaults
1706
+ // function sek_get_default_location_model() {
1707
+ // $defaut_sektions_value = [ 'collection' => [], 'options' => [] ];
1708
+ // foreach( sek_get_locations() as $location ) {
1709
+ // $defaut_sektions_value['collection'][] = [
1710
+ // 'id' => $location,
1711
+ // 'level' => 'location',
1712
+ // 'collection' => [],
1713
+ // 'options' => []
1714
+ // ];
1715
+ // }
1716
+ // return $defaut_sektions_value;
1717
+ // }
1718
+ // 2) a real reset should delete the sektion post ( nimble_post_type, with for example title nimble___skp__post_page_21 ) and its database option storing its id ( for example : nimble___skp__post_page_21 )
1719
  resetCollectionSetting : function() {
1720
  var self = this;
1721
  if ( _.isEmpty( self.localSectionsSettingId() ) ) {
1722
  throw new Error( 'setupSettingsToBeSaved => the collectionSettingId is invalid' );
1723
  }
1724
+ // reset the setting to default
1725
  api( self.localSectionsSettingId() )( self.getDefaultSektionSettingValue( 'local' ) );
1726
+ // refresh the preview
1727
  api.previewer.refresh();
1728
+ // remove any previous notification
1729
  api.notifications.remove( 'sek-notify' );
1730
+ // display a success msg
1731
  api.panel( sektionsLocalizedData.sektionsPanelId, function( __main_panel__ ) {
1732
  api.notifications.add( new api.Notification( 'sek-reset-done', {
1733
  type: 'success',
1734
  message: sektionsLocalizedData.i18n['Reset complete'],
1735
  dismissible: true
1736
  } ) );
1737
+
1738
+ // Removed if not dismissed after 5 seconds
1739
  _.delay( function() {
1740
  api.notifications.remove( 'sek-reset-done' );
1741
  }, 5000 );
1746
  var CZRSeksPrototype = CZRSeksPrototype || {};
1747
  (function ( api, $ ) {
1748
  $.extend( CZRSeksPrototype, {
1749
+ // invoked on api('ready') from self::initialize()
1750
+ // update the main setting OR generate a UI in the panel
1751
+ // AND
1752
+ // always send back a confirmation to the preview, so we can fire the ajax actions
1753
+ // the message sent back is used in particular to
1754
+ // - always pass the location_skope_id, which otherwise would be impossible to get in ajax
1755
+ // - in a duplication case, to pass the the newly generated id of the cloned level
1756
  reactToPreviewMsg : function() {
1757
  var self = this,
1758
  apiParams = {},
1759
  uiParams = {},
1760
  sendToPreview = true, //<= the default behaviour is to send a message to the preview when the setting has been changed
1761
  msgCollection = {
1762
+ // A section can be added in various scenarios :
1763
+ // - when clicking on the ( + ) Insert content => @see preview::scheduleUiClickReactions() => addContentButton
1764
+ // - when adding a nested section to a column
1765
+ // - when dragging a module in a 'between-sections' or 'in-empty-location' drop zone
1766
+ //
1767
+ // Note : if the target location level already has section(s), then the section is appended in ajax, at the right place
1768
+ // Note : if the target location is empty ( is_first_section is true ), nothing is send to the preview when updating the api setting, and we refresh the location level. => this makes sure that we removes the placeholder printed in the previously empty location
1769
  'sek-add-section' : {
1770
  callback : function( params ) {
1771
  sendToPreview = ! _.isUndefined( params.send_to_preview ) ? params.send_to_preview : true;//<= when the level is refreshed when complete, we don't need to send to preview.
1784
  return self.updateAPISetting( apiParams );
1785
  },
1786
  complete : function( params ) {
1787
+ // When a section is created ( not duplicated )
1788
  if ( params.apiParams.is_first_section ) {
1789
  api.previewer.trigger( 'sek-refresh-level', {
1790
  level : 'location',
1792
  });
1793
  }
1794
  api.previewer.trigger( 'sek-pick-content', {
1795
+ // the "id" param is added to set the target for double click insertion
1796
+ // implemented for https://github.com/presscustomizr/nimble-builder/issues/317
1797
  id : params.apiParams ? params.apiParams.id : '',
1798
  content_type : 'section'
1799
  });
1815
  return self.updateAPISetting( apiParams );
1816
  },
1817
  complete : function( params ) {
1818
+ // When adding a section, a nested column is automatically added
1819
+ // We want to focus on the module picker in this case, that's why the autofocus is set to false
1820
+ // @see 'sek-add-section' action description
1821
  if ( false !== params.apiParams.autofocus ) {
1822
  api.previewer.trigger( 'sek-pick-content', {});
1823
  }
1846
  in_sektion : params.apiParams.in_sektion,
1847
  in_column : params.apiParams.in_column
1848
  });
1849
+ // always update the root fonts property after a module addition
1850
+ // because there might be a google font specified in the starting value
1851
  self.updateAPISetting({
1852
  action : 'sek-update-fonts',
1853
  is_global_location : self.isGlobalLocation( params.apiParams )
1854
  });
1855
+
1856
+ // Refresh the stylesheet to generate the css rules of the clone
1857
+ // api.previewer.send( 'sek-refresh-stylesheet', {
1858
+ // location_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),//<= send skope id to the preview so we can use it when ajaxing
1859
+ // });
1860
  api.previewer.trigger('sek-refresh-stylesheet', {
1861
  id : params.apiParams.in_column,
1862
  location_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' )//<= send skope id to the preview so we can use it when ajaxing
1906
  },
1907
  complete : function( params ) {
1908
  api.previewer.trigger( 'sek-pick-content', {});
1909
+ // always update the root fonts property after a removal
1910
+ // because the removed level(s) might had registered fonts
1911
  self.updateAPISetting({
1912
  action : 'sek-update-fonts',
1913
  is_global_location : self.isGlobalLocation( params.apiParams )
1914
  });
1915
+
1916
+ // When the last section of a location gets removed, make sure we refresh the location level, to print the sek-empty-location-placeholder
1917
  if ( 'sek-remove-section' === params.apiParams.action ) {
1918
  var locationLevel = self.getLevelModel( params.apiParams.location );
1919
  if ( _.isEmpty( locationLevel.collection ) ) {
1972
  level : 'section',
1973
  in_sektion : params.apiParams.id
1974
  });
1975
+ // refresh location levels if the source and target location are differents
1976
  if ( params.apiParams.from_location != params.apiParams.to_location ) {
1977
  api.previewer.trigger( 'sek-refresh-level', {
1978
  level : 'location',
2046
  });
2047
  }
2048
  },
2049
+
2050
+ // the level will be cloned and walked to replace all ids by new one
2051
+ // then the level clone id will be send back to the preview for the ajax rendering ( this is done in updateAPISetting() promise() )
2052
  'sek-duplicate' : {
2053
  callback : function( params ) {
2054
  sendToPreview = true;
2093
  in_sektion : params.apiParams.id
2094
  });
2095
  idForStyleSheetRefresh = params.apiParams.location;
2096
+ // Focus on the cloned level
2097
  api.previewer.send('sek-animate-to-level', { id : params.apiParams.id });
2098
  break;
2099
  case 'sek-duplicate-column' :
2115
  idForStyleSheetRefresh = params.apiParams.in_column;
2116
  break;
2117
  }
2118
+ // Refresh the stylesheet to generate the css rules of the clone
2119
+ // api.previewer.send( 'sek-refresh-stylesheet', {
2120
+ // location_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),//<= send skope id to the preview so we can use it when ajaxing
2121
+ // });
2122
  api.previewer.trigger('sek-refresh-stylesheet', {
2123
  id : idForStyleSheetRefresh,
2124
  location_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' )//<= send skope id to the preview so we can use it when ajaxing
2132
  apiParams = params;
2133
  return self.updateAPISetting( apiParams );
2134
  },
2135
+
2136
+ // @params {
2137
+ // drop_target_element : $(this),
2138
+ // position : _position,
2139
+ // before_section : $(this).data('sek-before-section'),
2140
+ // after_section : $(this).data('sek-after-section'),
2141
+ // content_type : event.originalEvent.dataTransfer.getData( "sek-content-type" ),
2142
+ // content_id : event.originalEvent.dataTransfer.getData( "sek-content-id" )
2143
+ // }
2144
  'sek-add-content-in-new-sektion' : {
2145
  callback : function( params ) {
2146
  sendToPreview = ! _.isUndefined( params.send_to_preview ) ? params.send_to_preview : true;//<= when the level is refreshed when complete, we don't need to send to preview.
2149
  apiParams.action = 'sek-add-content-in-new-sektion';
2150
  apiParams.id = sektionsLocalizedData.optPrefixForSektionsNotSaved + self.guid();//we set the id here because it will be needed when ajaxing
2151
  switch( params.content_type) {
2152
+ // When a module is dropped in a section + column structure to be generated
2153
  case 'module' :
2154
  apiParams.droppedModuleId = sektionsLocalizedData.optPrefixForSektionsNotSaved + self.guid();//we set the id here because it will be needed when ajaxing
2155
  break;
2156
+
2157
+ // When a preset section is dropped
2158
  case 'preset_section' :
2159
  api.previewer.send( 'sek-maybe-print-loader', { loader_located_in_level_id : params.location });
2160
  api.previewer.send( 'sek-maybe-print-loader', { fullPageLoader : true });
2170
  id : params.apiParams.droppedModuleId
2171
  });
2172
  break;
2173
+ // Clean the full page loader if not autocleaned yet
2174
  case 'preset_section' :
2175
  api.previewer.send( 'sek-clean-loader', { cleanFullPageLoader : true });
2176
  break;
2177
  }
2178
+
2179
+ // Always update the root fonts property after a module addition
2180
+ // => because there might be a google font specified in the starting value or in a preset section
2181
  self.updateAPISetting({
2182
  action : 'sek-update-fonts',
2183
  is_global_location : self.isGlobalLocation( params.apiParams )
2184
  });
2185
+
2186
+ // Refresh the stylesheet to generate the css rules of the clone
2187
+ // api.previewer.send( 'sek-refresh-stylesheet', {
2188
+ // location_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),//<= send skope id to the preview so we can use it when ajaxing
2189
+ // });
2190
+
2191
+ // Use the location_skope_id provided if set, otherwise generate it
2192
  var location_skope_id = params.location_skope_id;
2193
  if ( _.isUndefined( location_skope_id ) ) {
2194
  location_skope_id = true === params.is_global_location ? sektionsLocalizedData.globalSkopeId : api.czr_skopeBase.getSkopeProperty( 'skope_id' );
2195
  }
2196
  api.previewer.trigger('sek-refresh-stylesheet', {
2197
+ //id : params.apiParams.location,
2198
  location_skope_id : location_skope_id,//<= send skope id to the preview so we can use it when ajaxing
2199
  is_global_location : self.isGlobalLocation( params.apiParams )
2200
  });
2201
+
2202
+ // Refresh when a section is created ( not duplicated )
2203
  if ( params.apiParams.is_first_section ) {
2204
  api.previewer.trigger( 'sek-refresh-level', {
2205
  level : 'location',
2206
  id : params.apiParams.location
2207
  });
2208
  }
2209
+
2210
+ // Remove the sektion_to_replace when dropping a preset_section in an empty section ( <= the one to replace )
2211
  if ( params.apiParams.sektion_to_replace ) {
2212
  api.previewer.trigger( 'sek-remove', {
2213
  id : params.apiParams.sektion_to_replace,
2216
  level : 'section'
2217
  });
2218
  }
2219
+
2220
+ // Refresh the stylesheet again after a delay
2221
+ // For the moment, some styling, like fonts are not
2222
+ // @todo fix => see why we need to do it.
2223
+ // _.delay( function() {
2224
+ // // Refresh the stylesheet to generate the css rules of the module
2225
+ // api.previewer.send( 'sek-refresh-stylesheet', {
2226
+ // location_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),//<= send skope id to the preview so we can use it when ajaxing
2227
+ // });
2228
+ // }, 1000 );
2229
  }
2230
  },
2231
+
2232
+
2233
+ // @params {
2234
+ // drop_target_element : $(this),
2235
+ // position : _position,
2236
+ // before_section : $(this).data('sek-before-section'),
2237
+ // after_section : $(this).data('sek-after-section'),
2238
+ // content_type : event.originalEvent.dataTransfer.getData( "sek-content-type" ),
2239
+ // content_id : event.originalEvent.dataTransfer.getData( "sek-content-id" )
2240
+ // }
2241
  'sek-add-preset-section-in-new-nested-sektion' : {
2242
  callback : function( params ) {
2243
  sendToPreview = false;//<= when the level is refreshed when complete, we don't need to send to preview.
2249
  return self.updateAPISetting( apiParams );
2250
  },
2251
  complete : function( params ) {
2252
+ // Refresh the stylesheet to generate the css rules of the clone
2253
+ // api.previewer.send( 'sek-refresh-stylesheet', {
2254
+ // location_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),//<= send skope id to the preview so we can use it when ajaxing
2255
+ // });
2256
  api.previewer.trigger('sek-refresh-stylesheet', {
2257
  id : params.apiParams.in_sektion,
2258
  location_skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' )//<= send skope id to the preview so we can use it when ajaxing
2259
  });
2260
+
2261
+ // Always update the root fonts property after a module addition
2262
+ // => because there might be a google font specified in the starting value or in a preset section
2263
  self.updateAPISetting({
2264
  action : 'sek-update-fonts',
2265
  is_global_location : self.isGlobalLocation( params.apiParams )
2271
  });
2272
  }
2273
  },
2274
+
2275
+
2276
+
2277
+
2278
+
2279
+
2280
+
2281
+ // GENERATE UI ELEMENTS
2282
  'sek-pick-content' : function( params ) {
2283
  params = _.isObject(params) ? params : {};
2284
+ // Set the active content type here
2285
+ // This is used in api.czrInputMap.content_type_switcher()
2286
+ // Fixes issue https://github.com/presscustomizr/nimble-builder/issues/248
2287
  api.czr_sektions.currentContentPickerType = api.czr_sektions.currentContentPickerType || new api.Value();
2288
  api.czr_sektions.currentContentPickerType( params.content_type || 'module' );
2289
+
2290
+ // Set the last clicked target element id now => will be used for double click insertion of module / section
2291
  if ( _.isObject( params ) && params.id ) {
2292
+ // self reset after a moment.
2293
+ // @see CZRSeksPrototype::initialize
2294
+ // implemented for https://github.com/presscustomizr/nimble-builder/issues/317
2295
  self.lastClickedTargetInPreview( { id : params.id } );
2296
  }
2297
 
2301
  uiParams = {
2302
  action : 'sek-generate-draggable-candidates-picker-ui',
2303
  content_type : params.content_type || 'module',
2304
+ // <= the "was_triggered" param can be used to determine if we need to animate the picker control or not. @see ::generateUI() case 'sek-generate-draggable-candidates-picker-ui'
2305
+ // true by default, because this is the most common scenario ( when adding a section, a column ... )
2306
+ // but false when clicking on the + ui icon in the preview
2307
  was_triggered : _.has( params, 'was_triggered' ) ? params.was_triggered : true,
2308
  focus : _.has( params, 'focus' ) ? params.focus : true
2309
  };
2341
  };
2342
  return self.generateUI( uiParams );
2343
  },
2344
+
2345
+
2346
+ // OTHER MESSAGE TYPES
2347
+ // @params {
2348
+ // type : info, error, success
2349
+ // message : ''
2350
+ // duration : in ms
2351
+ // }
2352
  'sek-notify' : function( params ) {
2353
  sendToPreview = false;
2354
  return $.Deferred(function() {
2358
  message: params.message,
2359
  dismissible: true
2360
  } ) );
2361
+
2362
+ // Removed if not dismissed after 5 seconds
2363
  _.delay( function() {
2364
  api.notifications.remove( 'sek-notify' );
2365
  }, params.duration || 5000 );
2366
  });
2367
+ // always pass the local or global skope of the currently customized location id when resolving the promise.
2368
+ // It will be send to the preview and used when ajaxing
2369
  this.resolve({
2370
  is_global_location : self.isGlobalLocation( params )
2371
  });
2381
  id : params.id
2382
  };
2383
  uiParams = {};
2384
+ // always pass the local or global skope of the currently customized location id when resolving the promise.
2385
+ // It will be send to the preview and used when ajaxing
2386
  _dfd_.resolve({
2387
  is_global_location : self.isGlobalLocation( params )
2388
  });
2395
  return $.Deferred(function(_dfd_) {
2396
  apiParams = {id : params.id};
2397
  uiParams = {};
2398
+ // always pass the local or global skope of the currently customized location id when resolving the promise.
2399
+ // It will be send to the preview and used when ajaxing
2400
  _dfd_.resolve({
2401
  is_global_location : self.isGlobalLocation( params )
2402
  });
2408
  self.saveUIVisible( true, params );
2409
  return $.Deferred(function(_dfd_) {
2410
  apiParams = {
2411
+ // action : 'sek-refresh-level',
2412
+ // level : params.level,
2413
+ // id : params.id
2414
  };
2415
  uiParams = {};
2416
+ // always pass the local or global skope of the currently customized location id when resolving the promise.
2417
+ // It will be send to the preview and used when ajaxing
2418
  _dfd_.resolve({
2419
  is_global_location : self.isGlobalLocation( params )
2420
  });
2421
  });
2422
  }
2423
  };//msgCollection
2424
+
2425
+ // Schedule the reactions
2426
+ // May be send a message to the preview
2427
  _.each( msgCollection, function( callbackFn, msgId ) {
2428
  api.previewer.bind( msgId, function( params ) {
2429
  var _cb_;
2437
  }
2438
 
2439
  try { _cb_( params )
2440
+ // the cloneId is passed when resolving the ::updateAPISetting() promise()
2441
+ // they are needed on level duplication to get the newly generated level id.
2442
  .done( function( promiseParams ) {
2443
  promiseParams = promiseParams || {};
2444
+ // Send to the preview
2445
  if ( sendToPreview ) {
2446
  api.previewer.send(
2447
  msgId,
2454
  }
2455
  );
2456
  } else {
2457
+ // if nothing was sent to the preview, trigger the '*_done' action so we can execute the 'complete' callback
2458
  api.previewer.trigger( [ msgId, 'done' ].join('_'), { apiParams : apiParams, uiParams : uiParams } );
2459
  }
2460
+ // say it
2461
  self.trigger( [ msgId, 'done' ].join('_'), params );
2462
  })
2463
  .fail( function( er ) {
2464
  api.errare( 'reactToPreviewMsg => error when firing ' + msgId, er );
2465
+ // api.panel( sektionsLocalizedData.sektionsPanelId, function( __main_panel__ ) {
2466
+ // api.notifications.add( new api.Notification( 'sek-react-to-preview', {
2467
+ // type: 'info',
2468
+ // message: er,
2469
+ // dismissible: true
2470
+ // } ) );
2471
+
2472
+ // // Removed if not dismissed after 5 seconds
2473
+ // _.delay( function() {
2474
+ // api.notifications.remove( 'sek-react-to-preview' );
2475
+ // }, 5000 );
2476
+ // });
2477
  api.previewer.trigger('sek-notify', {
2478
  type : 'error',
2479
  duration : 30000,
2481
  '<span style="font-size:0.95em">',
2482
  '<strong>' + er + '</strong>',
2483
  '<br>',
2484
+ sektionsLocalizedData.i18n['If this problem locks Nimble Builder, you can try resetting the sections of this page.'],
2485
  '<br>',
2486
  '<span style="text-align:center;display:block">',
2487
  '<button type="button" class="button" aria-label="' + sektionsLocalizedData.i18n.Reset + '" data-sek-reset="true">' + sektionsLocalizedData.i18n.Reset + '</button>',
2495
  }
2496
  });
2497
  });
2498
+
2499
+
2500
+ // Schedule actions when callback done msg is sent by the preview
2501
  _.each( msgCollection, function( callbackFn, msgId ) {
2502
  api.previewer.bind( [ msgId, 'done' ].join('_'), function( params ) {
2503
  if ( _.isFunction( callbackFn.complete ) ) {
2508
  });
2509
  });
2510
  },//reactToPreview();
2511
+
2512
+
2513
+
2514
+
2515
+
2516
+
2517
+ // Fired in initialized on api(ready)
2518
  schedulePrintSectionJson : function() {
2519
  var self = this;
2520
  var popupCenter = function ( content ) {
2521
  w = 400;
2522
  h = 300;
2523
+ // Fixes dual-screen position Most browsers Firefox
2524
  var dualScreenLeft = ! _.isUndefined( window.screenLeft ) ? window.screenLeft : window.screenX;
2525
  var dualScreenTop = ! _.isUndefined( window.screenTop ) ? window.screenTop : window.screenY;
2526
 
2534
  doc.open("text/html");
2535
  doc.write( content );
2536
  doc.close();
2537
+ // Puts focus on the newWindow
2538
  if (window.focus) {
2539
  newWindow.focus();
2540
  }
2543
  api.previewer.bind( 'sek-to-json', function( params ) {
2544
  var sectionModel = $.extend( true, {}, self.getLevelModel( params.id ) );
2545
  console.log( JSON.stringify( self.cleanIds( sectionModel ) ) );
2546
+ //popupCenter( JSON.stringify( cleanIds( sectionModel ) ) );
2547
  });
2548
  }//schedulePrintSectionJson
2549
  });//$.extend()
2551
  var CZRSeksPrototype = CZRSeksPrototype || {};
2552
  (function ( api, $ ) {
2553
  $.extend( CZRSeksPrototype, {
2554
+ // @params = {
2555
+ // action : 'sek-generate-module-ui' / 'sek-generate-level-options-ui'
2556
+ // level : params.level,
2557
+ // id : params.id,
2558
+ // in_sektion : params.in_sektion,
2559
+ // in_column : params.in_column,
2560
+ // options : params.options || []
2561
+ // }
2562
+ // @return promise()
2563
  generateUI : function( params ) {
2564
  var self = this,
2565
  dfd = $.Deferred();
2567
  if ( _.isEmpty( params.action ) ) {
2568
  dfd.reject( 'generateUI => missing action' );
2569
  }
2570
+
2571
+ // REGISTER SETTING AND CONTROL
2572
  switch ( params.action ) {
2573
+ // FRONT AND LEVEL MODULES UI
2574
+ // The registered elements are cleaned (self.cleanRegistered()) in the callbacks,
2575
+ // because we want to check if the requested UI is not the one already rendered, and fire a button-see-me animation if yes.
2576
  case 'sek-generate-module-ui' :
2577
  try{ dfd = self.generateUIforFrontModules( params, dfd ); } catch( er ) {
2578
  api.errare( '::generateUI() => error', er );
2586
  dfd = $.Deferred();
2587
  }
2588
  break;
2589
+
2590
+ // Possible content types :
2591
+ // 1) module
2592
+ // 2) preset_section
2593
  case 'sek-generate-draggable-candidates-picker-ui' :
2594
+ // Clean previously generated UI elements
2595
  self.cleanRegistered();
2596
  try{ dfd = self.generateUIforDraggableContent( params, dfd ); } catch( er ) {
2597
  api.errare( '::generateUI() => error', er );
2598
  dfd = $.Deferred();
2599
  }
2600
  break;
2601
+
2602
+ // Fired in ::initialize()
2603
  case 'sek-generate-local-skope-options-ui' :
2604
+ // Clean previously generated UI elements
2605
  self.cleanRegistered();
2606
  try{ dfd = self.generateUIforLocalSkopeOptions( params, dfd ); } catch( er ) {
2607
  api.errare( '::generateUI() => error', er );
2608
  dfd = $.Deferred();
2609
  }
2610
  break;
2611
+
2612
+ // Fired in ::initialize()
2613
  case 'sek-generate-global-options-ui' :
2614
+ // Clean previously generated UI elements
2615
  self.cleanRegistered();
2616
  try{ dfd = self.generateUIforGlobalOptions( params, dfd ); } catch( er ) {
2617
  api.errare( '::generateUI() => error', er );
2622
 
2623
  return 'pending' == dfd.state() ? dfd.resolve().promise() : dfd.promise();//<= we might want to resolve on focus.completeCallback ?
2624
  },//generateUI()
2625
+
2626
+
2627
+
2628
+
2629
+
2630
+
2631
+
2632
+ // @params = {
2633
+ // uiParams : params,
2634
+ // options_type : 'spacing',
2635
+ // settingParams : {
2636
+ // to : to,
2637
+ // from : from,
2638
+ // args : args
2639
+ // }
2640
+ // }
2641
+ //
2642
+ // @param settingParams.args = {
2643
+ // inputRegistrationParams : {
2644
+ // id :,
2645
+ // type :
2646
+ // refresh_markup : bool
2647
+ // refresh_stylesheet : bool
2648
+ // refresh_fonts : bool
2649
+ // }
2650
+ // input_changed : input_id
2651
+ // input_transport : 'inherit'/'postMessage',
2652
+ // module : { items : [...]}
2653
+ // module_id :
2654
+ // not_preview_sent : bool
2655
+ //}
2656
+ //
2657
+ // Note 1 : this method must handle two types of modules :
2658
+ // 1) mono item modules, for which the settingParams.to is an object, a single item object
2659
+ // 2) multi-items modules, for which the settingParams.to is an array, a collection of item objects
2660
+ // How do we know that we are a in single / multi item module ?
2661
+ //
2662
+ // Note 2 : we must also handle several scenarios of module value update :
2663
+ // 1) mono-items and multi-items module => input change
2664
+ // 2) crud multi item => item added or removed => in this case some args are not passed, like params.settingParams.args.inputRegistrationParams
2665
  updateAPISettingAndExecutePreviewActions : function( params ) {
2666
  if ( _.isEmpty( params.settingParams ) || ! _.has( params.settingParams, 'to' ) ) {
2667
  api.errare( 'updateAPISettingAndExecutePreviewActions => missing params.settingParams.to. The api main setting can not be updated', params );
2668
  return;
2669
  }
2670
  var self = this;
2671
+
2672
+ // NORMALIZE THE VALUE WE WANT TO WRITE IN THE MAIN SETTING
2673
+ // 1) We don't want to store the default title and id module properties
2674
+ // 2) We don't want to write in db the properties that are set to their default values
2675
  var rawModuleValue = params.settingParams.to,
2676
  moduleValueCandidate,// {} or [] if mono item of multi-item module
2677
  parentModuleType = null,
2692
  } else {
2693
  api.errare( 'updateAPISettingAndExecutePreviewActions => missing parentModuleInstance', params );
2694
  }
2695
+
2696
+
2697
+
2698
+ // The new module value can be a single item object if monoitem module, or an array of item objects if multi-item crud
2699
+ // Let's normalize it
2700
  if ( ! isMultiItemModule && _.isObject( rawModuleValue ) ) {
2701
  moduleValueCandidate = self.normalizeAndSanitizeSingleItemInputValues( rawModuleValue, parentModuleType );
2702
  } else {
2705
  moduleValueCandidate.push( self.normalizeAndSanitizeSingleItemInputValues( item, parentModuleType ) );
2706
  });
2707
  }
2708
+
2709
+ // WHAT TO REFRESH IN THE PREVIEW ? Markup, stylesheet, font ?
2710
+ // The action to trigger is determined by the changed input
2711
+ // For the options of a level, the default action is to refresh the stylesheet.
2712
+ // But we might need to refresh the markup in some cases. Like for example when a css class is added. @see the boxed-wide layout example
2713
  if ( _.isEmpty( params.defaultPreviewAction ) ) {
2714
  api.errare( 'updateAPISettingAndExecutePreviewActions => missing defaultPreviewAction in passed params. No action can be triggered to the api.previewer.', params );
2715
  return;
2716
  }
2717
+ // Set the default value
2718
  var refresh_stylesheet = 'refresh_stylesheet' === params.defaultPreviewAction,//<= default action for level options
2719
  refresh_markup = 'refresh_markup' === params.defaultPreviewAction,//<= default action for module options
2720
  refresh_fonts = 'refresh_fonts' === params.defaultPreviewAction,
2721
  refresh_preview = 'refresh_preview' === params.defaultPreviewAction;
2722
+
2723
+ // Maybe set the input based value
2724
  var input_id = params.settingParams.args.input_changed;
2725
  var inputRegistrationParams;
2726
  if ( ! _.isUndefined( input_id ) ) {
2740
  }
2741
 
2742
  var _doUpdateWithRequestedAction = function() {
2743
+ // GLOBAL OPTIONS CASE => SITE WIDE => WRITING IN A SPECIFIC OPTION, SEPARATE FROM THE SEKTION
2744
  if ( true === params.isGlobalOptions ) {
2745
  if ( _.isEmpty( params.options_type ) ) {
2746
  api.errare( 'updateAPISettingAndExecutePreviewActions => error when updating the global options => missing options_type');
2747
  return;
2748
  }
2749
+ //api( sektionsLocalizedData.optNameForGlobalOptions )() is registered on ::initialize();
2750
  var rawGlobalOptions = api( sektionsLocalizedData.optNameForGlobalOptions )(),
2751
  clonedGlobalOptions = $.extend( true, {}, _.isObject( rawGlobalOptions ) ? rawGlobalOptions : {} ),
2752
  _valueCandidate = {};
2753
+
2754
+ // consider only the non empty settings for db
2755
+ // booleans should bypass this check
2756
  _.each( moduleValueCandidate || {}, function( _val_, _key_ ) {
2757
+ // Note : _.isEmpty( 5 ) returns true when checking an integer,
2758
+ // that's why we need to cast the _val_ to a string when using _.isEmpty()
2759
  if ( ! _.isBoolean( _val_ ) && _.isEmpty( _val_ + "" ) )
2760
  return;
2761
  _valueCandidate[ _key_ ] = _val_;
2762
  });
2763
 
2764
  clonedGlobalOptions[ params.options_type ] = _valueCandidate;
2765
+
2766
+ // Set it
2767
  api( sektionsLocalizedData.optNameForGlobalOptions )( clonedGlobalOptions );
2768
  } else {
2769
+ // LEVEL OPTION CASE => LOCAL
2770
  return self.updateAPISetting({
2771
  action : params.uiParams.action,// mandatory : 'sek-generate-level-options-ui', 'sek-generate-local-skope-options-ui',...
2772
  id : params.uiParams.id,
2773
  value : moduleValueCandidate,
2774
  in_column : params.uiParams.in_column,//not mandatory
2775
  in_sektion : params.uiParams.in_sektion,//not mandatory
2776
+
2777
+ // specific for level options and local skope options
2778
  options_type : params.options_type,// mandatory : 'layout', 'spacing', 'bg_border', 'height', ...
2779
 
2780
  settingParams : params.settingParams
2781
  }).done( function( promiseParams ) {
2782
+ // STYLESHEET => default action when modifying the level options
2783
  if ( true === refresh_stylesheet ) {
2784
  api.previewer.send( 'sek-refresh-stylesheet', {
2785
  location_skope_id : true === promiseParams.is_global_location ? sektionsLocalizedData.globalSkopeId : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),//<= send skope id to the preview so we can use it when ajaxing
2791
  },
2792
  });
2793
  }
2794
+
2795
+ // MARKUP
2796
  if ( true === refresh_markup ) {
2797
  api.previewer.send( 'sek-refresh-level', {
2798
  location_skope_id : true === promiseParams.is_global_location ? sektionsLocalizedData.globalSkopeId : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),//<= send skope id to the preview so we can use it when ajaxing
2805
  skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),//<= send skope id to the preview so we can use it when ajaxing
2806
  });
2807
  }
2808
+
2809
+ // REFRESH THE PREVIEW ?
2810
  if ( true === refresh_preview ) {
2811
  api.previewer.refresh();
2812
  }
2813
  });//self.updateAPISetting()
2814
  }
2815
  };//_doUpdateWithRequestedAction
2816
+
2817
+ // if the changed input is a google font modifier ( <=> true === refresh_fonts )
2818
+ // => we want to first refresh the google font collection, and then proceed the requested action
2819
+ // this way we make sure that the customized value used when ajaxing will take into account when writing the google font http request link
2820
  if ( true === refresh_fonts ) {
2821
  var newFontFamily = params.settingParams.args.input_value;
2822
  if ( ! _.isString( newFontFamily ) ) {
2823
  api.errare( 'updateAPISettingAndExecutePreviewActions => font-family must be a string', newFontFamily );
2824
  return;
2825
  }
2826
+
2827
+ // add it only if gfont
2828
  if ( newFontFamily.indexOf('gfont') > -1 ) {
2829
  self.updateAPISetting({
2830
  action : 'sek-update-fonts',
2831
  font_family : newFontFamily,
2832
  is_global_location : self.isGlobalLocation( params.uiParams )
2833
  })
2834
+ // we use always() instead of done here, because the api section setting might not be changed ( and therefore return a reject() promise ).
2835
+ // => this can occur when a user is setting a google font already picked elsewhere
2836
+ // @see case 'sek-update-fonts'
2837
  .always( function() {
2838
  _doUpdateWithRequestedAction().then( function() {
2839
+ // always refresh again after
2840
+ // Why ?
2841
+ // Because the first refresh was done before actually setting the new font family, so based on a previous set of fonts
2842
+ // which leads to have potentially an additional google fonts that we don't need after the first refresh
2843
+ // that's why this second refresh is required. It wont trigger any preview ajax actions. Simply refresh the root fonts property of the main api setting.
2844
  self.updateAPISetting({
2845
  action : 'sek-update-fonts',
2846
  is_global_location : self.isGlobalLocation( params.uiParams )
2854
  _doUpdateWithRequestedAction();
2855
  }
2856
  },//updateAPISettingAndExecutePreviewActions
2857
+
2858
+
2859
+
2860
+
2861
+
2862
+
2863
+
2864
+
2865
+
2866
+
2867
+
2868
+
2869
+ // @return a normalized and sanitized item value
2870
+ // What does this helper do ?
2871
+ // 1) remove title and id properties, we don't need them in db
2872
+ // 2) don't write if is equal to default
2873
  normalizeAndSanitizeSingleItemInputValues : function( _item_, parentModuleType ) {
2874
  var itemNormalized = {},
2875
  itemNormalizedAndSanitized = {},
2888
  } else if ( _.isObject( _val ) && _.isObject( _default ) ) {
2889
  equal = _.isEqual( _val,_default );
2890
  } else if ( _.isArray( _val ) && _.isArray( _default ) ) {
2891
+ //@see https://stackoverflow.com/questions/39517316/check-for-equality-between-two-array
2892
  equal = JSON.stringify(_val.sort()) === JSON.stringify(_default.sort());
2893
  } else {
2894
  equal = _val === _default;
2895
  }
2896
  return equal;
2897
  };
2898
+
2899
+ // NORMALIZE
2900
+ // title, id and module_type don't need to be saved in database
2901
+ // title and id are legacy entries that can be used in multi-items modules to identify and name the item
2902
+ // @see ::getDefaultItemModelFromRegisteredModuleData()
2903
  _.each( _item_, function( _val, input_id ) {
2904
  if ( _.contains( ['title', 'id' ], input_id ) )
2905
  return;
2912
  }
2913
  if ( isEqualToDefault( _val, inputDefaultValue ) ) {
2914
  return;
2915
+ // When the value is a string of an object, no need to write an empty value
2916
  } else if ( ( _.isString( _val ) || _.isObject( _val ) ) && _.isEmpty( _val ) ) {
2917
  return;
2918
  } else {
2919
  itemNormalized[ input_id ] = _val;
2920
  }
2921
  });
2922
+
2923
+
2924
+ // SANITIZE
2925
  _.each( itemNormalized, function( _val, input_id ) {
2926
+ // @see extend_api_base.js
2927
+ // @see sektions::_7_0_sektions_add_inputs_to_api.js
2928
  switch( self.getInputType( input_id, parentModuleType ) ) {
2929
  case 'text' :
2930
  case 'textarea' :
2964
  });
2965
  return itemNormalizedAndSanitized;
2966
  },
2967
+
2968
+
2969
+
2970
+
2971
+
2972
+
2973
+
2974
+
2975
+
2976
+
2977
+
2978
+ // Is the UI currently displayed the one that is being requested ?
2979
+ // If so, don't generate the ui again
2980
+ // @return bool
2981
  isUIControlAlreadyRegistered : function( uiElementId ) {
2982
  var self = this,
2983
  uiCandidate = _.filter( self.registered(), function( registered ) {
2984
  return registered.id == uiElementId && 'control' === registered.what;
2985
  }),
2986
  controlIsAlreadyRegistered = false;
2987
+
2988
+ // If the control is not been tracked in our self.registered(), let's check if it is registered in the api
2989
+ // Typically, the module / section picker will match that case, because we don't keep track of it ( so it's not cleaned )
2990
  if ( _.isEmpty( uiCandidate ) ) {
2991
  controlIsAlreadyRegistered = api.control.has( uiElementId );
2992
  } else {
2993
  controlIsAlreadyRegistered = true;
2994
+ // we should have only one uiCandidate with this very id
2995
  if ( uiCandidate.length > 1 ) {
2996
  api.errare( 'generateUI => why is this control registered more than once ? => ' + uiElementId );
2997
  }
3003
  var CZRSeksPrototype = CZRSeksPrototype || {};
3004
  (function ( api, $ ) {
3005
  $.extend( CZRSeksPrototype, {
3006
+ // @params = {
3007
+ // action : 'sek-generate-module-ui' / 'sek-generate-level-options-ui'
3008
+ // level : params.level,
3009
+ // id : params.id,
3010
+ // in_sektion : params.in_sektion,
3011
+ // in_column : params.in_column,
3012
+ // options : params.options || []
3013
+ // }
3014
+ // @dfd = $.Deferred()
3015
+ // @return the state promise dfd
3016
  generateUIforDraggableContent : function( params, dfd ) {
3017
  var self = this;
3018
+ // Prepare the module map to register
3019
  var registrationParams = {};
3020
 
3021
  $.extend( registrationParams, {
3025
  controlLabel : sektionsLocalizedData.i18n['Select a content type'],
3026
  priority : 0,
3027
  settingValue : { content_type : params.content_type }
3028
+ //icon : '<i class="material-icons sek-level-option-icon">center_focus_weak</i>'
3029
  },
3030
  module_picker : {
3031
  settingControlId : sektionsLocalizedData.optPrefixForSektionsNotSaved + '_sek_draggable_modules_ui',
3073
  icon : '<i class="fas fa-grip-vertical sek-level-option-icon"></i>'
3074
  }
3075
  });
3076
+
3077
+ // Header and footer have been introduced in v1.4.0 but not enabled by default
3078
+ // The header and footer preset sections are on hold until "header and footer" feature is released.
3079
  if ( sektionsLocalizedData.isNimbleHeaderFooterEnabled ) {
3080
  $.extend( registrationParams, {
3081
  sek_header_sec_picker_module : {
3112
  }
3113
  });
3114
  }
3115
+
3116
+
3117
+ // BAIL WITH A SEE-ME ANIMATION IF THIS UI IS CURRENTLY BEING DISPLAYED
3118
+ // Is the UI currently displayed the one that is being requested ?
3119
+ // If so :
3120
+ // 1) visually remind the user that a module should be dragged
3121
+ // 2) pass the content_type param to display the requested content_type
3122
  var firstKey = _.keys( registrationParams )[0],
3123
  firstControlId = registrationParams[firstKey].settingControlId;
3124
 
3127
  _control_.focus({
3128
  completeCallback : function() {
3129
  var $container = _control_.container;
3130
+ // @use button-see-mee css class declared in core in /wp-admin/css/customize-controls.css
3131
  if ( $container.hasClass( 'button-see-me') )
3132
  return;
3133
  $container.addClass('button-see-me');
3140
 
3141
  return dfd;
3142
  }//if
3143
+
3144
+
3145
+ // @return void()
3146
  _do_register_ = function() {
3147
  _.each( registrationParams, function( optionData, optionType ){
3148
  if ( ! api.has( optionData.settingControlId ) ) {
3149
+ // synchronize the module setting with the main collection setting
3150
  api( optionData.settingControlId, function( _setting_ ) {
3151
  _setting_.bind( function( to, from ) {
3152
  api.errare('generateUIforDraggableContent => the setting() should not changed');
3178
  track : false//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
3179
  }).done( function() {
3180
  api.control( optionData.settingControlId, function( _control_ ) {
3181
+ // set the control type property
3182
  _control_.content_type = optionData.content_type;//<= used to handle visibility when switching content type with the "content_type_switcher" control
3183
+
3184
+ // we set the focus to false when firing api.previewer.trigger( 'sek-pick-content', { focus : false }); in ::initialize()
3185
  if ( true === params.focus ) {
3186
  _control_.focus({
3187
  completeCallback : function() {}
3190
 
3191
  var $title = _control_.container.find('label > .customize-control-title'),
3192
  _titleContent = $title.html();
3193
+ // We wrap the original text content in this span.sek-ctrl-accordion-title in order to style it (underlined) independently ( without styling the icons next to it )
3194
  $title.html( ['<span class="sek-ctrl-accordion-title">', _titleContent, '</span>' ].join('') );
3195
+
3196
+ // if this level has an icon, let's prepend it to the title
3197
  if ( ! _.isUndefined( optionData.icon ) ) {
3198
  $title.addClass('sek-flex-vertical-center').prepend( optionData.icon );
3199
  }
3200
+
3201
+ // ACCORDION
3202
+ // Setup the accordion only for section content type
3203
  if ( 'section' === _control_.content_type ) {
3204
+ // Hide the item wrapper
3205
  _control_.container.find('.czr-items-wrapper').hide();
3206
+ // prepend the animated arrow
3207
  $title.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>');
3208
+ // setup the initial state + initial click
3209
  _control_.container.attr('data-sek-expanded', "false" );
3210
  if ( true === optionData.expandAndFocusOnInit && "false" == _control_.container.attr('data-sek-expanded' ) ) {
3211
  _control_.container.find('.czr-items-wrapper').show();
3219
  });
3220
  });//_.each
3221
  };//_do_register_
3222
+
3223
+
3224
+ // the self.SECTION_ID_FOR_CONTENT_PICKER section is registered on initialize
3225
+ // @fixes https://github.com/presscustomizr/nimble-builder/issues/187
3226
  api.section( self.SECTION_ID_FOR_CONTENT_PICKER, function( _section_ ) {
3227
  _do_register_();
3228
+
3229
+ // Style the section title
3230
  var $sectionTitleEl = _section_.container.find('.accordion-section-title'),
3231
  $panelTitleEl = _section_.container.find('.customize-section-title h3');
3232
+
3233
+ // The default title looks like this : Title <span class="screen-reader-text">Press return or enter to open this section</span>
3234
  if ( 0 < $sectionTitleEl.length && $sectionTitleEl.find('.sek-level-option-icon').length < 1 ) {
3235
  $sectionTitleEl.prepend( '<i class="fas fa-grip-vertical sek-level-option-icon"></i>' );
3236
  }
3237
+
3238
+ // The default title looks like this : <span class="customize-action">Customizing</span> Title
3239
  if ( 0 < $panelTitleEl.length && $panelTitleEl.find('.sek-level-option-icon').length < 1 ) {
3240
  $panelTitleEl.find('.customize-action').after( '<i class="fas fa-grip-vertical sek-level-option-icon"></i>' );
3241
  }
3242
+
3243
+ // Schedule the accordion behaviour
3244
  self.scheduleModuleAccordion.call( _section_, { expand_first_control : true } );
3245
+
3246
+ // Fetch the presetSectionCollection from the server now, so we save a few milliseconds when injecting the first preset_section
3247
+ // it populates api.sek_presetSections
3248
  self._maybeFetchSectionsFromServer();
3249
  });
3250
  return dfd;
3254
  var CZRSeksPrototype = CZRSeksPrototype || {};
3255
  (function ( api, $ ) {
3256
  $.extend( CZRSeksPrototype, {
3257
+ // @params = {
3258
+ // action : 'sek-generate-module-ui' / 'sek-generate-level-options-ui'
3259
+ // level : params.level,
3260
+ // id : params.id,
3261
+ // in_sektion : params.in_sektion,
3262
+ // in_column : params.in_column,
3263
+ // options : params.options || []
3264
+ // }
3265
+ // @dfd = $.Deferred()
3266
+ // @return the state promise dfd
3267
  generateUIforFrontModules : function( params, dfd ) {
3268
  var self = this;
3269
  if ( _.isEmpty( params.id ) ) {
3270
  dfd.reject( 'generateUI => missing id' );
3271
  }
3272
+
3273
+ // For modules, we need to generate a UI for the module value
3274
  var moduleValue = self.getLevelProperty({
3275
  property : 'value',
3276
  id : params.id
3286
  if ( _.isEmpty( moduleType ) ) {
3287
  dfd.reject( 'generateUI => module => invalid module_type' );
3288
  }
3289
+
3290
+ // Prepare the module map to register
3291
  var modulesRegistrationParams = {};
3292
 
3293
  if ( true === self.getRegisteredModuleProperty( moduleType, 'is_father' ) ) {
3300
  settingControlId : params.id + '__' + optionType,
3301
  module_type : mod_type,
3302
  controlLabel : self.getRegisteredModuleProperty( mod_type, 'name' )
3303
+ //icon : '<i class="material-icons sek-level-option-icon">code</i>'
3304
  };
3305
  });
3306
  }
3309
  settingControlId : params.id,
3310
  module_type : moduleType,
3311
  controlLabel : moduleName
3312
+ //icon : '<i class="material-icons sek-level-option-icon">code</i>'
3313
  };
3314
  }
3315
+
3316
+ // BAIL WITH A SEE-ME ANIMATION IF THIS UI IS CURRENTLY BEING DISPLAYED
3317
+ // Is the UI currently displayed the one that is being requested ?
3318
+ // Check if the first control of the list is already registered
3319
+ // If so, visually remind the user and break;
3320
  var firstKey = _.keys( modulesRegistrationParams )[0],
3321
  firstControlId = modulesRegistrationParams[firstKey].settingControlId;
3322
 
3324
  api.control( firstControlId ).focus({
3325
  completeCallback : function() {
3326
  var $container = api.control( firstControlId ).container;
3327
+ // @use button-see-mee css class declared in core in /wp-admin/css/customize-controls.css
3328
  if ( $container.hasClass( 'button-see-me') )
3329
  return;
3330
  $container.addClass('button-see-me');
3335
  });
3336
  return dfd;
3337
  }//if
3338
+
3339
+ // Clean previously generated UI elements
3340
  self.cleanRegistered();
3341
 
3342
  _do_register_ = function() {
3343
  _.each( modulesRegistrationParams, function( optionData, optionType ){
3344
+ // Make sure this setting is bound only once !
3345
  if ( ! api.has( optionData.settingControlId ) ) {
3346
  var doUpdate = function( to, from, args ) {
3347
  try { self.updateAPISettingAndExecutePreviewActions({
3357
  api.errare( '::generateUIforFrontModules => Error in updateAPISettingAndExecutePreviewActions', er );
3358
  }
3359
  };
3360
+
3361
+ // Schedule the binding to synchronize the module setting with the main collection setting
3362
+ // Note 1 : unlike control or sections, the setting are not getting cleaned up on each ui generation.
3363
+ // They need to be kept in order to keep track of the changes in the customizer.
3364
+ // => that's why we check if ! api.has( ... )
3365
  api( optionData.settingControlId, function( _setting_ ) {
3366
  _setting_.bind( _.debounce( doUpdate, self.SETTING_UPDATE_BUFFER ) );//_setting_.bind( _.debounce( function( to, from, args ) {}
3367
  });
3389
  what : 'control',
3390
  id : optionData.settingControlId,
3391
  label : optionData.controlLabel,
3392
+ //label : sektionsLocalizedData.i18n['Customize the options for module :'] + ' ' + optionData.controlLabel,
3393
  type : 'czr_module',//sekData.controlType,
3394
  module_type : optionData.module_type,
3395
  section : params.id,
3396
  priority : 10,
3397
  settings : { default : optionData.settingControlId }
3398
  }).done( function() {});
3399
+
3400
+ // Implement the animated arrow markup, and the initial state of the module visibility
3401
  api.control( optionData.settingControlId, function( _control_ ) {
3402
  api.control( optionData.settingControlId ).focus({
3403
  completeCallback : function() {}
3404
  });
3405
+ // Hide the item wrapper
3406
  _control_.container.find('.czr-items-wrapper').hide();
3407
  var $title = _control_.container.find('label > .customize-control-title'),
3408
  _titleContent = $title.html();
3409
 
3410
  $title.html( ['<span class="sek-ctrl-accordion-title">', _titleContent, '</span>' ].join('') );
3411
+ // if this level has an icon, let's prepend it to the title
3412
  if ( ! _.isUndefined( optionData.icon ) ) {
3413
  $title.addClass('sek-flex-vertical-center').prepend( optionData.icon );
3414
  }
3415
+ // prepend the animated arrow
3416
  $title.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>');
3417
+ // setup the initial state + initial click
3418
  _control_.container.attr('data-sek-expanded', "false" );
3419
  });
3420
  });//each()
3421
  };//_do_register()
3422
+
3423
+
3424
+
3425
+ // Defer the registration when the parent section gets added to the api
3426
  api.section.when( params.id, function() {
3427
  api.section(params.id).focus();
3428
  _do_register_();
3429
  });
3430
+
3431
+
3432
+ // MAIN CONTENT SECTION
3433
  api.CZR_Helpers.register({
3434
  origin : 'nimble',
3435
  what : 'section',
3437
  title: sektionsLocalizedData.i18n['Content for'] + ' ' + moduleName,
3438
  panel : sektionsLocalizedData.sektionsPanelId,
3439
  priority : 1000,
3440
+ //track : false//don't register in the self.registered()
3441
+ //constructWith : MainSectionConstructor,
3442
  }).done( function() {});
3443
 
3444
  api.section( params.id, function( _section_ ) {
3445
+ // don't display the clickable section title in the nimble root panel
3446
  _section_.container.find('.accordion-section-title').first().hide();
3447
+
3448
+ // Style the section title
3449
  var $panelTitleEl = _section_.container.find('.customize-section-title h3');
3450
+
3451
+ // The default title looks like this : <span class="customize-action">Customizing</span> Title
3452
  if ( 0 < $panelTitleEl.length ) {
3453
  $panelTitleEl.find('.customize-action').after( '<i class="fas fa-pencil-alt sek-level-option-icon"></i>' );
3454
  }
3455
+
3456
+ // Schedule the accordion behaviour
3457
  self.scheduleModuleAccordion.call( _section_, { expand_first_control : true } );
3458
  });
3459
  return dfd;
3463
  var CZRSeksPrototype = CZRSeksPrototype || {};
3464
  (function ( api, $ ) {
3465
  $.extend( CZRSeksPrototype, {
3466
+ // @params = {
3467
+ // action : 'sek-generate-module-ui' / 'sek-generate-level-options-ui'
3468
+ // level : params.level,
3469
+ // id : params.id,
3470
+ // in_sektion : params.in_sektion,
3471
+ // in_column : params.in_column,
3472
+ // options : params.options || []
3473
+ // }
3474
+ // @dfd = $.Deferred()
3475
+ // @return the state promise dfd
3476
  generateUIforLevelOptions : function( params, dfd ) {
3477
  var self = this;
3478
+ // Get this level options
3479
  var levelOptionValues = self.getLevelProperty({
3480
  property : 'options',
3481
  id : params.id
3482
  });
3483
  levelOptionValues = _.isObject( levelOptionValues ) ? levelOptionValues : {};
3484
+
3485
+
3486
+ // Prepare the module map to register
3487
  var modulesRegistrationParams = {};
3488
 
3489
  $.extend( modulesRegistrationParams, {
3498
  settingControlId : params.id + '__border_options',
3499
  module_type : 'sek_level_border_module',
3500
  controlLabel : sektionsLocalizedData.i18n['Borders settings for the'] + ' ' + sektionsLocalizedData.i18n[params.level],
3501
+ //expandAndFocusOnInit : true,
3502
  icon : '<i class="material-icons sek-level-option-icon">rounded_corner</i>'//'<i class="material-icons sek-level-option-icon">brush</i>'
3503
  },
3504
  spacing : {
3510
  anchor : {
3511
  settingControlId : params.id + '__anchor_options',
3512
  module_type : 'sek_level_anchor_module',
3513
+ controlLabel : sektionsLocalizedData.i18n['Set a custom anchor ( CSS ID ) for the'] + ' ' + sektionsLocalizedData.i18n[params.level],
3514
  icon : '<i class="fas fa-anchor sek-level-option-icon"></i>'
3515
  },
3516
  visibility : {
3536
  icon : '<i class="fas fa-ruler-horizontal sek-level-option-icon"></i>'
3537
  }
3538
  });
3539
+ // Deactivated
3540
+ // => replaced by sek_level_width_section
3541
+ // $.extend( modulesRegistrationParams, {
3542
+ // layout : {
3543
+ // settingControlId : params.id + '__sectionLayout_options',
3544
+ // module_type : 'sek_level_section_layout_module',
3545
+ // controlLabel : sektionsLocalizedData.i18n['Layout settings for the'] + ' ' + sektionsLocalizedData.i18n[params.level],
3546
+ // icon : '<i class="material-icons sek-level-option-icon">crop_din</i>'
3547
+ // }
3548
+ // });
3549
  $.extend( modulesRegistrationParams, {
3550
  breakpoint : {
3551
  settingControlId : params.id + '__breakpoint_options',
3565
  }
3566
  });
3567
  }
3568
+
3569
+
3570
+ // BAIL WITH A SEE-ME ANIMATION IF THIS UI IS CURRENTLY BEING DISPLAYED
3571
+ // Is the UI currently displayed the one that is being requested ?
3572
+ // Check if the first control of the list is already registered
3573
+ // If so, visually remind the user and break;
3574
  var firstKey = _.keys( modulesRegistrationParams )[0],
3575
  firstControlId = modulesRegistrationParams[firstKey].settingControlId;
3576
 
3578
  api.control( firstControlId ).focus({
3579
  completeCallback : function() {
3580
  var $container = api.control( firstControlId ).container;
3581
+ // @use button-see-mee css class declared in core in /wp-admin/css/customize-controls.css
3582
  if ( $container.hasClass( 'button-see-me') )
3583
  return;
3584
  $container.addClass('button-see-me');
3589
  });
3590
  return dfd;
3591
  }//if
3592
+
3593
+ // Clean previously generated UI elements
3594
  self.cleanRegistered();
3595
+
3596
+
3597
+ // @return void()
3598
  _do_register_ = function() {
3599
  _.each( modulesRegistrationParams, function( optionData, optionType ){
3600
+ // Is the UI currently displayed the one that is being requested ?
3601
+ // If so, don't generate the ui again, simply focus on the section
3602
  if ( self.isUIControlAlreadyRegistered( optionData.settingControlId ) ) {
3603
  api.section( api.control( optionData.settingControlId ).section() ).expanded( true );
3604
  return;
3618
  api.errare( '::generateUIforLevelOptions => Error in updateAPISettingAndExecutePreviewActions', er );
3619
  }
3620
  };
3621
+
3622
+ // Schedule the binding to synchronize the options with the main collection setting
3623
+ // Note 1 : unlike control or sections, the setting are not getting cleaned up on each ui generation.
3624
+ // They need to be kept in order to keep track of the changes in the customizer.
3625
+ // => that's why we check if ! api.has( ... )
3626
  api( optionData.settingControlId, function( _setting_ ) {
3627
  _setting_.bind( _.debounce( doUpdate, self.SETTING_UPDATE_BUFFER ) );//_setting_.bind( _.debounce( function( to, from, args ) {}
3628
  });//api( Id, function( _setting_ ) {})
3629
+
3630
+ // Let's add the starting values if provided when registrating the module
3631
  var initialModuleValues = levelOptionValues[ optionType ] || {};
3632
  var startingModuleValue = self.getModuleStartingValue( optionData.module_type );
3633
  if ( 'no_starting_value' !== startingModuleValue && _.isObject( startingModuleValue ) ) {
3634
+ // make sure the starting values are deeped clone now, before being extended
3635
  var clonedStartingModuleValue = $.extend( true, {}, startingModuleValue );
3636
  initialModuleValues = $.extend( clonedStartingModuleValue, initialModuleValues );
3637
  }
3661
  priority : 0,
3662
  settings : { default : optionData.settingControlId }
3663
  }).done( function() {});
3664
+
3665
+ // Implement the animated arrow markup, and the initial state of the module visibility
3666
  api.control( optionData.settingControlId, function( _control_ ) {
3667
  if ( true === optionData.expandAndFocusOnInit ) {
3668
  _control_.focus({
3669
  completeCallback : function() {}
3670
  });
3671
  }
3672
+
3673
+ // Hide the item wrapper
3674
  _control_.container.find('.czr-items-wrapper').hide();
3675
  var $title = _control_.container.find('label > .customize-control-title'),
3676
  _titleContent = $title.html();
3677
+ // We wrap the original text content in this span.sek-ctrl-accordion-title in order to style it (underlined) independently ( without styling the icons next to it )
3678
  $title.html( ['<span class="sek-ctrl-accordion-title">', _titleContent, '</span>' ].join('') );
3679
+ // if this level has an icon, let's prepend it to the title
3680
  if ( ! _.isUndefined( optionData.icon ) ) {
3681
  $title.addClass('sek-flex-vertical-center').prepend( optionData.icon );
3682
  }
3683
+ // prepend the animated arrow
3684
  $title.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>');
3685
+ // setup the initial state + initial click
3686
  _control_.container.attr('data-sek-expanded', "false" );
3687
+ // if ( true === optionData.expandAndFocusOnInit && "false" == _control_.container.attr('data-sek-expanded' ) ) {
3688
+ // $title.trigger('click');
3689
+ // }
3690
  });
3691
  });//_.each()
3692
  };//_do_register_()
3693
+
3694
+ // The section won't be tracked <= not removed on each ui update
3695
+ // Note : the check on api.section.has( params.id ) is also performd on api.CZR_Helpers.register(), but here we use it to avoid setting up the click listeners more than once.
3696
  if ( ! api.section.has( params.id ) ) {
3697
  api.section( params.id, function( _section_ ) {
3698
+ // Schedule the accordion behaviour
3699
  self.scheduleModuleAccordion.call( _section_, { expand_first_control : true } );
3700
  });
3701
  }
3707
  title: sektionsLocalizedData.i18n['Settings for the'] + ' ' + params.level,
3708
  panel : sektionsLocalizedData.sektionsPanelId,
3709
  priority : 10,
3710
+ //track : false//don't register in the self.registered()
3711
+ //constructWith : MainSectionConstructor,
3712
  }).done( function() {});
3713
+
3714
+ // - Defer the registration when the parent section gets added to the api
3715
+ // - Implement the module visibility
3716
  api.section( params.id, function( _section_ ) {
3717
  _do_register_();
3718
+ // don't display the clickable section title in the nimble root panel
3719
  _section_.container.find('.accordion-section-title').first().hide();
3720
+
3721
+ // Style the section title
3722
  var $panelTitleEl = _section_.container.find('.customize-section-title h3');
3723
+
3724
+ // The default title looks like this : <span class="customize-action">Customizing</span> Title
3725
  if ( 0 < $panelTitleEl.length && $panelTitleEl.find('.sek-level-option-icon').length < 1 ) {
3726
  $panelTitleEl.find('.customize-action').after( '<i class="fas fa-sliders-h sek-level-option-icon"></i>' );
3727
  }
3742
  }
3743
  return sektionsLocalizedData.optPrefixForSektionsNotSaved + skope_id + '__localSkopeOptions';
3744
  },
3745
+ // @params = {
3746
+ // action : 'sek-generate-module-ui' / 'sek-generate-level-options-ui'
3747
+ // level : params.level,
3748
+ // id : params.id,
3749
+ // in_sektion : params.in_sektion,
3750
+ // in_column : params.in_column,
3751
+ // options : params.options || []
3752
+ // }
3753
+ // @dfd = $.Deferred()
3754
+ // @return the state promise dfd
3755
  generateUIforLocalSkopeOptions : function( params, dfd ) {
3756
  var self = this,
3757
  _id_ = self.getLocalSkopeOptionId();
3758
+ // Is the UI currently displayed the one that is being requested ?
3759
+ // If so, visually remind the user that a module should be dragged
3760
  if ( self.isUIControlAlreadyRegistered( _id_ ) ) {
3761
  return dfd;
3762
  }
3763
+
3764
+ // Prepare the module map to register
3765
  var registrationParams = {};
3766
  if ( _.isUndefined( sektionsLocalizedData.localOptionsMap ) || ! _.isObject( sektionsLocalizedData.localOptionsMap ) ) {
3767
  api.errare( '::generateUIforGlobalOptions => missing or invalid localOptionsMap');
3768
  return dfd;
3769
  }
3770
+
3771
+ // Populate the registration params
3772
  _.each( sektionsLocalizedData.localOptionsMap, function( mod_type, opt_name ) {
3773
  switch( opt_name ) {
3774
  case 'template' :
3780
  icon : '<i class="material-icons sek-level-option-icon">check_box_outline_blank</i>'
3781
  };
3782
  break;
3783
+ // Header and footer have been introduced in v1.4.0 but not enabled by default.
3784
  case 'local_header_footer':
3785
  if ( sektionsLocalizedData.isNimbleHeaderFooterEnabled ) {
3786
  registrationParams[ opt_name ] = {
3847
  api.errare( '::generateUIforLocalSkopeOptions => Error in updateAPISettingAndExecutePreviewActions', er );
3848
  }
3849
  };
3850
+
3851
+ // Schedule the binding to synchronize the options with the main collection setting
3852
+ // Note 1 : unlike control or sections, the setting are not getting cleaned up on each ui generation.
3853
+ // They need to be kept in order to keep track of the changes in the customizer.
3854
+ // => that's why we check if ! api.has( ... )
3855
  api( optionData.settingControlId, function( _setting_ ) {
3856
  _setting_.bind( _.debounce( doUpdate, self.SETTING_UPDATE_BUFFER ) );//_setting_.bind( _.debounce( function( to, from, args ) {}
3857
  });//api( Id, function( _setting_ ) {})
3858
+
3859
+ // Let's add the starting values if provided when registrating the module
3860
  var startingModuleValue = self.getModuleStartingValue( optionData.module_type ),
3861
  currentSetValue = api( self.localSectionsSettingId() )(),
3862
  allSkopeOptions = $.extend( true, {}, _.isObject( currentSetValue.local_options ) ? currentSetValue.local_options : {} ),
3864
  initialModuleValues = optionTypeValue;
3865
 
3866
  if ( 'no_starting_value' !== startingModuleValue && _.isObject( startingModuleValue ) ) {
3867
+ // make sure the starting values are deeped clone now, before being extended
3868
  var clonedStartingModuleValue = $.extend( true, {}, startingModuleValue );
3869
  initialModuleValues = $.extend( clonedStartingModuleValue, initialModuleValues );
3870
  }
3891
  section : self.SECTION_ID_FOR_LOCAL_OPTIONS,
3892
  priority : 10,
3893
  settings : { default : optionData.settingControlId },
3894
+ //track : false//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
3895
  }).done( function() {
3896
+
3897
+ // if ( true === optionData.expandAndFocusOnInit ) {
3898
+ // api.control( optionData.settingControlId ).focus({
3899
+ // completeCallback : function() {}
3900
+ // });
3901
+ // }
3902
+
3903
+ // Implement the animated arrow markup, and the initial state of the module visibility
3904
  api.control( optionData.settingControlId, function( _control_ ) {
3905
+ // Hide the item wrapper
3906
  _control_.container.find('.czr-items-wrapper').hide();
3907
  var $title = _control_.container.find('label > .customize-control-title'),
3908
  _titleContent = $title.html();
3909
+ // We wrap the original text content in this span.sek-ctrl-accordion-title in order to style it (underlined) independently ( without styling the icons next to it )
3910
  $title.html( ['<span class="sek-ctrl-accordion-title">', _titleContent, '</span>' ].join('') );
3911
+
3912
+ // if this level has an icon, let's prepend it to the title
3913
  if ( ! _.isUndefined( optionData.icon ) ) {
3914
  $title.addClass('sek-flex-vertical-center').prepend( optionData.icon );
3915
  }
3916
+ // prepend the animated arrow
3917
  $title.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>');
3918
+ // setup the initial state + initial click
3919
  _control_.container.attr('data-sek-expanded', "false" );
3920
  if ( true === optionData.expandAndFocusOnInit && "false" == _control_.container.attr('data-sek-expanded' ) ) {
3921
  $title.trigger('click');
3924
  });
3925
  });//_.each()
3926
  };//_do_register()
3927
+
3928
+ // The parent section has already been added in ::initialize()
3929
  _do_register_();
3930
 
3931
  return dfd;
3935
  var CZRSeksPrototype = CZRSeksPrototype || {};
3936
  (function ( api, $ ) {
3937
  $.extend( CZRSeksPrototype, {
3938
+ // @params = {
3939
+ // action : 'sek-generate-module-ui' / 'sek-generate-level-options-ui'
3940
+ // level : params.level,
3941
+ // id : params.id,
3942
+ // in_sektion : params.in_sektion,
3943
+ // in_column : params.in_column,
3944
+ // options : params.options || []
3945
+ // }
3946
+ // @dfd = $.Deferred()
3947
+ // @return the state promise dfd
3948
  generateUIforGlobalOptions : function( params, dfd ) {
3949
  var self = this,
3950
  _id_ = sektionsLocalizedData.optPrefixForSektionsNotSaved + sektionsLocalizedData.optNameForGlobalOptions;
3951
+
3952
+ // Is the UI currently displayed the one that is being requested ?
3953
+ // If so, visually remind the user that a module should be dragged
3954
  if ( self.isUIControlAlreadyRegistered( _id_ ) ) {
3955
  return dfd;
3956
  }
3957
+
3958
+ // Prepare the module map to register
3959
  var registrationParams = {};
3960
  if ( _.isUndefined( sektionsLocalizedData.globalOptionsMap ) || ! _.isObject( sektionsLocalizedData.globalOptionsMap ) ) {
3961
  api.errare( '::generateUIforGlobalOptions => missing or invalid globalOptionsMap');
3962
  return dfd;
3963
  }
3964
+
3965
+ // Populate the registration params
3966
  _.each( sektionsLocalizedData.globalOptionsMap, function( mod_type, opt_name ) {
3967
  switch( opt_name ) {
3968
+ // Header and footer have been introduced in v1.4.0 but not enabled by default.
3969
  case 'global_header_footer':
3970
  if ( sektionsLocalizedData.isNimbleHeaderFooterEnabled ) {
3971
  registrationParams[ opt_name ] = {
4042
  api.errare( '::generateUIforGlobalOptions => Error in updateAPISettingAndExecutePreviewActions', er );
4043
  }
4044
  };
4045
+
4046
+ // Schedule the binding to synchronize the options with the main collection setting
4047
+ // Note 1 : unlike control or sections, the setting are not getting cleaned up on each ui generation.
4048
+ // They need to be kept in order to keep track of the changes in the customizer.
4049
+ // => that's why we check if ! api.has( ... )
4050
  api( optionData.settingControlId, function( _setting_ ) {
4051
  _setting_.bind( _.debounce( doUpdate, self.SETTING_UPDATE_BUFFER ) );//_setting_.bind( _.debounce( function( to, from, args ) {}
4052
  });//api( Id, function( _setting_ ) {})
4053
+
4054
+ // Let's add the starting values if provided when registrating the module
4055
  var dbValues = sektionsLocalizedData.globalOptionDBValues,
4056
  startingModuleValue = self.getModuleStartingValue( optionData.module_type ),
4057
  initialModuleValues = ( _.isObject( dbValues ) && ! _.isEmpty( dbValues[ optionType ] ) ) ? dbValues[ optionType ] : {};
4058
 
4059
  if ( 'no_starting_value' !== startingModuleValue && _.isObject( startingModuleValue ) ) {
4060
+ // make sure the starting values are deeped clone now, before being extended
4061
  var clonedStartingModuleValue = $.extend( true, {}, startingModuleValue );
4062
  initialModuleValues = $.extend( clonedStartingModuleValue, initialModuleValues );
4063
  }
4087
  settings : { default : optionData.settingControlId },
4088
  track : false//don't register in the self.registered() => this will prevent this container to be removed when cleaning the registered
4089
  }).done( function() {
4090
+ // if ( true === optionData.expandAndFocusOnInit ) {
4091
+ // api.control( optionData.settingControlId ).focus({
4092
+ // completeCallback : function() {}
4093
+ // });
4094
+ // }
4095
+
4096
+ // Implement the animated arrow markup, and the initial state of the module visibility
4097
  api.control( optionData.settingControlId, function( _control_ ) {
4098
+ // Hide the item wrapper
4099
  _control_.container.find('.czr-items-wrapper').hide();
4100
  var $title = _control_.container.find('label > .customize-control-title'),
4101
  _titleContent = $title.html();
4102
+ // We wrap the original text content in this span.sek-ctrl-accordion-title in order to style it (underlined) independently ( without styling the icons next to it )
4103
  $title.html( ['<span class="sek-ctrl-accordion-title">', _titleContent, '</span>' ].join('') );
4104
+
4105
+ // if this level has an icon, let's prepend it to the title
4106
  if ( ! _.isUndefined( optionData.icon ) ) {
4107
  $title.addClass('sek-flex-vertical-center').prepend( optionData.icon );
4108
  }
4109
+ // prepend the animated arrow
4110
  $title.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>');
4111
+ // setup the initial state + initial click
4112
  _control_.container.attr('data-sek-expanded', "false" );
4113
  if ( true === optionData.expandAndFocusOnInit && "false" == _control_.container.attr('data-sek-expanded' ) ) {
4114
  $title.trigger('click');
4117
  });
4118
  });//_.each();
4119
  };//do register
4120
+
4121
+ // The parent section has already been added in ::initialize()
4122
  _do_register_();
4123
 
4124
  return dfd;
4128
  var CZRSeksPrototype = CZRSeksPrototype || {};
4129
  (function ( api, $ ) {
4130
  $.extend( CZRSeksPrototype, {
4131
+ // user action => this utility must be used to set the main setting value
4132
+ // params = {
4133
+ // action : 'sek-add-section', 'sek-add-column', 'sek-add-module',...
4134
+ // in_sektion
4135
+ // in_column
4136
+ // }
4137
  updateAPISetting : function( params ) {
4138
 
4139
  var self = this,
4140
  __updateAPISettingDeferred__ = $.Deferred();
4141
+
4142
+ // Are we in global location ?
4143
+ // Add the global information to the params
4144
+ // => is used to determine the skope id when resolving the promise in reactToPreviewMsg
4145
  params = params || {};
4146
  params.is_global_location = self.isGlobalLocation( params );
4147
 
4148
  var _collectionSettingId_ = params.is_global_location ? self.getGlobalSectionsSettingId() : self.localSectionsSettingId();
4149
+
4150
+ // Update the sektion collection
4151
  api( _collectionSettingId_, function( sektionSetInstance ) {
4152
+ // sektionSetInstance() = {
4153
+ // collection : [
4154
+ // 'loop_start' : { level : location, collection : [ 'sek124' : { collection : [], level : section, options : {} }], options : {}},
4155
+ // 'loop_end' : { level : location, collection : [], options : {}}
4156
+ // ...
4157
+ // ],
4158
+ // options : {}
4159
+ //
4160
+ // }
4161
  var currentSetValue = sektionSetInstance(),
4162
  newSetValue = _.isObject( currentSetValue ) ? $.extend( true, {}, currentSetValue ) : self.getDefaultSektionSettingValue( params.is_global_location ? 'global' : 'local' ),
4163
  locationCandidate,
4164
  sektionCandidate,
4165
  columnCandidate,
4166
  moduleCandidate,
4167
+ // move variables
4168
  originalCollection,
4169
  reorderedCollection,
4170
+ //duplication variable
4171
  cloneId, //will be passed in resolve()
4172
  startingModuleValue,// will be populated by the optional starting value specificied on module registration
4173
  __presetSectionInjected__ = false,
4174
  parentSektionCandidate;
4175
+
4176
+ // make sure we have a collection array to populate
4177
  newSetValue.collection = _.isArray( newSetValue.collection ) ? newSetValue.collection : self.getDefaultSektionSettingValue( params.is_global_location ? 'global' : 'local' ).collection;
4178
 
4179
  switch( params.action ) {
4180
+ //-------------------------------------------------------------------------------------------------
4181
+ //-- SEKTION
4182
+ //-------------------------------------------------------------------------------------------------
4183
  case 'sek-add-section' :
4184
+ // an id must be provided
4185
  if ( _.isEmpty( params.id ) ) {
4186
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
4187
  }
4189
  if ( _.isEmpty( params.location ) ) {
4190
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing location' );
4191
  }
4192
+ // Is this a nested sektion ?
4193
  if ( true === params.is_nested ) {
4194
  columnCandidate = self.getLevelModel( params.in_column, newSetValue.collection );
4195
+ // can we add this nested sektion ?
4196
+ // if the parent sektion of the column has is_nested = true, then we can't
4197
  parentSektionCandidate = self.getLevelModel( params.in_sektion, newSetValue.collection );
4198
  if ( 'no_match' == parentSektionCandidate ) {
4199
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => no grand parent sektion found');
4237
  position = index + 1;
4238
  }
4239
  });
4240
+
4241
+ // @see reactToCollectionSettingIdChange
4242
  locationCandidate.collection = _.isArray( locationCandidate.collection ) ? locationCandidate.collection : [];
4243
+ // insert the section in the collection at the right place
4244
  locationCandidate.collection.splice( position, 0, {
4245
  id : params.id,
4246
  level : 'section',
4257
 
4258
 
4259
  case 'sek-duplicate-section' :
4260
+ //api.infoLog('PARAMS IN sek-duplicate-section', params );
4261
+ // an id must be provided
4262
  if ( _.isEmpty( params.id ) ) {
4263
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
4264
  }
4273
  }
4274
 
4275
  var _position_ = self.getLevelPositionInCollection( params.id, newSetValue.collection );
4276
+ // Is this a nested sektion ?
4277
  if ( true === params.is_nested ) {
4278
  columnCandidate = self.getLevelModel( params.in_column, newSetValue.collection );
4279
  if ( 'no_match' == columnCandidate ) {
4294
  break;
4295
  }
4296
  locationCandidate.collection = _.isArray( locationCandidate.collection ) ? locationCandidate.collection : [];
4297
+ // @see reactToCollectionSettingIdChange
4298
  locationCandidate.collection.splice( parseInt( _position_ + 1, 10 ), 0, deepClonedSektion );
4299
 
4300
  }
4301
  cloneId = deepClonedSektion.id;//will be passed in resolve()
4302
  break;
4303
+
4304
+ // in the case of a nested sektion, we have to remove it from a column
4305
+ // otherwise from the root sektion collection
4306
  case 'sek-remove-section' :
4307
+ //api.infoLog('PARAMS IN sek-remove-sektion', params );
4308
  if ( true === params.is_nested ) {
4309
  columnCandidate = self.getLevelModel( params.in_column, newSetValue.collection );
4310
  if ( 'no_match' != columnCandidate ) {
4329
  break;
4330
 
4331
  case 'sek-move-section' :
4332
+ //api.infoLog('PARAMS in sek-move-section', params );
4333
  var toLocationCandidate = self.getLevelModel( params.to_location, newSetValue.collection ),
4334
  movedSektionCandidate,
4335
  copyOfMovedSektionCandidate;
4337
  if ( _.isEmpty( toLocationCandidate ) || 'no_match' == toLocationCandidate ) {
4338
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing target location' );
4339
  }
4340
+
4341
+ // MOVED CROSS LOCATIONS
4342
+ // - make a copy of the moved sektion
4343
+ // - remove the moved sektion from the source location
4344
  if ( params.from_location != params.to_location ) {
4345
+ // Remove the moved sektion from the source location
4346
  var fromLocationCandidate = self.getLevelModel( params.from_location, newSetValue.collection );
4347
  if ( _.isEmpty( fromLocationCandidate ) || 'no_match' == fromLocationCandidate ) {
4348
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing source location' );
4349
  }
4350
 
4351
  fromLocationCandidate.collection = _.isArray( fromLocationCandidate.collection ) ? fromLocationCandidate.collection : [];
4352
+ // Make a copy of the sektion candidate now, before removing it
4353
  movedSektionCandidate = self.getLevelModel( params.id, fromLocationCandidate.collection );
4354
  copyOfMovedSektionCandidate = $.extend( true, {}, movedSektionCandidate );
4355
+ // remove the sektion from its previous sektion
4356
  fromLocationCandidate.collection = _.filter( fromLocationCandidate.collection, function( sektion ) {
4357
  return sektion.id != params.id;
4358
  });
4359
  }
4360
+
4361
+ // UPDATE THE TARGET LOCATION
4362
  toLocationCandidate.collection = _.isArray( toLocationCandidate.collection ) ? toLocationCandidate.collection : [];
4363
  originalCollection = $.extend( true, [], toLocationCandidate.collection );
4364
  reorderedCollection = [];
4365
  _.each( params.newOrder, function( _id_ ) {
4366
+ // in the case of a cross location movement, we need to add the moved sektion to the target location
4367
  if ( params.from_location != params.to_location && _id_ == copyOfMovedSektionCandidate.id ) {
4368
  reorderedCollection.push( copyOfMovedSektionCandidate );
4369
  } else {
4377
  toLocationCandidate.collection = reorderedCollection;
4378
 
4379
  break;
4380
+
4381
+
4382
+ // Fired on click on up / down arrows in the ( not nested ) section ui menu
4383
  case 'sek-move-section-up-down' :
4384
+ //api.infoLog('PARAMS in sek-move-section-up', params );
4385
 
4386
  inLocationCandidate = self.getLevelModel( params.location, newSetValue.collection );
4387
 
4395
  var _indexInOriginal = _.findIndex( originalCollection, function( _sec_ ) {
4396
  return _sec_.id === params.id;
4397
  });
4398
+ // @see https://underscorejs.org/#findIndex
4399
  if ( -1 === _indexInOriginal ) {
4400
  throw new Error( 'updateAPISetting => ' + params.action + ' => invalid index' );
4401
  }
4402
+
4403
+ // Swap up <=> down
4404
  var direction = params.direction || 'up';
4405
  reorderedCollection[ _indexInOriginal ] = originalCollection[ 'up' === direction ? _indexInOriginal - 1 : _indexInOriginal + 1 ];
4406
  reorderedCollection[ 'up' === direction ? _indexInOriginal - 1 : _indexInOriginal + 1 ] = originalCollection[ _indexInOriginal ];
4407
 
4408
  inLocationCandidate.collection = reorderedCollection;
4409
  break;
4410
+
4411
+
4412
+
4413
+
4414
+
4415
+
4416
+
4417
+
4418
+ //-------------------------------------------------------------------------------------------------
4419
+ //-- COLUMN
4420
+ //-------------------------------------------------------------------------------------------------
4421
  case 'sek-add-column' :
4422
+ // an id must be provided
4423
  if ( _.isEmpty( params.id ) ) {
4424
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
4425
  }
4431
  }
4432
 
4433
  sektionCandidate.collection = _.isArray( sektionCandidate.collection ) ? sektionCandidate.collection : [];
4434
+ // can we add another column ?
4435
  if ( ( self.MAX_NUMBER_OF_COLUMNS - 1 ) < _.size( sektionCandidate.collection ) ) {
4436
  __updateAPISettingDeferred__.reject( sektionsLocalizedData.i18n["You've reached the maximum number of columns allowed in this section."]);
4437
  break;
4438
  }
4439
+
4440
+ // RESET ALL COLUMNS WIDTH
4441
  _.each( sektionCandidate.collection, function( colModel ) {
4442
  colModel.width = '';
4443
  });
4453
  case 'sek-remove-column' :
4454
  sektionCandidate = self.getLevelModel( params.in_sektion, newSetValue.collection );
4455
  if ( 'no_match' != sektionCandidate ) {
4456
+ // can we remove the column ?
4457
  if ( 1 === _.size( sektionCandidate.collection ) ) {
4458
  __updateAPISettingDeferred__.reject( sektionsLocalizedData.i18n["A section must have at least one column."]);
4459
  break;
4462
  sektionCandidate.collection = _.filter( sektionCandidate.collection, function( column ) {
4463
  return column.id != params.id;
4464
  });
4465
+ // RESET ALL COLUMNS WIDTH
4466
  _.each( sektionCandidate.collection, function( colModel ) {
4467
  colModel.width = '';
4468
  });
4473
  break;
4474
 
4475
  case 'sek-duplicate-column' :
4476
+ // an id must be provided
4477
  if ( _.isEmpty( params.id ) ) {
4478
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
4479
  }
4486
  }
4487
 
4488
  sektionCandidate.collection = _.isArray( sektionCandidate.collection ) ? sektionCandidate.collection : [];
4489
+ // can we add another column ?
4490
  if ( ( self.MAX_NUMBER_OF_COLUMNS - 1 ) < _.size( sektionCandidate.collection ) ) {
4491
  __updateAPISettingDeferred__.reject( sektionsLocalizedData.i18n["You've reached the maximum number of columns allowed in this section."]);
4492
  break;
4500
  var _position = self.getLevelPositionInCollection( params.id, newSetValue.collection );
4501
  cloneId = deepClonedColumn.id;//will be passed in resolve()
4502
  sektionCandidate.collection.splice( parseInt( _position + 1, 10 ), 0, deepClonedColumn );
4503
+ // RESET ALL COLUMNS WIDTH
4504
  _.each( sektionCandidate.collection, function( colModel ) {
4505
  colModel.width = '';
4506
  });
4507
  break;
4508
+
4509
+
4510
+ // Note : the css rules are generated in Sek_Dyn_CSS_Builder::sek_add_rules_for_column_width
4511
  case 'sek-resize-columns' :
4512
  if ( params.col_number < 2 )
4513
  break;
4514
 
4515
  var resizedColumn = self.getLevelModel( params.resized_column, newSetValue.collection ),
4516
  sistercolumn = self.getLevelModel( params.sister_column, newSetValue.collection );
4517
+
4518
+ //api.infoLog( 'updateAPISetting => ' + params.action + ' => ', params );
4519
+
4520
+ // SET RESIZED COLUMN WIDTH
4521
  if ( 'no_match' == resizedColumn ) {
4522
  api.errare( 'updateAPISetting => ' + params.action + ' => no resized column matched' );
4523
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => no resized column matched');
4525
  }
4526
 
4527
  resizedColumn.width = parseFloat( params.resizedColumnWidthInPercent );
4528
+
4529
+
4530
+ // SET OTHER COLUMNS WIDTH
4531
  var parentSektion = self.getLevelModel( params.in_sektion, newSetValue.collection );
4532
  var otherColumns = _.filter( parentSektion.collection, function( _col_ ) {
4533
  return _col_.id != resizedColumn.id && _col_.id != sistercolumn.id;
4540
  if ( ! _.has( colModel, 'width') || ! _.isNumber( currentColWidth * 1 ) || _.isEmpty( currentColWidth + '' ) || 1 > currentColWidth ) {
4541
  colModel.width = parseFloat( ( 100 / params.col_number ).toFixed(3) );
4542
  }
4543
+ // sum up all other column's width, excluding the resized and sister one.
4544
  otherColumnsWidth = parseFloat( ( otherColumnsWidth + colModel.width ).toFixed(3) );
4545
  });
4546
  }
4547
+
4548
+
4549
+ // SET SISTER COLUMN WIDTH
4550
+
4551
+ // sum up all other column's width, excluding the resized and sister one.
4552
+ // api.infoLog( "resizedColumn.width", resizedColumn.width );
4553
+ // api.infoLog( "otherColumns", otherColumns );
4554
+
4555
+ // then calculate the sistercolumn so we are sure that we feel the entire space of the sektion
4556
  sistercolumn.width = parseFloat( ( 100 - otherColumnsWidth ).toFixed(3) );
4557
+
4558
+ // api.infoLog('otherColumnsWidth', otherColumnsWidth );
4559
+ // api.infoLog("sistercolumn.width", sistercolumn.width );
4560
+ // api.infoLog( "sistercolumn.width + otherColumnsWidth" , Number( sistercolumn.width ) + Number( otherColumnsWidth ) );
4561
+ //api.infoLog('COLLECTION AFTER UPDATE ', parentSektion.collection );
4562
  break;
4563
 
4564
 
4574
  }
4575
 
4576
  if ( params.from_sektion != params.to_sektion ) {
4577
+ // Remove the moved column from the source sektion
4578
  var fromSektionCandidate = self.getLevelModel( params.from_sektion, newSetValue.collection );
4579
  if ( _.isEmpty( fromSektionCandidate ) || 'no_match' == fromSektionCandidate ) {
4580
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing source column' );
4581
  }
4582
 
4583
  fromSektionCandidate.collection = _.isArray( fromSektionCandidate.collection ) ? fromSektionCandidate.collection : [];
4584
+ // Make a copy of the column candidate now, before removing it
4585
  movedColumnCandidate = self.getLevelModel( params.id, fromSektionCandidate.collection );
4586
  copyOfMovedColumnCandidate = $.extend( true, {}, movedColumnCandidate );
4587
+ // remove the column from its previous sektion
4588
  fromSektionCandidate.collection = _.filter( fromSektionCandidate.collection, function( column ) {
4589
  return column.id != params.id;
4590
  });
4591
+ // Reset the column's width in the target sektion
4592
  _.each( fromSektionCandidate.collection, function( colModel ) {
4593
  colModel.width = '';
4594
  });
4595
  }
4596
+
4597
+ // update the target sektion
4598
  toSektionCandidate.collection = _.isArray( toSektionCandidate.collection ) ? toSektionCandidate.collection : [];
4599
  originalCollection = $.extend( true, [], toSektionCandidate.collection );
4600
  reorderedCollection = [];
4601
  _.each( params.newOrder, function( _id_ ) {
4602
+ // in the case of a cross sektion movement, we need to add the moved column to the target sektion
4603
  if ( params.from_sektion != params.to_sektion && _id_ == copyOfMovedColumnCandidate.id ) {
4604
  reorderedCollection.push( copyOfMovedColumnCandidate );
4605
  } else {
4611
  }
4612
  });
4613
  toSektionCandidate.collection = reorderedCollection;
4614
+
4615
+ // Reset the column's width in the target sektion
4616
  _.each( toSektionCandidate.collection, function( colModel ) {
4617
  colModel.width = '';
4618
  });
4619
 
4620
  break;
4621
+
4622
+
4623
+
4624
+
4625
+
4626
+
4627
+
4628
+
4629
+
4630
+
4631
+
4632
+
4633
+ //-------------------------------------------------------------------------------------------------
4634
+ //-- MODULE
4635
+ //-------------------------------------------------------------------------------------------------
4636
  case 'sek-add-module' :
4637
+ // an id must be provided
4638
  if ( _.isEmpty( params.id ) ) {
4639
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
4640
  }
4641
+ // a module_type must be provided
4642
  if ( _.isEmpty( params.module_type ) ) {
4643
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing module_type' );
4644
  }
4651
 
4652
  var position = 0;
4653
  columnCandidate.collection = _.isArray( columnCandidate.collection ) ? columnCandidate.collection : [];
4654
+ // get the position of the before or after module
4655
  _.each( columnCandidate.collection, function( moduleModel, index ) {
4656
  if ( params.before_module === moduleModel.id ) {
4657
  position = index;
4667
  module_type : params.module_type,
4668
  ver_ini : sektionsLocalizedData.nimbleVersion
4669
  };
4670
+ // Let's add the starting value if provided when registrating the module
4671
  startingModuleValue = self.getModuleStartingValue( params.module_type );
4672
  if ( 'no_starting_value' !== startingModuleValue ) {
4673
  _moduleParams.value = startingModuleValue;
4677
  break;
4678
 
4679
  case 'sek-duplicate-module' :
4680
+ // an id must be provided
4681
  if ( _.isEmpty( params.id ) ) {
4682
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
4683
  }
4703
  break;
4704
 
4705
  case 'sek-remove-module' :
4706
+ // an id must be provided
4707
  if ( _.isEmpty( params.id ) ) {
4708
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
4709
  }
4723
  var toColumnCandidate,
4724
  movedModuleCandidate,
4725
  copyOfMovedModuleCandidate;
4726
+
4727
+ // loop on the sektions to find the toColumnCandidate
4728
+ // _.each( newSetValue.collection, function( _sektion_ ) {
4729
+ // _.each( _sektion_.collection, function( _column_ ) {
4730
+ // if ( _column_.id == params.to_column ) {
4731
+ // toColumnCandidate = _column_;
4732
+ // }
4733
+ // });
4734
+ // });
4735
  toColumnCandidate = self.getLevelModel( params.to_column, newSetValue.collection );
4736
 
4737
  if ( _.isEmpty( toColumnCandidate ) || 'no_match' == toColumnCandidate ) {
4738
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing target column' );
4739
  }
4740
+
4741
+ // If the module has been moved to another column
4742
+ // => remove the moved module from the source column
4743
  if ( params.from_column != params.to_column ) {
4744
  var fromColumnCandidate;
4745
  fromColumnCandidate = self.getLevelModel( params.from_column, newSetValue.collection );
4749
  }
4750
 
4751
  fromColumnCandidate.collection = _.isArray( fromColumnCandidate.collection ) ? fromColumnCandidate.collection : [];
4752
+ // Make a copy of the module candidate now, before removing it
4753
  movedModuleCandidate = self.getLevelModel( params.id, newSetValue.collection );
4754
  copyOfMovedModuleCandidate = $.extend( true, {}, movedModuleCandidate );
4755
+ // remove the module from its previous column
4756
  fromColumnCandidate.collection = _.filter( fromColumnCandidate.collection, function( module ) {
4757
  return module.id != params.id;
4758
  });
4759
  }// if params.from_column != params.to_column
4760
+
4761
+ // update the target column
4762
  toColumnCandidate.collection = _.isArray( toColumnCandidate.collection ) ? toColumnCandidate.collection : [];
4763
  originalCollection = $.extend( true, [], toColumnCandidate.collection );
4764
  reorderedCollection = [];
4773
  reorderedCollection.push( moduleCandidate );
4774
  }
4775
  });
4776
+ // Check if we have duplicates ?
4777
  if ( reorderedCollection.length != _.uniq( reorderedCollection ).length ) {
4778
  throw new Error( 'updateAPISetting => ' + params.action + ' => there are duplicated modules in column : ' + toColumnCandidate.id );
4779
  } else {
4786
  moduleCandidate = self.getLevelModel( params.id, newSetValue.collection );
4787
 
4788
  var _value_ = {};
4789
+ // consider only the non empty settings for db
4790
+ // booleans should bypass this check
4791
  _.each( params.value || {}, function( _val_, _key_ ) {
4792
+ // Note : _.isEmpty( 5 ) returns true when checking an integer,
4793
+ // that's why we need to cast the _val_ to a string when using _.isEmpty()
4794
  if ( ! _.isBoolean( _val_ ) && _.isEmpty( _val_ + "" ) )
4795
  return;
4796
  _value_[ _key_ ] = _val_;
4805
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => missing options_type');
4806
  break;
4807
  }
4808
+
4809
+ // Is this a father module ?
4810
+ // If yes, the module value is structured by option group, each option group being updated by a child module
4811
+ // If no, the default option type is : '__no_option_group_to_be_updated_by_children_modules__'
4812
  if ( '__no_option_group_to_be_updated_by_children_modules__' === params.options_type ) {
4813
  moduleCandidate.value = _value_;
4814
  } else {
4817
  }
4818
 
4819
  break;
4820
+
4821
+
4822
+
4823
+
4824
+
4825
+
4826
+ //-------------------------------------------------------------------------------------------------
4827
+ //-- LEVEL OPTIONS
4828
+ //-------------------------------------------------------------------------------------------------
4829
  case 'sek-generate-level-options-ui' :
4830
  var _candidate_ = self.getLevelModel( params.id, newSetValue.collection ),
4831
  _valueCandidate = {};
4835
  break;
4836
  }
4837
  _candidate_.options = _candidate_.options || {};
4838
+
4839
+ // consider only the non empty settings for db
4840
+ // booleans should bypass this check
4841
  _.each( params.value || {}, function( _val_, _key_ ) {
4842
+ // Note : _.isEmpty( 5 ) returns true when checking an integer,
4843
+ // that's why we need to cast the _val_ to a string when using _.isEmpty()
4844
  if ( ! _.isBoolean( _val_ ) && _.isEmpty( _val_ + "" ) )
4845
  return;
4846
  _valueCandidate[ _key_ ] = _val_;
4850
  }
4851
  _candidate_.options[ params.options_type ] = _valueCandidate;
4852
  break;
4853
+
4854
+
4855
+
4856
+
4857
+
4858
+ //-------------------------------------------------------------------------------------------------
4859
+ //-- LOCAL SKOPE OPTIONS
4860
+ //-------------------------------------------------------------------------------------------------
4861
+ // Note : this is saved in "local_options"
4862
  case 'sek-generate-local-skope-options-ui' :
4863
  _valueCandidate = {};
4864
 
4865
  var _currentOptions = $.extend( true, {}, _.isObject( newSetValue.local_options ) ? newSetValue.local_options : {} );
4866
+ // consider only the non empty settings for db
4867
+ // booleans should bypass this check
4868
  _.each( params.value || {}, function( _val_, _key_ ) {
4869
+ // Note : _.isEmpty( 5 ) returns true when checking an integer,
4870
+ // that's why we need to cast the _val_ to a string when using _.isEmpty()
4871
  if ( ! _.isBoolean( _val_ ) && _.isEmpty( _val_ + "" ) )
4872
  return;
4873
  _valueCandidate[ _key_ ] = _val_;
4880
  newSetValue.local_options = $.extend( _currentOptions, newOptionsValues );
4881
  }
4882
  break;
4883
+
4884
+
4885
+
4886
+
4887
+
4888
+
4889
+
4890
+
4891
+
4892
+ //-------------------------------------------------------------------------------------------------
4893
+ //-- CONTENT IN NEW SEKTION
4894
+ //-------------------------------------------------------------------------------------------------
4895
+ // @params {
4896
+ // drop_target_element : $(this),
4897
+ // position : _position,// <= top or bottom
4898
+ // before_section : $(this).data('sek-before-section'),
4899
+ // after_section : $(this).data('sek-after-section'),
4900
+ // content_type : event.originalEvent.dataTransfer.getData( "sek-content-type" ), //<= module or preset_section
4901
+ // content_id : event.originalEvent.dataTransfer.getData( "sek-content-id" )
4902
+ // }
4903
  case 'sek-add-content-in-new-sektion' :
4904
+ // api.infoLog('update API Setting => sek-add-content-in-new-sektion => PARAMS', params );
4905
+ // an id must be provided
4906
  if ( _.isEmpty( params.id ) ) {
4907
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
4908
  }
4909
+ // get the position of the before or after section
4910
  position = 0;
4911
  locationCandidate = self.getLevelModel( params.location, newSetValue.collection );
4912
  if ( 'no_match' == locationCandidate ) {
4925
  });
4926
 
4927
  switch( params.content_type) {
4928
+ // When a module is dropped in a section + column structure to be generated
4929
  case 'module' :
4930
+ // Let's add the starting value if provided when registrating the module
4931
+ // Note : params.content_id is the module_type
4932
  startingModuleValue = self.getModuleStartingValue( params.content_id );
4933
+
4934
+ // insert the section in the collection at the right place
4935
  locationCandidate.collection.splice( position, 0, {
4936
  id : params.id,
4937
  level : 'section',
4954
  ver_ini : sektionsLocalizedData.nimbleVersion
4955
  });
4956
  break;
4957
+
4958
+ // When a preset section is dropped
4959
  case 'preset_section' :
4960
+ // insert the section in the collection at the right place
4961
  __presetSectionInjected__ = $.Deferred();//defined at the beginning of the method
4962
 
4963
  var _doWhenPresetSectionCollectionFetched = function( presetColumnCollection ) {
4964
  self.preparePresetSectionForInjection( presetColumnCollection )
4965
  .fail( function( _er_ ){
4966
  __updateAPISettingDeferred__.reject( 'updateAPISetting => error when preparePresetSectionForInjection => ' + params.action + ' => ' + _er_ );
4967
+ // Used when updating the setting
4968
+ // @see end of this method
4969
  __presetSectionInjected__.reject( _er_ );
4970
  })
4971
  .done( function( sectionReadyToInject ) {
4972
+ //api.infoLog( 'sectionReadyToInject', sectionReadyToInject );
4973
+
4974
+ // If the preset_section is inserted in a an empty nested section, add it at the right place in the parent column of the nested section.
4975
+ // Otherwise, add the preset section at the right position in the parent location of the section.
4976
  var insertedInANestedSektion = false;
4977
  if ( ! _.isEmpty( params.sektion_to_replace ) ) {
4978
  var sektionToReplace = self.getLevelModel( params.sektion_to_replace, newSetValue.collection );
4999
  }
5000
 
5001
  columnCandidate.collection = _.isArray( columnCandidate.collection ) ? columnCandidate.collection : [];
5002
+ // get the position of the before or after module
5003
  _.each( columnCandidate.collection, function( moduleOrSectionModel, index ) {
5004
  if ( params.before_section === moduleOrSectionModel.id ) {
5005
  position = index;
5017
  ver_ini : sektionsLocalizedData.nimbleVersion
5018
  });
5019
  }
5020
+
5021
+ // Used when updating the setting
5022
+ // @see end of this method
5023
  __presetSectionInjected__.resolve();
5024
  });// self.preparePresetSectionForInjection.done()
5025
  };//_doWhenPresetSectionCollectionFetched()
5026
+
5027
+
5028
+ // Try to fetch the sections from the server
5029
+ // if sucessfull, resolve __presetSectionInjected__.promise()
5030
  self.getPresetSectionCollection({
5031
  is_user_section : params.is_user_section,
5032
  presetSectionId : params.content_id,
5041
  api.errare( 'updateAPISetting => ' + params.action + ' => preset section type not found or empty : ' + params.content_id, presetColumnCollection );
5042
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => preset section type not found or empty');
5043
  }
5044
+ // OK. time to resolve __presetSectionInjected__.promise()
5045
  _doWhenPresetSectionCollectionFetched( presetColumnCollection );
5046
  });//self.getPresetSectionCollection().done()
5047
  break;
5048
  }//switch( params.content_type)
5049
  break;
5050
+
5051
+
5052
+
5053
+ //-------------------------------------------------------------------------------------------------
5054
+ //-- CONTENT IN NEW NESTED SEKTION
5055
+ //-------------------------------------------------------------------------------------------------
5056
+ // @params {
5057
+ // drop_target_element : $(this),
5058
+ // position : _position,// <= top or bottom
5059
+ // before_section : $(this).data('sek-before-section'),
5060
+ // after_section : $(this).data('sek-after-section'),
5061
+ // content_type : event.originalEvent.dataTransfer.getData( "sek-content-type" ), //<= module or preset_section
5062
+ // content_id : event.originalEvent.dataTransfer.getData( "sek-content-id" )
5063
+ // }
5064
  case 'sek-add-preset-section-in-new-nested-sektion' :
5065
+ // an id must be provided
5066
  if ( _.isEmpty( params.id ) ) {
5067
  throw new Error( 'updateAPISetting => ' + params.action + ' => missing id' );
5068
  }
5069
 
5070
  columnCandidate = self.getLevelModel( params.in_column, newSetValue.collection );
5071
+
5072
+ // can we add this nested sektion ?
5073
+ // if the parent sektion of the column has is_nested = true, then we can't
5074
  parentSektionCandidate = self.getLevelModel( params.in_sektion, newSetValue.collection );
5075
  if ( 'no_match' == parentSektionCandidate ) {
5076
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => no grand parent sektion found');
5086
  break;
5087
  }
5088
  columnCandidate.collection = _.isArray( columnCandidate.collection ) ? columnCandidate.collection : [];
5089
+
5090
+ // insert the section in the collection at the right place
5091
  var presetColumnCollection;
5092
  __presetSectionInjected__ = $.Deferred();//defined at the beginning of the method
5093
 
5095
  self.preparePresetSectionForInjection( presetColumnCollection )
5096
  .fail( function( _er_ ){
5097
  __updateAPISettingDeferred__.reject( 'updateAPISetting => error when preparePresetSectionForInjection => ' + params.action + ' => ' + _er_ );
5098
+ // Used when updating the setting
5099
+ // @see end of this method
5100
  __presetSectionInjected__.reject( _er_ );
5101
  })
5102
  .done( function( sectionReadyToInject ) {
5108
  is_nested : true,
5109
  ver_ini : sektionsLocalizedData.nimbleVersion
5110
  });
5111
+
5112
+ // Used when updating the setting
5113
+ // @see end of this method
5114
  __presetSectionInjected__.resolve();
5115
  });//self.preparePresetSectionForInjection.done()
5116
  };//_doWhenPresetSectionCollectionFetched
5117
+
5118
+
5119
+ // Try to fetch the sections from the server
5120
+ // if sucessfull, resolve __presetSectionInjected__.promise()
5121
  self.getPresetSectionCollection({
5122
  is_user_section : params.is_user_section,
5123
  presetSectionId : params.content_id,
5132
  api.errare( 'updateAPISetting => ' + params.action + ' => preset section type not found or empty : ' + params.content_id, presetColumnCollection );
5133
  __updateAPISettingDeferred__.reject( 'updateAPISetting => ' + params.action + ' => preset section type not found or empty');
5134
  }
5135
+ // OK. time to resolve __presetSectionInjected__.promise()
5136
  _doWhenPresetSectionCollectionFetched( presetColumnCollection );
5137
  });//self.getPresetSectionCollection().done()
5138
  break;
5139
+
5140
+
5141
+
5142
+
5143
+
5144
+
5145
+
5146
+
5147
+
5148
+
5149
+
5150
+
5151
+ //-------------------------------------------------------------------------------------------------
5152
+ //-- POPULATE GOOGLE FONTS
5153
+ //-------------------------------------------------------------------------------------------------
5154
+ //@params {
5155
+ // action : 'sek-update-fonts',
5156
+ // font_family : newFontFamily,
5157
+ // }
5158
  case 'sek-update-fonts' :
5159
+ // Get the gfonts from the level options and modules values
5160
  var currentGfonts = self.sniffGFonts( { is_global_location : params && true === params.is_global_location } );
5161
  if ( ! _.isEmpty( params.font_family ) && _.isString( params.font_family ) && ! _.contains( currentGfonts, params.font_family ) ) {
5162
  if ( params.font_family.indexOf('gfont') < 0 ) {
5166
  }
5167
  currentGfonts.push( params.font_family );
5168
  }
5169
+ // update the global gfonts collection
5170
+ // this is then used server side in Sek_Dyn_CSS_Handler::sek_get_gfont_print_candidates to build the Google Fonts request
5171
  newSetValue.fonts = currentGfonts;
5172
  break;
5173
  }// switch
5174
+
5175
+
5176
+
5177
+ // if we did not already rejected the request, let's check if the setting object has actually been modified
5178
+ // at this point it should have been.
5179
  if ( 'pending' == __updateAPISettingDeferred__.state() ) {
5180
  var mayBeUpdateSektionsSetting = function() {
5181
  if ( _.isEqual( currentSetValue, newSetValue ) ) {
5185
  } else {
5186
  if ( null !== self.validateSettingValue( newSetValue ) ) {
5187
  sektionSetInstance( newSetValue, params );
5188
+ // Add the cloneId to the params when we resolve
5189
+ // the cloneId is only needed in the duplication scenarii
5190
  params.cloneId = cloneId;
5191
  __updateAPISettingDeferred__.resolve( params );
5192
  } else {
5193
  __updateAPISettingDeferred__.reject( 'Validation problem for action ' + params.action );
5194
  }
5195
+ //api.infoLog('COLLECTION SETTING UPDATED => ', _collectionSettingId_, api( _collectionSettingId_ )() );
5196
  }
5197
  };//mayBeUpdateSektionsSetting()
5198
 
5211
  });//api( _collectionSettingId_, function( sektionSetInstance ) {}
5212
  return __updateAPISettingDeferred__.promise();
5213
  },//updateAPISetting
5214
+
5215
+
5216
+
5217
+ // @return a promise()
5218
+ // caches the sections in api.sek_presetSections when api.section( '__content_picker__') is registered
5219
+ // caches the user saved sections on the first drag and drop of a user-saved section
5220
+ // @params {
5221
+ // is_user_section : sectionParams.is_user_section
5222
+ // preset_section_id : '' <= used for user_saved section
5223
+ // }
5224
  _maybeFetchSectionsFromServer : function( params ) {
5225
  var dfd = $.Deferred(),
5226
  _ajaxRequest_;
5241
  api.sek_fetchingUserSavedSections = _ajaxRequest_;
5242
  }
5243
  _ajaxRequest_.done( function( _sectionData_ ) {
5244
+ //api.sek_presetSections = JSON.parse( _collection_ );
5245
  api.sek_userSavedSections[ params.preset_section_id ] = _sectionData_;
5246
  dfd.resolve( api.sek_userSavedSections );
5247
  }).fail( function( _r_ ) {
5259
  api.sek_fetchingPresetSections = _ajaxRequest_;
5260
  }
5261
  _ajaxRequest_.done( function( _collection_ ) {
5262
+ //api.sek_presetSections = JSON.parse( _collection_ );
5263
  api.sek_presetSections = _collection_;
5264
  dfd.resolve( api.sek_presetSections );
5265
  }).fail( function( _r_ ) {
5270
 
5271
  return dfd.promise();
5272
  },
5273
+
5274
+
5275
+
5276
+
5277
+ // First run : fetches the collection from the server
5278
+ // Next runs : uses the cached collection
5279
+ //
5280
+ // @return a JSON parsed string,
5281
+ // + guid() ids for each levels
5282
+ // ready for insertion
5283
+ //
5284
+ // @sectionParams : {
5285
+ // is_user_section : bool, //<= is this section a "saved" section ?
5286
+ // presetSectionId : params.content_id,
5287
+ // section_id : params.id
5288
+ // }
5289
+ // Why is the section_id provided ?
5290
+ // Because this id has been generated ::reactToPreviewMsg, case "sek-add-section", and is the identifier that we'll need when ajaxing ( $_POST['id'])
5291
  getPresetSectionCollection : function( sectionParams ) {
5292
  var self = this,
5293
  __dfd__ = $.Deferred();
5300
  __dfd__.reject( er );
5301
  })
5302
  .done( function( _collection_ ) {
5303
+ //api.infoLog( 'preset_sections fetched', api.sek_presetSections );
5304
  var presetSection,
5305
  allPresets = $.extend( true, {}, _.isObject( _collection_ ) ? _collection_ : {} );
5306
 
5312
  }
5313
  var presetCandidate = allPresets[ sectionParams.presetSectionId ];
5314
 
5315
+ // Ensure we have a string that's JSON.parse-able
5316
+ // if ( typeof presetCandidate !== 'string' || presetCandidate[0] !== '{' ) {
5317
+ // throw new Error( 'getPresetSectionCollection => ' + sectionParams.presetSectionId + ' is not JSON.parse-able');
5318
+ // }
5319
+ // presetCandidate = JSON.parse( presetCandidate );
5320
+
5321
  var setIds = function( collection ) {
5322
  _.each( collection, function( levelData ) {
5323
  levelData.id = sektionsLocalizedData.optPrefixForSektionsNotSaved + self.guid();
5337
  });
5338
  return collection;
5339
  };
5340
+
5341
+ // ID's
5342
+ // set the section id provided.
5343
  presetCandidate.id = sectionParams.section_id;
5344
+ // the other level's id have to be generated
5345
  presetCandidate.collection = setIds( presetCandidate.collection );
5346
+
5347
+ // NIMBLE VERSION
5348
+ // set the section version
5349
  presetCandidate.ver_ini = sektionsLocalizedData.nimbleVersion;
5350
+ // the other level's version have to be added
5351
  presetCandidate.collection = setVersion( presetCandidate.collection );
5352
  __dfd__.resolve( presetCandidate );
5353
  });//_maybeFetchSectionsFromServer.done()
5354
 
5355
  return __dfd__.promise();
5356
  },
5357
+
5358
+
5359
+
5360
+
5361
+ // Walk the column collection of a preset section, and replace '::img-path::*' pattern by image ids that we get from ajax calls
5362
+ // Is designed to handle multiple ajax calls in parallel if the preset_section includes several images
5363
+ // @return a promise()
5364
  preparePresetSectionForInjection : function( columnCollection ) {
5365
  var self = this,
5366
  deferreds = {},
5367
  preparedSection = {},
5368
  _dfd_ = $.Deferred();
5369
+
5370
+ // walk the column collection and populates the deferreds object recursively
5371
  var _sniffImg = function( data ) {
5372
  _.each( data, function( val, key ) {
5373
  if ( _.isObject( val ) || _.isArray( val ) ) {
5374
  _sniffImg( val );
5375
  } else if ( _.isString( val ) && -1 != val.indexOf( '::img-path::' ) ) {
5376
+ // scenario when a section uses an image more than once.
5377
+ // => we don't need to fire a new ajax request for an image already sniffed
5378
  if ( ! _.has( deferreds, val ) ) {
5379
  deferreds[ val ] = self.importAttachment( val.replace( '::img-path::', '' ) );
5380
  }
5382
  });
5383
  return deferreds;
5384
  };
5385
+
5386
+ // walk the column collection and populates the deferreds object recursively
5387
+ // imdList is formed this way :
5388
+ // ::img-path::/assets/img/1.jpg : {id: 2547, url: "http://customizr-dev.test/wp-content/uploads/2018/09/nimble_asset_1.jpg"}
5389
+ // ::img-path::/assets/img/2.jpg : {id: 2548, url: "http://customizr-dev.test/wp-content/uploads/2018/09/nimble_asset_2.jpg"}
5390
+ // ::img-path::/assets/img/3.jpg : {id: 2549, url: "http://customizr-dev.test/wp-content/uploads/2018/09/nimble_asset_3.jpg"}
5391
  var _replaceImgPlaceholderById = function( data, imgList) {
5392
  _.each( data, function( val, key ) {
5393
  if ( _.isObject( val ) || _.isArray( val ) ) {
5415
  var CZRSeksPrototype = CZRSeksPrototype || {};
5416
  (function ( api, $ ) {
5417
  $.extend( CZRSeksPrototype, {
5418
+ //@return void()
5419
+ // clean registered controls, sections, panels
5420
+ // only elements that have a true "track" param on registration are populated in the registered() collection
5421
+ // if the _id_ param is not specified, all registered controls, sections and panels are removed.
5422
+ //
5423
+ // preserve the settings => because this is where the customizer changeset of values is persisted before publishing
5424
+ // typically fired before updating the ui. @see ::generateUI()
5425
  cleanRegistered : function( _id_ ) {
5426
  var self = this,
5427
  registered = $.extend( true, [], self.registered() || [] );
5431
  if ( api[ _reg_.what ].has( _reg_.id ) ) {
5432
  if ( ! _.isEmpty( _id_ ) && _reg_.id !== _id_ )
5433
  return;
5434
+ // fire an event before removal, can be used to clean some jQuery plugin instance for example
5435
  if ( _.isFunction( api[ _reg_.what ]( _reg_.id ).trigger ) ) {//<= Section and Panel constructor are not extended with the Event class, that's why we check if this method exists
5436
  self.trigger( 'sek-ui-pre-removal', { what : _reg_.what, id : _reg_.id } );
5437
  }
5438
  $.when( api[ _reg_.what ]( _reg_.id ).container.remove() ).done( function() {
5439
+ // remove control, section, panel
5440
  api[ _reg_.what ].remove( _reg_.id );
5441
+ // useful event, used to destroy the $ drop plugin instance for the section / module picker
5442
  self.trigger( 'sek-ui-removed', { what : _reg_.what, id : _reg_.id } );
5443
  });
5444
  }
5447
  });
5448
  self.registered( registered );
5449
  },
5450
+
5451
+ // Keep only the settings for global option, local options, content picker
5452
+ // Remove all the other
5453
  cleanRegisteredLevelSettingsAfterHistoryNavigation : function() {
5454
  var self = this,
5455
  registered = $.extend( true, [], self.registered() || [] );
5456
 
5457
  registered = _.filter( registered, function( _reg_ ) {
5458
+ // We check if the level property is set, so we preserve the permanent options like global options, local options, content picker
5459
  if ( ! _.isEmpty( _reg_.level ) && 'setting' === _reg_.what ) {
5460
  if ( api.has( _reg_.id ) ) {
5461
+ // remove setting from the api
5462
  api.remove( _reg_.id );
5463
  }
5464
  }
5472
  var CZRSeksPrototype = CZRSeksPrototype || {};
5473
  (function ( api, $ ) {
5474
  $.extend( CZRSeksPrototype, {
5475
+ // @eturn void()
5476
  rootPanelFocus : function() {
5477
+ //close everything
5478
  if ( api.section.has( api.czr_activeSectionId() ) ) {
5479
  api.section( api.czr_activeSectionId() ).expanded( false );
5480
  } else {
5486
  _p.expanded( false );
5487
  });
5488
  },
5489
+
5490
+ //@return a global unique identifier
5491
  guid : function() {
5492
  function s4() {
5493
  return Math.floor((1 + Math.random()) * 0x10000)
5496
  }
5497
  return s4() + s4() + s4();//s4() + s4() + s4() + s4() + s4() + s4();
5498
  },
5499
+
5500
+ //@return a string "nimble___[skp__global]"
5501
  getGlobalSectionsSettingId : function() {
5502
  return sektionsLocalizedData.settingIdForGlobalSections;
5503
  },
5504
+
5505
+ // @params = { id : '', level : '' }
5506
+ // Recursively walk the level tree until a match is found
5507
+ // @return the level model object
5508
  getLevelModel : function( id, collection ) {
5509
  var self = this, _data_ = 'no_match',
5510
+ // @param id mandatory
5511
+ // @param collection mandatory
5512
+ // @param collectionSettingId optional
5513
+ // @param localOrGlobal optional
5514
  _walk_ = function( id, collection, collectionSettingId, localOrGlobal ) {
5515
+ // do we have a collection ?
5516
+ // if not, let's use the root one
5517
  if ( _.isUndefined( collection ) ) {
5518
  var currentSektionSettingValue = api( collectionSettingId )();
5519
  var sektionSettingValue = _.isObject( currentSektionSettingValue ) ? $.extend( true, {}, currentSektionSettingValue ) : $.extend( true, {}, self.getDefaultSektionSettingValue( localOrGlobal ) );
5520
  collection = _.isArray( sektionSettingValue.collection ) ? sektionSettingValue.collection : [];
5521
  }
5522
  _.each( collection, function( levelData ) {
5523
+ // did we found a match recursively ?
5524
  if ( 'no_match' != _data_ )
5525
  return;
5526
  if ( id === levelData.id ) {
5533
  });
5534
  return _data_;
5535
  };
5536
+
5537
+ // if a collection has been provided in the signature, let's walk it.
5538
+ // Otherwise, let's walk the local and global ones until a match is found.
5539
  if ( ! _.isEmpty( collection ) ) {
5540
  _walk_( id, collection );
5541
  } else {
5551
 
5552
  return _data_;
5553
  },
5554
+
5555
+
5556
+ // used in react to preview or update api settings
5557
+ // @params is an object {
5558
+ //
5559
+ // }
5560
  isGlobalLocation : function( params ) {
5561
  var self = this, is_global_location = false;
5562
  params = params || {};
5571
  }
5572
  return is_global_location;
5573
  },
5574
+
5575
+ // @params = { id : '', level : '' }
5576
+ // Recursively walk the level tree until a match is found
5577
+ // @return the level model object
5578
  isChildOfAGlobalLocation : function( id ) {
5579
  var self = this,
5580
  walkCollection = function( id, collection ) {
5581
  var _data_ = 'no_match';
5582
+ // do we have a collection ?
5583
+ // if not, let's use the root global one
5584
  if ( _.isUndefined( collection ) ) {
5585
  var currentSettingValue = api( self.getGlobalSectionsSettingId() )();
5586
  var sektionSettingValue = _.isObject( currentSettingValue ) ? $.extend( true, {}, currentSettingValue ) : self.getDefaultSektionSettingValue( 'global' );
5587
  collection = _.isArray( sektionSettingValue.collection ) ? sektionSettingValue.collection : [];
5588
  }
5589
  _.each( collection, function( levelData ) {
5590
+ // did we found a match recursively ?
5591
  if ( 'no_match' != _data_ )
5592
  return;
5593
  if ( id === levelData.id ) {
5606
 
5607
  getLevelPositionInCollection : function( id, collection ) {
5608
  var self = this, _position_ = 'no_match',
5609
+ // @param id mandatory
5610
+ // @param collection mandatory
5611
+ // @param collectionSettingId optional
5612
+ // @param localOrGlobal optional
5613
  _walk_ = function( id, collection, collectionSettingId, localOrGlobal ) {
5614
+ // do we have a collection ?
5615
+ // if not, let's use the root one
5616
  if ( _.isUndefined( collection ) ) {
5617
  var currentSektionSettingValue = api( collectionSettingId )();
5618
  var sektionSettingValue = _.isObject( currentSektionSettingValue ) ? $.extend( true, {}, currentSektionSettingValue ) : $.extend( true, {}, self.getDefaultSektionSettingValue( localOrGlobal ) );
5619
  collection = _.isArray( sektionSettingValue.collection ) ? sektionSettingValue.collection : [];
5620
  }
5621
  _.each( collection, function( levelData, _key_ ) {
5622
+ // did we find a match recursively ?
5623
  if ( 'no_match' != _position_ )
5624
  return;
5625
  if ( id === levelData.id ) {
5631
  }
5632
  });
5633
  };
5634
+
5635
+ // if a collection has been provided in the signature, let's walk it.
5636
+ // Otherwise, let's walk the local and global ones until a match is found.
5637
  if ( ! _.isEmpty( collection ) ) {
5638
  _walk_( id, collection );
5639
  } else {
5648
  }
5649
  return _position_;
5650
  },
5651
+
5652
+
5653
+ // @params = { property : 'options', id : }
5654
+ // @return mixed type
5655
  getLevelProperty : function( params ) {
5656
  params = _.extend( {
5657
  id : '',
5674
  }
5675
  return modelCandidate[ params.property ];
5676
  },
5677
+
5678
+ // @return a detached clone of a given level model, with new unique ids
5679
  cloneLevel : function( levelId ) {
5680
  var self = this;
5681
  var levelModelCandidate = self.getLevelModel( levelId );
5683
  throw new Error( 'cloneLevel => no match for level id : ' + levelId );
5684
  }
5685
  var deepClonedLevel = $.extend( true, {}, levelModelCandidate );
5686
+ // recursive
5687
  var newIdWalker = function( level_model ) {
5688
  if ( _.isEmpty( level_model.id ) ) {
5689
  throw new Error( 'cloneLevel => missing level id');
5690
  }
5691
+ // No collection, we've reach the end of a branch
5692
  level_model.id = sektionsLocalizedData.optPrefixForSektionsNotSaved + self.guid();
5693
  if ( ! _.isEmpty( level_model.collection ) ) {
5694
  if ( ! _.isArray( level_model.collection ) ) {
5701
  }
5702
  return level_model;
5703
  };
5704
+ // recursively walk the provided level sub-tree until all collection ids are updated
5705
  return newIdWalker( deepClonedLevel );
5706
  },
5707
+
5708
+ // Extract the default model values from the server localized registered module
5709
+ // Invoked when registrating a module in api.czrModuleMap
5710
+ // For example :
5711
+ // czr_image_module : {
5712
+ // mthds : ImageModuleConstructor,
5713
+ // crud : false,
5714
+ // name : 'Image',
5715
+ // has_mod_opt : false,
5716
+ // ready_on_section_expanded : true,
5717
+ // defaultItemModel : _.extend(
5718
+ // { id : '', title : '' },
5719
+ // api.czr_sektions.getDefaultItemModelFromRegisteredModuleData( 'czr_image_module' )
5720
+ // )
5721
+ // },
5722
+ // @return {}
5723
  getDefaultItemModelFromRegisteredModuleData : function( moduleType ) {
5724
  if ( ! this.isModuleRegistered( moduleType ) ) {
5725
  return {};
5726
  }
5727
+ // This method should normally not be invoked for a father module type
5728
  if ( sektionsLocalizedData.registeredModules[moduleType].is_father ) {
5729
  api.errare( 'getDefaultItemModelFromRegisteredModuleData => Father modules should be treated specifically' );
5730
  return;
5731
  }
5732
  var data = sektionsLocalizedData.registeredModules[ moduleType ].tmpl['item-inputs'],
5733
+ // title, id are always included in the defaultItemModel but those properties don't need to be saved in database
5734
+ // title and id are legacy entries that can be used in multi-items modules to identify and name the item
5735
  defaultItemModel = {
5736
  id : '',
5737
  title : ''
5754
  });
5755
  return defaultItemModel;
5756
  },
5757
+
5758
+ //@return mixed
5759
  getRegisteredModuleProperty : function( moduleType, property ) {
5760
  if ( ! this.isModuleRegistered( moduleType ) ) {
5761
  return 'not_set';
5762
  }
5763
  return sektionsLocalizedData.registeredModules[ moduleType ][ property ];
5764
  },
5765
+
5766
+ // @return boolean
5767
  isModuleRegistered : function( moduleType ) {
5768
  return sektionsLocalizedData.registeredModules && ! _.isUndefined( sektionsLocalizedData.registeredModules[ moduleType ] );
5769
  },
5770
+
5771
+
5772
+ // Walk the main sektion setting and populate an array of google fonts
5773
+ // This method is used when processing the 'sek-update-fonts' action to update the .fonts property
5774
+ // To be a candidate for sniffing, an input font value should meet those criteria :
5775
+ // 1) be the value of a '{...}_css' input id
5776
+ // 2) this input must be a font modifier ( @see 'refresh_fonts' params set on parent module registration )
5777
+ // 2) the font should start with [gfont]
5778
+ // @param args { is_global_location : bool }
5779
+ // @return array
5780
  sniffGFonts : function( args ) {
5781
  args = args || { is_global_location : false };
5782
  var self = this,
5787
  level = _.isObject( currentSektionSettingValue ) ? $.extend( true, {}, currentSektionSettingValue ) : $.extend( true, {}, self.getDefaultSektionSettingValue( localOrGlobal ) );
5788
  }
5789
  _.each( level, function( levelData, _key_ ) {
5790
+ // example of input_id candidate 'font_family_css'
5791
  if ( _.isString( _key_ ) && '_css' === _key_.substr( _key_.length - 4 ) ) {
5792
  if ( true === self.inputIsAFontFamilyModifier( _key_ ) ) {
5793
  if ( levelData.indexOf('gfont') > -1 && ! _.contains( gfonts, levelData ) ) {
5809
 
5810
  return gfonts;
5811
  },
5812
+
5813
+
5814
+
5815
+
5816
+
5817
+
5818
+
5819
+
5820
+ //-------------------------------------------------------------------------------------------------
5821
+ // <RECURSIVE UTILITIES USING THE sektionsLocalizedData.registeredModules>
5822
+ //-------------------------------------------------------------------------------------------------
5823
+ // Invoked when updating a setting value => in normalizeAndSanitizeSingleItemInputValues(), when doing updateAPISettingAndExecutePreviewActions()
5824
+ // @return a mixed type default value
5825
+ // @param input_id string
5826
+ // @param module_type string
5827
+ // @param level array || object
5828
  getInputDefaultValue : function( input_id, module_type, level ) {
5829
  var self = this;
5830
+
5831
+ // Do we have a cached default value ?
5832
  self.cachedDefaultInputValues = self.cachedDefaultInputValues || {};
5833
  self.cachedDefaultInputValues[ module_type ] = self.cachedDefaultInputValues[ module_type ] || {};
5834
  if ( _.has( self.cachedDefaultInputValues[ module_type ], input_id ) ) {
5842
  api.errare( 'getInputDefaultValue => missing ' + module_type + ' in sektionsLocalizedData.registeredModules' );
5843
  return;
5844
  }
5845
+ // This method should normally not be invoked for a father module type
5846
  if ( sektionsLocalizedData.registeredModules[module_type].is_father ) {
5847
  api.errare( 'getInputDefaultValue => Father modules should be treated specifically' );
5848
  return;
5852
  }
5853
  var _defaultVal_ = 'no_default_value_specified';
5854
  _.each( level, function( levelData, _key_ ) {
5855
+ // we found a match skip next levels
5856
  if ( 'no_default_value_specified' !== _defaultVal_ )
5857
  return;
5858
  if ( input_id === _key_ && ! _.isUndefined( levelData.default ) ) {
5859
  _defaultVal_ = levelData.default;
5860
  }
5861
+ // if we have still no match, and the data are sniffable, let's go ahead recursively
5862
  if ( 'no_default_value_specified' === _defaultVal_ && ( _.isArray( levelData ) || _.isObject( levelData ) ) ) {
5863
  _defaultVal_ = self.getInputDefaultValue( input_id, module_type, levelData );
5864
  }
5865
  if ( 'no_default_value_specified' !== _defaultVal_ ) {
5866
+ // cache it
5867
  self.cachedDefaultInputValues[ module_type ][ input_id ] = _defaultVal_;
5868
  }
5869
  });
5870
  return _defaultVal_;
5871
  },
5872
+
5873
+
5874
+
5875
+ // @return input_type string
5876
+ // @param input_id string
5877
+ // @param module_type string
5878
+ // @param level array || object
5879
  getInputType : function( input_id, module_type, level ) {
5880
  var self = this;
5881
+
5882
+ // Do we have a cached default value ?
5883
  self.cachedInputTypes = self.cachedInputTypes || {};
5884
  self.cachedInputTypes[ module_type ] = self.cachedInputTypes[ module_type ] || {};
5885
  if ( _.has( self.cachedInputTypes[ module_type ], input_id ) ) {
5902
  }
5903
  var _inputType_ = 'no_input_type_specified';
5904
  _.each( level, function( levelData, _key_ ) {
5905
+ // we found a match skip next levels
5906
  if ( 'no_input_type_specified' !== _inputType_ )
5907
  return;
5908
  if ( input_id === _key_ && ! _.isUndefined( levelData.input_type ) ) {
5909
  _inputType_ = levelData.input_type;
5910
  }
5911
+ // if we have still no match, and the data are sniffable, let's go ahead recursively
5912
  if ( 'no_input_type_specified' === _inputType_ && ( _.isArray( levelData ) || _.isObject( levelData ) ) ) {
5913
  _inputType_ = self.getInputType( input_id, module_type, levelData );
5914
  }
5915
  if ( 'no_input_type_specified' !== _inputType_ ) {
5916
+ // cache it
5917
  self.cachedInputTypes[ module_type ][ input_id ] = _inputType_;
5918
  }
5919
  });
5920
  return _inputType_;
5921
  },
5922
+
5923
+
5924
+ // Invoked when :
5925
+ // 1) updating a setting value, in ::updateAPISettingAndExecutePreviewActions()
5926
+ // 2) we need to get a registration param like the default value for example, @see spacing input
5927
+ // @return object of registration params
5928
+ // @param input_id string
5929
+ // @param module_type string
5930
+ // @param level array || object
5931
  getInputRegistrationParams : function( input_id, module_type, level ) {
5932
  var self = this;
5933
+
5934
+ // Do we have a cached default value ?
5935
  self.cachedInputRegistrationParams = self.cachedInputRegistrationParams || {};
5936
  self.cachedInputRegistrationParams[ module_type ] = self.cachedInputRegistrationParams[ module_type ] || {};
5937
  if ( _.has( self.cachedInputRegistrationParams[ module_type ], input_id ) ) {
5945
  api.errare( 'getInputRegistrationParams => missing ' + module_type + ' in sektionsLocalizedData.registeredModules' );
5946
  return;
5947
  }
5948
+ // This method should normally not be invoked for a father module type
5949
  if ( sektionsLocalizedData.registeredModules[module_type].is_father ) {
5950
  api.errare( 'getInputRegistrationParams => Father modules should be treated specifically' );
5951
  return;
5955
  }
5956
  var _params_ = {};
5957
  _.each( level, function( levelData, _key_ ) {
5958
+ // we found a match skip next levels
5959
  if ( ! _.isEmpty( _params_ ) )
5960
  return;
5961
  if ( input_id === _key_ && ! _.isUndefined( levelData.input_type ) ) {
5962
  _params_ = levelData;
5963
  }
5964
+ // if we have still no match, and the data are sniffable, let's go ahead recursively
5965
  if ( _.isEmpty( _params_ ) && ( _.isArray( levelData ) || _.isObject( levelData ) ) ) {
5966
  _params_ = self.getInputRegistrationParams( input_id, module_type, levelData );
5967
  }
5968
  if ( ! _.isEmpty( _params_ ) ) {
5969
+ // cache it
5970
  self.cachedInputRegistrationParams[ module_type ][ input_id ] = _params_;
5971
  }
5972
  });
5973
  return _params_;
5974
  },
5975
+
5976
+
5977
+ // @return bool
5978
+ // @param input_id string
5979
+ // @param module_type string
5980
+ // @param level array || object
5981
  inputIsAFontFamilyModifier : function( input_id, level ) {
5982
  var self = this;
5983
+
5984
+ // Do we have a cached default value ?
5985
  self.cachedFontFamilyModifier = self.cachedFontFamilyModifier || {};
5986
  if ( _.has( self.cachedFontFamilyModifier, input_id ) ) {
5987
  return self.cachedFontFamilyModifier[ input_id ];
5995
  }
5996
  var _bool_ = 'not_set';
5997
  _.each( level, function( levelData, _key_ ) {
5998
+ // we found a match skip next levels
5999
  if ( 'not_set' !== _bool_ )
6000
  return;
6001
  if ( input_id === _key_ && ! _.isUndefined( levelData.input_type ) ) {
6002
  _bool_ = _.isUndefined( levelData.refresh_fonts ) ? false : levelData.refresh_fonts;
6003
  }
6004
+ // if we have still no match, and the data are sniffable, let's go ahead recursively
6005
  if ( 'not_set' === _bool_ && ( _.isArray( levelData ) || _.isObject( levelData ) ) ) {
6006
  _bool_ = self.inputIsAFontFamilyModifier( input_id, levelData );
6007
  }
6008
  if ( 'not_set' !== _bool_ ) {
6009
+ // cache it
6010
  self.cachedFontFamilyModifier[ input_id ] = _bool_;
6011
  }
6012
  });
6013
  return _bool_;
6014
  },
6015
+ //-------------------------------------------------------------------------------------------------
6016
+ // </RECURSIVE UTILITIES USING THE sektionsLocalizedData.registeredModules>
6017
+ //-------------------------------------------------------------------------------------------------
6018
+
6019
+
6020
+
6021
+
6022
+
6023
+
6024
+
6025
+
6026
+
6027
+
6028
+
6029
+
6030
+
6031
+
6032
+
6033
+ // @return the item(s) ( array of items if multi-item module ) that we should use when adding the module to the main setting
6034
  getModuleStartingValue : function( module_type ) {
6035
  if ( ! sektionsLocalizedData.registeredModules ) {
6036
  api.errare( 'getModuleStartingValue => missing sektionsLocalizedData.registeredModules' );
6080
 
6081
  selectables.eq( prevIndex ).focus();
6082
  },
6083
+
6084
+
6085
+
6086
+
6087
+ //-------------------------------------------------------------------------------------------------
6088
+ // GENERIC WAY TO SETUP SELECT INPUTS
6089
+ //-------------------------------------------------------------------------------------------------
6090
+ // used in the module input constructors
6091
+ // "this" is the input
6092
  setupSelectInput : function( selectOptions ) {
6093
  var input = this,
6094
  item = input.input_parent,
6101
  api.errare( 'api.czr_sektions.setupSelectInput => missing select options for input id => ' + input.id + ' in image module');
6102
  return;
6103
  } else {
6104
+ //generates the options
6105
  _.each( selectOptions , function( title, value ) {
6106
  var _attributes = {
6107
  value : value,
6117
  $( 'select[data-czrtype]', input.container ).selecter();
6118
  }
6119
  },
6120
+
6121
+
6122
+ //-------------------------------------------------------------------------------------------------
6123
+ // GENERIC WAY TO SETUP FONT SIZE AND LINE HEIGHT INPUTS
6124
+ // DEPRECATED
6125
+ //-------------------------------------------------------------------------------------------------
6126
+ // "this" is the input
6127
  setupFontSizeAndLineHeightInputs : function( obj ) {
6128
  var input = this,
6129
  $wrapper = $('.sek-font-size-line-height-wrapper', input.container ),
6135
  }
6136
  return unit;
6137
  };
6138
+ // initialize the unit with the value provided in the dom
6139
  input.css_unit = new api.Value( _.isEmpty( initial_unit ) ? 'px' : validateUnit( initial_unit ) );
6140
+ // React to a unit change
6141
  input.css_unit.bind( function( to ) {
6142
  to = _.isEmpty( to ) ? 'px' : to;
6143
  $wrapper.find( 'input[type="number"]').trigger('change');
6144
  });
6145
+
6146
+ // instantiate stepper and schedule change reactions
6147
  $wrapper.find( 'input[type="number"]').on('input change', function( evt ) {
6148
  input( $(this).val() + validateUnit( input.css_unit() ) );
6149
  }).stepper();
6150
+
6151
+
6152
+ // Schedule unit changes on button click
6153
  $wrapper.on( 'click', '[data-sek-unit]', function(evt) {
6154
  evt.preventDefault();
6155
+ // handle the is-selected css class toggling
6156
  $wrapper.find('[data-sek-unit]').removeClass('is-selected').attr( 'aria-pressed', false );
6157
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
6158
+ // update the initial unit ( not mandatory)
6159
  $wrapper.find('input[data-czrtype]').data('sek-unit', $(this).data('sek-unit') );
6160
+ // set the current unit Value
6161
  input.css_unit( $(this).data('sek-unit') );
6162
  });
6163
+
6164
+ // add is-selected button on init to the relevant unit button
6165
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ initial_unit +'"]').addClass('is-selected').attr( 'aria-pressed', true );
6166
  },
6167
+
6168
+
6169
+
6170
+ //-------------------------------------------------------------------------------------------------
6171
+ // PREPARE INPUT REGISTERED WITH has_device_switcher set to true
6172
+ //-------------------------------------------------------------------------------------------------
6173
+ // "this" is the input
6174
  maybeSetupDeviceSwitcherForInput : function() {
6175
  var input = this;
6176
+ // render the device switcher before the input title
6177
  var deviceSwitcherHtml = [
6178
  '<span class="sek-input-device-switcher">',
6179
  '<i data-sek-device="desktop" class="sek-switcher preview-desktop active" title="'+ sektionsLocalizedData.i18n['Settings on desktops'] +'"></i>',
6199
  }
6200
  input.previewedDevice( device );
6201
  };
6202
+ // react on device click
6203
  input.container.on( 'click', '[data-sek-device]', syncWithPreviewedDevice );
6204
+
6205
+ // initialize with the currently previewed device
6206
  var $currentDeviceIcon = input.container.find('[data-sek-device="' + api.previewedDevice() + '"]');
6207
  if ( $currentDeviceIcon.length > 0 ) {
6208
  $currentDeviceIcon.trigger('click');
6209
  }
6210
  },
6211
+
6212
+
6213
+
6214
+ //-------------------------------------------------------------------------------------------------
6215
+ // GENERIC WAY TO SETUP ACCORDION BEHAVIOUR OF MODULES IN SECTIONS
6216
+ //-------------------------------------------------------------------------------------------------
6217
+ // "this" is the section
6218
+ // in the content picker section, control's container have the attribute "data-sek-accordion" to selectively enable the accordion
6219
+ // @see ::generateUIforDraggableContent()
6220
+ // @params { expand_first_control : boolean }
6221
  scheduleModuleAccordion : function( params ) {
6222
  params = params || { expand_first_control : true };
6223
  var _section_ = this;
6224
+ // Attach event on click
6225
  $( _section_.container ).on( 'click', '.customize-control label > .customize-control-title', function( evt ) {
6226
+ //evt.preventDefault();
6227
  evt.stopPropagation();
6228
  var $control = $(this).closest( '.customize-control');
6229
 
6240
  duration : 0,
6241
  start : function() {
6242
  $control.attr('data-sek-expanded', "false" == $control.attr('data-sek-expanded') ? "true" : "false" );
6243
+ // this event 'sek-accordion-expanded', is used to defer the instantiation of the code editor
6244
+ // @see api.czrInputMap['code_editor']
6245
+ // @see https://github.com/presscustomizr/nimble-builder/issues/176
6246
  $control.trigger( "true" == $control.attr('data-sek-expanded') ? 'sek-accordion-expanded' : 'sek-accordion-collapsed' );
6247
  }
6248
  });
6249
  });
6250
+
6251
+ // Expand the first module if requested
6252
  if ( params.expand_first_control ) {
6253
  var firstControl = _.first( _section_.controls() );
6254
  if ( _.isObject( firstControl ) && ! _.isEmpty( firstControl.id ) ) {
6259
  }
6260
  }
6261
  },
6262
+
6263
+
6264
+
6265
+ //-------------------------------------------------------------------------------------------------
6266
+ // HELPERS USED WHEN UPLOADING IMAGES FROM PRESET SECTIONS
6267
+ //-------------------------------------------------------------------------------------------------
6268
  isPromise : function (fn) {
6269
  return fn && typeof fn.then === 'function' && String( $.Deferred().then ) === String( fn.then );
6270
  },
6271
+
6272
+ // @param deferreds = { '::img-path::/assets/img/tests/1.jpg' : 'dfd1', '::img-path::/assets/img/tests/2.jpg' : dfd2, ..., '::img-path::/assets/img/tests/n.jpg' : dfdn }
6273
  whenAllPromisesInParallel : function ( deferreds ) {
6274
  var self = this,
6275
  mainDfd = $.Deferred(),
6298
 
6299
  return mainDfd;
6300
  },
6301
+
6302
+ // Run the deferred in sequence, only one asynchronous method at a time
6303
+ // Was an experiment when implementing the img assets upload for preset sections
6304
+ // Abandonned for whenAllPromisesInParallel
6305
  whenAllPromisesInSerie : function ( deferreds, ind, promiseMessages, mainDfd ) {
6306
  ind = ind || 0;
6307
  promiseMessages = promiseMessages || {};
6324
  }//if
6325
  return mainDfd;
6326
  },
6327
+
6328
+
6329
+ // @param relpath = string : '/assets/img/41883.jpg'
6330
+ // @return a promise
6331
  importAttachment : function( relpath ) {
6332
+ // @see php wp_ajax_sek_import_attachment
6333
  return wp.ajax.post( 'sek_import_attachment', {
6334
  rel_path : relpath,
6335
  nonce: api.settings.nonce.save//<= do we need to set a specific nonce to fetch the attachment
6337
  .fail( function( _er_ ) {
6338
  api.errare( 'sek_import_attachment ajax action failed for image ' + relpath, _er_ );
6339
  });
6340
+ // .done( function( data) {
6341
+ // api.infoLog('relpath and DATA ' + relpath , data );
6342
+ // });
6343
  },
6344
+
6345
+
6346
+
6347
+
6348
+
6349
+
6350
+ // recursive helper
6351
+ // used when saving a section
6352
  cleanIds : function( levelData ) {
6353
  levelData.id = "";
6354
  var self = this;
6360
  });
6361
  return levelData;
6362
  },
6363
+
6364
+ // @return { collection[] ... }
6365
  getDefaultSektionSettingValue : function( localOrGlobal ) {
6366
  if ( _.isUndefined( localOrGlobal ) || !_.contains( [ 'local', 'global' ], localOrGlobal ) ) {
6367
  api.errare( 'getDefaultSektionSettingValue => the skope should be set to local or global');
6368
  }
6369
  return 'global' === localOrGlobal ? sektionsLocalizedData.defaultGlobalSektionSettingValue : sektionsLocalizedData.defaultLocalSektionSettingValue;
6370
  },
6371
+
6372
+ // @return void()
6373
+ // input controller instance == this
6374
  scheduleVisibilityOfInputId : function( controlledInputId, visibilityCallBack ) {
6375
  var item = this.input_parent;
6376
  if ( !_.isFunction(visibilityCallBack) || _.isEmpty(controlledInputId) ) {
6377
  throw new Error('::scheduleVisibilityOfInputId => error when firing for input id : ' + this.id );
6378
  }
6379
+ //Fire on init
6380
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
6381
+ //React on change
6382
  this.bind( function( to ) {
6383
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
6384
  });
6385
+ }
 
6386
  });//$.extend()
6387
  })( wp.customize, jQuery );//global sektionsLocalizedData
6388
  /**
6391
  * @https://html.spec.whatwg.org/multipage/dnd.html#dnd
6392
  * @https://caniuse.com/#feat=dragndrop
6393
  */
6394
+ // EVENTS
6395
+
6396
+ // drag => handler : ondrag Fired when an element or text selection is being dragged.
6397
+ // dragend => handler : ondragend Fired when a drag operation is being ended (for example, by releasing a mouse button or hitting the escape key). (See Finishing a Drag.)
6398
+ // dragenter => handler : ondragenter Fired when a dragged element or text selection enters a valid drop target. (See Specifying Drop Targets.)
6399
+ // dragexit => handler : ondragexit Fired when an element is no longer the drag operation's immediate selection target.
6400
+ // dragleave => handler : ondragleave Fired when a dragged element or text selection leaves a valid drop target.
6401
+ // dragover => handler : ondragover Fired when an element or text selection is being dragged over a valid drop target (every few hundred milliseconds).
6402
+ // dragstart => handler : ondragstart Fired when the user starts dragging an element or text selection. (See Starting a Drag Operation.)
6403
+ // drop => handler : ondrop Fired when an element or text selection is dropped on a valid drop target. (See Performing a Drop.)
6404
+
6405
+ // Drop targets can be rendered statically when the preview is rendered or dynamically on dragstart ( sent to preview with 'sek-drag-start')
6406
+ // Typically, an empty column will be populated with a zek-drop-zone element statically in the preview.
6407
+ // The other drop zones are rendered dynamically in ::schedulePanelMsgReactions case 'sek-drag-start'
6408
+ //
6409
+ // droppable targets are defined server side in sektionsLocalizedData.dropSelectors :
6410
+ // '.sek-drop-zone' <= to pass the ::dnd_canDrop() test, a droppable target should have this css class
6411
+ // 'body' <= body will not be eligible for drop, but setting the body as drop zone allows us to fire dragenter / dragover actions, like toggling the "approaching" or "close" css class to real drop zone
6412
  var CZRSeksPrototype = CZRSeksPrototype || {};
6413
  (function ( api, $ ) {
6414
  $.extend( CZRSeksPrototype, {
6415
+ //-------------------------------------------------------------------------------------------------
6416
+ //-- SETUP DnD
6417
+ //-------------------------------------------------------------------------------------------------
6418
+ //Fired in ::initialize()
6419
+ // INSTANTIATE Dnd ZONES IF SUPPORTED BY THE BROWSER
6420
+ // + SCHEDULE DROP ZONES RE-INSTANTIATION ON PREVIEW REFRESH
6421
+ // + SCHEDULE API REACTION TO *drop event
6422
+ // setup $.sekDrop for $( api.previewer.targetWindow().document ).find( '.sektion-wrapper')
6423
  setupDnd : function() {
6424
  var self = this;
6425
+ // emitted by the module_picker or the section_picker module
6426
+ // @params { type : 'section' || 'module', input_container : input.container }
6427
  self.bind( 'sek-refresh-dragzones', function( params ) {
6428
+ // Detecting HTML5 Drag And Drop support in javascript
6429
+ // https://stackoverflow.com/questions/2856262/detecting-html5-drag-and-drop-support-in-javascript#2856275
6430
  if ( true !== 'draggable' in document.createElement('span') ) {
6431
  api.panel( sektionsLocalizedData.sektionsPanelId, function( __main_panel__ ) {
6432
  api.notifications.add( new api.Notification( 'drag-drop-support', {
6434
  message: sektionsLocalizedData.i18n['This browser does not support drag and drop. You might need to update your browser or use another one.'],
6435
  dismissible: true
6436
  } ) );
6437
+
6438
+ // Removed if not dismissed after 5 seconds
6439
  _.delay( function() {
6440
  api.notifications.remove( 'drag-drop-support' );
6441
  }, 10000 );
6445
 
6446
  self.setupNimbleDragZones( params.input_container );//<= module or section picker
6447
  });
6448
+
6449
+ // on previewer refresh
6450
  api.previewer.bind( 'ready', function() {
6451
  try { self.setupNimbleDropZones();//<= module or section picker
6452
  } catch( er ) {
6453
  api.errare( '::setupDnd => error on self.setupNimbleDropZones()', er );
6454
  }
6455
+ // if the module_picker or the section_picker is currently a registered ui control,
6456
+ // => re-instantiate sekDrop on the new preview frame
6457
+ // the registered() ui levels look like :
6458
+ // [
6459
+ // { what: "control", id: "__nimble___sek_draggable_sections_ui", label: "Section Picker", type: "czr_module", module_type: "sek_intro_sec_picker_module", …}
6460
+ // { what: "setting", id: "__nimble___sek_draggable_sections_ui", dirty: false, value: "", transport: "postMessage", … }
6461
+ // { what: "section", id: "__nimble___sek_draggable_sections_ui", title: "Section Picker", panel: "__sektions__", priority: 30}
6462
+ // ]
6463
  if ( ! _.isUndefined( _.findWhere( self.registered(), { module_type : 'sek_intro_sec_picker_module' } ) ) ) {
6464
  self.rootPanelFocus();
6465
  } else if ( ! _.isUndefined( _.findWhere( self.registered(), { module_type : 'sek_module_picker_module' } ) ) ) {
6466
  self.rootPanelFocus();
6467
  }
6468
  });
6469
+
6470
+ // React to the *-droped event
6471
  self.reactToDrop();
6472
  },
6473
+
6474
+ //-------------------------------------------------------------------------------------------------
6475
+ //--DRAG ZONES SETUP
6476
+ //-------------------------------------------------------------------------------------------------
6477
+ // fired in ::initialize, on 'sek-refresh-nimbleDragDropZones
6478
+ // 'sek-refresh-nimbleDragDropZones' is emitted by the section and the module picker modules with param { type : 'section_picker' || 'module_picker'}
6479
  setupNimbleDragZones : function( $draggableWrapper ) {
6480
  var self = this;
6481
+ //api.infoLog('instantiate', type );
6482
+ // $(this) is the dragged element
6483
  var _onStart = function( evt ) {
6484
+ // Reset the preview target
6485
+ // implemented for double-click insertion https://github.com/presscustomizr/nimble-builder/issues/317
6486
  self.lastClickedTargetInPreview({});
6487
 
6488
  evt.originalEvent.dataTransfer.setData( "sek-content-type", $(this).data('sek-content-type') );
6489
  evt.originalEvent.dataTransfer.setData( "sek-content-id", $(this).data('sek-content-id') );
6490
  evt.originalEvent.dataTransfer.setData( "sek-section-type", $(this).data('sek-section-type') );
6491
  evt.originalEvent.dataTransfer.setData( "sek-is-user-section", $(this).data('sek-is-user-section') );
6492
+
6493
+ // in addition to the dataTransfer storage, store the properties of the dragged object in a static property
6494
+ // => we will need it for example to access the object property when checking if "can drop"
6495
  self.dndData = {
6496
  content_type : evt.originalEvent.dataTransfer.getData( "sek-content-type" ),
6497
  content_id : evt.originalEvent.dataTransfer.getData( "sek-content-id" ),
6498
  section_type : evt.originalEvent.dataTransfer.getData( "sek-section-type" ),
6499
+ // Saved sections
6500
  is_user_section : "true" === evt.originalEvent.dataTransfer.getData( "sek-is-user-section" )
6501
  };
6502
+
6503
+ // evt.originalEvent.dataTransfer.effectAllowed = "move";
6504
+ // evt.originalEvent.dataTransfer.dropEffect = "move";
6505
+ // Notify if not supported : https://caniuse.com/#feat=dragndrop
6506
  try {
6507
  evt.originalEvent.dataTransfer.setData( 'browserSupport', 'browserSupport' );
6508
  evt.originalEvent.dataTransfer.clearData( 'browserSupport' );
6513
  message: sektionsLocalizedData.i18n['This browser does not support drag and drop. You might need to update your browser or use another one.'],
6514
  dismissible: true
6515
  } ) );
6516
+
6517
+ // Removed if not dismissed after 5 seconds
6518
  _.delay( function() {
6519
  api.notifications.remove( 'drag-drop-support' );
6520
  }, 10000 );
6524
  $('body').addClass('sek-dragging');
6525
  api.previewer.send( 'sek-drag-start', { type : self.dndData.content_type } );//fires the rendering of the dropzones
6526
  };
6527
+ // $(this) is the dragged element
6528
  var _onEnd = function( evt ) {
6529
  $('body').removeClass('sek-dragging');
6530
  $(this).removeClass('sek-dragged');
6531
  api.previewer.send( 'sek-drag-stop' );
6532
  };
6533
+ // $(this) is the double clicked element
6534
  var _onDoubleClick = function( evt ) {
6535
  var _targetCandidate = self.lastClickedTargetInPreview();// { id : "__nimble__fb2ab3e47472" }
6536
  var $dropTarget;
6541
  }
6542
 
6543
  if ( $dropTarget && $dropTarget.length > 0 ) {
6544
+ // "Emulate" a drop action
6545
+ // @see ::dnd_onDrop()
6546
  api.czr_sektions.trigger( 'sek-content-dropped', {
6547
  drop_target_element : $dropTarget,
6548
  location : $dropTarget.closest('[data-sek-level="location"]').data('sek-id'),
6549
+ // when inserted between modules
6550
  before_module : $dropTarget.data('drop-zone-before-module-or-nested-section'),
6551
  after_module : $dropTarget.data('drop-zone-after-module-or-nested-section'),
6552
+
6553
+ // When inserted between sections
6554
  before_section : $dropTarget.data('drop-zone-before-section'),
6555
  after_section : $dropTarget.data('drop-zone-after-section'),
6556
 
6558
  content_id : $(this).data('sek-content-id'),
6559
 
6560
  section_type : $(this).data('sek-section-type'),
6561
+ // Saved sections
6562
  is_user_section : "true" === $(this).data('sek-is-user-section')
6563
  });
6564
+ // And reset the preview target
6565
  self.lastClickedTargetInPreview({});
6566
  } else {
6567
  _doubleClickTargetMissingNotif();
6574
  message: sektionsLocalizedData.i18n['You first need to click on a target ( with a + icon ) in the preview.'],
6575
  dismissible: true
6576
  } ) );
6577
+ // Removed if not dismissed after a moment
6578
  _.delay( function() {
6579
  api.notifications.remove( 'missing-injection-target' );
6580
  }, 30000 );
6581
  };
6582
+
6583
+ // Schedule
6584
  $draggableWrapper.find( '[draggable="true"]' ).each( function() {
6585
  $(this)
6586
  .on( 'dragstart', function( evt ) { _onStart.call( $(this), evt ); })
6587
  .on( 'dragend', function( evt ) { _onEnd.call( $(this), evt ); })
6588
+ // double click insertion
6589
+ // implemented for https://github.com/presscustomizr/nimble-builder/issues/317
6590
  .dblclick( function( evt ) { _onDoubleClick.call( $(this), evt ); });
6591
  });
6592
  },//setupNimbleZones()
6593
+
6594
+
6595
+
6596
+
6597
+
6598
+
6599
+
6600
+
6601
+
6602
+
6603
+
6604
+
6605
+ //-------------------------------------------------------------------------------------------------
6606
+ //--DRAG ZONES SETUP
6607
+ //-------------------------------------------------------------------------------------------------
6608
+ // Scheduled on previewer('ready') each time the previewer is refreshed
6609
  setupNimbleDropZones : function() {
6610
  var self = this;
6611
  this.$dropZones = this.dnd_getDropZonesElements();
6619
 
6620
  this.$dropZones.each( function() {
6621
  var $zone = $(this);
6622
+ // Make sure we don't delegate an event twice for a given element
6623
  if ( true === $zone.data('zone-droppable-setup') )
6624
  return;
6625
 
6626
  self.enterOverTimer = null;
6627
+ // Delegated to allow reactions on future modules / sections
6628
  $zone
6629
+ //.on( 'dragenter dragover', sektionsLocalizedData.dropSelectors, )
6630
  .on( 'dragenter dragover', sektionsLocalizedData.dropSelectors, function( evt ) {
6631
+ //api.infoLog( self.enterOverTimer, self.dnd_canDrop( { targetEl : $(this), evt : evt } ) );
6632
  if ( _.isNull( self.enterOverTimer ) ) {
6633
  self.enterOverTimer = true;
6634
  _.delay(function() {
6635
+ // If the mouse did not move, reset the time and do nothing
6636
+ // this will prevent a drop zone to "dance", aka expand collapse, when stoping the mouse close to it
6637
  if ( self.currentMousePosition && ( ( self.currentMousePosition + '' ) == ( evt.clientY + '' + evt.clientX + '') ) ) {
6638
  self.enterOverTimer = null;
6639
  return;
6657
  }
6658
  break;
6659
  case 'drop' :
6660
+ // Reset the this.$cachedDropZoneCandidates now
6661
  this.$cachedDropZoneCandidates = null;//has been declared on enter over
6662
 
6663
  if ( ! self.dnd_canDrop( { targetEl : $(this), evt : evt } ) )
6665
  evt.preventDefault();//@see https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#drop
6666
  self.dnd_onDrop( $(this), evt );
6667
  self.dnd_cleanOnLeaveDrop( $(this), evt );
6668
+ // this event will fire another cleaner
6669
+ // also sent on dragend
6670
  api.previewer.send( 'sek-drag-stop' );
6671
  break;
6672
  }
6686
  isInVertically = yPos >= dzoneRect.top && dzoneRect.bottom >= yPos;
6687
  return isInVertically && isInHorizontally;
6688
  },
6689
+
6690
+ //-------------------------------------------------------------------------------------------------
6691
+ //-- DnD Helpers
6692
+ //-------------------------------------------------------------------------------------------------
6693
+ // Fired on 'dragenter dragover'
6694
+ // toggles the "approaching" and "close" css classes when conditions are met.
6695
+ //
6696
+ // Because this function can be potentially heavy if there are a lot of drop zones, this is fired with a timer
6697
+ //
6698
+ // Note : this is fired before checking if the target is eligible for drop. This way we can calculate an approach, as soon as we start hovering the 'body' ( which is part the drop selector list )
6699
  dnd_toggleDragApproachClassesToDropZones : function( evt ) {
6700
 
6701
  var self = this,
6731
  isInHorizontally = xPos <= dzoneRect.right && dzoneRect.left <= xPos,
6732
  isInVertically = yPos >= dzoneRect.top && dzoneRect.bottom >= yPos;
6733
 
6734
+ // var html = "isApproachingHorizontally : " + isApproachingHorizontally + ' | isCloseHorizontally : ' + isCloseHorizontally + ' | isInHorizontally : ' + isInHorizontally;
6735
+ // html += ' | xPos : ' + xPos + ' | zoneRect.right : ' + dzoneRect.right;
6736
+ // html += "isApproachingVertically : " + isApproachingVertically + ' | isCloseVertically : ' + isCloseVertically + ' | isInVertically : ' + isInVertically;
6737
+ // html += ' | yPos : ' + yPos + ' | zoneRect.top : ' + dzoneRect.top;
6738
+ // $(this).html( '<span style="font-size:10px">' + html + '</span>');
6739
+
6740
+ // var html = '';
6741
+ // html += ' | mouseToBottom : ' + mouseToBottom + ' | mouseToTop : ' + mouseToTop;
6742
+ // html += "isApproachingVertically : " + isApproachingVertically + ' | isCloseVertically : ' + isCloseVertically + ' | isInVertically : ' + isInVertically;
6743
+ // $(this).html( '<span style="font-size:12px">' + html + '</span>');
6744
+
6745
+ // var html = ' | xPos : ' + xPos + ' | zoneRect.right : ' + dzoneRect.right + ' | zoneRect.left : ' + dzoneRect.left;
6746
+ // html += "mouseToYCenter : " + mouseToYCenter + ' | mouseToXCenter : ' + mouseToXCenter;
6747
+ // html += ' | yPos : ' + yPos + ' | zoneRect.top : ' + dzoneRect.top + ' | zoneRect.bottom : ' + dzoneRect.bottom;
6748
+ // $(this).html( '<span style="font-size:10px">' + html + '</span>');
6749
+
6750
  self.distanceTable.push({
6751
  el : $(this),
6752
  dist : ( isInVertically && isInHorizontally ) ? 0 : getHypotenuse( mouseToXCenter, mouseToYCenter )
6753
  });
6754
+
6755
+
6756
+ //var html = '';
6757
+
6758
+ // if ( isInVertically && isInHorizontally ) {
6759
+ // $(this).removeClass( 'sek-drag-is-approaching');
6760
+ // $(this).removeClass( 'sek-drag-is-close' );
6761
+ // $(this).removeClass( 'sek-drag-is-very-close');
6762
+ // $(this).addClass( 'sek-drag-is-in');
6763
+ // //html += 'is IN';
6764
+ // }
6765
+ // else if ( ( isCloseVertically || isInVertically ) && ( isCloseHorizontally || isInHorizontally ) ) {
6766
+ // $(this).removeClass( 'sek-drag-is-approaching');
6767
+ // $(this).addClass( 'sek-drag-is-close' );
6768
+ // $(this).removeClass( 'sek-drag-is-very-close');
6769
+ // $(this).removeClass( 'sek-drag-is-in');
6770
+ // //html += 'is close';
6771
+ // } else if ( ( isApproachingVertically || isInVertically ) && ( isApproachingHorizontally || isInHorizontally ) ) {
6772
+ // $(this).addClass( 'sek-drag-is-approaching');
6773
+ // $(this).removeClass( 'sek-drag-is-close' );
6774
+ // $(this).removeClass( 'sek-drag-is-very-close');
6775
+ // $(this).removeClass( 'sek-drag-is-in');
6776
+ // //html += 'is approaching';
6777
+ //
6778
  $(this).removeClass( 'sek-drag-is-in');
6779
 
6780
  if ( ( isVeryCloseVertically || isInVertically ) && ( isVeryCloseHorizontally || isInHorizontally ) ) {
6782
  $(this).removeClass( 'sek-drag-is-close' );
6783
  $(this).addClass( 'sek-drag-is-very-close');
6784
  $(this).removeClass( 'sek-drag-is-in');
6785
+ //html += 'is very close';
6786
  } else {
6787
  $(this).removeClass( 'sek-drag-is-approaching');
6788
  $(this).removeClass( 'sek-drag-is-close' );
6789
  $(this).removeClass( 'sek-drag-is-very-close');
6790
  $(this).removeClass( 'sek-drag-is-in');
6791
  }
6792
+
6793
+
6794
+ //$(this).html( '<span style="font-size:10px">' + html + '</span>');
6795
  });//$('.sek-drop-zones').each()
6796
 
6797
 
6805
  if ( self.$dropTargetCandidate && self.$dropTargetCandidate.length > 0 && self.dnd_isInTarget( self.$dropTargetCandidate, evt ) ) {
6806
  self.$dropTargetCandidate.addClass('sek-drag-is-in');
6807
  }
6808
+ // Reset the timer
6809
  self.enterOverTimer = null;
6810
  },
6811
+
6812
+ // @return string
6813
  dnd_getPreDropElementContent : function( evt ) {
6814
  var $target = $( evt.currentTarget ),
6815
  html,
6837
  }
6838
  return preDropContent;
6839
  },
6840
+
6841
+ // Scheduled on previewer('ready') each time the previewer is refreshed
6842
  dnd_getDropZonesElements : function() {
6843
  return $( api.previewer.targetWindow().document );
6844
  },
6845
+
6846
+ // @return boolean
6847
+ // @paraps = { targetEl : $(this), evt : evt }
6848
+ // Note : the class "sek-content-preset_section-drop-zone" is dynamically generated in preview::schedulePanelMsgReactions() sek-drag-start case
6849
  dnd_canDrop : function( params ) {
6850
  params = _.extend( { targetEl : {}, evt : {} }, params || {} );
6851
  var self = this, $dropTarget = params.targetEl;
6889
 
6890
  return $dropTarget.hasClass('sek-drop-zone') && ( ( 'preset_section' === self.dndData.content_type && isSectionDropZone ) || ( 'module' === self.dndData.content_type && ! isSectionDropZone ) || ( 'preset_section' === self.dndData.content_type && sectionHasNoModule ) );
6891
  },
6892
+
6893
+ // @return void()
6894
  dnd_OnEnterOver : function( $dropTarget, evt ) {
6895
  evt.preventDefault();//@see :https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#droptargets
6896
+ // Bail here if we are in the currently drag entered element
6897
  if ( true !== $dropTarget.data( 'is-drag-entered' ) ) {
6898
+ // Flag now
6899
  $dropTarget.data( 'is-drag-entered', true );
6900
  $dropTarget.addClass( 'sek-active-drop-zone' );
6901
+ // Flag the dropEl parent element
6902
  this.$dropZones.addClass( 'sek-is-dragging' );
6903
  }
6904
 
6906
  api.errare('Error when trying to insert the preDrop content', er );
6907
  }
6908
  },
6909
+
6910
+ // @return void()
6911
  dnd_cleanOnLeaveDrop : function( $dropTarget, evt ) {
6912
  var self = this;
6913
  this.$dropZones = this.$dropZones || this.dnd_getDropZonesElements();
6918
  self.dnd_cleanSingleDropTarget( $(this) );
6919
  });
6920
  },
6921
+
6922
+ // @return void()
6923
  dnd_cleanSingleDropTarget : function( $dropTarget ) {
6924
  if ( _.isEmpty( $dropTarget ) || $dropTarget.length < 1 )
6925
  return;
6933
 
6934
  $dropTarget.find('.sek-no-drop-possible-message').remove();
6935
  },
6936
+
6937
+
6938
+ // @return string after or before
6939
  dnd_getPosition : function( $dropTarget, evt ) {
6940
  var targetRect = $dropTarget[0].getBoundingClientRect(),
6941
  targetHeight = targetRect.height;
6942
+
6943
+ // if the preDrop is already printed, we have to take it into account when calc. the target height
6944
  if ( 'before' === $dropTarget.data( 'preDrop-position' ) ) {
6945
  targetHeight = targetHeight + this.preDropElement.outerHeight();
6946
  } else if ( 'after' === $dropTarget.data( 'preDrop-position' ) ) {
6949
 
6950
  return evt.originalEvent.clientY - targetRect.top - ( targetHeight / 2 ) > 0 ? 'after' : 'before';
6951
  },
6952
+
6953
+ // @return void()
6954
  dnd_mayBePrintPreDropElement : function( $dropTarget, evt ) {
6955
  var self = this,
6956
  previousPosition = $dropTarget.data( 'preDrop-position' ),
6964
  }
6965
 
6966
  self.isPrintingPreDrop = true;
6967
+
6968
+ // make sure we clean the previous wrapper of the pre drop element
6969
  this.dnd_cleanSingleDropTarget( this.$currentPreDropTarget );
6970
  var inNewSection = 'between-sections' === $dropTarget.data('sek-location') || 'in-empty-location' === $dropTarget.data('sek-location');
6971
  $.when( self.preDropElement.remove() ).done( function(){
6972
  $dropTarget[ 'before' === newPosition ? 'prepend' : 'append' ]( self.preDropElement )
6973
  .find( '.' + sektionsLocalizedData.preDropElementClass ).html( self.dnd_getPreDropElementContent( evt ) );
6974
+ // Flag the preDrop element with class to apply a specific style if inserted in a new sektion of in a column
6975
  $dropTarget.find( '.' + sektionsLocalizedData.preDropElementClass ).toggleClass('in-new-sektion', inNewSection );
6976
  $dropTarget.data( 'preDrop-position', newPosition );
6977
 
6981
  self.$currentPreDropTarget = $dropTarget;
6982
  });
6983
  },
6984
+
6985
+ //@return void()
6986
  dnd_isOveringDropTarget : function( $dropTarget, evt ) {
6987
  var targetRect = $dropTarget[0].getBoundingClientRect(),
6988
  mouseX = evt.clientX,
6995
  isYin = mouseY >= tTop && ( tBottom - tTop ) >= ( mouseY - tTop);
6996
  return isXin && isYin;
6997
  },
6998
+
6999
+ //@return void()
7000
  dnd_onDrop: function( $dropTarget, evt ) {
7001
  evt.stopPropagation();
7002
  var _position = 'after' === this.dnd_getPosition( $dropTarget, evt ) ? $dropTarget.index() + 1 : $dropTarget.index();
7003
+ // api.infoLog('onDropping params', position, evt );
7004
+ // api.infoLog('onDropping element => ', $dropTarget.data('drop-zone-before-section'), $dropTarget );
7005
  api.czr_sektions.trigger( 'sek-content-dropped', {
7006
  drop_target_element : $dropTarget,
7007
  location : $dropTarget.closest('[data-sek-level="location"]').data('sek-id'),
7008
+ // when inserted between modules
7009
  before_module : $dropTarget.data('drop-zone-before-module-or-nested-section'),
7010
  after_module : $dropTarget.data('drop-zone-after-module-or-nested-section'),
7011
+
7012
+ // When inserted between sections
7013
  before_section : $dropTarget.data('drop-zone-before-section'),
7014
  after_section : $dropTarget.data('drop-zone-after-section'),
7015
 
7017
  content_id : evt.originalEvent.dataTransfer.getData( "sek-content-id" ),
7018
 
7019
  section_type : evt.originalEvent.dataTransfer.getData( "sek-section-type" ),
7020
+ // Saved sections
7021
  is_user_section : "true" === evt.originalEvent.dataTransfer.getData( "sek-is-user-section" )
7022
  });
7023
  },
7024
+
7025
+
7026
+
7027
+
7028
+
7029
+
7030
+
7031
+
7032
+
7033
+
7034
+
7035
+
7036
+
7037
+
7038
+ //-------------------------------------------------------------------------------------------------
7039
+ //-- SCHEDULE REACTIONS TO 'sek-content-dropped'
7040
+ //-------------------------------------------------------------------------------------------------
7041
+ // invoked on api('ready') from self::initialize()
7042
  reactToDrop : function() {
7043
  var self = this;
7044
+ // @param {
7045
+ // drop_target_element : $(el) in which the content has been dropped
7046
+ // position : 'bottom' or 'top' compared to the drop-zone
7047
+ // before_section : $(this).data('drop-zone-before-section'),
7048
+ // after_section : $(this).data('drop-zone-after-section'),
7049
+ // content_type : evt.originalEvent.dataTransfer.getData( "sek-content-type" ),
7050
+ // content_id : evt.originalEvent.dataTransfer.getData( "sek-content-id" ),
7051
+ // section_type : evt.originalEvent.dataTransfer.getData( "sek-section-type" ),//<= content, header, footer
7052
+ // is_user_section : true === evt.originalEvent.dataTransfer.getData( "sek-is-user-section" ),
7053
+ // }
7054
  var _do_ = function( params ) {
7055
  if ( ! _.isObject( params ) ) {
7056
  throw new Error( 'Invalid params provided' );
7061
 
7062
  var $dropTarget = params.drop_target_element,
7063
  dropCase = 'content-in-column';
7064
+
7065
+ // If the data('sek-location') is available, let's use it
7066
  switch( $dropTarget.data('sek-location') ) {
7067
  case 'between-sections' :
7068
  dropCase = 'content-in-a-section-to-create';
7076
  dropCase = 'content-in-new-column';
7077
  break;
7078
  }
7079
+
7080
+ // case of a preset_section content_type being added to an existing but empty section
7081
  if ( 'preset_section' === params.content_type ) {
7082
  if ( $dropTarget.hasClass( 'sek-module-drop-zone-for-first-module' ) ) {
7083
  var $parentSektion = $dropTarget.closest('div[data-sek-level="section"]');
7084
+ //calculate the number of column in this section, excluding the columns inside nested sections if any
7085
  var colNumber = $parentSektion.find('.sek-sektion-inner').first().children( '[data-sek-level="column"]' ).length;
7086
+ // if the parent section has more than 1 column, we will need to inject the preset_section inside a nested_section
7087
  if ( colNumber > 1 ) {
7088
  dropCase = 'preset-section-in-a-nested-section-to-create';
7089
  params.is_nested = true;
7090
  params.in_column = $dropTarget.closest('[data-sek-level="column"]').data('sek-id');
7091
  params.in_sektion = $parentSektion.data('sek-id');
7092
+ //params.after_section = params.sektion_to_replace;
7093
  } else {
7094
  params.sektion_to_replace = $parentSektion.data('sek-id');
7095
  params.after_section = params.sektion_to_replace;
7096
+ // if the sektion to replace is nested, we will append the new sektion to the parent column of the nested section
7097
  params.in_column = $parentSektion.closest('[data-sek-level="column"]').data('sek-id');
7098
  dropCase = 'content-in-a-section-to-replace';
7099
  }
7138
  case 'content-in-a-section-to-create' :
7139
  api.previewer.trigger( 'sek-add-content-in-new-sektion', params );
7140
  break;
7141
+ // this case fixes https://github.com/presscustomizr/nimble-builder/issues/139
7142
  case 'content-in-a-section-to-replace' :
7143
  api.previewer.trigger( 'sek-add-content-in-new-sektion', params );
7144
  break;
7152
  default :
7153
  api.errare( 'sek control panel => ::reactToDrop => invalid drop case : ' + dropCase );
7154
  break;
7155
+ // case 'content-in-new-column' :
7156
+
7157
+ // break;
7158
  }
7159
  };
7160
+
7161
+ // @see module picker or section picker modules
7162
+ // api.czr_sektions.trigger( 'sek-content-dropped', {
7163
+ // drop_target_element : $(this),
7164
+ // position : _position,
7165
+ // before_section : $(this).data('drop-zone-before-section'),
7166
+ // after_section : $(this).data('drop-zone-after-section'),
7167
+ // content_type : evt.originalEvent.dataTransfer.getData( "sek-content-type" ),
7168
+ // content_id : evt.originalEvent.dataTransfer.getData( "sek-content-id" ),
7169
+ // is_user_section : true === evt.originalEvent.dataTransfer.getData( "sek-is-user-section" ),
7170
+ // });
7171
  this.bind( 'sek-content-dropped', function( params ) {
7172
+ //api.infoLog('sek-content-dropped', params );
7173
  try { _do_( params ); } catch( er ) {
7174
  api.errare( 'error when reactToDrop', er );
7175
  }
7184
  Credits : xwp, westonruter, valendesigns, sayedwp, utkarshpatel.
7185
  Date of original code modification : July 2018
7186
  */
7187
+ // fired from ::initialize()
7188
  setupTinyMceEditor: function() {
7189
  var self = this;
7190
+ // OBSERVABLE VALUES
7191
  api.sekEditorExpanded = new api.Value( false );
7192
  api.sekEditorSynchronizedInput = new api.Value();
7193
 
7194
  self.editorEventsListenerSetup = false;//this status will help us ensure that we bind the shared tinyMce instance only once
7195
+
7196
+ // Cache the instance and attach
7197
  var mayBeAwakeTinyMceEditor = function() {
7198
  api.sekTinyMceEditor = api.sekTinyMceEditor || tinyMCE.get( 'czr-customize-content_editor' );
7199
 
7203
  self.trigger('sek-tiny-mce-editor-bound-and-instantiated');
7204
  }
7205
  };
7206
+
7207
+
7208
+ // SET THE SYNCHRONIZED INPUT
7209
+ // CASE 1) When user has clicked on a tiny-mce editable content block
7210
+ // CASE 2) when user click on the edit button in the module ui
7211
+ // @see reactToPreviewMsg
7212
+ // Each time a message is received from the preview, the corresponding action are executed
7213
+ // and an event {msgId}_done is triggered on the current instance
7214
+ // This is how we can listen here to 'sek-edit-module_done'
7215
+ // The sek-edit-module is fired when clicking on a .sek-module wrapper @see ::scheduleUiClickReactions
7216
  self.bind( 'sek-edit-module_done', function( params ) {
7217
  params = _.isObject( params ) ? params : {};
7218
  if ( 'tiny_mce_editor' !== params.clicked_input_type && 'czr_tiny_mce_editor_module' !== params.module_type )
7219
  return;
7220
+
7221
+ // @see preview::scheduleUiClickReactions()
7222
+ // Fixes : https://github.com/presscustomizr/nimble-builder/issues/251
7223
  if ( _.isEmpty( params.syncedTinyMceInputId ) )
7224
  return;
7225
 
7226
  var controlId = params.id;
7227
+ // When the module is a father, we need to assign the right child module id
7228
  if ( true === self.getRegisteredModuleProperty( params.module_type, 'is_father' ) ) {
7229
  var _childModules_ = self.getRegisteredModuleProperty( params.module_type, 'children' );
7230
  if ( _.isEmpty( _childModules_ ) ) {
7237
  });
7238
  }
7239
  }
7240
+
7241
+ // Set a new sync input
7242
  api.sekEditorSynchronizedInput({
7243
  control_id : controlId,
7244
  input_id : params.syncedTinyMceInputId
7247
  api.sekEditorExpanded( true );
7248
  api.sekTinyMceEditor.focus();
7249
  });
7250
+
7251
+ // CASE 1)
7252
+ // Toggle the editor visibility
7253
+ // Change the button text
7254
+ // set the clicked input id as the new one
7255
  $('#customize-theme-controls').on('click', '[data-czr-action="open-tinymce-editor"]', function() {
7256
+ //console.log( '[data-czr-action="toggle-tinymce-editor"]', $(this) , api.sekEditorSynchronizedInput() );
7257
+ // Get the control and the input id from the clicked element
7258
+ // => then updated the synchronized input with them
7259
  var control_id = $(this).data('czr-control-id'),
7260
  input_id = $(this).data('czr-input-id');
7261
  if ( _.isEmpty( control_id ) || _.isEmpty( input_id ) ) {
7271
  api.sekEditorExpanded( true );
7272
  api.sekTinyMceEditor.focus();
7273
  });
7274
+
7275
+
7276
+ // CASE 2)
7277
+ // when the synchronized input gets changed by the user
7278
+ // 1) make sure the editor is expanded
7279
+ // 2) refresh the editor content with the input() one
7280
  api.sekEditorSynchronizedInput.bind( function( to, from ) {
7281
  mayBeAwakeTinyMceEditor();
7282
+ //api.sekEditorExpanded( true );
7283
+ //console.log('MODULE VALUE ?', self.getLevelProperty( { property : 'value', id : to.control_id } ) );
7284
+
7285
+ // When initializing the module, its customized value might not be set yet
7286
+ // => defer the setContent action when the api setting is instantiated
7287
  api( to.control_id, function( _setting_ ) {
7288
  var _currentModuleValue_ = _setting_(),
7289
  _currentInputContent_ = ( _.isObject( _currentModuleValue_ ) && ! _.isEmpty( _currentModuleValue_[ to.input_id ] ) ) ? _currentModuleValue_[ to.input_id ] : '';
7290
+
7291
+ // automatically add line breaks when setting the content
7292
+ // simplified version of php wpautop()
7293
+ // fixes https://github.com/presscustomizr/nimble-builder/issues/259
7294
  _currentInputContent_ = _currentInputContent_.replace(/\r?\n/g, '<br/>');
7295
  try { api.sekTinyMceEditor.setContent( _currentInputContent_ ); } catch( er ) {
7296
  api.errare( 'Error when setting the tiny mce editor content in setupTinyMceEditor', er );
7299
  });
7300
 
7301
  });//api.sekEditorSynchronizedInput.bind( function( to, from )
7302
+
7303
+
7304
+
7305
+
7306
+
7307
+
7308
+
7309
+
7310
+ // REACT TO EDITOR VISIBILITY
7311
  api.sekEditorExpanded.bind( function ( expanded, from, params ) {
7312
  mayBeAwakeTinyMceEditor();
7313
+ //api.infoLog('in api.sekEditorExpanded', expanded );
7314
  if ( expanded ) {
7315
  api.sekTinyMceEditor.focus();
7316
  }
7319
  /*
7320
  * Ensure only the latest input is bound
7321
  */
7322
+ // if ( api.sekTinyMceEditor.locker && api.sekTinyMceEditor.locker !== input ) {
7323
+ // //api.sekEditorExpanded.set( false );
7324
+ // api.sekTinyMceEditor.locker = null;
7325
+ // } if ( ! api.sekTinyMceEditor.locker || api.sekTinyMceEditor.locker === input ) {
7326
+ // $(document.body).toggleClass('czr-customize-content_editor-pane-open', expanded);
7327
+ // api.sekTinyMceEditor.locker = input;
7328
+ // }
7329
 
7330
  $( window )[ expanded ? 'on' : 'off' ]('resize', function() {
7331
  if ( ! api.sekEditorExpanded() )
7339
  if ( expanded ) {
7340
  self.czrResizeEditor( window.innerHeight - self.$editorPane.height() );
7341
  } else {
7342
+ //resize reset
7343
+ //self.container.closest( 'ul.accordion-section-content' ).css( 'padding-bottom', '' );
7344
  self.$preview.css( 'bottom', '' );
7345
  self.$collapseSidebar.css( 'bottom', '' );
7346
  }
7347
  });
7348
+
7349
+
7350
+
7351
+
7352
+ // COLLAPSING THE EDITOR
7353
+ // or on click on the icon located on top of the editor
7354
  $('#czr-customize-content_editor-pane' ).on('click', '[data-czr-action="close-tinymce-editor"]', function() {
7355
  api.sekEditorExpanded( false );
7356
  });
7357
+
7358
+ // on click anywhere but on the 'Edit' ( 'open-tinymce-editor' action ) button
7359
  $('#customize-controls' ).on('click', function( evt ) {
7360
  if ( 'open-tinymce-editor' == $( evt.target ).data( 'czr-action') )
7361
  return;
7362
  api.sekEditorExpanded( false, { context : "clicked anywhere"} );
7363
  });
7364
+
7365
+ // Pressing the escape key collapses the editor
7366
+ // both in the customizer panel and the editor frame
7367
  $(document).on( 'keydown', _.throttle( function( evt ) {
7368
  if ( 27 === evt.keyCode ) {
7369
  api.sekEditorExpanded( false );
7409
 
7410
  attachEventsToEditor : function() {
7411
  var self = this;
7412
+ // Cache some dom elements
7413
  self.$editorTextArea = $( '#czr-customize-content_editor' );
7414
  self.$editorPane = $( '#czr-customize-content_editor-pane' );
7415
  self.$editorDragbar = $( '#czr-customize-content_editor-dragbar' );
7420
 
7421
  self.$preview = $( '#customize-preview' );
7422
  self.$collapseSidebar = $( '.collapse-sidebar' );
7423
+
7424
+ // REACT TO EDITOR CHANGES
7425
+ // bind on / off event actions
7426
+ // Problem to solve : we need to attach event to both the visual and the text editor tab ( html editor ), which have different selectors
7427
+ // If we bind only the visual editor, changes made to the simple textual html editor won't be taken into account
7428
+ // VISUAL EDITOR
7429
  api.sekTinyMceEditor.on( 'input change keyup', function( evt ) {
7430
+ //console.log('api.sekTinyMceEditor on input change keyup', evt.type, api.sekTinyMceEditor.getContent() );
7431
+ // set the input value
7432
  if ( api.control.has( api.sekEditorSynchronizedInput().control_id ) ) {
7433
  try { api.control( api.sekEditorSynchronizedInput().control_id )
7434
  .trigger( 'tinyMceEditorUpdated', {
7441
  }
7442
  }
7443
  });
7444
+
7445
+ // TEXT EDITOR
7446
  self.$editorTextArea.on( 'input', function( evt ) {
7447
+ //console.log('self.$editorTextArea EVENT ', evt.type, self.$editorTextArea.val() );
7448
  try { api.control( api.sekEditorSynchronizedInput().control_id )
7449
  .trigger( 'tinyMceEditorUpdated', {
7450
  input_id : api.sekEditorSynchronizedInput().input_id,
7455
  api.errare( 'Error when triggering tinyMceEditorUpdated', er );
7456
  }
7457
  });
7458
+
7459
+
7460
+
7461
+ // LISTEN TO USER DRAG ACTIONS => RESIZE EDITOR
7462
+ // Note : attaching event to the dragbar element was broken => the mouseup event could not be triggered for some reason, probably because adding the class "czr-customize-content_editor-pane-resize", makes us lose access to the dragbar element
7463
+ // => that's why we listen for the mouse events when they have bubbled up to the parent wrapper, and then check if the target is our candidate.
7464
  $('#czr-customize-content_editor-pane').on( 'mousedown mouseup', function( evt ) {
7465
  if ( 'mousedown' === evt.type && 'czr-customize-content_editor-dragbar' !== $(evt.target).attr('id') && ! $(evt.target).hasClass('czr-resize-handle') )
7466
  return;
7491
 
7492
  czrResizeEditor : function( position ) {
7493
  var self = this,
7494
+ //$sectionContent = input.container.closest( 'ul.accordion-section-content' ),
7495
  windowHeight = window.innerHeight,
7496
  windowWidth = window.innerWidth,
7497
  minScroll = 40,
7533
  'bottom',
7534
  collapseMinSpacing > windowHeight - args.height ? self.$mceStatusbar.outerHeight() + collapseBottomInsideEditor : args.height + collapseBottomOutsideEditor
7535
  );
7536
+
7537
+ //$sectionContent.css( 'padding-bottom', windowWidth <= mobileWidth ? args.height : '' );
7538
  }
7539
  });//$.extend()
7540
  })( wp.customize, jQuery );//global sektionsLocalizedData
7541
  var CZRSeksPrototype = CZRSeksPrototype || {};
7542
  (function ( api, $ ) {
7543
+ // Skope
7544
  $.extend( CZRSeksPrototype, api.Events );
7545
  var CZR_SeksConstructor = api.Class.extend( CZRSeksPrototype );
7546
+
7547
+ // Schedule skope instantiation on api ready
7548
+ // api.bind( 'ready' , function() {
7549
+ // api.czr_skopeBase = new api.CZR_SeksConstructor();
7550
+ // });
7551
  try { api.czr_sektions = new CZR_SeksConstructor(); } catch( er ) {
7552
  api.errare( 'api.czr_sektions => problem on instantiation', er );
7553
  }
7554
  })( wp.customize, jQuery );//global sektionsLocalizedData
7555
  ( function ( api, $, _ ) {
7556
+ // all available input type as a map
7557
  api.czrInputMap = api.czrInputMap || {};
7558
+
7559
+
7560
+ // HELPERS USED IN ALL SPACING INPUT TYPES
7561
+ // "this" is input
7562
  var validateUnit = function( unit ) {
7563
  if ( ! _.contains( ['px', 'em', '%'], unit ) ) {
7564
  api.errare( 'error : invalid unit for input ' + this.id, unit );
7571
  },
7572
  unitButtonsSetup = function( $wrapper ) {
7573
  var input = this;
7574
+ // Schedule unit changes on button click
7575
+ // @param params can be { previewed_device_switched : true }
7576
  $wrapper.on( 'click', '.sek-ui-button', function( evt, params ) {
7577
  evt.preventDefault();
7578
+ // handle the is-selected css class toggling
7579
  $wrapper.find('.sek-ui-button').removeClass('is-selected').attr( 'aria-pressed', false );
7580
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
7581
+ // set the current unit Value
7582
  input.css_unit( $(this).data('sek-unit'), params );
7583
  });
7584
+
7585
+ // add is-selected button on init to the relevant unit button
7586
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ ( input.initial_unit || 'px' ) +'"]').addClass('is-selected').attr( 'aria-pressed', true );
7587
  },
7588
  setupResetAction = function( $wrapper, defaultVal ) {
7594
  });
7595
 
7596
  input( defaultVal );
7597
+ // Reset unit to pixels
7598
  $('.sek-unit-wrapper', $wrapper ).find('[data-sek-unit="px"]').trigger('click');
7599
  });
7600
  };
7610
  $wrapper = $('.sek-spacing-wrapper', input.container ),
7611
  inputRegistrationParams = api.czr_sektions.getInputRegistrationParams( input.id, input.module.module_type ),
7612
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : [];
7613
+
7614
+ // Listen to user actions on the inputs and set the input value
7615
  $wrapper.on( 'input', 'input[type="number"]', function(evt) {
7616
  var _type_ = $(this).closest('[data-sek-spacing]').data('sek-spacing'),
7617
  _newInputVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} ),
7618
  _rawVal = $(this).val();
7619
+
7620
+ // Validates
7621
+ // @fixes https://github.com/presscustomizr/nimble-builder/issues/26
7622
  if ( ( _.isString( _rawVal ) && ! _.isEmpty( _rawVal ) ) || _.isNumber( _rawVal ) ) {
7623
  _newInputVal[ _type_ ] = _rawVal;
7624
  } else {
7625
+ // this allow users to reset a given padding / margin instead of reseting them all at once with the "reset all spacing" option
7626
  _newInputVal = _.omit( _newInputVal, _type_ );
7627
  }
7628
  input( _newInputVal );
7629
  });
7630
+ // Schedule a reset action
7631
  setupResetAction.call( input, $wrapper, defaultVal );
7632
+
7633
+ // Synchronize on init
7634
  if ( _.isObject( input() ) ) {
7635
  _.each( input(), function( _val_, _key_ ) {
7636
  $( '[data-sek-spacing="' + _key_ +'"]', $wrapper ).find( 'input[type="number"]' ).val( _val_ );
7637
  });
7638
+ // loop on the unit buttons and check which one should be clicked
7639
  var unitToActivate = 'px';
7640
  $('.sek-unit-wrapper .sek-ui-button', input.container ).each( function() {
7641
  var unit = $(this).data('sek-unit');
7642
+ // do we have a unit for the current device ?
7643
  if ( ! _.isEmpty( input() ) ) {
7644
  if ( ! _.isEmpty( input()[ 'unit' ] ) ) {
7645
  if ( unit === input()[ 'unit' ] ) {
7650
  });
7651
  $('.sek-unit-wrapper', input.container ).find('[data-sek-unit="' + validateUnit.call( input, unitToActivate ) + '"]').trigger('click');
7652
  }
7653
+
7654
+ // Set the initial unit
7655
  var initial_value = input();
7656
  input.initial_unit = 'px';
7657
  if ( ! _.isEmpty( initial_value ) ) {
7658
  input.initial_unit = _.isEmpty( initial_value['unit'] ) ? 'px' : initial_value['unit'];
7659
  }
7660
+
7661
+ // initialize the unit with the value provided in the dom
7662
  input.css_unit = new api.Value( validateUnit.call( input, input.initial_unit ) );
7663
+
7664
+ // React to a unit change
7665
  input.css_unit.bind( function( to ) {
7666
  to = _.isEmpty( to ) ? 'px' : to;
7667
  var _newInputVal;
7670
  _newInputVal[ 'unit' ] = to;
7671
  input( _newInputVal );
7672
  });
7673
+
7674
+ // Schedule unit changes on button click
7675
+ // add is-selected button on init to the relevant unit button
7676
  unitButtonsSetup.call( input, $wrapper );
7677
  }
7678
  });//$.extend( api.czrInputMap, {})
7694
  /* ------------------------------------------------------------------------- *
7695
  * SPACING WITH DEVICE SWITCHER
7696
  /* ------------------------------------------------------------------------- */
7697
+ // input_type => callback fn to fire in the Input constructor on initialize
7698
+ // the callback can receive specific params define in each module constructor
7699
+ // For example, a content picker can be given params to display only taxonomies
7700
+ // the default input_event_map can also be overriden in this callback
7701
  $.extend( api.czrInputMap, {
7702
  spacingWithDeviceSwitcher : function( input_options ) {
7703
+ // DEFINITIONS
7704
  var input = this,
7705
  $wrapper = $('.sek-spacing-wrapper', input.container ),
7706
  inputRegistrationParams = api.czr_sektions.getInputRegistrationParams( input.id, input.module.module_type ),
7707
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {};
7708
+
7709
+ // Recursive helper
7710
+ // return the value set for the currently previewed device if exists
7711
+ // OR
7712
+ // return the inherited value from the first parent device for which the value is set
7713
+ // OR
7714
+ // falls back on the module default
7715
  var getCurrentDeviceActualOrInheritedValue = function( inputValues, currentDevice ) {
7716
  var deviceHierarchy = [ 'mobile' , 'tablet', 'desktop' ];
7717
  if ( _.has( inputValues, currentDevice ) ) {
7725
  }
7726
  }
7727
  };
7728
+
7729
+ // Synchronizes on init + refresh on previewed device changes
7730
  var syncWithPreviewedDevice = function( currentDevice ) {
7731
  var inputValues = $.extend( true, {}, _.isObject( input() ) ? input() : {} ),
7732
  clonedDefault = $.extend( true, {}, defaultVal );
7733
  inputValues = _.isObject( inputValues ) ? $.extend( clonedDefault, inputValues ) : clonedDefault;
7734
  var _currentDeviceValues = getCurrentDeviceActualOrInheritedValue( inputValues, currentDevice );
7735
+
7736
+ // loop on each sek spacing and check if we find a value to write for this device
7737
  $( '[data-sek-spacing]', $wrapper ).each( function() {
7738
  var spacingType = $(this).data('sek-spacing'),
7739
  _val_ = '';
7740
+ // do we have a val for the current device ?
7741
  if ( ! _.isEmpty( _currentDeviceValues ) ) {
7742
  if ( ! _.isEmpty( _currentDeviceValues[ spacingType ] ) ) {
7743
  _val_ = _currentDeviceValues[ spacingType ];
7745
  }
7746
  $(this).find( 'input[type="number"]' ).val( _val_ );
7747
  });
7748
+
7749
+ // loop on the unit button and check which one should be clicked
7750
  var unitToActivate = 'px';
7751
  $( '.sek-unit-wrapper .sek-ui-button', input.container).each( function() {
7752
  var unit = $(this).data('sek-unit');
7753
+ // do we have a unit for the current device ?
7754
  if ( ! _.isEmpty( _currentDeviceValues ) ) {
7755
  if ( ! _.isEmpty( _currentDeviceValues[ 'unit' ] ) ) {
7756
  if ( unit === _currentDeviceValues[ 'unit' ] ) {
7761
  });
7762
  $('.sek-unit-wrapper', input.container ).find('[data-sek-unit="' + validateUnit.call( input, unitToActivate ) + '"]').trigger('click', { previewed_device_switched : true });// We don't want to update the input();
7763
  };
7764
+
7765
+
7766
+
7767
+
7768
+ // SETUP
7769
  api.czr_sektions.maybeSetupDeviceSwitcherForInput.call( input );
7770
+
7771
+ // Set the initial unit
7772
  var initial_value = input();
7773
  input.initial_unit = 'px';
7774
  if ( ! _.isEmpty( initial_value ) && ! _.isEmpty( initial_value[ input.previewedDevice() ] ) ) {
7775
  input.initial_unit = _.isEmpty( initial_value[ input.previewedDevice() ]['unit'] ) ? 'px' : initial_value[ input.previewedDevice() ]['unit'];
7776
  }
7777
+
7778
+ // initialize the unit with the value provided in the dom
7779
  input.css_unit = new api.Value( validateUnit.call( input, input.initial_unit ) );
7780
+
7781
+
7782
+
7783
+
7784
+ // SCHEDULE REACTIONS
7785
+ // Listen to user actions on the inputs and set the input value
7786
  $wrapper.on( 'input', 'input[type="number"]', function(evt) {
7787
  var changedSpacingType = $(this).closest('[data-sek-spacing]').data('sek-spacing'),
7788
  changedNumberInputVal = $(this).val(),
7791
 
7792
  _newInputVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} );
7793
  _newInputVal[ previewedDevice ] = $.extend( true, {}, _newInputVal[ previewedDevice ] || {} );
7794
+ // Validates
7795
+ // @fixes https://github.com/presscustomizr/nimble-builder/issues/26
7796
  if ( ( _.isString( changedNumberInputVal ) && ! _.isEmpty( changedNumberInputVal ) ) || _.isNumber( changedNumberInputVal ) ) {
7797
  _newInputVal[ previewedDevice ][ changedSpacingType ] = changedNumberInputVal;
7798
  } else {
7799
+ // this allow users to reset a given padding / margin instead of reseting them all at once with the "reset all spacing" option
7800
  _newInputVal[ previewedDevice ] = _.omit( _newInputVal[ previewedDevice ], changedSpacingType );
7801
  }
7802
 
7803
  input( _newInputVal );
7804
  });
7805
+
7806
+ // Schedule a reset action
7807
  setupResetAction.call( input, $wrapper, defaultVal );
7808
+
7809
+ // react to previewed device changes
7810
+ // input.previewedDevice is updated in api.czr_sektions.maybeSetupDeviceSwitcherForInput()
7811
  input.previewedDevice.bind( function( currentDevice ) {
7812
  try { syncWithPreviewedDevice( currentDevice ); } catch( er ) {
7813
  api.errare('Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id ' + input.id , er );
7814
  }
7815
  });
7816
+
7817
+
7818
+ // React to a unit change
7819
+ // Don't move when switching the device
7820
  input.css_unit.bind( function( to, from, params ) {
7821
  if ( _.isObject( params ) && true === params.previewed_device_switched )
7822
  return;
7829
  _newInputVal[ previewedDevice ][ 'unit' ] = to;
7830
  input( _newInputVal );
7831
  });
7832
+
7833
+ // Schedule unit changes on button click
7834
+ // add is-selected button on init to the relevant unit button
7835
  unitButtonsSetup.call( input, $wrapper );
7836
+
7837
+
7838
+
7839
+ // INITIALIZES
7840
  try { syncWithPreviewedDevice( api.previewedDevice() ); } catch( er ) {
7841
  api.errare('Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id ' + input.id , er );
7842
  }
7846
 
7847
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
7848
  ( function ( api, $, _ ) {
7849
+ // all available input type as a map
7850
  api.czrInputMap = api.czrInputMap || {};
7851
+
7852
+ // input_type => callback fn to fire in the Input constructor on initialize
7853
+ // the callback can receive specific params define in each module constructor
7854
+ // For example, a content picker can be given params to display only taxonomies
7855
+ // the default input_event_map can also be overriden in this callback
7856
  $.extend( api.czrInputMap, {
7857
  /* ------------------------------------------------------------------------- *
7858
  * BG POSITION SIMPLE
7859
  /* ------------------------------------------------------------------------- */
7860
  bg_position : function( input_options ) {
7861
  var input = this;
7862
+ // Listen to user actions on the inputs and set the input value
7863
  $('.sek-bg-pos-wrapper', input.container ).on( 'change', 'input[type="radio"]', function(evt) {
7864
  input( $(this).val() );
7865
  });
7866
+
7867
+ // Synchronize on init
7868
  if ( ! _.isEmpty( input() ) ) {
7869
  input.container.find('input[value="'+ input() +'"]').attr('checked', true).trigger('click');
7870
  }
7878
  var input = this,
7879
  inputRegistrationParams = api.czr_sektions.getInputRegistrationParams( input.id, input.module.module_type ),
7880
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {};
7881
+
7882
+ // SETUP
7883
  api.czr_sektions.maybeSetupDeviceSwitcherForInput.call( input );
7884
 
7885
  var getCurrentDeviceActualOrInheritedValue = function( inputValues, currentDevice ) {
7895
  }
7896
  }
7897
  };
7898
+
7899
+ // Synchronizes on init + refresh on previewed device changes
7900
  var syncWithPreviewedDevice = function( currentDevice ) {
7901
  var inputValues = $.extend( true, {}, _.isObject( input() ) ? input() : {} ),
7902
  clonedDefault = $.extend( true, {}, defaultVal );
7905
 
7906
  input.container.find('input[value="'+ _currentDeviceValue +'"]').attr('checked', true).trigger('click', { previewed_device_switched : true } );
7907
  };
7908
+
7909
+
7910
+
7911
+ // Listen to user actions on the inputs and set the input value
7912
  $('.sek-bg-pos-wrapper', input.container ).on( 'change', 'input[type="radio"]', function( evt ) {
7913
  var changedRadioVal = $(this).val(),
7914
  _newInputVal;
7918
 
7919
  input( _newInputVal );
7920
  });
7921
+
7922
+
7923
+ // react to previewed device changes
7924
+ // input.previewedDevice is updated in api.czr_sektions.maybeSetupDeviceSwitcherForInput()
7925
  input.previewedDevice.bind( function( currentDevice ) {
7926
  try { syncWithPreviewedDevice( currentDevice ); } catch( er ) {
7927
  api.errare('Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id ' + input.id , er );
7928
  }
7929
  });
7930
+
7931
+ // INITIALIZES
7932
  try { syncWithPreviewedDevice( api.previewedDevice() ); } catch( er ) {
7933
  api.errare('Error when firing syncWithPreviewedDevice for input type bgPositionWithDeviceSwitcher for input id ' + input.id , er );
7934
  }
7938
 
7939
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
7940
  ( function ( api, $, _ ) {
7941
+ // all available input type as a map
7942
  api.czrInputMap = api.czrInputMap || {};
7943
+
7944
+ // Generic method to instantiate the following input types :
7945
+ // horizTextAlignmentWithDeviceSwitcher and horizAlignmentWithDeviceSwitcher => tmpl => 3_0_5_sek_input_tmpl_horizontal_alignment.php
7946
+ // verticalAlignWithDeviceSwitcher => tmpl => 3_0_6_sek_input_tmpl_vertical_alignment.php
7947
  var x_or_y_AlignWithDeviceSwitcher = function( params ) {
7948
  var input = this,
7949
  inputRegistrationParams = api.czr_sektions.getInputRegistrationParams( input.id, input.module.module_type ),
7950
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {},
7951
  tmplSelector = 'verticalAlignWithDeviceSwitcher' === input.type ? '.sek-v-align-wrapper' : '.sek-h-align-wrapper',// <= because used by 2 different input tmpl
7952
  $wrapper = $( tmplSelector, input.container );
7953
+
7954
+ // SETUP
7955
  api.czr_sektions.maybeSetupDeviceSwitcherForInput.call( input );
7956
 
7957
  var getCurrentDeviceActualOrInheritedValue = function( inputValues, currentDevice ) {
7967
  }
7968
  }
7969
  };
7970
+
7971
+ // Synchronizes on init + refresh on previewed device changes
7972
  var syncWithPreviewedDevice = function( currentDevice ) {
7973
  var inputValues = $.extend( true, {}, _.isObject( input() ) ? input() : {} ),
7974
  clonedDefault = $.extend( true, {}, defaultVal );
7975
  inputValues = _.isObject( inputValues ) ? $.extend( clonedDefault, inputValues ) : clonedDefault;
7976
  var _currentDeviceValue = getCurrentDeviceActualOrInheritedValue( inputValues, currentDevice );
7977
+
7978
+ //input.container.find('input[value="'+ _currentDeviceValue +'"]').attr('checked', true).trigger('click', { previewed_device_switched : true } );
7979
  $wrapper.find('.selected').removeClass('selected');
7980
  $wrapper.find( 'div[data-sek-align="' + _currentDeviceValue +'"]' ).addClass('selected');
7981
  };
7982
+
7983
+ // on click
7984
  $wrapper.on( 'click', '[data-sek-align]', function(evt) {
7985
  evt.preventDefault();
7986
  var _newInputVal;
7993
  input( _newInputVal );
7994
  });
7995
  });
7996
+
7997
+ // react to previewed device changes
7998
+ // input.previewedDevice is updated in api.czr_sektions.maybeSetupDeviceSwitcherForInput()
7999
  input.previewedDevice.bind( function( currentDevice ) {
8000
  try { syncWithPreviewedDevice( currentDevice ); } catch( er ) {
8001
  api.errare('Error when firing syncWithPreviewedDevice for input type : ' + input.type + ' for input id ' + input.id , er );
8002
  }
8003
  });
8004
+
8005
+ // INITIALIZES
8006
  try { syncWithPreviewedDevice( api.previewedDevice() ); } catch( er ) {
8007
  api.errare('Error when firing syncWithPreviewedDevice for input type : ' + input.type + ' for input id ' + input.id , er );
8008
  }
8009
  };
8010
+
8011
+
8012
+ // input_type => callback fn to fire in the Input constructor on initialize
8013
+ // the callback can receive specific params define in each module constructor
8014
+ // For example, a content picker can be given params to display only taxonomies
8015
+ // the default input_event_map can also be overriden in this callback
8016
  $.extend( api.czrInputMap, {
8017
  horizTextAlignmentWithDeviceSwitcher : x_or_y_AlignWithDeviceSwitcher,
8018
  horizAlignmentWithDeviceSwitcher : x_or_y_AlignWithDeviceSwitcher,
8020
  });//$.extend( api.czrInputMap, {})
8021
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
8022
  ( function ( api, $, _ ) {
8023
+ // all available input type as a map
8024
  api.czrInputMap = api.czrInputMap || {};
8025
+
8026
+ // input_type => callback fn to fire in the Input constructor on initialize
8027
+ // the callback can receive specific params define in each module constructor
8028
+ // For example, a content picker can be given params to display only taxonomies
8029
+ // the default input_event_map can also be overriden in this callback
8030
  $.extend( api.czrInputMap, {
8031
  font_size : function( params ) {
8032
  api.czr_sektions.setupFontSizeAndLineHeightInputs.call(this);
8037
 
8038
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
8039
  ( function ( api, $, _ ) {
8040
+ // all available input type as a map
8041
  api.czrInputMap = api.czrInputMap || {};
8042
+
8043
+ // input_type => callback fn to fire in the Input constructor on initialize
8044
+ // the callback can receive specific params define in each module constructor
8045
+ // For example, a content picker can be given params to display only taxonomies
8046
+ // the default input_event_map can also be overriden in this callback
8047
  $.extend( api.czrInputMap, {
8048
  line_height : function( params ) {
8049
  api.czr_sektions.setupFontSizeAndLineHeightInputs.call(this);
8053
 
8054
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
8055
  ( function ( api, $, _ ) {
8056
+ // all available input type as a map
8057
  api.czrInputMap = api.czrInputMap || {};
8058
+
8059
+ // input_type => callback fn to fire in the Input constructor on initialize
8060
+ // the callback can receive specific params define in each module constructor
8061
+ // For example, a content picker can be given params to display only taxonomies
8062
+ // the default input_event_map can also be overriden in this callback
8063
  $.extend( api.czrInputMap, {
8064
+ // FONT PICKER
8065
  font_picker : function( input_options ) {
8066
  var input = this,
8067
  item = input.input_parent;
8075
  if ( ! _.isUndefined( api.sek_fetchingFontCollection ) && 'pending' == api.sek_fetchingFontCollection.state() ) {
8076
  _ajaxRequest_ = api.sek_fetchingFontCollection;
8077
  } else {
8078
+ // This utility handles a cached version of the font_list once fetched the first time
8079
+ // @see api.CZR_Helpers.czr_cachedTmpl
8080
  _ajaxRequest_ = api.CZR_Helpers.getModuleTmpl( {
8081
  tmpl : 'font_list',
8082
  module_type: 'font_picker_input',
8085
  api.sek_fetchingFontCollection = _ajaxRequest_;
8086
  }
8087
  _ajaxRequest_.done( function( _serverTmpl_ ) {
8088
+ // Ensure we have a string that's JSON.parse-able
8089
  if ( typeof _serverTmpl_ !== 'string' || _serverTmpl_[0] !== '{' ) {
8090
  throw new Error( 'font_picker => server list is not JSON.parse-able');
8091
  }
8132
  return selectFocusResults.promise();
8133
 
8134
  };//_preprocessSelect2ForFontFamily
8135
+
8136
+ // @return void();
8137
+ // Instantiates a czrSelect2 select input
8138
+ // http://ivaynberg.github.io/czrSelect2/#documentation
8139
  var _setupSelectForFontFamilySelector = function( customResultsAdapter, fontCollections ) {
8140
  var _model = item(),
8141
  _googleFontsFilteredBySubset = function() {
8152
 
8153
  },
8154
  $fontSelectElement = $( 'select[data-czrtype="' + input.id + '"]', input.container );
8155
+
8156
+ // generates the options
8157
+ // @param type = cfont or gfont
8158
  var _generateFontOptions = function( fontList, type ) {
8159
  var _html_ = '';
8160
  _.each( fontList , function( font_data ) {
8174
  });
8175
  return _html_;
8176
  };
8177
+
8178
+ //add the first option
8179
  if ( _.isNull( input() ) || _.isEmpty( input() ) ) {
8180
  $fontSelectElement.append( '<option value="none" selected="selected">' + sektionsLocalizedData.i18n['Select a font family'] + '</option>' );
8181
  } else {
8182
  $fontSelectElement.append( '<option value="none">' + sektionsLocalizedData.i18n['Select a font family'] + '</option>' );
8183
  }
8184
+
8185
+
8186
+ // generate the cfont and gfont html
8187
  _.each( [
8188
  {
8189
  title : sektionsLocalizedData.i18n['Web Safe Fonts'],
8201
  });
8202
 
8203
  var _fonts_czrSelect2_params = {
8204
+ //minimumResultsForSearch: -1, //no search box needed
8205
+ //templateResult: paintFontOptionElement,
8206
+ //templateSelection: paintFontOptionElement,
8207
  escapeMarkup: function(m) { return m; },
8208
  };
8209
  /*
8215
  closeOnSelect: false,
8216
  } );
8217
  }
8218
+
8219
+ //http://ivaynberg.github.io/czrSelect2/#documentation
8220
+ //FONTS
8221
  $fontSelectElement.czrSelect2( _fonts_czrSelect2_params );
8222
  $( '.czrSelect2-selection__rendered', input.container ).css( getInlineFontStyle( input() ) );
8223
 
8224
  };//_setupSelectForFontFamilySelector
8225
+
8226
+ // @return {} used to set $.css()
8227
+ // @param font {string}.
8228
+ // Example : Aclonica:regular
8229
+ // Example : Helvetica Neue, Helvetica, Arial, sans-serif
8230
  var getInlineFontStyle = function( _fontFamily_ ){
8231
+ // the font is set to 'none' when "Select a font family" option is picked
8232
  if ( ! _.isString( _fontFamily_ ) || _.isEmpty( _fontFamily_ ) )
8233
  return {};
8234
+
8235
+ //always make sure we remove the prefix.
8236
  _fontFamily_ = _fontFamily_.replace('[gfont]', '').replace('[cfont]', '');
8237
 
8238
  var module = this,
8251
  'font-style' : font_style || 'normal'
8252
  };
8253
  };
8254
+
8255
+ // @return the font family name only from a pre Google formated
8256
+ // Example : input is Inknut+Antiqua:regular
8257
+ // Should return Inknut Antiqua
8258
  var getFontFamilyName = function( rawFontFamily ) {
8259
  if ( ! _.isString( rawFontFamily ) || _.isEmpty( rawFontFamily ) )
8260
  return rawFontFamily;
8277
 
8278
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
8279
  ( function ( api, $, _ ) {
8280
+ // all available input type as a map
8281
  api.czrInputMap = api.czrInputMap || {};
8282
+ // input_type => callback fn to fire in the Input constructor on initialize
8283
+ // the callback can receive specific params define in each module constructor
8284
+ // For example, a content picker can be given params to display only taxonomies
8285
+ // the default input_event_map can also be overriden in this callback
8286
  $.extend( api.czrInputMap, {
8287
+ // FONT AWESOME ICON PICKER
8288
+ // FONT AWESOME ICON PICKER
8289
  fa_icon_picker : function() {
8290
  var input = this,
8291
  _selected_found = false;
8292
+
8293
+ //generates the options
8294
  var _generateOptions = function( iconCollection ) {
8295
  _.each( iconCollection , function( iconClass ) {
8296
  var _attributes = {
8297
  value: iconClass,
8298
+ //iconClass is in the form "fa(s|b|r) fa-{$name}" so the name starts at position 7
8299
  html: api.CZR_Helpers.capitalize( iconClass.substring( 7 ) )
8300
  };
8301
 
8309
 
8310
  var addIcon = function ( state ) {
8311
  if (! state.id) { return state.text; }
8312
+
8313
+ //two spans here because we cannot wrap the text into the icon span as the solid FA5 font-weight is bold
8314
  var $state = $(
8315
  '<span class="' + state.element.value + '"></span><span class="social-name">&nbsp;&nbsp;' + state.text + '</span>'
8316
  );
8317
  return $state;
8318
  };
8319
+
8320
+ //blank option to allow placeholders
8321
  var $_placeholder;
8322
  if ( _selected_found ) {
8323
  $_placeholder = $('<option>');
8324
  } else {
8325
  $_placeholder = $('<option>', { selected: 'selected' } );
8326
  }
8327
+ //Initialize czrSelect2
8328
  $( 'select[data-czrtype]', input.container )
8329
  .prepend( $_placeholder )
8330
  .czrSelect2({
8341
  if ( ! _.isEmpty( input.sek_faIconCollection ) ) {
8342
  _dfd_.resolve( input.sek_faIconCollection );
8343
  } else {
8344
+ // This utility handles a cached version of the font_list once fetched the first time
8345
+ // @see api.CZR_Helpers.czr_cachedTmpl
8346
  api.CZR_Helpers.getModuleTmpl( {
8347
  tmpl : 'icon_list',
8348
  module_type: 'fa_icon_picker_input',
8349
  module_id : input.module.id
8350
  } ).done( function( _serverTmpl_ ) {
8351
+ // Ensure we have a string that's JSON.parse-able
8352
  if ( typeof _serverTmpl_ !== 'string' || _serverTmpl_[0] !== '[' ) {
8353
  throw new Error( 'fa_icon_picker => server list is not JSON.parse-able');
8354
  }
8358
  _dfd_.reject( _r_ );
8359
  });
8360
  }
8361
+ //return dfd.promise();
8362
  });
8363
  };//_getIconsCollections
8364
+
8365
+ // do
8366
  var _do_ = function( params ) {
8367
  if ( true === input.iconCollectionSet )
8368
  return;
8369
  $.when( _getIconsCollections() ).done( function( iconCollection ) {
8370
  _generateOptions( iconCollection );
8371
  if ( params && true === params.open_on_init ) {
8372
+ // let's open select2 after a delay ( because there's no 'ready' event with select2 )
8373
  _.delay( function() {
8374
  try{ $( 'select[data-czrtype]', input.container ).czrSelect2('open'); }catch(er) {}
8375
  }, 100 );
8379
  });
8380
  input.iconCollectionSet = true;
8381
  };
8382
+
8383
+ // Generate options and open select2
8384
  input.container.on('click', function() {
8385
  _do_();
8386
  });
8387
+
8388
+ // schedule the iconCollectionSet after a delay
8389
  _.delay( function() { _do_( { open_on_init : false } );}, 1000 );
8390
 
8391
  }
8393
 
8394
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
8395
  ( function ( api, $, _ ) {
8396
+ // all available input type as a map
8397
  api.czrInputMap = api.czrInputMap || {};
8398
+
8399
+ // input_type => callback fn to fire in the Input constructor on initialize
8400
+ // the callback can receive specific params define in each module constructor
8401
+ // For example, a content picker can be given params to display only taxonomies
8402
+ // the default input_event_map can also be overriden in this callback
8403
  $.extend( api.czrInputMap, {
8404
  code_editor : function( input_options ) {
8405
  var input = this,
8409
  $textarea = input.container.find( 'textarea' ),
8410
  $input_title = input.container.find( '.customize-control-title' ),
8411
  editor_params = $textarea.data( 'editor-params' );
8412
+
8413
+ // // When using blocking notifications (type: error) the following block will append a checkbox to the
8414
+ // // notification message block that once checked will allow to save and publish anyways
8415
+
8416
+ // // Note that rendering is debounced so the props will be used when rendering happens after add event.
8417
+ // control.notifications.bind( 'add', function( notification ) {
8418
+ // // Skip if control notification is not from setting csslint_error notification.
8419
+ // if ( notification.code !== control.setting.id + ':' + input.id ) {
8420
+ // return;
8421
+ // }
8422
+
8423
+ // // Customize the template and behavior of csslint_error notifications.
8424
+ // notification.templateId = 'customize-code-editor-lint-error-notification';
8425
+ // notification.render = (function( render ) {
8426
+ // return function() {
8427
+ // var li = render.call( this );
8428
+ // li.find( 'input[type=checkbox]' ).on( 'click', function() {
8429
+ // control.setting.notifications.remove( input.id );
8430
+ // } );
8431
+ // return li;
8432
+ // };
8433
+ // })( notification.render );
8434
+ // } );
8435
+
8436
+ // Obtain editorSettings for instantiation.
8437
  if ( wp.codeEditor && ( _.isUndefined( editor_params ) || false !== editor_params ) ) {
8438
+ // Obtain this input editor settings (we don't have defaults).
8439
  editorSettings = editor_params;
8440
  }
8441
 
8442
  input.isReady.done( function() {
8443
  var _doInstantiate = function( evt ) {
8444
  var input = this;
8445
+ // Bail if we have an instance
8446
  if ( ! _.isEmpty( input.editor ) )
8447
  return;
8448
+ // Bail if the control is not expanded yet
8449
  if ( _.isEmpty( input.module.control.container.attr('data-sek-expanded') ) || "false" == input.module.control.container.attr('data-sek-expanded') )
8450
  return;
8451
 
8458
  } else {
8459
  initPlainTextareaEditor();
8460
  }
8461
+ //focus the editor
8462
  $input_title.click();
8463
  }, 10 );
8464
  };
8465
+ // Try to instantiate now
8466
  _doInstantiate.call(input);
8467
+
8468
+ // the input should be visible otherwise the code mirror initializes wrongly:
8469
+ // e.g. bad ui (bad inline CSS maths), not visible content until click.
8470
+ // When the code_editor input is rendered in an accordion control ( @see CZRSeksPrototype.scheduleModuleAccordion ), we need to defer the instantiation when the control has been expanded.
8471
+ // fixes @see https://github.com/presscustomizr/nimble-builder/issues/176
8472
  input.module.control.container.on('sek-accordion-expanded', function() {
8473
  _doInstantiate.call( input );
8474
  });
8489
  });
8490
 
8491
  input.editor = wp.codeEditor.initialize( $textarea, settings );
8492
+
8493
+
8494
+ // Improve the editor accessibility.
8495
  $( input.editor.codemirror.display.lineDiv )
8496
  .attr({
8497
  role: 'textbox',
8499
  'aria-label': $input_title.html(),
8500
  'aria-describedby': 'editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4'
8501
  });
8502
+
8503
+ // Focus the editor when clicking on its title.
8504
  $input_title.on( 'click', function( evt ) {
8505
  evt.stopPropagation();
8506
  input.editor.codemirror.focus();
8518
  });
8519
 
8520
  input.editor.codemirror.setValue( input() );
8521
+
8522
+ // Update CodeMirror when the setting is changed by another plugin.
8523
  /* TODO: check this */
8524
  input.bind( input.id + ':changed', function( value ) {
8525
  if ( ! suspendEditorUpdate ) {
8526
  input.editor.codemirror.setValue( value );
8527
  }
8528
  });
8529
+
8530
+ // Prevent collapsing section when hitting Esc to tab out of editor.
8531
  input.editor.codemirror.on( 'keydown', function onKeydown( codemirror, event ) {
8532
  var escKeyCode = 27;
8533
  if ( escKeyCode === event.keyCode ) {
8558
  }
8559
  return;
8560
  }
8561
+
8562
+ // Short-circuit if tab key is not being pressed or if a modifier key *is* being pressed.
8563
  if ( tabKeyCode !== event.keyCode || event.ctrlKey || event.altKey || event.shiftKey ) {
8564
  return;
8565
  }
8566
+
8567
+ // Prevent capturing Tab characters if Esc was pressed.
8568
  if ( $textarea.data( 'next-tab-blurs' ) ) {
8569
  return;
8570
  }
8608
  });//$.extend( api.czrInputMap, {})
8609
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
8610
  ( function ( api, $, _ ) {
8611
+ // all available input type as a map
8612
  api.czrInputMap = api.czrInputMap || {};
8613
+
8614
+ // input_type => callback fn to fire in the Input constructor on initialize
8615
+ // the callback can receive specific params define in each module constructor
8616
+ // For example, a content picker can be given params to display only taxonomies
8617
+ // the default input_event_map can also be overriden in this callback
8618
  $.extend( api.czrInputMap, {
8619
  range_simple : function( params ) {
8620
  var input = this,
8621
  $wrapper = $('.sek-range-with-unit-picker-wrapper', input.container ),
8622
  $numberInput = $wrapper.find( 'input[type="number"]'),
8623
  $rangeInput = $wrapper.find( 'input[type="range"]');
8624
+
8625
+ // synchronizes range input and number input
8626
+ // number is the master => sets the input() val
8627
  $rangeInput.on('input', function( evt ) {
8628
  $numberInput.val( $(this).val() ).trigger('input');
8629
  });
8631
  input( $(this).val() );
8632
  $rangeInput.val( $(this).val() );
8633
  });
8634
+ // trigger a change on init to sync the range input
8635
  $rangeInput.val( $numberInput.val() || 0 );
8636
  },
8637
 
8640
 
8641
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
8642
  ( function ( api, $, _ ) {
8643
+ // all available input type as a map
8644
  api.czrInputMap = api.czrInputMap || {};
8645
+
8646
+ // input_type => callback fn to fire in the Input constructor on initialize
8647
+ // the callback can receive specific params define in each module constructor
8648
+ // For example, a content picker can be given params to display only taxonomies
8649
+ // the default input_event_map can also be overriden in this callback
8650
  $.extend( api.czrInputMap, {
8651
  range_with_unit_picker : function( params ) {
8652
  var input = this,
8661
  }
8662
  return unit;
8663
  };
8664
+ // initialize the unit with the value provided in the dom
8665
  input.css_unit = new api.Value( _.isEmpty( initial_unit ) ? 'px' : validateUnit( initial_unit ) );
8666
+ // React to a unit change => trigger a number input change
8667
  input.css_unit.bind( function( to ) {
8668
  to = _.isEmpty( to ) ? 'px' : to;
8669
  $wrapper.find( 'input[type="number"]').trigger('input');
8670
  });
8671
+
8672
+ // synchronizes range input and number input
8673
+ // number is the master => sets the input() val
8674
  $rangeInput.on('input', function( evt ) {
8675
  $numberInput.val( $(this).val() ).trigger('input');
8676
  });
8678
  input( $(this).val() + validateUnit( input.css_unit() ) );
8679
  $rangeInput.val( $(this).val() );
8680
  });
8681
+ // trigger a change on init to sync the range input
8682
  $rangeInput.val( $numberInput.val() || 0 );
8683
+
8684
+ // Schedule unit changes on button click
8685
  $wrapper.on( 'click', '.sek-ui-button', function(evt) {
8686
  evt.preventDefault();
8687
+ // handle the is-selected css class toggling
8688
  $wrapper.find('.sek-ui-button').removeClass('is-selected').attr( 'aria-pressed', false );
8689
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
8690
+ // update the initial unit ( not mandatory)
8691
  $wrapper.find('input[data-czrtype]').data('sek-unit', $(this).data('sek-unit') );
8692
+ // set the current unit Value
8693
  input.css_unit( $(this).data('sek-unit') );
8694
  });
8695
+
8696
+ // add is-selected button on init to the relevant unit button
8697
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ initial_unit +'"]').addClass('is-selected').attr( 'aria-pressed', true );
8698
  },
8699
 
8702
 
8703
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
8704
  ( function ( api, $, _ ) {
8705
+ // all available input type as a map
8706
  api.czrInputMap = api.czrInputMap || {};
8707
+
8708
+ // input_type => callback fn to fire in the Input constructor on initialize
8709
+ // the callback can receive specific params define in each module constructor
8710
+ // For example, a content picker can be given params to display only taxonomies
8711
+ // the default input_event_map can also be overriden in this callback
8712
  $.extend( api.czrInputMap, {
8713
  range_with_unit_picker_device_switcher : function( params ) {
8714
  var input = this,
8722
  }
8723
  return unit;
8724
  },
8725
+ // dev note : value.replace(/\D+/g, '') : ''; not working because remove "." which we might use for em for example
8726
  _extractNumericVal = function( _rawVal ) {
8727
  return ( _.isEmpty( _rawVal ) || ! _.isString( _rawVal ) ) ? '16' : _rawVal.replace(/px|em|%/g,'');
8728
  },
8735
  var getInitialUnit = function() {
8736
  return $wrapper.find('input[data-czrtype]').data('sek-unit') || 'px';
8737
  };
8738
+
8739
+ // Recursive helper
8740
+ // return the value set for the currently previewed device if exists
8741
+ // OR
8742
+ // return the inherited value from the first parent device for which the value is set
8743
+ // OR
8744
+ // falls back on the module default
8745
  var getCurrentDeviceActualOrInheritedValue = function( inputValues, currentDevice ) {
8746
  var deviceHierarchy = [ 'mobile' , 'tablet', 'desktop' ];
8747
  if ( _.has( inputValues, currentDevice ) ) {
8756
  }
8757
  }
8758
  };
8759
+
8760
+ // Synchronizes on init + refresh on previewed device changes
8761
  var syncWithPreviewedDevice = function( currentDevice ) {
8762
+ // initialize the number input with the current input val
8763
+ // for retro-compatibility, we must handle the case when the initial input val is a string instead of an array
8764
+ // in this case, the string value is assigned to the desktop device.
8765
  var inputVal = input(), inputValues = {}, clonedDefault = $.extend( true, {}, defaultVal );
8766
  inputValues = clonedDefault;
8767
  if ( _.isObject( inputVal ) ) {
8769
  } else if ( _.isString( inputVal ) && ! _.isEmpty( inputVal ) ) {
8770
  inputValues = { desktop : inputVal };
8771
  }
8772
+ //inputValues = _.extend( inputValues, clonedDefault );
8773
+ // do we have a val for the current device ?
8774
  var _rawVal = getCurrentDeviceActualOrInheritedValue( inputValues, currentDevice ),
8775
  _unit = _extractUnit( _rawVal ),
8776
  _numberVal = _extractNumericVal( _rawVal );
8777
+
8778
+ // update the unit
8779
  $('.sek-unit-wrapper', $wrapper).find('[data-sek-unit="' + _unit +'"]').trigger('click', { previewed_device_switched : true });// We don't want to update the input()
8780
+ // add is-selected button on init to the relevant unit button
8781
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ _unit +'"]').addClass('is-selected').attr( 'aria-pressed', true );
8782
+
8783
+ // update the numeric val
8784
  $numberInput.val( _numberVal ).trigger('input', { previewed_device_switched : true });// We don't want to update the input()
8785
  };
8786
+
8787
+
8788
+
8789
+ // SETUP
8790
+ // setup the device switcher
8791
  api.czr_sektions.maybeSetupDeviceSwitcherForInput.call( input );
8792
+
8793
+ // initialize the unit with the value provided in the dom
8794
  input.css_unit = new api.Value( _.isEmpty( getInitialUnit() ) ? 'px' : validateUnit( getInitialUnit() ) );
8795
+
8796
+ // Append a reset button
8797
  var resetButton = '<button type="button" class="button sek-reset-button sek-float-right">' + sektionsLocalizedData.i18n['Reset'] + '</button>';
8798
  input.container.find('.customize-control-title').append( resetButton );
8799
+
8800
+
8801
+
8802
+
8803
+
8804
+
8805
+ // SCHEDULE REACTIONS
8806
+ // React to a unit change => trigger a number input change
8807
+ // Don't move when switching the device
8808
+ // @param params can be { previewed_device_switched : true }
8809
  input.css_unit.bind( function( to, from, params ) {
8810
  if ( _.isObject( params ) && true === params.previewed_device_switched )
8811
  return;
8812
  $numberInput.trigger('input');
8813
  });
8814
+
8815
+ // synchronizes range input and number input
8816
+ // number is the master => sets the input() val
8817
  $rangeInput.on('input', function( evt ) {
8818
  $numberInput.val( $(this).val() ).trigger('input');
8819
  });
8820
+ // Set the input val
8821
  $numberInput.on('input', function( evt, params ) {
8822
  var previewedDevice = api.previewedDevice() || 'desktop',
8823
  changedNumberInputVal = $(this).val() + validateUnit( input.css_unit() ),
8825
 
8826
  _newInputVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} );
8827
  _newInputVal[ previewedDevice ] = $.extend( true, {}, _newInputVal[ previewedDevice ] || {} );
8828
+
8829
+ // Validates
8830
  if ( ( _.isString( changedNumberInputVal ) && ! _.isEmpty( changedNumberInputVal ) ) ) {
8831
  _newInputVal[ previewedDevice ]= changedNumberInputVal;
8832
  }
8833
+
8834
+ // update input if not previewed_device_switched
8835
  if ( _.isEmpty( params ) || ( _.isObject( params ) && true !== params.previewed_device_switched ) ) {
8836
  input( _newInputVal );
8837
  }
8838
  $rangeInput.val( $(this).val() );
8839
  });
8840
+
8841
+ // Schedule unit changes on button click
8842
  $wrapper.on( 'click', '.sek-ui-button', function( evt, params ) {
8843
+ //evt.preventDefault();
8844
  evt.stopPropagation();
8845
+ // handle the is-selected css class toggling
8846
  $wrapper.find('.sek-ui-button').removeClass('is-selected').attr( 'aria-pressed', false );
8847
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
8848
+ // update the initial unit ( not mandatory)
8849
  $wrapper.find('input[data-czrtype]').data('sek-unit', $(this).data('sek-unit') );
8850
+ // set the current unit Value
8851
  input.css_unit( $(this).data('sek-unit'), params );
8852
  });
8853
+
8854
+ // react to previewed device changes
8855
+ // input.previewedDevice is updated in api.czr_sektions.maybeSetupDeviceSwitcherForInput()
8856
  input.previewedDevice.bind( function( currentDevice ) {
8857
  try { syncWithPreviewedDevice( currentDevice ); } catch( er ) {
8858
  api.errare('Error when firing syncWithPreviewedDevice for input type range_with_unit_picker_device_switcher for input id ' + input.id , er );
8859
  }
8860
  });
8861
+
8862
+ // Schedule the reset of the value for the currently previewed device
8863
  input.container.on( 'click', '.sek-reset-button', function( evt ) {
8864
  var _currentDevice = api.previewedDevice(),
8865
  _newVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} );
8869
  syncWithPreviewedDevice( api.previewedDevice() );
8870
  }
8871
  });
8872
+
8873
+
8874
+ // INITIALIZES
8875
+ // trigger a change on init to sync the range input
8876
  $rangeInput.val( $numberInput.val() || 0 );
8877
  try { syncWithPreviewedDevice( api.previewedDevice() ); } catch( er ) {
8878
  api.errare('Error when firing syncWithPreviewedDevice for input type range_with_unit_picker_device_switcher for input id ' + input.id , er );
8884
 
8885
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
8886
  ( function ( api, $, _ ) {
8887
+ // all available input type as a map
8888
  api.czrInputMap = api.czrInputMap || {};
8889
+
8890
+ // input_type => callback fn to fire in the Input constructor on initialize
8891
+ // the callback can receive specific params define in each module constructor
8892
+ // For example, a content picker can be given params to display only taxonomies
8893
+ // the default input_event_map can also be overriden in this callback
8894
  $.extend( api.czrInputMap, {
8895
  borders : function( params ) {
8896
  var input = this,
8905
  }
8906
  return unit;
8907
  },
8908
+ // dev note : value.replace(/\D+/g, '') : ''; not working because remove "." which we might use for em for example
8909
  _extractNumericVal = function( _rawVal ) {
8910
  return ( _.isEmpty( _rawVal ) || ! _.isString( _rawVal ) ) ? '16' : _rawVal.replace(/px|em|%/g,'');
8911
  },
8916
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {};
8917
 
8918
  input.cssBorderTypes = [ 'top', 'left', 'right', 'bottom' ];
8919
+
8920
+ // Return the unit of the _all_ border type
8921
  var getInitialUnit = function() {
8922
  var inputVal = input(), initial_unit = 'px';
8923
  if ( _.isObject( inputVal ) && _.has( inputVal, '_all_' ) && _.isObject( inputVal['_all_'] ) && ! _.isEmpty( inputVal['_all_'][ 'wght'] ) ) {
8925
  }
8926
  return initial_unit;
8927
  };
8928
+ // Return the number value of the _all_ border type
8929
  var getInitialWeight = function() {
8930
  var inputVal = input(), initial_weight = 1;
8931
  if ( _.isObject( inputVal ) && _.has( inputVal, '_all_' ) && _.isObject( inputVal['_all_'] ) && ! _.isEmpty( inputVal['_all_'][ 'wght'] ) ) {
8938
  }
8939
  return initial_weight;
8940
  };
8941
+ // Return the color of the _all_ border type
8942
  var getInitialColor = function() {
8943
  var inputVal = input(), initial_color = '#000000';
8944
  if ( _.isObject( inputVal ) && _.has( inputVal, '_all_' ) && _.isObject( inputVal['_all_'] ) && ! _.isEmpty( inputVal['_all_'][ 'col'] ) ) {
8946
  }
8947
  return initial_color;
8948
  };
8949
+
8950
+ // Recursive helper
8951
+ // _all_ : { wght : 1px, col : #000000 }
8952
+ // falls back on {}
8953
  var getCurrentBorderTypeOrAllValue = function( inputValues, borderType ) {
8954
  var clonedDefaults = $.extend( true, {}, defaultVal ), _all_Value;
8955
  if ( ! _.has( clonedDefaults, '_all_' ) ) {
8963
  return clonedDefaults['_all_'];
8964
  }
8965
  };
8966
+
8967
+ // Synchronizes on init + refresh on border type change
8968
  var syncWithBorderType = function( borderType ) {
8969
  if ( ! _.contains( _.union( input.cssBorderTypes, [ '_all_' ] ) , borderType ) ) {
8970
  throw new Error( "Error in syncWithBorderType : the border type must be one of those values '_all_', 'top', 'left', 'right', 'bottom'" );
8971
  }
8972
+
8973
+ // initialize the number input with the current input val
8974
+ // for retro-compatibility, we must handle the case when the initial input val is a string instead of an array
8975
+ // in this case, the string value is assigned to the desktop device.
8976
  var inputVal = input(), inputValues = {}, clonedDefault = $.extend( true, {}, defaultVal );
8977
  if ( _.isObject( inputVal ) ) {
8978
  inputValues = $.extend( true, {}, inputVal );
8980
  inputValues = { _all_ : { wght : inputVal } };
8981
  }
8982
  inputValues = $.extend( clonedDefault, inputValues );
8983
+
8984
+ // do we have a val for the current border type ?
8985
  var _rawVal = getCurrentBorderTypeOrAllValue( inputValues, borderType ), _unit, _numberVal;
8986
  if ( _.isEmpty( _rawVal ) || ! _.isObject( _rawVal ) || _.isEmpty( _rawVal.wght ) || _.isEmpty( _rawVal.col ) ) {
8987
  throw new Error( "Error in syncWithBorderType : getCurrentBorderTypeOrAllValue must return an object formed : array( 'wght' => '1px', 'col' => '#000000' )");
8989
 
8990
  _unit = _extractUnit( _rawVal.wght );
8991
  _numberVal = _extractNumericVal( _rawVal.wght );
8992
+
8993
+ // update the unit
8994
  $('.sek-unit-wrapper', $wrapper).find('[data-sek-unit="' + _unit +'"]').trigger('click', { border_type_switched : true });// We don't want to update the input()
8995
+ // add is-selected button on init to the relevant unit button
8996
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ _unit +'"]').addClass('is-selected').attr( 'aria-pressed', true );
8997
+ // update the numeric val
8998
  $numberInput.val( _numberVal ).trigger('input', { border_type_switched : true });// We don't want to update the input()
8999
+ // update the color
9000
+ // trigger the change between "border_type_switched" data flags, so we know the api setting don't have to be refreshed
9001
+ // ( there's no easy other way to pass a param when triggering )
9002
  $colorInput.data('border_type_switched', true );
9003
  $colorInput.val( _rawVal.col ).trigger( 'change' );
9004
  $colorInput.data('border_type_switched', false );
9005
  };
9006
+
9007
+
9008
+
9009
+
9010
+
9011
+ // SETUP
9012
  input.borderColor = new api.Value( _.isEmpty( getInitialColor() ) ? '#000000' : getInitialColor() );
9013
+ // initialize the unit
9014
  input.css_unit = new api.Value( _.isEmpty( getInitialUnit() ) ? 'px' : validateUnit( getInitialUnit() ) );
9015
+ // setup the border type switcher. Initialized with all.
9016
  input.borderType = new api.Value( '_all_');
9017
+ // Setup the initial state of the number input
9018
  $numberInput.val( getInitialWeight() );
9019
+ // Setup the color input
9020
  $colorInput.val( input.borderColor() );
9021
  $colorInput.wpColorPicker({
9022
  palettes: true,
9023
+ //hide:false,
9024
  width: window.innerWidth >= 1440 ? 271 : 251,
9025
  change : function( evt, o ) {
9026
+ //if the input val is not updated here, it's not detected right away.
9027
+ //weird
9028
+ //is there a "change complete" kind of event for iris ?
9029
+ //$(this).val($(this).wpColorPicker('color'));
9030
+ //input.container.find('[data-czrtype]').trigger('colorpickerchange');
9031
+
9032
+ //synchronizes with the original input
9033
+ //OLD => $(this).val( $(this).wpColorPicker('color') ).trigger('colorpickerchange').trigger('change');
9034
  $(this).val( o.color.toString() ).trigger('colorpickerchange');
9035
  input.borderColor( o.color.toString(), { border_type_switched : true === $(this).data('border_type_switched') } );
9036
+ //input.borderColor( o.color.toString() );
9037
+ // if ( evt.originalEvent && evt.originalEvent.type && 'external' === evt.originalEvent.type ) {
9038
+ // input.borderColor( o.color.toString(), { border_type_switched : true } );
9039
+ // } else {
9040
+ // input.borderColor( o.color.toString() );
9041
+ // }
9042
  },
9043
  clear : function( e, o ) {
9044
  $(this).val('').trigger('colorpickerchange');
9045
  input.borderColor('');
9046
  }
9047
  });
9048
+
9049
+
9050
+
9051
+
9052
+
9053
+
9054
+ // SCHEDULE REACTIONS
9055
+ // React to a unit change => trigger a number input change
9056
+ // Don't move when switching the border type or initializing unit
9057
+ // @param params can be { border_type_switched : true }
9058
  input.css_unit.bind( function( to, from, params ) {
9059
+ // don't update the main input when switching border types or initializing the unit value
9060
  if ( _.isObject( params ) && ( true === params.border_type_switched || true === params.initializing_the_unit ) )
9061
  return;
9062
  $numberInput.trigger('input', params);
9063
  });
9064
+
9065
+ // React to a color change => trigger a number input change
9066
+ // Don't move when switching the border type or initializing the color
9067
+ // @param params can be { border_type_switched : true }
9068
  input.borderColor.bind( function( to, from, params ) {
9069
+ // don't update the main input when switching border types or initializing the unit value
9070
  if ( _.isObject( params ) && ( true === params.border_type_switched || true === params.initializing_the_color ) )
9071
  return;
9072
  $numberInput.trigger('input', params);
9073
  });
9074
+
9075
+ // react to border type changes
9076
  input.borderType.bind( function( borderType ) {
9077
  try { syncWithBorderType( borderType ); } catch( er ) {
9078
  api.errare('Error when firing syncWithBorderType for input type borders for module type ' + input.module.module_type , er );
9079
  }
9080
  });
9081
+
9082
+ // synchronizes range input and number input
9083
+ // number is the master => sets the input() val
9084
  $rangeInput.on('input', function( evt ) {
9085
  $numberInput.val( $(this).val() ).trigger('input');
9086
  });
9087
+
9088
+ // Set the input val
9089
  $numberInput.on('input', function( evt, params ) {
9090
  var currentBorderType = input.borderType() || '_all_',
9091
  currentColor = input.borderColor(),
9095
 
9096
  _newInputVal = $.extend( true, {}, _.isObject( input() ) ? input() : clonedDefaults );
9097
  _newInputVal[ currentBorderType ] = $.extend( true, {}, _newInputVal[ currentBorderType ] || clonedDefaults[ currentBorderType ] );
9098
+
9099
+ // populate the border weight value
9100
  if ( ( _.isString( changedNumberInputVal ) && ! _.isEmpty( changedNumberInputVal ) ) ) {
9101
  _newInputVal[ currentBorderType ][ 'wght' ] = changedNumberInputVal;
9102
  }
9103
+ // populate the color value
9104
  _newInputVal[ currentBorderType ][ 'col' ] = currentColor;
9105
+
9106
+ // update input if not border_type_switched
9107
+ // if _all_ is changed, removed all other types
9108
  if ( _.isEmpty( params ) || ( _.isObject( params ) && true !== params.border_type_switched ) ) {
9109
  if ( '_all_' === currentBorderType ) {
9110
  _.each( input.cssBorderTypes, function( _type ) {
9113
  }
9114
  input( _newInputVal );
9115
  }
9116
+ // refresh the range slider
9117
  $rangeInput.val( $(this).val() );
9118
  });
9119
+
9120
+
9121
+ // Schedule unit changes on button click
9122
  $wrapper.on( 'click', '[data-sek-unit]', function( evt, params ) {
9123
  evt.preventDefault();
9124
+ // handle the is-selected css class toggling
9125
  $wrapper.find('[data-sek-unit]').removeClass('is-selected').attr( 'aria-pressed', false );
9126
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
9127
+ // update the initial unit ( not mandatory)
9128
  $wrapper.find('input[data-czrtype]').data('sek-unit', $(this).data('sek-unit') );
9129
+ // set the current unit Value
9130
  input.css_unit( $(this).data('sek-unit'), params );
9131
  });
9132
+
9133
+ // Schedule border type changes on button click
9134
  $wrapper.on( 'click', '[data-sek-border-type]', function( evt, params ) {
9135
  evt.preventDefault();
9136
+ // handle the is-selected css class toggling
9137
  $wrapper.find('[data-sek-border-type]').removeClass('is-selected').attr( 'aria-pressed', false );
9138
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
9139
  var border = '_all_';
9142
  }
9143
  input.borderType( border, params );
9144
  });
9145
+
9146
+ // Schedule the reset of the value for the currently previewed device
9147
  input.container.on( 'click', '.sek-reset-button', function( evt ) {
9148
  var currentBorderType = input.borderType() || '_all_',
9149
  _newVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} );
9153
  syncWithBorderType( currentBorderType );
9154
  }
9155
  });
9156
+
9157
+
9158
+
9159
+
9160
+
9161
+
9162
+
9163
+
9164
+ // INITIALIZES
9165
+ // trigger a change on init to sync the range input
9166
  $rangeInput.val( $numberInput.val() || 0 );
9167
  try { syncWithBorderType( input.borderType() ); } catch( er ) {
9168
  api.errare('Error when firing syncWithBorderType for input type borders for module type ' + input.module.module_type , er );
9169
  }
9170
+ // trigger a click on the initial unit
9171
+ // => the initial unit could be set when fetching the server template but it's more convenient to handle it once the template is rendered
9172
  $( '[data-sek-unit="' + input.css_unit() + '"]', $wrapper ).trigger('click', { initializing_the_unit : true } );
9173
  },
9174
 
9177
 
9178
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
9179
  ( function ( api, $, _ ) {
9180
+ // all available input type as a map
9181
  api.czrInputMap = api.czrInputMap || {};
9182
+
9183
+ // input_type => callback fn to fire in the Input constructor on initialize
9184
+ // the callback can receive specific params define in each module constructor
9185
+ // For example, a content picker can be given params to display only taxonomies
9186
+ // the default input_event_map can also be overriden in this callback
9187
  $.extend( api.czrInputMap, {
9188
  border_radius : function( params ) {
9189
  var input = this,
9197
  }
9198
  return unit;
9199
  },
9200
+ // dev note : value.replace(/\D+/g, '') : ''; not working because remove "." which we might use for em for example
9201
  _extractNumericVal = function( _rawVal ) {
9202
  return ( _.isEmpty( _rawVal ) || ! _.isString( _rawVal ) ) ? '16' : _rawVal.replace(/px|em|%/g,'');
9203
  },
9208
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {};
9209
 
9210
  input.cssRadiusTypes = [ 'top_left','top_right','bottom_right','bottom_left' ];
9211
+
9212
+ // Return the unit of the _all_ border type
9213
  var getInitialUnit = function() {
9214
  var inputVal = input(), initial_unit = 'px';
9215
  if ( _.isObject( inputVal ) && _.has( inputVal, '_all_' ) ) {
9217
  }
9218
  return initial_unit;
9219
  };
9220
+ // Return the number value of the _all_ border type
9221
  var getInitialRadius = function() {
9222
  var inputVal = input(), initial_rad = 0;
9223
  if ( _.isObject( inputVal ) && _.has( inputVal, '_all_' ) ) {
9230
  }
9231
  return initial_rad;
9232
  };
9233
+
9234
+
9235
+ // Recursive helper
9236
+ // _all_ : 3px
9237
+ // falls back on {}
9238
  var getCurrentRadiusTypeOrAllValue = function( inputValues, radiusType ) {
9239
  var clonedDefaults = $.extend( true, {}, defaultVal ), _all_Value;
9240
  if ( ! _.has( clonedDefaults, '_all_' ) ) {
9248
  return _all_Value;
9249
  }
9250
  };
9251
+
9252
+ // Synchronizes on init + refresh on border radius change
9253
  var syncWithRadiusType = function( radiusType ) {
9254
  if ( ! _.contains( [ '_all_', 'top_left', 'top_right', 'bottom_right', 'bottom_left' ], radiusType ) ) {
9255
  throw new Error( "Error in syncWithRadiusType : the radius type must be one of those values '_all_', 'top_left', 'top_right', 'bottom_right', 'bottom_left', => radius type => " + radiusType );
9256
  }
9257
+
9258
+ // initialize the number input with the current input val
9259
+ // for retro-compatibility, we must handle the case when the initial input val is a string instead of an array
9260
+ // in this case, the string value is assigned to the desktop device.
9261
  var inputVal = input(), inputValues = {}, clonedDefault = $.extend( true, {}, defaultVal );
9262
  if ( _.isObject( inputVal ) ) {
9263
  inputValues = $.extend( true, {}, inputVal );
9265
  inputValues = { _all_ : '0px' };
9266
  }
9267
  inputValues = $.extend( clonedDefault, inputValues );
9268
+
9269
+ // do we have a val for the current type ?
9270
  var _rawVal = getCurrentRadiusTypeOrAllValue( inputValues, radiusType ), _unit, _numberVal;
9271
  if ( _.isEmpty( _rawVal ) || ! _.isString( _rawVal ) ) {
9272
  throw new Error( "Error in syncWithRadiusType : getCurrentRadiusTypeOrAllValue must return a string like 3em");
9274
 
9275
  _unit = _extractUnit( _rawVal );
9276
  _numberVal = _extractNumericVal( _rawVal );
9277
+
9278
+ // update the unit
9279
  $('.sek-unit-wrapper', $wrapper).find('[data-sek-unit="' + _unit +'"]').trigger('click', { radius_type_switched : true });// We don't want to update the input()
9280
+ // add is-selected button on init to the relevant unit button
9281
  $wrapper.find( '.sek-ui-button[data-sek-unit="'+ _unit +'"]').addClass('is-selected').attr( 'aria-pressed', true );
9282
+ // update the numeric val
9283
  $numberInput.val( _numberVal ).trigger('input', { radius_type_switched : true });// We don't want to update the input()
9284
  };
9285
+
9286
+
9287
+
9288
+
9289
+
9290
+
9291
+
9292
+ // SETUP
9293
+ // initialize the unit
9294
  input.css_unit = new api.Value( _.isEmpty( getInitialUnit() ) ? 'px' : validateUnit( getInitialUnit() ) );
9295
+ // setup the border type switcher. Initialized with all.
9296
  input.radiusType = new api.Value('_all_');
9297
+ // Setup the initial state of the number input
9298
  $numberInput.val( getInitialRadius() );
9299
+
9300
+
9301
+
9302
+
9303
+
9304
+
9305
+
9306
+
9307
+ // SCHEDULE REACTIONS
9308
+ // React to a unit change => trigger a number input change
9309
+ // Don't move when switching the border type or initializing unit
9310
+ // @param params can be { radius_type_switched : true }
9311
  input.css_unit.bind( function( to, from, params ) {
9312
+ // don't update the main input when switching border types or initializing the unit value
9313
  if ( _.isObject( params ) && ( true === params.radius_type_switched || true === params.initializing_the_unit ) )
9314
  return;
9315
  $numberInput.trigger('input', params);
9316
  });
9317
+
9318
+ // react to border type changes
9319
  input.radiusType.bind( function( radiusType ) {
9320
  try { syncWithRadiusType( radiusType ); } catch( er ) {
9321
  api.errare('Error when firing syncWithRadiusType for input type border_radius for module type ' + input.module.module_type , er );
9322
  }
9323
  });
9324
+
9325
+ // synchronizes range input and number input
9326
+ // number is the master => sets the input() val
9327
  $rangeInput.on('input', function( evt ) {
9328
  $numberInput.val( $(this).val() ).trigger('input');
9329
  });
9330
+
9331
+ // Set the input val
9332
  $numberInput.on('input', function( evt, params ) {
9333
  var currentRadiusType = input.radiusType() || '_all_',
9334
  changedNumberInputVal = $(this).val() + validateUnit( input.css_unit() ),
9337
 
9338
  _newInputVal = $.extend( true, {}, _.isObject( input() ) ? input() : clonedDefaults );
9339
  _newInputVal[ currentRadiusType ] = $.extend( true, {}, _newInputVal[ currentRadiusType ] || clonedDefaults[ currentRadiusType ] );
9340
+
9341
+ // populate the border weight value
9342
  if ( ( _.isString( changedNumberInputVal ) && ! _.isEmpty( changedNumberInputVal ) ) ) {
9343
  _newInputVal[ currentRadiusType ] = changedNumberInputVal;
9344
  }
9345
+ // update input if not radius_type_switched
9346
+ // if _all_ is changed, removed all other types
9347
  if ( _.isEmpty( params ) || ( _.isObject( params ) && true !== params.radius_type_switched ) ) {
9348
  if ( '_all_' === currentRadiusType ) {
9349
  _.each( input.cssRadiusTypes, function( _type ) {
9352
  }
9353
  input( _newInputVal );
9354
  }
9355
+ // refresh the range slider
9356
  $rangeInput.val( $(this).val() );
9357
  });
9358
+
9359
+
9360
+ // Schedule unit changes on button click
9361
  $wrapper.on( 'click', '[data-sek-unit]', function( evt, params ) {
9362
  evt.preventDefault();
9363
+ // handle the is-selected css class toggling
9364
  $wrapper.find('[data-sek-unit]').removeClass('is-selected').attr( 'aria-pressed', false );
9365
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
9366
+ // update the initial unit ( not mandatory)
9367
  $wrapper.find('input[data-czrtype]').data('sek-unit', $(this).data('sek-unit') );
9368
+ // set the current unit Value
9369
  input.css_unit( $(this).data('sek-unit'), params );
9370
  });
9371
+
9372
+ // Schedule border type changes on button click
9373
  $wrapper.on( 'click', '[data-sek-radius-type]', function( evt, params ) {
9374
  evt.preventDefault();
9375
+ // handle the is-selected css class toggling
9376
  $wrapper.find('[data-sek-radius-type]').removeClass('is-selected').attr( 'aria-pressed', false );
9377
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
9378
  var border = '_all_';
9381
  }
9382
  input.radiusType( border, params );
9383
  });
9384
+
9385
+ // Schedule the reset of the value for the currently previewed device
9386
  input.container.on( 'click', '.sek-reset-button', function( evt ) {
9387
  var currentRadiusType = input.radiusType() || '_all_',
9388
  _newVal = $.extend( true, {}, _.isObject( input() ) ? input() : {} );
9392
  syncWithRadiusType( currentRadiusType );
9393
  }
9394
  });
9395
+
9396
+
9397
+
9398
+
9399
+
9400
+
9401
+
9402
+
9403
+ // INITIALIZES
9404
+ // trigger a change on init to sync the range input
9405
  $rangeInput.val( $numberInput.val() || 0 );
9406
  try { syncWithRadiusType( input.radiusType() ); } catch( er ) {
9407
  api.errare('Error when firing syncWithRadiusType for input type border_radius for module type ' + input.module.module_type , er );
9408
  }
9409
+ // trigger a click on the initial unit
9410
+ // => the initial unit could be set when fetching the server template but it's more convenient to handle it once the template is rendered
9411
  $( '[data-sek-unit="' + input.css_unit() + '"]', $wrapper ).trigger('click', { initializing_the_unit : true } );
9412
  },
9413
 
9416
 
9417
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
9418
  ( function ( api, $, _ ) {
9419
+ // all available input type as a map
9420
  api.czrInputMap = api.czrInputMap || {};
9421
+
9422
+ // input_type => callback fn to fire in the Input constructor on initialize
9423
+ // the callback can receive specific params define in each module constructor
9424
+ // For example, a content picker can be given params to display only taxonomies
9425
+ // the default input_event_map can also be overriden in this callback
9426
  $.extend( api.czrInputMap, {
9427
  buttons_choice : function( params ) {
9428
  var input = this,
9430
  $mainInput = $wrapper.find( 'input[type="number"]'),
9431
  inputRegistrationParams = api.czr_sektions.getInputRegistrationParams( input.id, input.module.module_type ),
9432
  defaultVal = ( ! _.isEmpty( inputRegistrationParams ) && ! _.isEmpty( inputRegistrationParams.default ) ) ? inputRegistrationParams.default : {};
9433
+
9434
+ // SETUP
9435
+ // Setup the initial state of the number input
9436
  $mainInput.val( input() );
9437
+
9438
+ // Schedule choice changes on button click
9439
  $wrapper.on( 'click', '[data-sek-choice]', function( evt, params ) {
9440
  evt.stopPropagation();
9441
+ // handle the is-selected css class toggling
9442
  $wrapper.find('[data-sek-choice]').removeClass('is-selected').attr( 'aria-pressed', false );
9443
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
9444
  var newChoice;
9447
  }
9448
  input( newChoice );
9449
  });
9450
+
9451
+
9452
+ // INITIALIZES
9453
+ // trigger a click on the initial unit
9454
+ // => the initial unit could be set when fetching the server template but it's more convenient to handle it once the template is rendered
9455
  $( '[data-sek-choice="' + input() + '"]', $wrapper ).trigger('click', { initializing_the_unit : true } );
9456
  }
9457
  });//$.extend( api.czrInputMap, {})
9458
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData
9459
  ( function ( api, $, _ ) {
9460
+ // all available input type as a map
9461
  api.czrInputMap = api.czrInputMap || {};
9462
+
9463
+ // input_type => callback fn to fire in the Input constructor on initialize
9464
+ // the callback can receive specific params define in each module constructor
9465
+ // For example, a content picker can be given params to display only taxonomies
9466
+ // the default input_event_map can also be overriden in this callback
9467
  $.extend( api.czrInputMap, {
9468
  reset_button : function( params ) {
9469
  var input = this;
9470
+
9471
+ // Schedule choice changes on button click
9472
  input.container.on( 'click', '[data-sek-reset-scope]', function( evt, params ) {
9473
  evt.stopPropagation();
9474
  var scope = $(this).data( 'sek-reset-scope' );
9481
  }
9482
  });//$.extend( api.czrInputMap, {})
9483
  })( wp.customize, jQuery, _ );//global sektionsLocalizedData, serverControlParams
9484
+ //extends api.CZRDynModule
9485
  /* ------------------------------------------------------------------------- *
9486
  * CONTENT TYPE SWITCHER
9487
  /* ------------------------------------------------------------------------- */
9488
  ( function ( api, $, _ ) {
9489
+ //provides a description of each module
9490
+ //=> will determine :
9491
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
9492
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
9493
+ // , if crud, the item shall be removable
9494
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
9495
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
9496
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
9497
  api.czrModuleMap = api.czrModuleMap || {};
9498
  $.extend( api.czrModuleMap, {
9499
  sek_content_type_switcher_module : {
9500
+ //mthds : SectionPickerModuleConstructor,
9501
  crud : false,
9502
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_content_type_switcher_module', 'name' ),
9503
  has_mod_opt : false,
9510
  });
9511
 
9512
  api.czrInputMap = api.czrInputMap || {};
9513
+ //input_type => callback fn to fire in the Input constructor on initialize
9514
+ //the callback can receive specific params define in each module constructor
9515
+ //For example, a content picker can be given params to display only taxonomies
9516
  $.extend( api.czrInputMap, {
9517
  content_type_switcher : function( input_options ) {
9518
  var input = this,
9523
  throw new Error( 'api.czrInputMap.content_type_switcher => section not registered' );
9524
  }
9525
  _section_ = api.section( input.module.control.section() );
9526
+
9527
+ // attach click event on data-sek-content-type buttons
9528
  input.container.on('click', '[data-sek-content-type]', function( evt ) {
9529
  evt.preventDefault();
9530
+ // handle the is-selected css class toggling
9531
  input.container.find('[data-sek-content-type]').removeClass('is-selected').attr( 'aria-pressed', false );
9532
  $(this).addClass('is-selected').attr( 'aria-pressed', true );
9533
  api.czr_sektions.currentContentPickerType( $(this).data( 'sek-content-type') );
9542
  }
9543
  });
9544
  };
9545
+
9546
+ // Initialize
9547
+ // Fixes issue https://github.com/presscustomizr/nimble-builder/issues/248
9548
  api.czr_sektions.currentContentPickerType = api.czr_sektions.currentContentPickerType || new api.Value( input() );
9549
  _do_( api.czr_sektions.currentContentPickerType() );
9550
+
9551
+ // Schedule a reaction to changes
9552
  api.czr_sektions.currentContentPickerType.bind( function( contentType ) {
9553
  _do_( contentType );
9554
  });
9563
  /* ------------------------------------------------------------------------- *
9564
  * MODULE PICKER MODULE
9565
  /* ------------------------------------------------------------------------- */
9566
+ //global sektionsLocalizedData, serverControlParams
9567
+ //extends api.CZRDynModule
9568
  ( function ( api, $, _ ) {
9569
+ //provides a description of each module
9570
+ //=> will determine :
9571
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
9572
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
9573
+ // , if crud, the item shall be removable
9574
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
9575
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
9576
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
9577
  api.czrModuleMap = api.czrModuleMap || {};
9578
  $.extend( api.czrModuleMap, {
9579
  sek_module_picker_module : {
9580
+ //mthds : ModulePickerModuleConstructor,
9581
  crud : false,
9582
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_module_picker_module', 'name' ),
9583
  has_mod_opt : false,
9590
  });
9591
 
9592
  api.czrInputMap = api.czrInputMap || {};
9593
+
9594
+ //input_type => callback fn to fire in the Input constructor on initialize
9595
+ //the callback can receive specific params define in each module constructor
9596
+ //For example, a content picker can be given params to display only taxonomies
9597
  $.extend( api.czrInputMap, {
9598
  module_picker : function( input_options ) {
9599
  var input = this;
9600
+ // Mouse effect with cursor: -webkit-grab; -webkit-grabbing;
9601
+ // input.container.find('[draggable]').each( function() {
9602
+ // $(this).on( 'mousedown mouseup', function( evt ) {
9603
+ // switch( evt.type ) {
9604
+ // case 'mousedown' :
9605
+ // //$(this).addClass('sek-grabbing');
9606
+ // break;
9607
+ // case 'mouseup' :
9608
+ // //$(this).removeClass('sek-grabbing');
9609
+ // break;
9610
+ // }
9611
+ // });
9612
+ // });
9613
  api.czr_sektions.trigger( 'sek-refresh-dragzones', { type : 'module', input_container : input.container } );
9614
+ //console.log( this.id, input_options );
9615
  }
9616
  });
9617
  })( wp.customize , jQuery, _ );
9622
  * SECTION PICKER MODULES
9623
  /* ------------------------------------------------------------------------- */
9624
  ( function ( api, $, _ ) {
9625
+ //provides a description of each module
9626
+ //=> will determine :
9627
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
9628
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
9629
+ // , if crud, the item shall be removable
9630
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
9631
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
9632
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
9633
  api.czrModuleMap = api.czrModuleMap || {};
9634
  var section_modules = [
9635
  'sek_intro_sec_picker_module',
9637
  'sek_contact_sec_picker_module',
9638
  'sek_column_layouts_sec_picker_module'
9639
  ];
9640
+ // Header and footer have been introduced in v1.4.0 but not enabled by default
9641
+ // The header and footer preset sections are on hold until "header and footer" feature is released.
9642
  if ( sektionsLocalizedData.isNimbleHeaderFooterEnabled ) {
9643
  section_modules = _.union( section_modules, [ 'sek_header_sec_picker_module','sek_footer_sec_picker_module' ] );
9644
  }
9645
  _.each( section_modules, function( module_type ) {
9646
  api.czrModuleMap[ module_type ] = {
9647
+ //mthds : SectionPickerModuleConstructor,
9648
  crud : false,
9649
  name : api.czr_sektions.getRegisteredModuleProperty( module_type, 'name' ),
9650
  has_mod_opt : false,
9665
  /* ------------------------------------------------------------------------- *
9666
  * MY SECTIONS MODULE
9667
  /* ------------------------------------------------------------------------- */
9668
+ //global sektionsLocalizedData, serverControlParams
9669
+ //extends api.CZRDynModule
9670
  ( function ( api, $, _ ) {
9671
  var Constructor = {
9672
  initialize: function( id, options ) {
9673
  var module = this;
9674
+
9675
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
9676
  module.inputConstructor = api.CZRInput.extend({
9677
  initialize : function( name, options ) {
9678
  var input = this;
9689
  html = '',
9690
  $wrapper = input.container.find('.sek-content-type-wrapper'),
9691
  creation_date = '',
9692
+ // https://stackoverflow.com/questions/3552461/how-to-format-a-javascript-date
9693
  formatDate = function(date) {
9694
  var monthNames = [
9695
  "January", "February", "March",
9709
  day,
9710
  monthNames[monthIndex],
9711
  year
9712
+ //[hours,minutes,seconds].join(':')
9713
  ].join(' ');
9714
  };
9715
 
9731
  });
9732
  }
9733
  });
9734
+
9735
+ // run the parent initialize
9736
+ // Note : must be always invoked always after the input / item class extension
9737
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
9738
  api.CZRDynModule.prototype.initialize.call( module, id, options );
9739
+
9740
+ // module.embedded.then( function() {
9741
+ // console.log('MODULE READY=> lets dance', module.container, module.container.find('.sek-content-type-wrapper') );
9742
+ // });
9743
  },//initialize
9744
  };
9745
+
9746
+
9747
+ //provides a description of each module
9748
+ //=> will determine :
9749
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
9750
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
9751
+ // , if crud, the item shall be removable
9752
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
9753
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
9754
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
9755
  api.czrModuleMap = api.czrModuleMap || {};
9756
  if ( sektionsLocalizedData.isSavedSectionEnabled ) {
9757
  $.extend( api.czrModuleMap, {
9778
  /* ------------------------------------------------------------------------- */
9779
  ( function ( api, $, _ ) {
9780
  api.czrInputMap = api.czrInputMap || {};
9781
+ //input_type => callback fn to fire in the Input constructor on initialize
9782
+ //the callback can receive specific params define in each module constructor
9783
+ //For example, a content picker can be given params to display only taxonomies
9784
  $.extend( api.czrInputMap, {
9785
  section_picker : function( input_options ) {
9786
  var input = this;
9787
+ // Mouse effect with cursor: -webkit-grab; -webkit-grabbing;
9788
+ // input.container.find('[draggable]').each( function() {
9789
+ // $(this).on( 'mousedown mouseup', function( evt ) {
9790
+ // switch( evt.type ) {
9791
+ // case 'mousedown' :
9792
+ // //$(this).addClass('sek-grabbing');
9793
+ // break;
9794
+ // case 'mouseup' :
9795
+ // //$(this).removeClass('sek-grabbing');
9796
+ // break;
9797
+ // }
9798
+ // });
9799
+ // });
9800
  api.czr_sektions.trigger( 'sek-refresh-dragzones', { type : 'preset_section', input_container : input.container } );
9801
  }
9802
  });
9803
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
9804
+ //extends api.CZRDynModule
9805
  ( function ( api, $, _ ) {
9806
+ //provides a description of each module
9807
+ //=> will determine :
9808
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
9809
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
9810
+ // , if crud, the item shall be removable
9811
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
9812
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
9813
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
9814
  api.czrModuleMap = api.czrModuleMap || {};
9815
  $.extend( api.czrModuleMap, {
9816
  sek_level_anchor_module : {
9817
+ //mthds : Constructor,
9818
  crud : false,
9819
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_level_anchor_module', 'name' ),
9820
  has_mod_opt : false,
9827
  },
9828
  });
9829
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
9830
+ //extends api.CZRDynModule
9831
  ( function ( api, $, _ ) {
9832
  var Constructor = {
9833
  initialize: function( id, options ) {
9834
+ //console.log('INITIALIZING SEKTION OPTIONS', id, options );
9835
  var module = this;
9836
+
9837
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
9838
  module.inputConstructor = api.CZRInput.extend( module.CZRInputMths || {} );
9839
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
9840
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
9841
+
9842
+ //run the parent initialize
9843
  api.CZRDynModule.prototype.initialize.call( module, id, options );
9844
  },//initialize
9845
 
9851
  },//CZRInputMths
9852
 
9853
  CZRItemConstructor : {
9854
+ //overrides the parent ready
9855
  ready : function() {
9856
  var item = this;
9857
+ //wait for the input collection to be populated,
9858
+ //and then set the input visibility dependencies
9859
  item.inputCollection.bind( function( col ) {
9860
  if( _.isEmpty( col ) )
9861
  return;
9863
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
9864
  }
9865
  });//item.inputCollection.bind()
9866
+
9867
+ //fire the parent
9868
  api.CZRItem.prototype.ready.call( item );
9869
  },
9870
+
9871
+
9872
+ //Fired when the input collection is populated
9873
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
9874
  setInputVisibilityDeps : function() {
9875
  var item = this,
9876
  module = item.module;
9877
+ //Internal item dependencies
9878
  item.czr_Input.each( function( input ) {
9879
  switch( input.id ) {
9880
  case 'bg-image' :
9930
  api.errare( module.id + ' => error in setInputVisibilityDeps', er );
9931
  }
9932
  });
9933
+ // uncheck fixed background if needed
9934
  input.bind( function( to ) {
9935
  if ( api.CZR_Helpers.isChecked( input() ) ) {
9936
  if ( api.CZR_Helpers.isChecked( item.czr_Input('bg-attachment')()) ) {
9940
  });
9941
  break;
9942
  case 'bg-attachment' :
9943
+ // uncheck parallax if needed
9944
  input.bind( function( to ) {
9945
  if ( api.CZR_Helpers.isChecked( input() ) ) {
9946
  if ( api.CZR_Helpers.isChecked( item.czr_Input('bg-parallax')()) ) {
9954
  }
9955
  }//CZRItemConstructor
9956
  };
9957
+
9958
+
9959
+ //provides a description of each module
9960
+ //=> will determine :
9961
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
9962
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
9963
+ // , if crud, the item shall be removable
9964
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
9965
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
9966
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
9967
  api.czrModuleMap = api.czrModuleMap || {};
9968
  $.extend( api.czrModuleMap, {
9969
  sek_level_bg_module : {
9980
  },
9981
  });
9982
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
9983
+ //extends api.CZRDynModule
9984
  ( function ( api, $, _ ) {
9985
  var Constructor = {
9986
  initialize: function( id, options ) {
9987
+ //console.log('INITIALIZING SEKTION OPTIONS', id, options );
9988
  var module = this;
9989
+
9990
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
9991
  module.inputConstructor = api.CZRInput.extend( module.CZRInputMths || {} );
9992
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
9993
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
9994
+
9995
+ //run the parent initialize
9996
  api.CZRDynModule.prototype.initialize.call( module, id, options );
9997
  },//initialize
9998
 
10004
  },//CZRInputMths
10005
 
10006
  CZRItemConstructor : {
10007
+ //overrides the parent ready
10008
  ready : function() {
10009
  var item = this;
10010
+ //wait for the input collection to be populated,
10011
+ //and then set the input visibility dependencies
10012
  item.inputCollection.bind( function( col ) {
10013
  if( _.isEmpty( col ) )
10014
  return;
10016
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
10017
  }
10018
  });//item.inputCollection.bind()
10019
+
10020
+ //fire the parent
10021
  api.CZRItem.prototype.ready.call( item );
10022
  },
10023
+
10024
+
10025
+ //Fired when the input collection is populated
10026
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
10027
  setInputVisibilityDeps : function() {
10028
  var item = this,
10029
  module = item.module;
10030
+ //Internal item dependencies
10031
  item.czr_Input.each( function( input ) {
10032
  switch( input.id ) {
10033
  case 'border-type' :
10044
  }
10045
  }//CZRItemConstructor
10046
  };
10047
+
10048
+
10049
+ //provides a description of each module
10050
+ //=> will determine :
10051
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10052
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10053
+ // , if crud, the item shall be removable
10054
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10055
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10056
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10057
  api.czrModuleMap = api.czrModuleMap || {};
10058
  $.extend( api.czrModuleMap, {
10059
  sek_level_border_module : {
10070
  },
10071
  });
10072
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10073
+ //extends api.CZRDynModule
10074
  ( function ( api, $, _ ) {
10075
  var Constructor = {
10076
  initialize: function( id, options ) {
10077
  var module = this;
10078
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10079
+ // module.inputConstructor = api.CZRInput.extend( module.CZRInputMths || {} );
10080
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10081
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10082
+ //run the parent initialize
10083
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10084
 
10085
  },//initialize
10086
 
10087
+ // CZRInputMths : {
10088
+ // setupSelect : function() {
10089
+ // api.czr_sektions.setupSelectInput.call( this );
10090
+ // }
10091
+ // },//CZRInputMths
10092
+
10093
  CZRItemConstructor : {
10094
+ //overrides the parent ready
10095
  ready : function() {
10096
  var item = this;
10097
+ //wait for the input collection to be populated,
10098
+ //and then set the input visibility dependencies
10099
  item.inputCollection.bind( function( col ) {
10100
  if( _.isEmpty( col ) )
10101
  return;
10103
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
10104
  }
10105
  });//item.inputCollection.bind()
10106
+
10107
+ //fire the parent
10108
  api.CZRItem.prototype.ready.call( item );
10109
  },
10110
+
10111
+
10112
+ //Fired when the input collection is populated
10113
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
10114
  setInputVisibilityDeps : function() {
10115
  var item = this,
10116
  module = item.module;
10117
+ //Internal item dependencies
10118
  item.czr_Input.each( function( input ) {
10119
  switch( input.id ) {
10120
  case 'use-custom-breakpoint' :
10127
  }
10128
  }//CZRItemConstructor
10129
  };
10130
+
10131
+ //provides a description of each module
10132
+ //=> will determine :
10133
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10134
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10135
+ // , if crud, the item shall be removable
10136
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10137
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10138
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10139
  api.czrModuleMap = api.czrModuleMap || {};
10140
  $.extend( api.czrModuleMap, {
10141
  sek_level_breakpoint_module : {
10152
  },
10153
  });
10154
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10155
+ //extends api.CZRDynModule
10156
  ( function ( api, $, _ ) {
10157
  var Constructor = {
10158
  initialize: function( id, options ) {
10159
  var module = this;
10160
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10161
  module.inputConstructor = api.CZRInput.extend( module.CZRInputMths || {} );
10162
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10163
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10164
+ //run the parent initialize
10165
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10166
 
10167
  },//initialize
10173
  },//CZRInputMths
10174
 
10175
  CZRItemConstructor : {
10176
+ //overrides the parent ready
10177
  ready : function() {
10178
  var item = this;
10179
+ //wait for the input collection to be populated,
10180
+ //and then set the input visibility dependencies
10181
  item.inputCollection.bind( function( col ) {
10182
  if( _.isEmpty( col ) )
10183
  return;
10185
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
10186
  }
10187
  });//item.inputCollection.bind()
10188
+
10189
+ //fire the parent
10190
  api.CZRItem.prototype.ready.call( item );
10191
  },
10192
+
10193
+
10194
+ //Fired when the input collection is populated
10195
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
10196
  setInputVisibilityDeps : function() {
10197
  var item = this,
10198
  module = item.module;
10199
+ //Internal item dependencies
10200
  item.czr_Input.each( function( input ) {
10201
  switch( input.id ) {
10202
  case 'height-type' :
10213
  }
10214
  }//CZRItemConstructor
10215
  };
10216
+
10217
+
10218
+ //provides a description of each module
10219
+ //=> will determine :
10220
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10221
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10222
+ // , if crud, the item shall be removable
10223
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10224
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10225
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10226
  api.czrModuleMap = api.czrModuleMap || {};
10227
  $.extend( api.czrModuleMap, {
10228
  sek_level_height_module : {
10239
  },
10240
  });
10241
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10242
+ //extends api.CZRDynModule
10243
  ( function ( api, $, _ ) {
10244
+ //provides a description of each module
10245
+ //=> will determine :
10246
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10247
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10248
+ // , if crud, the item shall be removable
10249
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10250
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10251
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10252
  api.czrModuleMap = api.czrModuleMap || {};
10253
  $.extend( api.czrModuleMap, {
10254
  sek_level_visibility_module : {
10255
+ //mthds : Constructor,
10256
  crud : false,
10257
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_level_visibility_module', 'name' ),
10258
  has_mod_opt : false,
10265
  },
10266
  });
10267
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10268
+ //extends api.CZRDynModule
10269
  ( function ( api, $, _ ) {
10270
  var Constructor = {
10271
  initialize: function( id, options ) {
10272
  var module = this;
10273
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10274
  module.inputConstructor = api.CZRInput.extend( module.CZRInputMths || {} );
10275
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10276
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10277
+ //run the parent initialize
10278
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10279
 
10280
  },//initialize
10286
  },//CZRInputMths
10287
 
10288
  CZRItemConstructor : {
10289
+ //overrides the parent ready
10290
  ready : function() {
10291
  var item = this;
10292
+ //wait for the input collection to be populated,
10293
+ //and then set the input visibility dependencies
10294
  item.inputCollection.bind( function( col ) {
10295
  if( _.isEmpty( col ) )
10296
  return;
10298
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
10299
  }
10300
  });//item.inputCollection.bind()
10301
+
10302
+ //fire the parent
10303
  api.CZRItem.prototype.ready.call( item );
10304
  },
10305
+
10306
+
10307
+ //Fired when the input collection is populated
10308
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
10309
  setInputVisibilityDeps : function() {
10310
  var item = this,
10311
  module = item.module;
10312
+
10313
+ //Internal item dependencies
10314
  item.czr_Input.each( function( input ) {
10315
  switch( input.id ) {
10316
  case 'width-type' :
10326
  }
10327
  }//CZRItemConstructor
10328
  };
10329
+
10330
+
10331
+ //provides a description of each module
10332
+ //=> will determine :
10333
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10334
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10335
+ // , if crud, the item shall be removable
10336
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10337
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10338
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10339
  api.czrModuleMap = api.czrModuleMap || {};
10340
  $.extend( api.czrModuleMap, {
10341
  sek_level_width_module : {
10352
  },
10353
  });
10354
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10355
+ //extends api.CZRDynModule
10356
  ( function ( api, $, _ ) {
10357
  var Constructor = {
10358
  initialize: function( id, options ) {
10359
  var module = this;
10360
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10361
  module.inputConstructor = api.CZRInput.extend( module.CZRInputMths || {} );
10362
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10363
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10364
+ //run the parent initialize
10365
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10366
 
10367
  },//initialize
10373
  },//CZRInputMths
10374
 
10375
  CZRItemConstructor : {
10376
+ //overrides the parent ready
10377
  ready : function() {
10378
  var item = this;
10379
+ //wait for the input collection to be populated,
10380
+ //and then set the input visibility dependencies
10381
  item.inputCollection.bind( function( col ) {
10382
  if( _.isEmpty( col ) )
10383
  return;
10385
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
10386
  }
10387
  });//item.inputCollection.bind()
10388
+
10389
+ //fire the parent
10390
  api.CZRItem.prototype.ready.call( item );
10391
  },
10392
+
10393
+
10394
+ //Fired when the input collection is populated
10395
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
10396
  setInputVisibilityDeps : function() {
10397
  var item = this,
10398
  module = item.module;
10399
+
10400
+ //Internal item dependencies
10401
  item.czr_Input.each( function( input ) {
10402
  switch( input.id ) {
10403
  case 'use-custom-outer-width' :
10415
  }
10416
  }//CZRItemConstructor
10417
  };
10418
+
10419
+
10420
+ //provides a description of each module
10421
+ //=> will determine :
10422
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10423
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10424
+ // , if crud, the item shall be removable
10425
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10426
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10427
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10428
  api.czrModuleMap = api.czrModuleMap || {};
10429
  $.extend( api.czrModuleMap, {
10430
  sek_level_width_section : {
10441
  },
10442
  });
10443
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10444
+ //extends api.CZRDynModule
10445
  ( function ( api, $, _ ) {
10446
+ //provides a description of each module
10447
+ //=> will determine :
10448
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10449
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10450
+ // , if crud, the item shall be removable
10451
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10452
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10453
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10454
  api.czrModuleMap = api.czrModuleMap || {};
10455
  $.extend( api.czrModuleMap, {
10456
  sek_level_spacing_module : {
10467
  },
10468
  });
10469
  })( wp.customize , jQuery, _ );
10470
+ //global sektionsLocalizedData, serverControlParams
10471
+ //extends api.CZRDynModule
10472
  ( function ( api, $, _ ) {
10473
  var Constructor = {
10474
  initialize: function( id, options ) {
10475
  var module = this;
10476
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10477
  module.inputConstructor = api.CZRInput.extend({
10478
  setupSelect : function() {
10479
  api.czr_sektions.setupSelectInput.call( this );
10480
  }
10481
  });
10482
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10483
+ //module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10484
+ //run the parent initialize
10485
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10486
 
10487
  }//initialize
10488
  };
10489
+
10490
+ //provides a description of each module
10491
+ //=> will determine :
10492
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10493
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10494
+ // , if crud, the item shall be removable
10495
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10496
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10497
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10498
  api.czrModuleMap = api.czrModuleMap || {};
10499
  $.extend( api.czrModuleMap, {
10500
  sek_local_template : {
10510
  },
10511
  });
10512
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10513
+ //extends api.CZRDynModule
10514
  ( function ( api, $, _ ) {
10515
  var Constructor = {
10516
  initialize: function( id, options ) {
10517
  var module = this;
10518
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10519
  module.inputConstructor = api.CZRInput.extend({
10520
  setupSelect : function() {
10521
  api.czr_sektions.setupSelectInput.call( this );
10522
  }
10523
  });
10524
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10525
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10526
+ //run the parent initialize
10527
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10528
 
10529
  },//initialize
10530
 
10531
  CZRItemConstructor : {
10532
+ //overrides the parent ready
10533
  ready : function() {
10534
  var item = this;
10535
+ //wait for the input collection to be populated,
10536
+ //and then set the input visibility dependencies
10537
  item.inputCollection.bind( function( col ) {
10538
  if( _.isEmpty( col ) )
10539
  return;
10541
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
10542
  }
10543
  });//item.inputCollection.bind()
10544
+
10545
+ //fire the parent
10546
  api.CZRItem.prototype.ready.call( item );
10547
  },
10548
+
10549
+
10550
+ //Fired when the input collection is populated
10551
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
10552
  setInputVisibilityDeps : function() {
10553
  var item = this,
10554
  module = item.module;
10555
+
10556
+ //Internal item dependencies
10557
  item.czr_Input.each( function( input ) {
10558
  switch( input.id ) {
10559
  case 'use-custom-outer-width' :
10571
  }
10572
  }//CZRItemConstructor
10573
  };
10574
+
10575
+
10576
+ //provides a description of each module
10577
+ //=> will determine :
10578
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10579
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10580
+ // , if crud, the item shall be removable
10581
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10582
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10583
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10584
  api.czrModuleMap = api.czrModuleMap || {};
10585
  $.extend( api.czrModuleMap, {
10586
  sek_local_widths : {
10596
  },
10597
  });
10598
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10599
+ //extends api.CZRDynModule
10600
  ( function ( api, $, _ ) {
10601
+
10602
+ //provides a description of each module
10603
+ //=> will determine :
10604
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10605
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10606
+ // , if crud, the item shall be removable
10607
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10608
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10609
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10610
  api.czrModuleMap = api.czrModuleMap || {};
10611
  $.extend( api.czrModuleMap, {
10612
  sek_local_custom_css : {
10613
+ //mthds : Constructor,
10614
  crud : false,
10615
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_local_custom_css', 'name' ),
10616
  has_mod_opt : false,
10622
  },
10623
  });
10624
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10625
+ //extends api.CZRDynModule
10626
  ( function ( api, $, _ ) {
10627
+
10628
+ //provides a description of each module
10629
+ //=> will determine :
10630
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10631
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10632
+ // , if crud, the item shall be removable
10633
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10634
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10635
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10636
  api.czrModuleMap = api.czrModuleMap || {};
10637
  $.extend( api.czrModuleMap, {
10638
  sek_local_reset : {
10639
+ //mthds : Constructor,
10640
  crud : false,
10641
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_local_reset', 'name' ),
10642
  has_mod_opt : false,
10648
  },
10649
  });
10650
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10651
+ //extends api.CZRDynModule
10652
  ( function ( api, $, _ ) {
10653
  var Constructor = {
10654
  initialize: function( id, options ) {
10655
  var module = this;
10656
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10657
  module.inputConstructor = api.CZRInput.extend({
10658
  setupSelect : function() {
10659
  api.czr_sektions.setupSelectInput.call( this );
10660
  }
10661
  });
10662
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10663
+ //module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10664
+ //run the parent initialize
10665
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10666
 
10667
  }//initialize
10668
  };
10669
+ //provides a description of each module
10670
+ //=> will determine :
10671
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10672
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10673
+ // , if crud, the item shall be removable
10674
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10675
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10676
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10677
  api.czrModuleMap = api.czrModuleMap || {};
10678
  $.extend( api.czrModuleMap, {
10679
  sek_local_performances : {
10689
  },
10690
  });
10691
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10692
+ //extends api.CZRDynModule
10693
  ( function ( api, $, _ ) {
10694
  var Constructor = {
10695
  initialize: function( id, options ) {
10696
  var module = this;
10697
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10698
  module.inputConstructor = api.CZRInput.extend({
10699
  setupSelect : function() {
10700
  api.czr_sektions.setupSelectInput.call( this );
10701
  }
10702
  });
10703
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10704
+ //module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10705
+ //run the parent initialize
10706
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10707
 
10708
  }//initialize
10709
  };
10710
+
10711
+ //provides a description of each module
10712
+ //=> will determine :
10713
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10714
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10715
+ // , if crud, the item shall be removable
10716
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10717
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10718
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10719
  api.czrModuleMap = api.czrModuleMap || {};
10720
  $.extend( api.czrModuleMap, {
10721
  sek_local_header_footer : {
10731
  },
10732
  });
10733
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10734
+ //extends api.CZRDynModule
10735
  ( function ( api, $, _ ) {
10736
  var Constructor = {
10737
  initialize: function( id, options ) {
10738
  var module = this;
10739
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10740
  module.inputConstructor = api.CZRInput.extend({
10741
  setupSelect : function() {
10742
  api.czr_sektions.setupSelectInput.call( this );
10743
  }
10744
  });
10745
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10746
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10747
+ //run the parent initialize
10748
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10749
 
10750
  },//initialize
10751
 
10752
  CZRItemConstructor : {
10753
+ //overrides the parent ready
10754
  ready : function() {
10755
  var item = this;
10756
+ //wait for the input collection to be populated,
10757
+ //and then set the input visibility dependencies
10758
  item.inputCollection.bind( function( col ) {
10759
  if( _.isEmpty( col ) )
10760
  return;
10762
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
10763
  }
10764
  });//item.inputCollection.bind()
10765
+
10766
+ //fire the parent
10767
  api.CZRItem.prototype.ready.call( item );
10768
  },
10769
+
10770
+
10771
+ //Fired when the input collection is populated
10772
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
10773
  setInputVisibilityDeps : function() {
10774
  var item = this,
10775
  module = item.module;
10776
+
10777
+ //Internal item dependencies
10778
  item.czr_Input.each( function( input ) {
10779
  switch( input.id ) {
10780
  case 'use-custom-breakpoint' :
10787
  }
10788
  }//CZRItemConstructor
10789
  };
10790
+
10791
+
10792
+ //provides a description of each module
10793
+ //=> will determine :
10794
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10795
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10796
+ // , if crud, the item shall be removable
10797
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10798
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10799
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10800
  api.czrModuleMap = api.czrModuleMap || {};
10801
  $.extend( api.czrModuleMap, {
10802
  sek_global_breakpoint : {
10812
  },
10813
  });
10814
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10815
+ //extends api.CZRDynModule
10816
  ( function ( api, $, _ ) {
10817
  var Constructor = {
10818
  initialize: function( id, options ) {
10819
  var module = this;
10820
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10821
  module.inputConstructor = api.CZRInput.extend({
10822
  setupSelect : function() {
10823
  api.czr_sektions.setupSelectInput.call( this );
10824
  }
10825
  });
10826
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10827
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10828
+ //run the parent initialize
10829
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10830
 
10831
  },//initialize
10832
 
10833
  CZRItemConstructor : {
10834
+ //overrides the parent ready
10835
  ready : function() {
10836
  var item = this;
10837
+ //wait for the input collection to be populated,
10838
+ //and then set the input visibility dependencies
10839
  item.inputCollection.bind( function( col ) {
10840
  if( _.isEmpty( col ) )
10841
  return;
10843
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
10844
  }
10845
  });//item.inputCollection.bind()
10846
+
10847
+ //fire the parent
10848
  api.CZRItem.prototype.ready.call( item );
10849
  },
10850
+
10851
+
10852
+ //Fired when the input collection is populated
10853
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
10854
  setInputVisibilityDeps : function() {
10855
  var item = this,
10856
  module = item.module;
10857
+
10858
+ //Internal item dependencies
10859
  item.czr_Input.each( function( input ) {
10860
  switch( input.id ) {
10861
  case 'use-custom-outer-width' :
10873
  }
10874
  }//CZRItemConstructor
10875
  };
10876
+
10877
+
10878
+ //provides a description of each module
10879
+ //=> will determine :
10880
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10881
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10882
+ // , if crud, the item shall be removable
10883
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10884
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10885
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10886
  api.czrModuleMap = api.czrModuleMap || {};
10887
  $.extend( api.czrModuleMap, {
10888
  sek_global_widths : {
10898
  },
10899
  });
10900
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10901
+ //extends api.CZRDynModule
10902
  ( function ( api, $, _ ) {
10903
+ //provides a description of each module
10904
+ //=> will determine :
10905
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10906
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10907
+ // , if crud, the item shall be removable
10908
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10909
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10910
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10911
  api.czrModuleMap = api.czrModuleMap || {};
10912
  $.extend( api.czrModuleMap, {
10913
  sek_global_performances : {
10914
+ //mthds : Constructor,
10915
  crud : false,
10916
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_global_performances', 'name' ),
10917
  has_mod_opt : false,
10923
  },
10924
  });
10925
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10926
+ //extends api.CZRDynModule
10927
  ( function ( api, $, _ ) {
10928
  var Constructor = {
10929
  initialize: function( id, options ) {
10930
  var module = this;
10931
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10932
  module.inputConstructor = api.CZRInput.extend({
10933
  setupSelect : function() {
10934
  api.czr_sektions.setupSelectInput.call( this );
10935
  }
10936
  });
10937
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10938
+ //module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10939
+ //run the parent initialize
10940
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10941
 
10942
  }//initialize
10943
  };
10944
+
10945
+ //provides a description of each module
10946
+ //=> will determine :
10947
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
10948
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
10949
+ // , if crud, the item shall be removable
10950
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
10951
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
10952
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
10953
  api.czrModuleMap = api.czrModuleMap || {};
10954
  $.extend( api.czrModuleMap, {
10955
  sek_global_header_footer : {
10965
  },
10966
  });
10967
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
10968
+ //extends api.CZRDynModule
10969
  ( function ( api, $, _ ) {
10970
  var Constructor = {
10971
  initialize: function( id, options ) {
10972
  var module = this;
10973
+ // // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
10974
+ // module.inputConstructor = api.CZRInput.extend({
10975
+ // setupSelect : function() {
10976
+ // api.czr_sektions.setupSelectInput.call( this );
10977
+ // }
10978
+ // });
10979
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
10980
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
10981
+ //run the parent initialize
10982
  api.CZRDynModule.prototype.initialize.call( module, id, options );
10983
 
10984
  },//initialize
10985
 
10986
  CZRItemConstructor : {
10987
+ //overrides the parent ready
10988
  ready : function() {
10989
  var item = this;
10990
+ //wait for the input collection to be populated,
10991
+ //and then set the input visibility dependencies
10992
  item.inputCollection.bind( function( col ) {
10993
  if( _.isEmpty( col ) )
10994
  return;
10996
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
10997
  }
10998
  });//item.inputCollection.bind()
10999
+
11000
+ //fire the parent
11001
  api.CZRItem.prototype.ready.call( item );
11002
  },
11003
+
11004
+
11005
+ //Fired when the input collection is populated
11006
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
11007
  setInputVisibilityDeps : function() {
11008
  var item = this,
11009
  module = item.module;
11010
+
11011
+ //Internal item dependencies
11012
  item.czr_Input.each( function( input ) {
11013
  switch( input.id ) {
11014
  case 'enable' :
11043
  }
11044
  }//CZRItemConstructor
11045
  };
11046
+
11047
+
11048
+ //provides a description of each module
11049
+ //=> will determine :
11050
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
11051
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
11052
+ // , if crud, the item shall be removable
11053
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
11054
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
11055
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
11056
  api.czrModuleMap = api.czrModuleMap || {};
11057
  $.extend( api.czrModuleMap, {
11058
  sek_global_recaptcha : {
11068
  },
11069
  });
11070
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
11071
+ //extends api.CZRDynModule
11072
  ( function ( api, $, _ ) {
11073
+ //provides a description of each module
11074
+ //=> will determine :
11075
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
11076
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
11077
+ // , if crud, the item shall be removable
11078
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
11079
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
11080
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
11081
  api.czrModuleMap = api.czrModuleMap || {};
11082
  $.extend( api.czrModuleMap, {
11083
  sek_global_beta_features : {
11084
+ //mthds : Constructor,
11085
  crud : false,
11086
  name : api.czr_sektions.getRegisteredModuleProperty( 'sek_global_beta_features', 'name' ),
11087
  has_mod_opt : false,
11095
  })( wp.customize , jQuery, _ );/* ------------------------------------------------------------------------- *
11096
  * IMAGE MAIN SETTINGS
11097
  /* ------------------------------------------------------------------------- */
11098
+ //global sektionsLocalizedData, serverControlParams
11099
+ //extends api.CZRDynModule
11100
  ( function ( api, $, _ ) {
11101
  var Constructor = {
11102
  initialize: function( id, options ) {
11103
  var module = this;
11104
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
11105
  module.inputConstructor = api.CZRInput.extend({
11106
  setupSelect : function() {
11107
  api.czr_sektions.setupSelectInput.call( this );
11108
  }
11109
  });
11110
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
11111
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
11112
+
11113
+ // run the parent initialize
11114
+ // Note : must be always invoked always after the input / item class extension
11115
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
11116
  api.CZRDynModule.prototype.initialize.call( module, id, options );
11117
+
11118
+ //SET THE CONTENT PICKER DEFAULT OPTIONS
11119
+ //@see ::setupContentPicker()
11120
  module.bind( 'set_default_content_picker_options', function( params ) {
11121
  params.defaultContentPickerOption.defaultOption = {
11122
  'title' : '<span style="font-weight:bold">' + sektionsLocalizedData.i18n['Set a custom url'] + '</span>',
11129
  return params;
11130
  });
11131
  },//initialize
11132
+
11133
+
11134
+ // _isChecked : function( v ) {
11135
+ // return 0 !== v && '0' !== v && false !== v && 'off' !== v;
11136
+ // },
11137
+ //////////////////////////////////////////////////////////
11138
+ /// ITEM CONSTRUCTOR
11139
+ //////////////////////////////////////////
11140
  CZRItemConstructor : {
11141
+ //overrides the parent ready
11142
  ready : function() {
11143
  var item = this;
11144
+ //wait for the input collection to be populated,
11145
+ //and then set the input visibility dependencies
11146
  item.inputCollection.bind( function( col ) {
11147
  if( _.isEmpty( col ) )
11148
  return;
11150
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
11151
  }
11152
  });//item.inputCollection.bind()
11153
+
11154
+ //fire the parent
11155
  api.CZRItem.prototype.ready.call( item );
11156
  },
11157
+
11158
+
11159
+ //Fired when the input collection is populated
11160
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
11161
  setInputVisibilityDeps : function() {
11162
  var item = this,
11163
  module = item.module;
11164
+
11165
+ //Internal item dependencies
11166
  item.czr_Input.each( function( input ) {
11167
  switch( input.id ) {
11168
  case 'img' :
11229
  },//CZRItemConstructor
11230
 
11231
  };//Constructor
11232
+
11233
+ //provides a description of each module
11234
+ //=> will determine :
11235
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
11236
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
11237
+ // , if crud, the item shall be removable
11238
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
11239
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
11240
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
11241
  api.czrModuleMap = api.czrModuleMap || {};
11242
  $.extend( api.czrModuleMap, {
11243
  czr_image_main_settings_child : {
11262
  /* ------------------------------------------------------------------------- *
11263
  * IMAGE BORDERS AND BORDER RADIUS
11264
  /* ------------------------------------------------------------------------- */
11265
+ //global sektionsLocalizedData, serverControlParams
11266
+ //extends api.CZRDynModule
11267
  ( function ( api, $, _ ) {
11268
  var Constructor = {
11269
  initialize: function( id, options ) {
11270
  var module = this;
11271
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
11272
  module.inputConstructor = api.CZRInput.extend({
11273
  setupSelect : function() {
11274
  api.czr_sektions.setupSelectInput.call( this );
11275
  }
11276
  });
11277
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
11278
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
11279
+
11280
+ // run the parent initialize
11281
+ // Note : must be always invoked always after the input / item class extension
11282
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
11283
  api.CZRDynModule.prototype.initialize.call( module, id, options );
11284
  },//initialize
11285
+
11286
+
11287
+ // _isChecked : function( v ) {
11288
+ // return 0 !== v && '0' !== v && false !== v && 'off' !== v;
11289
+ // },
11290
+ //////////////////////////////////////////////////////////
11291
+ /// ITEM CONSTRUCTOR
11292
+ //////////////////////////////////////////
11293
  CZRItemConstructor : {
11294
+ //overrides the parent ready
11295
  ready : function() {
11296
  var item = this;
11297
+ //wait for the input collection to be populated,
11298
+ //and then set the input visibility dependencies
11299
  item.inputCollection.bind( function( col ) {
11300
  if( _.isEmpty( col ) )
11301
  return;
11303
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
11304
  }
11305
  });//item.inputCollection.bind()
11306
+
11307
+ //fire the parent
11308
  api.CZRItem.prototype.ready.call( item );
11309
  },
11310
+
11311
+
11312
+ //Fired when the input collection is populated
11313
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
11314
  setInputVisibilityDeps : function() {
11315
  var item = this,
11316
  module = item.module;
11317
+ // input controller instance == this
11318
  var scheduleVisibilityOfInputId = function( controlledInputId, visibilityCallBack ) {
11319
+ //Fire on init
11320
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
11321
+ //React on change
11322
  this.bind( function( to ) {
11323
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
11324
  });
11325
  };
11326
+ //Internal item dependencies
11327
  item.czr_Input.each( function( input ) {
11328
  switch( input.id ) {
11329
  case 'border-type' :
11341
  },//CZRItemConstructor
11342
 
11343
  };//Constructor
11344
+
11345
+ //provides a description of each module
11346
+ //=> will determine :
11347
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
11348
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
11349
+ // , if crud, the item shall be removable
11350
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
11351
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
11352
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
11353
  api.czrModuleMap = api.czrModuleMap || {};
11354
  $.extend( api.czrModuleMap, {
11355
  czr_image_borders_corners_child : {
11363
  },
11364
  });
11365
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
11366
+ //extends api.CZRDynModule
11367
  ( function ( api, $, _ ) {
11368
  var Constructor = {
11369
  initialize: function( id, options ) {
11370
+ //console.log('INITIALIZING IMAGE MODULE', id, options );
11371
  var module = this;
11372
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
11373
  module.inputConstructor = api.CZRInput.extend( module.CZRTextEditorInputMths || {} );
11374
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
11375
+ // module.itemConstructor = api.CZRItem.extend( module.CZRSocialsItem || {} );
11376
+
11377
+ // run the parent initialize
11378
+ // Note : must be always invoked always after the input / item class extension
11379
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
11380
  api.CZRDynModule.prototype.initialize.call( module, id, options );
11381
  },//initialize
11382
 
11383
  CZRTextEditorInputMths : {
11384
  initialize : function( name, options ) {
11385
  var input = this;
11386
+ // Expand the editor when ready
11387
  if ( 'tiny_mce_editor' == input.type ) {
11388
  input.isReady.then( function() {
11389
  input.container.find('[data-czr-action="open-tinymce-editor"]').trigger('click');
11396
  api.czr_sektions.setupSelectInput.call( this );
11397
  }
11398
  },//CZRTextEditorInputMths
11399
+
11400
+ // CZRSocialsItem : { },//CZRSocialsItem
11401
  };//Constructor
11402
+
11403
+
11404
+ //provides a description of each module
11405
+ //=> will determine :
11406
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
11407
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
11408
+ // , if crud, the item shall be removable
11409
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
11410
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
11411
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
11412
  api.czrModuleMap = api.czrModuleMap || {};
11413
  $.extend( api.czrModuleMap, {
11414
  czr_tinymce_child : {
11422
  },
11423
  });
11424
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
11425
+ //extends api.CZRDynModule
11426
  ( function ( api, $, _ ) {
11427
+ //provides a description of each module
11428
+ //=> will determine :
11429
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
11430
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
11431
+ // , if crud, the item shall be removable
11432
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
11433
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
11434
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
11435
  api.czrModuleMap = api.czrModuleMap || {};
11436
  $.extend( api.czrModuleMap, {
11437
  czr_simple_html_module : {
11438
+ //mthds : SimpleHtmlModuleConstructor,
11439
  crud : false,
11440
  name : api.czr_sektions.getRegisteredModuleProperty( 'czr_simple_html_module', 'name' ),
11441
  has_mod_opt : false,
11445
  },
11446
  });
11447
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
11448
+ //extends api.CZRDynModule
11449
  ( function ( api, $, _ ) {
11450
  var FeaturedPagesConstruct = {
11451
  initialize: function( id, options ) {
11452
+ //console.log('INITIALIZING FP MODULE', id, options );
11453
  var module = this;
11454
+
11455
+
11456
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
11457
  module.inputConstructor = api.CZRInput.extend({
11458
  setupSelect : function() {
11459
  api.czr_sektions.setupSelectInput.call( this );
11460
  }
11461
  });
11462
+
11463
+ // //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
11464
  module.itemConstructor = api.CZRItem.extend( module.CZRFPItemConstructor || {} );
11465
+
11466
+ // run the parent initialize
11467
+ // Note : must be always invoked always after the input / item class extension
11468
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
11469
  api.CZRDynModule.prototype.initialize.call( module, id, options );
11470
  },//initialize
11471
+
11472
+ //////////////////////////////////////////////////////////
11473
+ /// ITEM CONSTRUCTOR
11474
+ //////////////////////////////////////////
11475
  CZRFPItemConstructor : {
11476
+ //overrides the parent ready
11477
  ready : function() {
11478
  var item = this;
11479
+ //wait for the input collection to be populated,
11480
+ //and then set the input visibility dependencies
11481
  item.inputCollection.bind( function( col ) {
11482
  if( _.isEmpty( col ) )
11483
  return;
11485
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
11486
  }
11487
  });//item.inputCollection.bind()
11488
+
11489
+ //fire the parent
11490
  api.CZRItem.prototype.ready.call( item );
11491
  },
11492
+ //Fired when the input collection is populated
11493
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
11494
  setInputVisibilityDeps : function() {
11495
  var item = this,
11496
  module = item.module;
11497
+
11498
+ //Internal item dependencies
11499
  item.czr_Input.each( function( input ) {
11500
  switch( input.id ) {
11501
  case 'img-type' :
11539
  }
11540
  },//CZRFPItemConstructor
11541
  };//FeaturedPagesConstruct
11542
+
11543
+ //provides a description of each module
11544
+ //=> will determine :
11545
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
11546
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
11547
+ // , if crud, the item shall be removable
11548
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
11549
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
11550
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
11551
  api.czrModuleMap = api.czrModuleMap || {};
11552
  $.extend( api.czrModuleMap, {
11553
  czr_featured_pages_module : {
11563
  },
11564
  });
11565
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
11566
+ //extends api.CZRDynModule
11567
  ( function ( api, $, _ ) {
11568
+ //ICON MODULE
11569
  var Constructor = {
11570
  initialize: function( id, options ) {
11571
+ //console.log('INITIALIZING IMAGE MODULE', id, options );
11572
  var module = this;
11573
+
11574
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
11575
  module.inputConstructor = api.CZRInput.extend({
11576
  setupSelect : function() {
11577
  api.czr_sektions.setupSelectInput.call( this );
11578
  }
11579
  });
11580
+
11581
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
11582
  module.itemConstructor = api.CZRItem.extend( module.CZRIconItemConstructor || {} );
11583
+
11584
+
11585
+ //SET THE CONTENT PICKER DEFAULT OPTIONS
11586
+ //@see ::setupContentPicker()
11587
  module.bind( 'set_default_content_picker_options', function( params ) {
11588
  params.defaultContentPickerOption.defaultOption = {
11589
  'title' : '<span style="font-weight:bold">' + sektionsLocalizedData.i18n['Set a custom url'] + '</span>',
11595
  };
11596
  return params;
11597
  });
11598
+
11599
+ // run the parent initialize
11600
+ // Note : must be always invoked always after the input / item class extension
11601
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
11602
  api.CZRDynModule.prototype.initialize.call( module, id, options );
11603
 
11604
  },//initialize
11605
 
11606
  /* Helpers */
11607
+
11608
+ //////////////////////////////////////////////////////////
11609
+ /// ITEM CONSTRUCTOR
11610
+ //////////////////////////////////////////
11611
  CZRIconItemConstructor : {
11612
+ //overrides the parent ready
11613
  ready : function() {
11614
  var item = this;
11615
+ //wait for the input collection to be populated,
11616
+ //and then set the input visibility dependencies
11617
  item.inputCollection.bind( function( col ) {
11618
  if( _.isEmpty( col ) )
11619
  return;
11621
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
11622
  }
11623
  });//item.inputCollection.bind()
11624
+
11625
+ //fire the parent
11626
  api.CZRItem.prototype.ready.call( item );
11627
  },
11628
+
11629
+
11630
+ //Fired when the input collection is populated
11631
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
11632
  setInputVisibilityDeps : function() {
11633
  var item = this,
11634
  module = item.module;
11635
+
11636
+ //Internal item dependencies
11637
  item.czr_Input.each( function( input ) {
11638
  switch( input.id ) {
11639
  case 'link-to' :
11674
  },//CZRIconItemConstructor
11675
 
11676
  };//Constructor
11677
+
11678
+
11679
+ //provides a description of each module
11680
+ //=> will determine :
11681
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
11682
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
11683
+ // , if crud, the item shall be removable
11684
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
11685
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
11686
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
11687
  api.czrModuleMap = api.czrModuleMap || {};
11688
  $.extend( api.czrModuleMap, {
11689
  czr_icon_settings_child : {
11697
  },
11698
  });
11699
  })( wp.customize , jQuery, _ );
11700
+
11701
+
11702
+
11703
+
11704
+
11705
+
11706
+
11707
+ //global sektionsLocalizedData, serverControlParams
11708
+ //extends api.CZRDynModule
11709
  ( function ( api, $, _ ) {
11710
+ //BUTTON MODULE
11711
  var Constructor = {
11712
  initialize: function( id, options ) {
11713
  var module = this;
11714
+
11715
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
11716
  module.inputConstructor = api.CZRInput.extend({
11717
  setupSelect : function() {
11718
  api.czr_sektions.setupSelectInput.call( this );
11719
  }
11720
  });
11721
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
11722
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
11723
+
11724
+ // run the parent initialize
11725
+ // Note : must be always invoked always after the input / item class extension
11726
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
11727
  api.CZRDynModule.prototype.initialize.call( module, id, options );
11728
  },//initialize
11729
 
11730
  CZRItemConstructor : {
11731
+ //overrides the parent ready
11732
  ready : function() {
11733
  var item = this;
11734
+ //wait for the input collection to be populated,
11735
+ //and then set the input visibility dependencies
11736
  item.inputCollection.bind( function( col ) {
11737
  if( _.isEmpty( col ) )
11738
  return;
11740
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
11741
  }
11742
  });//item.inputCollection.bind()
11743
+
11744
+ //fire the parent
11745
  api.CZRItem.prototype.ready.call( item );
11746
  },
11747
+
11748
+
11749
+ //Fired when the input collection is populated
11750
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
11751
  setInputVisibilityDeps : function() {
11752
  var item = this,
11753
  module = item.module;
11754
+ // input controller instance == this
11755
  var scheduleVisibilityOfInputId = function( controlledInputId, visibilityCallBack ) {
11756
+ //Fire on init
11757
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
11758
+ //React on change
11759
  this.bind( function( to ) {
11760
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
11761
  });
11762
  };
11763
+ //Internal item dependencies
11764
  item.czr_Input.each( function( input ) {
11765
  switch( input.id ) {
11766
  case 'border-type' :
11777
  }
11778
  }//CZRItemConstructor
11779
  };// Constructor
11780
+ //provides a description of each module
11781
+ //=> will determine :
11782
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
11783
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
11784
+ // , if crud, the item shall be removable
11785
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
11786
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
11787
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
11788
  api.czrModuleMap = api.czrModuleMap || {};
11789
  $.extend( api.czrModuleMap, {
11790
  czr_icon_spacing_border_child: {
11800
  })( wp.customize , jQuery, _ );/* ------------------------------------------------------------------------- *
11801
  * HEADING MAIN CHILD
11802
  /* ------------------------------------------------------------------------- */
11803
+ //global sektionsLocalizedData, serverControlParams
11804
+ //extends api.CZRDynModule
11805
  ( function ( api, $, _ ) {
11806
+ //HEADING MODULE
11807
  var Constructor = {
11808
  initialize: function( id, options ) {
11809
  var module = this;
11810
+
11811
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
11812
  module.inputConstructor = api.CZRInput.extend( module.CZRHeadingInputMths || {} );
11813
+
11814
+
11815
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
11816
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
11817
+
11818
+ // run the parent initialize
11819
+ // Note : must be always invoked always after the input / item class extension
11820
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
11821
  api.CZRDynModule.prototype.initialize.call( module, id, options );
11822
+
11823
+ //SET THE CONTENT PICKER DEFAULT OPTIONS
11824
+ //@see ::setupContentPicker()
11825
  module.bind( 'set_default_content_picker_options', function( params ) {
11826
  params.defaultContentPickerOption.defaultOption = {
11827
  'title' : '<span style="font-weight:bold">' + sektionsLocalizedData.i18n['Set a custom url'] + '</span>',
11840
  api.czr_sektions.setupSelectInput.call( this );
11841
  }
11842
  },//CZRHeadingsInputMths
11843
+
11844
+ // _isChecked : function( v ) {
11845
+ // return 0 !== v && '0' !== v && false !== v && 'off' !== v;
11846
+ // },
11847
+ //////////////////////////////////////////////////////////
11848
+ /// ITEM CONSTRUCTOR
11849
+ //////////////////////////////////////////
11850
  CZRItemConstructor : {
11851
+ //overrides the parent ready
11852
  ready : function() {
11853
  var item = this;
11854
+ //wait for the input collection to be populated,
11855
+ //and then set the input visibility dependencies
11856
  item.inputCollection.bind( function( col ) {
11857
  if( _.isEmpty( col ) )
11858
  return;
11860
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
11861
  }
11862
  });//item.inputCollection.bind()
11863
+
11864
+ //fire the parent
11865
  api.CZRItem.prototype.ready.call( item );
11866
  },
11867
+
11868
+
11869
+ //Fired when the input collection is populated
11870
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
11871
  setInputVisibilityDeps : function() {
11872
  var item = this,
11873
  module = item.module;
11874
+
11875
+ //Internal item dependencies
11876
  item.czr_Input.each( function( input ) {
11877
  switch( input.id ) {
11878
  case 'link-to' :
11906
  }//setInputVisibilityDeps
11907
  },//CZRItemConstructor
11908
  };//Constructor
11909
+
11910
+
11911
+ //provides a description of each module
11912
+ //=> will determine :
11913
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
11914
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
11915
+ // , if crud, the item shall be removable
11916
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
11917
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
11918
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
11919
  api.czrModuleMap = api.czrModuleMap || {};
11920
  $.extend( api.czrModuleMap, {
11921
  czr_heading_child : {
11934
  * HEADING SPACING
11935
  /* ------------------------------------------------------------------------- */
11936
  ( function ( api, $, _ ) {
11937
+ //HEADING MODULE
11938
  var Constructor = {
11939
  initialize: function( id, options ) {
11940
  var module = this;
11941
+
11942
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
11943
  module.inputConstructor = api.CZRInput.extend( module.CZRHeadingInputMths || {} );
11944
+
11945
+
11946
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
11947
+ //module.itemConstructor = api.CZRItem.extend( module.CZRItemMethods || {} );
11948
+
11949
+ // run the parent initialize
11950
+ // Note : must be always invoked always after the input / item class extension
11951
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
11952
  api.CZRDynModule.prototype.initialize.call( module, id, options );
11953
  },//initialize
11954
 
11958
  }
11959
  },//CZRHeadingsInputMths
11960
  };//Constructor
11961
+
11962
+
11963
+ //provides a description of each module
11964
+ //=> will determine :
11965
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
11966
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
11967
+ // , if crud, the item shall be removable
11968
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
11969
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
11970
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
11971
  api.czrModuleMap = api.czrModuleMap || {};
11972
  $.extend( api.czrModuleMap, {
11973
  czr_heading_spacing_child : {
11981
  }
11982
  });
11983
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
11984
+ //extends api.CZRDynModule
11985
  ( function ( api, $, _ ) {
11986
+ //DIVIDER MODULE
11987
  var DividerModuleConstructor = {
11988
  initialize: function( id, options ) {
11989
+ //console.log('INITIALIZING IMAGE MODULE', id, options );
11990
  var module = this;
11991
+
11992
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
11993
  module.inputConstructor = api.CZRInput.extend( module.CZRDividerInputMths || {} );
11994
+
11995
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
11996
+ //module.itemConstructor = api.CZRItem.extend( module.CZRItemMethods || {} );
11997
+
11998
+ // run the parent initialize
11999
+ // Note : must be always invoked always after the input / item class extension
12000
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12001
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12002
  },//initialize
12003
 
12008
  }
12009
  },//CZRDividerInputMths
12010
  };//DividerModuleConstructor
12011
+
12012
+
12013
+
12014
+ //provides a description of each module
12015
+ //=> will determine :
12016
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12017
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12018
+ // , if crud, the item shall be removable
12019
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12020
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12021
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12022
  api.czrModuleMap = api.czrModuleMap || {};
12023
  $.extend( api.czrModuleMap, {
12024
  czr_divider_module : {
12032
  }
12033
  });
12034
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
12035
+ //extends api.CZRDynModule
12036
  ( function ( api, $, _ ) {
12037
+ //provides a description of each module
12038
+ //=> will determine :
12039
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12040
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12041
+ // , if crud, the item shall be removable
12042
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12043
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12044
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12045
  api.czrModuleMap = api.czrModuleMap || {};
12046
  $.extend( api.czrModuleMap, {
12047
  czr_spacer_module : {
12048
+ //mthds : ModuleConstructor,
12049
  crud : false,
12050
  name : api.czr_sektions.getRegisteredModuleProperty( 'czr_spacer_module', 'name' ),
12051
  has_mod_opt : false,
12055
  }
12056
  });
12057
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
12058
+ //extends api.CZRDynModule
12059
  ( function ( api, $, _ ) {
12060
+ //provides a description of each module
12061
+ //=> will determine :
12062
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12063
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12064
+ // , if crud, the item shall be removable
12065
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12066
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12067
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12068
  api.czrModuleMap = api.czrModuleMap || {};
12069
  $.extend( api.czrModuleMap, {
12070
  czr_map_module : {
12071
+ //mthds : ModuleConstructor,
12072
  crud : false,
12073
  name : api.czr_sektions.getRegisteredModuleProperty( 'czr_map_module', 'name' ),
12074
  has_mod_opt : false,
12078
  }
12079
  });
12080
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
12081
+ //extends api.CZRDynModule
12082
  /* ------------------------------------------------------------------------- *
12083
  * QUOTE DESIGN
12084
  /* ------------------------------------------------------------------------- */
12085
+ //global sektionsLocalizedData, serverControlParams
12086
+ //extends api.CZRDynModule
12087
  ( function ( api, $, _ ) {
12088
+ //BUTTON MODULE
12089
  var Constructor = {
12090
  initialize: function( id, options ) {
12091
  var module = this;
12092
+
12093
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
12094
  module.inputConstructor = api.CZRInput.extend({
12095
  setupSelect : function() {
12096
  api.czr_sektions.setupSelectInput.call( this );
12097
  }
12098
  });
12099
+
12100
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
12101
  module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
12102
+
12103
+ // run the parent initialize
12104
+ // Note : must be always invoked always after the input / item class extension
12105
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12106
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12107
 
12108
  },//initialize
12109
+
12110
+ //////////////////////////////////////////////////////////
12111
+ /// ITEM CONSTRUCTOR
12112
+ //////////////////////////////////////////
12113
  CZRButtonItemConstructor : {
12114
+ //overrides the parent ready
12115
  ready : function() {
12116
  var item = this;
12117
+ //wait for the input collection to be populated,
12118
+ //and then set the input visibility dependencies
12119
  item.inputCollection.bind( function( col ) {
12120
  if( _.isEmpty( col ) )
12121
  return;
12123
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
12124
  }
12125
  });//item.inputCollection.bind()
12126
+
12127
+ //fire the parent
12128
  api.CZRItem.prototype.ready.call( item );
12129
  },
12130
+
12131
+ //Fired when the input collection is populated
12132
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
12133
  setInputVisibilityDeps : function() {
12134
  var item = this,
12135
  module = item.module;
12136
+
12137
+ //Internal item dependencies
12138
  item.czr_Input.each( function( input ) {
12139
  switch( input.id ) {
12140
  case 'quote_design' :
12158
  }
12159
  }
12160
  };
12161
+ //provides a description of each module
12162
+ //=> will determine :
12163
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12164
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12165
+ // , if crud, the item shall be removable
12166
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12167
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12168
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12169
  api.czrModuleMap = api.czrModuleMap || {};
12170
  $.extend( api.czrModuleMap, {
12171
  czr_quote_design_child : {
12192
  /* ------------------------------------------------------------------------- *
12193
  * QUOTE CONTENT
12194
  /* ------------------------------------------------------------------------- */
12195
+ //global sektionsLocalizedData, serverControlParams
12196
+ //extends api.CZRDynModule
12197
  ( function ( api, $, _ ) {
12198
+ //BUTTON MODULE
12199
  var Constructor = {
12200
  initialize: function( id, options ) {
12201
  var module = this;
12202
+
12203
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
12204
  module.inputConstructor = api.CZRInput.extend({
12205
  setupSelect : function() {
12206
  api.czr_sektions.setupSelectInput.call( this );
12207
  }
12208
  });
12209
+
12210
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
12211
+ //module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
12212
+
12213
+ // run the parent initialize
12214
+ // Note : must be always invoked always after the input / item class extension
12215
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12216
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12217
 
12218
  },//initialize
12219
  };
12220
+ //provides a description of each module
12221
+ //=> will determine :
12222
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12223
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12224
+ // , if crud, the item shall be removable
12225
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12226
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12227
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12228
  api.czrModuleMap = api.czrModuleMap || {};
12229
  $.extend( api.czrModuleMap, {
12230
  czr_quote_quote_child : {
12247
  /* ------------------------------------------------------------------------- *
12248
  * CITE CONTENT
12249
  /* ------------------------------------------------------------------------- */
12250
+ //global sektionsLocalizedData, serverControlParams
12251
+ //extends api.CZRDynModule
12252
  ( function ( api, $, _ ) {
12253
+ //BUTTON MODULE
12254
  var Constructor = {
12255
  initialize: function( id, options ) {
12256
  var module = this;
12257
+
12258
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
12259
  module.inputConstructor = api.CZRInput.extend({
12260
  setupSelect : function() {
12261
  api.czr_sektions.setupSelectInput.call( this );
12262
  }
12263
  });
12264
+
12265
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
12266
+ //module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
12267
+
12268
+ // run the parent initialize
12269
+ // Note : must be always invoked always after the input / item class extension
12270
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12271
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12272
 
12273
  },//initialize
12274
  };
12275
+ //provides a description of each module
12276
+ //=> will determine :
12277
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12278
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12279
+ // , if crud, the item shall be removable
12280
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12281
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12282
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12283
  api.czrModuleMap = api.czrModuleMap || {};
12284
  $.extend( api.czrModuleMap, {
12285
  czr_quote_cite_child : {
12296
  /* ------------------------------------------------------------------------- *
12297
  * BUTTON CONTENT
12298
  /* ------------------------------------------------------------------------- */
12299
+ //global sektionsLocalizedData, serverControlParams
12300
+ //extends api.CZRDynModule
12301
  ( function ( api, $, _ ) {
12302
+ //BUTTON MODULE
12303
  var Constructor = {
12304
  initialize: function( id, options ) {
12305
  var module = this;
12306
+
12307
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
12308
  module.inputConstructor = api.CZRInput.extend({
12309
  setupSelect : function() {
12310
  api.czr_sektions.setupSelectInput.call( this );
12311
  }
12312
  });
12313
+
12314
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
12315
  module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
12316
+
12317
+ //SET THE CONTENT PICKER DEFAULT OPTIONS
12318
+ //@see ::setupContentPicker()
12319
  module.bind( 'set_default_content_picker_options', function( params ) {
12320
  params.defaultContentPickerOption.defaultOption = {
12321
  'title' : '<span style="font-weight:bold">' + sektionsLocalizedData.i18n['Set a custom url'] + '</span>',
12327
  };
12328
  return params;
12329
  });
12330
+
12331
+ // run the parent initialize
12332
+ // Note : must be always invoked always after the input / item class extension
12333
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12334
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12335
 
12336
  },//initialize
12337
+
12338
+ //////////////////////////////////////////////////////////
12339
+ /// ITEM CONSTRUCTOR
12340
+ //////////////////////////////////////////
12341
  CZRButtonItemConstructor : {
12342
+ //overrides the parent ready
12343
  ready : function() {
12344
  var item = this;
12345
+ //wait for the input collection to be populated,
12346
+ //and then set the input visibility dependencies
12347
  item.inputCollection.bind( function( col ) {
12348
  if( _.isEmpty( col ) )
12349
  return;
12351
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
12352
  }
12353
  });//item.inputCollection.bind()
12354
+
12355
+ //fire the parent
12356
  api.CZRItem.prototype.ready.call( item );
12357
  },
12358
+
12359
+ //Fired when the input collection is populated
12360
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
12361
  setInputVisibilityDeps : function() {
12362
  var item = this,
12363
  module = item.module;
12364
+
12365
+ //Internal item dependencies
12366
  item.czr_Input.each( function( input ) {
12367
  switch( input.id ) {
12368
  case 'link-to' :
12398
  }
12399
  }
12400
  };
12401
+ //provides a description of each module
12402
+ //=> will determine :
12403
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12404
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12405
+ // , if crud, the item shall be removable
12406
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12407
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12408
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12409
  api.czrModuleMap = api.czrModuleMap || {};
12410
  $.extend( api.czrModuleMap, {
12411
  czr_btn_content_child : {
12432
  /* ------------------------------------------------------------------------- *
12433
  * BUTTON DESIGN
12434
  /* ------------------------------------------------------------------------- */
12435
+ //global sektionsLocalizedData, serverControlParams
12436
+ //extends api.CZRDynModule
12437
  ( function ( api, $, _ ) {
12438
+ //BUTTON MODULE
12439
  var Constructor = {
12440
  initialize: function( id, options ) {
12441
  var module = this;
12442
+
12443
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
12444
  module.inputConstructor = api.CZRInput.extend({
12445
  setupSelect : function() {
12446
  api.czr_sektions.setupSelectInput.call( this );
12447
  }
12448
  });
12449
+
12450
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
12451
  module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
12452
+
12453
+ // run the parent initialize
12454
+ // Note : must be always invoked always after the input / item class extension
12455
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12456
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12457
 
12458
  },//initialize
12459
+
12460
+ //////////////////////////////////////////////////////////
12461
+ /// ITEM CONSTRUCTOR
12462
+ //////////////////////////////////////////
12463
  CZRButtonItemConstructor : {
12464
+ //overrides the parent ready
12465
  ready : function() {
12466
  var item = this;
12467
+ //wait for the input collection to be populated,
12468
+ //and then set the input visibility dependencies
12469
  item.inputCollection.bind( function( col ) {
12470
  if( _.isEmpty( col ) )
12471
  return;
12473
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
12474
  }
12475
  });//item.inputCollection.bind()
12476
+
12477
+ //fire the parent
12478
  api.CZRItem.prototype.ready.call( item );
12479
  },
12480
+
12481
+ //Fired when the input collection is populated
12482
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
12483
  setInputVisibilityDeps : function() {
12484
  var item = this,
12485
  module = item.module;
12486
+ // input controller instance == this
12487
  var scheduleVisibilityOfInputId = function( controlledInputId, visibilityCallBack ) {
12488
+ //Fire on init
12489
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
12490
+ //React on change
12491
  this.bind( function( to ) {
12492
  item.czr_Input( controlledInputId ).visible( visibilityCallBack() );
12493
  });
12494
  };
12495
+ //Internal item dependencies
12496
  item.czr_Input.each( function( input ) {
12497
  switch( input.id ) {
12498
  case 'use_custom_bg_color_on_hover' :
12527
  }
12528
  }
12529
  };
12530
+ //provides a description of each module
12531
+ //=> will determine :
12532
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12533
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12534
+ // , if crud, the item shall be removable
12535
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12536
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12537
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12538
  api.czrModuleMap = api.czrModuleMap || {};
12539
  $.extend( api.czrModuleMap, {
12540
  czr_btn_design_child : {
12550
  })( wp.customize , jQuery, _ );/* ------------------------------------------------------------------------- *
12551
  * MENU CONTENT
12552
  /* ------------------------------------------------------------------------- */
12553
+ //global sektionsLocalizedData, serverControlParams
12554
+ //extends api.CZRDynModule
12555
  ( function ( api, $, _ ) {
12556
  var Constructor = {
12557
  initialize: function( id, options ) {
12558
  var module = this;
12559
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
12560
  module.inputConstructor = api.CZRInput.extend({
12561
  setupSelect : function() {
12562
  api.czr_sektions.setupSelectInput.call( this );
12563
  }
12564
  });
12565
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
12566
+ //module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
12567
+ // run the parent initialize
12568
+ // Note : must be always invoked always after the input / item class extension
12569
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12570
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12571
  },//initialize
12572
+ };// Constructor
12573
+ //provides a description of each module
12574
+ //=> will determine :
12575
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12576
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12577
+ // , if crud, the item shall be removable
12578
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12579
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12580
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
 
 
 
 
 
 
 
 
 
 
 
 
 
12581
  api.czrModuleMap = api.czrModuleMap || {};
12582
  $.extend( api.czrModuleMap, {
12583
  czr_menu_content_child : {
12590
  defaultItemModel : api.czr_sektions.getDefaultItemModelFromRegisteredModuleData( 'czr_menu_content_child' )
12591
  }
12592
  });
12593
+ })( wp.customize , jQuery, _ );
12594
+
12595
+
12596
+ /* ------------------------------------------------------------------------- *
12597
+ * MENU OPTIONS FOR MOBILE DEVICES
12598
+ /* ------------------------------------------------------------------------- */
12599
+ //global sektionsLocalizedData, serverControlParams
12600
+ //extends api.CZRDynModule
12601
+ ( function ( api, $, _ ) {
12602
+ //provides a description of each module
12603
+ //=> will determine :
12604
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12605
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12606
+ // , if crud, the item shall be removable
12607
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12608
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12609
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12610
+ api.czrModuleMap = api.czrModuleMap || {};
12611
+ $.extend( api.czrModuleMap, {
12612
+ czr_menu_mobile_options : {
12613
+ //mthds : Constructor,
12614
+ crud : false,
12615
+ name : api.czr_sektions.getRegisteredModuleProperty( 'czr_menu_mobile_options', 'name' ),
12616
+ has_mod_opt : false,
12617
+ ready_on_section_expanded : true,
12618
+ ready_on_control_event : 'sek-accordion-expanded',// triggered in ::scheduleModuleAccordion()
12619
+ defaultItemModel : api.czr_sektions.getDefaultItemModelFromRegisteredModuleData( 'czr_menu_mobile_options' )
12620
+ }
12621
+ });
12622
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
12623
+ //extends api.CZRDynModule
12624
  ( function ( api, $, _ ) {
12625
+ //BUTTON MODULE
12626
  var Constructor = {
12627
  initialize: function( id, options ) {
12628
  var module = this;
12629
+
12630
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
12631
  module.inputConstructor = api.CZRInput.extend({
12632
  setupSelect : function() {
12633
  api.czr_sektions.setupSelectInput.call( this );
12634
  }
12635
  });
12636
+
12637
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
12638
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
12639
+
12640
+ // run the parent initialize
12641
+ // Note : must be always invoked always after the input / item class extension
12642
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12643
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12644
 
12645
  },//initialize
12646
+
12647
+ //////////////////////////////////////////////////////////
12648
+ /// ITEM CONSTRUCTOR
12649
+ //////////////////////////////////////////
12650
  CZRItemConstructor : {
12651
+ //overrides the parent ready
12652
  ready : function() {
12653
  var item = this;
12654
+ //wait for the input collection to be populated,
12655
+ //and then set the input visibility dependencies
12656
  item.inputCollection.bind( function( col ) {
12657
  if( _.isEmpty( col ) )
12658
  return;
12660
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
12661
  }
12662
  });//item.inputCollection.bind()
12663
+
12664
+ //fire the parent
12665
  api.CZRItem.prototype.ready.call( item );
12666
  },
12667
+
12668
+ //Fired when the input collection is populated
12669
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
12670
  setInputVisibilityDeps : function() {
12671
  var item = this,
12672
  module = item.module;
12673
+
12674
+ //Internal item dependencies
12675
  item.czr_Input.each( function( input ) {
12676
  switch( input.id ) {
12677
  case 'show_name_field' :
12713
  }
12714
  }
12715
  };
12716
+ //provides a description of each module
12717
+ //=> will determine :
12718
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12719
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12720
+ // , if crud, the item shall be removable
12721
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12722
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12723
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12724
  api.czrModuleMap = api.czrModuleMap || {};
12725
  $.extend( api.czrModuleMap, {
12726
  czr_simple_form_fields_child: {
12734
  }
12735
  });
12736
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
12737
+ //extends api.CZRDynModule
12738
  ( function ( api, $, _ ) {
12739
+ //BUTTON MODULE
12740
  var Constructor = {
12741
  initialize: function( id, options ) {
12742
  var module = this;
12743
+
12744
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
12745
  module.inputConstructor = api.CZRInput.extend({
12746
  setupSelect : function() {
12747
  api.czr_sektions.setupSelectInput.call( this );
12748
  }
12749
  });
12750
+
12751
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
12752
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
12753
+
12754
+ // run the parent initialize
12755
+ // Note : must be always invoked always after the input / item class extension
12756
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12757
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12758
 
12759
  },//initialize
12760
+
12761
+ //////////////////////////////////////////////////////////
12762
+ /// ITEM CONSTRUCTOR
12763
+ //////////////////////////////////////////
12764
  CZRItemConstructor : {
12765
+ //overrides the parent ready
12766
  ready : function() {
12767
  var item = this;
12768
+ //wait for the input collection to be populated,
12769
+ //and then set the input visibility dependencies
12770
  item.inputCollection.bind( function( col ) {
12771
  if( _.isEmpty( col ) )
12772
  return;
12774
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
12775
  }
12776
  });//item.inputCollection.bind()
12777
+
12778
+ //fire the parent
12779
  api.CZRItem.prototype.ready.call( item );
12780
  },
12781
+
12782
+ //Fired when the input collection is populated
12783
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
12784
  setInputVisibilityDeps : function() {
12785
  var item = this,
12786
  module = item.module;
12787
+ //Internal item dependencies
12788
  item.czr_Input.each( function( input ) {
12789
  switch( input.id ) {
12790
  case 'border-type' :
12801
  }
12802
  }
12803
  };
12804
+ //provides a description of each module
12805
+ //=> will determine :
12806
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12807
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12808
+ // , if crud, the item shall be removable
12809
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12810
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12811
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12812
  api.czrModuleMap = api.czrModuleMap || {};
12813
  $.extend( api.czrModuleMap, {
12814
  czr_simple_form_design_child: {
12822
  }
12823
  });
12824
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
12825
+ //extends api.CZRDynModule
12826
  ( function ( api, $, _ ) {
12827
+ //BUTTON MODULE
12828
  var Constructor = {
12829
  initialize: function( id, options ) {
12830
  var module = this;
12831
+
12832
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
12833
  module.inputConstructor = api.CZRInput.extend({
12834
  setupSelect : function() {
12835
  api.czr_sektions.setupSelectInput.call( this );
12836
  }
12837
  });
12838
+
12839
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
12840
  module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
12841
+
12842
+ // run the parent initialize
12843
+ // Note : must be always invoked always after the input / item class extension
12844
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12845
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12846
 
12847
  },//initialize
12848
+
12849
+ //////////////////////////////////////////////////////////
12850
+ /// ITEM CONSTRUCTOR
12851
+ //////////////////////////////////////////
12852
  CZRItemConstructor : {
12853
+ //overrides the parent ready
12854
  ready : function() {
12855
  var item = this;
12856
+ //wait for the input collection to be populated,
12857
+ //and then set the input visibility dependencies
12858
  item.inputCollection.bind( function( col ) {
12859
  if( _.isEmpty( col ) )
12860
  return;
12862
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
12863
  }
12864
  });//item.inputCollection.bind()
12865
+
12866
+ //fire the parent
12867
  api.CZRItem.prototype.ready.call( item );
12868
  },
12869
+
12870
+ //Fired when the input collection is populated
12871
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
12872
  setInputVisibilityDeps : function() {
12873
  var item = this,
12874
  module = item.module;
12875
+ //Internal item dependencies
12876
  item.czr_Input.each( function( input ) {
12877
  switch( input.id ) {
12878
  case 'use_custom_bg_color_on_hover' :
12907
  }
12908
  }
12909
  };
12910
+ //provides a description of each module
12911
+ //=> will determine :
12912
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12913
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12914
+ // , if crud, the item shall be removable
12915
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12916
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12917
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12918
  api.czrModuleMap = api.czrModuleMap || {};
12919
  $.extend( api.czrModuleMap, {
12920
  czr_simple_form_button_child: {
12928
  }
12929
  });
12930
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
12931
+ //extends api.CZRDynModule
12932
  ( function ( api, $, _ ) {
12933
+ //BUTTON MODULE
12934
  var Constructor = {
12935
  initialize: function( id, options ) {
12936
  var module = this;
12937
+
12938
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
12939
  module.inputConstructor = api.CZRInput.extend({
12940
  setupSelect : function() {
12941
  api.czr_sektions.setupSelectInput.call( this );
12942
  }
12943
  });
12944
+
12945
+ // run the parent initialize
12946
+ // Note : must be always invoked always after the input / item class extension
12947
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12948
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12949
 
12950
  },//initialize
12951
  };
12952
+ //provides a description of each module
12953
+ //=> will determine :
12954
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
12955
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
12956
+ // , if crud, the item shall be removable
12957
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
12958
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
12959
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
12960
  api.czrModuleMap = api.czrModuleMap || {};
12961
  $.extend( api.czrModuleMap, {
12962
  czr_simple_form_fonts_child: {
12970
  }
12971
  });
12972
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
12973
+ //extends api.CZRDynModule
12974
  ( function ( api, $, _ ) {
12975
  var Constructor = {
12976
  initialize: function( id, options ) {
12977
  var module = this;
12978
+ // EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
12979
  module.inputConstructor = api.CZRInput.extend({
12980
  setupSelect : function() {
12981
  api.czr_sektions.setupSelectInput.call( this );
12982
  }
12983
  });
12984
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
12985
+ // module.itemConstructor = api.CZRItem.extend( module.CZRItemConstructor || {} );
12986
+
12987
+ // run the parent initialize
12988
+ // Note : must be always invoked always after the input / item class extension
12989
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
12990
  api.CZRDynModule.prototype.initialize.call( module, id, options );
12991
 
12992
  },//initialize
12993
+
12994
+ //////////////////////////////////////////////////////////
12995
+ /// ITEM CONSTRUCTOR
12996
+ //////////////////////////////////////////
12997
+ // CZRItemConstructor : {
12998
+ // //overrides the parent ready
12999
+ // ready : function() {
13000
+ // var item = this;
13001
+ // //wait for the input collection to be populated,
13002
+ // //and then set the input visibility dependencies
13003
+ // item.inputCollection.bind( function( col ) {
13004
+ // if( _.isEmpty( col ) )
13005
+ // return;
13006
+ // try { item.setInputVisibilityDeps(); } catch( er ) {
13007
+ // api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
13008
+ // }
13009
+ // });//item.inputCollection.bind()
13010
+
13011
+ // //fire the parent
13012
+ // api.CZRItem.prototype.ready.call( item );
13013
+ // },
13014
+
13015
+ // //Fired when the input collection is populated
13016
+ // //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
13017
+ // setInputVisibilityDeps : function() {
13018
+ // var item = this,
13019
+ // module = item.module;
13020
+ // //Internal item dependencies
13021
+ // item.czr_Input.each( function( input ) {
13022
+ // switch( input.id ) {
13023
+ // case 'recaptcha_enabled' :
13024
+ // _.each( [ 'recaptcha_badge' ] , function( _inputId_ ) {
13025
+ // try { api.czr_sektions.scheduleVisibilityOfInputId.call( input, _inputId_, function() {
13026
+ // return 'inherit' === input();
13027
+ // }); } catch( er ) {
13028
+ // api.errare( input.module.module_type + ' => error in setInputVisibilityDeps', er );
13029
+ // }
13030
+ // });
13031
+ // break;
13032
+ // }
13033
+ // });
13034
+ // }
13035
+ // }
13036
  };
13037
+ //provides a description of each module
13038
+ //=> will determine :
13039
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
13040
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
13041
+ // , if crud, the item shall be removable
13042
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
13043
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
13044
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
13045
  api.czrModuleMap = api.czrModuleMap || {};
13046
  $.extend( api.czrModuleMap, {
13047
  czr_simple_form_submission_child: {
13055
  }
13056
  });
13057
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
13058
+ //extends api.CZRDynModule
13059
  ( function ( api, $, _ ) {
13060
+ //BUTTON MODULE
13061
  var Constructor = {
13062
  initialize: function( id, options ) {
13063
  var module = this;
13064
+
13065
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
13066
  module.inputConstructor = api.CZRInput.extend({
13067
  setupSelect : function() {
13068
  api.czr_sektions.setupSelectInput.call( this );
13069
  }
13070
  });
13071
+
13072
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR MONOMODEL
13073
  module.itemConstructor = api.CZRItem.extend( module.CZRButtonItemConstructor || {} );
13074
+
13075
+ // run the parent initialize
13076
+ // Note : must be always invoked always after the input / item class extension
13077
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
13078
  api.CZRDynModule.prototype.initialize.call( module, id, options );
13079
 
13080
  },//initialize
13081
+
13082
+ //////////////////////////////////////////////////////////
13083
+ /// ITEM CONSTRUCTOR
13084
+ //////////////////////////////////////////
13085
  CZRButtonItemConstructor : {
13086
+ //overrides the parent ready
13087
  ready : function() {
13088
  var item = this;
13089
+ //wait for the input collection to be populated,
13090
+ //and then set the input visibility dependencies
13091
  item.inputCollection.bind( function( col ) {
13092
  if( _.isEmpty( col ) )
13093
  return;
13095
  api.errorLog( 'item.setInputVisibilityDeps() : ' + er );
13096
  }
13097
  });//item.inputCollection.bind()
13098
+
13099
+ //fire the parent
13100
  api.CZRItem.prototype.ready.call( item );
13101
  },
13102
+
13103
+ //Fired when the input collection is populated
13104
+ //At this point, the inputs are all ready (input.isReady.state() === 'resolved') and we can use their visible Value ( set to true by default )
13105
  setInputVisibilityDeps : function() {
13106
  var item = this,
13107
  module = item.module;
13108
+
13109
+ //Internal item dependencies
13110
  item.czr_Input.each( function( input ) {
13111
  switch( input.id ) {
13112
  case 'use_custom_bg_color_on_hover' :
13155
  }
13156
  }
13157
  };
13158
+ //provides a description of each module
13159
+ //=> will determine :
13160
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
13161
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
13162
+ // , if crud, the item shall be removable
13163
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
13164
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
13165
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
13166
  api.czrModuleMap = api.czrModuleMap || {};
13167
  $.extend( api.czrModuleMap, {
13168
  czr_font_child : {
13176
  }
13177
  });
13178
  })( wp.customize , jQuery, _ );//global sektionsLocalizedData, serverControlParams
13179
+ //extends api.CZRDynModule
13180
  ( function ( api, $, _ ) {
13181
+ //BUTTON MODULE
13182
  var Constructor = {
13183
  initialize: function( id, options ) {
13184
  var module = this;
13185
+
13186
+ //EXTEND THE DEFAULT CONSTRUCTORS FOR INPUT
13187
  module.inputConstructor = api.CZRInput.extend({
13188
  setupSelect : function() {
13189
  api.czr_sektions.setupSelectInput.call( this, sektionsLocalizedData.registeredWidgetZones );
13190
  }
13191
  });
13192
+
13193
+ // run the parent initialize
13194
+ // Note : must be always invoked always after the input / item class extension
13195
+ // Otherwise the constructor might be extended too early and not taken into account. @see https://github.com/presscustomizr/nimble-builder/issues/37
13196
  api.CZRDynModule.prototype.initialize.call( module, id, options );
13197
 
13198
  },//initialize
13199
  };
13200
+ //provides a description of each module
13201
+ //=> will determine :
13202
+ //1) how to initialize the module model. If not crud, then the initial item(s) model shall be provided
13203
+ //2) which js template(s) to use : if crud, the module template shall include the add new and pre-item elements.
13204
+ // , if crud, the item shall be removable
13205
+ //3) how to render : if multi item, the item content is rendered when user click on edit button.
13206
+ // If not multi item, the single item content is rendered as soon as the item wrapper is rendered.
13207
+ //4) some DOM behaviour. For example, a multi item shall be sortable.
13208
  api.czrModuleMap = api.czrModuleMap || {};
13209
  $.extend( api.czrModuleMap, {
13210
  czr_widget_area_module : {
assets/czr/sek/js/ccat-sek-control.min.js CHANGED
@@ -1 +1 @@
1
- var CZRSeksPrototype=CZRSeksPrototype||{};!function(r,s){s.extend(CZRSeksPrototype,{initialize:function(){var e=this;if(_.isUndefined(window.sektionsLocalizedData))throw new Error("CZRSeksPrototype => missing localized server params sektionsLocalizedData");if(!_.isFunction(r.czr_activeSkopes))throw new Error("CZRSeksPrototype => api.czr_activeSkopes");e.SECTION_ID_FOR_GLOBAL_OPTIONS="__globalOptionsSectionId",e.SECTION_ID_FOR_LOCAL_OPTIONS="__localOptionsSection",e.SECTION_ID_FOR_CONTENT_PICKER="__content_picker__",e.MAX_NUMBER_OF_COLUMNS=12,e.SETTING_UPDATE_BUFFER=100,e.defaultLocalSektionSettingValue=e.getDefaultSektionSettingValue("local"),e.localSectionsSettingId=new r.Value({}),e.registered=new r.Value([]),r.bind("ready",function(){e.doSektionThinksOnApiReady()}),r.bind("save-request-params",function(e){s.extend(e,{local_skope_id:r.czr_skopeBase.getSkopeProperty("skope_id")})})},doSektionThinksOnApiReady:function(){var o=this;o.registerAndSetupDefaultPanelSectionOptions(),o.localSectionsSettingId.callbacks.add(function(e,t){try{o.setupSettingsToBeSaved()}catch(e){r.errare("Error in self.localSectionsSettingId.callbacks => self.setupSettingsToBeSaved()",e)}o.initializeHistoryLogWhenSettingsRegistered()});var i=function(e,t){o.setContextualCollectionSettingIdWhenSkopeSet(e,t),r.section(o.SECTION_ID_FOR_LOCAL_OPTIONS,function(e){e.deferred.embedded.done(function(){!0!==e.boundForLocalOptionGeneration&&(e.boundForLocalOptionGeneration=!0,e.expanded.bind(function(e){!0===e&&o.generateUI({action:"sek-generate-local-skope-options-ui"})}))})}),r.section(o.SECTION_ID_FOR_GLOBAL_OPTIONS,function(e){!0!==e.nimbleGlobalOptionGenerated&&(o.generateUI({action:"sek-generate-global-options-ui"}),e.nimbleGlobalOptionGenerated=!0)}),r.trigger("nimble-ready-for-current-skope")};_.isEmpty(r.czr_activeSkopes().local)||i(),r.czr_activeSkopes.callbacks.add(function(e,t){i(e,t)}),o.reactToPreviewMsg(),o.setupDnd(),o.setupTinyMceEditor(),o.schedulePrintSectionJson(),o.bind("sek-ui-removed",function(){r.previewedDevice("desktop")}),r.previewedDevice.bind(function(t){var e=_.filter(o.registered(),function(e){return"control"==e.what});_.each(e||[],function(e){r.control(e.id,function(e){e.container.find('[data-sek-device="'+t+'"]').each(function(){s(this).trigger("click")})})})}),s("#customize-notifications-area").on("click",'[data-sek-reset="true"]',function(){o.resetCollectionSetting()}),o.bind("sek-ui-pre-removal",function(e){"control"==e.what&&-1<e.id.indexOf("draggable")&&r.control(e.id,function(e){e.container.find("[draggable]").each(function(){s(this).off("dragstart dragend")})}),"control"==e.what&&r.control(e.id,function(e){e.container.find("select").each(function(){_.isUndefined(s(this).data("czrSelect2"))||s(this).czrSelect2("destroy")})})}),r.bind("czr-new-registered",function(e){if(_.isUndefined(e.origin))throw new Error("czr-new-registered event => missing params.origin");if("nimble"===e.origin&&!1!==e.track){var t=o.registered(),i=s.extend(!0,[],t),n=_.findWhere(i,{id:e.id});if(!_.isEmpty(n)&&_.isEqual(n,e))throw new Error("register => duplicated element in self.registered() collection "+e.id);i.push(e),o.registered(i)}}),o.setupTopBar(),sektionsLocalizedData.isSavedSectionEnabled&&o.setupSaveUI(),o.lastClickedTargetInPreview=new r.Value,o.lastClickedTargetInPreview.bind(function(e,t){_.isObject(e)&&e.id?r.previewer.send("sek-set-double-click-target",e):r.previewer.send("sek-reset-double-click-target"),clearTimeout(s(window).data("_preview_target_timer_")),s(window).data("_preview_target_timer_",setTimeout(function(){o.lastClickedTargetInPreview({}),r.previewer.send("sek-reset-double-click-target")},2e4))}),r.previewer.bind("sek-clean-target-drop-zone",function(){o.lastClickedTargetInPreview({})}),s(document).keydown(function(e){e&&27===e.keyCode&&o.lastClickedTargetInPreview({})})},registerAndSetupDefaultPanelSectionOptions:function(){var n=this,e=r.Panel.extend({isContextuallyActive:function(){return this.active()},_toggleActive:function(){return!0}});r.panel(sektionsLocalizedData.sektionsPanelId,function(n){n.deferred.embedded.done(function(){var e=n.container.find("h3.accordion-section-title"),t=(n.container.find(".panel-meta .accordion-section-title"),['<img class="sek-nimble-logo" alt="'+n.params.title+'" src="',sektionsLocalizedData.baseUrl,"/assets/img/nimble/nimble_horizontal.svg?ver="+sektionsLocalizedData.nimbleVersion,'"/>'].join(""));if(0<e.length){var i=e.find("span");e.addClass("sek-side-nimble-logo-wrapper").html(t).append(i)}})}),r.CZR_Helpers.register({origin:"nimble",what:"panel",id:sektionsLocalizedData.sektionsPanelId,title:sektionsLocalizedData.i18n["Nimble Builder"],priority:-1e3,constructWith:e,track:!1}),r.CZR_Helpers.register({origin:"nimble",what:"section",id:n.SECTION_ID_FOR_GLOBAL_OPTIONS,title:sektionsLocalizedData.i18n["Site wide options"],panel:sektionsLocalizedData.sektionsPanelId,priority:20,track:!1,constructWith:r.Section.extend({isContextuallyActive:function(){return this.active()},_toggleActive:function(){return!0}})}).done(function(){r.section(n.SECTION_ID_FOR_GLOBAL_OPTIONS,function(e){var t=e.container.find(".accordion-section-title"),i=e.container.find(".customize-section-title h3");0<t.length&&t.prepend('<i class="fas fa-globe sek-level-option-icon"></i>'),0<i.length&&i.find(".customize-action").after('<i class="fas fa-globe sek-level-option-icon"></i>'),n.scheduleModuleAccordion.call(e)})}),r.CZR_Helpers.register({origin:"nimble",what:"section",id:n.SECTION_ID_FOR_LOCAL_OPTIONS,title:sektionsLocalizedData.i18n["Current page options"],panel:sektionsLocalizedData.sektionsPanelId,priority:10,track:!1,constructWith:r.Section.extend({isContextuallyActive:function(){return this.active()},_toggleActive:function(){return!0}})}).done(function(){r.section(n.SECTION_ID_FOR_LOCAL_OPTIONS,function(e){var t=e.container.find(".accordion-section-title"),i=e.container.find(".customize-section-title h3");0<t.length&&t.prepend('<i class="fas fa-map-marker-alt sek-level-option-icon"></i>'),0<i.length&&i.find(".customize-action").after('<i class="fas fa-map-marker-alt sek-level-option-icon"></i>'),n.scheduleModuleAccordion.call(e)})}),r.CZR_Helpers.register({origin:"nimble",what:"setting",id:sektionsLocalizedData.optNameForGlobalOptions,dirty:!1,value:sektionsLocalizedData.globalOptionDBValues,transport:"refresh",type:"option"}),r.CZR_Helpers.register({origin:"nimble",what:"section",id:n.SECTION_ID_FOR_CONTENT_PICKER,title:sektionsLocalizedData.i18n["Content Picker"],panel:sektionsLocalizedData.sektionsPanelId,priority:30,track:!1,constructWith:r.Section.extend({isContextuallyActive:function(){return this.active()},_toggleActive:function(){return!0}})}).done(function(){r.section(n.SECTION_ID_FOR_CONTENT_PICKER,function(e){"resolved"!=r.czr_initialSkopeCollectionPopulated.state()?r.czr_initialSkopeCollectionPopulated.done(function(){r.previewer.trigger("sek-pick-content",{focus:!1})}):r.previewer.trigger("sek-pick-content",{focus:!1})})})},setContextualCollectionSettingIdWhenSkopeSet:function(e,t){t=t||{},!_.isEmpty(t.local)&&r.panel(sektionsLocalizedData.sektionsPanelId).expanded()&&r.previewer.trigger("sek-pick-content"),sektionsData=r.czr_skopeBase.getSkopeProperty("sektions","local"),sektionsLocalizedData.isDevMode&&r.infoLog("::setContextualCollectionSettingIdWhenSkopeSet => SEKTIONS DATA ? ",sektionsData),_.isEmpty(sektionsData)&&r.errare("::setContextualCollectionSettingIdWhenSkopeSet() => no sektionsData"),_.isEmpty(sektionsData.setting_id)&&r.errare("::setContextualCollectionSettingIdWhenSkopeSet() => missing setting_id"),this.localSectionsSettingId(sektionsData.setting_id)}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(o,r){r.extend(CZRSeksPrototype,{setupTopBar:function(){var t=this;t.topBarId="#nimble-top-bar",t.topBarVisible=new o.Value(!1),t.topBarVisible.bind(function(e){t.levelTreeExpanded()||t.toggleTopBar(e)}),t.mouseMovedRecently=new o.Value({}),t.mouseMovedRecently.bind(function(e){t.topBarVisible(!_.isEmpty(e))});var e=function(e){t.mouseMovedRecently({x:e.clientX,y:e.clientY}),clearTimeout(r(window).data("_scroll_move_timer_")),r(window).data("_scroll_move_timer_",setTimeout(function(){t.mouseMovedRecently.set({})},4e3))};r(window).on("mousemove scroll,",_.throttle(e,50)),o.previewer.bind("ready",function(){r(o.previewer.targetWindow().document).on("mousemove scroll,",_.throttle(e,50))}),t.setupLevelTree()},toggleTopBar:function(e){e=!!_.isUndefined(e)||e;var t,i=this;e?r.when(i.renderAndSetupTopBarTmpl({})).done(function(e){i.topBarContainer=e,_.delay(function(){r("body").addClass("nimble-top-bar-visible")},200)}):(t=r.Deferred(),r("body").removeClass("nimble-top-bar-visible"),i.topBarContainer&&i.topBarContainer.length?_.delay(function(){t.resolve()},300):t.resolve(),t.promise()).done(function(){i.topBarVisible(!1)})},renderAndSetupTopBarTmpl:function(e){var t=this;if(0<r(t.topBarId).length)return r(t.topBarId);try{_tmpl=wp.template("nimble-top-bar")({})}catch(e){return o.errare("Error when parsing the the top note template",e),!1}r("#customize-preview").after(r(_tmpl)),r(document).keydown(function(e){if(e.ctrlKey&&_.contains([89,90],e.keyCode))try{t.navigateHistory(90===e.keyCode?"undo":"redo")}catch(e){o.errare("Error when firing self.navigateHistory",e)}}),r(".sek-add-content",t.topBarId).on("click",function(e){e.preventDefault(),o.previewer.trigger("sek-pick-content",{content_type:"module"})}),r(".sek-level-tree",t.topBarId).on("click",function(e){e.preventDefault(),t.levelTreeExpanded(!t.levelTreeExpanded())}),r("[data-nimble-history]",t.topBarId).on("click",function(e){try{t.navigateHistory(r(this).data("nimble-history"))}catch(e){o.errare("Error when firing self.navigateHistory",e)}}),r(".sek-settings",t.topBarId).on("click",function(e){o.panel(sektionsLocalizedData.sektionsPanelId,function(e){t.rootPanelFocus(),e.focus()})}),r(".sek-nimble-doc",t.topBarId).on("click",function(e){e.preventDefault(),window.open(r(this).data("doc-href"),"_blank")});var n=function(e){r(t.topBarId).length<1||(_.isObject(e)&&e.local_template&&"default"!==e.local_template?r(t.topBarId).find(".sek-notifications").html(['<span class="fas fa-info-circle"></span>',sektionsLocalizedData.i18n["This page uses a custom template."]].join(" ")):r(t.topBarId).find(".sek-notifications").html(""))},i=function(){o(t.localSectionsSettingId(),function(e){var t=e(),i=_.isObject(t)&&t.local_options&&t.local_options.template?t.local_options.template:null;n(i)}),o(t.getLocalSkopeOptionId()+"__template",function(e){e.bind(function(e,t){n(e)})})};return i(),o.bind("nimble-ready-for-current-skope",function(){i()}),r(t.topBarId)}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(l,d){d.extend(CZRSeksPrototype,{navigateHistory:function(i){var t,n,o,r,e=this,s=d.extend(!0,[],e.historyLog()),a=[];if(_.each(s,function(e){if(_.isEmpty(r)){switch(e.status){case"previous":t=e;break;case"current":n=e;break;case"future":o=e}switch(i){case"undo":_.isEmpty(n)||_.isEmpty(t)||(r=t.value,n.sektionToRefresh,t.sektionToRefresh);break;case"redo":_.isEmpty(o)||(r=o.value,n.sektionToRefresh,o.sektionToRefresh)}}}),!_.isUndefined(r)){_.isEmpty(r.local)||l(e.localSectionsSettingId())(e.validateSettingValue(r.local),{navigatingHistoryLogs:!0}),_.isEmpty(r.global)||l(e.getGlobalSectionsSettingId())(e.validateSettingValue(r.global),{navigatingHistoryLogs:!0});l.previewer.refresh(),l.previewer.trigger("sek-pick-content",{}),e.cleanRegistered(),e.cleanRegisteredLevelSettingsAfterHistoryNavigation()}var c=_.findKey(s,{status:"current"});c=Number(c),_.isNumber(c)?(_.each(s,function(e,t){switch(newLog=d.extend(!0,{},e),t=Number(t),i){case"undo":0<c&&(t===c-1?newLog.status="current":t===c&&(newLog.status="future"));break;case"redo":s.length>c+1&&(t===c?newLog.status="previous":t===c+1&&(newLog.status="current"))}a.push(newLog)}),e.historyLog(a)):l.errare("Error when navigating the history log, the current key should be a number")}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(o,n){n.extend(CZRSeksPrototype,{setupLevelTree:function(){var i=this;i.levelTree=new o.Value([]),i.levelTree.bind(function(e){i.levelTreeExpanded()&&i.renderOrRefreshTree()}),i.levelTreeExpanded=new o.Value(!1),i.levelTreeExpanded.bind(function(e){if(n("body").toggleClass("sek-level-tree-expanded",e),e){if(i.setLevelTreeValue(),_.isEmpty(i.levelTree()))return o.previewer.trigger("sek-notify",{type:"info",duration:1e4,message:['<span style="font-size:0.95em">',"<strong>"+sektionsLocalizedData.i18n["No sections to navigate"]+"</strong>","</span>"].join("")}),void i.levelTreeExpanded(!1);n("#customize-preview iframe").css("z-index",1),i.renderOrRefreshTree()}else 0<n("#nimble-level-tree").length&&_.delay(function(){n("#nimble-level-tree").remove(),n("#customize-preview iframe").css("z-index","")},300)}),o.previewer.bind("ready",function(){i.localSectionsSettingId.callbacks.add(function(){_.each([i.getGlobalSectionsSettingId(),i.localSectionsSettingId()],function(e){o(e)._isBoundForNimbleLevelTree||(o(e).bind(function(e){i.setLevelTreeValue()}),o(e)._isBoundForNimbleLevelTree=!0)})})}),n("body").on("click","#nimble-level-tree [data-nimb-level]",function(e){e.preventDefault(),e.stopPropagation();var t=n(e.target);o.previewer.send("sek-animate-to-level",{id:t.data("nimb-id")}),o.previewer.send("sek-display-level-ui",{id:t.data("nimb-id")})}),n("body").on("click","#nimble-level-tree .sek-remove-level",function(e){e.preventDefault(),e.stopPropagation();var t=n(e.target).closest("[data-nimb-level]");o.previewer.trigger("sek-remove",{level:t.data("nimb-level"),id:t.data("nimb-id"),location:t.closest('[data-nimb-level="location"]').data("nimb-id"),in_sektion:t.closest('[data-nimb-level="section"]').data("nimb-id"),in_column:t.closest('[data-nimb-level="column"]').data("nimb-id")}),t.fadeOut("slow"),i.renderOrRefreshTree()})},hasLocalHeaderFooter:function(){o.has(self.localSectionsSettingId())},setLevelTreeValue:function(){var e=this.getGlobalSectionsSettingId(),t=this.localSectionsSettingId();_global_col=o(e)(),_global_col=_.isObject(_global_col)&&!_.isEmpty(_global_col.collection)?_global_col.collection:[],_global_col=_.isArray(_global_col)?_global_col:[],_local_col=o(t)(),_local_col=_.isObject(_local_col)&&!_.isEmpty(_local_col.collection)?_local_col.collection:[],_local_col=_.isArray(_local_col)?_local_col:[],this.levelTree(_.union(_global_col,_local_col))},renderOrRefreshTree:function(){n("#nimble-level-tree").length<1&&n("#customize-preview").after(n("<div/>",{id:"nimble-level-tree"})),n("#nimble-level-tree").html(this.getLevelTreeHtml(this.levelTree()))},getLevelTreeHtml:function(e,t){var i=this;if(!_.isArray(e)||_.isEmpty(e))return o.errare("::buildLevelTree => invalid collection param",e),_html;var n='<i class="material-icons sek-remove-level" title="">delete_forever</i>';return _html="<ul>",_.each(e,function(e){_.isUndefined(e.level)?o.errare("::buildLevelTree => missing level property",e):_.isUndefined(e.id)?o.errare("::buildLevelTree => missing id property",e):("module"===e.level||!_.isUndefined(e.collection)&&_.isArray(e.collection)&&!_.isEmpty(e.collection))&&(n="location"!==e.level?n:"",_html=_html+'<li data-nimb-level="'+e.level+'" data-nimb-id="'+e.id+'">',_html+=[e.level," id :",e.id," ",n].join(""),_.isArray(e.collection)&&!_.isEmpty(e.collection)&&(_html+=i.getLevelTreeHtml(e.collection,t)),_html+="</li>")}),_html+="</ul>",_html}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(a,c){c.extend(CZRSeksPrototype,{setupSaveUI:function(){var n=this;n.saveUIVisible=new a.Value(!1),n.saveUIVisible.bind(function(e,t,i){n.toggleSaveUI(e,i?i.id:null)})},toggleSaveUI:function(e,t){e=!!_.isUndefined(e)||e;var i,n=this;e?c.when(n.renderAndSetupSaveUITmpl({})).done(function(e){n.saveUIContainer=e,_.delay(function(){c("body").addClass("nimble-save-ui-visible")},200),c("#sek-saved-section-id").val(t)}):(i=c.Deferred(),c("body").removeClass("nimble-save-ui-visible"),0<c("#nimble-top-save-ui").length?_.delay(function(){n.saveUIContainer.remove(),i.resolve()},300):i.resolve(),i.promise()).done(function(){n.saveUIVisible(!1)})},preProcessSektion:function(e){var t=this.cleanIds(e);return _.omit(t,function(e,t){return _.contains(["id","level"],t)})},renderAndSetupSaveUITmpl:function(e){if(0<c("#nimble-top-save-ui").length)return c("#nimble-top-save-ui");var s=this;try{_tmpl=wp.template("nimble-top-save-ui")({})}catch(e){return a.errare("Error when parsing the the top note template",e),!1}return c("#customize-preview").after(c(_tmpl)),c(".sek-do-save-section","#nimble-top-save-ui").on("click",function(e){e.preventDefault();var t=c.extend(!0,{},s.getLevelModel(c("#sek-saved-section-id").val())),i=c("#sek-saved-section-title").val(),n=c("#sek-saved-section-description").val(),o=s.guid(),r=s.preProcessSektion(t);if(_.isEmpty(i))return c("#sek-saved-section-title").addClass("error"),void a.previewer.trigger("sek-notify",{type:"error",duration:1e4,message:['<span style="font-size:0.95em">',"<strong>@missi18n You need to set a title</strong>","</span>"].join("")});c("#sek-saved-section-title").removeClass("error"),wp.ajax.post("sek_save_section",{nonce:a.settings.nonce.save,sek_title:i,sek_description:n,sek_id:o,sek_data:JSON.stringify(r)}).done(function(e){a.previewer.trigger("sek-notify",{type:"success",duration:1e4,message:['<span style="font-size:0.95em">',"<strong>@missi18n Your section has been saved.</strong>","</span>"].join("")})}).fail(function(e){a.errorLog("ajax sek_save_section => error",e),a.previewer.trigger("sek-notify",{type:"error",duration:1e4,message:['<span style="font-size:0.95em">',"<strong>@missi18n You need to set a title</strong>","</span>"].join("")})})}),c(".sek-cancel-save","#nimble-top-save-ui").on("click",function(e){e.preventDefault(),s.saveUIVisible(!1)}),c("#nimble-top-save-ui")}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(a,c){c.extend(CZRSeksPrototype,{setupSettingsToBeSaved:function(){var i,o=this,e={local:{collectionSettingId:o.localSectionsSettingId()},global:{collectionSettingId:o.getGlobalSectionsSettingId()}};_.each(e,function(e,t){if(i=a.czr_skopeBase.getSkopeProperty("sektions",t).db_values,_.isEmpty(e.collectionSettingId))throw new Error("setupSettingsToBeSaved => the collectionSettingId is invalid");if(!a.has(e.collectionSettingId)){a.CZR_Helpers.register({what:"setting",id:e.collectionSettingId,value:o.validateSettingValue(_.isObject(i)?i:o.getDefaultSektionSettingValue(t)),transport:"postMessage",type:"option",track:!1,origin:"nimble"});a(e.collectionSettingId,function(n){n.bind(_.debounce(function(e,t,i){o.trackHistoryLog(n,i)},1e3))})}})},trackHistoryLog:function(e,t){var i=e.id===this.getGlobalSectionsSettingId();if(t&&!0!==t.navigatingHistoryLogs){var n,o=[],r=c.extend(!0,[],this.historyLog());_.isEmpty(t.in_sektion)?_.isEmpty(t.to_sektion)||(n=t.to_sektion):n=t.in_sektion,_.each(r,function(e){"future"!=e.status&&(c.extend(e,{status:"previous"}),o.push(e))}),o.push({status:"current",value:i?{global:e()}:{local:e()},action:_.isObject(t)&&t.action||"",sektionToRefresh:n}),this.historyLog(o)}},initializeHistoryLogWhenSettingsRegistered:function(){this.historyLog=new a.Value([{status:"current",value:{local:a(this.localSectionsSettingId())(),global:a(this.getGlobalSectionsSettingId())()},action:"initial"}]),this.historyLog.bind(function(e){if(!_.isEmpty(e)){var t=_.findKey(e,{status:"current"});t=Number(t),c("#nimble-top-bar").find("[data-nimble-history]").each(function(){"undo"===c(this).data("nimble-history")?c(this).attr("data-nimble-state",t<=0?"disabled":"enabled"):c(this).attr("data-nimble-state",e.length<=t+1?"disabled":"enabled")})}})},validateSettingValue:function(i){if(!_.isObject(i))return a.errare("validation error => the setting should be an object",i),null;var n={},o=!1,e=[],r=function(e){a.errare(e,i),a.previewer.trigger("sek-notify",{type:"error",duration:3e4,message:['<span style="font-size:0.95em">',"<strong>"+e+"</strong>","<br>",sektionsLocalizedData.i18n["If this problem locks the Nimble builder, you might try to reset the sections for this page."],"<br>",'<span style="text-align:center;display:block">','<button type="button" class="button" aria-label="'+sektionsLocalizedData.i18n.Reset+'" data-sek-reset="true">'+sektionsLocalizedData.i18n.Reset+"</button>","</span>","</span>"].join("")}),o=!0},s=function(t){if(!o)if(_.isUndefined(t)&&_.isEmpty(n)){if(t=c.extend(!0,{},i),_.isUndefined(t.id)||_.isUndefined(t.level)){if(_.isUndefined(t.collection))return void r("validation error => the root level is missing the collection of locations");if(!_.isEmpty(t.level)||!_.isEmpty(t.id))return void r('validation error => the root level should not have a "level" or an "id" property');_.each(i.collection,function(e){n=t,s(e)})}}else{if(_.isEmpty(t.id)||!_.isString(t.id))return void r("validation error => a "+t.level+" level must have a valid id");if(_.contains(e,t.id))return void r("validation error => duplicated level id : "+t.id);if(e.push(t.id),_.isEmpty(t.level)||!_.isString(t.level))return void r("validation error => a "+t.level+" level must have a level property");if(!_.contains(["location","section","column","module"],t.level))return void r('validation error => the level "'+t.level+'" is not authorized');if("module"==t.level){if(!_.isUndefined(t.collection))return void r("validation error => a module can not have a collection property")}else if(_.isUndefined(t.collection))return void r("validation error => missing collection property for level => "+t.level+" "+t.id);switch(_.isUndefined(t.ver_ini)&&a.errare("validateSettingValue() => validation error => a "+t.level+' should have a version property : "ver_ini"'),t.level){case"location":if(!_.isEmpty(n.level))return void r("validation error => the parent of location "+t.id+" should have no level set");break;case"section":if(t.is_nested&&"column"!=n.level)return void r("validation error => the nested section "+t.id+" must be child of a column");if(!t.is_nested&&"location"!=n.level)return void r("validation error => the section "+t.id+" must be child of a location");break;case"column":if("section"!=n.level)return void r("validation error => the column "+t.id+" must be child of a section");break;case"module":if("column"!=n.level)return void r("validation error => the module "+t.id+" must be child of a column")}"module"!=t.level&&_.each(t.collection,function(e){n=c.extend(!0,{},t),s(e)})}};return s(),o?null:i},resetCollectionSetting:function(){if(_.isEmpty(this.localSectionsSettingId()))throw new Error("setupSettingsToBeSaved => the collectionSettingId is invalid");a(this.localSectionsSettingId())(this.getDefaultSektionSettingValue("local")),a.previewer.refresh(),a.notifications.remove("sek-notify"),a.panel(sektionsLocalizedData.sektionsPanelId,function(e){a.notifications.add(new a.Notification("sek-reset-done",{type:"success",message:sektionsLocalizedData.i18n["Reset complete"],dismissible:!0})),_.delay(function(){a.notifications.remove("sek-reset-done")},5e3)})}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(c,n){n.extend(CZRSeksPrototype,{reactToPreviewMsg:function(){var o=this,r={},s={},a=!0,e={"sek-add-section":{callback:function(e){return a=!!_.isUndefined(e.send_to_preview)||e.send_to_preview,s={},r={action:"sek-add-section",id:sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid(),location:e.location,in_sektion:e.in_sektion,in_column:e.in_column,is_nested:!_.isEmpty(e.in_sektion)&&!_.isEmpty(e.in_column),before_section:e.before_section,after_section:e.after_section,is_first_section:e.is_first_section},o.updateAPISetting(r)},complete:function(e){e.apiParams.is_first_section&&c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.location}),c.previewer.trigger("sek-pick-content",{id:e.apiParams?e.apiParams.id:"",content_type:"section"}),c.previewer.send("sek-animate-to-level",{id:e.apiParams.id})}},"sek-add-column":{callback:function(e){return a=!0,s={},r={id:sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid(),action:"sek-add-column",in_sektion:e.in_sektion,autofocus:e.autofocus},o.updateAPISetting(r)},complete:function(e){!1!==e.apiParams.autofocus&&c.previewer.trigger("sek-pick-content",{})}},"sek-add-module":{callback:function(e){return a=!0,s={},r={id:sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid(),action:"sek-add-module",in_sektion:e.in_sektion,in_column:e.in_column,module_type:e.content_id,before_module:e.before_module,after_module:e.after_module},o.updateAPISetting(r)},complete:function(e){c.previewer.trigger("sek-edit-module",{id:e.apiParams.id,level:"module",in_sektion:e.apiParams.in_sektion,in_column:e.apiParams.in_column}),o.updateAPISetting({action:"sek-update-fonts",is_global_location:o.isGlobalLocation(e.apiParams)}),c.previewer.trigger("sek-refresh-stylesheet",{id:e.apiParams.in_column,location_skope_id:c.czr_skopeBase.getSkopeProperty("skope_id")})}},"sek-remove":{callback:function(e){switch(a=!0,s={},e.level){case"section":var t=o.getLevelModel(e.id);if("no_match"===t){c.errare("reactToPreviewMsg => sek-remove-section => no sektionToRemove matched");break}r={action:"sek-remove-section",id:e.id,location:e.location,in_sektion:e.in_sektion,in_column:e.in_column,is_nested:t.is_nested};break;case"column":r={action:"sek-remove-column",id:e.id,in_sektion:e.in_sektion};break;case"module":r={action:"sek-remove-module",id:e.id,in_sektion:e.in_sektion,in_column:e.in_column};break;default:c.errare("::reactToPreviewMsg => sek-remove => missing level ",e)}return o.updateAPISetting(r)},complete:function(e){if(c.previewer.trigger("sek-pick-content",{}),o.updateAPISetting({action:"sek-update-fonts",is_global_location:o.isGlobalLocation(e.apiParams)}),"sek-remove-section"===e.apiParams.action){var t=o.getLevelModel(e.apiParams.location);_.isEmpty(t.collection)&&c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.location})}}},"sek-move":{callback:function(e){switch(a=!0,s={},e.level){case"section":r={action:"sek-move-section",id:e.id,is_nested:!_.isEmpty(e.in_sektion)&&!_.isEmpty(e.in_column),newOrder:e.newOrder,from_location:e.from_location,to_location:e.to_location};break;case"column":r={action:"sek-move-column",id:e.id,newOrder:e.newOrder,from_sektion:e.from_sektion,to_sektion:e.to_sektion};break;case"module":r={action:"sek-move-module",id:e.id,newOrder:e.newOrder,from_column:e.from_column,to_column:e.to_column,from_sektion:e.from_sektion,to_sektion:e.to_sektion}}return o.updateAPISetting(r)},complete:function(e){switch(e.apiParams.action){case"sek-move-section":c.previewer.trigger("sek-edit-options",{id:e.apiParams.id,level:"section",in_sektion:e.apiParams.id}),e.apiParams.from_location!=e.apiParams.to_location&&(c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.to_location}),c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.from_location}));break;case"sek-move-column":c.previewer.trigger("sek-edit-options",{id:e.apiParams.id,level:"column",in_sektion:e.apiParams.in_sektion,in_column:e.apiParams.in_column});break;case"sek-refresh-modules-in-column":c.previewer.trigger("sek-edit-module",{id:e.apiParams.id,level:"module",in_sektion:e.apiParams.in_sektion,in_column:e.apiParams.in_column})}}},"sek-move-section-up":{callback:function(e){return a=!1,s={},r={action:"sek-move-section-up-down",direction:"up",id:e.id,is_nested:!_.isEmpty(e.in_sektion)&&!_.isEmpty(e.in_column),location:e.location},o.updateAPISetting(r)},complete:function(e){c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.location})}},"sek-move-section-down":{callback:function(e){return a=!1,s={},r={action:"sek-move-section-up-down",direction:"down",id:e.id,is_nested:!_.isEmpty(e.in_sektion)&&!_.isEmpty(e.in_column),location:e.location},o.updateAPISetting(r)},complete:function(e){c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.location})}},"sek-duplicate":{callback:function(e){switch(a=!0,s={},e.level){case"section":r={action:"sek-duplicate-section",id:e.id,location:e.location,in_sektion:e.in_sektion,in_column:e.in_column,is_nested:!_.isEmpty(e.in_sektion)&&!_.isEmpty(e.in_column)};break;case"column":r={action:"sek-duplicate-column",id:e.id,in_sektion:e.in_sektion,in_column:e.in_column};break;case"module":r={action:"sek-duplicate-module",id:e.id,in_sektion:e.in_sektion,in_column:e.in_column}}return o.updateAPISetting(r)},complete:function(e){var t;switch(e.apiParams.action){case"sek-duplicate-section":c.previewer.trigger("sek-edit-options",{id:e.apiParams.id,level:"section",in_sektion:e.apiParams.id}),t=e.apiParams.location,c.previewer.send("sek-animate-to-level",{id:e.apiParams.id});break;case"sek-duplicate-column":c.previewer.trigger("sek-edit-options",{id:e.apiParams.id,level:"column",in_sektion:e.apiParams.in_sektion,in_column:e.apiParams.in_column}),t=e.apiParams.in_sektion;break;case"sek-duplicate-module":c.previewer.trigger("sek-edit-module",{id:e.apiParams.id,level:"module",in_sektion:e.apiParams.in_sektion,in_column:e.apiParams.in_column}),t=e.apiParams.in_column}c.previewer.trigger("sek-refresh-stylesheet",{id:t,location_skope_id:c.czr_skopeBase.getSkopeProperty("skope_id")})}},"sek-resize-columns":function(e){return a=!0,s={},r=e,o.updateAPISetting(r)},"sek-add-content-in-new-sektion":{callback:function(e){switch(a=!!_.isUndefined(e.send_to_preview)||e.send_to_preview,s={},(r=e).action="sek-add-content-in-new-sektion",r.id=sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid(),e.content_type){case"module":r.droppedModuleId=sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid();break;case"preset_section":c.previewer.send("sek-maybe-print-loader",{loader_located_in_level_id:e.location}),c.previewer.send("sek-maybe-print-loader",{fullPageLoader:!0})}return o.updateAPISetting(r)},complete:function(e){switch(e.apiParams.content_type){case"module":c.previewer.trigger("sek-edit-module",{level:"module",id:e.apiParams.droppedModuleId});break;case"preset_section":c.previewer.send("sek-clean-loader",{cleanFullPageLoader:!0})}o.updateAPISetting({action:"sek-update-fonts",is_global_location:o.isGlobalLocation(e.apiParams)});var t=e.location_skope_id;_.isUndefined(t)&&(t=!0===e.is_global_location?sektionsLocalizedData.globalSkopeId:c.czr_skopeBase.getSkopeProperty("skope_id")),c.previewer.trigger("sek-refresh-stylesheet",{location_skope_id:t,is_global_location:o.isGlobalLocation(e.apiParams)}),e.apiParams.is_first_section&&c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.location}),e.apiParams.sektion_to_replace&&c.previewer.trigger("sek-remove",{id:e.apiParams.sektion_to_replace,location:e.apiParams.location,in_column:e.apiParams.in_column,level:"section"})}},"sek-add-preset-section-in-new-nested-sektion":{callback:function(e){return a=!1,s={},(r=e).action="sek-add-preset-section-in-new-nested-sektion",r.id=sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid(),c.previewer.send("sek-maybe-print-loader",{loader_located_in_level_id:e.location}),o.updateAPISetting(r)},complete:function(e){c.previewer.trigger("sek-refresh-stylesheet",{id:e.apiParams.in_sektion,location_skope_id:c.czr_skopeBase.getSkopeProperty("skope_id")}),o.updateAPISetting({action:"sek-update-fonts",is_global_location:o.isGlobalLocation(e.apiParams)}),c.previewer.trigger("sek-refresh-level",{level:"section",id:e.apiParams.in_sektion})}},"sek-pick-content":function(e){return e=_.isObject(e)?e:{},c.czr_sektions.currentContentPickerType=c.czr_sektions.currentContentPickerType||new c.Value,c.czr_sektions.currentContentPickerType(e.content_type||"module"),_.isObject(e)&&e.id&&o.lastClickedTargetInPreview({id:e.id}),a=!0,r={},s={action:"sek-generate-draggable-candidates-picker-ui",content_type:(e=e||{}).content_type||"module",was_triggered:!_.has(e,"was_triggered")||e.was_triggered,focus:!_.has(e,"focus")||e.focus},o.generateUI(s)},"sek-edit-options":function(e){return a=!0,r={},_.isEmpty(e.id)?n.Deferred(function(){this.reject("missing id")}):(s={action:"sek-generate-level-options-ui",level:e.level,id:e.id,in_sektion:e.in_sektion,in_column:e.in_column,options:e.options||[]},o.generateUI(s))},"sek-edit-module":function(e){return a=!0,r={},s={action:"sek-generate-module-ui",level:e.level,id:e.id,in_sektion:e.in_sektion,in_column:e.in_column,options:e.options||[]},o.generateUI(s)},"sek-notify":function(t){return a=!1,n.Deferred(function(){c.panel(sektionsLocalizedData.sektionsPanelId,function(e){c.notifications.add(new c.Notification("sek-notify",{type:t.type||"info",message:t.message,dismissible:!0})),_.delay(function(){c.notifications.remove("sek-notify")},t.duration||5e3)}),this.resolve({is_global_location:o.isGlobalLocation(t)})})},"sek-refresh-level":function(t){return a=!0,n.Deferred(function(e){r={action:"sek-refresh-level",level:t.level,id:t.id},s={},e.resolve({is_global_location:o.isGlobalLocation(t)})})},"sek-refresh-stylesheet":function(t){return a=!0,t=t||{},n.Deferred(function(e){r={id:t.id},s={},e.resolve({is_global_location:o.isGlobalLocation(t)})})},"sek-toggle-save-section-ui":function(t){return a=!1,o.saveUIVisible(!0,t),n.Deferred(function(e){r={},s={},e.resolve({is_global_location:o.isGlobalLocation(t)})})}};_.each(e,function(i,n){c.previewer.bind(n,function(t){var e;if(_.isFunction(i))e=i;else{if(!_.isFunction(i.callback))return void c.errare("::reactToPreviewMsg => invalid callback for action "+n);e=i.callback}try{e(t).done(function(e){e=e||{},a?c.previewer.send(n,{location_skope_id:!0===e.is_global_location?sektionsLocalizedData.globalSkopeId:c.czr_skopeBase.getSkopeProperty("skope_id"),local_skope_id:c.czr_skopeBase.getSkopeProperty("skope_id"),apiParams:r,uiParams:s,cloneId:!_.isEmpty(e.cloneId)&&e.cloneId}):c.previewer.trigger([n,"done"].join("_"),{apiParams:r,uiParams:s}),o.trigger([n,"done"].join("_"),t)}).fail(function(e){c.errare("reactToPreviewMsg => error when firing "+n,e),c.previewer.trigger("sek-notify",{type:"error",duration:3e4,message:['<span style="font-size:0.95em">',"<strong>"+e+"</strong>","<br>",sektionsLocalizedData.i18n["If this problem locks the Nimble builder, you might try to reset the sections for this page."],"<br>",'<span style="text-align:center;display:block">','<button type="button" class="button" aria-label="'+sektionsLocalizedData.i18n.Reset+'" data-sek-reset="true">'+sektionsLocalizedData.i18n.Reset+"</button>","</span>","</span>"].join("")})})}catch(e){c.errare("reactToPreviewMsg => error when receiving "+n,e)}})}),_.each(e,function(t,i){c.previewer.bind([i,"done"].join("_"),function(e){if(_.isFunction(t.complete))try{t.complete(e)}catch(e){c.errare("reactToPreviewMsg done => error when receiving "+[i,"done"].join("_"),e)}})})},schedulePrintSectionJson:function(){var i=this;c.previewer.bind("sek-to-json",function(e){var t=n.extend(!0,{},i.getLevelModel(e.id));console.log(JSON.stringify(i.cleanIds(t)))})}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(k,y){y.extend(CZRSeksPrototype,{generateUI:function(e){var t=this,i=y.Deferred();switch(_.isEmpty(e.action)&&i.reject("generateUI => missing action"),e.action){case"sek-generate-module-ui":try{i=t.generateUIforFrontModules(e,i)}catch(e){k.errare("::generateUI() => error",e),i=y.Deferred()}break;case"sek-generate-level-options-ui":try{i=t.generateUIforLevelOptions(e,i)}catch(e){k.errare("::generateUI() => error",e),i=y.Deferred()}break;case"sek-generate-draggable-candidates-picker-ui":t.cleanRegistered();try{i=t.generateUIforDraggableContent(e,i)}catch(e){k.errare("::generateUI() => error",e),i=y.Deferred()}break;case"sek-generate-local-skope-options-ui":t.cleanRegistered();try{i=t.generateUIforLocalSkopeOptions(e,i)}catch(e){k.errare("::generateUI() => error",e),i=y.Deferred()}break;case"sek-generate-global-options-ui":t.cleanRegistered();try{i=t.generateUIforGlobalOptions(e,i)}catch(e){k.errare("::generateUI() => error",e),i=y.Deferred()}}return"pending"==i.state()?i.resolve().promise():i.promise()},updateAPISettingAndExecutePreviewActions:function(n){if(!_.isEmpty(n.settingParams)&&_.has(n.settingParams,"to")){var o,r=this,e=n.settingParams.to,t=null,i=!1;if(!_.isEmpty(n.settingParams.args)&&_.has(n.settingParams.args,"moduleRegistrationParams")){var s=n.settingParams.args.moduleRegistrationParams.control,a=n.settingParams.args.moduleRegistrationParams.id,c=s.czr_Module(a);if(_.isEmpty(c)?k.errare("updateAPISettingAndExecutePreviewActions => missing parentModuleInstance",n):(t=c.module_type,i=c.isMultiItem()),!i&&_.isObject(e)?o=r.normalizeAndSanitizeSingleItemInputValues(e,t):(o=[],_.each(e,function(e){o.push(r.normalizeAndSanitizeSingleItemInputValues(e,t))})),_.isEmpty(n.defaultPreviewAction))k.errare("updateAPISettingAndExecutePreviewActions => missing defaultPreviewAction in passed params. No action can be triggered to the api.previewer.",n);else{var l,d="refresh_stylesheet"===n.defaultPreviewAction,u="refresh_markup"===n.defaultPreviewAction,p="refresh_fonts"===n.defaultPreviewAction,m="refresh_preview"===n.defaultPreviewAction,f=n.settingParams.args.input_changed;_.isUndefined(f)||(l=r.getInputRegistrationParams(f,t),_.isUndefined(l.refresh_stylesheet)||(d=Boolean(l.refresh_stylesheet)),_.isUndefined(l.refresh_markup)||(u=Boolean(l.refresh_markup)),_.isUndefined(l.refresh_fonts)||(p=Boolean(l.refresh_fonts)),_.isUndefined(l.refresh_preview)||(m=Boolean(l.refresh_preview)));var g=function(){if(!0!==n.isGlobalOptions)return r.updateAPISetting({action:n.uiParams.action,id:n.uiParams.id,value:o,in_column:n.uiParams.in_column,in_sektion:n.uiParams.in_sektion,options_type:n.options_type,settingParams:n.settingParams}).done(function(e){!0===d&&k.previewer.send("sek-refresh-stylesheet",{location_skope_id:!0===e.is_global_location?sektionsLocalizedData.globalSkopeId:k.czr_skopeBase.getSkopeProperty("skope_id"),local_skope_id:k.czr_skopeBase.getSkopeProperty("skope_id"),apiParams:{action:"sek-refresh-stylesheet",id:n.uiParams.id,level:n.uiParams.level}}),!0===u&&k.previewer.send("sek-refresh-level",{location_skope_id:!0===e.is_global_location?sektionsLocalizedData.globalSkopeId:k.czr_skopeBase.getSkopeProperty("skope_id"),local_skope_id:k.czr_skopeBase.getSkopeProperty("skope_id"),apiParams:{action:"sek-refresh-level",id:n.uiParams.id,level:n.uiParams.level},skope_id:k.czr_skopeBase.getSkopeProperty("skope_id")}),!0===m&&k.previewer.refresh()});if(_.isEmpty(n.options_type))k.errare("updateAPISettingAndExecutePreviewActions => error when updating the global options => missing options_type");else{var e=k(sektionsLocalizedData.optNameForGlobalOptions)(),t=y.extend(!0,{},_.isObject(e)?e:{}),i={};_.each(o||{},function(e,t){!_.isBoolean(e)&&_.isEmpty(e+"")||(i[t]=e)}),t[n.options_type]=i,k(sektionsLocalizedData.optNameForGlobalOptions)(t)}};if(!0===p){var h=n.settingParams.args.input_value;if(!_.isString(h))return void k.errare("updateAPISettingAndExecutePreviewActions => font-family must be a string",h);-1<h.indexOf("gfont")?r.updateAPISetting({action:"sek-update-fonts",font_family:h,is_global_location:r.isGlobalLocation(n.uiParams)}).always(function(){g().then(function(){r.updateAPISetting({action:"sek-update-fonts",is_global_location:r.isGlobalLocation(n.uiParams)})})}):g()}else g()}}else k.errare("updateAPISettingAndExecutePreviewActions => missing params.settingParams.args.moduleRegistrationParams The api main setting can not be updated",n)}else k.errare("updateAPISettingAndExecutePreviewActions => missing params.settingParams.to. The api main setting can not be updated",n)},normalizeAndSanitizeSingleItemInputValues:function(e,o){var i,r={},n={},s=null,a=this;return _.each(e,function(e,t){var i,n;_.contains(["title","id"],t)||(null!==o&&"no_default_value_specified"===(s=a.getInputDefaultValue(t,o))&&k.infoLog("::updateAPISettingAndExecutePreviewActions => missing default value for input "+t+" in module "+o),i=e,n=s,(_.isBoolean(i)||_.isBoolean(n)?Boolean(i)===Boolean(n):_.isNumber(i)||_.isNumber(n)?Number(i)===Number(n):_.isString(i)||_.isString(n)?i+""==n+"":_.isObject(i)&&_.isObject(n)?_.isEqual(i,n):_.isArray(i)&&_.isArray(n)?JSON.stringify(i.sort())===JSON.stringify(n.sort()):i===n)||(_.isString(e)||_.isObject(e))&&_.isEmpty(e)||(r[t]=e))}),_.each(r,function(e,t){switch(a.getInputType(t,o)){case"text":case"textarea":case"check":case"gutencheck":case"select":case"radio":case"number":case"upload":case"upload_url":case"color":case"wp_color_alpha":case"wp_color":case"content_picker":case"tiny_mce_editor":case"password":case"range":case"range_slider":case"hidden":case"h_alignment":case"h_text_alignment":case"spacing":case"bg_position":case"v_alignment":case"font_size":case"line_height":case"font_picker":default:i=e}n[t]=i}),n},isUIControlAlreadyRegistered:function(t){var e=_.filter(this.registered(),function(e){return e.id==t&&"control"===e.what}),i=!1;return _.isEmpty(e)?i=k.control.has(t):(i=!0,1<e.length&&k.errare("generateUI => why is this control registered more than once ? => "+t)),i}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(s,a){a.extend(CZRSeksPrototype,{generateUIforDraggableContent:function(o,e){var r=this,t={};a.extend(t,{content_type_switcher:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+"_sek_content_type_switcher_ui",module_type:"sek_content_type_switcher_module",controlLabel:sektionsLocalizedData.i18n["Select a content type"],priority:0,settingValue:{content_type:o.content_type}},module_picker:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+"_sek_draggable_modules_ui",module_type:"sek_module_picker_module",controlLabel:sektionsLocalizedData.i18n["Pick a module"],content_type:"module",priority:20,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'},sek_intro_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_intro_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Sections for an introduction"],content_type:"section",expandAndFocusOnInit:!0,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'},sek_features_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_features_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Sections for services and features"],content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'},sek_contact_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_contact_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Contact-us sections"],content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'},sek_column_layouts_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_column_layouts_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Empty sections with columns layout"],content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'}}),sektionsLocalizedData.isNimbleHeaderFooterEnabled&&a.extend(t,{sek_header_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_header_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Header sections"],content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'},sek_footer_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_footer_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Footer sections"],content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'}}),sektionsLocalizedData.isSavedSectionEnabled&&a.extend(t,{sek_my_sections_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_my_sections_sec_picker_module",controlLabel:"@missi18n My sections",content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'}});var i=_.keys(t)[0],n=t[i].settingControlId;return r.isUIControlAlreadyRegistered(n)?s.control(n,function(t){t.focus({completeCallback:function(){var e=t.container;e.hasClass("button-see-me")||(e.addClass("button-see-me"),_.delay(function(){e.removeClass("button-see-me")},800))}})}):(_do_register_=function(){_.each(t,function(n,e){s.has(n.settingControlId)||(s(n.settingControlId,function(e){e.bind(function(e,t){s.errare("generateUIforDraggableContent => the setting() should not changed")})}),s.CZR_Helpers.register({origin:"nimble",level:o.level,what:"setting",id:n.settingControlId,dirty:!1,value:n.settingValue||{},transport:"postMessage",type:"_nimble_ui_"})),s.CZR_Helpers.register({origin:"nimble",level:o.level,what:"control",id:n.settingControlId,label:n.controlLabel,type:"czr_module",module_type:n.module_type,section:r.SECTION_ID_FOR_CONTENT_PICKER,priority:n.priority||10,settings:{default:n.settingControlId},track:!1}).done(function(){s.control(n.settingControlId,function(e){e.content_type=n.content_type,!0===o.focus&&e.focus({completeCallback:function(){}});var t=e.container.find("label > .customize-control-title"),i=t.html();t.html(['<span class="sek-ctrl-accordion-title">',i,"</span>"].join("")),_.isUndefined(n.icon)||t.addClass("sek-flex-vertical-center").prepend(n.icon),"section"===e.content_type?(e.container.find(".czr-items-wrapper").hide(),t.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>'),e.container.attr("data-sek-expanded","false"),!0===n.expandAndFocusOnInit&&"false"==e.container.attr("data-sek-expanded")&&(e.container.find(".czr-items-wrapper").show(),t.trigger("click"))):e.container.attr("data-sek-accordion","no")})})})},s.section(r.SECTION_ID_FOR_CONTENT_PICKER,function(e){_do_register_();var t=e.container.find(".accordion-section-title"),i=e.container.find(".customize-section-title h3");0<t.length&&t.find(".sek-level-option-icon").length<1&&t.prepend('<i class="fas fa-grip-vertical sek-level-option-icon"></i>'),0<i.length&&i.find(".sek-level-option-icon").length<1&&i.find(".customize-action").after('<i class="fas fa-grip-vertical sek-level-option-icon"></i>'),r.scheduleModuleAccordion.call(e,{expand_first_control:!0}),r._maybeFetchSectionsFromServer()})),e}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(d,u){u.extend(CZRSeksPrototype,{generateUIforFrontModules:function(r,e){var s=this;_.isEmpty(r.id)&&e.reject("generateUI => missing id");var i=s.getLevelProperty({property:"value",id:r.id}),t=s.getLevelProperty({property:"module_type",id:r.id}),n=s.getRegisteredModuleProperty(t,"name");_.isEmpty(t)&&e.reject("generateUI => module => invalid module_type");var o={};if(!0===s.getRegisteredModuleProperty(t,"is_father")){var a=s.getRegisteredModuleProperty(t,"children");if(_.isEmpty(a))throw new Error("::generateUIforFrontModules => a father module "+t+" is missing children modules ");_.each(a,function(e,t){o[t]={settingControlId:r.id+"__"+t,module_type:e,controlLabel:s.getRegisteredModuleProperty(e,"name")}})}else o.__no_option_group_to_be_updated_by_children_modules__={settingControlId:r.id,module_type:t,controlLabel:n};var c=_.keys(o)[0],l=o[c].settingControlId;return s.isUIControlAlreadyRegistered(l)?d.control(l).focus({completeCallback:function(){var e=d.control(l).container;e.hasClass("button-see-me")||(e.addClass("button-see-me"),_.delay(function(){e.removeClass("button-see-me")},800))}}):(s.cleanRegistered(),_do_register_=function(){_.each(o,function(n,o){if(!d.has(n.settingControlId)){var t=function(e,t,i){try{s.updateAPISettingAndExecutePreviewActions({defaultPreviewAction:"refresh_markup",uiParams:_.extend(r,{action:"sek-set-module-value"}),options_type:o,settingParams:{to:e,from:t,args:i}})}catch(e){d.errare("::generateUIforFrontModules => Error in updateAPISettingAndExecutePreviewActions",e)}};d(n.settingControlId,function(e){e.bind(_.debounce(t,s.SETTING_UPDATE_BUFFER))});var e=u.extend(!0,{},i);"__no_option_group_to_be_updated_by_children_modules__"!==o&&(e=!_.isEmpty(e)&&_.isObject(e)&&_.isObject(e[o])?e[o]:{}),d.CZR_Helpers.register({origin:"nimble",level:r.level,what:"setting",id:n.settingControlId,dirty:!1,value:e,transport:"postMessage",type:"_nimble_ui_"})}d.CZR_Helpers.register({origin:"nimble",level:r.level,what:"control",id:n.settingControlId,label:n.controlLabel,type:"czr_module",module_type:n.module_type,section:r.id,priority:10,settings:{default:n.settingControlId}}).done(function(){}),d.control(n.settingControlId,function(e){d.control(n.settingControlId).focus({completeCallback:function(){}}),e.container.find(".czr-items-wrapper").hide();var t=e.container.find("label > .customize-control-title"),i=t.html();t.html(['<span class="sek-ctrl-accordion-title">',i,"</span>"].join("")),_.isUndefined(n.icon)||t.addClass("sek-flex-vertical-center").prepend(n.icon),t.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>'),e.container.attr("data-sek-expanded","false")})})},d.section.when(r.id,function(){d.section(r.id).focus(),_do_register_()}),d.CZR_Helpers.register({origin:"nimble",what:"section",id:r.id,title:sektionsLocalizedData.i18n["Content for"]+" "+n,panel:sektionsLocalizedData.sektionsPanelId,priority:1e3}).done(function(){}),d.section(r.id,function(e){e.container.find(".accordion-section-title").first().hide();var t=e.container.find(".customize-section-title h3");0<t.length&&t.find(".customize-action").after('<i class="fas fa-pencil-alt sek-level-option-icon"></i>'),s.scheduleModuleAccordion.call(e,{expand_first_control:!0})})),e}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(l,d){d.extend(CZRSeksPrototype,{generateUIforLevelOptions:function(s,e){var a=this,c=a.getLevelProperty({property:"options",id:s.id});c=_.isObject(c)?c:{};var t={};d.extend(t,{bg:{settingControlId:s.id+"__bg_options",module_type:"sek_level_bg_module",controlLabel:sektionsLocalizedData.i18n["Background settings for the"]+" "+sektionsLocalizedData.i18n[s.level],expandAndFocusOnInit:!0,icon:'<i class="material-icons sek-level-option-icon">gradient</i>'},border:{settingControlId:s.id+"__border_options",module_type:"sek_level_border_module",controlLabel:sektionsLocalizedData.i18n["Borders settings for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="material-icons sek-level-option-icon">rounded_corner</i>'},spacing:{settingControlId:s.id+"__spacing_options",module_type:"sek_level_spacing_module",controlLabel:sektionsLocalizedData.i18n["Padding and margin settings for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="material-icons sek-level-option-icon">center_focus_weak</i>'},anchor:{settingControlId:s.id+"__anchor_options",module_type:"sek_level_anchor_module",controlLabel:sektionsLocalizedData.i18n["Set a custom anchor for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="fas fa-anchor sek-level-option-icon"></i>'},visibility:{settingControlId:s.id+"__visibility_options",module_type:"sek_level_visibility_module",controlLabel:sektionsLocalizedData.i18n["Device visibility settings for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="far fa-eye sek-level-option-icon"></i>'},height:{settingControlId:s.id+"__height_options",module_type:"sek_level_height_module",controlLabel:sektionsLocalizedData.i18n["Height and vertical alignment for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="fas fa-ruler-vertical sek-level-option-icon"></i>'}}),"section"===s.level&&(d.extend(t,{width:{settingControlId:s.id+"__width_options",module_type:"sek_level_width_section",controlLabel:sektionsLocalizedData.i18n["Width settings for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="fas fa-ruler-horizontal sek-level-option-icon"></i>'}}),d.extend(t,{breakpoint:{settingControlId:s.id+"__breakpoint_options",module_type:"sek_level_breakpoint_module",controlLabel:sektionsLocalizedData.i18n["Responsive settings : breakpoint, column direction"],icon:'<i class="material-icons sek-level-option-icon">devices</i>'}})),"module"===s.level&&d.extend(t,{width:{settingControlId:s.id+"__width_options",module_type:"sek_level_width_module",controlLabel:sektionsLocalizedData.i18n["Width settings for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="fas fa-ruler-horizontal sek-level-option-icon"></i>'}});var i=_.keys(t)[0],n=t[i].settingControlId;return a.isUIControlAlreadyRegistered(n)?l.control(n).focus({completeCallback:function(){var e=l.control(n).container;e.hasClass("button-see-me")||(e.addClass("button-see-me"),_.delay(function(){e.removeClass("button-see-me")},800))}}):(a.cleanRegistered(),_do_register_=function(){_.each(t,function(n,o){if(a.isUIControlAlreadyRegistered(n.settingControlId))l.section(l.control(n.settingControlId).section()).expanded(!0);else{if(!l.has(n.settingControlId)){var t=function(e,t,i){try{a.updateAPISettingAndExecutePreviewActions({defaultPreviewAction:"refresh_stylesheet",uiParams:s,options_type:o,settingParams:{to:e,from:t,args:i}})}catch(e){l.errare("::generateUIforLevelOptions => Error in updateAPISettingAndExecutePreviewActions",e)}};l(n.settingControlId,function(e){e.bind(_.debounce(t,a.SETTING_UPDATE_BUFFER))});var e=c[o]||{},i=a.getModuleStartingValue(n.module_type);if("no_starting_value"!==i&&_.isObject(i)){var r=d.extend(!0,{},i);e=d.extend(r,e)}l.CZR_Helpers.register({origin:"nimble",level:s.level,what:"setting",id:n.settingControlId,dirty:!1,value:e,transport:"postMessage",type:"_nimble_ui_"})}l.CZR_Helpers.register({origin:"nimble",level:s.level,level_id:s.id,what:"control",id:n.settingControlId,label:n.controlLabel,type:"czr_module",module_type:n.module_type,section:s.id,priority:0,settings:{default:n.settingControlId}}).done(function(){}),l.control(n.settingControlId,function(e){!0===n.expandAndFocusOnInit&&e.focus({completeCallback:function(){}}),e.container.find(".czr-items-wrapper").hide();var t=e.container.find("label > .customize-control-title"),i=t.html();t.html(['<span class="sek-ctrl-accordion-title">',i,"</span>"].join("")),_.isUndefined(n.icon)||t.addClass("sek-flex-vertical-center").prepend(n.icon),t.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>'),e.container.attr("data-sek-expanded","false")})}})},l.section.has(s.id)||l.section(s.id,function(e){a.scheduleModuleAccordion.call(e,{expand_first_control:!0})}),l.CZR_Helpers.register({origin:"nimble",what:"section",id:s.id,title:sektionsLocalizedData.i18n["Settings for the"]+" "+s.level,panel:sektionsLocalizedData.sektionsPanelId,priority:10}).done(function(){}),l.section(s.id,function(e){_do_register_(),e.container.find(".accordion-section-title").first().hide();var t=e.container.find(".customize-section-title h3");0<t.length&&t.find(".sek-level-option-icon").length<1&&t.find(".customize-action").after('<i class="fas fa-sliders-h sek-level-option-icon"></i>')})),e}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(d,u){u.extend(CZRSeksPrototype,{getLocalSkopeOptionId:function(){var e=d.czr_skopeBase.getSkopeProperty("skope_id");return _.isEmpty(e)?(d.errare("czr_sektions::getLocalSkopeOptionId => empty skope_id "),""):sektionsLocalizedData.optPrefixForSektionsNotSaved+e+"__localSkopeOptions"},generateUIforLocalSkopeOptions:function(c,e){var l=this,i=l.getLocalSkopeOptionId();if(l.isUIControlAlreadyRegistered(i))return e;var n={};return _.isUndefined(sektionsLocalizedData.localOptionsMap)||!_.isObject(sektionsLocalizedData.localOptionsMap)?d.errare("::generateUIforGlobalOptions => missing or invalid localOptionsMap"):(_.each(sektionsLocalizedData.localOptionsMap,function(e,t){switch(t){case"template":n[t]={settingControlId:i+"__template",module_type:e,controlLabel:sektionsLocalizedData.i18n["Page template"],expandAndFocusOnInit:!1,icon:'<i class="material-icons sek-level-option-icon">check_box_outline_blank</i>'};break;case"local_header_footer":sektionsLocalizedData.isNimbleHeaderFooterEnabled&&(n[t]={settingControlId:i+"__local_header_footer",module_type:e,controlLabel:sektionsLocalizedData.i18n["Page header and footer"],icon:'<i class="material-icons sek-level-option-icon">web</i>'});break;case"widths":n[t]={settingControlId:i+"__widths",module_type:e,controlLabel:sektionsLocalizedData.i18n["Inner and outer widths"],icon:'<i class="fas fa-ruler-horizontal sek-level-option-icon"></i>'};break;case"custom_css":n[t]={settingControlId:i+"__custom_css",module_type:e,controlLabel:sektionsLocalizedData.i18n["Custom CSS"],icon:'<i class="material-icons sek-level-option-icon">code</i>'};break;case"local_performances":n[t]={settingControlId:i+"__local_performances",module_type:e,controlLabel:sektionsLocalizedData.i18n["Page speed optimizations"],icon:'<i class="fas fa-fighter-jet sek-level-option-icon"></i>'};break;case"local_reset":n[t]={settingControlId:i+"__local_reset",module_type:e,controlLabel:sektionsLocalizedData.i18n["Remove the sections in this page"],icon:'<i class="material-icons sek-level-option-icon">cached</i>'};break;default:d.errare("::generateUIforLocalOptions => an option group could not be registered => "+e,t)}}),_do_register_=function(){_.each(n,function(n,o){if(!d.has(n.settingControlId)){var t=function(e,t,i){try{l.updateAPISettingAndExecutePreviewActions({defaultPreviewAction:"refresh",uiParams:c,options_type:o,settingParams:{to:e,from:t,args:i}})}catch(e){d.errare("::generateUIforLocalSkopeOptions => Error in updateAPISettingAndExecutePreviewActions",e)}};d(n.settingControlId,function(e){e.bind(_.debounce(t,l.SETTING_UPDATE_BUFFER))});var e=l.getModuleStartingValue(n.module_type),i=d(l.localSectionsSettingId())(),r=u.extend(!0,{},_.isObject(i.local_options)?i.local_options:{}),s=_.isObject(r[o])?r[o]:{};if("no_starting_value"!==e&&_.isObject(e)){var a=u.extend(!0,{},e);s=u.extend(a,s)}d.CZR_Helpers.register({origin:"nimble",level:c.level,what:"setting",id:n.settingControlId,dirty:!1,value:s,transport:"postMessage",type:"_nimble_ui_"})}d.CZR_Helpers.register({origin:"nimble",level:c.level,what:"control",id:n.settingControlId,label:n.controlLabel,type:"czr_module",module_type:n.module_type,section:l.SECTION_ID_FOR_LOCAL_OPTIONS,priority:10,settings:{default:n.settingControlId}}).done(function(){d.control(n.settingControlId,function(e){e.container.find(".czr-items-wrapper").hide();var t=e.container.find("label > .customize-control-title"),i=t.html();t.html(['<span class="sek-ctrl-accordion-title">',i,"</span>"].join("")),_.isUndefined(n.icon)||t.addClass("sek-flex-vertical-center").prepend(n.icon),t.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>'),e.container.attr("data-sek-expanded","false"),!0===n.expandAndFocusOnInit&&"false"==e.container.attr("data-sek-expanded")&&t.trigger("click")})})})},_do_register_()),e}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(l,d){d.extend(CZRSeksPrototype,{generateUIforGlobalOptions:function(a,e){var c=this,i=sektionsLocalizedData.optPrefixForSektionsNotSaved+sektionsLocalizedData.optNameForGlobalOptions;if(c.isUIControlAlreadyRegistered(i))return e;var n={};return _.isUndefined(sektionsLocalizedData.globalOptionsMap)||!_.isObject(sektionsLocalizedData.globalOptionsMap)?l.errare("::generateUIforGlobalOptions => missing or invalid globalOptionsMap"):(_.each(sektionsLocalizedData.globalOptionsMap,function(e,t){switch(t){case"global_header_footer":sektionsLocalizedData.isNimbleHeaderFooterEnabled&&(n[t]={settingControlId:i+"__header_footer",module_type:e,controlLabel:sektionsLocalizedData.i18n["Site wide header and footer"],icon:'<i class="material-icons sek-level-option-icon">web</i>'});break;case"breakpoint":n[t]={settingControlId:i+"__breakpoint",module_type:e,controlLabel:sektionsLocalizedData.i18n["Site wide breakpoint for Nimble sections"],expandAndFocusOnInit:!1,icon:'<i class="material-icons sek-level-option-icon">devices</i>'};break;case"widths":n[t]={settingControlId:i+"__widths",module_type:e,controlLabel:sektionsLocalizedData.i18n["Site wide inner and outer sections widths"],icon:'<i class="fas fa-ruler-horizontal sek-level-option-icon"></i>'};break;case"performances":n[t]={settingControlId:i+"__performances",module_type:e,controlLabel:sektionsLocalizedData.i18n["Site wide page speed optimizations"],icon:'<i class="fas fa-fighter-jet sek-level-option-icon"></i>'};break;case"recaptcha":n[t]={settingControlId:i+"__recaptcha",module_type:e,controlLabel:sektionsLocalizedData.i18n["Protect your contact forms with Google reCAPTCHA"],icon:'<i class="material-icons sek-level-option-icon">security</i>'};break;case"beta_features":n[t]={settingControlId:i+"__beta_features",module_type:e,controlLabel:sektionsLocalizedData.i18n["Beta features"],icon:'<i class="material-icons sek-level-option-icon">widgets</i>'};break;default:l.errare("::generateUIforGlobalOptions => an option group could not be registered => "+e,t)}}),_do_register_=function(){_.each(n,function(n,o){if(!l.has(n.settingControlId)){var t=function(e,t,i){try{c.updateAPISettingAndExecutePreviewActions({isGlobalOptions:!0,defaultPreviewAction:"refresh",uiParams:a,options_type:o,settingParams:{to:e,from:t,args:i}})}catch(e){l.errare("::generateUIforGlobalOptions => Error in updateAPISettingAndExecutePreviewActions",e)}};l(n.settingControlId,function(e){e.bind(_.debounce(t,c.SETTING_UPDATE_BUFFER))});var e=sektionsLocalizedData.globalOptionDBValues,i=c.getModuleStartingValue(n.module_type),r=_.isObject(e)&&!_.isEmpty(e[o])?e[o]:{};if("no_starting_value"!==i&&_.isObject(i)){var s=d.extend(!0,{},i);r=d.extend(s,r)}l.CZR_Helpers.register({origin:"nimble",level:a.level,what:"setting",id:n.settingControlId,dirty:!1,value:r,transport:"postMessage",type:"_nimble_ui_"})}l.CZR_Helpers.register({origin:"nimble",level:a.level,what:"control",id:n.settingControlId,label:n.controlLabel,type:"czr_module",module_type:n.module_type,section:c.SECTION_ID_FOR_GLOBAL_OPTIONS,priority:20,settings:{default:n.settingControlId},track:!1}).done(function(){l.control(n.settingControlId,function(e){e.container.find(".czr-items-wrapper").hide();var t=e.container.find("label > .customize-control-title"),i=t.html();t.html(['<span class="sek-ctrl-accordion-title">',i,"</span>"].join("")),_.isUndefined(n.icon)||t.addClass("sek-flex-vertical-center").prepend(n.icon),t.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>'),e.container.attr("data-sek-expanded","false"),!0===n.expandAndFocusOnInit&&"false"==e.container.attr("data-sek-expanded")&&t.trigger("click")})})})},_do_register_()),e}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(K,X){X.extend(CZRSeksPrototype,{updateAPISetting:function(q){var Y=this,J=X.Deferred();(q=q||{}).is_global_location=Y.isGlobalLocation(q);var e=q.is_global_location?Y.getGlobalSectionsSettingId():Y.localSectionsSettingId();return K(e,function(e){var n,t,o,i,r,s,a,c,l,d=e(),u=_.isObject(d)?X.extend(!0,{},d):Y.getDefaultSektionSettingValue(q.is_global_location?"global":"local"),p=!1;switch(u.collection=_.isArray(u.collection)?u.collection:Y.getDefaultSektionSettingValue(q.is_global_location?"global":"local").collection,q.action){case"sek-add-section":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if(_.isEmpty(q.location))throw new Error("updateAPISetting => "+q.action+" => missing location");if(!0===q.is_nested){if(o=Y.getLevelModel(q.in_column,u.collection),"no_match"==(l=Y.getLevelModel(q.in_sektion,u.collection))){J.reject("updateAPISetting => "+q.action+" => no grand parent sektion found");break}if(!0===l.is_nested){J.reject(sektionsLocalizedData.i18n["You've reached the maximum number of allowed nested sections."]);break}if("no_match"==o){K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched");break}o.collection=_.isArray(o.collection)?o.collection:[],o.collection.push({id:q.id,level:"section",collection:[{id:sektionsLocalizedData.optPrefixForSektionsNotSaved+Y.guid(),level:"column",collection:[],ver_ini:sektionsLocalizedData.nimbleVersion}],is_nested:!0,ver_ini:sektionsLocalizedData.nimbleVersion})}else{if("no_match"==(n=Y.getLevelModel(q.location,u.collection))){K.errare("updateAPISetting => "+q.action+" => no location matched"),J.reject("updateAPISetting => "+q.action+" => no location matched");break}n.collection=_.isArray(n.collection)?n.collection:[],_.each(n.collection,function(e,t){q.before_section===e.id&&(L=t),q.after_section===e.id&&(L=t+1)}),n.collection=_.isArray(n.collection)?n.collection:[],n.collection.splice(L,0,{id:q.id,level:"section",collection:[{id:sektionsLocalizedData.optPrefixForSektionsNotSaved+Y.guid(),level:"column",collection:[],ver_ini:sektionsLocalizedData.nimbleVersion}],ver_ini:sektionsLocalizedData.nimbleVersion})}break;case"sek-duplicate-section":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if(_.isEmpty(q.location))throw new Error("updateAPISetting => "+q.action+" => missing location");var m;try{m=Y.cloneLevel(q.id)}catch(e){K.errare("updateAPISetting => "+q.action,e);break}var f=Y.getLevelPositionInCollection(q.id,u.collection);if(!0===q.is_nested){if("no_match"==(o=Y.getLevelModel(q.in_column,u.collection))){K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched");break}o.collection=_.isArray(o.collection)?o.collection:[],o.collection.splice(parseInt(f+1,10),0,m)}else{if("no_match"==(n=Y.getLevelModel(q.location,u.collection))){K.errare("updateAPISetting => "+q.action+" => no location matched"),J.reject("updateAPISetting => "+q.action+" => no location matched");break}n.collection=_.isArray(n.collection)?n.collection:[],n.collection.splice(parseInt(f+1,10),0,m)}a=m.id;break;case"sek-remove-section":if(!0===q.is_nested)"no_match"!=(o=Y.getLevelModel(q.in_column,u.collection))?(o.collection=_.isArray(o.collection)?o.collection:[],o.collection=_.filter(o.collection,function(e){return e.id!=q.id})):K.errare("updateAPISetting => "+q.action+" => no parent column matched");else{if("no_match"==(n=Y.getLevelModel(q.location,u.collection))){K.errare("updateAPISetting => "+q.action+" => no location matched"),J.reject("updateAPISetting => "+q.action+" => no location matched");break}n.collection=_.filter(n.collection,function(e){return e.id!=q.id})}break;case"sek-move-section":var g,h,k=Y.getLevelModel(q.to_location,u.collection);if(_.isEmpty(k)||"no_match"==k)throw new Error("updateAPISetting => "+q.action+" => missing target location");if(q.from_location!=q.to_location){var y=Y.getLevelModel(q.from_location,u.collection);if(_.isEmpty(y)||"no_match"==y)throw new Error("updateAPISetting => "+q.action+" => missing source location");y.collection=_.isArray(y.collection)?y.collection:[],g=Y.getLevelModel(q.id,y.collection),h=X.extend(!0,{},g),y.collection=_.filter(y.collection,function(e){return e.id!=q.id})}k.collection=_.isArray(k.collection)?k.collection:[],r=X.extend(!0,[],k.collection),s=[],_.each(q.newOrder,function(e){if(q.from_location!=q.to_location&&e==h.id)s.push(h);else{if(t=Y.getLevelModel(e,r),_.isEmpty(t)||"no_match"==t)throw new Error("updateAPISetting => "+q.action+" => missing section candidate");s.push(t)}}),k.collection=s;break;case"sek-move-section-up-down":if(inLocationCandidate=Y.getLevelModel(q.location,u.collection),_.isEmpty(inLocationCandidate)||"no_match"==inLocationCandidate)throw new Error("updateAPISetting => "+q.action+" => missing target location");inLocationCandidate.collection=_.isArray(inLocationCandidate.collection)?inLocationCandidate.collection:[],r=X.extend(!0,[],inLocationCandidate.collection),s=X.extend(!0,[],inLocationCandidate.collection);var v=_.findIndex(r,function(e){return e.id===q.id});if(-1===v)throw new Error("updateAPISetting => "+q.action+" => invalid index");var b=q.direction||"up";s[v]=r["up"===b?v-1:v+1],s["up"===b?v-1:v+1]=r[v],inLocationCandidate.collection=s;break;case"sek-add-column":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if("no_match"==(t=Y.getLevelModel(q.in_sektion,u.collection))){K.errare("updateAPISetting => "+q.action+" => no parent sektion matched"),J.reject("updateAPISetting => "+q.action+" => no parent sektion matched");break}if(t.collection=_.isArray(t.collection)?t.collection:[],Y.MAX_NUMBER_OF_COLUMNS-1<_.size(t.collection)){J.reject(sektionsLocalizedData.i18n["You've reached the maximum number of columns allowed in this section."]);break}_.each(t.collection,function(e){e.width=""}),t.collection.push({id:q.id,level:"column",collection:[],ver_ini:sektionsLocalizedData.nimbleVersion});break;case"sek-remove-column":if("no_match"!=(t=Y.getLevelModel(q.in_sektion,u.collection))){if(1===_.size(t.collection)){J.reject(sektionsLocalizedData.i18n["A section must have at least one column."]);break}t.collection=_.isArray(t.collection)?t.collection:[],t.collection=_.filter(t.collection,function(e){return e.id!=q.id}),_.each(t.collection,function(e){e.width=""})}else K.errare("updateAPISetting => "+q.action+" => no parent sektion matched");break;case"sek-duplicate-column":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if("no_match"==(t=Y.getLevelModel(q.in_sektion,u.collection))){K.errare("updateAPISetting => "+q.action+" => no parent sektion matched"),J.reject("updateAPISetting => "+q.action+" => no parent sektion matched");break}if(t.collection=_.isArray(t.collection)?t.collection:[],Y.MAX_NUMBER_OF_COLUMNS-1<_.size(t.collection)){J.reject(sektionsLocalizedData.i18n["You've reached the maximum number of columns allowed in this section."]);break}var z;try{z=Y.cloneLevel(q.id)}catch(e){K.errare("updateAPISetting => "+q.action,e);break}var I=Y.getLevelPositionInCollection(q.id,u.collection);a=z.id,t.collection.splice(parseInt(I+1,10),0,z),_.each(t.collection,function(e){e.width=""});break;case"sek-resize-columns":if(q.col_number<2)break;var w=Y.getLevelModel(q.resized_column,u.collection),M=Y.getLevelModel(q.sister_column,u.collection);if("no_match"==w){K.errare("updateAPISetting => "+q.action+" => no resized column matched"),J.reject("updateAPISetting => "+q.action+" => no resized column matched");break}w.width=parseFloat(q.resizedColumnWidthInPercent);var C=Y.getLevelModel(q.in_sektion,u.collection),S=_.filter(C.collection,function(e){return e.id!=w.id&&e.id!=M.id}),D=parseFloat(w.width.toFixed(3));_.isEmpty(S)||_.each(S,function(e){currentColWidth=parseFloat(1*e.width),(!_.has(e,"width")||!_.isNumber(1*currentColWidth)||_.isEmpty(currentColWidth+"")||currentColWidth<1)&&(e.width=parseFloat((100/q.col_number).toFixed(3))),D=parseFloat((D+e.width).toFixed(3))}),M.width=parseFloat((100-D).toFixed(3));break;case"sek-move-column":var P,x,E=Y.getLevelModel(q.to_sektion,u.collection);if(_.isEmpty(E)||"no_match"==E)throw new Error("updateAPISetting => "+q.action+" => missing target sektion");if(q.from_sektion!=q.to_sektion){var R=Y.getLevelModel(q.from_sektion,u.collection);if(_.isEmpty(R)||"no_match"==R)throw new Error("updateAPISetting => "+q.action+" => missing source column");R.collection=_.isArray(R.collection)?R.collection:[],P=Y.getLevelModel(q.id,R.collection),x=X.extend(!0,{},P),R.collection=_.filter(R.collection,function(e){return e.id!=q.id}),_.each(R.collection,function(e){e.width=""})}E.collection=_.isArray(E.collection)?E.collection:[],r=X.extend(!0,[],E.collection),s=[],_.each(q.newOrder,function(e){if(q.from_sektion!=q.to_sektion&&e==x.id)s.push(x);else{if(o=Y.getLevelModel(e,r),_.isEmpty(o)||"no_match"==o)throw new Error("updateAPISetting => moveColumn => missing columnCandidate");s.push(o)}}),E.collection=s,_.each(E.collection,function(e){e.width=""});break;case"sek-add-module":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if(_.isEmpty(q.module_type))throw new Error("updateAPISetting => "+q.action+" => missing module_type");if("no_match"===(o=Y.getLevelModel(q.in_column,u.collection))){K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched");break}var L=0;o.collection=_.isArray(o.collection)?o.collection:[],_.each(o.collection,function(e,t){q.before_module===e.id&&(L=t),q.after_module===e.id&&(L=t+1)});var O={id:q.id,level:"module",module_type:q.module_type,ver_ini:sektionsLocalizedData.nimbleVersion};"no_starting_value"!==(c=Y.getModuleStartingValue(q.module_type))&&(O.value=c),o.collection.splice(L,0,O);break;case"sek-duplicate-module":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if("no_match"==(o=Y.getLevelModel(q.in_column,u.collection))){K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched");break}var A;o.collection=_.isArray(o.collection)?o.collection:[];try{A=Y.cloneLevel(q.id)}catch(e){K.errare("updateAPISetting => "+q.action,e),J.reject("updateAPISetting => "+q.action+" => error when cloning the level");break}var Z=Y.getLevelPositionInCollection(q.id,u.collection);a=A.id,o.collection.splice(parseInt(Z+1,10),0,A);break;case"sek-remove-module":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");"no_match"!=(o=Y.getLevelModel(q.in_column,u.collection))?(o.collection=_.isArray(o.collection)?o.collection:[],o.collection=_.filter(o.collection,function(e){return e.id!=q.id})):K.errare("updateAPISetting => "+q.action+" => no parent column matched");break;case"sek-move-module":var j,T,V;if(j=Y.getLevelModel(q.to_column,u.collection),_.isEmpty(j)||"no_match"==j)throw new Error("updateAPISetting => "+q.action+" => missing target column");if(q.from_column!=q.to_column){var F;if(F=Y.getLevelModel(q.from_column,u.collection),_.isEmpty(F)||"no_match"==F)throw new Error("updateAPISetting => "+q.action+" => missing source column");F.collection=_.isArray(F.collection)?F.collection:[],T=Y.getLevelModel(q.id,u.collection),V=X.extend(!0,{},T),F.collection=_.filter(F.collection,function(e){return e.id!=q.id})}if(j.collection=_.isArray(j.collection)?j.collection:[],r=X.extend(!0,[],j.collection),s=[],_.each(q.newOrder,function(e){if(q.from_column!=q.to_column&&e==V.id)s.push(V);else{if(i=Y.getLevelModel(e,u.collection),_.isEmpty(i)||"no_match"==i)throw new Error("updateAPISetting => "+q.action+" => missing moduleCandidate");s.push(i)}}),s.length!=_.uniq(s).length)throw new Error("updateAPISetting => "+q.action+" => there are duplicated modules in column : "+j.id);j.collection=s;break;case"sek-set-module-value":i=Y.getLevelModel(q.id,u.collection);var U={};if(_.each(q.value||{},function(e,t){!_.isBoolean(e)&&_.isEmpty(e+"")||(U[t]=e)}),"no_match"==i){K.errare("updateAPISetting => "+q.action+" => no module matched",q),J.reject("updateAPISetting => "+q.action+" => error no module matched");break}if(_.isEmpty(q.options_type)){K.errare("updateAPISetting => "+q.action+" => missing options_type"),J.reject("updateAPISetting => "+q.action+" => missing options_type");break}"__no_option_group_to_be_updated_by_children_modules__"===q.options_type?i.value=U:(i.value=_.isEmpty(i.value)?{}:i.value,i.value[q.options_type]=U);break;case"sek-generate-level-options-ui":var N=Y.getLevelModel(q.id,u.collection),B={};if("no_match"===N){K.errare("updateAPISetting => "+q.action+" => no parent sektion matched"),J.reject("updateAPISetting => "+q.action+" => no parent sektion matched");break}N.options=N.options||{},_.each(q.value||{},function(e,t){!_.isBoolean(e)&&_.isEmpty(e+"")||(B[t]=e)}),_.isEmpty(q.options_type)&&K.errare("updateAPISetting => "+q.action+" => missing options_type"),N.options[q.options_type]=B;break;case"sek-generate-local-skope-options-ui":B={};var Q=X.extend(!0,{},_.isObject(u.local_options)?u.local_options:{});if(_.each(q.value||{},function(e,t){!_.isBoolean(e)&&_.isEmpty(e+"")||(B[t]=e)}),_.isEmpty(q.options_type)||!_.isString(q.options_type))K.errare("updateAPISetting => "+q.action+" => missing options_type");else{var H={};H[q.options_type]=B,u.local_options=X.extend(Q,H)}break;case"sek-add-content-in-new-sektion":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if(L=0,"no_match"==(n=Y.getLevelModel(q.location,u.collection))){K.errare("updateAPISetting => "+q.action+" => no location matched"),J.reject("updateAPISetting => "+q.action+" => no location matched");break}switch(n.collection=_.isArray(n.collection)?n.collection:[],_.each(n.collection,function(e,t){q.before_section===e.id&&(L=t),q.after_section===e.id&&(L=t+1)}),q.content_type){case"module":c=Y.getModuleStartingValue(q.content_id),n.collection.splice(L,0,{id:q.id,level:"section",collection:[{id:sektionsLocalizedData.optPrefixForSektionsNotSaved+Y.guid(),level:"column",collection:[{id:q.droppedModuleId,level:"module",module_type:q.content_id,value:"no_starting_value"!==c?c:null,ver_ini:sektionsLocalizedData.nimbleVersion}],ver_ini:sektionsLocalizedData.nimbleVersion}],ver_ini:sektionsLocalizedData.nimbleVersion});break;case"preset_section":p=X.Deferred();var G=function(e){Y.preparePresetSectionForInjection(e).fail(function(e){J.reject("updateAPISetting => error when preparePresetSectionForInjection => "+q.action+" => "+e),p.reject(e)}).done(function(e){var t=!1;if(!_.isEmpty(q.sektion_to_replace)){var i=Y.getLevelModel(q.sektion_to_replace,u.collection);"no_match"===i&&(K.errare("updateAPISetting => "+q.action+" => no sektionToReplace matched"),J.reject("updateAPISetting => "+q.action+" => no sektionToReplace matched")),t=!0===i.is_nested}t?("no_match"===(o=Y.getLevelModel(q.in_column,u.collection))&&(K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched")),o.collection=_.isArray(o.collection)?o.collection:[],_.each(o.collection,function(e,t){q.before_section===e.id&&(L=t),q.after_section===e.id&&(L=t+1)}),o.collection.splice(L,0,{id:q.id,is_nested:!0,level:"section",collection:e.collection,options:e.options||{},ver_ini:sektionsLocalizedData.nimbleVersion})):n.collection.splice(L,0,{id:q.id,level:"section",collection:e.collection,options:e.options||{},ver_ini:sektionsLocalizedData.nimbleVersion}),p.resolve()})};Y.getPresetSectionCollection({is_user_section:q.is_user_section,presetSectionId:q.content_id,section_id:q.id}).fail(function(e){K.errare("updateAPISetting => "+q.action+" => Error with self.getPresetSectionCollection()",e),J.reject("updateAPISetting => "+q.action+" => Error with self.getPresetSectionCollection()")}).done(function(e){_.isObject(e)&&!_.isEmpty(e)||(K.errare("updateAPISetting => "+q.action+" => preset section type not found or empty : "+q.content_id,e),J.reject("updateAPISetting => "+q.action+" => preset section type not found or empty")),G(e)})}break;case"sek-add-preset-section-in-new-nested-sektion":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if(o=Y.getLevelModel(q.in_column,u.collection),"no_match"==(l=Y.getLevelModel(q.in_sektion,u.collection))){J.reject("updateAPISetting => "+q.action+" => no grand parent sektion found");break}if(!0===l.is_nested){J.reject(sektionsLocalizedData.i18n["You've reached the maximum number of allowed nested sections."]);break}if("no_match"==o){K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched");break}o.collection=_.isArray(o.collection)?o.collection:[],p=X.Deferred(),G=function(e){Y.preparePresetSectionForInjection(e).fail(function(e){J.reject("updateAPISetting => error when preparePresetSectionForInjection => "+q.action+" => "+e),p.reject(e)}).done(function(e){o.collection.push({id:q.id,level:"section",collection:e.collection,options:e.options||{},is_nested:!0,ver_ini:sektionsLocalizedData.nimbleVersion}),p.resolve()})},Y.getPresetSectionCollection({is_user_section:q.is_user_section,presetSectionId:q.content_id,section_id:q.id}).fail(function(){K.errare("updateAPISetting => "+q.action+" => Error with self.getPresetSectionCollection()",_er_),J.reject("updateAPISetting => "+q.action+" => Error with self.getPresetSectionCollection()")}).done(function(e){_.isObject(e)&&!_.isEmpty(e)||(K.errare("updateAPISetting => "+q.action+" => preset section type not found or empty : "+q.content_id,e),J.reject("updateAPISetting => "+q.action+" => preset section type not found or empty")),G(e)});break;case"sek-update-fonts":var W=Y.sniffGFonts({is_global_location:q&&!0===q.is_global_location});if(!_.isEmpty(q.font_family)&&_.isString(q.font_family)&&!_.contains(W,q.font_family)){if(q.font_family.indexOf("gfont")<0){K.errare("updateAPISetting => "+q.action+" => error => must be a google font, prefixed gfont"),J.reject("updateAPISetting => "+q.action+" => error => must be a google font, prefixed gfont");break}W.push(q.font_family)}u.fonts=W}if("pending"==J.state()){var $=function(){_.isEqual(d,u)?sektionsLocalizedData.isDevMode&&J.reject("updateAPISetting => the new setting value is unchanged when firing action : "+q.action):null!==Y.validateSettingValue(u)?(e(u,q),q.cloneId=a,J.resolve(q)):J.reject("Validation problem for action "+q.action)};!1===p?$():p.done(function(){$()}).fail(function(e){K.errare("updateAPISetting => __presetSectionInjected__ failed",e)})}}),J.promise()},_maybeFetchSectionsFromServer:function(t){var e,i=X.Deferred();return!0===(t=t||{is_user_section:!1}).is_user_section?_.isEmpty(K.sek_userSavedSections)||_.isEmpty(K.sek_userSavedSections[t.preset_section_id])?(K.sek_userSavedSections=K.sek_userSavedSections||{},_.isUndefined(K.sek_fetchingUserSavedSections)||"pending"!=K.sek_fetchingUserSavedSections.state()?(e=wp.ajax.post("sek_get_user_saved_sections",{nonce:K.settings.nonce.save,preset_section_id:t.preset_section_id}),K.sek_fetchingUserSavedSections=e):e=K.sek_fetchingUserSavedSections,e.done(function(e){K.sek_userSavedSections[t.preset_section_id]=e,i.resolve(K.sek_userSavedSections)}).fail(function(e){i.reject(e)})):i.resolve(K.sek_userSavedSections):_.isEmpty(K.sek_presetSections)?(_.isUndefined(K.sek_fetchingPresetSections)||"pending"!=K.sek_fetchingPresetSections.state()?(e=wp.ajax.post("sek_get_preset_sections",{nonce:K.settings.nonce.save}),K.sek_fetchingPresetSections=e):e=K.sek_fetchingPresetSections,e.done(function(e){K.sek_presetSections=e,i.resolve(K.sek_presetSections)}).fail(function(e){i.reject(e)})):i.resolve(K.sek_presetSections),i.promise()},getPresetSectionCollection:function(r){var s=this,a=X.Deferred();return s._maybeFetchSectionsFromServer({is_user_section:r.is_user_section,preset_section_id:r.presetSectionId}).fail(function(e){a.reject(e)}).done(function(e){var t=X.extend(!0,{},_.isObject(e)?e:{});if(_.isEmpty(t))throw new Error("getPresetSectionCollection => Invalid collection");if(_.isEmpty(t[r.presetSectionId]))throw new Error('getPresetSectionCollection => the preset section : "'+r.presetSectionId+'" has not been found in the collection');var i=t[r.presetSectionId],n=function(e){return _.each(e,function(e){e.id=sektionsLocalizedData.optPrefixForSektionsNotSaved+s.guid(),_.isArray(e.collection)&&n(e.collection)}),e},o=function(e){return _.each(e,function(e){e.ver_ini=sektionsLocalizedData.nimbleVersion,_.isArray(e.collection)&&o(e.collection)}),e};i.id=r.section_id,i.collection=n(i.collection),i.ver_ini=sektionsLocalizedData.nimbleVersion,i.collection=o(i.collection),a.resolve(i)}),a.promise()},preparePresetSectionForInjection:function(o){var i=this,n={},r=X.Deferred(),s=function(e){return _.each(e,function(e,t){_.isObject(e)||_.isArray(e)?s(e):_.isString(e)&&-1!=e.indexOf("::img-path::")&&(_.has(n,e)||(n[e]=i.importAttachment(e.replace("::img-path::",""))))}),n},a=function(i,n){return _.each(i,function(e,t){_.isObject(e)||_.isArray(e)?a(e,n):_.isString(e)&&-1!=e.indexOf("::img-path::")&&_.has(n,e)&&_.isObject(n[e])&&(i[t]=n[e].id)}),o};return i.whenAllPromisesInParallel(s(o)).done(function(e){var t=a(o,e);r.resolve(t)}).fail(function(e){r.reject(e)}),r.promise()}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(n,o){o.extend(CZRSeksPrototype,{cleanRegistered:function(t){var i=this,e=o.extend(!0,[],i.registered()||[]);e=_.filter(e,function(e){if("setting"!==e.what&&n[e.what].has(e.id)){if(!_.isEmpty(t)&&e.id!==t)return;_.isFunction(n[e.what](e.id).trigger)&&i.trigger("sek-ui-pre-removal",{what:e.what,id:e.id}),o.when(n[e.what](e.id).container.remove()).done(function(){n[e.what].remove(e.id),i.trigger("sek-ui-removed",{what:e.what,id:e.id})})}return"setting"===e.what}),i.registered(e)},cleanRegisteredLevelSettingsAfterHistoryNavigation:function(){var e=o.extend(!0,[],this.registered()||[]);e=_.filter(e,function(e){return _.isEmpty(e.level)||"setting"!==e.what||n.has(e.id)&&n.remove(e.id),_.isEmpty(e.level)&&"setting"!==e.what}),this.registered(e)}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(l,d){d.extend(CZRSeksPrototype,{rootPanelFocus:function(){l.section.has(l.czr_activeSectionId())?l.section(l.czr_activeSectionId()).expanded(!1):l.section.each(function(e){e.expanded(!1)}),l.panel.each(function(e){e.expanded(!1)})},guid:function(){function e(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return e()+e()+e()},getGlobalSectionsSettingId:function(){return sektionsLocalizedData.settingIdForGlobalSections},getLevelModel:function(i,n){var s=this,a="no_match",c=function(t,e,i,n){if(_.isUndefined(e)){var o=l(i)(),r=_.isObject(o)?d.extend(!0,{},o):d.extend(!0,{},s.getDefaultSektionSettingValue(n));e=_.isArray(r.collection)?r.collection:[]}return _.each(e,function(e){"no_match"==a&&(t===e.id?a=e:_.isArray(e.collection)&&c(t,e.collection,i,n))}),a};return _.isEmpty(n)?_.each({local:s.localSectionsSettingId(),global:s.getGlobalSectionsSettingId()},function(e,t){"no_match"===a&&c(i,n,e,t)}):c(i,n),a},isGlobalLocation:function(e){var t=!1;return e=e||{},_.has(e,"is_global_location")?t=e.is_global_location:_.isEmpty(e.location)?_.isEmpty(e.in_sektion)?_.isEmpty(e.id)||(t=this.isChildOfAGlobalLocation(e.id)):t=this.isChildOfAGlobalLocation(e.in_sektion):t=this.isChildOfAGlobalLocation(e.location),t},isChildOfAGlobalLocation:function(e){var r=this,s=function(t,e){var i="no_match";if(_.isUndefined(e)){var n=l(r.getGlobalSectionsSettingId())(),o=_.isObject(n)?d.extend(!0,{},n):r.getDefaultSektionSettingValue("global");e=_.isArray(o.collection)?o.collection:[]}return _.each(e,function(e){"no_match"==i&&(t===e.id?i=e:_.isArray(e.collection)&&(i=s(t,e.collection)))}),i};return"no_match"!==s(e)},getLevelPositionInCollection:function(i,n){var s=this,a="no_match",c=function(i,e,n,o){if(_.isUndefined(e)){var t=l(n)(),r=_.isObject(t)?d.extend(!0,{},t):d.extend(!0,{},s.getDefaultSektionSettingValue(o));e=_.isArray(r.collection)?r.collection:[]}_.each(e,function(e,t){"no_match"==a&&(i===e.id?a=t:_.isArray(e.collection)&&c(i,e.collection,n,o))})};return _.isEmpty(n)?_.each({local:s.localSectionsSettingId(),global:s.getGlobalSectionsSettingId()},function(e,t){"no_match"===a&&c(i,e,t,n)}):c(i,n),a},getLevelProperty:function(e){if(e=_.extend({id:"",property:""},e),_.isEmpty(e.id))l.errare("getLevelProperty => invalid id provided");else{var t=this.getLevelModel(e.id);if("no_match"!=t){if(_.isObject(t))return t[e.property];l.errare("getLevelProperty => invalid model for id : "+e.id,t)}else l.errare("getLevelProperty => no level model found for id : "+e.id)}},cloneLevel:function(e){var t=this,i=t.getLevelModel(e);if("no_match"==i)throw new Error("cloneLevel => no match for level id : "+e);var n=d.extend(!0,{},i),o=function(e){if(_.isEmpty(e.id))throw new Error("cloneLevel => missing level id");if(e.id=sektionsLocalizedData.optPrefixForSektionsNotSaved+t.guid(),!_.isEmpty(e.collection)){if(!_.isArray(e.collection))throw new Error("cloneLevel => the collection must be an array for level id : "+e.id);_.each(e.collection,function(e){e.id=sektionsLocalizedData.optPrefixForSektionsNotSaved+t.guid(),o(e)})}return e};return o(n)},getDefaultItemModelFromRegisteredModuleData:function(e){if(!this.isModuleRegistered(e))return{};if(!sektionsLocalizedData.registeredModules[e].is_father){var t=sektionsLocalizedData.registeredModules[e].tmpl["item-inputs"],i={id:"",title:""};return _.each(t,function(e,t){switch(t){case"tabs":_.each(e,function(e){_.each(e.inputs,function(e,t){i[t]=e.default||""})});break;default:i[t]=e.default||""}}),i}l.errare("getDefaultItemModelFromRegisteredModuleData => Father modules should be treated specifically")},getRegisteredModuleProperty:function(e,t){return this.isModuleRegistered(e)?sektionsLocalizedData.registeredModules[e][t]:"not_set"},isModuleRegistered:function(e){return sektionsLocalizedData.registeredModules&&!_.isUndefined(sektionsLocalizedData.registeredModules[e])},sniffGFonts:function(e){var o=this,r=[],s=function(i,n,e){if(_.isUndefined(e)){var t=l(i)();e=_.isObject(t)?d.extend(!0,{},t):d.extend(!0,{},o.getDefaultSektionSettingValue(n))}_.each(e,function(e,t){_.isString(t)&&"_css"===t.substr(t.length-4)&&!0===o.inputIsAFontFamilyModifier(t)&&-1<e.indexOf("gfont")&&!_.contains(r,e)&&r.push(e),(_.isArray(e)||_.isObject(e))&&s(i,n,e)})};return(e=e||{is_global_location:!1}).is_global_location?s(o.getGlobalSectionsSettingId(),"global"):s(o.localSectionsSettingId(),"local"),r},getInputDefaultValue:function(i,n,e){var o=this;if(o.cachedDefaultInputValues=o.cachedDefaultInputValues||{},o.cachedDefaultInputValues[n]=o.cachedDefaultInputValues[n]||{},_.has(o.cachedDefaultInputValues[n],i))return o.cachedDefaultInputValues[n][i];if(_.isUndefined(sektionsLocalizedData.registeredModules))l.errare("getInputDefaultValue => missing sektionsLocalizedData.registeredModules");else if(_.isUndefined(sektionsLocalizedData.registeredModules[n]))l.errare("getInputDefaultValue => missing "+n+" in sektionsLocalizedData.registeredModules");else{if(!sektionsLocalizedData.registeredModules[n].is_father){_.isUndefined(e)&&(e=sektionsLocalizedData.registeredModules[n].tmpl);var r="no_default_value_specified";return _.each(e,function(e,t){"no_default_value_specified"===r&&(i!==t||_.isUndefined(e.default)||(r=e.default),"no_default_value_specified"===r&&(_.isArray(e)||_.isObject(e))&&(r=o.getInputDefaultValue(i,n,e)),"no_default_value_specified"!==r&&(o.cachedDefaultInputValues[n][i]=r))}),r}l.errare("getInputDefaultValue => Father modules should be treated specifically")}},getInputType:function(i,n,e){var o=this;if(o.cachedInputTypes=o.cachedInputTypes||{},o.cachedInputTypes[n]=o.cachedInputTypes[n]||{},_.has(o.cachedInputTypes[n],i))return o.cachedInputTypes[n][i];if(_.isUndefined(sektionsLocalizedData.registeredModules))l.errare("getInputType => missing sektionsLocalizedData.registeredModules");else if(_.isUndefined(sektionsLocalizedData.registeredModules[n]))l.errare("getInputType => missing "+n+" in sektionsLocalizedData.registeredModules");else{if(!sektionsLocalizedData.registeredModules[n].is_father){_.isUndefined(e)&&(e=sektionsLocalizedData.registeredModules[n].tmpl);var r="no_input_type_specified";return _.each(e,function(e,t){"no_input_type_specified"===r&&(i!==t||_.isUndefined(e.input_type)||(r=e.input_type),"no_input_type_specified"===r&&(_.isArray(e)||_.isObject(e))&&(r=o.getInputType(i,n,e)),"no_input_type_specified"!==r&&(o.cachedInputTypes[n][i]=r))}),r}l.errare("getInputType => Father modules should be treated specifically")}},getInputRegistrationParams:function(i,n,e){var o=this;if(o.cachedInputRegistrationParams=o.cachedInputRegistrationParams||{},o.cachedInputRegistrationParams[n]=o.cachedInputRegistrationParams[n]||{},_.has(o.cachedInputRegistrationParams[n],i))return o.cachedInputRegistrationParams[n][i];if(_.isUndefined(sektionsLocalizedData.registeredModules))l.errare("getInputRegistrationParams => missing sektionsLocalizedData.registeredModules");else if(_.isUndefined(sektionsLocalizedData.registeredModules[n]))l.errare("getInputRegistrationParams => missing "+n+" in sektionsLocalizedData.registeredModules");else{if(!sektionsLocalizedData.registeredModules[n].is_father){_.isUndefined(e)&&(e=sektionsLocalizedData.registeredModules[n].tmpl);var r={};return _.each(e,function(e,t){_.isEmpty(r)&&(i!==t||_.isUndefined(e.input_type)||(r=e),_.isEmpty(r)&&(_.isArray(e)||_.isObject(e))&&(r=o.getInputRegistrationParams(i,n,e)),_.isEmpty(r)||(o.cachedInputRegistrationParams[n][i]=r))}),r}l.errare("getInputRegistrationParams => Father modules should be treated specifically")}},inputIsAFontFamilyModifier:function(i,e){var n=this;if(n.cachedFontFamilyModifier=n.cachedFontFamilyModifier||{},_.has(n.cachedFontFamilyModifier,i))return n.cachedFontFamilyModifier[i];if(!_.isUndefined(sektionsLocalizedData.registeredModules)){_.isUndefined(e)&&(e=sektionsLocalizedData.registeredModules);var o="not_set";return _.each(e,function(e,t){"not_set"===o&&(i!==t||_.isUndefined(e.input_type)||(o=!_.isUndefined(e.refresh_fonts)&&e.refresh_fonts),"not_set"===o&&(_.isArray(e)||_.isObject(e))&&(o=n.inputIsAFontFamilyModifier(i,e)),"not_set"!==o&&(n.cachedFontFamilyModifier[i]=o))}),o}l.errare("inputIsAFontFamilyModifier => missing sektionsLocalizedData.registeredModules")},getModuleStartingValue:function(e){if(!sektionsLocalizedData.registeredModules)return l.errare("getModuleStartingValue => missing sektionsLocalizedData.registeredModules"),"no_starting_value";if(_.isUndefined(sektionsLocalizedData.registeredModules[e]))return l.errare("getModuleStartingValue => the module type "+e+" is not registered"),"no_starting_value";var t=sektionsLocalizedData.registeredModules[e].starting_value;return _.isEmpty(t)?"no_starting_value":t},selectNextTabbableOrFocusable:function(e){var t=d(e),i=d(":focus"),n=0;if(1===i.length){var o=t.index(i);o+1<t.length&&(n=o+1)}t.eq(n).focus()},selectPrevTabbableOrFocusable:function(e){var t=d(e),i=d(":focus"),n=t.length-1;if(1===i.length){var o=t.index(i);0<o&&(n=o-1)}t.eq(n).focus()},setupSelectInput:function(e){var n=this,t=(n.input_parent,n.module,l.czr_sektions.getInputRegistrationParams(n.id,n.module.module_type));e=_.isUndefined(e)?t.choices:e,!_.isEmpty(e)&&_.isObject(e)?(_.each(e,function(e,t){var i={value:t,html:e};t==n()?d.extend(i,{selected:"selected"}):"px"===t&&d.extend(i,{selected:"selected"}),d("select[data-czrtype]",n.container).append(d("<option>",i))}),d("select[data-czrtype]",n.container).selecter()):l.errare("api.czr_sektions.setupSelectInput => missing select options for input id => "+n.id+" in image module")},setupFontSizeAndLineHeightInputs:function(e){var t=this,i=d(".sek-font-size-line-height-wrapper",t.container),n=i.find("input[data-czrtype]").data("sek-unit"),o=function(e){return _.contains(["px","em","%"],e)||(l.errare("error : invalid unit for input "+t.id,e),e="px"),e};t.css_unit=new l.Value(_.isEmpty(n)?"px":o(n)),t.css_unit.bind(function(e){e=_.isEmpty(e)?"px":e,i.find('input[type="number"]').trigger("change")}),i.find('input[type="number"]').on("input change",function(e){t(d(this).val()+o(t.css_unit()))}).stepper(),i.on("click","[data-sek-unit]",function(e){e.preventDefault(),i.find("[data-sek-unit]").removeClass("is-selected").attr("aria-pressed",!1),d(this).addClass("is-selected").attr("aria-pressed",!0),i.find("input[data-czrtype]").data("sek-unit",d(this).data("sek-unit")),t.css_unit(d(this).data("sek-unit"))}),i.find('.sek-ui-button[data-sek-unit="'+n+'"]').addClass("is-selected").attr("aria-pressed",!0)},maybeSetupDeviceSwitcherForInput:function(){var i=this,e=['<span class="sek-input-device-switcher">','<i data-sek-device="desktop" class="sek-switcher preview-desktop active" title="'+sektionsLocalizedData.i18n["Settings on desktops"]+'"></i>','<i data-sek-device="tablet" class="sek-switcher preview-tablet" title="'+sektionsLocalizedData.i18n["Settings on tablets"]+'"></i>','<i data-sek-device="mobile" class="sek-switcher preview-mobile" title="'+sektionsLocalizedData.i18n["Settings on mobiles"]+'"></i>',"</span>"].join(" ");i.container.find(".customize-control-title").prepend(e),i.previewedDevice=new l.Value(l.previewedDevice()),syncWithPreviewedDevice=function(e){e.stopPropagation(),i.container.find("[data-sek-device]").removeClass("active"),d(this).addClass("active");var t="desktop";try{t=d(this).data("sek-device")}catch(e){l.errare("maybeSetupDeviceSwitcherForInput => error when binding sek-switcher",e)}try{l.previewedDevice(t)}catch(e){l.errare("maybeSetupDeviceSwitcherForInput => error when setting the previewed device",e)}i.previewedDevice(t)},i.container.on("click","[data-sek-device]",syncWithPreviewedDevice);var t=i.container.find('[data-sek-device="'+l.previewedDevice()+'"]');0<t.length&&t.trigger("click")},scheduleModuleAccordion:function(e){e=e||{expand_first_control:!0};var i=this;if(d(i.container).on("click",".customize-control label > .customize-control-title",function(e){e.stopPropagation();var t=d(this).closest(".customize-control");"no"!==t.attr("data-sek-accordion")&&(i.container.find(".customize-control").not(t).each(function(){d(this).attr("data-sek-accordion")||(d(this).attr("data-sek-expanded","false"),d(this).find(".czr-items-wrapper").stop(!0,!0).slideUp(0))}),t.find(".czr-items-wrapper").stop(!0,!0).slideToggle({duration:0,start:function(){t.attr("data-sek-expanded","false"==t.attr("data-sek-expanded")?"true":"false"),t.trigger("true"==t.attr("data-sek-expanded")?"sek-accordion-expanded":"sek-accordion-collapsed")}}))}),e.expand_first_control){var t=_.first(i.controls());_.isObject(t)&&!_.isEmpty(t.id)&&l.control(t.id,function(e){e.container.trigger("sek-accordion-expanded"),i.container.find(".customize-control").first().find("label > .customize-control-title").trigger("click")})}},isPromise:function(e){return e&&"function"==typeof e.then&&String(d.Deferred().then)===String(e.then)},whenAllPromisesInParallel:function(e){var i=this,t=d.Deferred(),n=[],o=_.keys(e);return _.each(e,function(e,t){n.push(d.Deferred(function(t){(i.isPromise(e)?e:d.Deferred()).done(t.resolve).fail(function(e){t.reject(e)})}))}),d.when.apply(this,n).done(function(){var i={},e=Array.prototype.slice.call(arguments);_.each(e,function(e,t){i[o[t]]=e}),t.resolve(i)}).fail(t.reject),t},whenAllPromisesInSerie:function(t,i,n,o){i=i||0,n=n||{},o=o||d.Deferred();var r=this;if(_.isArray(t)){var e=t[i];(r.isPromise(e)?e:d.Deferred(function(e){e.resolve()})).always(function(e){n[i]=e,i+1==t.length?o.resolve(n):i+1<t.length&&r.whenAllPromisesInSerie(t,i+1,n,o)})}return o},importAttachment:function(t){return wp.ajax.post("sek_import_attachment",{rel_path:t,nonce:l.settings.nonce.save}).fail(function(e){l.errare("sek_import_attachment ajax action failed for image "+t,e)})},cleanIds:function(e){e.id="";var t=this;return _.each(e.collection,function(e){e.id="",_.isArray(e.collection)&&t.cleanIds(e)}),e},getDefaultSektionSettingValue:function(e){return!_.isUndefined(e)&&_.contains(["local","global"],e)||l.errare("getDefaultSektionSettingValue => the skope should be set to local or global"),"global"===e?sektionsLocalizedData.defaultGlobalSektionSettingValue:sektionsLocalizedData.defaultLocalSektionSettingValue},scheduleVisibilityOfInputId:function(t,i){var n=this.input_parent;if(!_.isFunction(i)||_.isEmpty(t))throw new Error("::scheduleVisibilityOfInputId => error when firing for input id : "+this.id);n.czr_Input(t).visible(i()),this.bind(function(e){n.czr_Input(t).visible(i())})}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(a,m){m.extend(CZRSeksPrototype,{setupDnd:function(){var t=this;t.bind("sek-refresh-dragzones",function(e){!0!="draggable"in document.createElement("span")&&a.panel(sektionsLocalizedData.sektionsPanelId,function(e){a.notifications.add(new a.Notification("drag-drop-support",{type:"error",message:sektionsLocalizedData.i18n["This browser does not support drag and drop. You might need to update your browser or use another one."],dismissible:!0})),_.delay(function(){a.notifications.remove("drag-drop-support")},1e4)}),t.setupNimbleDragZones(e.input_container)}),a.previewer.bind("ready",function(){try{t.setupNimbleDropZones()}catch(e){a.errare("::setupDnd => error on self.setupNimbleDropZones()",e)}_.isUndefined(_.findWhere(t.registered(),{module_type:"sek_intro_sec_picker_module"}))&&_.isUndefined(_.findWhere(t.registered(),{module_type:"sek_module_picker_module"}))||t.rootPanelFocus()}),t.reactToDrop()},setupNimbleDragZones:function(e){var n=this,o=function(){a.notifications.add(new a.Notification("missing-injection-target",{type:"info",message:sektionsLocalizedData.i18n["You first need to click on a target ( with a + icon ) in the preview."],dismissible:!0})),_.delay(function(){a.notifications.remove("missing-injection-target")},3e4)};e.find('[draggable="true"]').each(function(){m(this).on("dragstart",function(e){(function(e){n.lastClickedTargetInPreview({}),e.originalEvent.dataTransfer.setData("sek-content-type",m(this).data("sek-content-type")),e.originalEvent.dataTransfer.setData("sek-content-id",m(this).data("sek-content-id")),e.originalEvent.dataTransfer.setData("sek-section-type",m(this).data("sek-section-type")),e.originalEvent.dataTransfer.setData("sek-is-user-section",m(this).data("sek-is-user-section")),n.dndData={content_type:e.originalEvent.dataTransfer.getData("sek-content-type"),content_id:e.originalEvent.dataTransfer.getData("sek-content-id"),section_type:e.originalEvent.dataTransfer.getData("sek-section-type"),is_user_section:"true"===e.originalEvent.dataTransfer.getData("sek-is-user-section")};try{e.originalEvent.dataTransfer.setData("browserSupport","browserSupport"),e.originalEvent.dataTransfer.clearData("browserSupport")}catch(e){a.panel(sektionsLocalizedData.sektionsPanelId,function(e){a.notifications.add(new a.Notification("drag-drop-support",{type:"error",message:sektionsLocalizedData.i18n["This browser does not support drag and drop. You might need to update your browser or use another one."],dismissible:!0})),_.delay(function(){a.notifications.remove("drag-drop-support")},1e4)})}m(this).addClass("sek-dragged"),m("body").addClass("sek-dragging"),a.previewer.send("sek-drag-start",{type:n.dndData.content_type})}).call(m(this),e)}).on("dragend",function(e){(function(e){m("body").removeClass("sek-dragging"),m(this).removeClass("sek-dragged"),a.previewer.send("sek-drag-stop")}).call(m(this),e)}).dblclick(function(e){(function(e){var t,i=n.lastClickedTargetInPreview();!_.isEmpty(i)&&i.id?t=n.dnd_getDropZonesElements().find('[data-sek-id="'+i.id+'"]').find(".sek-module-drop-zone-for-first-module").first():o(),t&&0<t.length?(a.czr_sektions.trigger("sek-content-dropped",{drop_target_element:t,location:t.closest('[data-sek-level="location"]').data("sek-id"),before_module:t.data("drop-zone-before-module-or-nested-section"),after_module:t.data("drop-zone-after-module-or-nested-section"),before_section:t.data("drop-zone-before-section"),after_section:t.data("drop-zone-after-section"),content_type:m(this).data("sek-content-type"),content_id:m(this).data("sek-content-id"),section_type:m(this).data("sek-section-type"),is_user_section:"true"===m(this).data("sek-is-user-section")}),n.lastClickedTargetInPreview({})):(o(),a.errare("Double click insertion => the target zone was not found"))}).call(m(this),e)})})},setupNimbleDropZones:function(){var t=this;if(this.$dropZones=this.dnd_getDropZonesElements(),this.preDropElement=m("<div>",{class:sektionsLocalizedData.preDropElementClass,html:""}),this.$dropZones.length<1)throw new Error("::setupNimbleDropZones => invalid Dom element");this.$dropZones.each(function(){var e=m(this);!0!==e.data("zone-droppable-setup")&&(t.enterOverTimer=null,e.on("dragenter dragover",sektionsLocalizedData.dropSelectors,function(e){_.isNull(t.enterOverTimer)&&(t.enterOverTimer=!0,_.delay(function(){t.currentMousePosition&&t.currentMousePosition+""==e.clientY+""+e.clientX?t.enterOverTimer=null:(t.currentMousePosition=e.clientY+""+e.clientX,t.dnd_toggleDragApproachClassesToDropZones(e))},100)),t.dnd_canDrop({targetEl:m(this),evt:e})&&(e.stopPropagation(),t.dnd_OnEnterOver(m(this),e))}).on("dragleave drop",sektionsLocalizedData.dropSelectors,function(e){switch(e.type){case"dragleave":t.dnd_isOveringDropTarget(m(this),e)||t.dnd_cleanOnLeaveDrop(m(this),e);break;case"drop":if(this.$cachedDropZoneCandidates=null,!t.dnd_canDrop({targetEl:m(this),evt:e}))return;e.preventDefault(),t.dnd_onDrop(m(this),e),t.dnd_cleanOnLeaveDrop(m(this),e),a.previewer.send("sek-drag-stop")}}).data("zone-droppable-setup",!0))})},dnd_isInTarget:function(e,t){var i=t.clientY,n=t.clientX,o=e[0].getBoundingClientRect(),r=n<=o.right&&o.left<=n;return i>=o.top&&o.bottom>=i&&r},dnd_toggleDragApproachClassesToDropZones:function(u){var p=this;this.$dropZones=this.$dropZones||this.dnd_getDropZonesElements(),this.$cachedDropZoneCandidates=_.isEmpty(this.$cachedDropZoneCandidates)?this.$dropZones.find(".sek-drop-zone"):this.$cachedDropZoneCandidates,this.distanceTable=[],this.$dropZones.find(".sek-drop-zone").each(function(){var e,t,i=u.clientY,n=u.clientX,o=m(this)[0].getBoundingClientRect(),r=Math.abs(i-(o.bottom-(o.bottom-o.top)/2)),s=(Math.abs(o.top-i),Math.abs(n-(o.right-(o.right-o.left)/2))),a=(o.right,o.left,r<50),c=s<50,l=n<=o.right&&o.left<=n,d=i>=o.top&&o.bottom>=i;p.distanceTable.push({el:m(this),dist:d&&l?0:(e=s,t=r,Math.sqrt(e*e+t*t))}),m(this).removeClass("sek-drag-is-in"),(a||d)&&(c||l)?(m(this).removeClass("sek-drag-is-approaching"),m(this).removeClass("sek-drag-is-close"),m(this).addClass("sek-drag-is-very-close")):(m(this).removeClass("sek-drag-is-approaching"),m(this).removeClass("sek-drag-is-close"),m(this).removeClass("sek-drag-is-very-close")),m(this).removeClass("sek-drag-is-in")});var t=_.min(_.pluck(p.distanceTable,"dist"));p.$dropTargetCandidate=null,_.each(p.distanceTable,function(e){_.isNull(p.$dropTargetCandidate)&&t===e.dist&&(p.$dropTargetCandidate=e.el)}),p.$dropTargetCandidate&&0<p.$dropTargetCandidate.length&&p.dnd_isInTarget(p.$dropTargetCandidate,u)&&p.$dropTargetCandidate.addClass("sek-drag-is-in"),p.enterOverTimer=null},dnd_getPreDropElementContent:function(e){var t,i,n=m(e.currentTarget);switch(this.dndData.content_type){case"module":t=sektionsLocalizedData.i18n["Insert here"],0<n.length&&("between-sections"!==n.data("sek-location")&&"in-empty-location"!==n.data("sek-location")||(t=sektionsLocalizedData.i18n["Insert in a new section"])),i='<div class="sek-module-placeholder-content"><p>'+t+"</p></div>";break;case"preset_section":i='<div class="sek-module-placeholder-content"><p>'+(t=sektionsLocalizedData.i18n["Insert a new section here"])+"</p></div>";break;default:a.errare("::dnd_getPreDropElementContent => invalid content type provided")}return i},dnd_getDropZonesElements:function(){return m(a.previewer.targetWindow().document)},dnd_canDrop:function(e){var t=this,i=(e=_.extend({targetEl:{},evt:{}},e||{})).targetEl;if(!_.isObject(i)||i.length<1)return!1;var n=i.hasClass("sek-content-preset_section-drop-zone"),o=i.hasClass("sek-module-drop-zone-for-first-module"),r=!0===i.closest('[data-sek-level="location"]').data("sek-is-header-location"),s=!0===i.closest('[data-sek-level="location"]').data("sek-is-footer-location"),a="preset_section"===t.dndData.content_type&&"content"===t.dndData.section_type,c=function(e){m(".sek-no-drop-possible-message",i).length<1&&i.append(['<div class="sek-no-drop-possible-message">','<i class="material-icons">not_interested</i>',e,"</div>"].join(""))};return(r||s)&&a?(c(r?sektionsLocalizedData.i18n["The header location only accepts modules and pre-built header sections"]:sektionsLocalizedData.i18n["The footer location only accepts modules and pre-built footer sections"]),!1):s&&"preset_section"===t.dndData.content_type&&"header"===t.dndData.section_type?(c(sektionsLocalizedData.i18n["You can't drop a header section in the footer location"]),!1):r&&"preset_section"===t.dndData.content_type&&"footer"===t.dndData.section_type?(c(sektionsLocalizedData.i18n["You can't drop a footer section in the header location"]),!1):i.hasClass("sek-drop-zone")&&("preset_section"===t.dndData.content_type&&n||"module"===t.dndData.content_type&&!n||"preset_section"===t.dndData.content_type&&o)},dnd_OnEnterOver:function(e,t){t.preventDefault(),!0!==e.data("is-drag-entered")&&(e.data("is-drag-entered",!0),e.addClass("sek-active-drop-zone"),this.$dropZones.addClass("sek-is-dragging"));try{this.dnd_mayBePrintPreDropElement(e,t)}catch(e){a.errare("Error when trying to insert the preDrop content",e)}},dnd_cleanOnLeaveDrop:function(e,t){var i=this;this.$dropZones=this.$dropZones||this.dnd_getDropZonesElements(),this.preDropElement.remove(),this.$dropZones.removeClass("sek-is-dragging"),m(sektionsLocalizedData.dropSelectors,this.$dropZones).each(function(){i.dnd_cleanSingleDropTarget(m(this))})},dnd_cleanSingleDropTarget:function(e){_.isEmpty(e)||e.length<1||(e.data("is-drag-entered",!1),e.data("preDrop-position",!1),e.removeClass("sek-active-drop-zone"),e.find(".sek-drop-zone").removeClass("sek-drag-is-close"),e.find(".sek-drop-zone").removeClass("sek-drag-is-approaching"),e.removeClass("sek-feed-me-seymore"),e.find(".sek-no-drop-possible-message").remove())},dnd_getPosition:function(e,t){var i=e[0].getBoundingClientRect(),n=i.height;return"before"===e.data("preDrop-position")?n+=this.preDropElement.outerHeight():"after"===e.data("preDrop-position")&&(n-=this.preDropElement.outerHeight()),0<t.originalEvent.clientY-i.top-n/2?"after":"before"},dnd_mayBePrintPreDropElement:function(e,t){var i=this,n=e.data("preDrop-position"),o=this.dnd_getPosition(e,t);if(n!==o&&!0!==i.isPrintingPreDrop){i.isPrintingPreDrop=!0,this.dnd_cleanSingleDropTarget(this.$currentPreDropTarget);var r="between-sections"===e.data("sek-location")||"in-empty-location"===e.data("sek-location");m.when(i.preDropElement.remove()).done(function(){e["before"===o?"prepend":"append"](i.preDropElement).find("."+sektionsLocalizedData.preDropElementClass).html(i.dnd_getPreDropElementContent(t)),e.find("."+sektionsLocalizedData.preDropElementClass).toggleClass("in-new-sektion",r),e.data("preDrop-position",o),e.addClass("sek-feed-me-seymore"),i.isPrintingPreDrop=!1,i.$currentPreDropTarget=e})}},dnd_isOveringDropTarget:function(e,t){var i=e[0].getBoundingClientRect(),n=t.clientX,o=t.clientY,r=i.left,s=i.right,a=i.top,c=i.bottom;return r<=n&&n-r<=s-r&&(a<=o&&o-a<=c-a)},dnd_onDrop:function(e,t){t.stopPropagation();this.dnd_getPosition(e,t),e.index();a.czr_sektions.trigger("sek-content-dropped",{drop_target_element:e,location:e.closest('[data-sek-level="location"]').data("sek-id"),before_module:e.data("drop-zone-before-module-or-nested-section"),after_module:e.data("drop-zone-after-module-or-nested-section"),before_section:e.data("drop-zone-before-section"),after_section:e.data("drop-zone-after-section"),content_type:t.originalEvent.dataTransfer.getData("sek-content-type"),content_id:t.originalEvent.dataTransfer.getData("sek-content-id"),section_type:t.originalEvent.dataTransfer.getData("sek-section-type"),is_user_section:"true"===t.originalEvent.dataTransfer.getData("sek-is-user-section")})},reactToDrop:function(){this.bind("sek-content-dropped",function(e){try{!function(e){if(!_.isObject(e))throw new Error("Invalid params provided");if(e.drop_target_element.length<1)throw new Error("Invalid drop_target_element");var t=e.drop_target_element,i="content-in-column";switch(t.data("sek-location")){case"between-sections":i="content-in-a-section-to-create";break;case"in-empty-location":e.is_first_section=!0,e.send_to_preview=!1,i="content-in-empty-location";break;case"between-columns":i="content-in-new-column"}if("preset_section"===e.content_type)if(t.hasClass("sek-module-drop-zone-for-first-module")){var n=t.closest('div[data-sek-level="section"]');1<n.find(".sek-sektion-inner").first().children('[data-sek-level="column"]').length?(i="preset-section-in-a-nested-section-to-create",e.is_nested=!0,e.in_column=t.closest('[data-sek-level="column"]').data("sek-id"),e.in_sektion=n.data("sek-id")):(e.sektion_to_replace=n.data("sek-id"),e.after_section=e.sektion_to_replace,e.in_column=n.closest('[data-sek-level="column"]').data("sek-id"),i="content-in-a-section-to-replace")}else"between-sections"===t.data("sek-location")&&(i="content-in-a-section-to-create");switch(i){case"content-in-column":var o=t.closest("div[data-sek-level]");if(o.length<1)throw new Error("No valid level dom element found");var r=o.data("sek-level"),s=o.data("sek-id");if(_.isEmpty(r)||_.isEmpty(s))throw new Error("No valid level id found");a.previewer.trigger("sek-add-module",{level:r,id:s,in_column:t.closest('div[data-sek-level="column"]').data("sek-id"),in_sektion:t.closest('div[data-sek-level="section"]').data("sek-id"),before_module:e.before_module,after_module:e.after_module,content_type:e.content_type,content_id:e.content_id});break;case"content-in-a-section-to-create":case"content-in-a-section-to-replace":a.previewer.trigger("sek-add-content-in-new-sektion",e);break;case"preset-section-in-a-nested-section-to-create":a.previewer.trigger("sek-add-preset-section-in-new-nested-sektion",e);break;case"content-in-empty-location":a.previewer.trigger("sek-add-content-in-new-sektion",e);break;default:a.errare("sek control panel => ::reactToDrop => invalid drop case : "+i)}}(e)}catch(e){a.errare("error when reactToDrop",e)}})}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(r,s){s.extend(CZRSeksPrototype,{setupTinyMceEditor:function(){var n=this;r.sekEditorExpanded=new r.Value(!1),r.sekEditorSynchronizedInput=new r.Value,n.editorEventsListenerSetup=!1;var o=function(){r.sekTinyMceEditor=r.sekTinyMceEditor||tinyMCE.get("czr-customize-content_editor"),!1===n.editorEventsListenerSetup&&(n.attachEventsToEditor(),n.editorEventsListenerSetup=!0,n.trigger("sek-tiny-mce-editor-bound-and-instantiated"))};n.bind("sek-edit-module_done",function(e){if(("tiny_mce_editor"===(e=_.isObject(e)?e:{}).clicked_input_type||"czr_tiny_mce_editor_module"===e.module_type)&&!_.isEmpty(e.syncedTinyMceInputId)){var i=e.id;if(!0===n.getRegisteredModuleProperty(e.module_type,"is_father")){var t=n.getRegisteredModuleProperty(e.module_type,"children");if(_.isEmpty(t))throw new Error("::generateUIforFrontModules => a father module "+e.module_type+" is missing children modules ");_.each(t,function(e,t){"czr_tinymce_child"===e&&(i=i+"__"+t)})}r.sekEditorSynchronizedInput({control_id:i,input_id:e.syncedTinyMceInputId}),r.sekEditorExpanded(!0),r.sekTinyMceEditor.focus()}}),s("#customize-theme-controls").on("click",'[data-czr-action="open-tinymce-editor"]',function(){var e=s(this).data("czr-control-id"),t=s(this).data("czr-input-id");if(_.isEmpty(e)||_.isEmpty(t))r.errare("toggle-tinymce-editor => missing input or control id");else{var i=s.extend(!0,{},r.sekEditorSynchronizedInput()),n=_.extend(i,{input_id:t,control_id:e});r.sekEditorSynchronizedInput(n),r.sekEditorExpanded(!0),r.sekTinyMceEditor.focus()}}),r.sekEditorSynchronizedInput.bind(function(n,e){o(),r(n.control_id,function(e){var t=e(),i=_.isObject(t)&&!_.isEmpty(t[n.input_id])?t[n.input_id]:"";i=i.replace(/\r?\n/g,"<br/>");try{r.sekTinyMceEditor.setContent(i)}catch(e){r.errare("Error when setting the tiny mce editor content in setupTinyMceEditor",e)}r.sekTinyMceEditor.focus()})}),r.sekEditorExpanded.bind(function(e,t,i){o(),e&&r.sekTinyMceEditor.focus(),s(document.body).toggleClass("czr-customize-content_editor-pane-open",e),s(window)[e?"on":"off"]("resize",function(){r.sekEditorExpanded()&&_.delay(function(){n.czrResizeEditor(window.innerHeight-n.$editorPane.height())},50)}),e?n.czrResizeEditor(window.innerHeight-n.$editorPane.height()):(n.$preview.css("bottom",""),n.$collapseSidebar.css("bottom",""))}),s("#czr-customize-content_editor-pane").on("click",'[data-czr-action="close-tinymce-editor"]',function(){r.sekEditorExpanded(!1)}),s("#customize-controls").on("click",function(e){"open-tinymce-editor"!=s(e.target).data("czr-action")&&r.sekEditorExpanded(!1,{context:"clicked anywhere"})}),s(document).on("keydown",_.throttle(function(e){27===e.keyCode&&r.sekEditorExpanded(!1)},50)),n.bind("sek-tiny-mce-editor-bound-and-instantiated",function(){var e=s(r.sekTinyMceEditor.iframeElement).contents().get(0);s(e).on("keydown",_.throttle(function(e){27===e.keyCode&&r.sekEditorExpanded(!1)},50))}),_.each(["sek-click-on-inactive-zone","sek-add-section","sek-add-column","sek-add-module","sek-remove","sek-move","sek-duplicate","sek-resize-columns","sek-add-content-in-new-sektion","sek-pick-content","sek-edit-options","sek-edit-module","sek-notify"],function(e){"sek-edit-module"!=e?r.previewer.bind(e,function(){r.sekEditorExpanded(!1)}):r.previewer.bind(e,function(e){r.sekEditorExpanded("czr_tiny_mce_editor_module"===e.module_type)})})},attachEventsToEditor:function(){var t=this;t.$editorTextArea=s("#czr-customize-content_editor"),t.$editorPane=s("#czr-customize-content_editor-pane"),t.$editorDragbar=s("#czr-customize-content_editor-dragbar"),t.$editorFrame=s("#czr-customize-content_editor_ifr"),t.$mceTools=s("#wp-czr-customize-content_editor-tools"),t.$mceToolbar=t.$editorPane.find(".mce-toolbar-grp"),t.$mceStatusbar=t.$editorPane.find(".mce-statusbar"),t.$preview=s("#customize-preview"),t.$collapseSidebar=s(".collapse-sidebar"),r.sekTinyMceEditor.on("input change keyup",function(e){if(r.control.has(r.sekEditorSynchronizedInput().control_id))try{r.control(r.sekEditorSynchronizedInput().control_id).trigger("tinyMceEditorUpdated",{input_id:r.sekEditorSynchronizedInput().input_id,html_content:r.sekTinyMceEditor.getContent(),modified_editor_element:r.sekTinyMceEditor})}catch(e){r.errare("Error when triggering tinyMceEditorUpdated",e)}}),t.$editorTextArea.on("input",function(e){try{r.control(r.sekEditorSynchronizedInput().control_id).trigger("tinyMceEditorUpdated",{input_id:r.sekEditorSynchronizedInput().input_id,html_content:t.$editorTextArea.val(),modified_editor_element:t.$editorTextArea})}catch(e){r.errare("Error when triggering tinyMceEditorUpdated",e)}}),s("#czr-customize-content_editor-pane").on("mousedown mouseup",function(e){if(("mousedown"!==e.type||"czr-customize-content_editor-dragbar"===s(e.target).attr("id")||s(e.target).hasClass("czr-resize-handle"))&&r.sekEditorExpanded())switch(e.type){case"mousedown":s(document).on("mousemove.czr-customize-content_editor",function(e){e.preventDefault(),s(document.body).addClass("czr-customize-content_editor-pane-resize"),t.$editorFrame.css("pointer-events","none"),t.czrResizeEditor(e.pageY)});break;case"mouseup":s(document).off("mousemove.czr-customize-content_editor"),s(document.body).removeClass("czr-customize-content_editor-pane-resize"),t.$editorFrame.css("pointer-events","")}})},czrResizeEditor:function(e){var t,i=this,n=window.innerHeight,o=(window.innerWidth,{});r.sekEditorExpanded()&&(_.isNaN(e)||(t=n-e),o.height=t,o.components=i.$mceTools.outerHeight()+i.$mceToolbar.outerHeight()+i.$mceStatusbar.outerHeight(),t<40&&(o.height=40),n-1<t&&(o.height=n-1),n<i.$editorPane.outerHeight()&&(o.height=n),i.$preview.css("bottom",o.height),i.$editorPane.css("height",o.height),i.$editorFrame.css("height",o.height-o.components),i.$collapseSidebar.css("bottom",n-o.height<56?i.$mceStatusbar.outerHeight()+4:o.height+8))}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(t,e){jQuery.extend(CZRSeksPrototype,t.Events);var i=t.Class.extend(CZRSeksPrototype);try{t.czr_sektions=new i}catch(e){t.errare("api.czr_sektions => problem on instantiation",e)}}(wp.customize),function(l,d,u){l.czrInputMap=l.czrInputMap||{};var p=function(e){return u.contains(["px","em","%"],e)||(l.errare("error : invalid unit for input "+this.id,e),e="px"),e},_=function(i){var n=this;i.on("click",".sek-ui-button",function(e,t){e.preventDefault(),i.find(".sek-ui-button").removeClass("is-selected").attr("aria-pressed",!1),d(this).addClass("is-selected").attr("aria-pressed",!0),n.css_unit(d(this).data("sek-unit"),t)}),i.find('.sek-ui-button[data-sek-unit="'+(n.initial_unit||"px")+'"]').addClass("is-selected").attr("aria-pressed",!0)},m=function(t,i){var n=this;t.on("click",".reset-spacing-wrap",function(e){e.preventDefault(),t.find('input[type="number"]').each(function(){d(this).val("")}),n(i),d(".sek-unit-wrapper",t).find('[data-sek-unit="px"]').trigger("click")})};d.extend(l.czrInputMap,{spacing:function(e){var o=this,i=d(".sek-spacing-wrapper",o.container),t=l.czr_sektions.getInputRegistrationParams(o.id,o.module.module_type),n=u.isEmpty(t)||u.isEmpty(t.default)?[]:t.default;if(i.on("input",'input[type="number"]',function(e){var t=d(this).closest("[data-sek-spacing]").data("sek-spacing"),i=d.extend(!0,{},u.isObject(o())?o():{}),n=d(this).val();u.isString(n)&&!u.isEmpty(n)||u.isNumber(n)?i[t]=n:i=u.omit(i,t),o(i)}),m.call(o,i,n),u.isObject(o())){u.each(o(),function(e,t){d('[data-sek-spacing="'+t+'"]',i).find('input[type="number"]').val(e)});var r="px";d(".sek-unit-wrapper .sek-ui-button",o.container).each(function(){var e=d(this).data("sek-unit");u.isEmpty(o())||u.isEmpty(o().unit)||e===o().unit&&(r=e)}),d(".sek-unit-wrapper",o.container).find('[data-sek-unit="'+p.call(o,r)+'"]').trigger("click")}var s=o();o.initial_unit="px",u.isEmpty(s)||(o.initial_unit=u.isEmpty(s.unit)?"px":s.unit),o.css_unit=new l.Value(p.call(o,o.initial_unit)),o.css_unit.bind(function(e){var t;e=u.isEmpty(e)?"px":e,(t=d.extend(!0,{},u.isObject(o())?o():{})).unit=e,o(t)}),_.call(o,i)}}),d.extend(l.czrInputMap,{spacingWithDeviceSwitcher:function(e){var r=this,s=d(".sek-spacing-wrapper",r.container),t=l.czr_sektions.getInputRegistrationParams(r.id,r.module.module_type),a=u.isEmpty(t)||u.isEmpty(t.default)?{}:t.default,c=function(e,t){var i=["mobile","tablet","desktop"];if(u.has(e,t))return e[t];var n=u.findIndex(i,function(e){return t===e});return!u.isEmpty(t)&&n<i.length?c(e,i[n+1]):{}},i=function(e){var t=d.extend(!0,{},u.isObject(r())?r():{}),i=d.extend(!0,{},a);t=u.isObject(t)?d.extend(i,t):i;var n=c(t,e);d("[data-sek-spacing]",s).each(function(){var e=d(this).data("sek-spacing"),t="";u.isEmpty(n)||u.isEmpty(n[e])||(t=n[e]),d(this).find('input[type="number"]').val(t)});var o="px";d(".sek-unit-wrapper .sek-ui-button",r.container).each(function(){var e=d(this).data("sek-unit");u.isEmpty(n)||u.isEmpty(n.unit)||e===n.unit&&(o=e)}),d(".sek-unit-wrapper",r.container).find('[data-sek-unit="'+p.call(r,o)+'"]').trigger("click",{previewed_device_switched:!0})};l.czr_sektions.maybeSetupDeviceSwitcherForInput.call(r);var n=r();r.initial_unit="px",u.isEmpty(n)||u.isEmpty(n[r.previewedDevice()])||(r.initial_unit=u.isEmpty(n[r.previewedDevice()].unit)?"px":n[r.previewedDevice()].unit),r.css_unit=new l.Value(p.call(r,r.initial_unit)),s.on("input",'input[type="number"]',function(e){var t,i=d(this).closest("[data-sek-spacing]").data("sek-spacing"),n=d(this).val(),o=l.previewedDevice()||"desktop";(t=d.extend(!0,{},u.isObject(r())?r():{}))[o]=d.extend(!0,{},t[o]||{}),u.isString(n)&&!u.isEmpty(n)||u.isNumber(n)?t[o][i]=n:t[o]=u.omit(t[o],i),r(t)}),m.call(r,s,a),r.previewedDevice.bind(function(e){try{i(e)}catch(e){l.errare("Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id "+r.id,e)}}),r.css_unit.bind(function(e,t,i){if(!u.isObject(i)||!0!==i.previewed_device_switched){e=u.isEmpty(e)?"px":e;var n,o=r.previewedDevice()||"desktop";(n=d.extend(!0,{},u.isObject(r())?r():{}))[o]=d.extend(!0,{},n[o]||{}),n[o].unit=e,r(n)}}),_.call(r,s);try{i(l.previewedDevice())}catch(e){l.errare("Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id "+r.id,e)}}})}(wp.customize,jQuery,_),function(n,a,c){n.czrInputMap=n.czrInputMap||{},a.extend(n.czrInputMap,{bg_position:function(e){var t=this;a(".sek-bg-pos-wrapper",t.container).on("change",'input[type="radio"]',function(e){t(a(this).val())}),c.isEmpty(t())||t.container.find('input[value="'+t()+'"]').attr("checked",!0).trigger("click")},bgPositionWithDeviceSwitcher:function(e){var o=this,t=n.czr_sektions.getInputRegistrationParams(o.id,o.module.module_type),r=c.isEmpty(t)||c.isEmpty(t.default)?{}:t.default;n.czr_sektions.maybeSetupDeviceSwitcherForInput.call(o);var s=function(e,t){var i=["mobile","tablet","desktop"];if(c.has(e,t))return e[t];var n=c.findIndex(i,function(e){return t===e});return!c.isEmpty(t)&&n<i.length?s(e,i[n+1]):{}},i=function(e){var t=a.extend(!0,{},c.isObject(o())?o():{}),i=a.extend(!0,{},r);t=c.isObject(t)?a.extend(i,t):i;var n=s(t,e);o.container.find('input[value="'+n+'"]').attr("checked",!0).trigger("click",{previewed_device_switched:!0})};a(".sek-bg-pos-wrapper",o.container).on("change",'input[type="radio"]',function(e){var t,i=a(this).val();(t=a.extend(!0,{},c.isObject(o())?o():{}))[n.previewedDevice()||"desktop"]=i,o(t)}),o.previewedDevice.bind(function(e){try{i(e)}catch(e){n.errare("Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id "+o.id,e)}});try{i(n.previewedDevice())}catch(e){n.errare("Error when firing syncWithPreviewedDevice for input type bgPositionWithDeviceSwitcher for input id "+o.id,e)}}})}(wp.customize,jQuery,_),function(c,l,d){c.czrInputMap=c.czrInputMap||{};var e=function(e){var o=this,t=c.czr_sektions.getInputRegistrationParams(o.id,o.module.module_type),r=d.isEmpty(t)||d.isEmpty(t.default)?{}:t.default,i="verticalAlignWithDeviceSwitcher"===o.type?".sek-v-align-wrapper":".sek-h-align-wrapper",s=l(i,o.container);c.czr_sektions.maybeSetupDeviceSwitcherForInput.call(o);var a=function(e,t){var i=["mobile","tablet","desktop"];if(d.has(e,t))return e[t];var n=d.findIndex(i,function(e){return t===e});return!d.isEmpty(t)&&n<i.length?a(e,i[n+1]):{}},n=function(e){var t=l.extend(!0,{},d.isObject(o())?o():{}),i=l.extend(!0,{},r);t=d.isObject(t)?l.extend(i,t):i;var n=a(t,e);s.find(".selected").removeClass("selected"),s.find('div[data-sek-align="'+n+'"]').addClass("selected")};s.on("click","[data-sek-align]",function(e){var t;e.preventDefault(),(t=l.extend(!0,{},d.isObject(o())?o():{}))[c.previewedDevice()||"desktop"]=l(this).data("sek-align"),s.find(".selected").removeClass("selected"),l.when(l(this).addClass("selected")).done(function(){o(t)})}),o.previewedDevice.bind(function(e){try{n(e)}catch(e){c.errare("Error when firing syncWithPreviewedDevice for input type : "+o.type+" for input id "+o.id,e)}});try{n(c.previewedDevice())}catch(e){c.errare("Error when firing syncWithPreviewedDevice for input type : "+o.type+" for input id "+o.id,e)}};l.extend(c.czrInputMap,{horizTextAlignmentWithDeviceSwitcher:e,horizAlignmentWithDeviceSwitcher:e,verticalAlignWithDeviceSwitcher:e})}(wp.customize,jQuery,_),function(t,e,i){t.czrInputMap=t.czrInputMap||{},e.extend(t.czrInputMap,{font_size:function(e){t.czr_sektions.setupFontSizeAndLineHeightInputs.call(this)}})}(wp.customize,jQuery,_),function(t,e,i){t.czrInputMap=t.czrInputMap||{},e.extend(t.czrInputMap,{line_height:function(e){t.czr_sektions.setupFontSizeAndLineHeightInputs.call(this)}})}(wp.customize,jQuery,_),function(i,c,l){i.czrInputMap=i.czrInputMap||{},c.extend(i.czrInputMap,{font_picker:function(e){var a=this,o=a.input_parent,n=function(e,t){o();var n=c('select[data-czrtype="'+a.id+'"]',a.container);l.isNull(a())||l.isEmpty(a())?n.append('<option value="none" selected="selected">'+sektionsLocalizedData.i18n["Select a font family"]+"</option>"):n.append('<option value="none">'+sektionsLocalizedData.i18n["Select a font family"]+"</option>"),l.each([{title:sektionsLocalizedData.i18n["Web Safe Fonts"],type:"cfont",list:t.cfonts},{title:sektionsLocalizedData.i18n["Google Fonts"],type:"gfont",list:t.gfonts}],function(e){var t,r,s,i=c("<optgroup>",{label:e.title,html:(t=e.list,r=e.type,s="",l.each(t,function(e){var t,i,n=e.name,o=l.isString(n)?n.replace(/[+|:]/g," "):n;t=n,i=r,(n=l.isString(t)?["[",i,"]",t].join(""):"")==a()?s+='<option selected="selected" value="'+n+'">'+o+"</option>":s+='<option value="'+n+'">'+o+"</option>"}),s)});n.append(i)});var i={escapeMarkup:function(e){return e}};e&&c.extend(i,{resultsAdapter:e,closeOnSelect:!1}),n.czrSelect2(i),c(".czrSelect2-selection__rendered",a.container).css(r(a()))},r=function(e){if(!l.isString(e)||l.isEmpty(e))return{};var t,i,n,o=(e=e.replace("[gfont]","").replace("[cfont]","")).split(":");return t=s(e),i=o[1]?o[1].replace(/[^0-9.]+/g,""):400,i=l.isNumber(i)?i:400,n=o[1]&&-1!=o[1].indexOf("italic")?"italic":"",{"font-family":"none"==t?"inherit":t.replace(/[+|:]/g," "),"font-weight":i||400,"font-style":n||"normal"}},s=function(e){if(!l.isString(e)||l.isEmpty(e))return e;var t=(e=e.replace("[gfont]","").replace("[cfont]","")).split(":");return l.isString(t[0])?t[0].replace(/[+|:]/g," "):""};c.when(function(){var e,t=c.Deferred();l.isEmpty(i.sek_fontCollections)?(l.isUndefined(i.sek_fetchingFontCollection)||"pending"!=i.sek_fetchingFontCollection.state()?(e=i.CZR_Helpers.getModuleTmpl({tmpl:"font_list",module_type:"font_picker_input",module_id:a.module.id}),i.sek_fetchingFontCollection=e):e=i.sek_fetchingFontCollection,e.done(function(e){if("string"!=typeof e||"{"!==e[0])throw new Error("font_picker => server list is not JSON.parse-able");i.sek_fontCollections=JSON.parse(e),t.resolve(i.sek_fontCollections)}).fail(function(e){t.reject(e)})):t.resolve(i.sek_fontCollections);return t.promise()}()).done(function(t){var i;(i=c.Deferred(),void 0!==c.fn.czrSelect2&&void 0!==c.fn.czrSelect2.amd&&"function"==typeof c.fn.czrSelect2.amd.require?c.fn.czrSelect2.amd.require(["czrSelect2/results","czrSelect2/utils"],function(e,t){var n=function(e,t,i){n.__super__.constructor.call(this,e,t,i)};t.Extend(n,e),n.prototype.bind=function(e,t){var i=this;e.on("results:focus",function(e){"true"!=e.element.attr("aria-selected")&&i.trigger("select",{data:e.data})}),n.__super__.bind.call(this,e,t)},i.resolve(n)}):i.resolve(!1),i.promise()).done(function(e){n(e,t)})}).fail(function(e){i.errare("font_picker => fail response =>",e)})}})}(wp.customize,jQuery,_),function(r,s,a){r.czrInputMap=r.czrInputMap||{},s.extend(r.czrInputMap,{fa_icon_picker:function(){var n=this,o=!1,e=function(t){!0!==n.iconCollectionSet&&(s.when(s.Deferred(function(t){a.isEmpty(n.sek_faIconCollection)?r.CZR_Helpers.getModuleTmpl({tmpl:"icon_list",module_type:"fa_icon_picker_input",module_id:n.module.id}).done(function(e){if("string"!=typeof e||"["!==e[0])throw new Error("fa_icon_picker => server list is not JSON.parse-able");n.sek_faIconCollection=JSON.parse(e),t.resolve(n.sek_faIconCollection)}).fail(function(e){t.reject(e)}):t.resolve(n.sek_faIconCollection)})).done(function(e){!function(e){a.each(e,function(e){var t={value:e,html:r.CZR_Helpers.capitalize(e.substring(7))};t.value==n()&&(s.extend(t,{selected:"selected"}),o=!0),s("select[data-czrtype]",n.container).append(s("<option>",t))});var t,i=function(e){return e.id?s('<span class="'+e.element.value+'"></span><span class="social-name">&nbsp;&nbsp;'+e.text+"</span>"):e.text};t=o?s("<option>"):s("<option>",{selected:"selected"}),s("select[data-czrtype]",n.container).prepend(t).czrSelect2({templateResult:i,templateSelection:i,placeholder:sektionsLocalizedData.i18n["Select an icon"],allowClear:!0})}(e),t&&!0===t.open_on_init&&a.delay(function(){try{s("select[data-czrtype]",n.container).czrSelect2("open")}catch(e){}},100)}).fail(function(e){r.errare("fa_icon_picker => fail response =>",e)}),n.iconCollectionSet=!0)};n.container.on("click",function(){e()}),a.delay(function(){e({open_on_init:!1})},1e3)}})}(wp.customize,jQuery,_),function(d,u,p){d.czrInputMap=d.czrInputMap||{},u.extend(d.czrInputMap,{code_editor:function(e){var n=this,i=this.module.control,t=(n.input_parent(),!1),r=n.container.find("textarea"),o=n.container.find(".customize-control-title"),s=r.data("editor-params");wp.codeEditor&&(p.isUndefined(s)||!1!==s)&&(t=s),n.isReady.done(function(){var e=function(e){p.isEmpty(this.editor)&&(p.isEmpty(this.module.control.container.attr("data-sek-expanded"))||"false"==this.module.control.container.attr("data-sek-expanded")||setTimeout(function(){if(t)try{a(t)}catch(e){d.errare("error in sek_control => code_editor() input",e),c()}else c();o.click()},10))};e.call(n),n.module.control.container.on("sek-accordion-expanded",function(){e.call(n)})});var a=function(e){var t,i=!1;t=p.extend({},e,{onTabNext:CZRSeksPrototype.selectNextTabbableOrFocusable(":tabbable"),onTabPrevious:CZRSeksPrototype.selectPrevTabbableOrFocusable(":tabbable"),onUpdateErrorNotice:l}),n.editor=wp.codeEditor.initialize(r,t),u(n.editor.codemirror.display.lineDiv).attr({role:"textbox","aria-multiline":"true","aria-label":o.html(),"aria-describedby":"editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4"}),o.on("click",function(e){e.stopPropagation(),n.editor.codemirror.focus()}),n.editor.codemirror.on("change",function(e){i=!0,r.val(e.getValue()).trigger("change"),i=!1}),n.editor.codemirror.setValue(n()),n.bind(n.id+":changed",function(e){i||n.editor.codemirror.setValue(e)}),n.editor.codemirror.on("keydown",function(e,t){27===t.keyCode&&t.stopPropagation()})},c=function(){var o=r[0];n.editor=o,r.on("blur",function(){r.data("next-tab-blurs",!1)}),r.on("keydown",function(e){var t,i,n;27!==e.keyCode?9!==e.keyCode||e.ctrlKey||e.altKey||e.shiftKey||r.data("next-tab-blurs")||(t=o.selectionStart,i=o.selectionEnd,n=o.value,0<=t&&(o.value=n.substring(0,t).concat("\t",n.substring(i)),r.selectionStart=o.selectionEnd=t+1),e.stopPropagation(),e.preventDefault()):r.data("next-tab-blurs")||(r.data("next-tab-blurs",!0),e.stopPropagation())})},l=function(e){var t;i.setting.notifications.remove(n.id),0!==e.length&&(t=1===e.length?sektionsLocalizedData.i18n.codeEditorSingular.replace("%d","1").replace("%s",o.html()):sektionsLocalizedData.i18n.codeEditorPlural.replace("%d",String(e.length)).replace("%s",o.html()),i.setting.notifications.add(n.id,new d.Notification(n.id,{message:t,type:"warning"})))}}})}(wp.customize,jQuery,_),function(e,r,t){e.czrInputMap=e.czrInputMap||{},r.extend(e.czrInputMap,{range_simple:function(e){var t=this,i=r(".sek-range-with-unit-picker-wrapper",t.container),n=i.find('input[type="number"]'),o=i.find('input[type="range"]');o.on("input",function(e){n.val(r(this).val()).trigger("input")}),n.on("input",function(e){t(r(this).val()),o.val(r(this).val())}),o.val(n.val()||0)}})}(wp.customize,jQuery,_),function(a,c,l){a.czrInputMap=a.czrInputMap||{},c.extend(a.czrInputMap,{range_with_unit_picker:function(e){var t=this,i=c(".sek-range-with-unit-picker-wrapper",t.container),n=i.find('input[type="number"]'),o=i.find('input[type="range"]'),r=i.find("input[data-czrtype]").data("sek-unit"),s=function(e){return l.contains(["px","em","%"],e)||(a.errare("error : invalid unit for input "+t.id,e),e="px"),e};t.css_unit=new a.Value(l.isEmpty(r)?"px":s(r)),t.css_unit.bind(function(e){e=l.isEmpty(e)?"px":e,i.find('input[type="number"]').trigger("input")}),o.on("input",function(e){n.val(c(this).val()).trigger("input")}),n.on("input",function(e){t(c(this).val()+s(t.css_unit())),o.val(c(this).val())}),o.val(n.val()||0),i.on("click",".sek-ui-button",function(e){e.preventDefault(),i.find(".sek-ui-button").removeClass("is-selected").attr("aria-pressed",!1),c(this).addClass("is-selected").attr("aria-pressed",!0),i.find("input[data-czrtype]").data("sek-unit",c(this).data("sek-unit")),t.css_unit(c(this).data("sek-unit"))}),i.find('.sek-ui-button[data-sek-unit="'+r+'"]').addClass("is-selected").attr("aria-pressed",!0)}})}(wp.customize,jQuery,_),function(a,_,m){a.czrInputMap=a.czrInputMap||{},_.extend(a.czrInputMap,{range_with_unit_picker_device_switcher:function(e){var c=this,l=_(".sek-range-with-unit-picker-wrapper",c.container),d=l.find('input[type="number"]'),r=l.find('input[type="range"]'),s=function(e){return m.contains(["px","em","%"],e)||(a.errare("range_with_unit_picker_device_switcher => error : invalid unit for input "+c.id,e),e="px"),e},t=a.czr_sektions.getInputRegistrationParams(c.id,c.module.module_type),u=m.isEmpty(t)||m.isEmpty(t.default)?{}:t.default,i=function(){return l.find("input[data-czrtype]").data("sek-unit")||"px"},p=function(e,t){var i=["mobile","tablet","desktop"];if(m.has(e,t))return e[t];var n=m.findIndex(i,function(e){return t===e});return!m.isEmpty(t)&&n<i.length?p(e,i[n+1]):_.extend(!0,{desktop:""},u).desktop},n=function(e){var t=c(),i={};i=_.extend(!0,{},u),m.isObject(t)?i=_.extend(!0,{},t):m.isString(t)&&!m.isEmpty(t)&&(i={desktop:t});var n,o,r=p(i,e),s=(o=r,m.isEmpty(o)||!m.isString(o)?"px":o.replace(/[0-9]|\.|,/g,"")),a=(n=r,m.isEmpty(n)||!m.isString(n)?"16":n.replace(/px|em|%/g,""));_(".sek-unit-wrapper",l).find('[data-sek-unit="'+s+'"]').trigger("click",{previewed_device_switched:!0}),l.find('.sek-ui-button[data-sek-unit="'+s+'"]').addClass("is-selected").attr("aria-pressed",!0),d.val(a).trigger("input",{previewed_device_switched:!0})};a.czr_sektions.maybeSetupDeviceSwitcherForInput.call(c),c.css_unit=new a.Value(m.isEmpty(i())?"px":s(i()));var o='<button type="button" class="button sek-reset-button sek-float-right">'+sektionsLocalizedData.i18n.Reset+"</button>";c.container.find(".customize-control-title").append(o),c.css_unit.bind(function(e,t,i){m.isObject(i)&&!0===i.previewed_device_switched||d.trigger("input")}),r.on("input",function(e){d.val(_(this).val()).trigger("input")}),d.on("input",function(e,t){var i,n=a.previewedDevice()||"desktop",o=_(this).val()+s(c.css_unit());(i=_.extend(!0,{},m.isObject(c())?c():{}))[n]=_.extend(!0,{},i[n]||{}),m.isString(o)&&!m.isEmpty(o)&&(i[n]=o),(m.isEmpty(t)||m.isObject(t)&&!0!==t.previewed_device_switched)&&c(i),r.val(_(this).val())}),l.on("click",".sek-ui-button",function(e,t){e.stopPropagation(),l.find(".sek-ui-button").removeClass("is-selected").attr("aria-pressed",!1),_(this).addClass("is-selected").attr("aria-pressed",!0),l.find("input[data-czrtype]").data("sek-unit",_(this).data("sek-unit")),c.css_unit(_(this).data("sek-unit"),t)}),c.previewedDevice.bind(function(e){try{n(e)}catch(e){a.errare("Error when firing syncWithPreviewedDevice for input type range_with_unit_picker_device_switcher for input id "+c.id,e)}}),c.container.on("click",".sek-reset-button",function(e){var t=a.previewedDevice(),i=_.extend(!0,{},m.isObject(c())?c():{});m.isEmpty(i[t])||(i=m.omit(i,t),c(i),n(a.previewedDevice()))}),r.val(d.val()||0);try{n(a.previewedDevice())}catch(e){a.errare("Error when firing syncWithPreviewedDevice for input type range_with_unit_picker_device_switcher for input id "+c.id,e)}}})}(wp.customize,jQuery,_),function(g,h,k){g.czrInputMap=g.czrInputMap||{},h.extend(g.czrInputMap,{borders:function(e){var a=this,c=h(".sek-borders",a.container),l=c.find('input[type="number"]'),d=c.find('input[type="range"]'),u=c.find(".sek-alpha-color-input"),p=function(e){return k.contains(["px","em","%"],e)||(g.errare("borders => error : invalid unit for input "+a.id,e),e="px"),e},_=function(e){return k.isEmpty(e)||!k.isString(e)?"16":e.replace(/px|em|%/g,"")},m=function(e){return k.isEmpty(e)||!k.isString(e)?"px":e.replace(/[0-9]|\.|,/g,"")},t=g.czr_sektions.getInputRegistrationParams(a.id,a.module.module_type),f=k.isEmpty(t)||k.isEmpty(t.default)?{}:t.default;a.cssBorderTypes=["top","left","right","bottom"];var i,n,o=function(){var e=a(),t="px";return k.isObject(e)&&k.has(e,"_all_")&&k.isObject(e._all_)&&!k.isEmpty(e._all_.wght)&&(t=p(m(e._all_.wght))),t},r=function(){var e=a(),t="#000000";return k.isObject(e)&&k.has(e,"_all_")&&k.isObject(e._all_)&&!k.isEmpty(e._all_.col)&&(t=e._all_.col),t},s=function(e){if(!k.contains(k.union(a.cssBorderTypes,["_all_"]),e))throw new Error("Error in syncWithBorderType : the border type must be one of those values '_all_', 'top', 'left', 'right', 'bottom'");var t=a(),i={},n=h.extend(!0,{},f);k.isObject(t)?i=h.extend(!0,{},t):k.isString(t)&&(i={_all_:{wght:t}});var o,r,s=function(e,t){var i,n=h.extend(!0,{},f);if(!k.has(n,"_all_"))throw new Error("Error when firing getCurrentBorderTypeOrAllValue : the default value of the borders input must be php registered as an array formed : array( 'wght' => '1px', 'col' => '#000000' )");return i=k.isObject(e)&&k.has(e,"_all_")?k.extend(n._all_,e._all_):n._all_,k.has(e,t)&&k.isObject(e[t])?k.extend(i,e[t]):n._all_}(i=h.extend(n,i),e);if(k.isEmpty(s)||!k.isObject(s)||k.isEmpty(s.wght)||k.isEmpty(s.col))throw new Error("Error in syncWithBorderType : getCurrentBorderTypeOrAllValue must return an object formed : array( 'wght' => '1px', 'col' => '#000000' )");o=m(s.wght),r=_(s.wght),h(".sek-unit-wrapper",c).find('[data-sek-unit="'+o+'"]').trigger("click",{border_type_switched:!0}),c.find('.sek-ui-button[data-sek-unit="'+o+'"]').addClass("is-selected").attr("aria-pressed",!0),l.val(r).trigger("input",{border_type_switched:!0}),u.data("border_type_switched",!0),u.val(s.col).trigger("change"),u.data("border_type_switched",!1)};a.borderColor=new g.Value(k.isEmpty(r())?"#000000":r()),a.css_unit=new g.Value(k.isEmpty(o())?"px":p(o())),a.borderType=new g.Value("_all_"),l.val((i=a(),n=1,k.isObject(i)&&k.has(i,"_all_")&&k.isObject(i._all_)&&!k.isEmpty(i._all_.wght)&&(n=_(i._all_.wght)),n=parseInt(n,10),(!k.isNumber(n)||n<0)&&(g.errare("Error in borders input type for module : "+a.module.module_type+" the initial border width is invalid : "+n),n=1),n)),u.val(a.borderColor()),u.wpColorPicker({palettes:!0,width:1440<=window.innerWidth?271:251,change:function(e,t){h(this).val(t.color.toString()).trigger("colorpickerchange"),a.borderColor(t.color.toString(),{border_type_switched:!0===h(this).data("border_type_switched")})},clear:function(e,t){h(this).val("").trigger("colorpickerchange"),a.borderColor("")}}),a.css_unit.bind(function(e,t,i){(!k.isObject(i)||!0!==i.border_type_switched&&!0!==i.initializing_the_unit)&&l.trigger("input",i)}),a.borderColor.bind(function(e,t,i){(!k.isObject(i)||!0!==i.border_type_switched&&!0!==i.initializing_the_color)&&l.trigger("input",i)}),a.borderType.bind(function(e){try{s(e)}catch(e){g.errare("Error when firing syncWithBorderType for input type borders for module type "+a.module.module_type,e)}}),d.on("input",function(e){l.val(h(this).val()).trigger("input")}),l.on("input",function(e,t){var i,n=a.borderType()||"_all_",o=a.borderColor(),r=h(this).val()+p(a.css_unit()),s=h.extend(!0,{},f);(i=h.extend(!0,{},k.isObject(a())?a():s))[n]=h.extend(!0,{},i[n]||s[n]),k.isString(r)&&!k.isEmpty(r)&&(i[n].wght=r),i[n].col=o,(k.isEmpty(t)||k.isObject(t)&&!0!==t.border_type_switched)&&("_all_"===n&&k.each(a.cssBorderTypes,function(e){i=k.omit(i,e)}),a(i)),d.val(h(this).val())}),c.on("click","[data-sek-unit]",function(e,t){e.preventDefault(),c.find("[data-sek-unit]").removeClass("is-selected").attr("aria-pressed",!1),h(this).addClass("is-selected").attr("aria-pressed",!0),c.find("input[data-czrtype]").data("sek-unit",h(this).data("sek-unit")),a.css_unit(h(this).data("sek-unit"),t)}),c.on("click","[data-sek-border-type]",function(e,t){e.preventDefault(),c.find("[data-sek-border-type]").removeClass("is-selected").attr("aria-pressed",!1),h(this).addClass("is-selected").attr("aria-pressed",!0);var i="_all_";try{i=h(this).data("sek-border-type")}catch(e){g.errare("borders input type => error when attaching click event",e)}a.borderType(i,t)}),a.container.on("click",".sek-reset-button",function(e){var t=a.borderType()||"_all_",i=h.extend(!0,{},k.isObject(a())?a():{});k.isEmpty(i[t])||(i=k.omit(i,t),a(i),s(t))}),d.val(l.val()||0);try{s(a.borderType())}catch(e){g.errare("Error when firing syncWithBorderType for input type borders for module type "+a.module.module_type,e)}h('[data-sek-unit="'+a.css_unit()+'"]',c).trigger("click",{initializing_the_unit:!0})}})}(wp.customize,jQuery,_),function(m,f,g){m.czrInputMap=m.czrInputMap||{},f.extend(m.czrInputMap,{border_radius:function(e){var a=this,c=f(".sek-borders",a.container),l=c.find('input[type="number"]'),s=c.find('input[type="range"]'),d=function(e){return g.contains(["px","em","%"],e)||(m.errare("border_radius => error : invalid unit for input "+a.id,e),e="px"),e},u=function(e){return g.isEmpty(e)||!g.isString(e)?"16":e.replace(/px|em|%/g,"")},p=function(e){return g.isEmpty(e)||!g.isString(e)?"px":e.replace(/[0-9]|\.|,/g,"")},t=m.czr_sektions.getInputRegistrationParams(a.id,a.module.module_type),_=g.isEmpty(t)||g.isEmpty(t.default)?{}:t.default;a.cssRadiusTypes=["top_left","top_right","bottom_right","bottom_left"];var i,n,o=function(){var e=a(),t="px";return g.isObject(e)&&g.has(e,"_all_")&&(t=d(p(e._all_))),t},r=function(e){if(!g.contains(["_all_","top_left","top_right","bottom_right","bottom_left"],e))throw new Error("Error in syncWithRadiusType : the radius type must be one of those values '_all_', 'top_left', 'top_right', 'bottom_right', 'bottom_left', => radius type => "+e);var t=a(),i={},n=f.extend(!0,{},_);g.isObject(t)?i=f.extend(!0,{},t):g.isString(t)&&(i={_all_:"0px"});var o,r,s=function(e,t){var i,n=f.extend(!0,{},_);if(!g.has(n,"_all_"))throw new Error("Error when firing getCurrentRadiusTypeOrAllValue : the default value of the border_radius input must be php registered as an array");return i=g.isObject(e)&&g.has(e,"_all_")?e._all_:n._all_,g.has(e,t)?e[t]:i}(i=f.extend(n,i),e);if(g.isEmpty(s)||!g.isString(s))throw new Error("Error in syncWithRadiusType : getCurrentRadiusTypeOrAllValue must return a string like 3em");o=p(s),r=u(s),f(".sek-unit-wrapper",c).find('[data-sek-unit="'+o+'"]').trigger("click",{radius_type_switched:!0}),c.find('.sek-ui-button[data-sek-unit="'+o+'"]').addClass("is-selected").attr("aria-pressed",!0),l.val(r).trigger("input",{radius_type_switched:!0})};a.css_unit=new m.Value(g.isEmpty(o())?"px":d(o())),a.radiusType=new m.Value("_all_"),l.val((i=a(),n=0,g.isObject(i)&&g.has(i,"_all_")&&(n=u(i._all_)),n=parseInt(n,10),(!g.isNumber(n)||n<0)&&(m.errare("Error in border_radius input type for module : "+a.module.module_type+" the initial radius is invalid : "+n),n=0),n)),a.css_unit.bind(function(e,t,i){(!g.isObject(i)||!0!==i.radius_type_switched&&!0!==i.initializing_the_unit)&&l.trigger("input",i)}),a.radiusType.bind(function(e){try{r(e)}catch(e){m.errare("Error when firing syncWithRadiusType for input type border_radius for module type "+a.module.module_type,e)}}),s.on("input",function(e){l.val(f(this).val()).trigger("input")}),l.on("input",function(e,t){var i,n=a.radiusType()||"_all_",o=f(this).val()+d(a.css_unit()),r=f.extend(!0,{},_);(i=f.extend(!0,{},g.isObject(a())?a():r))[n]=f.extend(!0,{},i[n]||r[n]),g.isString(o)&&!g.isEmpty(o)&&(i[n]=o),(g.isEmpty(t)||g.isObject(t)&&!0!==t.radius_type_switched)&&("_all_"===n&&g.each(a.cssRadiusTypes,function(e){i=g.omit(i,e)}),a(i)),s.val(f(this).val())}),c.on("click","[data-sek-unit]",function(e,t){e.preventDefault(),c.find("[data-sek-unit]").removeClass("is-selected").attr("aria-pressed",!1),f(this).addClass("is-selected").attr("aria-pressed",!0),c.find("input[data-czrtype]").data("sek-unit",f(this).data("sek-unit")),a.css_unit(f(this).data("sek-unit"),t)}),c.on("click","[data-sek-radius-type]",function(e,t){e.preventDefault(),c.find("[data-sek-radius-type]").removeClass("is-selected").attr("aria-pressed",!1),f(this).addClass("is-selected").attr("aria-pressed",!0);var i="_all_";try{i=f(this).data("sek-radius-type")}catch(e){m.errare("border_radius input type => error when attaching click event",e)}a.radiusType(i,t)}),a.container.on("click",".sek-reset-button",function(e){var t=a.radiusType()||"_all_",i=f.extend(!0,{},g.isObject(a())?a():{});g.isEmpty(i[t])||(i=g.omit(i,t),a(i),r(t))}),s.val(l.val()||0);try{r(a.radiusType())}catch(e){m.errare("Error when firing syncWithRadiusType for input type border_radius for module type "+a.module.module_type,e)}f('[data-sek-unit="'+a.css_unit()+'"]',c).trigger("click",{initializing_the_unit:!0})}})}(wp.customize,jQuery,_),function(r,s,a){r.czrInputMap=r.czrInputMap||{},s.extend(r.czrInputMap,{buttons_choice:function(e){var n=this,o=s(".sek-button-choice-wrapper",n.container),t=o.find('input[type="number"]'),i=r.czr_sektions.getInputRegistrationParams(n.id,n.module.module_type);a.isEmpty(i)||a.isEmpty(i.default)||i.default;t.val(n()),o.on("click","[data-sek-choice]",function(e,t){var i;e.stopPropagation(),o.find("[data-sek-choice]").removeClass("is-selected").attr("aria-pressed",!1),s(this).addClass("is-selected").attr("aria-pressed",!0);try{i=s(this).data("sek-choice")}catch(e){r.errare("buttons_choice input type => error when attaching click event",e)}n(i)}),s('[data-sek-choice="'+n()+'"]',o).trigger("click",{initializing_the_unit:!0})}})}(wp.customize,jQuery,_),function(i,n,e){i.czrInputMap=i.czrInputMap||{},n.extend(i.czrInputMap,{reset_button:function(e){this.container.on("click","[data-sek-reset-scope]",function(e,t){if(e.stopPropagation(),"local"===n(this).data("sek-reset-scope"))try{i.czr_sektions.resetCollectionSetting()}catch(e){i.errare("reset_button => error when firing resetCollectionSetting() on click event",e)}})}})}(wp.customize,jQuery,_),function(o,r,s){o.czrModuleMap=o.czrModuleMap||{},r.extend(o.czrModuleMap,{sek_content_type_switcher_module:{crud:!1,name:o.czr_sektions.getRegisteredModuleProperty("sek_content_type_switcher_module","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:s.extend({id:"",title:""},o.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_content_type_switcher_module"))}}),o.czrInputMap=o.czrInputMap||{},r.extend(o.czrInputMap,{content_type_switcher:function(e){var i,n=this;if(!o.section.has(n.module.control.section()))throw new Error("api.czrInputMap.content_type_switcher => section not registered");i=o.section(n.module.control.section()),n.container.on("click","[data-sek-content-type]",function(e){e.preventDefault(),n.container.find("[data-sek-content-type]").removeClass("is-selected").attr("aria-pressed",!1),r(this).addClass("is-selected").attr("aria-pressed",!0),o.czr_sektions.currentContentPickerType(r(this).data("sek-content-type"))});var t=function(t){n.container.find('[data-sek-content-type="'+(t||"module")+'"]').trigger("click"),s.each(i.controls(),function(e){s.isUndefined(e.content_type)||e.active(t===e.content_type)})};o.czr_sektions.currentContentPickerType=o.czr_sektions.currentContentPickerType||new o.Value(n()),t(o.czr_sektions.currentContentPickerType()),o.czr_sektions.currentContentPickerType.bind(function(e){t(e)})}})}(wp.customize,jQuery,_),function(t,e,i){t.czrModuleMap=t.czrModuleMap||{},e.extend(t.czrModuleMap,{sek_module_picker_module:{crud:!1,name:t.czr_sektions.getRegisteredModuleProperty("sek_module_picker_module","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},t.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_module_picker_module"))}}),t.czrInputMap=t.czrInputMap||{},e.extend(t.czrInputMap,{module_picker:function(e){t.czr_sektions.trigger("sek-refresh-dragzones",{type:"module",input_container:this.container})}})}(wp.customize,jQuery,_),function(t,e,i){t.czrModuleMap=t.czrModuleMap||{};var n=["sek_intro_sec_picker_module","sek_features_sec_picker_module","sek_contact_sec_picker_module","sek_column_layouts_sec_picker_module"];sektionsLocalizedData.isNimbleHeaderFooterEnabled&&(n=i.union(n,["sek_header_sec_picker_module","sek_footer_sec_picker_module"])),i.each(n,function(e){t.czrModuleMap[e]={crud:!1,name:t.czr_sektions.getRegisteredModuleProperty(e,"name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},t.czr_sektions.getDefaultItemModelFromRegisteredModuleData(e))}})}(wp.customize,jQuery,_),function(r,e,s){var t={initialize:function(e,t){this.inputConstructor=r.CZRInput.extend({initialize:function(e,t){var i=this;r.CZRInput.prototype.initialize.call(i,e,t),i.isReady.then(function(){i.renderUserSavedSections(),r.czr_sektions.trigger("sek-refresh-dragzones",{type:"preset_section",input_container:i.container})})},renderUserSavedSections:function(){var i="",n=this.container.find(".sek-content-type-wrapper"),o="";s.each(sektionsLocalizedData.userSavedSektions,function(e,t){try{o=function(e){var t=e.getDate(),i=e.getMonth(),n=e.getFullYear();e.getHours(),e.getMinutes(),e.getSeconds();return[t,["January","February","March","April","May","June","July","August","September","October","November","December"][i],n].join(" ")}(new Date(e.creation_date.replace(/-/g,"/")))}catch(e){r.errare("::renderUserSavedSections => formatDate => error",e)}i=['<div class="sek-user-section-wrapper">','<div class="sek-saved-section-title"><i class="sek-remove-user-section far fa-trash-alt"></i>'+e.title+"</div>",'<div draggable="true" data-sek-is-user-section="true" data-sek-section-type="'+e.type+'" data-sek-content-type="preset_section" data-sek-content-id="'+t+'" style="" title="'+e.title+'">','<div class="sek-overlay"></div>','<div class="sek-saved-section-description">'+e.description+"</div>",s.isEmpty(o)?"":'<div class="sek-saved-section-date"><i class="far fa-calendar-alt"></i> @missi18n Created : '+o+"</div>","</div>","</div>"].join(""),n.append(i)})}}),r.CZRDynModule.prototype.initialize.call(this,e,t)}};r.czrModuleMap=r.czrModuleMap||{},sektionsLocalizedData.isSavedSectionEnabled&&e.extend(r.czrModuleMap,{sek_my_sections_sec_picker_module:{mthds:t,crud:!1,name:r.czr_sektions.getRegisteredModuleProperty("sek_my_sections_sec_picker_module","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:r.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_my_sections_sec_picker_module")}})}(wp.customize,jQuery,_),function(t,e,i){t.czrInputMap=t.czrInputMap||{},e.extend(t.czrInputMap,{section_picker:function(e){t.czr_sektions.trigger("sek-refresh-dragzones",{type:"preset_section",input_container:this.container})}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_level_anchor_module:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_level_anchor_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_anchor_module"))}})}(wp.customize,jQuery,_),function(r,e,s){var t={initialize:function(e,t){var i=this;i.inputConstructor=r.CZRInput.extend(i.CZRInputMths||{}),i.itemConstructor=r.CZRItem.extend(i.CZRItemConstructor||{}),r.CZRDynModule.prototype.initialize.call(i,e,t)},CZRInputMths:{setupSelect:function(){r.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!s.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){r.errorLog("item.setInputVisibilityDeps() : "+e)}}),r.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this,o=n.module;n.czr_Input.each(function(i){switch(i.id){case"bg-image":s.each(["bg-attachment","bg-scale","bg-repeat","bg-apply-overlay","bg-color-overlay","bg-opacity-overlay","bg-parallax","bg-parallax-force"],function(t){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"bg-color-overlay":case"bg-opacity-overlay":e=!s.isEmpty(i()+"")&&r.CZR_Helpers.isChecked(n.czr_Input("bg-apply-overlay")());break;case"bg-parallax-force":e=!s.isEmpty(i()+"")&&r.CZR_Helpers.isChecked(n.czr_Input("bg-parallax")());break;case"bg-scale":case"bg-repeat":e=!s.isEmpty(i()+"")&&!r.CZR_Helpers.isChecked(n.czr_Input("bg-parallax")());break;default:e=!s.isEmpty(i()+"")}return e})}catch(e){r.errare(o.id+" => error in setInputVisibilityDeps",e)}});break;case"bg-apply-overlay":s.each(["bg-color-overlay","bg-opacity-overlay"],function(e){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return!s.isEmpty(n.czr_Input("bg-image")()+"")&&r.CZR_Helpers.isChecked(i())})}catch(e){r.errare(o.id+" => error in setInputVisibilityDeps",e)}});break;case"bg-parallax":s.each(["bg-parallax-force","bg-scale","bg-repeat"],function(t){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"bg-parallax-force":e=!s.isEmpty(n.czr_Input("bg-image")()+"")&&r.CZR_Helpers.isChecked(i());break;case"bg-repeat":case"bg-scale":e=!s.isEmpty(n.czr_Input("bg-image")()+"")&&!r.CZR_Helpers.isChecked(i())}return e})}catch(e){r.errare(o.id+" => error in setInputVisibilityDeps",e)}}),i.bind(function(e){r.CZR_Helpers.isChecked(i())&&r.CZR_Helpers.isChecked(n.czr_Input("bg-attachment")())&&n.czr_Input("bg-attachment").container.find("input[type=checkbox]").trigger("click")});break;case"bg-attachment":i.bind(function(e){r.CZR_Helpers.isChecked(i())&&r.CZR_Helpers.isChecked(n.czr_Input("bg-parallax")())&&n.czr_Input("bg-parallax").container.find("input[type=checkbox]").trigger("click")})}})}}};r.czrModuleMap=r.czrModuleMap||{},e.extend(r.czrModuleMap,{sek_level_bg_module:{mthds:t,crud:!1,name:r.czr_sektions.getRegisteredModuleProperty("sek_level_bg_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:s.extend({id:"",title:""},r.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_bg_module"))}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){var i=this;i.inputConstructor=n.CZRInput.extend(i.CZRInputMths||{}),i.itemConstructor=n.CZRItem.extend(i.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(i,e,t)},CZRInputMths:{setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var i=this.module;this.czr_Input.each(function(t){switch(t.id){case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{sek_level_border_module:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("sek_level_border_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.extend({id:"",title:""},n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_border_module"))}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.itemConstructor=i.CZRItem.extend(this.CZRItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"use-custom-breakpoint":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"custom-breakpoint",function(){return e()})}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_level_breakpoint_module:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_level_breakpoint_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_breakpoint_module"))}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){var i=this;i.inputConstructor=n.CZRInput.extend(i.CZRInputMths||{}),i.itemConstructor=n.CZRItem.extend(i.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(i,e,t)},CZRInputMths:{setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var i=this.module;this.czr_Input.each(function(t){switch(t.id){case"height-type":o.each(["custom-height","overflow_hidden"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"custom"===t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{sek_level_height_module:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("sek_level_height_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.extend({id:"",title:""},n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_height_module"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_level_visibility_module:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_level_visibility_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_visibility_module"))}})}(wp.customize,jQuery,_),function(n,e,i){var t={initialize:function(e,t){var i=this;i.inputConstructor=n.CZRInput.extend(i.CZRInputMths||{}),i.itemConstructor=n.CZRItem.extend(i.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(i,e,t)},CZRInputMths:{setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!i.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"width-type":n.czr_sektions.scheduleVisibilityOfInputId.call(e,"custom-width",function(){return"custom"===e()}),n.czr_sektions.scheduleVisibilityOfInputId.call(e,"h_alignment",function(){return"custom"===e()})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{sek_level_width_module:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("sek_level_width_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.extend({id:"",title:""},n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_width_module"))}})}(wp.customize,jQuery,_),function(n,e,i){var t={initialize:function(e,t){var i=this;i.inputConstructor=n.CZRInput.extend(i.CZRInputMths||{}),i.itemConstructor=n.CZRItem.extend(i.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(i,e,t)},CZRInputMths:{setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!i.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"use-custom-outer-width":n.czr_sektions.scheduleVisibilityOfInputId.call(e,"outer-section-width",function(){return e()});break;case"use-custom-inner-width":n.czr_sektions.scheduleVisibilityOfInputId.call(e,"inner-section-width",function(){return e()})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{sek_level_width_section:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("sek_level_width_section","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.extend({id:"",title:""},n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_width_section"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_level_spacing_module:{mthds:"",crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_level_spacing_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_spacing_module"))}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_local_template:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_local_template","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:t.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_template"))}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=i.CZRItem.extend(this.CZRItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"use-custom-outer-width":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"outer-section-width",function(){return e()});break;case"use-custom-inner-width":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"inner-section-width",function(){return e()})}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_local_widths:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_local_widths","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:n.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_widths"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_local_custom_css:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_local_custom_css","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_custom_css"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_local_reset:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_local_reset","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_reset"))}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_local_performances:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_local_performances","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:t.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_performances"))}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_local_header_footer:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_local_header_footer","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:t.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_header_footer"))}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=i.CZRItem.extend(this.CZRItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"use-custom-breakpoint":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"global-custom-breakpoint",function(){return e()})}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_global_breakpoint:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_global_breakpoint","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:n.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_breakpoint"))}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=i.CZRItem.extend(this.CZRItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"use-custom-outer-width":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"outer-section-width",function(){return e()});break;case"use-custom-inner-width":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"inner-section-width",function(){return e()})}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_global_widths:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_global_widths","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:n.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_widths"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_global_performances:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_global_performances","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_performances"))}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_global_header_footer:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_global_header_footer","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:t.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_header_footer"))}})}(wp.customize,jQuery,_),function(r,e,s){var t={initialize:function(e,t){this.itemConstructor=r.CZRItem.extend(this.CZRItemConstructor||{}),r.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!s.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){r.errorLog("item.setInputVisibilityDeps() : "+e)}}),r.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this,o=n.module;n.czr_Input.each(function(i){switch(i.id){case"enable":s.each(["public_key","private_key","badge","show_failure_message","failure_message","score"],function(t){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"failure_message":e=i()&&n.czr_Input("show_failure_message")();break;default:e=i()}return e})}catch(e){r.errare(o.module_type+" => error in setInputVisibilityDeps",e)}});break;case"show_failure_message":s.each(["failure_message"],function(e){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()&&n.czr_Input("enable")()})}catch(e){r.errare(o.module_type+" => error in setInputVisibilityDeps",e)}})}})}}};r.czrModuleMap=r.czrModuleMap||{},e.extend(r.czrModuleMap,{sek_global_recaptcha:{mthds:t,crud:!1,name:r.czr_sektions.getRegisteredModuleProperty("sek_global_recaptcha","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:s.extend({id:"",title:""},r.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_recaptcha"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_global_beta_features:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_global_beta_features","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_beta_features"))}})}(wp.customize,jQuery,_),function(o,e,r){var t={initialize:function(e,t){var i=this;i.inputConstructor=o.CZRInput.extend({setupSelect:function(){o.czr_sektions.setupSelectInput.call(this)}}),i.itemConstructor=o.CZRItem.extend(i.CZRItemConstructor||{}),o.CZRDynModule.prototype.initialize.call(i,e,t),i.bind("set_default_content_picker_options",function(e){return e.defaultContentPickerOption.defaultOption={title:'<span style="font-weight:bold">'+sektionsLocalizedData.i18n["Set a custom url"]+"</span>",type:"",type_label:"",object:"",id:"_custom_",url:""},e})},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!r.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){o.errorLog("item.setInputVisibilityDeps() : "+e)}}),o.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this,t=n.module;n.czr_Input.each(function(i){switch(i.id){case"img":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"img-size",function(){return!r.isEmpty(i()+"")&&r.isNumber(i())});break;case"link-to":r.each(["link-pick-url","link-custom-url","link-target"],function(t){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"link-custom-url":e="url"===i()&&"_custom_"==n.czr_Input("link-pick-url")().id;break;case"link-pick-url":e="url"===i();break;case"link-target":e=!r.contains(["no-link","img-lightbox"],i())}return e})}catch(e){o.errare("Image module => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"link-custom-url",function(){return"_custom_"==i().id&&"url"==n.czr_Input("link-to")()});break;case"border-type":r.each(["borders"],function(e){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return"none"!==i()})}catch(e){o.errare(t.id+" => error in setInputVisibilityDeps",e)}});break;case"use_custom_width":r.each(["custom_width"],function(e){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){o.errare("Image module => error in setInputVisibilityDeps",e)}});break;case"use_custom_title_attr":r.each(["heading_title"],function(e){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){o.errare("Image module => error in setInputVisibilityDeps",e)}})}})}}};o.czrModuleMap=o.czrModuleMap||{},e.extend(o.czrModuleMap,{czr_image_main_settings_child:{mthds:t,crud:!1,name:o.czr_sektions.getRegisteredModuleProperty("czr_image_main_settings_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_image_main_settings_child")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var e=this,i=e.module;e.czr_Input.each(function(t){switch(t.id){case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_image_borders_corners_child:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_image_borders_corners_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_image_borders_corners_child")}})}(wp.customize,jQuery,_),function(n,e,t){var i={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend(this.CZRTextEditorInputMths||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRTextEditorInputMths:{initialize:function(e,t){var i=this;"tiny_mce_editor"==i.type&&i.isReady.then(function(){i.container.find('[data-czr-action="open-tinymce-editor"]').trigger("click")}),n.CZRInput.prototype.initialize.call(i,e,t)},setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_tinymce_child:{mthds:i,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_tinymce_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_tinymce_child")}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{czr_simple_html_module:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("czr_simple_html_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_html_module")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRFPItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRFPItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(i){switch(i.id){case"img-type":o.each(["img-id","img-size"],function(t){try{n.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"img-id":e="custom"===i();break;default:e="none"!==i()}return e})}catch(e){n.errare("Featured pages module => error in setInputVisibilityDeps",e)}});break;case"content-type":o.each(["content-custom-text"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return"custom"===i()})}catch(e){n.errare("Featured pages module => error in setInputVisibilityDeps",e)}});break;case"btn-display":o.each(["btn-custom-text"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){n.errare("Featured pages module => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_featured_pages_module:{mthds:t,crud:n.czr_sektions.getRegisteredModuleProperty("czr_featured_pages_module","is_crud"),hasPreItem:!1,refresh_on_add_item:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_featured_pages_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_featured_pages_module")}})}(wp.customize,jQuery,_),function(r,e,s){var t={initialize:function(e,t){var i=this;i.inputConstructor=r.CZRInput.extend({setupSelect:function(){r.czr_sektions.setupSelectInput.call(this)}}),i.itemConstructor=r.CZRItem.extend(i.CZRIconItemConstructor||{}),i.bind("set_default_content_picker_options",function(e){return e.defaultContentPickerOption.defaultOption={title:'<span style="font-weight:bold">'+sektionsLocalizedData.i18n["Set a custom url"]+"</span>",type:"",type_label:"",object:"",id:"_custom_",url:""},e}),r.CZRDynModule.prototype.initialize.call(i,e,t)},CZRIconItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!s.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){r.errorLog("item.setInputVisibilityDeps() : "+e)}}),r.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this,o=n.module;n.czr_Input.each(function(i){switch(i.id){case"link-to":s.each(["link-pick-url","link-custom-url","link-target"],function(t){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"link-custom-url":e="url"==i()&&"_custom_"==n.czr_Input("link-pick-url")().id;break;default:e="url"==i()}return e})}catch(e){r.errare(o.module_type+" => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":r.czr_sektions.scheduleVisibilityOfInputId.call(i,"link-custom-url",function(){return"_custom_"==i().id&&"url"==n.czr_Input("link-to")()});break;case"use_custom_color_on_hover":s.each(["color_hover"],function(e){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){r.errare(o.module_type+" => error in setInputVisibilityDeps",e)}})}})}}};r.czrModuleMap=r.czrModuleMap||{},e.extend(r.czrModuleMap,{czr_icon_settings_child:{mthds:t,crud:!1,name:r.czr_sektions.getRegisteredModuleProperty("czr_icon_settings_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:r.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_icon_settings_child")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var e=this,i=e.module;e.czr_Input.each(function(t){switch(t.id){case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_icon_spacing_border_child:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_icon_spacing_border_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_icon_spacing_border_child")}})}(wp.customize,jQuery,_),function(o,e,r){var t={initialize:function(e,t){var i=this;i.inputConstructor=o.CZRInput.extend(i.CZRHeadingInputMths||{}),i.itemConstructor=o.CZRItem.extend(i.CZRItemConstructor||{}),o.CZRDynModule.prototype.initialize.call(i,e,t),i.bind("set_default_content_picker_options",function(e){return e.defaultContentPickerOption.defaultOption={title:'<span style="font-weight:bold">'+sektionsLocalizedData.i18n["Set a custom url"]+"</span>",type:"",type_label:"",object:"",id:"_custom_",url:""},e})},CZRHeadingInputMths:{setupSelect:function(){o.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!r.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){o.errorLog("item.setInputVisibilityDeps() : "+e)}}),o.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this;n.module;n.czr_Input.each(function(i){switch(i.id){case"link-to":r.each(["link-pick-url","link-custom-url","link-target"],function(t){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"link-custom-url":e=i()&&"_custom_"==n.czr_Input("link-pick-url")().id;break;case"link-pick-url":case"link-target":e=i()}return e})}catch(e){o.errare("Heading module => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"link-custom-url",function(){return"_custom_"==i().id&&!0===n.czr_Input("link-to")()})}})}}};o.czrModuleMap=o.czrModuleMap||{},e.extend(o.czrModuleMap,{czr_heading_child:{mthds:t,crud:!1,name:o.czr_sektions.getRegisteredModuleProperty("czr_heading_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_heading_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend(this.CZRHeadingInputMths||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRHeadingInputMths:{setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_heading_spacing_child:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_heading_spacing_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_heading_spacing_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend(this.CZRDividerInputMths||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRDividerInputMths:{setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_divider_module:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_divider_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_divider_module")}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{czr_spacer_module:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("czr_spacer_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_spacer_module")}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{czr_map_module:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("czr_map_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_map_module")}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=i.CZRItem.extend(this.CZRButtonItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRButtonItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(t){switch(t.id){case"quote_design":n.each(["border_width_css","border_color_css"],function(e){try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"border-before"==t()})}catch(e){i.errare("Quote module => error in setInputVisibilityDeps",e)}}),n.each(["icon_color_css","icon_size_css"],function(e){try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"quote-icon-before"==t()})}catch(e){i.errare("Quote module => error in setInputVisibilityDeps",e)}})}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_quote_design_child:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_quote_design_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_quote_design_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_quote_quote_child:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_quote_quote_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_quote_quote_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_quote_cite_child:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_quote_cite_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_quote_cite_child")}})}(wp.customize,jQuery,_),function(o,e,r){var t={initialize:function(e,t){var i=this;i.inputConstructor=o.CZRInput.extend({setupSelect:function(){o.czr_sektions.setupSelectInput.call(this)}}),i.itemConstructor=o.CZRItem.extend(i.CZRButtonItemConstructor||{}),i.bind("set_default_content_picker_options",function(e){return e.defaultContentPickerOption.defaultOption={title:'<span style="font-weight:bold">'+sektionsLocalizedData.i18n["Set a custom url"]+"</span>",type:"",type_label:"",object:"",id:"_custom_",url:""},e}),o.CZRDynModule.prototype.initialize.call(i,e,t)},CZRButtonItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!r.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){o.errorLog("item.setInputVisibilityDeps() : "+e)}}),o.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this;n.module;n.czr_Input.each(function(i){switch(i.id){case"link-to":r.each(["link-pick-url","link-custom-url","link-target"],function(t){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"link-custom-url":e="url"==i()&&"_custom_"==n.czr_Input("link-pick-url")().id;break;default:e="url"==i()}return e})}catch(e){o.errare("Button module => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"link-custom-url",function(){return"_custom_"==i().id&&"url"==n.czr_Input("link-to")()});break;case"icon":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"icon-side",function(){return!r.isEmpty(i())})}})}}};o.czrModuleMap=o.czrModuleMap||{},e.extend(o.czrModuleMap,{czr_btn_content_child:{mthds:t,crud:!1,name:o.czr_sektions.getRegisteredModuleProperty("czr_btn_content_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_btn_content_child")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRButtonItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRButtonItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var e=this,i=e.module;e.czr_Input.each(function(t){switch(t.id){case"use_custom_bg_color_on_hover":o.each(["bg_color_hover"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){n.errare("Button module => error in setInputVisibilityDeps",e)}});break;case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}});break;case"use_box_shadow":o.each(["push_effect"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){n.errare("Button module => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_btn_design_child:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_btn_design_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_btn_design_child")}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=i.CZRItem.extend(this.CZRButtonItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRButtonItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){e.id})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_menu_content_child:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_menu_content_child","name"),has_mod_opt:!1,ready_on_section_expanded:!0,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_menu_content_child")}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=i.CZRItem.extend(this.CZRItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(t){switch(t.id){case"show_name_field":n.each(["name_field_label","name_field_required"],function(e){try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){i.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}});break;case"show_subject_field":n.each(["subject_field_label","subject_field_required"],function(e){try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){i.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}});break;case"show_message_field":n.each(["message_field_label","message_field_required"],function(e){try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){i.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,"link-custom-url",function(){return t()})}catch(e){i.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_simple_form_fields_child:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_simple_form_fields_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_form_fields_child")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var i=this.module;this.czr_Input.each(function(t){switch(t.id){case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_simple_form_design_child:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_simple_form_design_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_form_design_child")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var i=this.module;this.czr_Input.each(function(t){switch(t.id){case"use_custom_bg_color_on_hover":o.each(["bg_color_hover"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){n.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}});break;case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}});break;case"use_box_shadow":o.each(["push_effect"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){n.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_simple_form_button_child:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_simple_form_button_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_form_button_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_simple_form_fonts_child:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_simple_form_fonts_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_form_fonts_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_simple_form_submission_child:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_simple_form_submission_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_form_submission_child")}})}(wp.customize,jQuery,_),function(o,e,r){var t={initialize:function(e,t){this.inputConstructor=o.CZRInput.extend({setupSelect:function(){o.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=o.CZRItem.extend(this.CZRButtonItemConstructor||{}),o.CZRDynModule.prototype.initialize.call(this,e,t)},CZRButtonItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!r.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){o.errorLog("item.setInputVisibilityDeps() : "+e)}}),o.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this;n.module;n.czr_Input.each(function(i){switch(i.id){case"use_custom_bg_color_on_hover":r.each(["bg_color_hover"],function(e){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){o.errare("Button module => error in setInputVisibilityDeps",e)}});break;case"use_box_shadow":r.each(["push_effect"],function(e){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){o.errare("Button module => error in setInputVisibilityDeps",e)}});break;case"link-to":r.each(["link-pick-url","link-custom-url","link-target"],function(t){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"link-custom-url":e="url"==i()&&"_custom_"==n.czr_Input("link-pick-url")().id;break;default:e="url"==i()}return e})}catch(e){o.errare("Button module => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"link-custom-url",function(){return"_custom_"==i().id&&"url"==n.czr_Input("link-to")()})}})}}};o.czrModuleMap=o.czrModuleMap||{},e.extend(o.czrModuleMap,{czr_font_child:{mthds:t,crud:!1,name:o.czr_sektions.getRegisteredModuleProperty("czr_font_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_font_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this,sektionsLocalizedData.registeredWidgetZones)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_widget_area_module:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_widget_area_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_widget_area_module")}})}(wp.customize,jQuery,_);
1
+ var CZRSeksPrototype=CZRSeksPrototype||{};!function(r,s){s.extend(CZRSeksPrototype,{initialize:function(){var e=this;if(_.isUndefined(window.sektionsLocalizedData))throw new Error("CZRSeksPrototype => missing localized server params sektionsLocalizedData");if(!_.isFunction(r.czr_activeSkopes))throw new Error("CZRSeksPrototype => api.czr_activeSkopes");e.SECTION_ID_FOR_GLOBAL_OPTIONS="__globalOptionsSectionId",e.SECTION_ID_FOR_LOCAL_OPTIONS="__localOptionsSection",e.SECTION_ID_FOR_CONTENT_PICKER="__content_picker__",e.MAX_NUMBER_OF_COLUMNS=12,e.SETTING_UPDATE_BUFFER=100,e.defaultLocalSektionSettingValue=e.getDefaultSektionSettingValue("local"),e.localSectionsSettingId=new r.Value({}),e.registered=new r.Value([]),r.bind("ready",function(){e.doSektionThinksOnApiReady()}),r.bind("save-request-params",function(e){s.extend(e,{local_skope_id:r.czr_skopeBase.getSkopeProperty("skope_id")})})},doSektionThinksOnApiReady:function(){var o=this;o.registerAndSetupDefaultPanelSectionOptions(),o.localSectionsSettingId.callbacks.add(function(e,t){try{o.setupSettingsToBeSaved()}catch(e){r.errare("Error in self.localSectionsSettingId.callbacks => self.setupSettingsToBeSaved()",e)}o.initializeHistoryLogWhenSettingsRegistered(),r.previewer.send("sek-request-active-locations")});var i=function(e,t){o.setContextualCollectionSettingIdWhenSkopeSet(e,t),r.section(o.SECTION_ID_FOR_LOCAL_OPTIONS,function(e){e.deferred.embedded.done(function(){!0!==e.boundForLocalOptionGeneration&&(e.boundForLocalOptionGeneration=!0,e.expanded.bind(function(e){!0===e&&o.generateUI({action:"sek-generate-local-skope-options-ui"})}))})}),r.section(o.SECTION_ID_FOR_GLOBAL_OPTIONS,function(e){!0!==e.nimbleGlobalOptionGenerated&&(o.generateUI({action:"sek-generate-global-options-ui"}),e.nimbleGlobalOptionGenerated=!0)}),r.trigger("nimble-ready-for-current-skope")};_.isEmpty(r.czr_activeSkopes().local)||i(),r.czr_activeSkopes.callbacks.add(function(e,t){i(e,t)}),o.reactToPreviewMsg(),o.setupDnd(),o.setupTinyMceEditor(),o.schedulePrintSectionJson(),o.bind("sek-ui-removed",function(){r.previewedDevice("desktop")}),r.previewedDevice.bind(function(t){var e=_.filter(o.registered(),function(e){return"control"==e.what});_.each(e||[],function(e){r.control(e.id,function(e){e.container.find('[data-sek-device="'+t+'"]').each(function(){s(this).trigger("click")})})})}),s("#customize-notifications-area").on("click",'[data-sek-reset="true"]',function(){o.resetCollectionSetting()}),o.bind("sek-ui-pre-removal",function(e){"control"==e.what&&-1<e.id.indexOf("draggable")&&r.control(e.id,function(e){e.container.find("[draggable]").each(function(){s(this).off("dragstart dragend")})}),"control"==e.what&&r.control(e.id,function(e){e.container.find("select").each(function(){_.isUndefined(s(this).data("czrSelect2"))||s(this).czrSelect2("destroy")})})}),r.bind("czr-new-registered",function(e){if(_.isUndefined(e.origin))throw new Error("czr-new-registered event => missing params.origin");if("nimble"===e.origin&&!1!==e.track){var t=o.registered(),i=s.extend(!0,[],t),n=_.findWhere(i,{id:e.id});if(!_.isEmpty(n)&&_.isEqual(n,e))throw new Error("register => duplicated element in self.registered() collection "+e.id);i.push(e),o.registered(i)}}),o.activeLocations=new r.Value([]),r.previewer.bind("sek-active-locations-in-preview",function(e){o.activeLocations(_.isObject(e)&&_.isArray(e.active_locations)?e.active_locations:[])}),o.setupTopBar(),sektionsLocalizedData.isSavedSectionEnabled&&o.setupSaveUI(),o.lastClickedTargetInPreview=new r.Value,o.lastClickedTargetInPreview.bind(function(e,t){_.isObject(e)&&e.id?r.previewer.send("sek-set-double-click-target",e):r.previewer.send("sek-reset-double-click-target"),clearTimeout(s(window).data("_preview_target_timer_")),s(window).data("_preview_target_timer_",setTimeout(function(){o.lastClickedTargetInPreview({}),r.previewer.send("sek-reset-double-click-target")},2e4))}),r.previewer.bind("sek-clean-target-drop-zone",function(){o.lastClickedTargetInPreview({})}),s(document).keydown(function(e){e&&27===e.keyCode&&o.lastClickedTargetInPreview({})})},registerAndSetupDefaultPanelSectionOptions:function(){var n=this,e=r.Panel.extend({isContextuallyActive:function(){return this.active()},_toggleActive:function(){return!0}});r.panel(sektionsLocalizedData.sektionsPanelId,function(n){n.deferred.embedded.done(function(){var e=n.container.find("h3.accordion-section-title"),t=(n.container.find(".panel-meta .accordion-section-title"),['<img class="sek-nimble-logo" alt="'+n.params.title+'" src="',sektionsLocalizedData.baseUrl,"/assets/img/nimble/nimble_horizontal.svg?ver="+sektionsLocalizedData.nimbleVersion,'"/>'].join(""));if(0<e.length){var i=e.find("span");e.addClass("sek-side-nimble-logo-wrapper").html(t).append(i)}})}),r.CZR_Helpers.register({origin:"nimble",what:"panel",id:sektionsLocalizedData.sektionsPanelId,title:sektionsLocalizedData.i18n["Nimble Builder"],priority:-1e3,constructWith:e,track:!1}),r.CZR_Helpers.register({origin:"nimble",what:"section",id:n.SECTION_ID_FOR_GLOBAL_OPTIONS,title:sektionsLocalizedData.i18n["Site wide options"],panel:sektionsLocalizedData.sektionsPanelId,priority:20,track:!1,constructWith:r.Section.extend({isContextuallyActive:function(){return this.active()},_toggleActive:function(){return!0}})}).done(function(){r.section(n.SECTION_ID_FOR_GLOBAL_OPTIONS,function(e){var t=e.container.find(".accordion-section-title"),i=e.container.find(".customize-section-title h3");0<t.length&&t.prepend('<i class="fas fa-globe sek-level-option-icon"></i>'),0<i.length&&i.find(".customize-action").after('<i class="fas fa-globe sek-level-option-icon"></i>'),n.scheduleModuleAccordion.call(e)})}),r.CZR_Helpers.register({origin:"nimble",what:"section",id:n.SECTION_ID_FOR_LOCAL_OPTIONS,title:sektionsLocalizedData.i18n["Current page options"],panel:sektionsLocalizedData.sektionsPanelId,priority:10,track:!1,constructWith:r.Section.extend({isContextuallyActive:function(){return this.active()},_toggleActive:function(){return!0}})}).done(function(){r.section(n.SECTION_ID_FOR_LOCAL_OPTIONS,function(e){var t=e.container.find(".accordion-section-title"),i=e.container.find(".customize-section-title h3");0<t.length&&t.prepend('<i class="fas fa-map-marker-alt sek-level-option-icon"></i>'),0<i.length&&i.find(".customize-action").after('<i class="fas fa-map-marker-alt sek-level-option-icon"></i>'),n.scheduleModuleAccordion.call(e)})}),r.CZR_Helpers.register({origin:"nimble",what:"setting",id:sektionsLocalizedData.optNameForGlobalOptions,dirty:!1,value:sektionsLocalizedData.globalOptionDBValues,transport:"refresh",type:"option"}),r.CZR_Helpers.register({origin:"nimble",what:"section",id:n.SECTION_ID_FOR_CONTENT_PICKER,title:sektionsLocalizedData.i18n["Content Picker"],panel:sektionsLocalizedData.sektionsPanelId,priority:30,track:!1,constructWith:r.Section.extend({isContextuallyActive:function(){return this.active()},_toggleActive:function(){return!0}})}).done(function(){r.section(n.SECTION_ID_FOR_CONTENT_PICKER,function(e){"resolved"!=r.czr_initialSkopeCollectionPopulated.state()?r.czr_initialSkopeCollectionPopulated.done(function(){r.previewer.trigger("sek-pick-content",{focus:!1})}):r.previewer.trigger("sek-pick-content",{focus:!1})})})},setContextualCollectionSettingIdWhenSkopeSet:function(e,t){t=t||{},!_.isEmpty(t.local)&&r.panel(sektionsLocalizedData.sektionsPanelId).expanded()&&r.previewer.trigger("sek-pick-content"),sektionsData=r.czr_skopeBase.getSkopeProperty("sektions","local"),sektionsLocalizedData.isDevMode&&r.infoLog("::setContextualCollectionSettingIdWhenSkopeSet => SEKTIONS DATA ? ",sektionsData),_.isEmpty(sektionsData)&&r.errare("::setContextualCollectionSettingIdWhenSkopeSet() => no sektionsData"),_.isEmpty(sektionsData.setting_id)&&r.errare("::setContextualCollectionSettingIdWhenSkopeSet() => missing setting_id"),this.localSectionsSettingId(sektionsData.setting_id)}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(r,s){s.extend(CZRSeksPrototype,{setupTopBar:function(){var t=this;t.topBarId="#nimble-top-bar",t.topBarVisible=new r.Value(!1),t.topBarVisible.bind(function(e){t.levelTreeExpanded()||t.toggleTopBar(e)}),t.mouseMovedRecently=new r.Value({}),t.mouseMovedRecently.bind(function(e){t.topBarVisible(!_.isEmpty(e))});var e=function(e){t.mouseMovedRecently({x:e.clientX,y:e.clientY}),clearTimeout(s(window).data("_scroll_move_timer_")),s(window).data("_scroll_move_timer_",setTimeout(function(){t.mouseMovedRecently.set({})},4e3))};s(window).on("mousemove scroll,",_.throttle(e,50)),r.previewer.bind("ready",function(){s(r.previewer.targetWindow().document).on("mousemove scroll,",_.throttle(e,50))}),t.setupLevelTree()},toggleTopBar:function(e){e=!!_.isUndefined(e)||e;var t,i=this;e?s.when(i.renderAndSetupTopBarTmpl({})).done(function(e){i.topBarContainer=e,_.delay(function(){s("body").addClass("nimble-top-bar-visible")},200)}):(t=s.Deferred(),s("body").removeClass("nimble-top-bar-visible"),i.topBarContainer&&i.topBarContainer.length?_.delay(function(){t.resolve()},300):t.resolve(),t.promise()).done(function(){i.topBarVisible(!1)})},renderAndSetupTopBarTmpl:function(e){var t,i=this;if(0<s(i.topBarId).length)return s(i.topBarId);try{t=wp.template("nimble-top-bar")({})}catch(e){return r.errare("Error when parsing the the top note template",e),!1}s("#customize-preview").after(s(t)),s(document).keydown(function(e){if(e.ctrlKey&&_.contains([89,90],e.keyCode))try{i.navigateHistory(90===e.keyCode?"undo":"redo")}catch(e){r.errare("Error when firing self.navigateHistory",e)}}),s(".sek-add-content",i.topBarId).on("click",function(e){e.preventDefault(),r.previewer.trigger("sek-pick-content",{content_type:"module"})}),s(".sek-level-tree",i.topBarId).on("click",function(e){e.preventDefault(),i.levelTreeExpanded(!i.levelTreeExpanded())}),s("[data-nimble-history]",i.topBarId).on("click",function(e){try{i.navigateHistory(s(this).data("nimble-history"))}catch(e){r.errare("Error when firing self.navigateHistory",e)}}),s(".sek-settings",i.topBarId).on("click",function(e){r.panel(sektionsLocalizedData.sektionsPanelId,function(e){i.rootPanelFocus(),e.focus()})}),s(".sek-nimble-doc",i.topBarId).on("click",function(e){e.preventDefault(),window.open(s(this).data("doc-href"),"_blank")});var n=function(e){s(i.topBarId).length<1||(_.isObject(e)&&e.local_template&&"default"!==e.local_template?s(i.topBarId).find(".sek-notifications").html(['<span class="fas fa-info-circle"></span>',sektionsLocalizedData.i18n["This page uses a custom template."]].join(" ")):s(i.topBarId).find(".sek-notifications").html(""))},o=function(){r(i.localSectionsSettingId(),function(e){var t=e(),i=_.isObject(t)&&t.local_options&&t.local_options.template?t.local_options.template:null;n(i)}),r(i.getLocalSkopeOptionId()+"__template",function(e){e.bind(function(e,t){n(e)})})};return o(),r.bind("nimble-ready-for-current-skope",function(){o()}),s(i.topBarId)}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(l,d){d.extend(CZRSeksPrototype,{navigateHistory:function(i){var t,n,o,r,e=this,s=d.extend(!0,[],e.historyLog()),a=[];if(_.each(s,function(e){if(_.isEmpty(r)){switch(e.status){case"previous":t=e;break;case"current":n=e;break;case"future":o=e}switch(i){case"undo":_.isEmpty(n)||_.isEmpty(t)||(r=t.value,n.sektionToRefresh,t.sektionToRefresh);break;case"redo":_.isEmpty(o)||(r=o.value,n.sektionToRefresh,o.sektionToRefresh)}}}),!_.isUndefined(r)){_.isEmpty(r.local)||l(e.localSectionsSettingId())(e.validateSettingValue(r.local),{navigatingHistoryLogs:!0}),_.isEmpty(r.global)||l(e.getGlobalSectionsSettingId())(e.validateSettingValue(r.global),{navigatingHistoryLogs:!0});l.previewer.refresh(),l.previewer.trigger("sek-pick-content",{}),e.cleanRegistered(),e.cleanRegisteredLevelSettingsAfterHistoryNavigation()}var c=_.findKey(s,{status:"current"});c=Number(c),_.isNumber(c)?(_.each(s,function(e,t){switch(newLog=d.extend(!0,{},e),t=Number(t),i){case"undo":0<c&&(t===c-1?newLog.status="current":t===c&&(newLog.status="future"));break;case"redo":s.length>c+1&&(t===c?newLog.status="previous":t===c+1&&(newLog.status="current"))}a.push(newLog)}),e.historyLog(a)):l.errare("Error when navigating the history log, the current key should be a number")}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(b,z){z.extend(CZRSeksPrototype,{setupLevelTree:function(){var i=this;i.levelTree=new b.Value([]),i.levelTree.bind(function(){i.levelTreeExpanded()&&i.renderOrRefreshTree()}),i.levelTreeExpanded=new b.Value(!1),i.levelTreeExpanded.bind(function(e){if(z("body").toggleClass("sek-level-tree-expanded",e),e){if(i.setLevelTreeValue(),_.isEmpty(i.levelTree()))return b.previewer.trigger("sek-notify",{type:"info",duration:1e4,message:['<span style="font-size:0.95em">',"<strong>"+sektionsLocalizedData.i18n["No sections to navigate"]+"</strong>","</span>"].join("")}),void i.levelTreeExpanded(!1);z("#customize-preview iframe").css("z-index",1),i.renderOrRefreshTree()}else 0<z("#nimble-level-tree").length&&_.delay(function(){z("#nimble-level-tree").remove(),z("#customize-preview iframe").css("z-index","")},300)}),i.activeLocations.bind(function(){_.isEmpty(i.levelTree())||i.renderOrRefreshTree()}),b.previewer.bind("ready",function(){i.localSectionsSettingId.callbacks.add(function(){i.levelTreeExpanded(!1),_.each([i.getGlobalSectionsSettingId(),i.localSectionsSettingId(),sektionsLocalizedData.optNameForGlobalOptions],function(e){b(e)._isBoundForNimbleLevelTree||(b(e).bind(function(e){i.setLevelTreeValue()}),b(e)._isBoundForNimbleLevelTree=!0)})})}),z("body").on("click","#nimble-level-tree [data-nimb-level]",function(e){e.preventDefault(),e.stopPropagation();var t=z(e.target).closest("[data-nimb-level]");b.previewer.send("sek-animate-to-level",{id:t.data("nimb-id")}),b.previewer.send("sek-display-level-ui",{id:t.data("nimb-id")})}),z("body").on("click","#nimble-level-tree .sek-remove-level",function(e){e.preventDefault(),e.stopPropagation();var t=z(e.target).closest("[data-nimb-level]");b.previewer.trigger("sek-remove",{level:t.data("nimb-level"),id:t.data("nimb-id"),location:t.closest('[data-nimb-level="location"]').data("nimb-id"),in_sektion:t.closest('[data-nimb-level="section"]').data("nimb-id"),in_column:t.closest('[data-nimb-level="column"]').data("nimb-id")}),t.fadeOut("slow"),i.renderOrRefreshTree()}),z("body").on("click",".sek-close-level-tree",function(e){e.preventDefault(),i.levelTreeExpanded(!1)})},setLevelTreeValue:function(){var e,t,i,n,o,r=this.getGlobalSectionsSettingId(),s=this.localSectionsSettingId(),a=sektionsLocalizedData.optNameForGlobalOptions,c=!1;if(_.each([r,s,a],function(e){b.has(e)||(c=e)}),!1===c){e=b(r)(),i=_.isObject(e)?z.extend(!0,{},e):{},i=_.isEmpty(i.collection)?[]:i.collection,i=_.isArray(i)?i:[],t=b(s)(),t=_.isObject(t)?t:{},n=z.extend(!0,{},t),n=_.isEmpty(n.collection)?[]:n.collection,n=_.isArray(n)?n:[];var l,d=_.union(i,n),u=!1,p=!1;o=b(a)(),o=_.isObject(o)?o:{},t.local_options&&t.local_options.local_header_footer&&(u="nimble_local"===(l=t.local_options.local_header_footer["header-footer"])),o.global_header_footer&&!u&&"theme"!==l&&(p="nimble_global"===o.global_header_footer["header-footer"]||"nimble_global"===l);var m,f,g=z.extend(!0,[],d);g=_.filter(g,function(e,t){return!_.contains(["nimble_global_header","nimble_global_footer","nimble_local_header","nimble_local_footer"],e.id)});var h=function(e){m=_.findWhere(d,{id:"nimble_"+e+"_header"}),f=_.findWhere(d,{id:"nimble_"+e+"_footer"}),g.unshift(m),g.push(f)};u?h("local"):p&&h("global");var k,y=this.activeLocations(),v=[];_.isEmpty(y)?v=g:_.each(y,function(e){k=_.findWhere(g,{id:e}),_.isUndefined(k)||v.push(k)}),this.levelTree(v)}else b.errare("::setLevelTreeValue => a setting id is not registered ")},renderOrRefreshTree:function(){var e;if(z("#nimble-level-tree").length<1){try{e=wp.template("nimble-level-tree")({})}catch(e){return b.errare("Error when parsing the the nimble-level-tree template",e),!1}z("#customize-preview").after(z(e))}z("#nimble-level-tree").find(".sek-tree-wrap").html(this.getLevelTreeHtml())},getLevelTreeHtml:function(e,t){var i=this;e=e||i.levelTree();var n,o,r,s=!1;if(!_.isArray(e)||_.isEmpty(e))return b.errare("::buildLevelTree => invalid collection param",e),r;var a='<i class="material-icons sek-remove-level" title="'+sektionsLocalizedData.i18n["Remove this element"]+'">delete_forever</i>';return r="<ul>",_.each(e,function(e){_.isUndefined(e.level)?b.errare("::buildLevelTree => missing level property",e):_.isUndefined(e.id)?b.errare("::buildLevelTree => missing id property",e):(n=e.level,"location"===(o=n)&&(s=!_.contains(i.activeLocations(),e.id)),s||(sektionsLocalizedData.i18n[n]&&(o=sektionsLocalizedData.i18n[n]),!0===e.is_nested&&(o=sektionsLocalizedData.i18n["nested section"]),a="location"!==n?a:"",r+='<li data-nimb-level="'+n+'" data-nimb-id="'+e.id+'">',r+='<div class="sek-level-infos"><div class="sek-inner-level-infos">',"module"===n&&(r+=[i.getTreeModuleIcon(e.module_type),i.getTreeModuleTitle(e.module_type)].join(" ")),r+=[" ",o,"( id :",e.id,")",a].join(" "),r+="</div></div>",_.isArray(e.collection)&&!_.isEmpty(e.collection)&&(r+=i.getLevelTreeHtml(e.collection,t)),r+="</li>"))}),r+="</ul>"},getTreeModuleIcon:function(t){var i={};return _.each(sektionsLocalizedData.moduleCollection,function(e){_.isEmpty(i)&&t===e["content-id"]&&(i={svg:e.icon?sektionsLocalizedData.moduleIconPath+e.icon:"",font:e.font_icon?e.font_icon:""})}),_.isEmpty(i.svg)?_.isEmpty(i.font)?void 0:i.font:'<img class="sek-svg-mod-icon" src="'+i.svg+'"/>'},getTreeModuleTitle:function(t){var i={};return _.each(sektionsLocalizedData.moduleCollection,function(e){_.isEmpty(i)&&t===e["content-id"]&&(i=e.title)}),i}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(a,c){c.extend(CZRSeksPrototype,{setupSaveUI:function(){var n=this;n.saveUIVisible=new a.Value(!1),n.saveUIVisible.bind(function(e,t,i){n.toggleSaveUI(e,i?i.id:null)})},toggleSaveUI:function(e,t){e=!!_.isUndefined(e)||e;var i,n=this;e?c.when(n.renderAndSetupSaveUITmpl({})).done(function(e){n.saveUIContainer=e,_.delay(function(){c("body").addClass("nimble-save-ui-visible")},200),c("#sek-saved-section-id").val(t)}):(i=c.Deferred(),c("body").removeClass("nimble-save-ui-visible"),0<c("#nimble-top-save-ui").length?_.delay(function(){n.saveUIContainer.remove(),i.resolve()},300):i.resolve(),i.promise()).done(function(){n.saveUIVisible(!1)})},preProcessSektion:function(e){var t=this.cleanIds(e);return _.omit(t,function(e,t){return _.contains(["id","level"],t)})},renderAndSetupSaveUITmpl:function(e){if(0<c("#nimble-top-save-ui").length)return c("#nimble-top-save-ui");var s=this;try{_tmpl=wp.template("nimble-top-save-ui")({})}catch(e){return a.errare("Error when parsing the the top note template",e),!1}return c("#customize-preview").after(c(_tmpl)),c(".sek-do-save-section","#nimble-top-save-ui").on("click",function(e){e.preventDefault();var t=c.extend(!0,{},s.getLevelModel(c("#sek-saved-section-id").val())),i=c("#sek-saved-section-title").val(),n=c("#sek-saved-section-description").val(),o=s.guid(),r=s.preProcessSektion(t);if(_.isEmpty(i))return c("#sek-saved-section-title").addClass("error"),void a.previewer.trigger("sek-notify",{type:"error",duration:1e4,message:['<span style="font-size:0.95em">',"<strong>@missi18n You need to set a title</strong>","</span>"].join("")});c("#sek-saved-section-title").removeClass("error"),wp.ajax.post("sek_save_section",{nonce:a.settings.nonce.save,sek_title:i,sek_description:n,sek_id:o,sek_data:JSON.stringify(r)}).done(function(e){a.previewer.trigger("sek-notify",{type:"success",duration:1e4,message:['<span style="font-size:0.95em">',"<strong>@missi18n Your section has been saved.</strong>","</span>"].join("")})}).fail(function(e){a.errorLog("ajax sek_save_section => error",e),a.previewer.trigger("sek-notify",{type:"error",duration:1e4,message:['<span style="font-size:0.95em">',"<strong>@missi18n You need to set a title</strong>","</span>"].join("")})})}),c(".sek-cancel-save","#nimble-top-save-ui").on("click",function(e){e.preventDefault(),s.saveUIVisible(!1)}),c("#nimble-top-save-ui")}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(a,c){c.extend(CZRSeksPrototype,{setupSettingsToBeSaved:function(){var i,o=this,e={local:{collectionSettingId:o.localSectionsSettingId()},global:{collectionSettingId:o.getGlobalSectionsSettingId()}};_.each(e,function(e,t){if(i=a.czr_skopeBase.getSkopeProperty("sektions",t).db_values,_.isEmpty(e.collectionSettingId))throw new Error("setupSettingsToBeSaved => the collectionSettingId is invalid");if(!a.has(e.collectionSettingId)){a.CZR_Helpers.register({what:"setting",id:e.collectionSettingId,value:o.validateSettingValue(_.isObject(i)?i:o.getDefaultSektionSettingValue(t)),transport:"postMessage",type:"option",track:!1,origin:"nimble"});a(e.collectionSettingId,function(n){n.bind(_.debounce(function(e,t,i){o.trackHistoryLog(n,i)},1e3))})}})},trackHistoryLog:function(e,t){var i=e.id===this.getGlobalSectionsSettingId();if(t&&!0!==t.navigatingHistoryLogs){var n,o=[],r=c.extend(!0,[],this.historyLog());_.isEmpty(t.in_sektion)?_.isEmpty(t.to_sektion)||(n=t.to_sektion):n=t.in_sektion,_.each(r,function(e){"future"!=e.status&&(c.extend(e,{status:"previous"}),o.push(e))}),o.push({status:"current",value:i?{global:e()}:{local:e()},action:_.isObject(t)&&t.action||"",sektionToRefresh:n}),this.historyLog(o)}},initializeHistoryLogWhenSettingsRegistered:function(){this.historyLog=new a.Value([{status:"current",value:{local:a(this.localSectionsSettingId())(),global:a(this.getGlobalSectionsSettingId())()},action:"initial"}]),this.historyLog.bind(function(e){if(!_.isEmpty(e)){var t=_.findKey(e,{status:"current"});t=Number(t),c("#nimble-top-bar").find("[data-nimble-history]").each(function(){"undo"===c(this).data("nimble-history")?c(this).attr("data-nimble-state",t<=0?"disabled":"enabled"):c(this).attr("data-nimble-state",e.length<=t+1?"disabled":"enabled")})}})},validateSettingValue:function(i){if(!_.isObject(i))return a.errare("validation error => the setting should be an object",i),null;var n={},o=!1,e=[],r=function(e){a.errare(e,i),a.previewer.trigger("sek-notify",{type:"error",duration:3e4,message:['<span style="font-size:0.95em">',"<strong>"+e+"</strong>","<br>",sektionsLocalizedData.i18n["If this problem locks Nimble Builder, you can try resetting the sections of this page."],"<br>",'<span style="text-align:center;display:block">','<button type="button" class="button" aria-label="'+sektionsLocalizedData.i18n.Reset+'" data-sek-reset="true">'+sektionsLocalizedData.i18n.Reset+"</button>","</span>","</span>"].join("")}),o=!0},s=function(t){if(!o)if(_.isUndefined(t)&&_.isEmpty(n)){if(t=c.extend(!0,{},i),_.isUndefined(t.id)||_.isUndefined(t.level)){if(_.isUndefined(t.collection))return void r("validation error => the root level is missing the collection of locations");if(!_.isEmpty(t.level)||!_.isEmpty(t.id))return void r('validation error => the root level should not have a "level" or an "id" property');_.each(i.collection,function(e){n=t,s(e)})}}else{if(_.isEmpty(t.id)||!_.isString(t.id))return void r("validation error => a "+t.level+" level must have a valid id");if(_.contains(e,t.id))return void r("validation error => duplicated level id : "+t.id);if(e.push(t.id),_.isEmpty(t.level)||!_.isString(t.level))return void r("validation error => a "+t.level+" level must have a level property");if(!_.contains(["location","section","column","module"],t.level))return void r('validation error => the level "'+t.level+'" is not authorized');if("module"==t.level){if(!_.isUndefined(t.collection))return void r("validation error => a module can not have a collection property")}else if(_.isUndefined(t.collection))return void r("validation error => missing collection property for level => "+t.level+" "+t.id);switch(_.isUndefined(t.ver_ini)&&a.errare("validateSettingValue() => validation error => a "+t.level+' should have a version property : "ver_ini"'),t.level){case"location":if(!_.isEmpty(n.level))return void r("validation error => the parent of location "+t.id+" should have no level set");break;case"section":if(t.is_nested&&"column"!=n.level)return void r("validation error => the nested section "+t.id+" must be child of a column");if(!t.is_nested&&"location"!=n.level)return void r("validation error => the section "+t.id+" must be child of a location");break;case"column":if("section"!=n.level)return void r("validation error => the column "+t.id+" must be child of a section");break;case"module":if("column"!=n.level)return void r("validation error => the module "+t.id+" must be child of a column")}"module"!=t.level&&_.each(t.collection,function(e){n=c.extend(!0,{},t),s(e)})}};return s(),o?null:i},resetCollectionSetting:function(){if(_.isEmpty(this.localSectionsSettingId()))throw new Error("setupSettingsToBeSaved => the collectionSettingId is invalid");a(this.localSectionsSettingId())(this.getDefaultSektionSettingValue("local")),a.previewer.refresh(),a.notifications.remove("sek-notify"),a.panel(sektionsLocalizedData.sektionsPanelId,function(e){a.notifications.add(new a.Notification("sek-reset-done",{type:"success",message:sektionsLocalizedData.i18n["Reset complete"],dismissible:!0})),_.delay(function(){a.notifications.remove("sek-reset-done")},5e3)})}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(c,n){n.extend(CZRSeksPrototype,{reactToPreviewMsg:function(){var o=this,r={},s={},a=!0,e={"sek-add-section":{callback:function(e){return a=!!_.isUndefined(e.send_to_preview)||e.send_to_preview,s={},r={action:"sek-add-section",id:sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid(),location:e.location,in_sektion:e.in_sektion,in_column:e.in_column,is_nested:!_.isEmpty(e.in_sektion)&&!_.isEmpty(e.in_column),before_section:e.before_section,after_section:e.after_section,is_first_section:e.is_first_section},o.updateAPISetting(r)},complete:function(e){e.apiParams.is_first_section&&c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.location}),c.previewer.trigger("sek-pick-content",{id:e.apiParams?e.apiParams.id:"",content_type:"section"}),c.previewer.send("sek-animate-to-level",{id:e.apiParams.id})}},"sek-add-column":{callback:function(e){return a=!0,s={},r={id:sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid(),action:"sek-add-column",in_sektion:e.in_sektion,autofocus:e.autofocus},o.updateAPISetting(r)},complete:function(e){!1!==e.apiParams.autofocus&&c.previewer.trigger("sek-pick-content",{})}},"sek-add-module":{callback:function(e){return a=!0,s={},r={id:sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid(),action:"sek-add-module",in_sektion:e.in_sektion,in_column:e.in_column,module_type:e.content_id,before_module:e.before_module,after_module:e.after_module},o.updateAPISetting(r)},complete:function(e){c.previewer.trigger("sek-edit-module",{id:e.apiParams.id,level:"module",in_sektion:e.apiParams.in_sektion,in_column:e.apiParams.in_column}),o.updateAPISetting({action:"sek-update-fonts",is_global_location:o.isGlobalLocation(e.apiParams)}),c.previewer.trigger("sek-refresh-stylesheet",{id:e.apiParams.in_column,location_skope_id:c.czr_skopeBase.getSkopeProperty("skope_id")})}},"sek-remove":{callback:function(e){switch(a=!0,s={},e.level){case"section":var t=o.getLevelModel(e.id);if("no_match"===t){c.errare("reactToPreviewMsg => sek-remove-section => no sektionToRemove matched");break}r={action:"sek-remove-section",id:e.id,location:e.location,in_sektion:e.in_sektion,in_column:e.in_column,is_nested:t.is_nested};break;case"column":r={action:"sek-remove-column",id:e.id,in_sektion:e.in_sektion};break;case"module":r={action:"sek-remove-module",id:e.id,in_sektion:e.in_sektion,in_column:e.in_column};break;default:c.errare("::reactToPreviewMsg => sek-remove => missing level ",e)}return o.updateAPISetting(r)},complete:function(e){if(c.previewer.trigger("sek-pick-content",{}),o.updateAPISetting({action:"sek-update-fonts",is_global_location:o.isGlobalLocation(e.apiParams)}),"sek-remove-section"===e.apiParams.action){var t=o.getLevelModel(e.apiParams.location);_.isEmpty(t.collection)&&c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.location})}}},"sek-move":{callback:function(e){switch(a=!0,s={},e.level){case"section":r={action:"sek-move-section",id:e.id,is_nested:!_.isEmpty(e.in_sektion)&&!_.isEmpty(e.in_column),newOrder:e.newOrder,from_location:e.from_location,to_location:e.to_location};break;case"column":r={action:"sek-move-column",id:e.id,newOrder:e.newOrder,from_sektion:e.from_sektion,to_sektion:e.to_sektion};break;case"module":r={action:"sek-move-module",id:e.id,newOrder:e.newOrder,from_column:e.from_column,to_column:e.to_column,from_sektion:e.from_sektion,to_sektion:e.to_sektion}}return o.updateAPISetting(r)},complete:function(e){switch(e.apiParams.action){case"sek-move-section":c.previewer.trigger("sek-edit-options",{id:e.apiParams.id,level:"section",in_sektion:e.apiParams.id}),e.apiParams.from_location!=e.apiParams.to_location&&(c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.to_location}),c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.from_location}));break;case"sek-move-column":c.previewer.trigger("sek-edit-options",{id:e.apiParams.id,level:"column",in_sektion:e.apiParams.in_sektion,in_column:e.apiParams.in_column});break;case"sek-refresh-modules-in-column":c.previewer.trigger("sek-edit-module",{id:e.apiParams.id,level:"module",in_sektion:e.apiParams.in_sektion,in_column:e.apiParams.in_column})}}},"sek-move-section-up":{callback:function(e){return a=!1,s={},r={action:"sek-move-section-up-down",direction:"up",id:e.id,is_nested:!_.isEmpty(e.in_sektion)&&!_.isEmpty(e.in_column),location:e.location},o.updateAPISetting(r)},complete:function(e){c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.location})}},"sek-move-section-down":{callback:function(e){return a=!1,s={},r={action:"sek-move-section-up-down",direction:"down",id:e.id,is_nested:!_.isEmpty(e.in_sektion)&&!_.isEmpty(e.in_column),location:e.location},o.updateAPISetting(r)},complete:function(e){c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.location})}},"sek-duplicate":{callback:function(e){switch(a=!0,s={},e.level){case"section":r={action:"sek-duplicate-section",id:e.id,location:e.location,in_sektion:e.in_sektion,in_column:e.in_column,is_nested:!_.isEmpty(e.in_sektion)&&!_.isEmpty(e.in_column)};break;case"column":r={action:"sek-duplicate-column",id:e.id,in_sektion:e.in_sektion,in_column:e.in_column};break;case"module":r={action:"sek-duplicate-module",id:e.id,in_sektion:e.in_sektion,in_column:e.in_column}}return o.updateAPISetting(r)},complete:function(e){var t;switch(e.apiParams.action){case"sek-duplicate-section":c.previewer.trigger("sek-edit-options",{id:e.apiParams.id,level:"section",in_sektion:e.apiParams.id}),t=e.apiParams.location,c.previewer.send("sek-animate-to-level",{id:e.apiParams.id});break;case"sek-duplicate-column":c.previewer.trigger("sek-edit-options",{id:e.apiParams.id,level:"column",in_sektion:e.apiParams.in_sektion,in_column:e.apiParams.in_column}),t=e.apiParams.in_sektion;break;case"sek-duplicate-module":c.previewer.trigger("sek-edit-module",{id:e.apiParams.id,level:"module",in_sektion:e.apiParams.in_sektion,in_column:e.apiParams.in_column}),t=e.apiParams.in_column}c.previewer.trigger("sek-refresh-stylesheet",{id:t,location_skope_id:c.czr_skopeBase.getSkopeProperty("skope_id")})}},"sek-resize-columns":function(e){return a=!0,s={},r=e,o.updateAPISetting(r)},"sek-add-content-in-new-sektion":{callback:function(e){switch(a=!!_.isUndefined(e.send_to_preview)||e.send_to_preview,s={},(r=e).action="sek-add-content-in-new-sektion",r.id=sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid(),e.content_type){case"module":r.droppedModuleId=sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid();break;case"preset_section":c.previewer.send("sek-maybe-print-loader",{loader_located_in_level_id:e.location}),c.previewer.send("sek-maybe-print-loader",{fullPageLoader:!0})}return o.updateAPISetting(r)},complete:function(e){switch(e.apiParams.content_type){case"module":c.previewer.trigger("sek-edit-module",{level:"module",id:e.apiParams.droppedModuleId});break;case"preset_section":c.previewer.send("sek-clean-loader",{cleanFullPageLoader:!0})}o.updateAPISetting({action:"sek-update-fonts",is_global_location:o.isGlobalLocation(e.apiParams)});var t=e.location_skope_id;_.isUndefined(t)&&(t=!0===e.is_global_location?sektionsLocalizedData.globalSkopeId:c.czr_skopeBase.getSkopeProperty("skope_id")),c.previewer.trigger("sek-refresh-stylesheet",{location_skope_id:t,is_global_location:o.isGlobalLocation(e.apiParams)}),e.apiParams.is_first_section&&c.previewer.trigger("sek-refresh-level",{level:"location",id:e.apiParams.location}),e.apiParams.sektion_to_replace&&c.previewer.trigger("sek-remove",{id:e.apiParams.sektion_to_replace,location:e.apiParams.location,in_column:e.apiParams.in_column,level:"section"})}},"sek-add-preset-section-in-new-nested-sektion":{callback:function(e){return a=!1,s={},(r=e).action="sek-add-preset-section-in-new-nested-sektion",r.id=sektionsLocalizedData.optPrefixForSektionsNotSaved+o.guid(),c.previewer.send("sek-maybe-print-loader",{loader_located_in_level_id:e.location}),o.updateAPISetting(r)},complete:function(e){c.previewer.trigger("sek-refresh-stylesheet",{id:e.apiParams.in_sektion,location_skope_id:c.czr_skopeBase.getSkopeProperty("skope_id")}),o.updateAPISetting({action:"sek-update-fonts",is_global_location:o.isGlobalLocation(e.apiParams)}),c.previewer.trigger("sek-refresh-level",{level:"section",id:e.apiParams.in_sektion})}},"sek-pick-content":function(e){return e=_.isObject(e)?e:{},c.czr_sektions.currentContentPickerType=c.czr_sektions.currentContentPickerType||new c.Value,c.czr_sektions.currentContentPickerType(e.content_type||"module"),_.isObject(e)&&e.id&&o.lastClickedTargetInPreview({id:e.id}),a=!0,r={},s={action:"sek-generate-draggable-candidates-picker-ui",content_type:(e=e||{}).content_type||"module",was_triggered:!_.has(e,"was_triggered")||e.was_triggered,focus:!_.has(e,"focus")||e.focus},o.generateUI(s)},"sek-edit-options":function(e){return a=!0,r={},_.isEmpty(e.id)?n.Deferred(function(){this.reject("missing id")}):(s={action:"sek-generate-level-options-ui",level:e.level,id:e.id,in_sektion:e.in_sektion,in_column:e.in_column,options:e.options||[]},o.generateUI(s))},"sek-edit-module":function(e){return a=!0,r={},s={action:"sek-generate-module-ui",level:e.level,id:e.id,in_sektion:e.in_sektion,in_column:e.in_column,options:e.options||[]},o.generateUI(s)},"sek-notify":function(t){return a=!1,n.Deferred(function(){c.panel(sektionsLocalizedData.sektionsPanelId,function(e){c.notifications.add(new c.Notification("sek-notify",{type:t.type||"info",message:t.message,dismissible:!0})),_.delay(function(){c.notifications.remove("sek-notify")},t.duration||5e3)}),this.resolve({is_global_location:o.isGlobalLocation(t)})})},"sek-refresh-level":function(t){return a=!0,n.Deferred(function(e){r={action:"sek-refresh-level",level:t.level,id:t.id},s={},e.resolve({is_global_location:o.isGlobalLocation(t)})})},"sek-refresh-stylesheet":function(t){return a=!0,t=t||{},n.Deferred(function(e){r={id:t.id},s={},e.resolve({is_global_location:o.isGlobalLocation(t)})})},"sek-toggle-save-section-ui":function(t){return a=!1,o.saveUIVisible(!0,t),n.Deferred(function(e){r={},s={},e.resolve({is_global_location:o.isGlobalLocation(t)})})}};_.each(e,function(i,n){c.previewer.bind(n,function(t){var e;if(_.isFunction(i))e=i;else{if(!_.isFunction(i.callback))return void c.errare("::reactToPreviewMsg => invalid callback for action "+n);e=i.callback}try{e(t).done(function(e){e=e||{},a?c.previewer.send(n,{location_skope_id:!0===e.is_global_location?sektionsLocalizedData.globalSkopeId:c.czr_skopeBase.getSkopeProperty("skope_id"),local_skope_id:c.czr_skopeBase.getSkopeProperty("skope_id"),apiParams:r,uiParams:s,cloneId:!_.isEmpty(e.cloneId)&&e.cloneId}):c.previewer.trigger([n,"done"].join("_"),{apiParams:r,uiParams:s}),o.trigger([n,"done"].join("_"),t)}).fail(function(e){c.errare("reactToPreviewMsg => error when firing "+n,e),c.previewer.trigger("sek-notify",{type:"error",duration:3e4,message:['<span style="font-size:0.95em">',"<strong>"+e+"</strong>","<br>",sektionsLocalizedData.i18n["If this problem locks Nimble Builder, you can try resetting the sections of this page."],"<br>",'<span style="text-align:center;display:block">','<button type="button" class="button" aria-label="'+sektionsLocalizedData.i18n.Reset+'" data-sek-reset="true">'+sektionsLocalizedData.i18n.Reset+"</button>","</span>","</span>"].join("")})})}catch(e){c.errare("reactToPreviewMsg => error when receiving "+n,e)}})}),_.each(e,function(t,i){c.previewer.bind([i,"done"].join("_"),function(e){if(_.isFunction(t.complete))try{t.complete(e)}catch(e){c.errare("reactToPreviewMsg done => error when receiving "+[i,"done"].join("_"),e)}})})},schedulePrintSectionJson:function(){var i=this;c.previewer.bind("sek-to-json",function(e){var t=n.extend(!0,{},i.getLevelModel(e.id));console.log(JSON.stringify(i.cleanIds(t)))})}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(k,y){y.extend(CZRSeksPrototype,{generateUI:function(e){var t=this,i=y.Deferred();switch(_.isEmpty(e.action)&&i.reject("generateUI => missing action"),e.action){case"sek-generate-module-ui":try{i=t.generateUIforFrontModules(e,i)}catch(e){k.errare("::generateUI() => error",e),i=y.Deferred()}break;case"sek-generate-level-options-ui":try{i=t.generateUIforLevelOptions(e,i)}catch(e){k.errare("::generateUI() => error",e),i=y.Deferred()}break;case"sek-generate-draggable-candidates-picker-ui":t.cleanRegistered();try{i=t.generateUIforDraggableContent(e,i)}catch(e){k.errare("::generateUI() => error",e),i=y.Deferred()}break;case"sek-generate-local-skope-options-ui":t.cleanRegistered();try{i=t.generateUIforLocalSkopeOptions(e,i)}catch(e){k.errare("::generateUI() => error",e),i=y.Deferred()}break;case"sek-generate-global-options-ui":t.cleanRegistered();try{i=t.generateUIforGlobalOptions(e,i)}catch(e){k.errare("::generateUI() => error",e),i=y.Deferred()}}return"pending"==i.state()?i.resolve().promise():i.promise()},updateAPISettingAndExecutePreviewActions:function(n){if(!_.isEmpty(n.settingParams)&&_.has(n.settingParams,"to")){var o,r=this,e=n.settingParams.to,t=null,i=!1;if(!_.isEmpty(n.settingParams.args)&&_.has(n.settingParams.args,"moduleRegistrationParams")){var s=n.settingParams.args.moduleRegistrationParams.control,a=n.settingParams.args.moduleRegistrationParams.id,c=s.czr_Module(a);if(_.isEmpty(c)?k.errare("updateAPISettingAndExecutePreviewActions => missing parentModuleInstance",n):(t=c.module_type,i=c.isMultiItem()),!i&&_.isObject(e)?o=r.normalizeAndSanitizeSingleItemInputValues(e,t):(o=[],_.each(e,function(e){o.push(r.normalizeAndSanitizeSingleItemInputValues(e,t))})),_.isEmpty(n.defaultPreviewAction))k.errare("updateAPISettingAndExecutePreviewActions => missing defaultPreviewAction in passed params. No action can be triggered to the api.previewer.",n);else{var l,d="refresh_stylesheet"===n.defaultPreviewAction,u="refresh_markup"===n.defaultPreviewAction,p="refresh_fonts"===n.defaultPreviewAction,m="refresh_preview"===n.defaultPreviewAction,f=n.settingParams.args.input_changed;_.isUndefined(f)||(l=r.getInputRegistrationParams(f,t),_.isUndefined(l.refresh_stylesheet)||(d=Boolean(l.refresh_stylesheet)),_.isUndefined(l.refresh_markup)||(u=Boolean(l.refresh_markup)),_.isUndefined(l.refresh_fonts)||(p=Boolean(l.refresh_fonts)),_.isUndefined(l.refresh_preview)||(m=Boolean(l.refresh_preview)));var g=function(){if(!0!==n.isGlobalOptions)return r.updateAPISetting({action:n.uiParams.action,id:n.uiParams.id,value:o,in_column:n.uiParams.in_column,in_sektion:n.uiParams.in_sektion,options_type:n.options_type,settingParams:n.settingParams}).done(function(e){!0===d&&k.previewer.send("sek-refresh-stylesheet",{location_skope_id:!0===e.is_global_location?sektionsLocalizedData.globalSkopeId:k.czr_skopeBase.getSkopeProperty("skope_id"),local_skope_id:k.czr_skopeBase.getSkopeProperty("skope_id"),apiParams:{action:"sek-refresh-stylesheet",id:n.uiParams.id,level:n.uiParams.level}}),!0===u&&k.previewer.send("sek-refresh-level",{location_skope_id:!0===e.is_global_location?sektionsLocalizedData.globalSkopeId:k.czr_skopeBase.getSkopeProperty("skope_id"),local_skope_id:k.czr_skopeBase.getSkopeProperty("skope_id"),apiParams:{action:"sek-refresh-level",id:n.uiParams.id,level:n.uiParams.level},skope_id:k.czr_skopeBase.getSkopeProperty("skope_id")}),!0===m&&k.previewer.refresh()});if(_.isEmpty(n.options_type))k.errare("updateAPISettingAndExecutePreviewActions => error when updating the global options => missing options_type");else{var e=k(sektionsLocalizedData.optNameForGlobalOptions)(),t=y.extend(!0,{},_.isObject(e)?e:{}),i={};_.each(o||{},function(e,t){!_.isBoolean(e)&&_.isEmpty(e+"")||(i[t]=e)}),t[n.options_type]=i,k(sektionsLocalizedData.optNameForGlobalOptions)(t)}};if(!0===p){var h=n.settingParams.args.input_value;if(!_.isString(h))return void k.errare("updateAPISettingAndExecutePreviewActions => font-family must be a string",h);-1<h.indexOf("gfont")?r.updateAPISetting({action:"sek-update-fonts",font_family:h,is_global_location:r.isGlobalLocation(n.uiParams)}).always(function(){g().then(function(){r.updateAPISetting({action:"sek-update-fonts",is_global_location:r.isGlobalLocation(n.uiParams)})})}):g()}else g()}}else k.errare("updateAPISettingAndExecutePreviewActions => missing params.settingParams.args.moduleRegistrationParams The api main setting can not be updated",n)}else k.errare("updateAPISettingAndExecutePreviewActions => missing params.settingParams.to. The api main setting can not be updated",n)},normalizeAndSanitizeSingleItemInputValues:function(e,o){var i,r={},n={},s=null,a=this;return _.each(e,function(e,t){var i,n;_.contains(["title","id"],t)||(null!==o&&"no_default_value_specified"===(s=a.getInputDefaultValue(t,o))&&k.infoLog("::updateAPISettingAndExecutePreviewActions => missing default value for input "+t+" in module "+o),i=e,n=s,(_.isBoolean(i)||_.isBoolean(n)?Boolean(i)===Boolean(n):_.isNumber(i)||_.isNumber(n)?Number(i)===Number(n):_.isString(i)||_.isString(n)?i+""==n+"":_.isObject(i)&&_.isObject(n)?_.isEqual(i,n):_.isArray(i)&&_.isArray(n)?JSON.stringify(i.sort())===JSON.stringify(n.sort()):i===n)||(_.isString(e)||_.isObject(e))&&_.isEmpty(e)||(r[t]=e))}),_.each(r,function(e,t){switch(a.getInputType(t,o)){case"text":case"textarea":case"check":case"gutencheck":case"select":case"radio":case"number":case"upload":case"upload_url":case"color":case"wp_color_alpha":case"wp_color":case"content_picker":case"tiny_mce_editor":case"password":case"range":case"range_slider":case"hidden":case"h_alignment":case"h_text_alignment":case"spacing":case"bg_position":case"v_alignment":case"font_size":case"line_height":case"font_picker":default:i=e}n[t]=i}),n},isUIControlAlreadyRegistered:function(t){var e=_.filter(this.registered(),function(e){return e.id==t&&"control"===e.what}),i=!1;return _.isEmpty(e)?i=k.control.has(t):(i=!0,1<e.length&&k.errare("generateUI => why is this control registered more than once ? => "+t)),i}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(s,a){a.extend(CZRSeksPrototype,{generateUIforDraggableContent:function(o,e){var r=this,t={};a.extend(t,{content_type_switcher:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+"_sek_content_type_switcher_ui",module_type:"sek_content_type_switcher_module",controlLabel:sektionsLocalizedData.i18n["Select a content type"],priority:0,settingValue:{content_type:o.content_type}},module_picker:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+"_sek_draggable_modules_ui",module_type:"sek_module_picker_module",controlLabel:sektionsLocalizedData.i18n["Pick a module"],content_type:"module",priority:20,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'},sek_intro_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_intro_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Sections for an introduction"],content_type:"section",expandAndFocusOnInit:!0,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'},sek_features_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_features_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Sections for services and features"],content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'},sek_contact_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_contact_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Contact-us sections"],content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'},sek_column_layouts_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_column_layouts_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Empty sections with columns layout"],content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'}}),sektionsLocalizedData.isNimbleHeaderFooterEnabled&&a.extend(t,{sek_header_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_header_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Header sections"],content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'},sek_footer_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_footer_sec_picker_module",controlLabel:sektionsLocalizedData.i18n["Footer sections"],content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'}}),sektionsLocalizedData.isSavedSectionEnabled&&a.extend(t,{sek_my_sections_sec_picker_module:{settingControlId:sektionsLocalizedData.optPrefixForSektionsNotSaved+r.guid()+"_sek_draggable_sections_ui",module_type:"sek_my_sections_sec_picker_module",controlLabel:"@missi18n My sections",content_type:"section",expandAndFocusOnInit:!1,priority:10,icon:'<i class="fas fa-grip-vertical sek-level-option-icon"></i>'}});var i=_.keys(t)[0],n=t[i].settingControlId;return r.isUIControlAlreadyRegistered(n)?s.control(n,function(t){t.focus({completeCallback:function(){var e=t.container;e.hasClass("button-see-me")||(e.addClass("button-see-me"),_.delay(function(){e.removeClass("button-see-me")},800))}})}):(_do_register_=function(){_.each(t,function(n,e){s.has(n.settingControlId)||(s(n.settingControlId,function(e){e.bind(function(e,t){s.errare("generateUIforDraggableContent => the setting() should not changed")})}),s.CZR_Helpers.register({origin:"nimble",level:o.level,what:"setting",id:n.settingControlId,dirty:!1,value:n.settingValue||{},transport:"postMessage",type:"_nimble_ui_"})),s.CZR_Helpers.register({origin:"nimble",level:o.level,what:"control",id:n.settingControlId,label:n.controlLabel,type:"czr_module",module_type:n.module_type,section:r.SECTION_ID_FOR_CONTENT_PICKER,priority:n.priority||10,settings:{default:n.settingControlId},track:!1}).done(function(){s.control(n.settingControlId,function(e){e.content_type=n.content_type,!0===o.focus&&e.focus({completeCallback:function(){}});var t=e.container.find("label > .customize-control-title"),i=t.html();t.html(['<span class="sek-ctrl-accordion-title">',i,"</span>"].join("")),_.isUndefined(n.icon)||t.addClass("sek-flex-vertical-center").prepend(n.icon),"section"===e.content_type?(e.container.find(".czr-items-wrapper").hide(),t.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>'),e.container.attr("data-sek-expanded","false"),!0===n.expandAndFocusOnInit&&"false"==e.container.attr("data-sek-expanded")&&(e.container.find(".czr-items-wrapper").show(),t.trigger("click"))):e.container.attr("data-sek-accordion","no")})})})},s.section(r.SECTION_ID_FOR_CONTENT_PICKER,function(e){_do_register_();var t=e.container.find(".accordion-section-title"),i=e.container.find(".customize-section-title h3");0<t.length&&t.find(".sek-level-option-icon").length<1&&t.prepend('<i class="fas fa-grip-vertical sek-level-option-icon"></i>'),0<i.length&&i.find(".sek-level-option-icon").length<1&&i.find(".customize-action").after('<i class="fas fa-grip-vertical sek-level-option-icon"></i>'),r.scheduleModuleAccordion.call(e,{expand_first_control:!0}),r._maybeFetchSectionsFromServer()})),e}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(d,u){u.extend(CZRSeksPrototype,{generateUIforFrontModules:function(r,e){var s=this;_.isEmpty(r.id)&&e.reject("generateUI => missing id");var i=s.getLevelProperty({property:"value",id:r.id}),t=s.getLevelProperty({property:"module_type",id:r.id}),n=s.getRegisteredModuleProperty(t,"name");_.isEmpty(t)&&e.reject("generateUI => module => invalid module_type");var o={};if(!0===s.getRegisteredModuleProperty(t,"is_father")){var a=s.getRegisteredModuleProperty(t,"children");if(_.isEmpty(a))throw new Error("::generateUIforFrontModules => a father module "+t+" is missing children modules ");_.each(a,function(e,t){o[t]={settingControlId:r.id+"__"+t,module_type:e,controlLabel:s.getRegisteredModuleProperty(e,"name")}})}else o.__no_option_group_to_be_updated_by_children_modules__={settingControlId:r.id,module_type:t,controlLabel:n};var c=_.keys(o)[0],l=o[c].settingControlId;return s.isUIControlAlreadyRegistered(l)?d.control(l).focus({completeCallback:function(){var e=d.control(l).container;e.hasClass("button-see-me")||(e.addClass("button-see-me"),_.delay(function(){e.removeClass("button-see-me")},800))}}):(s.cleanRegistered(),_do_register_=function(){_.each(o,function(n,o){if(!d.has(n.settingControlId)){var t=function(e,t,i){try{s.updateAPISettingAndExecutePreviewActions({defaultPreviewAction:"refresh_markup",uiParams:_.extend(r,{action:"sek-set-module-value"}),options_type:o,settingParams:{to:e,from:t,args:i}})}catch(e){d.errare("::generateUIforFrontModules => Error in updateAPISettingAndExecutePreviewActions",e)}};d(n.settingControlId,function(e){e.bind(_.debounce(t,s.SETTING_UPDATE_BUFFER))});var e=u.extend(!0,{},i);"__no_option_group_to_be_updated_by_children_modules__"!==o&&(e=!_.isEmpty(e)&&_.isObject(e)&&_.isObject(e[o])?e[o]:{}),d.CZR_Helpers.register({origin:"nimble",level:r.level,what:"setting",id:n.settingControlId,dirty:!1,value:e,transport:"postMessage",type:"_nimble_ui_"})}d.CZR_Helpers.register({origin:"nimble",level:r.level,what:"control",id:n.settingControlId,label:n.controlLabel,type:"czr_module",module_type:n.module_type,section:r.id,priority:10,settings:{default:n.settingControlId}}).done(function(){}),d.control(n.settingControlId,function(e){d.control(n.settingControlId).focus({completeCallback:function(){}}),e.container.find(".czr-items-wrapper").hide();var t=e.container.find("label > .customize-control-title"),i=t.html();t.html(['<span class="sek-ctrl-accordion-title">',i,"</span>"].join("")),_.isUndefined(n.icon)||t.addClass("sek-flex-vertical-center").prepend(n.icon),t.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>'),e.container.attr("data-sek-expanded","false")})})},d.section.when(r.id,function(){d.section(r.id).focus(),_do_register_()}),d.CZR_Helpers.register({origin:"nimble",what:"section",id:r.id,title:sektionsLocalizedData.i18n["Content for"]+" "+n,panel:sektionsLocalizedData.sektionsPanelId,priority:1e3}).done(function(){}),d.section(r.id,function(e){e.container.find(".accordion-section-title").first().hide();var t=e.container.find(".customize-section-title h3");0<t.length&&t.find(".customize-action").after('<i class="fas fa-pencil-alt sek-level-option-icon"></i>'),s.scheduleModuleAccordion.call(e,{expand_first_control:!0})})),e}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(l,d){d.extend(CZRSeksPrototype,{generateUIforLevelOptions:function(s,e){var a=this,c=a.getLevelProperty({property:"options",id:s.id});c=_.isObject(c)?c:{};var t={};d.extend(t,{bg:{settingControlId:s.id+"__bg_options",module_type:"sek_level_bg_module",controlLabel:sektionsLocalizedData.i18n["Background settings for the"]+" "+sektionsLocalizedData.i18n[s.level],expandAndFocusOnInit:!0,icon:'<i class="material-icons sek-level-option-icon">gradient</i>'},border:{settingControlId:s.id+"__border_options",module_type:"sek_level_border_module",controlLabel:sektionsLocalizedData.i18n["Borders settings for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="material-icons sek-level-option-icon">rounded_corner</i>'},spacing:{settingControlId:s.id+"__spacing_options",module_type:"sek_level_spacing_module",controlLabel:sektionsLocalizedData.i18n["Padding and margin settings for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="material-icons sek-level-option-icon">center_focus_weak</i>'},anchor:{settingControlId:s.id+"__anchor_options",module_type:"sek_level_anchor_module",controlLabel:sektionsLocalizedData.i18n["Set a custom anchor ( CSS ID ) for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="fas fa-anchor sek-level-option-icon"></i>'},visibility:{settingControlId:s.id+"__visibility_options",module_type:"sek_level_visibility_module",controlLabel:sektionsLocalizedData.i18n["Device visibility settings for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="far fa-eye sek-level-option-icon"></i>'},height:{settingControlId:s.id+"__height_options",module_type:"sek_level_height_module",controlLabel:sektionsLocalizedData.i18n["Height and vertical alignment for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="fas fa-ruler-vertical sek-level-option-icon"></i>'}}),"section"===s.level&&(d.extend(t,{width:{settingControlId:s.id+"__width_options",module_type:"sek_level_width_section",controlLabel:sektionsLocalizedData.i18n["Width settings for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="fas fa-ruler-horizontal sek-level-option-icon"></i>'}}),d.extend(t,{breakpoint:{settingControlId:s.id+"__breakpoint_options",module_type:"sek_level_breakpoint_module",controlLabel:sektionsLocalizedData.i18n["Responsive settings : breakpoint, column direction"],icon:'<i class="material-icons sek-level-option-icon">devices</i>'}})),"module"===s.level&&d.extend(t,{width:{settingControlId:s.id+"__width_options",module_type:"sek_level_width_module",controlLabel:sektionsLocalizedData.i18n["Width settings for the"]+" "+sektionsLocalizedData.i18n[s.level],icon:'<i class="fas fa-ruler-horizontal sek-level-option-icon"></i>'}});var i=_.keys(t)[0],n=t[i].settingControlId;return a.isUIControlAlreadyRegistered(n)?l.control(n).focus({completeCallback:function(){var e=l.control(n).container;e.hasClass("button-see-me")||(e.addClass("button-see-me"),_.delay(function(){e.removeClass("button-see-me")},800))}}):(a.cleanRegistered(),_do_register_=function(){_.each(t,function(n,o){if(a.isUIControlAlreadyRegistered(n.settingControlId))l.section(l.control(n.settingControlId).section()).expanded(!0);else{if(!l.has(n.settingControlId)){var t=function(e,t,i){try{a.updateAPISettingAndExecutePreviewActions({defaultPreviewAction:"refresh_stylesheet",uiParams:s,options_type:o,settingParams:{to:e,from:t,args:i}})}catch(e){l.errare("::generateUIforLevelOptions => Error in updateAPISettingAndExecutePreviewActions",e)}};l(n.settingControlId,function(e){e.bind(_.debounce(t,a.SETTING_UPDATE_BUFFER))});var e=c[o]||{},i=a.getModuleStartingValue(n.module_type);if("no_starting_value"!==i&&_.isObject(i)){var r=d.extend(!0,{},i);e=d.extend(r,e)}l.CZR_Helpers.register({origin:"nimble",level:s.level,what:"setting",id:n.settingControlId,dirty:!1,value:e,transport:"postMessage",type:"_nimble_ui_"})}l.CZR_Helpers.register({origin:"nimble",level:s.level,level_id:s.id,what:"control",id:n.settingControlId,label:n.controlLabel,type:"czr_module",module_type:n.module_type,section:s.id,priority:0,settings:{default:n.settingControlId}}).done(function(){}),l.control(n.settingControlId,function(e){!0===n.expandAndFocusOnInit&&e.focus({completeCallback:function(){}}),e.container.find(".czr-items-wrapper").hide();var t=e.container.find("label > .customize-control-title"),i=t.html();t.html(['<span class="sek-ctrl-accordion-title">',i,"</span>"].join("")),_.isUndefined(n.icon)||t.addClass("sek-flex-vertical-center").prepend(n.icon),t.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>'),e.container.attr("data-sek-expanded","false")})}})},l.section.has(s.id)||l.section(s.id,function(e){a.scheduleModuleAccordion.call(e,{expand_first_control:!0})}),l.CZR_Helpers.register({origin:"nimble",what:"section",id:s.id,title:sektionsLocalizedData.i18n["Settings for the"]+" "+s.level,panel:sektionsLocalizedData.sektionsPanelId,priority:10}).done(function(){}),l.section(s.id,function(e){_do_register_(),e.container.find(".accordion-section-title").first().hide();var t=e.container.find(".customize-section-title h3");0<t.length&&t.find(".sek-level-option-icon").length<1&&t.find(".customize-action").after('<i class="fas fa-sliders-h sek-level-option-icon"></i>')})),e}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(d,u){u.extend(CZRSeksPrototype,{getLocalSkopeOptionId:function(){var e=d.czr_skopeBase.getSkopeProperty("skope_id");return _.isEmpty(e)?(d.errare("czr_sektions::getLocalSkopeOptionId => empty skope_id "),""):sektionsLocalizedData.optPrefixForSektionsNotSaved+e+"__localSkopeOptions"},generateUIforLocalSkopeOptions:function(c,e){var l=this,i=l.getLocalSkopeOptionId();if(l.isUIControlAlreadyRegistered(i))return e;var n={};return _.isUndefined(sektionsLocalizedData.localOptionsMap)||!_.isObject(sektionsLocalizedData.localOptionsMap)?d.errare("::generateUIforGlobalOptions => missing or invalid localOptionsMap"):(_.each(sektionsLocalizedData.localOptionsMap,function(e,t){switch(t){case"template":n[t]={settingControlId:i+"__template",module_type:e,controlLabel:sektionsLocalizedData.i18n["Page template"],expandAndFocusOnInit:!1,icon:'<i class="material-icons sek-level-option-icon">check_box_outline_blank</i>'};break;case"local_header_footer":sektionsLocalizedData.isNimbleHeaderFooterEnabled&&(n[t]={settingControlId:i+"__local_header_footer",module_type:e,controlLabel:sektionsLocalizedData.i18n["Page header and footer"],icon:'<i class="material-icons sek-level-option-icon">web</i>'});break;case"widths":n[t]={settingControlId:i+"__widths",module_type:e,controlLabel:sektionsLocalizedData.i18n["Inner and outer widths"],icon:'<i class="fas fa-ruler-horizontal sek-level-option-icon"></i>'};break;case"custom_css":n[t]={settingControlId:i+"__custom_css",module_type:e,controlLabel:sektionsLocalizedData.i18n["Custom CSS"],icon:'<i class="material-icons sek-level-option-icon">code</i>'};break;case"local_performances":n[t]={settingControlId:i+"__local_performances",module_type:e,controlLabel:sektionsLocalizedData.i18n["Page speed optimizations"],icon:'<i class="fas fa-fighter-jet sek-level-option-icon"></i>'};break;case"local_reset":n[t]={settingControlId:i+"__local_reset",module_type:e,controlLabel:sektionsLocalizedData.i18n["Remove the sections in this page"],icon:'<i class="material-icons sek-level-option-icon">cached</i>'};break;default:d.errare("::generateUIforLocalOptions => an option group could not be registered => "+e,t)}}),_do_register_=function(){_.each(n,function(n,o){if(!d.has(n.settingControlId)){var t=function(e,t,i){try{l.updateAPISettingAndExecutePreviewActions({defaultPreviewAction:"refresh",uiParams:c,options_type:o,settingParams:{to:e,from:t,args:i}})}catch(e){d.errare("::generateUIforLocalSkopeOptions => Error in updateAPISettingAndExecutePreviewActions",e)}};d(n.settingControlId,function(e){e.bind(_.debounce(t,l.SETTING_UPDATE_BUFFER))});var e=l.getModuleStartingValue(n.module_type),i=d(l.localSectionsSettingId())(),r=u.extend(!0,{},_.isObject(i.local_options)?i.local_options:{}),s=_.isObject(r[o])?r[o]:{};if("no_starting_value"!==e&&_.isObject(e)){var a=u.extend(!0,{},e);s=u.extend(a,s)}d.CZR_Helpers.register({origin:"nimble",level:c.level,what:"setting",id:n.settingControlId,dirty:!1,value:s,transport:"postMessage",type:"_nimble_ui_"})}d.CZR_Helpers.register({origin:"nimble",level:c.level,what:"control",id:n.settingControlId,label:n.controlLabel,type:"czr_module",module_type:n.module_type,section:l.SECTION_ID_FOR_LOCAL_OPTIONS,priority:10,settings:{default:n.settingControlId}}).done(function(){d.control(n.settingControlId,function(e){e.container.find(".czr-items-wrapper").hide();var t=e.container.find("label > .customize-control-title"),i=t.html();t.html(['<span class="sek-ctrl-accordion-title">',i,"</span>"].join("")),_.isUndefined(n.icon)||t.addClass("sek-flex-vertical-center").prepend(n.icon),t.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>'),e.container.attr("data-sek-expanded","false"),!0===n.expandAndFocusOnInit&&"false"==e.container.attr("data-sek-expanded")&&t.trigger("click")})})})},_do_register_()),e}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(l,d){d.extend(CZRSeksPrototype,{generateUIforGlobalOptions:function(a,e){var c=this,i=sektionsLocalizedData.optPrefixForSektionsNotSaved+sektionsLocalizedData.optNameForGlobalOptions;if(c.isUIControlAlreadyRegistered(i))return e;var n={};return _.isUndefined(sektionsLocalizedData.globalOptionsMap)||!_.isObject(sektionsLocalizedData.globalOptionsMap)?l.errare("::generateUIforGlobalOptions => missing or invalid globalOptionsMap"):(_.each(sektionsLocalizedData.globalOptionsMap,function(e,t){switch(t){case"global_header_footer":sektionsLocalizedData.isNimbleHeaderFooterEnabled&&(n[t]={settingControlId:i+"__header_footer",module_type:e,controlLabel:sektionsLocalizedData.i18n["Site wide header and footer"],icon:'<i class="material-icons sek-level-option-icon">web</i>'});break;case"breakpoint":n[t]={settingControlId:i+"__breakpoint",module_type:e,controlLabel:sektionsLocalizedData.i18n["Site wide breakpoint for Nimble sections"],expandAndFocusOnInit:!1,icon:'<i class="material-icons sek-level-option-icon">devices</i>'};break;case"widths":n[t]={settingControlId:i+"__widths",module_type:e,controlLabel:sektionsLocalizedData.i18n["Site wide inner and outer sections widths"],icon:'<i class="fas fa-ruler-horizontal sek-level-option-icon"></i>'};break;case"performances":n[t]={settingControlId:i+"__performances",module_type:e,controlLabel:sektionsLocalizedData.i18n["Site wide page speed optimizations"],icon:'<i class="fas fa-fighter-jet sek-level-option-icon"></i>'};break;case"recaptcha":n[t]={settingControlId:i+"__recaptcha",module_type:e,controlLabel:sektionsLocalizedData.i18n["Protect your contact forms with Google reCAPTCHA"],icon:'<i class="material-icons sek-level-option-icon">security</i>'};break;case"beta_features":n[t]={settingControlId:i+"__beta_features",module_type:e,controlLabel:sektionsLocalizedData.i18n["Beta features"],icon:'<i class="material-icons sek-level-option-icon">widgets</i>'};break;default:l.errare("::generateUIforGlobalOptions => an option group could not be registered => "+e,t)}}),_do_register_=function(){_.each(n,function(n,o){if(!l.has(n.settingControlId)){var t=function(e,t,i){try{c.updateAPISettingAndExecutePreviewActions({isGlobalOptions:!0,defaultPreviewAction:"refresh",uiParams:a,options_type:o,settingParams:{to:e,from:t,args:i}})}catch(e){l.errare("::generateUIforGlobalOptions => Error in updateAPISettingAndExecutePreviewActions",e)}};l(n.settingControlId,function(e){e.bind(_.debounce(t,c.SETTING_UPDATE_BUFFER))});var e=sektionsLocalizedData.globalOptionDBValues,i=c.getModuleStartingValue(n.module_type),r=_.isObject(e)&&!_.isEmpty(e[o])?e[o]:{};if("no_starting_value"!==i&&_.isObject(i)){var s=d.extend(!0,{},i);r=d.extend(s,r)}l.CZR_Helpers.register({origin:"nimble",level:a.level,what:"setting",id:n.settingControlId,dirty:!1,value:r,transport:"postMessage",type:"_nimble_ui_"})}l.CZR_Helpers.register({origin:"nimble",level:a.level,what:"control",id:n.settingControlId,label:n.controlLabel,type:"czr_module",module_type:n.module_type,section:c.SECTION_ID_FOR_GLOBAL_OPTIONS,priority:20,settings:{default:n.settingControlId},track:!1}).done(function(){l.control(n.settingControlId,function(e){e.container.find(".czr-items-wrapper").hide();var t=e.container.find("label > .customize-control-title"),i=t.html();t.html(['<span class="sek-ctrl-accordion-title">',i,"</span>"].join("")),_.isUndefined(n.icon)||t.addClass("sek-flex-vertical-center").prepend(n.icon),t.prepend('<span class="sek-animated-arrow" data-name="icon-chevron-down"><span class="fa fa-chevron-down"></span></span>'),e.container.attr("data-sek-expanded","false"),!0===n.expandAndFocusOnInit&&"false"==e.container.attr("data-sek-expanded")&&t.trigger("click")})})})},_do_register_()),e}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(K,X){X.extend(CZRSeksPrototype,{updateAPISetting:function(q){var Y=this,J=X.Deferred();(q=q||{}).is_global_location=Y.isGlobalLocation(q);var e=q.is_global_location?Y.getGlobalSectionsSettingId():Y.localSectionsSettingId();return K(e,function(e){var n,t,o,i,r,s,a,c,l,d=e(),u=_.isObject(d)?X.extend(!0,{},d):Y.getDefaultSektionSettingValue(q.is_global_location?"global":"local"),p=!1;switch(u.collection=_.isArray(u.collection)?u.collection:Y.getDefaultSektionSettingValue(q.is_global_location?"global":"local").collection,q.action){case"sek-add-section":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if(_.isEmpty(q.location))throw new Error("updateAPISetting => "+q.action+" => missing location");if(!0===q.is_nested){if(o=Y.getLevelModel(q.in_column,u.collection),"no_match"==(l=Y.getLevelModel(q.in_sektion,u.collection))){J.reject("updateAPISetting => "+q.action+" => no grand parent sektion found");break}if(!0===l.is_nested){J.reject(sektionsLocalizedData.i18n["You've reached the maximum number of allowed nested sections."]);break}if("no_match"==o){K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched");break}o.collection=_.isArray(o.collection)?o.collection:[],o.collection.push({id:q.id,level:"section",collection:[{id:sektionsLocalizedData.optPrefixForSektionsNotSaved+Y.guid(),level:"column",collection:[],ver_ini:sektionsLocalizedData.nimbleVersion}],is_nested:!0,ver_ini:sektionsLocalizedData.nimbleVersion})}else{if("no_match"==(n=Y.getLevelModel(q.location,u.collection))){K.errare("updateAPISetting => "+q.action+" => no location matched"),J.reject("updateAPISetting => "+q.action+" => no location matched");break}n.collection=_.isArray(n.collection)?n.collection:[],_.each(n.collection,function(e,t){q.before_section===e.id&&(L=t),q.after_section===e.id&&(L=t+1)}),n.collection=_.isArray(n.collection)?n.collection:[],n.collection.splice(L,0,{id:q.id,level:"section",collection:[{id:sektionsLocalizedData.optPrefixForSektionsNotSaved+Y.guid(),level:"column",collection:[],ver_ini:sektionsLocalizedData.nimbleVersion}],ver_ini:sektionsLocalizedData.nimbleVersion})}break;case"sek-duplicate-section":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if(_.isEmpty(q.location))throw new Error("updateAPISetting => "+q.action+" => missing location");var m;try{m=Y.cloneLevel(q.id)}catch(e){K.errare("updateAPISetting => "+q.action,e);break}var f=Y.getLevelPositionInCollection(q.id,u.collection);if(!0===q.is_nested){if("no_match"==(o=Y.getLevelModel(q.in_column,u.collection))){K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched");break}o.collection=_.isArray(o.collection)?o.collection:[],o.collection.splice(parseInt(f+1,10),0,m)}else{if("no_match"==(n=Y.getLevelModel(q.location,u.collection))){K.errare("updateAPISetting => "+q.action+" => no location matched"),J.reject("updateAPISetting => "+q.action+" => no location matched");break}n.collection=_.isArray(n.collection)?n.collection:[],n.collection.splice(parseInt(f+1,10),0,m)}a=m.id;break;case"sek-remove-section":if(!0===q.is_nested)"no_match"!=(o=Y.getLevelModel(q.in_column,u.collection))?(o.collection=_.isArray(o.collection)?o.collection:[],o.collection=_.filter(o.collection,function(e){return e.id!=q.id})):K.errare("updateAPISetting => "+q.action+" => no parent column matched");else{if("no_match"==(n=Y.getLevelModel(q.location,u.collection))){K.errare("updateAPISetting => "+q.action+" => no location matched"),J.reject("updateAPISetting => "+q.action+" => no location matched");break}n.collection=_.filter(n.collection,function(e){return e.id!=q.id})}break;case"sek-move-section":var g,h,k=Y.getLevelModel(q.to_location,u.collection);if(_.isEmpty(k)||"no_match"==k)throw new Error("updateAPISetting => "+q.action+" => missing target location");if(q.from_location!=q.to_location){var y=Y.getLevelModel(q.from_location,u.collection);if(_.isEmpty(y)||"no_match"==y)throw new Error("updateAPISetting => "+q.action+" => missing source location");y.collection=_.isArray(y.collection)?y.collection:[],g=Y.getLevelModel(q.id,y.collection),h=X.extend(!0,{},g),y.collection=_.filter(y.collection,function(e){return e.id!=q.id})}k.collection=_.isArray(k.collection)?k.collection:[],r=X.extend(!0,[],k.collection),s=[],_.each(q.newOrder,function(e){if(q.from_location!=q.to_location&&e==h.id)s.push(h);else{if(t=Y.getLevelModel(e,r),_.isEmpty(t)||"no_match"==t)throw new Error("updateAPISetting => "+q.action+" => missing section candidate");s.push(t)}}),k.collection=s;break;case"sek-move-section-up-down":if(inLocationCandidate=Y.getLevelModel(q.location,u.collection),_.isEmpty(inLocationCandidate)||"no_match"==inLocationCandidate)throw new Error("updateAPISetting => "+q.action+" => missing target location");inLocationCandidate.collection=_.isArray(inLocationCandidate.collection)?inLocationCandidate.collection:[],r=X.extend(!0,[],inLocationCandidate.collection),s=X.extend(!0,[],inLocationCandidate.collection);var v=_.findIndex(r,function(e){return e.id===q.id});if(-1===v)throw new Error("updateAPISetting => "+q.action+" => invalid index");var b=q.direction||"up";s[v]=r["up"===b?v-1:v+1],s["up"===b?v-1:v+1]=r[v],inLocationCandidate.collection=s;break;case"sek-add-column":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if("no_match"==(t=Y.getLevelModel(q.in_sektion,u.collection))){K.errare("updateAPISetting => "+q.action+" => no parent sektion matched"),J.reject("updateAPISetting => "+q.action+" => no parent sektion matched");break}if(t.collection=_.isArray(t.collection)?t.collection:[],Y.MAX_NUMBER_OF_COLUMNS-1<_.size(t.collection)){J.reject(sektionsLocalizedData.i18n["You've reached the maximum number of columns allowed in this section."]);break}_.each(t.collection,function(e){e.width=""}),t.collection.push({id:q.id,level:"column",collection:[],ver_ini:sektionsLocalizedData.nimbleVersion});break;case"sek-remove-column":if("no_match"!=(t=Y.getLevelModel(q.in_sektion,u.collection))){if(1===_.size(t.collection)){J.reject(sektionsLocalizedData.i18n["A section must have at least one column."]);break}t.collection=_.isArray(t.collection)?t.collection:[],t.collection=_.filter(t.collection,function(e){return e.id!=q.id}),_.each(t.collection,function(e){e.width=""})}else K.errare("updateAPISetting => "+q.action+" => no parent sektion matched");break;case"sek-duplicate-column":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if("no_match"==(t=Y.getLevelModel(q.in_sektion,u.collection))){K.errare("updateAPISetting => "+q.action+" => no parent sektion matched"),J.reject("updateAPISetting => "+q.action+" => no parent sektion matched");break}if(t.collection=_.isArray(t.collection)?t.collection:[],Y.MAX_NUMBER_OF_COLUMNS-1<_.size(t.collection)){J.reject(sektionsLocalizedData.i18n["You've reached the maximum number of columns allowed in this section."]);break}var z;try{z=Y.cloneLevel(q.id)}catch(e){K.errare("updateAPISetting => "+q.action,e);break}var I=Y.getLevelPositionInCollection(q.id,u.collection);a=z.id,t.collection.splice(parseInt(I+1,10),0,z),_.each(t.collection,function(e){e.width=""});break;case"sek-resize-columns":if(q.col_number<2)break;var w=Y.getLevelModel(q.resized_column,u.collection),M=Y.getLevelModel(q.sister_column,u.collection);if("no_match"==w){K.errare("updateAPISetting => "+q.action+" => no resized column matched"),J.reject("updateAPISetting => "+q.action+" => no resized column matched");break}w.width=parseFloat(q.resizedColumnWidthInPercent);var C=Y.getLevelModel(q.in_sektion,u.collection),S=_.filter(C.collection,function(e){return e.id!=w.id&&e.id!=M.id}),D=parseFloat(w.width.toFixed(3));_.isEmpty(S)||_.each(S,function(e){currentColWidth=parseFloat(1*e.width),(!_.has(e,"width")||!_.isNumber(1*currentColWidth)||_.isEmpty(currentColWidth+"")||currentColWidth<1)&&(e.width=parseFloat((100/q.col_number).toFixed(3))),D=parseFloat((D+e.width).toFixed(3))}),M.width=parseFloat((100-D).toFixed(3));break;case"sek-move-column":var P,x,E=Y.getLevelModel(q.to_sektion,u.collection);if(_.isEmpty(E)||"no_match"==E)throw new Error("updateAPISetting => "+q.action+" => missing target sektion");if(q.from_sektion!=q.to_sektion){var R=Y.getLevelModel(q.from_sektion,u.collection);if(_.isEmpty(R)||"no_match"==R)throw new Error("updateAPISetting => "+q.action+" => missing source column");R.collection=_.isArray(R.collection)?R.collection:[],P=Y.getLevelModel(q.id,R.collection),x=X.extend(!0,{},P),R.collection=_.filter(R.collection,function(e){return e.id!=q.id}),_.each(R.collection,function(e){e.width=""})}E.collection=_.isArray(E.collection)?E.collection:[],r=X.extend(!0,[],E.collection),s=[],_.each(q.newOrder,function(e){if(q.from_sektion!=q.to_sektion&&e==x.id)s.push(x);else{if(o=Y.getLevelModel(e,r),_.isEmpty(o)||"no_match"==o)throw new Error("updateAPISetting => moveColumn => missing columnCandidate");s.push(o)}}),E.collection=s,_.each(E.collection,function(e){e.width=""});break;case"sek-add-module":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if(_.isEmpty(q.module_type))throw new Error("updateAPISetting => "+q.action+" => missing module_type");if("no_match"===(o=Y.getLevelModel(q.in_column,u.collection))){K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched");break}var L=0;o.collection=_.isArray(o.collection)?o.collection:[],_.each(o.collection,function(e,t){q.before_module===e.id&&(L=t),q.after_module===e.id&&(L=t+1)});var O={id:q.id,level:"module",module_type:q.module_type,ver_ini:sektionsLocalizedData.nimbleVersion};"no_starting_value"!==(c=Y.getModuleStartingValue(q.module_type))&&(O.value=c),o.collection.splice(L,0,O);break;case"sek-duplicate-module":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if("no_match"==(o=Y.getLevelModel(q.in_column,u.collection))){K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched");break}var A;o.collection=_.isArray(o.collection)?o.collection:[];try{A=Y.cloneLevel(q.id)}catch(e){K.errare("updateAPISetting => "+q.action,e),J.reject("updateAPISetting => "+q.action+" => error when cloning the level");break}var Z=Y.getLevelPositionInCollection(q.id,u.collection);a=A.id,o.collection.splice(parseInt(Z+1,10),0,A);break;case"sek-remove-module":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");"no_match"!=(o=Y.getLevelModel(q.in_column,u.collection))?(o.collection=_.isArray(o.collection)?o.collection:[],o.collection=_.filter(o.collection,function(e){return e.id!=q.id})):K.errare("updateAPISetting => "+q.action+" => no parent column matched");break;case"sek-move-module":var T,j,V;if(T=Y.getLevelModel(q.to_column,u.collection),_.isEmpty(T)||"no_match"==T)throw new Error("updateAPISetting => "+q.action+" => missing target column");if(q.from_column!=q.to_column){var F;if(F=Y.getLevelModel(q.from_column,u.collection),_.isEmpty(F)||"no_match"==F)throw new Error("updateAPISetting => "+q.action+" => missing source column");F.collection=_.isArray(F.collection)?F.collection:[],j=Y.getLevelModel(q.id,u.collection),V=X.extend(!0,{},j),F.collection=_.filter(F.collection,function(e){return e.id!=q.id})}if(T.collection=_.isArray(T.collection)?T.collection:[],r=X.extend(!0,[],T.collection),s=[],_.each(q.newOrder,function(e){if(q.from_column!=q.to_column&&e==V.id)s.push(V);else{if(i=Y.getLevelModel(e,u.collection),_.isEmpty(i)||"no_match"==i)throw new Error("updateAPISetting => "+q.action+" => missing moduleCandidate");s.push(i)}}),s.length!=_.uniq(s).length)throw new Error("updateAPISetting => "+q.action+" => there are duplicated modules in column : "+T.id);T.collection=s;break;case"sek-set-module-value":i=Y.getLevelModel(q.id,u.collection);var U={};if(_.each(q.value||{},function(e,t){!_.isBoolean(e)&&_.isEmpty(e+"")||(U[t]=e)}),"no_match"==i){K.errare("updateAPISetting => "+q.action+" => no module matched",q),J.reject("updateAPISetting => "+q.action+" => error no module matched");break}if(_.isEmpty(q.options_type)){K.errare("updateAPISetting => "+q.action+" => missing options_type"),J.reject("updateAPISetting => "+q.action+" => missing options_type");break}"__no_option_group_to_be_updated_by_children_modules__"===q.options_type?i.value=U:(i.value=_.isEmpty(i.value)?{}:i.value,i.value[q.options_type]=U);break;case"sek-generate-level-options-ui":var N=Y.getLevelModel(q.id,u.collection),B={};if("no_match"===N){K.errare("updateAPISetting => "+q.action+" => no parent sektion matched"),J.reject("updateAPISetting => "+q.action+" => no parent sektion matched");break}N.options=N.options||{},_.each(q.value||{},function(e,t){!_.isBoolean(e)&&_.isEmpty(e+"")||(B[t]=e)}),_.isEmpty(q.options_type)&&K.errare("updateAPISetting => "+q.action+" => missing options_type"),N.options[q.options_type]=B;break;case"sek-generate-local-skope-options-ui":B={};var Q=X.extend(!0,{},_.isObject(u.local_options)?u.local_options:{});if(_.each(q.value||{},function(e,t){!_.isBoolean(e)&&_.isEmpty(e+"")||(B[t]=e)}),_.isEmpty(q.options_type)||!_.isString(q.options_type))K.errare("updateAPISetting => "+q.action+" => missing options_type");else{var H={};H[q.options_type]=B,u.local_options=X.extend(Q,H)}break;case"sek-add-content-in-new-sektion":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if(L=0,"no_match"==(n=Y.getLevelModel(q.location,u.collection))){K.errare("updateAPISetting => "+q.action+" => no location matched"),J.reject("updateAPISetting => "+q.action+" => no location matched");break}switch(n.collection=_.isArray(n.collection)?n.collection:[],_.each(n.collection,function(e,t){q.before_section===e.id&&(L=t),q.after_section===e.id&&(L=t+1)}),q.content_type){case"module":c=Y.getModuleStartingValue(q.content_id),n.collection.splice(L,0,{id:q.id,level:"section",collection:[{id:sektionsLocalizedData.optPrefixForSektionsNotSaved+Y.guid(),level:"column",collection:[{id:q.droppedModuleId,level:"module",module_type:q.content_id,value:"no_starting_value"!==c?c:null,ver_ini:sektionsLocalizedData.nimbleVersion}],ver_ini:sektionsLocalizedData.nimbleVersion}],ver_ini:sektionsLocalizedData.nimbleVersion});break;case"preset_section":p=X.Deferred();var G=function(e){Y.preparePresetSectionForInjection(e).fail(function(e){J.reject("updateAPISetting => error when preparePresetSectionForInjection => "+q.action+" => "+e),p.reject(e)}).done(function(e){var t=!1;if(!_.isEmpty(q.sektion_to_replace)){var i=Y.getLevelModel(q.sektion_to_replace,u.collection);"no_match"===i&&(K.errare("updateAPISetting => "+q.action+" => no sektionToReplace matched"),J.reject("updateAPISetting => "+q.action+" => no sektionToReplace matched")),t=!0===i.is_nested}t?("no_match"===(o=Y.getLevelModel(q.in_column,u.collection))&&(K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched")),o.collection=_.isArray(o.collection)?o.collection:[],_.each(o.collection,function(e,t){q.before_section===e.id&&(L=t),q.after_section===e.id&&(L=t+1)}),o.collection.splice(L,0,{id:q.id,is_nested:!0,level:"section",collection:e.collection,options:e.options||{},ver_ini:sektionsLocalizedData.nimbleVersion})):n.collection.splice(L,0,{id:q.id,level:"section",collection:e.collection,options:e.options||{},ver_ini:sektionsLocalizedData.nimbleVersion}),p.resolve()})};Y.getPresetSectionCollection({is_user_section:q.is_user_section,presetSectionId:q.content_id,section_id:q.id}).fail(function(e){K.errare("updateAPISetting => "+q.action+" => Error with self.getPresetSectionCollection()",e),J.reject("updateAPISetting => "+q.action+" => Error with self.getPresetSectionCollection()")}).done(function(e){_.isObject(e)&&!_.isEmpty(e)||(K.errare("updateAPISetting => "+q.action+" => preset section type not found or empty : "+q.content_id,e),J.reject("updateAPISetting => "+q.action+" => preset section type not found or empty")),G(e)})}break;case"sek-add-preset-section-in-new-nested-sektion":if(_.isEmpty(q.id))throw new Error("updateAPISetting => "+q.action+" => missing id");if(o=Y.getLevelModel(q.in_column,u.collection),"no_match"==(l=Y.getLevelModel(q.in_sektion,u.collection))){J.reject("updateAPISetting => "+q.action+" => no grand parent sektion found");break}if(!0===l.is_nested){J.reject(sektionsLocalizedData.i18n["You've reached the maximum number of allowed nested sections."]);break}if("no_match"==o){K.errare("updateAPISetting => "+q.action+" => no parent column matched"),J.reject("updateAPISetting => "+q.action+" => no parent column matched");break}o.collection=_.isArray(o.collection)?o.collection:[],p=X.Deferred(),G=function(e){Y.preparePresetSectionForInjection(e).fail(function(e){J.reject("updateAPISetting => error when preparePresetSectionForInjection => "+q.action+" => "+e),p.reject(e)}).done(function(e){o.collection.push({id:q.id,level:"section",collection:e.collection,options:e.options||{},is_nested:!0,ver_ini:sektionsLocalizedData.nimbleVersion}),p.resolve()})},Y.getPresetSectionCollection({is_user_section:q.is_user_section,presetSectionId:q.content_id,section_id:q.id}).fail(function(){K.errare("updateAPISetting => "+q.action+" => Error with self.getPresetSectionCollection()",_er_),J.reject("updateAPISetting => "+q.action+" => Error with self.getPresetSectionCollection()")}).done(function(e){_.isObject(e)&&!_.isEmpty(e)||(K.errare("updateAPISetting => "+q.action+" => preset section type not found or empty : "+q.content_id,e),J.reject("updateAPISetting => "+q.action+" => preset section type not found or empty")),G(e)});break;case"sek-update-fonts":var W=Y.sniffGFonts({is_global_location:q&&!0===q.is_global_location});if(!_.isEmpty(q.font_family)&&_.isString(q.font_family)&&!_.contains(W,q.font_family)){if(q.font_family.indexOf("gfont")<0){K.errare("updateAPISetting => "+q.action+" => error => must be a google font, prefixed gfont"),J.reject("updateAPISetting => "+q.action+" => error => must be a google font, prefixed gfont");break}W.push(q.font_family)}u.fonts=W}if("pending"==J.state()){var $=function(){_.isEqual(d,u)?sektionsLocalizedData.isDevMode&&J.reject("updateAPISetting => the new setting value is unchanged when firing action : "+q.action):null!==Y.validateSettingValue(u)?(e(u,q),q.cloneId=a,J.resolve(q)):J.reject("Validation problem for action "+q.action)};!1===p?$():p.done(function(){$()}).fail(function(e){K.errare("updateAPISetting => __presetSectionInjected__ failed",e)})}}),J.promise()},_maybeFetchSectionsFromServer:function(t){var e,i=X.Deferred();return!0===(t=t||{is_user_section:!1}).is_user_section?_.isEmpty(K.sek_userSavedSections)||_.isEmpty(K.sek_userSavedSections[t.preset_section_id])?(K.sek_userSavedSections=K.sek_userSavedSections||{},_.isUndefined(K.sek_fetchingUserSavedSections)||"pending"!=K.sek_fetchingUserSavedSections.state()?(e=wp.ajax.post("sek_get_user_saved_sections",{nonce:K.settings.nonce.save,preset_section_id:t.preset_section_id}),K.sek_fetchingUserSavedSections=e):e=K.sek_fetchingUserSavedSections,e.done(function(e){K.sek_userSavedSections[t.preset_section_id]=e,i.resolve(K.sek_userSavedSections)}).fail(function(e){i.reject(e)})):i.resolve(K.sek_userSavedSections):_.isEmpty(K.sek_presetSections)?(_.isUndefined(K.sek_fetchingPresetSections)||"pending"!=K.sek_fetchingPresetSections.state()?(e=wp.ajax.post("sek_get_preset_sections",{nonce:K.settings.nonce.save}),K.sek_fetchingPresetSections=e):e=K.sek_fetchingPresetSections,e.done(function(e){K.sek_presetSections=e,i.resolve(K.sek_presetSections)}).fail(function(e){i.reject(e)})):i.resolve(K.sek_presetSections),i.promise()},getPresetSectionCollection:function(r){var s=this,a=X.Deferred();return s._maybeFetchSectionsFromServer({is_user_section:r.is_user_section,preset_section_id:r.presetSectionId}).fail(function(e){a.reject(e)}).done(function(e){var t=X.extend(!0,{},_.isObject(e)?e:{});if(_.isEmpty(t))throw new Error("getPresetSectionCollection => Invalid collection");if(_.isEmpty(t[r.presetSectionId]))throw new Error('getPresetSectionCollection => the preset section : "'+r.presetSectionId+'" has not been found in the collection');var i=t[r.presetSectionId],n=function(e){return _.each(e,function(e){e.id=sektionsLocalizedData.optPrefixForSektionsNotSaved+s.guid(),_.isArray(e.collection)&&n(e.collection)}),e},o=function(e){return _.each(e,function(e){e.ver_ini=sektionsLocalizedData.nimbleVersion,_.isArray(e.collection)&&o(e.collection)}),e};i.id=r.section_id,i.collection=n(i.collection),i.ver_ini=sektionsLocalizedData.nimbleVersion,i.collection=o(i.collection),a.resolve(i)}),a.promise()},preparePresetSectionForInjection:function(o){var i=this,n={},r=X.Deferred(),s=function(e){return _.each(e,function(e,t){_.isObject(e)||_.isArray(e)?s(e):_.isString(e)&&-1!=e.indexOf("::img-path::")&&(_.has(n,e)||(n[e]=i.importAttachment(e.replace("::img-path::",""))))}),n},a=function(i,n){return _.each(i,function(e,t){_.isObject(e)||_.isArray(e)?a(e,n):_.isString(e)&&-1!=e.indexOf("::img-path::")&&_.has(n,e)&&_.isObject(n[e])&&(i[t]=n[e].id)}),o};return i.whenAllPromisesInParallel(s(o)).done(function(e){var t=a(o,e);r.resolve(t)}).fail(function(e){r.reject(e)}),r.promise()}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(n,o){o.extend(CZRSeksPrototype,{cleanRegistered:function(t){var i=this,e=o.extend(!0,[],i.registered()||[]);e=_.filter(e,function(e){if("setting"!==e.what&&n[e.what].has(e.id)){if(!_.isEmpty(t)&&e.id!==t)return;_.isFunction(n[e.what](e.id).trigger)&&i.trigger("sek-ui-pre-removal",{what:e.what,id:e.id}),o.when(n[e.what](e.id).container.remove()).done(function(){n[e.what].remove(e.id),i.trigger("sek-ui-removed",{what:e.what,id:e.id})})}return"setting"===e.what}),i.registered(e)},cleanRegisteredLevelSettingsAfterHistoryNavigation:function(){var e=o.extend(!0,[],this.registered()||[]);e=_.filter(e,function(e){return _.isEmpty(e.level)||"setting"!==e.what||n.has(e.id)&&n.remove(e.id),_.isEmpty(e.level)&&"setting"!==e.what}),this.registered(e)}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(l,d){d.extend(CZRSeksPrototype,{rootPanelFocus:function(){l.section.has(l.czr_activeSectionId())?l.section(l.czr_activeSectionId()).expanded(!1):l.section.each(function(e){e.expanded(!1)}),l.panel.each(function(e){e.expanded(!1)})},guid:function(){function e(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return e()+e()+e()},getGlobalSectionsSettingId:function(){return sektionsLocalizedData.settingIdForGlobalSections},getLevelModel:function(i,n){var s=this,a="no_match",c=function(t,e,i,n){if(_.isUndefined(e)){var o=l(i)(),r=_.isObject(o)?d.extend(!0,{},o):d.extend(!0,{},s.getDefaultSektionSettingValue(n));e=_.isArray(r.collection)?r.collection:[]}return _.each(e,function(e){"no_match"==a&&(t===e.id?a=e:_.isArray(e.collection)&&c(t,e.collection,i,n))}),a};return _.isEmpty(n)?_.each({local:s.localSectionsSettingId(),global:s.getGlobalSectionsSettingId()},function(e,t){"no_match"===a&&c(i,n,e,t)}):c(i,n),a},isGlobalLocation:function(e){var t=!1;return e=e||{},_.has(e,"is_global_location")?t=e.is_global_location:_.isEmpty(e.location)?_.isEmpty(e.in_sektion)?_.isEmpty(e.id)||(t=this.isChildOfAGlobalLocation(e.id)):t=this.isChildOfAGlobalLocation(e.in_sektion):t=this.isChildOfAGlobalLocation(e.location),t},isChildOfAGlobalLocation:function(e){var r=this,s=function(t,e){var i="no_match";if(_.isUndefined(e)){var n=l(r.getGlobalSectionsSettingId())(),o=_.isObject(n)?d.extend(!0,{},n):r.getDefaultSektionSettingValue("global");e=_.isArray(o.collection)?o.collection:[]}return _.each(e,function(e){"no_match"==i&&(t===e.id?i=e:_.isArray(e.collection)&&(i=s(t,e.collection)))}),i};return"no_match"!==s(e)},getLevelPositionInCollection:function(i,n){var s=this,a="no_match",c=function(i,e,n,o){if(_.isUndefined(e)){var t=l(n)(),r=_.isObject(t)?d.extend(!0,{},t):d.extend(!0,{},s.getDefaultSektionSettingValue(o));e=_.isArray(r.collection)?r.collection:[]}_.each(e,function(e,t){"no_match"==a&&(i===e.id?a=t:_.isArray(e.collection)&&c(i,e.collection,n,o))})};return _.isEmpty(n)?_.each({local:s.localSectionsSettingId(),global:s.getGlobalSectionsSettingId()},function(e,t){"no_match"===a&&c(i,e,t,n)}):c(i,n),a},getLevelProperty:function(e){if(e=_.extend({id:"",property:""},e),_.isEmpty(e.id))l.errare("getLevelProperty => invalid id provided");else{var t=this.getLevelModel(e.id);if("no_match"!=t){if(_.isObject(t))return t[e.property];l.errare("getLevelProperty => invalid model for id : "+e.id,t)}else l.errare("getLevelProperty => no level model found for id : "+e.id)}},cloneLevel:function(e){var t=this,i=t.getLevelModel(e);if("no_match"==i)throw new Error("cloneLevel => no match for level id : "+e);var n=d.extend(!0,{},i),o=function(e){if(_.isEmpty(e.id))throw new Error("cloneLevel => missing level id");if(e.id=sektionsLocalizedData.optPrefixForSektionsNotSaved+t.guid(),!_.isEmpty(e.collection)){if(!_.isArray(e.collection))throw new Error("cloneLevel => the collection must be an array for level id : "+e.id);_.each(e.collection,function(e){e.id=sektionsLocalizedData.optPrefixForSektionsNotSaved+t.guid(),o(e)})}return e};return o(n)},getDefaultItemModelFromRegisteredModuleData:function(e){if(!this.isModuleRegistered(e))return{};if(!sektionsLocalizedData.registeredModules[e].is_father){var t=sektionsLocalizedData.registeredModules[e].tmpl["item-inputs"],i={id:"",title:""};return _.each(t,function(e,t){switch(t){case"tabs":_.each(e,function(e){_.each(e.inputs,function(e,t){i[t]=e.default||""})});break;default:i[t]=e.default||""}}),i}l.errare("getDefaultItemModelFromRegisteredModuleData => Father modules should be treated specifically")},getRegisteredModuleProperty:function(e,t){return this.isModuleRegistered(e)?sektionsLocalizedData.registeredModules[e][t]:"not_set"},isModuleRegistered:function(e){return sektionsLocalizedData.registeredModules&&!_.isUndefined(sektionsLocalizedData.registeredModules[e])},sniffGFonts:function(e){var o=this,r=[],s=function(i,n,e){if(_.isUndefined(e)){var t=l(i)();e=_.isObject(t)?d.extend(!0,{},t):d.extend(!0,{},o.getDefaultSektionSettingValue(n))}_.each(e,function(e,t){_.isString(t)&&"_css"===t.substr(t.length-4)&&!0===o.inputIsAFontFamilyModifier(t)&&-1<e.indexOf("gfont")&&!_.contains(r,e)&&r.push(e),(_.isArray(e)||_.isObject(e))&&s(i,n,e)})};return(e=e||{is_global_location:!1}).is_global_location?s(o.getGlobalSectionsSettingId(),"global"):s(o.localSectionsSettingId(),"local"),r},getInputDefaultValue:function(i,n,e){var o=this;if(o.cachedDefaultInputValues=o.cachedDefaultInputValues||{},o.cachedDefaultInputValues[n]=o.cachedDefaultInputValues[n]||{},_.has(o.cachedDefaultInputValues[n],i))return o.cachedDefaultInputValues[n][i];if(_.isUndefined(sektionsLocalizedData.registeredModules))l.errare("getInputDefaultValue => missing sektionsLocalizedData.registeredModules");else if(_.isUndefined(sektionsLocalizedData.registeredModules[n]))l.errare("getInputDefaultValue => missing "+n+" in sektionsLocalizedData.registeredModules");else{if(!sektionsLocalizedData.registeredModules[n].is_father){_.isUndefined(e)&&(e=sektionsLocalizedData.registeredModules[n].tmpl);var r="no_default_value_specified";return _.each(e,function(e,t){"no_default_value_specified"===r&&(i!==t||_.isUndefined(e.default)||(r=e.default),"no_default_value_specified"===r&&(_.isArray(e)||_.isObject(e))&&(r=o.getInputDefaultValue(i,n,e)),"no_default_value_specified"!==r&&(o.cachedDefaultInputValues[n][i]=r))}),r}l.errare("getInputDefaultValue => Father modules should be treated specifically")}},getInputType:function(i,n,e){var o=this;if(o.cachedInputTypes=o.cachedInputTypes||{},o.cachedInputTypes[n]=o.cachedInputTypes[n]||{},_.has(o.cachedInputTypes[n],i))return o.cachedInputTypes[n][i];if(_.isUndefined(sektionsLocalizedData.registeredModules))l.errare("getInputType => missing sektionsLocalizedData.registeredModules");else if(_.isUndefined(sektionsLocalizedData.registeredModules[n]))l.errare("getInputType => missing "+n+" in sektionsLocalizedData.registeredModules");else{if(!sektionsLocalizedData.registeredModules[n].is_father){_.isUndefined(e)&&(e=sektionsLocalizedData.registeredModules[n].tmpl);var r="no_input_type_specified";return _.each(e,function(e,t){"no_input_type_specified"===r&&(i!==t||_.isUndefined(e.input_type)||(r=e.input_type),"no_input_type_specified"===r&&(_.isArray(e)||_.isObject(e))&&(r=o.getInputType(i,n,e)),"no_input_type_specified"!==r&&(o.cachedInputTypes[n][i]=r))}),r}l.errare("getInputType => Father modules should be treated specifically")}},getInputRegistrationParams:function(i,n,e){var o=this;if(o.cachedInputRegistrationParams=o.cachedInputRegistrationParams||{},o.cachedInputRegistrationParams[n]=o.cachedInputRegistrationParams[n]||{},_.has(o.cachedInputRegistrationParams[n],i))return o.cachedInputRegistrationParams[n][i];if(_.isUndefined(sektionsLocalizedData.registeredModules))l.errare("getInputRegistrationParams => missing sektionsLocalizedData.registeredModules");else if(_.isUndefined(sektionsLocalizedData.registeredModules[n]))l.errare("getInputRegistrationParams => missing "+n+" in sektionsLocalizedData.registeredModules");else{if(!sektionsLocalizedData.registeredModules[n].is_father){_.isUndefined(e)&&(e=sektionsLocalizedData.registeredModules[n].tmpl);var r={};return _.each(e,function(e,t){_.isEmpty(r)&&(i!==t||_.isUndefined(e.input_type)||(r=e),_.isEmpty(r)&&(_.isArray(e)||_.isObject(e))&&(r=o.getInputRegistrationParams(i,n,e)),_.isEmpty(r)||(o.cachedInputRegistrationParams[n][i]=r))}),r}l.errare("getInputRegistrationParams => Father modules should be treated specifically")}},inputIsAFontFamilyModifier:function(i,e){var n=this;if(n.cachedFontFamilyModifier=n.cachedFontFamilyModifier||{},_.has(n.cachedFontFamilyModifier,i))return n.cachedFontFamilyModifier[i];if(!_.isUndefined(sektionsLocalizedData.registeredModules)){_.isUndefined(e)&&(e=sektionsLocalizedData.registeredModules);var o="not_set";return _.each(e,function(e,t){"not_set"===o&&(i!==t||_.isUndefined(e.input_type)||(o=!_.isUndefined(e.refresh_fonts)&&e.refresh_fonts),"not_set"===o&&(_.isArray(e)||_.isObject(e))&&(o=n.inputIsAFontFamilyModifier(i,e)),"not_set"!==o&&(n.cachedFontFamilyModifier[i]=o))}),o}l.errare("inputIsAFontFamilyModifier => missing sektionsLocalizedData.registeredModules")},getModuleStartingValue:function(e){if(!sektionsLocalizedData.registeredModules)return l.errare("getModuleStartingValue => missing sektionsLocalizedData.registeredModules"),"no_starting_value";if(_.isUndefined(sektionsLocalizedData.registeredModules[e]))return l.errare("getModuleStartingValue => the module type "+e+" is not registered"),"no_starting_value";var t=sektionsLocalizedData.registeredModules[e].starting_value;return _.isEmpty(t)?"no_starting_value":t},selectNextTabbableOrFocusable:function(e){var t=d(e),i=d(":focus"),n=0;if(1===i.length){var o=t.index(i);o+1<t.length&&(n=o+1)}t.eq(n).focus()},selectPrevTabbableOrFocusable:function(e){var t=d(e),i=d(":focus"),n=t.length-1;if(1===i.length){var o=t.index(i);0<o&&(n=o-1)}t.eq(n).focus()},setupSelectInput:function(e){var n=this,t=(n.input_parent,n.module,l.czr_sektions.getInputRegistrationParams(n.id,n.module.module_type));e=_.isUndefined(e)?t.choices:e,!_.isEmpty(e)&&_.isObject(e)?(_.each(e,function(e,t){var i={value:t,html:e};t==n()?d.extend(i,{selected:"selected"}):"px"===t&&d.extend(i,{selected:"selected"}),d("select[data-czrtype]",n.container).append(d("<option>",i))}),d("select[data-czrtype]",n.container).selecter()):l.errare("api.czr_sektions.setupSelectInput => missing select options for input id => "+n.id+" in image module")},setupFontSizeAndLineHeightInputs:function(e){var t=this,i=d(".sek-font-size-line-height-wrapper",t.container),n=i.find("input[data-czrtype]").data("sek-unit"),o=function(e){return _.contains(["px","em","%"],e)||(l.errare("error : invalid unit for input "+t.id,e),e="px"),e};t.css_unit=new l.Value(_.isEmpty(n)?"px":o(n)),t.css_unit.bind(function(e){e=_.isEmpty(e)?"px":e,i.find('input[type="number"]').trigger("change")}),i.find('input[type="number"]').on("input change",function(e){t(d(this).val()+o(t.css_unit()))}).stepper(),i.on("click","[data-sek-unit]",function(e){e.preventDefault(),i.find("[data-sek-unit]").removeClass("is-selected").attr("aria-pressed",!1),d(this).addClass("is-selected").attr("aria-pressed",!0),i.find("input[data-czrtype]").data("sek-unit",d(this).data("sek-unit")),t.css_unit(d(this).data("sek-unit"))}),i.find('.sek-ui-button[data-sek-unit="'+n+'"]').addClass("is-selected").attr("aria-pressed",!0)},maybeSetupDeviceSwitcherForInput:function(){var i=this,e=['<span class="sek-input-device-switcher">','<i data-sek-device="desktop" class="sek-switcher preview-desktop active" title="'+sektionsLocalizedData.i18n["Settings on desktops"]+'"></i>','<i data-sek-device="tablet" class="sek-switcher preview-tablet" title="'+sektionsLocalizedData.i18n["Settings on tablets"]+'"></i>','<i data-sek-device="mobile" class="sek-switcher preview-mobile" title="'+sektionsLocalizedData.i18n["Settings on mobiles"]+'"></i>',"</span>"].join(" ");i.container.find(".customize-control-title").prepend(e),i.previewedDevice=new l.Value(l.previewedDevice()),syncWithPreviewedDevice=function(e){e.stopPropagation(),i.container.find("[data-sek-device]").removeClass("active"),d(this).addClass("active");var t="desktop";try{t=d(this).data("sek-device")}catch(e){l.errare("maybeSetupDeviceSwitcherForInput => error when binding sek-switcher",e)}try{l.previewedDevice(t)}catch(e){l.errare("maybeSetupDeviceSwitcherForInput => error when setting the previewed device",e)}i.previewedDevice(t)},i.container.on("click","[data-sek-device]",syncWithPreviewedDevice);var t=i.container.find('[data-sek-device="'+l.previewedDevice()+'"]');0<t.length&&t.trigger("click")},scheduleModuleAccordion:function(e){e=e||{expand_first_control:!0};var i=this;if(d(i.container).on("click",".customize-control label > .customize-control-title",function(e){e.stopPropagation();var t=d(this).closest(".customize-control");"no"!==t.attr("data-sek-accordion")&&(i.container.find(".customize-control").not(t).each(function(){d(this).attr("data-sek-accordion")||(d(this).attr("data-sek-expanded","false"),d(this).find(".czr-items-wrapper").stop(!0,!0).slideUp(0))}),t.find(".czr-items-wrapper").stop(!0,!0).slideToggle({duration:0,start:function(){t.attr("data-sek-expanded","false"==t.attr("data-sek-expanded")?"true":"false"),t.trigger("true"==t.attr("data-sek-expanded")?"sek-accordion-expanded":"sek-accordion-collapsed")}}))}),e.expand_first_control){var t=_.first(i.controls());_.isObject(t)&&!_.isEmpty(t.id)&&l.control(t.id,function(e){e.container.trigger("sek-accordion-expanded"),i.container.find(".customize-control").first().find("label > .customize-control-title").trigger("click")})}},isPromise:function(e){return e&&"function"==typeof e.then&&String(d.Deferred().then)===String(e.then)},whenAllPromisesInParallel:function(e){var i=this,t=d.Deferred(),n=[],o=_.keys(e);return _.each(e,function(e,t){n.push(d.Deferred(function(t){(i.isPromise(e)?e:d.Deferred()).done(t.resolve).fail(function(e){t.reject(e)})}))}),d.when.apply(this,n).done(function(){var i={},e=Array.prototype.slice.call(arguments);_.each(e,function(e,t){i[o[t]]=e}),t.resolve(i)}).fail(t.reject),t},whenAllPromisesInSerie:function(t,i,n,o){i=i||0,n=n||{},o=o||d.Deferred();var r=this;if(_.isArray(t)){var e=t[i];(r.isPromise(e)?e:d.Deferred(function(e){e.resolve()})).always(function(e){n[i]=e,i+1==t.length?o.resolve(n):i+1<t.length&&r.whenAllPromisesInSerie(t,i+1,n,o)})}return o},importAttachment:function(t){return wp.ajax.post("sek_import_attachment",{rel_path:t,nonce:l.settings.nonce.save}).fail(function(e){l.errare("sek_import_attachment ajax action failed for image "+t,e)})},cleanIds:function(e){e.id="";var t=this;return _.each(e.collection,function(e){e.id="",_.isArray(e.collection)&&t.cleanIds(e)}),e},getDefaultSektionSettingValue:function(e){return!_.isUndefined(e)&&_.contains(["local","global"],e)||l.errare("getDefaultSektionSettingValue => the skope should be set to local or global"),"global"===e?sektionsLocalizedData.defaultGlobalSektionSettingValue:sektionsLocalizedData.defaultLocalSektionSettingValue},scheduleVisibilityOfInputId:function(t,i){var n=this.input_parent;if(!_.isFunction(i)||_.isEmpty(t))throw new Error("::scheduleVisibilityOfInputId => error when firing for input id : "+this.id);n.czr_Input(t).visible(i()),this.bind(function(e){n.czr_Input(t).visible(i())})}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(a,m){m.extend(CZRSeksPrototype,{setupDnd:function(){var t=this;t.bind("sek-refresh-dragzones",function(e){!0!="draggable"in document.createElement("span")&&a.panel(sektionsLocalizedData.sektionsPanelId,function(e){a.notifications.add(new a.Notification("drag-drop-support",{type:"error",message:sektionsLocalizedData.i18n["This browser does not support drag and drop. You might need to update your browser or use another one."],dismissible:!0})),_.delay(function(){a.notifications.remove("drag-drop-support")},1e4)}),t.setupNimbleDragZones(e.input_container)}),a.previewer.bind("ready",function(){try{t.setupNimbleDropZones()}catch(e){a.errare("::setupDnd => error on self.setupNimbleDropZones()",e)}_.isUndefined(_.findWhere(t.registered(),{module_type:"sek_intro_sec_picker_module"}))&&_.isUndefined(_.findWhere(t.registered(),{module_type:"sek_module_picker_module"}))||t.rootPanelFocus()}),t.reactToDrop()},setupNimbleDragZones:function(e){var n=this,o=function(){a.notifications.add(new a.Notification("missing-injection-target",{type:"info",message:sektionsLocalizedData.i18n["You first need to click on a target ( with a + icon ) in the preview."],dismissible:!0})),_.delay(function(){a.notifications.remove("missing-injection-target")},3e4)};e.find('[draggable="true"]').each(function(){m(this).on("dragstart",function(e){(function(e){n.lastClickedTargetInPreview({}),e.originalEvent.dataTransfer.setData("sek-content-type",m(this).data("sek-content-type")),e.originalEvent.dataTransfer.setData("sek-content-id",m(this).data("sek-content-id")),e.originalEvent.dataTransfer.setData("sek-section-type",m(this).data("sek-section-type")),e.originalEvent.dataTransfer.setData("sek-is-user-section",m(this).data("sek-is-user-section")),n.dndData={content_type:e.originalEvent.dataTransfer.getData("sek-content-type"),content_id:e.originalEvent.dataTransfer.getData("sek-content-id"),section_type:e.originalEvent.dataTransfer.getData("sek-section-type"),is_user_section:"true"===e.originalEvent.dataTransfer.getData("sek-is-user-section")};try{e.originalEvent.dataTransfer.setData("browserSupport","browserSupport"),e.originalEvent.dataTransfer.clearData("browserSupport")}catch(e){a.panel(sektionsLocalizedData.sektionsPanelId,function(e){a.notifications.add(new a.Notification("drag-drop-support",{type:"error",message:sektionsLocalizedData.i18n["This browser does not support drag and drop. You might need to update your browser or use another one."],dismissible:!0})),_.delay(function(){a.notifications.remove("drag-drop-support")},1e4)})}m(this).addClass("sek-dragged"),m("body").addClass("sek-dragging"),a.previewer.send("sek-drag-start",{type:n.dndData.content_type})}).call(m(this),e)}).on("dragend",function(e){(function(e){m("body").removeClass("sek-dragging"),m(this).removeClass("sek-dragged"),a.previewer.send("sek-drag-stop")}).call(m(this),e)}).dblclick(function(e){(function(e){var t,i=n.lastClickedTargetInPreview();!_.isEmpty(i)&&i.id?t=n.dnd_getDropZonesElements().find('[data-sek-id="'+i.id+'"]').find(".sek-module-drop-zone-for-first-module").first():o(),t&&0<t.length?(a.czr_sektions.trigger("sek-content-dropped",{drop_target_element:t,location:t.closest('[data-sek-level="location"]').data("sek-id"),before_module:t.data("drop-zone-before-module-or-nested-section"),after_module:t.data("drop-zone-after-module-or-nested-section"),before_section:t.data("drop-zone-before-section"),after_section:t.data("drop-zone-after-section"),content_type:m(this).data("sek-content-type"),content_id:m(this).data("sek-content-id"),section_type:m(this).data("sek-section-type"),is_user_section:"true"===m(this).data("sek-is-user-section")}),n.lastClickedTargetInPreview({})):(o(),a.errare("Double click insertion => the target zone was not found"))}).call(m(this),e)})})},setupNimbleDropZones:function(){var t=this;if(this.$dropZones=this.dnd_getDropZonesElements(),this.preDropElement=m("<div>",{class:sektionsLocalizedData.preDropElementClass,html:""}),this.$dropZones.length<1)throw new Error("::setupNimbleDropZones => invalid Dom element");this.$dropZones.each(function(){var e=m(this);!0!==e.data("zone-droppable-setup")&&(t.enterOverTimer=null,e.on("dragenter dragover",sektionsLocalizedData.dropSelectors,function(e){_.isNull(t.enterOverTimer)&&(t.enterOverTimer=!0,_.delay(function(){t.currentMousePosition&&t.currentMousePosition+""==e.clientY+""+e.clientX?t.enterOverTimer=null:(t.currentMousePosition=e.clientY+""+e.clientX,t.dnd_toggleDragApproachClassesToDropZones(e))},100)),t.dnd_canDrop({targetEl:m(this),evt:e})&&(e.stopPropagation(),t.dnd_OnEnterOver(m(this),e))}).on("dragleave drop",sektionsLocalizedData.dropSelectors,function(e){switch(e.type){case"dragleave":t.dnd_isOveringDropTarget(m(this),e)||t.dnd_cleanOnLeaveDrop(m(this),e);break;case"drop":if(this.$cachedDropZoneCandidates=null,!t.dnd_canDrop({targetEl:m(this),evt:e}))return;e.preventDefault(),t.dnd_onDrop(m(this),e),t.dnd_cleanOnLeaveDrop(m(this),e),a.previewer.send("sek-drag-stop")}}).data("zone-droppable-setup",!0))})},dnd_isInTarget:function(e,t){var i=t.clientY,n=t.clientX,o=e[0].getBoundingClientRect(),r=n<=o.right&&o.left<=n;return i>=o.top&&o.bottom>=i&&r},dnd_toggleDragApproachClassesToDropZones:function(u){var p=this;this.$dropZones=this.$dropZones||this.dnd_getDropZonesElements(),this.$cachedDropZoneCandidates=_.isEmpty(this.$cachedDropZoneCandidates)?this.$dropZones.find(".sek-drop-zone"):this.$cachedDropZoneCandidates,this.distanceTable=[],this.$dropZones.find(".sek-drop-zone").each(function(){var e,t,i=u.clientY,n=u.clientX,o=m(this)[0].getBoundingClientRect(),r=Math.abs(i-(o.bottom-(o.bottom-o.top)/2)),s=(Math.abs(o.top-i),Math.abs(n-(o.right-(o.right-o.left)/2))),a=(o.right,o.left,r<50),c=s<50,l=n<=o.right&&o.left<=n,d=i>=o.top&&o.bottom>=i;p.distanceTable.push({el:m(this),dist:d&&l?0:(e=s,t=r,Math.sqrt(e*e+t*t))}),m(this).removeClass("sek-drag-is-in"),(a||d)&&(c||l)?(m(this).removeClass("sek-drag-is-approaching"),m(this).removeClass("sek-drag-is-close"),m(this).addClass("sek-drag-is-very-close")):(m(this).removeClass("sek-drag-is-approaching"),m(this).removeClass("sek-drag-is-close"),m(this).removeClass("sek-drag-is-very-close")),m(this).removeClass("sek-drag-is-in")});var t=_.min(_.pluck(p.distanceTable,"dist"));p.$dropTargetCandidate=null,_.each(p.distanceTable,function(e){_.isNull(p.$dropTargetCandidate)&&t===e.dist&&(p.$dropTargetCandidate=e.el)}),p.$dropTargetCandidate&&0<p.$dropTargetCandidate.length&&p.dnd_isInTarget(p.$dropTargetCandidate,u)&&p.$dropTargetCandidate.addClass("sek-drag-is-in"),p.enterOverTimer=null},dnd_getPreDropElementContent:function(e){var t,i,n=m(e.currentTarget);switch(this.dndData.content_type){case"module":t=sektionsLocalizedData.i18n["Insert here"],0<n.length&&("between-sections"!==n.data("sek-location")&&"in-empty-location"!==n.data("sek-location")||(t=sektionsLocalizedData.i18n["Insert in a new section"])),i='<div class="sek-module-placeholder-content"><p>'+t+"</p></div>";break;case"preset_section":i='<div class="sek-module-placeholder-content"><p>'+(t=sektionsLocalizedData.i18n["Insert a new section here"])+"</p></div>";break;default:a.errare("::dnd_getPreDropElementContent => invalid content type provided")}return i},dnd_getDropZonesElements:function(){return m(a.previewer.targetWindow().document)},dnd_canDrop:function(e){var t=this,i=(e=_.extend({targetEl:{},evt:{}},e||{})).targetEl;if(!_.isObject(i)||i.length<1)return!1;var n=i.hasClass("sek-content-preset_section-drop-zone"),o=i.hasClass("sek-module-drop-zone-for-first-module"),r=!0===i.closest('[data-sek-level="location"]').data("sek-is-header-location"),s=!0===i.closest('[data-sek-level="location"]').data("sek-is-footer-location"),a="preset_section"===t.dndData.content_type&&"content"===t.dndData.section_type,c=function(e){m(".sek-no-drop-possible-message",i).length<1&&i.append(['<div class="sek-no-drop-possible-message">','<i class="material-icons">not_interested</i>',e,"</div>"].join(""))};return(r||s)&&a?(c(r?sektionsLocalizedData.i18n["The header location only accepts modules and pre-built header sections"]:sektionsLocalizedData.i18n["The footer location only accepts modules and pre-built footer sections"]),!1):s&&"preset_section"===t.dndData.content_type&&"header"===t.dndData.section_type?(c(sektionsLocalizedData.i18n["You can't drop a header section in the footer location"]),!1):r&&"preset_section"===t.dndData.content_type&&"footer"===t.dndData.section_type?(c(sektionsLocalizedData.i18n["You can't drop a footer section in the header location"]),!1):i.hasClass("sek-drop-zone")&&("preset_section"===t.dndData.content_type&&n||"module"===t.dndData.content_type&&!n||"preset_section"===t.dndData.content_type&&o)},dnd_OnEnterOver:function(e,t){t.preventDefault(),!0!==e.data("is-drag-entered")&&(e.data("is-drag-entered",!0),e.addClass("sek-active-drop-zone"),this.$dropZones.addClass("sek-is-dragging"));try{this.dnd_mayBePrintPreDropElement(e,t)}catch(e){a.errare("Error when trying to insert the preDrop content",e)}},dnd_cleanOnLeaveDrop:function(e,t){var i=this;this.$dropZones=this.$dropZones||this.dnd_getDropZonesElements(),this.preDropElement.remove(),this.$dropZones.removeClass("sek-is-dragging"),m(sektionsLocalizedData.dropSelectors,this.$dropZones).each(function(){i.dnd_cleanSingleDropTarget(m(this))})},dnd_cleanSingleDropTarget:function(e){_.isEmpty(e)||e.length<1||(e.data("is-drag-entered",!1),e.data("preDrop-position",!1),e.removeClass("sek-active-drop-zone"),e.find(".sek-drop-zone").removeClass("sek-drag-is-close"),e.find(".sek-drop-zone").removeClass("sek-drag-is-approaching"),e.removeClass("sek-feed-me-seymore"),e.find(".sek-no-drop-possible-message").remove())},dnd_getPosition:function(e,t){var i=e[0].getBoundingClientRect(),n=i.height;return"before"===e.data("preDrop-position")?n+=this.preDropElement.outerHeight():"after"===e.data("preDrop-position")&&(n-=this.preDropElement.outerHeight()),0<t.originalEvent.clientY-i.top-n/2?"after":"before"},dnd_mayBePrintPreDropElement:function(e,t){var i=this,n=e.data("preDrop-position"),o=this.dnd_getPosition(e,t);if(n!==o&&!0!==i.isPrintingPreDrop){i.isPrintingPreDrop=!0,this.dnd_cleanSingleDropTarget(this.$currentPreDropTarget);var r="between-sections"===e.data("sek-location")||"in-empty-location"===e.data("sek-location");m.when(i.preDropElement.remove()).done(function(){e["before"===o?"prepend":"append"](i.preDropElement).find("."+sektionsLocalizedData.preDropElementClass).html(i.dnd_getPreDropElementContent(t)),e.find("."+sektionsLocalizedData.preDropElementClass).toggleClass("in-new-sektion",r),e.data("preDrop-position",o),e.addClass("sek-feed-me-seymore"),i.isPrintingPreDrop=!1,i.$currentPreDropTarget=e})}},dnd_isOveringDropTarget:function(e,t){var i=e[0].getBoundingClientRect(),n=t.clientX,o=t.clientY,r=i.left,s=i.right,a=i.top,c=i.bottom;return r<=n&&n-r<=s-r&&(a<=o&&o-a<=c-a)},dnd_onDrop:function(e,t){t.stopPropagation();this.dnd_getPosition(e,t),e.index();a.czr_sektions.trigger("sek-content-dropped",{drop_target_element:e,location:e.closest('[data-sek-level="location"]').data("sek-id"),before_module:e.data("drop-zone-before-module-or-nested-section"),after_module:e.data("drop-zone-after-module-or-nested-section"),before_section:e.data("drop-zone-before-section"),after_section:e.data("drop-zone-after-section"),content_type:t.originalEvent.dataTransfer.getData("sek-content-type"),content_id:t.originalEvent.dataTransfer.getData("sek-content-id"),section_type:t.originalEvent.dataTransfer.getData("sek-section-type"),is_user_section:"true"===t.originalEvent.dataTransfer.getData("sek-is-user-section")})},reactToDrop:function(){this.bind("sek-content-dropped",function(e){try{!function(e){if(!_.isObject(e))throw new Error("Invalid params provided");if(e.drop_target_element.length<1)throw new Error("Invalid drop_target_element");var t=e.drop_target_element,i="content-in-column";switch(t.data("sek-location")){case"between-sections":i="content-in-a-section-to-create";break;case"in-empty-location":e.is_first_section=!0,e.send_to_preview=!1,i="content-in-empty-location";break;case"between-columns":i="content-in-new-column"}if("preset_section"===e.content_type)if(t.hasClass("sek-module-drop-zone-for-first-module")){var n=t.closest('div[data-sek-level="section"]');1<n.find(".sek-sektion-inner").first().children('[data-sek-level="column"]').length?(i="preset-section-in-a-nested-section-to-create",e.is_nested=!0,e.in_column=t.closest('[data-sek-level="column"]').data("sek-id"),e.in_sektion=n.data("sek-id")):(e.sektion_to_replace=n.data("sek-id"),e.after_section=e.sektion_to_replace,e.in_column=n.closest('[data-sek-level="column"]').data("sek-id"),i="content-in-a-section-to-replace")}else"between-sections"===t.data("sek-location")&&(i="content-in-a-section-to-create");switch(i){case"content-in-column":var o=t.closest("div[data-sek-level]");if(o.length<1)throw new Error("No valid level dom element found");var r=o.data("sek-level"),s=o.data("sek-id");if(_.isEmpty(r)||_.isEmpty(s))throw new Error("No valid level id found");a.previewer.trigger("sek-add-module",{level:r,id:s,in_column:t.closest('div[data-sek-level="column"]').data("sek-id"),in_sektion:t.closest('div[data-sek-level="section"]').data("sek-id"),before_module:e.before_module,after_module:e.after_module,content_type:e.content_type,content_id:e.content_id});break;case"content-in-a-section-to-create":case"content-in-a-section-to-replace":a.previewer.trigger("sek-add-content-in-new-sektion",e);break;case"preset-section-in-a-nested-section-to-create":a.previewer.trigger("sek-add-preset-section-in-new-nested-sektion",e);break;case"content-in-empty-location":a.previewer.trigger("sek-add-content-in-new-sektion",e);break;default:a.errare("sek control panel => ::reactToDrop => invalid drop case : "+i)}}(e)}catch(e){a.errare("error when reactToDrop",e)}})}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(r,s){s.extend(CZRSeksPrototype,{setupTinyMceEditor:function(){var n=this;r.sekEditorExpanded=new r.Value(!1),r.sekEditorSynchronizedInput=new r.Value,n.editorEventsListenerSetup=!1;var o=function(){r.sekTinyMceEditor=r.sekTinyMceEditor||tinyMCE.get("czr-customize-content_editor"),!1===n.editorEventsListenerSetup&&(n.attachEventsToEditor(),n.editorEventsListenerSetup=!0,n.trigger("sek-tiny-mce-editor-bound-and-instantiated"))};n.bind("sek-edit-module_done",function(e){if(("tiny_mce_editor"===(e=_.isObject(e)?e:{}).clicked_input_type||"czr_tiny_mce_editor_module"===e.module_type)&&!_.isEmpty(e.syncedTinyMceInputId)){var i=e.id;if(!0===n.getRegisteredModuleProperty(e.module_type,"is_father")){var t=n.getRegisteredModuleProperty(e.module_type,"children");if(_.isEmpty(t))throw new Error("::generateUIforFrontModules => a father module "+e.module_type+" is missing children modules ");_.each(t,function(e,t){"czr_tinymce_child"===e&&(i=i+"__"+t)})}r.sekEditorSynchronizedInput({control_id:i,input_id:e.syncedTinyMceInputId}),r.sekEditorExpanded(!0),r.sekTinyMceEditor.focus()}}),s("#customize-theme-controls").on("click",'[data-czr-action="open-tinymce-editor"]',function(){var e=s(this).data("czr-control-id"),t=s(this).data("czr-input-id");if(_.isEmpty(e)||_.isEmpty(t))r.errare("toggle-tinymce-editor => missing input or control id");else{var i=s.extend(!0,{},r.sekEditorSynchronizedInput()),n=_.extend(i,{input_id:t,control_id:e});r.sekEditorSynchronizedInput(n),r.sekEditorExpanded(!0),r.sekTinyMceEditor.focus()}}),r.sekEditorSynchronizedInput.bind(function(n,e){o(),r(n.control_id,function(e){var t=e(),i=_.isObject(t)&&!_.isEmpty(t[n.input_id])?t[n.input_id]:"";i=i.replace(/\r?\n/g,"<br/>");try{r.sekTinyMceEditor.setContent(i)}catch(e){r.errare("Error when setting the tiny mce editor content in setupTinyMceEditor",e)}r.sekTinyMceEditor.focus()})}),r.sekEditorExpanded.bind(function(e,t,i){o(),e&&r.sekTinyMceEditor.focus(),s(document.body).toggleClass("czr-customize-content_editor-pane-open",e),s(window)[e?"on":"off"]("resize",function(){r.sekEditorExpanded()&&_.delay(function(){n.czrResizeEditor(window.innerHeight-n.$editorPane.height())},50)}),e?n.czrResizeEditor(window.innerHeight-n.$editorPane.height()):(n.$preview.css("bottom",""),n.$collapseSidebar.css("bottom",""))}),s("#czr-customize-content_editor-pane").on("click",'[data-czr-action="close-tinymce-editor"]',function(){r.sekEditorExpanded(!1)}),s("#customize-controls").on("click",function(e){"open-tinymce-editor"!=s(e.target).data("czr-action")&&r.sekEditorExpanded(!1,{context:"clicked anywhere"})}),s(document).on("keydown",_.throttle(function(e){27===e.keyCode&&r.sekEditorExpanded(!1)},50)),n.bind("sek-tiny-mce-editor-bound-and-instantiated",function(){var e=s(r.sekTinyMceEditor.iframeElement).contents().get(0);s(e).on("keydown",_.throttle(function(e){27===e.keyCode&&r.sekEditorExpanded(!1)},50))}),_.each(["sek-click-on-inactive-zone","sek-add-section","sek-add-column","sek-add-module","sek-remove","sek-move","sek-duplicate","sek-resize-columns","sek-add-content-in-new-sektion","sek-pick-content","sek-edit-options","sek-edit-module","sek-notify"],function(e){"sek-edit-module"!=e?r.previewer.bind(e,function(){r.sekEditorExpanded(!1)}):r.previewer.bind(e,function(e){r.sekEditorExpanded("czr_tiny_mce_editor_module"===e.module_type)})})},attachEventsToEditor:function(){var t=this;t.$editorTextArea=s("#czr-customize-content_editor"),t.$editorPane=s("#czr-customize-content_editor-pane"),t.$editorDragbar=s("#czr-customize-content_editor-dragbar"),t.$editorFrame=s("#czr-customize-content_editor_ifr"),t.$mceTools=s("#wp-czr-customize-content_editor-tools"),t.$mceToolbar=t.$editorPane.find(".mce-toolbar-grp"),t.$mceStatusbar=t.$editorPane.find(".mce-statusbar"),t.$preview=s("#customize-preview"),t.$collapseSidebar=s(".collapse-sidebar"),r.sekTinyMceEditor.on("input change keyup",function(e){if(r.control.has(r.sekEditorSynchronizedInput().control_id))try{r.control(r.sekEditorSynchronizedInput().control_id).trigger("tinyMceEditorUpdated",{input_id:r.sekEditorSynchronizedInput().input_id,html_content:r.sekTinyMceEditor.getContent(),modified_editor_element:r.sekTinyMceEditor})}catch(e){r.errare("Error when triggering tinyMceEditorUpdated",e)}}),t.$editorTextArea.on("input",function(e){try{r.control(r.sekEditorSynchronizedInput().control_id).trigger("tinyMceEditorUpdated",{input_id:r.sekEditorSynchronizedInput().input_id,html_content:t.$editorTextArea.val(),modified_editor_element:t.$editorTextArea})}catch(e){r.errare("Error when triggering tinyMceEditorUpdated",e)}}),s("#czr-customize-content_editor-pane").on("mousedown mouseup",function(e){if(("mousedown"!==e.type||"czr-customize-content_editor-dragbar"===s(e.target).attr("id")||s(e.target).hasClass("czr-resize-handle"))&&r.sekEditorExpanded())switch(e.type){case"mousedown":s(document).on("mousemove.czr-customize-content_editor",function(e){e.preventDefault(),s(document.body).addClass("czr-customize-content_editor-pane-resize"),t.$editorFrame.css("pointer-events","none"),t.czrResizeEditor(e.pageY)});break;case"mouseup":s(document).off("mousemove.czr-customize-content_editor"),s(document.body).removeClass("czr-customize-content_editor-pane-resize"),t.$editorFrame.css("pointer-events","")}})},czrResizeEditor:function(e){var t,i=this,n=window.innerHeight,o=(window.innerWidth,{});r.sekEditorExpanded()&&(_.isNaN(e)||(t=n-e),o.height=t,o.components=i.$mceTools.outerHeight()+i.$mceToolbar.outerHeight()+i.$mceStatusbar.outerHeight(),t<40&&(o.height=40),n-1<t&&(o.height=n-1),n<i.$editorPane.outerHeight()&&(o.height=n),i.$preview.css("bottom",o.height),i.$editorPane.css("height",o.height),i.$editorFrame.css("height",o.height-o.components),i.$collapseSidebar.css("bottom",n-o.height<56?i.$mceStatusbar.outerHeight()+4:o.height+8))}})}(wp.customize,jQuery);CZRSeksPrototype=CZRSeksPrototype||{};!function(t,e){jQuery.extend(CZRSeksPrototype,t.Events);var i=t.Class.extend(CZRSeksPrototype);try{t.czr_sektions=new i}catch(e){t.errare("api.czr_sektions => problem on instantiation",e)}}(wp.customize),function(l,d,u){l.czrInputMap=l.czrInputMap||{};var p=function(e){return u.contains(["px","em","%"],e)||(l.errare("error : invalid unit for input "+this.id,e),e="px"),e},_=function(i){var n=this;i.on("click",".sek-ui-button",function(e,t){e.preventDefault(),i.find(".sek-ui-button").removeClass("is-selected").attr("aria-pressed",!1),d(this).addClass("is-selected").attr("aria-pressed",!0),n.css_unit(d(this).data("sek-unit"),t)}),i.find('.sek-ui-button[data-sek-unit="'+(n.initial_unit||"px")+'"]').addClass("is-selected").attr("aria-pressed",!0)},m=function(t,i){var n=this;t.on("click",".reset-spacing-wrap",function(e){e.preventDefault(),t.find('input[type="number"]').each(function(){d(this).val("")}),n(i),d(".sek-unit-wrapper",t).find('[data-sek-unit="px"]').trigger("click")})};d.extend(l.czrInputMap,{spacing:function(e){var o=this,i=d(".sek-spacing-wrapper",o.container),t=l.czr_sektions.getInputRegistrationParams(o.id,o.module.module_type),n=u.isEmpty(t)||u.isEmpty(t.default)?[]:t.default;if(i.on("input",'input[type="number"]',function(e){var t=d(this).closest("[data-sek-spacing]").data("sek-spacing"),i=d.extend(!0,{},u.isObject(o())?o():{}),n=d(this).val();u.isString(n)&&!u.isEmpty(n)||u.isNumber(n)?i[t]=n:i=u.omit(i,t),o(i)}),m.call(o,i,n),u.isObject(o())){u.each(o(),function(e,t){d('[data-sek-spacing="'+t+'"]',i).find('input[type="number"]').val(e)});var r="px";d(".sek-unit-wrapper .sek-ui-button",o.container).each(function(){var e=d(this).data("sek-unit");u.isEmpty(o())||u.isEmpty(o().unit)||e===o().unit&&(r=e)}),d(".sek-unit-wrapper",o.container).find('[data-sek-unit="'+p.call(o,r)+'"]').trigger("click")}var s=o();o.initial_unit="px",u.isEmpty(s)||(o.initial_unit=u.isEmpty(s.unit)?"px":s.unit),o.css_unit=new l.Value(p.call(o,o.initial_unit)),o.css_unit.bind(function(e){var t;e=u.isEmpty(e)?"px":e,(t=d.extend(!0,{},u.isObject(o())?o():{})).unit=e,o(t)}),_.call(o,i)}}),d.extend(l.czrInputMap,{spacingWithDeviceSwitcher:function(e){var r=this,s=d(".sek-spacing-wrapper",r.container),t=l.czr_sektions.getInputRegistrationParams(r.id,r.module.module_type),a=u.isEmpty(t)||u.isEmpty(t.default)?{}:t.default,c=function(e,t){var i=["mobile","tablet","desktop"];if(u.has(e,t))return e[t];var n=u.findIndex(i,function(e){return t===e});return!u.isEmpty(t)&&n<i.length?c(e,i[n+1]):{}},i=function(e){var t=d.extend(!0,{},u.isObject(r())?r():{}),i=d.extend(!0,{},a);t=u.isObject(t)?d.extend(i,t):i;var n=c(t,e);d("[data-sek-spacing]",s).each(function(){var e=d(this).data("sek-spacing"),t="";u.isEmpty(n)||u.isEmpty(n[e])||(t=n[e]),d(this).find('input[type="number"]').val(t)});var o="px";d(".sek-unit-wrapper .sek-ui-button",r.container).each(function(){var e=d(this).data("sek-unit");u.isEmpty(n)||u.isEmpty(n.unit)||e===n.unit&&(o=e)}),d(".sek-unit-wrapper",r.container).find('[data-sek-unit="'+p.call(r,o)+'"]').trigger("click",{previewed_device_switched:!0})};l.czr_sektions.maybeSetupDeviceSwitcherForInput.call(r);var n=r();r.initial_unit="px",u.isEmpty(n)||u.isEmpty(n[r.previewedDevice()])||(r.initial_unit=u.isEmpty(n[r.previewedDevice()].unit)?"px":n[r.previewedDevice()].unit),r.css_unit=new l.Value(p.call(r,r.initial_unit)),s.on("input",'input[type="number"]',function(e){var t,i=d(this).closest("[data-sek-spacing]").data("sek-spacing"),n=d(this).val(),o=l.previewedDevice()||"desktop";(t=d.extend(!0,{},u.isObject(r())?r():{}))[o]=d.extend(!0,{},t[o]||{}),u.isString(n)&&!u.isEmpty(n)||u.isNumber(n)?t[o][i]=n:t[o]=u.omit(t[o],i),r(t)}),m.call(r,s,a),r.previewedDevice.bind(function(e){try{i(e)}catch(e){l.errare("Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id "+r.id,e)}}),r.css_unit.bind(function(e,t,i){if(!u.isObject(i)||!0!==i.previewed_device_switched){e=u.isEmpty(e)?"px":e;var n,o=r.previewedDevice()||"desktop";(n=d.extend(!0,{},u.isObject(r())?r():{}))[o]=d.extend(!0,{},n[o]||{}),n[o].unit=e,r(n)}}),_.call(r,s);try{i(l.previewedDevice())}catch(e){l.errare("Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id "+r.id,e)}}})}(wp.customize,jQuery,_),function(n,a,c){n.czrInputMap=n.czrInputMap||{},a.extend(n.czrInputMap,{bg_position:function(e){var t=this;a(".sek-bg-pos-wrapper",t.container).on("change",'input[type="radio"]',function(e){t(a(this).val())}),c.isEmpty(t())||t.container.find('input[value="'+t()+'"]').attr("checked",!0).trigger("click")},bgPositionWithDeviceSwitcher:function(e){var o=this,t=n.czr_sektions.getInputRegistrationParams(o.id,o.module.module_type),r=c.isEmpty(t)||c.isEmpty(t.default)?{}:t.default;n.czr_sektions.maybeSetupDeviceSwitcherForInput.call(o);var s=function(e,t){var i=["mobile","tablet","desktop"];if(c.has(e,t))return e[t];var n=c.findIndex(i,function(e){return t===e});return!c.isEmpty(t)&&n<i.length?s(e,i[n+1]):{}},i=function(e){var t=a.extend(!0,{},c.isObject(o())?o():{}),i=a.extend(!0,{},r);t=c.isObject(t)?a.extend(i,t):i;var n=s(t,e);o.container.find('input[value="'+n+'"]').attr("checked",!0).trigger("click",{previewed_device_switched:!0})};a(".sek-bg-pos-wrapper",o.container).on("change",'input[type="radio"]',function(e){var t,i=a(this).val();(t=a.extend(!0,{},c.isObject(o())?o():{}))[n.previewedDevice()||"desktop"]=i,o(t)}),o.previewedDevice.bind(function(e){try{i(e)}catch(e){n.errare("Error when firing syncWithPreviewedDevice for input type spacingWithDeviceSwitcher for input id "+o.id,e)}});try{i(n.previewedDevice())}catch(e){n.errare("Error when firing syncWithPreviewedDevice for input type bgPositionWithDeviceSwitcher for input id "+o.id,e)}}})}(wp.customize,jQuery,_),function(c,l,d){c.czrInputMap=c.czrInputMap||{};var e=function(e){var o=this,t=c.czr_sektions.getInputRegistrationParams(o.id,o.module.module_type),r=d.isEmpty(t)||d.isEmpty(t.default)?{}:t.default,i="verticalAlignWithDeviceSwitcher"===o.type?".sek-v-align-wrapper":".sek-h-align-wrapper",s=l(i,o.container);c.czr_sektions.maybeSetupDeviceSwitcherForInput.call(o);var a=function(e,t){var i=["mobile","tablet","desktop"];if(d.has(e,t))return e[t];var n=d.findIndex(i,function(e){return t===e});return!d.isEmpty(t)&&n<i.length?a(e,i[n+1]):{}},n=function(e){var t=l.extend(!0,{},d.isObject(o())?o():{}),i=l.extend(!0,{},r);t=d.isObject(t)?l.extend(i,t):i;var n=a(t,e);s.find(".selected").removeClass("selected"),s.find('div[data-sek-align="'+n+'"]').addClass("selected")};s.on("click","[data-sek-align]",function(e){var t;e.preventDefault(),(t=l.extend(!0,{},d.isObject(o())?o():{}))[c.previewedDevice()||"desktop"]=l(this).data("sek-align"),s.find(".selected").removeClass("selected"),l.when(l(this).addClass("selected")).done(function(){o(t)})}),o.previewedDevice.bind(function(e){try{n(e)}catch(e){c.errare("Error when firing syncWithPreviewedDevice for input type : "+o.type+" for input id "+o.id,e)}});try{n(c.previewedDevice())}catch(e){c.errare("Error when firing syncWithPreviewedDevice for input type : "+o.type+" for input id "+o.id,e)}};l.extend(c.czrInputMap,{horizTextAlignmentWithDeviceSwitcher:e,horizAlignmentWithDeviceSwitcher:e,verticalAlignWithDeviceSwitcher:e})}(wp.customize,jQuery,_),function(t,e,i){t.czrInputMap=t.czrInputMap||{},e.extend(t.czrInputMap,{font_size:function(e){t.czr_sektions.setupFontSizeAndLineHeightInputs.call(this)}})}(wp.customize,jQuery,_),function(t,e,i){t.czrInputMap=t.czrInputMap||{},e.extend(t.czrInputMap,{line_height:function(e){t.czr_sektions.setupFontSizeAndLineHeightInputs.call(this)}})}(wp.customize,jQuery,_),function(i,c,l){i.czrInputMap=i.czrInputMap||{},c.extend(i.czrInputMap,{font_picker:function(e){var a=this,o=a.input_parent,n=function(e,t){o();var n=c('select[data-czrtype="'+a.id+'"]',a.container);l.isNull(a())||l.isEmpty(a())?n.append('<option value="none" selected="selected">'+sektionsLocalizedData.i18n["Select a font family"]+"</option>"):n.append('<option value="none">'+sektionsLocalizedData.i18n["Select a font family"]+"</option>"),l.each([{title:sektionsLocalizedData.i18n["Web Safe Fonts"],type:"cfont",list:t.cfonts},{title:sektionsLocalizedData.i18n["Google Fonts"],type:"gfont",list:t.gfonts}],function(e){var t,r,s,i=c("<optgroup>",{label:e.title,html:(t=e.list,r=e.type,s="",l.each(t,function(e){var t,i,n=e.name,o=l.isString(n)?n.replace(/[+|:]/g," "):n;t=n,i=r,(n=l.isString(t)?["[",i,"]",t].join(""):"")==a()?s+='<option selected="selected" value="'+n+'">'+o+"</option>":s+='<option value="'+n+'">'+o+"</option>"}),s)});n.append(i)});var i={escapeMarkup:function(e){return e}};e&&c.extend(i,{resultsAdapter:e,closeOnSelect:!1}),n.czrSelect2(i),c(".czrSelect2-selection__rendered",a.container).css(r(a()))},r=function(e){if(!l.isString(e)||l.isEmpty(e))return{};var t,i,n,o=(e=e.replace("[gfont]","").replace("[cfont]","")).split(":");return t=s(e),i=o[1]?o[1].replace(/[^0-9.]+/g,""):400,i=l.isNumber(i)?i:400,n=o[1]&&-1!=o[1].indexOf("italic")?"italic":"",{"font-family":"none"==t?"inherit":t.replace(/[+|:]/g," "),"font-weight":i||400,"font-style":n||"normal"}},s=function(e){if(!l.isString(e)||l.isEmpty(e))return e;var t=(e=e.replace("[gfont]","").replace("[cfont]","")).split(":");return l.isString(t[0])?t[0].replace(/[+|:]/g," "):""};c.when(function(){var e,t=c.Deferred();l.isEmpty(i.sek_fontCollections)?(l.isUndefined(i.sek_fetchingFontCollection)||"pending"!=i.sek_fetchingFontCollection.state()?(e=i.CZR_Helpers.getModuleTmpl({tmpl:"font_list",module_type:"font_picker_input",module_id:a.module.id}),i.sek_fetchingFontCollection=e):e=i.sek_fetchingFontCollection,e.done(function(e){if("string"!=typeof e||"{"!==e[0])throw new Error("font_picker => server list is not JSON.parse-able");i.sek_fontCollections=JSON.parse(e),t.resolve(i.sek_fontCollections)}).fail(function(e){t.reject(e)})):t.resolve(i.sek_fontCollections);return t.promise()}()).done(function(t){var i;(i=c.Deferred(),void 0!==c.fn.czrSelect2&&void 0!==c.fn.czrSelect2.amd&&"function"==typeof c.fn.czrSelect2.amd.require?c.fn.czrSelect2.amd.require(["czrSelect2/results","czrSelect2/utils"],function(e,t){var n=function(e,t,i){n.__super__.constructor.call(this,e,t,i)};t.Extend(n,e),n.prototype.bind=function(e,t){var i=this;e.on("results:focus",function(e){"true"!=e.element.attr("aria-selected")&&i.trigger("select",{data:e.data})}),n.__super__.bind.call(this,e,t)},i.resolve(n)}):i.resolve(!1),i.promise()).done(function(e){n(e,t)})}).fail(function(e){i.errare("font_picker => fail response =>",e)})}})}(wp.customize,jQuery,_),function(r,s,a){r.czrInputMap=r.czrInputMap||{},s.extend(r.czrInputMap,{fa_icon_picker:function(){var n=this,o=!1,e=function(t){!0!==n.iconCollectionSet&&(s.when(s.Deferred(function(t){a.isEmpty(n.sek_faIconCollection)?r.CZR_Helpers.getModuleTmpl({tmpl:"icon_list",module_type:"fa_icon_picker_input",module_id:n.module.id}).done(function(e){if("string"!=typeof e||"["!==e[0])throw new Error("fa_icon_picker => server list is not JSON.parse-able");n.sek_faIconCollection=JSON.parse(e),t.resolve(n.sek_faIconCollection)}).fail(function(e){t.reject(e)}):t.resolve(n.sek_faIconCollection)})).done(function(e){!function(e){a.each(e,function(e){var t={value:e,html:r.CZR_Helpers.capitalize(e.substring(7))};t.value==n()&&(s.extend(t,{selected:"selected"}),o=!0),s("select[data-czrtype]",n.container).append(s("<option>",t))});var t,i=function(e){return e.id?s('<span class="'+e.element.value+'"></span><span class="social-name">&nbsp;&nbsp;'+e.text+"</span>"):e.text};t=o?s("<option>"):s("<option>",{selected:"selected"}),s("select[data-czrtype]",n.container).prepend(t).czrSelect2({templateResult:i,templateSelection:i,placeholder:sektionsLocalizedData.i18n["Select an icon"],allowClear:!0})}(e),t&&!0===t.open_on_init&&a.delay(function(){try{s("select[data-czrtype]",n.container).czrSelect2("open")}catch(e){}},100)}).fail(function(e){r.errare("fa_icon_picker => fail response =>",e)}),n.iconCollectionSet=!0)};n.container.on("click",function(){e()}),a.delay(function(){e({open_on_init:!1})},1e3)}})}(wp.customize,jQuery,_),function(d,u,p){d.czrInputMap=d.czrInputMap||{},u.extend(d.czrInputMap,{code_editor:function(e){var n=this,i=this.module.control,t=(n.input_parent(),!1),r=n.container.find("textarea"),o=n.container.find(".customize-control-title"),s=r.data("editor-params");wp.codeEditor&&(p.isUndefined(s)||!1!==s)&&(t=s),n.isReady.done(function(){var e=function(e){p.isEmpty(this.editor)&&(p.isEmpty(this.module.control.container.attr("data-sek-expanded"))||"false"==this.module.control.container.attr("data-sek-expanded")||setTimeout(function(){if(t)try{a(t)}catch(e){d.errare("error in sek_control => code_editor() input",e),c()}else c();o.click()},10))};e.call(n),n.module.control.container.on("sek-accordion-expanded",function(){e.call(n)})});var a=function(e){var t,i=!1;t=p.extend({},e,{onTabNext:CZRSeksPrototype.selectNextTabbableOrFocusable(":tabbable"),onTabPrevious:CZRSeksPrototype.selectPrevTabbableOrFocusable(":tabbable"),onUpdateErrorNotice:l}),n.editor=wp.codeEditor.initialize(r,t),u(n.editor.codemirror.display.lineDiv).attr({role:"textbox","aria-multiline":"true","aria-label":o.html(),"aria-describedby":"editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4"}),o.on("click",function(e){e.stopPropagation(),n.editor.codemirror.focus()}),n.editor.codemirror.on("change",function(e){i=!0,r.val(e.getValue()).trigger("change"),i=!1}),n.editor.codemirror.setValue(n()),n.bind(n.id+":changed",function(e){i||n.editor.codemirror.setValue(e)}),n.editor.codemirror.on("keydown",function(e,t){27===t.keyCode&&t.stopPropagation()})},c=function(){var o=r[0];n.editor=o,r.on("blur",function(){r.data("next-tab-blurs",!1)}),r.on("keydown",function(e){var t,i,n;27!==e.keyCode?9!==e.keyCode||e.ctrlKey||e.altKey||e.shiftKey||r.data("next-tab-blurs")||(t=o.selectionStart,i=o.selectionEnd,n=o.value,0<=t&&(o.value=n.substring(0,t).concat("\t",n.substring(i)),r.selectionStart=o.selectionEnd=t+1),e.stopPropagation(),e.preventDefault()):r.data("next-tab-blurs")||(r.data("next-tab-blurs",!0),e.stopPropagation())})},l=function(e){var t;i.setting.notifications.remove(n.id),0!==e.length&&(t=1===e.length?sektionsLocalizedData.i18n.codeEditorSingular.replace("%d","1").replace("%s",o.html()):sektionsLocalizedData.i18n.codeEditorPlural.replace("%d",String(e.length)).replace("%s",o.html()),i.setting.notifications.add(n.id,new d.Notification(n.id,{message:t,type:"warning"})))}}})}(wp.customize,jQuery,_),function(e,r,t){e.czrInputMap=e.czrInputMap||{},r.extend(e.czrInputMap,{range_simple:function(e){var t=this,i=r(".sek-range-with-unit-picker-wrapper",t.container),n=i.find('input[type="number"]'),o=i.find('input[type="range"]');o.on("input",function(e){n.val(r(this).val()).trigger("input")}),n.on("input",function(e){t(r(this).val()),o.val(r(this).val())}),o.val(n.val()||0)}})}(wp.customize,jQuery,_),function(a,c,l){a.czrInputMap=a.czrInputMap||{},c.extend(a.czrInputMap,{range_with_unit_picker:function(e){var t=this,i=c(".sek-range-with-unit-picker-wrapper",t.container),n=i.find('input[type="number"]'),o=i.find('input[type="range"]'),r=i.find("input[data-czrtype]").data("sek-unit"),s=function(e){return l.contains(["px","em","%"],e)||(a.errare("error : invalid unit for input "+t.id,e),e="px"),e};t.css_unit=new a.Value(l.isEmpty(r)?"px":s(r)),t.css_unit.bind(function(e){e=l.isEmpty(e)?"px":e,i.find('input[type="number"]').trigger("input")}),o.on("input",function(e){n.val(c(this).val()).trigger("input")}),n.on("input",function(e){t(c(this).val()+s(t.css_unit())),o.val(c(this).val())}),o.val(n.val()||0),i.on("click",".sek-ui-button",function(e){e.preventDefault(),i.find(".sek-ui-button").removeClass("is-selected").attr("aria-pressed",!1),c(this).addClass("is-selected").attr("aria-pressed",!0),i.find("input[data-czrtype]").data("sek-unit",c(this).data("sek-unit")),t.css_unit(c(this).data("sek-unit"))}),i.find('.sek-ui-button[data-sek-unit="'+r+'"]').addClass("is-selected").attr("aria-pressed",!0)}})}(wp.customize,jQuery,_),function(a,_,m){a.czrInputMap=a.czrInputMap||{},_.extend(a.czrInputMap,{range_with_unit_picker_device_switcher:function(e){var c=this,l=_(".sek-range-with-unit-picker-wrapper",c.container),d=l.find('input[type="number"]'),r=l.find('input[type="range"]'),s=function(e){return m.contains(["px","em","%"],e)||(a.errare("range_with_unit_picker_device_switcher => error : invalid unit for input "+c.id,e),e="px"),e},t=a.czr_sektions.getInputRegistrationParams(c.id,c.module.module_type),u=m.isEmpty(t)||m.isEmpty(t.default)?{}:t.default,i=function(){return l.find("input[data-czrtype]").data("sek-unit")||"px"},p=function(e,t){var i=["mobile","tablet","desktop"];if(m.has(e,t))return e[t];var n=m.findIndex(i,function(e){return t===e});return!m.isEmpty(t)&&n<i.length?p(e,i[n+1]):_.extend(!0,{desktop:""},u).desktop},n=function(e){var t=c(),i={};i=_.extend(!0,{},u),m.isObject(t)?i=_.extend(!0,{},t):m.isString(t)&&!m.isEmpty(t)&&(i={desktop:t});var n,o,r=p(i,e),s=(o=r,m.isEmpty(o)||!m.isString(o)?"px":o.replace(/[0-9]|\.|,/g,"")),a=(n=r,m.isEmpty(n)||!m.isString(n)?"16":n.replace(/px|em|%/g,""));_(".sek-unit-wrapper",l).find('[data-sek-unit="'+s+'"]').trigger("click",{previewed_device_switched:!0}),l.find('.sek-ui-button[data-sek-unit="'+s+'"]').addClass("is-selected").attr("aria-pressed",!0),d.val(a).trigger("input",{previewed_device_switched:!0})};a.czr_sektions.maybeSetupDeviceSwitcherForInput.call(c),c.css_unit=new a.Value(m.isEmpty(i())?"px":s(i()));var o='<button type="button" class="button sek-reset-button sek-float-right">'+sektionsLocalizedData.i18n.Reset+"</button>";c.container.find(".customize-control-title").append(o),c.css_unit.bind(function(e,t,i){m.isObject(i)&&!0===i.previewed_device_switched||d.trigger("input")}),r.on("input",function(e){d.val(_(this).val()).trigger("input")}),d.on("input",function(e,t){var i,n=a.previewedDevice()||"desktop",o=_(this).val()+s(c.css_unit());(i=_.extend(!0,{},m.isObject(c())?c():{}))[n]=_.extend(!0,{},i[n]||{}),m.isString(o)&&!m.isEmpty(o)&&(i[n]=o),(m.isEmpty(t)||m.isObject(t)&&!0!==t.previewed_device_switched)&&c(i),r.val(_(this).val())}),l.on("click",".sek-ui-button",function(e,t){e.stopPropagation(),l.find(".sek-ui-button").removeClass("is-selected").attr("aria-pressed",!1),_(this).addClass("is-selected").attr("aria-pressed",!0),l.find("input[data-czrtype]").data("sek-unit",_(this).data("sek-unit")),c.css_unit(_(this).data("sek-unit"),t)}),c.previewedDevice.bind(function(e){try{n(e)}catch(e){a.errare("Error when firing syncWithPreviewedDevice for input type range_with_unit_picker_device_switcher for input id "+c.id,e)}}),c.container.on("click",".sek-reset-button",function(e){var t=a.previewedDevice(),i=_.extend(!0,{},m.isObject(c())?c():{});m.isEmpty(i[t])||(i=m.omit(i,t),c(i),n(a.previewedDevice()))}),r.val(d.val()||0);try{n(a.previewedDevice())}catch(e){a.errare("Error when firing syncWithPreviewedDevice for input type range_with_unit_picker_device_switcher for input id "+c.id,e)}}})}(wp.customize,jQuery,_),function(g,h,k){g.czrInputMap=g.czrInputMap||{},h.extend(g.czrInputMap,{borders:function(e){var a=this,c=h(".sek-borders",a.container),l=c.find('input[type="number"]'),d=c.find('input[type="range"]'),u=c.find(".sek-alpha-color-input"),p=function(e){return k.contains(["px","em","%"],e)||(g.errare("borders => error : invalid unit for input "+a.id,e),e="px"),e},_=function(e){return k.isEmpty(e)||!k.isString(e)?"16":e.replace(/px|em|%/g,"")},m=function(e){return k.isEmpty(e)||!k.isString(e)?"px":e.replace(/[0-9]|\.|,/g,"")},t=g.czr_sektions.getInputRegistrationParams(a.id,a.module.module_type),f=k.isEmpty(t)||k.isEmpty(t.default)?{}:t.default;a.cssBorderTypes=["top","left","right","bottom"];var i,n,o=function(){var e=a(),t="px";return k.isObject(e)&&k.has(e,"_all_")&&k.isObject(e._all_)&&!k.isEmpty(e._all_.wght)&&(t=p(m(e._all_.wght))),t},r=function(){var e=a(),t="#000000";return k.isObject(e)&&k.has(e,"_all_")&&k.isObject(e._all_)&&!k.isEmpty(e._all_.col)&&(t=e._all_.col),t},s=function(e){if(!k.contains(k.union(a.cssBorderTypes,["_all_"]),e))throw new Error("Error in syncWithBorderType : the border type must be one of those values '_all_', 'top', 'left', 'right', 'bottom'");var t=a(),i={},n=h.extend(!0,{},f);k.isObject(t)?i=h.extend(!0,{},t):k.isString(t)&&(i={_all_:{wght:t}});var o,r,s=function(e,t){var i,n=h.extend(!0,{},f);if(!k.has(n,"_all_"))throw new Error("Error when firing getCurrentBorderTypeOrAllValue : the default value of the borders input must be php registered as an array formed : array( 'wght' => '1px', 'col' => '#000000' )");return i=k.isObject(e)&&k.has(e,"_all_")?k.extend(n._all_,e._all_):n._all_,k.has(e,t)&&k.isObject(e[t])?k.extend(i,e[t]):n._all_}(i=h.extend(n,i),e);if(k.isEmpty(s)||!k.isObject(s)||k.isEmpty(s.wght)||k.isEmpty(s.col))throw new Error("Error in syncWithBorderType : getCurrentBorderTypeOrAllValue must return an object formed : array( 'wght' => '1px', 'col' => '#000000' )");o=m(s.wght),r=_(s.wght),h(".sek-unit-wrapper",c).find('[data-sek-unit="'+o+'"]').trigger("click",{border_type_switched:!0}),c.find('.sek-ui-button[data-sek-unit="'+o+'"]').addClass("is-selected").attr("aria-pressed",!0),l.val(r).trigger("input",{border_type_switched:!0}),u.data("border_type_switched",!0),u.val(s.col).trigger("change"),u.data("border_type_switched",!1)};a.borderColor=new g.Value(k.isEmpty(r())?"#000000":r()),a.css_unit=new g.Value(k.isEmpty(o())?"px":p(o())),a.borderType=new g.Value("_all_"),l.val((i=a(),n=1,k.isObject(i)&&k.has(i,"_all_")&&k.isObject(i._all_)&&!k.isEmpty(i._all_.wght)&&(n=_(i._all_.wght)),n=parseInt(n,10),(!k.isNumber(n)||n<0)&&(g.errare("Error in borders input type for module : "+a.module.module_type+" the initial border width is invalid : "+n),n=1),n)),u.val(a.borderColor()),u.wpColorPicker({palettes:!0,width:1440<=window.innerWidth?271:251,change:function(e,t){h(this).val(t.color.toString()).trigger("colorpickerchange"),a.borderColor(t.color.toString(),{border_type_switched:!0===h(this).data("border_type_switched")})},clear:function(e,t){h(this).val("").trigger("colorpickerchange"),a.borderColor("")}}),a.css_unit.bind(function(e,t,i){(!k.isObject(i)||!0!==i.border_type_switched&&!0!==i.initializing_the_unit)&&l.trigger("input",i)}),a.borderColor.bind(function(e,t,i){(!k.isObject(i)||!0!==i.border_type_switched&&!0!==i.initializing_the_color)&&l.trigger("input",i)}),a.borderType.bind(function(e){try{s(e)}catch(e){g.errare("Error when firing syncWithBorderType for input type borders for module type "+a.module.module_type,e)}}),d.on("input",function(e){l.val(h(this).val()).trigger("input")}),l.on("input",function(e,t){var i,n=a.borderType()||"_all_",o=a.borderColor(),r=h(this).val()+p(a.css_unit()),s=h.extend(!0,{},f);(i=h.extend(!0,{},k.isObject(a())?a():s))[n]=h.extend(!0,{},i[n]||s[n]),k.isString(r)&&!k.isEmpty(r)&&(i[n].wght=r),i[n].col=o,(k.isEmpty(t)||k.isObject(t)&&!0!==t.border_type_switched)&&("_all_"===n&&k.each(a.cssBorderTypes,function(e){i=k.omit(i,e)}),a(i)),d.val(h(this).val())}),c.on("click","[data-sek-unit]",function(e,t){e.preventDefault(),c.find("[data-sek-unit]").removeClass("is-selected").attr("aria-pressed",!1),h(this).addClass("is-selected").attr("aria-pressed",!0),c.find("input[data-czrtype]").data("sek-unit",h(this).data("sek-unit")),a.css_unit(h(this).data("sek-unit"),t)}),c.on("click","[data-sek-border-type]",function(e,t){e.preventDefault(),c.find("[data-sek-border-type]").removeClass("is-selected").attr("aria-pressed",!1),h(this).addClass("is-selected").attr("aria-pressed",!0);var i="_all_";try{i=h(this).data("sek-border-type")}catch(e){g.errare("borders input type => error when attaching click event",e)}a.borderType(i,t)}),a.container.on("click",".sek-reset-button",function(e){var t=a.borderType()||"_all_",i=h.extend(!0,{},k.isObject(a())?a():{});k.isEmpty(i[t])||(i=k.omit(i,t),a(i),s(t))}),d.val(l.val()||0);try{s(a.borderType())}catch(e){g.errare("Error when firing syncWithBorderType for input type borders for module type "+a.module.module_type,e)}h('[data-sek-unit="'+a.css_unit()+'"]',c).trigger("click",{initializing_the_unit:!0})}})}(wp.customize,jQuery,_),function(m,f,g){m.czrInputMap=m.czrInputMap||{},f.extend(m.czrInputMap,{border_radius:function(e){var a=this,c=f(".sek-borders",a.container),l=c.find('input[type="number"]'),s=c.find('input[type="range"]'),d=function(e){return g.contains(["px","em","%"],e)||(m.errare("border_radius => error : invalid unit for input "+a.id,e),e="px"),e},u=function(e){return g.isEmpty(e)||!g.isString(e)?"16":e.replace(/px|em|%/g,"")},p=function(e){return g.isEmpty(e)||!g.isString(e)?"px":e.replace(/[0-9]|\.|,/g,"")},t=m.czr_sektions.getInputRegistrationParams(a.id,a.module.module_type),_=g.isEmpty(t)||g.isEmpty(t.default)?{}:t.default;a.cssRadiusTypes=["top_left","top_right","bottom_right","bottom_left"];var i,n,o=function(){var e=a(),t="px";return g.isObject(e)&&g.has(e,"_all_")&&(t=d(p(e._all_))),t},r=function(e){if(!g.contains(["_all_","top_left","top_right","bottom_right","bottom_left"],e))throw new Error("Error in syncWithRadiusType : the radius type must be one of those values '_all_', 'top_left', 'top_right', 'bottom_right', 'bottom_left', => radius type => "+e);var t=a(),i={},n=f.extend(!0,{},_);g.isObject(t)?i=f.extend(!0,{},t):g.isString(t)&&(i={_all_:"0px"});var o,r,s=function(e,t){var i,n=f.extend(!0,{},_);if(!g.has(n,"_all_"))throw new Error("Error when firing getCurrentRadiusTypeOrAllValue : the default value of the border_radius input must be php registered as an array");return i=g.isObject(e)&&g.has(e,"_all_")?e._all_:n._all_,g.has(e,t)?e[t]:i}(i=f.extend(n,i),e);if(g.isEmpty(s)||!g.isString(s))throw new Error("Error in syncWithRadiusType : getCurrentRadiusTypeOrAllValue must return a string like 3em");o=p(s),r=u(s),f(".sek-unit-wrapper",c).find('[data-sek-unit="'+o+'"]').trigger("click",{radius_type_switched:!0}),c.find('.sek-ui-button[data-sek-unit="'+o+'"]').addClass("is-selected").attr("aria-pressed",!0),l.val(r).trigger("input",{radius_type_switched:!0})};a.css_unit=new m.Value(g.isEmpty(o())?"px":d(o())),a.radiusType=new m.Value("_all_"),l.val((i=a(),n=0,g.isObject(i)&&g.has(i,"_all_")&&(n=u(i._all_)),n=parseInt(n,10),(!g.isNumber(n)||n<0)&&(m.errare("Error in border_radius input type for module : "+a.module.module_type+" the initial radius is invalid : "+n),n=0),n)),a.css_unit.bind(function(e,t,i){(!g.isObject(i)||!0!==i.radius_type_switched&&!0!==i.initializing_the_unit)&&l.trigger("input",i)}),a.radiusType.bind(function(e){try{r(e)}catch(e){m.errare("Error when firing syncWithRadiusType for input type border_radius for module type "+a.module.module_type,e)}}),s.on("input",function(e){l.val(f(this).val()).trigger("input")}),l.on("input",function(e,t){var i,n=a.radiusType()||"_all_",o=f(this).val()+d(a.css_unit()),r=f.extend(!0,{},_);(i=f.extend(!0,{},g.isObject(a())?a():r))[n]=f.extend(!0,{},i[n]||r[n]),g.isString(o)&&!g.isEmpty(o)&&(i[n]=o),(g.isEmpty(t)||g.isObject(t)&&!0!==t.radius_type_switched)&&("_all_"===n&&g.each(a.cssRadiusTypes,function(e){i=g.omit(i,e)}),a(i)),s.val(f(this).val())}),c.on("click","[data-sek-unit]",function(e,t){e.preventDefault(),c.find("[data-sek-unit]").removeClass("is-selected").attr("aria-pressed",!1),f(this).addClass("is-selected").attr("aria-pressed",!0),c.find("input[data-czrtype]").data("sek-unit",f(this).data("sek-unit")),a.css_unit(f(this).data("sek-unit"),t)}),c.on("click","[data-sek-radius-type]",function(e,t){e.preventDefault(),c.find("[data-sek-radius-type]").removeClass("is-selected").attr("aria-pressed",!1),f(this).addClass("is-selected").attr("aria-pressed",!0);var i="_all_";try{i=f(this).data("sek-radius-type")}catch(e){m.errare("border_radius input type => error when attaching click event",e)}a.radiusType(i,t)}),a.container.on("click",".sek-reset-button",function(e){var t=a.radiusType()||"_all_",i=f.extend(!0,{},g.isObject(a())?a():{});g.isEmpty(i[t])||(i=g.omit(i,t),a(i),r(t))}),s.val(l.val()||0);try{r(a.radiusType())}catch(e){m.errare("Error when firing syncWithRadiusType for input type border_radius for module type "+a.module.module_type,e)}f('[data-sek-unit="'+a.css_unit()+'"]',c).trigger("click",{initializing_the_unit:!0})}})}(wp.customize,jQuery,_),function(r,s,a){r.czrInputMap=r.czrInputMap||{},s.extend(r.czrInputMap,{buttons_choice:function(e){var n=this,o=s(".sek-button-choice-wrapper",n.container),t=o.find('input[type="number"]'),i=r.czr_sektions.getInputRegistrationParams(n.id,n.module.module_type);a.isEmpty(i)||a.isEmpty(i.default)||i.default;t.val(n()),o.on("click","[data-sek-choice]",function(e,t){var i;e.stopPropagation(),o.find("[data-sek-choice]").removeClass("is-selected").attr("aria-pressed",!1),s(this).addClass("is-selected").attr("aria-pressed",!0);try{i=s(this).data("sek-choice")}catch(e){r.errare("buttons_choice input type => error when attaching click event",e)}n(i)}),s('[data-sek-choice="'+n()+'"]',o).trigger("click",{initializing_the_unit:!0})}})}(wp.customize,jQuery,_),function(i,n,e){i.czrInputMap=i.czrInputMap||{},n.extend(i.czrInputMap,{reset_button:function(e){this.container.on("click","[data-sek-reset-scope]",function(e,t){if(e.stopPropagation(),"local"===n(this).data("sek-reset-scope"))try{i.czr_sektions.resetCollectionSetting()}catch(e){i.errare("reset_button => error when firing resetCollectionSetting() on click event",e)}})}})}(wp.customize,jQuery,_),function(o,r,s){o.czrModuleMap=o.czrModuleMap||{},r.extend(o.czrModuleMap,{sek_content_type_switcher_module:{crud:!1,name:o.czr_sektions.getRegisteredModuleProperty("sek_content_type_switcher_module","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:s.extend({id:"",title:""},o.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_content_type_switcher_module"))}}),o.czrInputMap=o.czrInputMap||{},r.extend(o.czrInputMap,{content_type_switcher:function(e){var i,n=this;if(!o.section.has(n.module.control.section()))throw new Error("api.czrInputMap.content_type_switcher => section not registered");i=o.section(n.module.control.section()),n.container.on("click","[data-sek-content-type]",function(e){e.preventDefault(),n.container.find("[data-sek-content-type]").removeClass("is-selected").attr("aria-pressed",!1),r(this).addClass("is-selected").attr("aria-pressed",!0),o.czr_sektions.currentContentPickerType(r(this).data("sek-content-type"))});var t=function(t){n.container.find('[data-sek-content-type="'+(t||"module")+'"]').trigger("click"),s.each(i.controls(),function(e){s.isUndefined(e.content_type)||e.active(t===e.content_type)})};o.czr_sektions.currentContentPickerType=o.czr_sektions.currentContentPickerType||new o.Value(n()),t(o.czr_sektions.currentContentPickerType()),o.czr_sektions.currentContentPickerType.bind(function(e){t(e)})}})}(wp.customize,jQuery,_),function(t,e,i){t.czrModuleMap=t.czrModuleMap||{},e.extend(t.czrModuleMap,{sek_module_picker_module:{crud:!1,name:t.czr_sektions.getRegisteredModuleProperty("sek_module_picker_module","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},t.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_module_picker_module"))}}),t.czrInputMap=t.czrInputMap||{},e.extend(t.czrInputMap,{module_picker:function(e){t.czr_sektions.trigger("sek-refresh-dragzones",{type:"module",input_container:this.container})}})}(wp.customize,jQuery,_),function(t,e,i){t.czrModuleMap=t.czrModuleMap||{};var n=["sek_intro_sec_picker_module","sek_features_sec_picker_module","sek_contact_sec_picker_module","sek_column_layouts_sec_picker_module"];sektionsLocalizedData.isNimbleHeaderFooterEnabled&&(n=i.union(n,["sek_header_sec_picker_module","sek_footer_sec_picker_module"])),i.each(n,function(e){t.czrModuleMap[e]={crud:!1,name:t.czr_sektions.getRegisteredModuleProperty(e,"name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},t.czr_sektions.getDefaultItemModelFromRegisteredModuleData(e))}})}(wp.customize,jQuery,_),function(r,e,s){var t={initialize:function(e,t){this.inputConstructor=r.CZRInput.extend({initialize:function(e,t){var i=this;r.CZRInput.prototype.initialize.call(i,e,t),i.isReady.then(function(){i.renderUserSavedSections(),r.czr_sektions.trigger("sek-refresh-dragzones",{type:"preset_section",input_container:i.container})})},renderUserSavedSections:function(){var i="",n=this.container.find(".sek-content-type-wrapper"),o="";s.each(sektionsLocalizedData.userSavedSektions,function(e,t){try{o=function(e){var t=e.getDate(),i=e.getMonth(),n=e.getFullYear();e.getHours(),e.getMinutes(),e.getSeconds();return[t,["January","February","March","April","May","June","July","August","September","October","November","December"][i],n].join(" ")}(new Date(e.creation_date.replace(/-/g,"/")))}catch(e){r.errare("::renderUserSavedSections => formatDate => error",e)}i=['<div class="sek-user-section-wrapper">','<div class="sek-saved-section-title"><i class="sek-remove-user-section far fa-trash-alt"></i>'+e.title+"</div>",'<div draggable="true" data-sek-is-user-section="true" data-sek-section-type="'+e.type+'" data-sek-content-type="preset_section" data-sek-content-id="'+t+'" style="" title="'+e.title+'">','<div class="sek-overlay"></div>','<div class="sek-saved-section-description">'+e.description+"</div>",s.isEmpty(o)?"":'<div class="sek-saved-section-date"><i class="far fa-calendar-alt"></i> @missi18n Created : '+o+"</div>","</div>","</div>"].join(""),n.append(i)})}}),r.CZRDynModule.prototype.initialize.call(this,e,t)}};r.czrModuleMap=r.czrModuleMap||{},sektionsLocalizedData.isSavedSectionEnabled&&e.extend(r.czrModuleMap,{sek_my_sections_sec_picker_module:{mthds:t,crud:!1,name:r.czr_sektions.getRegisteredModuleProperty("sek_my_sections_sec_picker_module","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:r.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_my_sections_sec_picker_module")}})}(wp.customize,jQuery,_),function(t,e,i){t.czrInputMap=t.czrInputMap||{},e.extend(t.czrInputMap,{section_picker:function(e){t.czr_sektions.trigger("sek-refresh-dragzones",{type:"preset_section",input_container:this.container})}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_level_anchor_module:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_level_anchor_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_anchor_module"))}})}(wp.customize,jQuery,_),function(r,e,s){var t={initialize:function(e,t){var i=this;i.inputConstructor=r.CZRInput.extend(i.CZRInputMths||{}),i.itemConstructor=r.CZRItem.extend(i.CZRItemConstructor||{}),r.CZRDynModule.prototype.initialize.call(i,e,t)},CZRInputMths:{setupSelect:function(){r.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!s.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){r.errorLog("item.setInputVisibilityDeps() : "+e)}}),r.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this,o=n.module;n.czr_Input.each(function(i){switch(i.id){case"bg-image":s.each(["bg-attachment","bg-scale","bg-repeat","bg-apply-overlay","bg-color-overlay","bg-opacity-overlay","bg-parallax","bg-parallax-force"],function(t){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"bg-color-overlay":case"bg-opacity-overlay":e=!s.isEmpty(i()+"")&&r.CZR_Helpers.isChecked(n.czr_Input("bg-apply-overlay")());break;case"bg-parallax-force":e=!s.isEmpty(i()+"")&&r.CZR_Helpers.isChecked(n.czr_Input("bg-parallax")());break;case"bg-scale":case"bg-repeat":e=!s.isEmpty(i()+"")&&!r.CZR_Helpers.isChecked(n.czr_Input("bg-parallax")());break;default:e=!s.isEmpty(i()+"")}return e})}catch(e){r.errare(o.id+" => error in setInputVisibilityDeps",e)}});break;case"bg-apply-overlay":s.each(["bg-color-overlay","bg-opacity-overlay"],function(e){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return!s.isEmpty(n.czr_Input("bg-image")()+"")&&r.CZR_Helpers.isChecked(i())})}catch(e){r.errare(o.id+" => error in setInputVisibilityDeps",e)}});break;case"bg-parallax":s.each(["bg-parallax-force","bg-scale","bg-repeat"],function(t){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"bg-parallax-force":e=!s.isEmpty(n.czr_Input("bg-image")()+"")&&r.CZR_Helpers.isChecked(i());break;case"bg-repeat":case"bg-scale":e=!s.isEmpty(n.czr_Input("bg-image")()+"")&&!r.CZR_Helpers.isChecked(i())}return e})}catch(e){r.errare(o.id+" => error in setInputVisibilityDeps",e)}}),i.bind(function(e){r.CZR_Helpers.isChecked(i())&&r.CZR_Helpers.isChecked(n.czr_Input("bg-attachment")())&&n.czr_Input("bg-attachment").container.find("input[type=checkbox]").trigger("click")});break;case"bg-attachment":i.bind(function(e){r.CZR_Helpers.isChecked(i())&&r.CZR_Helpers.isChecked(n.czr_Input("bg-parallax")())&&n.czr_Input("bg-parallax").container.find("input[type=checkbox]").trigger("click")})}})}}};r.czrModuleMap=r.czrModuleMap||{},e.extend(r.czrModuleMap,{sek_level_bg_module:{mthds:t,crud:!1,name:r.czr_sektions.getRegisteredModuleProperty("sek_level_bg_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:s.extend({id:"",title:""},r.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_bg_module"))}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){var i=this;i.inputConstructor=n.CZRInput.extend(i.CZRInputMths||{}),i.itemConstructor=n.CZRItem.extend(i.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(i,e,t)},CZRInputMths:{setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var i=this.module;this.czr_Input.each(function(t){switch(t.id){case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{sek_level_border_module:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("sek_level_border_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.extend({id:"",title:""},n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_border_module"))}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.itemConstructor=i.CZRItem.extend(this.CZRItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"use-custom-breakpoint":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"custom-breakpoint",function(){return e()})}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_level_breakpoint_module:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_level_breakpoint_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_breakpoint_module"))}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){var i=this;i.inputConstructor=n.CZRInput.extend(i.CZRInputMths||{}),i.itemConstructor=n.CZRItem.extend(i.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(i,e,t)},CZRInputMths:{setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var i=this.module;this.czr_Input.each(function(t){switch(t.id){case"height-type":o.each(["custom-height","overflow_hidden"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"custom"===t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{sek_level_height_module:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("sek_level_height_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.extend({id:"",title:""},n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_height_module"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_level_visibility_module:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_level_visibility_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_visibility_module"))}})}(wp.customize,jQuery,_),function(n,e,i){var t={initialize:function(e,t){var i=this;i.inputConstructor=n.CZRInput.extend(i.CZRInputMths||{}),i.itemConstructor=n.CZRItem.extend(i.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(i,e,t)},CZRInputMths:{setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!i.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"width-type":n.czr_sektions.scheduleVisibilityOfInputId.call(e,"custom-width",function(){return"custom"===e()}),n.czr_sektions.scheduleVisibilityOfInputId.call(e,"h_alignment",function(){return"custom"===e()})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{sek_level_width_module:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("sek_level_width_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.extend({id:"",title:""},n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_width_module"))}})}(wp.customize,jQuery,_),function(n,e,i){var t={initialize:function(e,t){var i=this;i.inputConstructor=n.CZRInput.extend(i.CZRInputMths||{}),i.itemConstructor=n.CZRItem.extend(i.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(i,e,t)},CZRInputMths:{setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!i.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"use-custom-outer-width":n.czr_sektions.scheduleVisibilityOfInputId.call(e,"outer-section-width",function(){return e()});break;case"use-custom-inner-width":n.czr_sektions.scheduleVisibilityOfInputId.call(e,"inner-section-width",function(){return e()})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{sek_level_width_section:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("sek_level_width_section","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.extend({id:"",title:""},n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_width_section"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_level_spacing_module:{mthds:"",crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_level_spacing_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_level_spacing_module"))}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_local_template:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_local_template","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:t.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_template"))}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=i.CZRItem.extend(this.CZRItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"use-custom-outer-width":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"outer-section-width",function(){return e()});break;case"use-custom-inner-width":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"inner-section-width",function(){return e()})}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_local_widths:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_local_widths","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:n.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_widths"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_local_custom_css:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_local_custom_css","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_custom_css"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_local_reset:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_local_reset","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_reset"))}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_local_performances:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_local_performances","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:t.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_performances"))}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_local_header_footer:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_local_header_footer","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:t.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_local_header_footer"))}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=i.CZRItem.extend(this.CZRItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"use-custom-breakpoint":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"global-custom-breakpoint",function(){return e()})}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_global_breakpoint:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_global_breakpoint","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:n.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_breakpoint"))}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=i.CZRItem.extend(this.CZRItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(e){switch(e.id){case"use-custom-outer-width":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"outer-section-width",function(){return e()});break;case"use-custom-inner-width":i.czr_sektions.scheduleVisibilityOfInputId.call(e,"inner-section-width",function(){return e()})}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_global_widths:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_global_widths","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:n.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_widths"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_global_performances:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_global_performances","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_performances"))}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{sek_global_header_footer:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("sek_global_header_footer","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:t.extend({id:"",title:""},i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_header_footer"))}})}(wp.customize,jQuery,_),function(r,e,s){var t={initialize:function(e,t){this.itemConstructor=r.CZRItem.extend(this.CZRItemConstructor||{}),r.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!s.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){r.errorLog("item.setInputVisibilityDeps() : "+e)}}),r.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this,o=n.module;n.czr_Input.each(function(i){switch(i.id){case"enable":s.each(["public_key","private_key","badge","show_failure_message","failure_message","score"],function(t){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"failure_message":e=i()&&n.czr_Input("show_failure_message")();break;default:e=i()}return e})}catch(e){r.errare(o.module_type+" => error in setInputVisibilityDeps",e)}});break;case"show_failure_message":s.each(["failure_message"],function(e){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()&&n.czr_Input("enable")()})}catch(e){r.errare(o.module_type+" => error in setInputVisibilityDeps",e)}})}})}}};r.czrModuleMap=r.czrModuleMap||{},e.extend(r.czrModuleMap,{sek_global_recaptcha:{mthds:t,crud:!1,name:r.czr_sektions.getRegisteredModuleProperty("sek_global_recaptcha","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:s.extend({id:"",title:""},r.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_recaptcha"))}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{sek_global_beta_features:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("sek_global_beta_features","name"),has_mod_opt:!1,ready_on_section_expanded:!0,defaultItemModel:i.extend({id:"",title:""},e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("sek_global_beta_features"))}})}(wp.customize,jQuery,_),function(o,e,r){var t={initialize:function(e,t){var i=this;i.inputConstructor=o.CZRInput.extend({setupSelect:function(){o.czr_sektions.setupSelectInput.call(this)}}),i.itemConstructor=o.CZRItem.extend(i.CZRItemConstructor||{}),o.CZRDynModule.prototype.initialize.call(i,e,t),i.bind("set_default_content_picker_options",function(e){return e.defaultContentPickerOption.defaultOption={title:'<span style="font-weight:bold">'+sektionsLocalizedData.i18n["Set a custom url"]+"</span>",type:"",type_label:"",object:"",id:"_custom_",url:""},e})},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!r.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){o.errorLog("item.setInputVisibilityDeps() : "+e)}}),o.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this,t=n.module;n.czr_Input.each(function(i){switch(i.id){case"img":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"img-size",function(){return!r.isEmpty(i()+"")&&r.isNumber(i())});break;case"link-to":r.each(["link-pick-url","link-custom-url","link-target"],function(t){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"link-custom-url":e="url"===i()&&"_custom_"==n.czr_Input("link-pick-url")().id;break;case"link-pick-url":e="url"===i();break;case"link-target":e=!r.contains(["no-link","img-lightbox"],i())}return e})}catch(e){o.errare("Image module => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"link-custom-url",function(){return"_custom_"==i().id&&"url"==n.czr_Input("link-to")()});break;case"border-type":r.each(["borders"],function(e){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return"none"!==i()})}catch(e){o.errare(t.id+" => error in setInputVisibilityDeps",e)}});break;case"use_custom_width":r.each(["custom_width"],function(e){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){o.errare("Image module => error in setInputVisibilityDeps",e)}});break;case"use_custom_title_attr":r.each(["heading_title"],function(e){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){o.errare("Image module => error in setInputVisibilityDeps",e)}})}})}}};o.czrModuleMap=o.czrModuleMap||{},e.extend(o.czrModuleMap,{czr_image_main_settings_child:{mthds:t,crud:!1,name:o.czr_sektions.getRegisteredModuleProperty("czr_image_main_settings_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_image_main_settings_child")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var e=this,i=e.module;e.czr_Input.each(function(t){switch(t.id){case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_image_borders_corners_child:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_image_borders_corners_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_image_borders_corners_child")}})}(wp.customize,jQuery,_),function(n,e,t){var i={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend(this.CZRTextEditorInputMths||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRTextEditorInputMths:{initialize:function(e,t){var i=this;"tiny_mce_editor"==i.type&&i.isReady.then(function(){i.container.find('[data-czr-action="open-tinymce-editor"]').trigger("click")}),n.CZRInput.prototype.initialize.call(i,e,t)},setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_tinymce_child:{mthds:i,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_tinymce_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_tinymce_child")}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{czr_simple_html_module:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("czr_simple_html_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_html_module")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRFPItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRFPItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(i){switch(i.id){case"img-type":o.each(["img-id","img-size"],function(t){try{n.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"img-id":e="custom"===i();break;default:e="none"!==i()}return e})}catch(e){n.errare("Featured pages module => error in setInputVisibilityDeps",e)}});break;case"content-type":o.each(["content-custom-text"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return"custom"===i()})}catch(e){n.errare("Featured pages module => error in setInputVisibilityDeps",e)}});break;case"btn-display":o.each(["btn-custom-text"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){n.errare("Featured pages module => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_featured_pages_module:{mthds:t,crud:n.czr_sektions.getRegisteredModuleProperty("czr_featured_pages_module","is_crud"),hasPreItem:!1,refresh_on_add_item:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_featured_pages_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_featured_pages_module")}})}(wp.customize,jQuery,_),function(r,e,s){var t={initialize:function(e,t){var i=this;i.inputConstructor=r.CZRInput.extend({setupSelect:function(){r.czr_sektions.setupSelectInput.call(this)}}),i.itemConstructor=r.CZRItem.extend(i.CZRIconItemConstructor||{}),i.bind("set_default_content_picker_options",function(e){return e.defaultContentPickerOption.defaultOption={title:'<span style="font-weight:bold">'+sektionsLocalizedData.i18n["Set a custom url"]+"</span>",type:"",type_label:"",object:"",id:"_custom_",url:""},e}),r.CZRDynModule.prototype.initialize.call(i,e,t)},CZRIconItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!s.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){r.errorLog("item.setInputVisibilityDeps() : "+e)}}),r.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this,o=n.module;n.czr_Input.each(function(i){switch(i.id){case"link-to":s.each(["link-pick-url","link-custom-url","link-target"],function(t){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"link-custom-url":e="url"==i()&&"_custom_"==n.czr_Input("link-pick-url")().id;break;default:e="url"==i()}return e})}catch(e){r.errare(o.module_type+" => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":r.czr_sektions.scheduleVisibilityOfInputId.call(i,"link-custom-url",function(){return"_custom_"==i().id&&"url"==n.czr_Input("link-to")()});break;case"use_custom_color_on_hover":s.each(["color_hover"],function(e){try{r.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){r.errare(o.module_type+" => error in setInputVisibilityDeps",e)}})}})}}};r.czrModuleMap=r.czrModuleMap||{},e.extend(r.czrModuleMap,{czr_icon_settings_child:{mthds:t,crud:!1,name:r.czr_sektions.getRegisteredModuleProperty("czr_icon_settings_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:r.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_icon_settings_child")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var e=this,i=e.module;e.czr_Input.each(function(t){switch(t.id){case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_icon_spacing_border_child:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_icon_spacing_border_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_icon_spacing_border_child")}})}(wp.customize,jQuery,_),function(o,e,r){var t={initialize:function(e,t){var i=this;i.inputConstructor=o.CZRInput.extend(i.CZRHeadingInputMths||{}),i.itemConstructor=o.CZRItem.extend(i.CZRItemConstructor||{}),o.CZRDynModule.prototype.initialize.call(i,e,t),i.bind("set_default_content_picker_options",function(e){return e.defaultContentPickerOption.defaultOption={title:'<span style="font-weight:bold">'+sektionsLocalizedData.i18n["Set a custom url"]+"</span>",type:"",type_label:"",object:"",id:"_custom_",url:""},e})},CZRHeadingInputMths:{setupSelect:function(){o.czr_sektions.setupSelectInput.call(this)}},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!r.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){o.errorLog("item.setInputVisibilityDeps() : "+e)}}),o.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this;n.module;n.czr_Input.each(function(i){switch(i.id){case"link-to":r.each(["link-pick-url","link-custom-url","link-target"],function(t){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"link-custom-url":e=i()&&"_custom_"==n.czr_Input("link-pick-url")().id;break;case"link-pick-url":case"link-target":e=i()}return e})}catch(e){o.errare("Heading module => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"link-custom-url",function(){return"_custom_"==i().id&&!0===n.czr_Input("link-to")()})}})}}};o.czrModuleMap=o.czrModuleMap||{},e.extend(o.czrModuleMap,{czr_heading_child:{mthds:t,crud:!1,name:o.czr_sektions.getRegisteredModuleProperty("czr_heading_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_heading_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend(this.CZRHeadingInputMths||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRHeadingInputMths:{setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_heading_spacing_child:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_heading_spacing_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_heading_spacing_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend(this.CZRDividerInputMths||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRDividerInputMths:{setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_divider_module:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_divider_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_divider_module")}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{czr_spacer_module:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("czr_spacer_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_spacer_module")}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{czr_map_module:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("czr_map_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_map_module")}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=i.CZRItem.extend(this.CZRButtonItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRButtonItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(t){switch(t.id){case"quote_design":n.each(["border_width_css","border_color_css"],function(e){try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"border-before"==t()})}catch(e){i.errare("Quote module => error in setInputVisibilityDeps",e)}}),n.each(["icon_color_css","icon_size_css"],function(e){try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"quote-icon-before"==t()})}catch(e){i.errare("Quote module => error in setInputVisibilityDeps",e)}})}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_quote_design_child:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_quote_design_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_quote_design_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_quote_quote_child:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_quote_quote_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_quote_quote_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_quote_cite_child:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_quote_cite_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_quote_cite_child")}})}(wp.customize,jQuery,_),function(o,e,r){var t={initialize:function(e,t){var i=this;i.inputConstructor=o.CZRInput.extend({setupSelect:function(){o.czr_sektions.setupSelectInput.call(this)}}),i.itemConstructor=o.CZRItem.extend(i.CZRButtonItemConstructor||{}),i.bind("set_default_content_picker_options",function(e){return e.defaultContentPickerOption.defaultOption={title:'<span style="font-weight:bold">'+sektionsLocalizedData.i18n["Set a custom url"]+"</span>",type:"",type_label:"",object:"",id:"_custom_",url:""},e}),o.CZRDynModule.prototype.initialize.call(i,e,t)},CZRButtonItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!r.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){o.errorLog("item.setInputVisibilityDeps() : "+e)}}),o.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this;n.module;n.czr_Input.each(function(i){switch(i.id){case"link-to":r.each(["link-pick-url","link-custom-url","link-target"],function(t){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"link-custom-url":e="url"==i()&&"_custom_"==n.czr_Input("link-pick-url")().id;break;default:e="url"==i()}return e})}catch(e){o.errare("Button module => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"link-custom-url",function(){return"_custom_"==i().id&&"url"==n.czr_Input("link-to")()});break;case"icon":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"icon-side",function(){return!r.isEmpty(i())})}})}}};o.czrModuleMap=o.czrModuleMap||{},e.extend(o.czrModuleMap,{czr_btn_content_child:{mthds:t,crud:!1,name:o.czr_sektions.getRegisteredModuleProperty("czr_btn_content_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_btn_content_child")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRButtonItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRButtonItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var e=this,i=e.module;e.czr_Input.each(function(t){switch(t.id){case"use_custom_bg_color_on_hover":o.each(["bg_color_hover"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){n.errare("Button module => error in setInputVisibilityDeps",e)}});break;case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}});break;case"use_box_shadow":o.each(["push_effect"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){n.errare("Button module => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_btn_design_child:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_btn_design_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_btn_design_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_menu_content_child:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_menu_content_child","name"),has_mod_opt:!1,ready_on_section_expanded:!0,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_menu_content_child")}})}(wp.customize,jQuery,_),function(e,t,i){e.czrModuleMap=e.czrModuleMap||{},t.extend(e.czrModuleMap,{czr_menu_mobile_options:{crud:!1,name:e.czr_sektions.getRegisteredModuleProperty("czr_menu_mobile_options","name"),has_mod_opt:!1,ready_on_section_expanded:!0,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:e.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_menu_mobile_options")}})}(wp.customize,jQuery,_),function(i,e,n){var t={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=i.CZRItem.extend(this.CZRItemConstructor||{}),i.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!n.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){i.errorLog("item.setInputVisibilityDeps() : "+e)}}),i.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){this.module;this.czr_Input.each(function(t){switch(t.id){case"show_name_field":n.each(["name_field_label","name_field_required"],function(e){try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){i.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}});break;case"show_subject_field":n.each(["subject_field_label","subject_field_required"],function(e){try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){i.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}});break;case"show_message_field":n.each(["message_field_label","message_field_required"],function(e){try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){i.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":try{i.czr_sektions.scheduleVisibilityOfInputId.call(t,"link-custom-url",function(){return t()})}catch(e){i.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}}})}}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_simple_form_fields_child:{mthds:t,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_simple_form_fields_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_form_fields_child")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var i=this.module;this.czr_Input.each(function(t){switch(t.id){case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_simple_form_design_child:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_simple_form_design_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_form_design_child")}})}(wp.customize,jQuery,_),function(n,e,o){var t={initialize:function(e,t){this.inputConstructor=n.CZRInput.extend({setupSelect:function(){n.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=n.CZRItem.extend(this.CZRItemConstructor||{}),n.CZRDynModule.prototype.initialize.call(this,e,t)},CZRItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!o.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){n.errorLog("item.setInputVisibilityDeps() : "+e)}}),n.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var i=this.module;this.czr_Input.each(function(t){switch(t.id){case"use_custom_bg_color_on_hover":o.each(["bg_color_hover"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){n.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}});break;case"border-type":o.each(["borders"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return"none"!==t()})}catch(e){n.errare(i.id+" => error in setInputVisibilityDeps",e)}});break;case"use_box_shadow":o.each(["push_effect"],function(e){try{n.czr_sektions.scheduleVisibilityOfInputId.call(t,e,function(){return t()})}catch(e){n.errare(t.module.module_type+" => error in setInputVisibilityDeps",e)}})}})}}};n.czrModuleMap=n.czrModuleMap||{},e.extend(n.czrModuleMap,{czr_simple_form_button_child:{mthds:t,crud:!1,name:n.czr_sektions.getRegisteredModuleProperty("czr_simple_form_button_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:n.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_form_button_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_simple_form_fonts_child:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_simple_form_fonts_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_form_fonts_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_simple_form_submission_child:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_simple_form_submission_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_simple_form_submission_child")}})}(wp.customize,jQuery,_),function(o,e,r){var t={initialize:function(e,t){this.inputConstructor=o.CZRInput.extend({setupSelect:function(){o.czr_sektions.setupSelectInput.call(this)}}),this.itemConstructor=o.CZRItem.extend(this.CZRButtonItemConstructor||{}),o.CZRDynModule.prototype.initialize.call(this,e,t)},CZRButtonItemConstructor:{ready:function(){var t=this;t.inputCollection.bind(function(e){if(!r.isEmpty(e))try{t.setInputVisibilityDeps()}catch(e){o.errorLog("item.setInputVisibilityDeps() : "+e)}}),o.CZRItem.prototype.ready.call(t)},setInputVisibilityDeps:function(){var n=this;n.module;n.czr_Input.each(function(i){switch(i.id){case"use_custom_bg_color_on_hover":r.each(["bg_color_hover"],function(e){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){o.errare("Button module => error in setInputVisibilityDeps",e)}});break;case"use_box_shadow":r.each(["push_effect"],function(e){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,e,function(){return i()})}catch(e){o.errare("Button module => error in setInputVisibilityDeps",e)}});break;case"link-to":r.each(["link-pick-url","link-custom-url","link-target"],function(t){try{o.czr_sektions.scheduleVisibilityOfInputId.call(i,t,function(){var e=!1;switch(t){case"link-custom-url":e="url"==i()&&"_custom_"==n.czr_Input("link-pick-url")().id;break;default:e="url"==i()}return e})}catch(e){o.errare("Button module => error in setInputVisibilityDeps",e)}});break;case"link-pick-url":o.czr_sektions.scheduleVisibilityOfInputId.call(i,"link-custom-url",function(){return"_custom_"==i().id&&"url"==n.czr_Input("link-to")()})}})}}};o.czrModuleMap=o.czrModuleMap||{},e.extend(o.czrModuleMap,{czr_font_child:{mthds:t,crud:!1,name:o.czr_sektions.getRegisteredModuleProperty("czr_font_child","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:o.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_font_child")}})}(wp.customize,jQuery,_),function(i,e,t){var n={initialize:function(e,t){this.inputConstructor=i.CZRInput.extend({setupSelect:function(){i.czr_sektions.setupSelectInput.call(this,sektionsLocalizedData.registeredWidgetZones)}}),i.CZRDynModule.prototype.initialize.call(this,e,t)}};i.czrModuleMap=i.czrModuleMap||{},e.extend(i.czrModuleMap,{czr_widget_area_module:{mthds:n,crud:!1,name:i.czr_sektions.getRegisteredModuleProperty("czr_widget_area_module","name"),has_mod_opt:!1,ready_on_section_expanded:!1,ready_on_control_event:"sek-accordion-expanded",defaultItemModel:i.czr_sektions.getDefaultItemModelFromRegisteredModuleData("czr_widget_area_module")}})}(wp.customize,jQuery,_);
assets/czr/sek/js/ccat-sek-preview.js CHANGED
@@ -1,15 +1,23 @@
1
-
2
  var SekPreviewPrototype = SekPreviewPrototype || {};
3
  ( function( api, $, _ ) {
4
  $.extend( SekPreviewPrototype, {
5
  initialize: function() {
6
  var self = this;
 
 
7
  try { this.skope_id = _.findWhere( _wpCustomizeSettings.czr_new_skopes, { skope : 'local' }).skope_id; } catch( _er_ ) {
8
  this.errare('Preview => error when storing the skope_id', _er_ );
9
  return;
10
  }
 
 
11
  this.scheduleHighlightActiveLevel();
 
 
12
  self.setupLoader();
 
 
13
  $( function() {
14
  self.setupSortable();
15
  self.setupResizable();
@@ -18,12 +26,19 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
18
 
19
  self.schedulePanelMsgReactions();
20
  });
 
 
 
 
 
21
  $('body').on('sek-columns-refreshed sek-modules-refreshed', function( evt, params ) {
22
  if ( !_.isUndefined( params ) && !_.isUndefined( params.in_sektion ) && $('[data-sek-id="' + params.in_sektion +'"]').length > 0 ) {
23
  var $updatedSektion = $('[data-sek-id="' + params.in_sektion +'"]');
24
  $updatedSektion.toggleClass( 'sek-has-modules', $updatedSektion.find('[data-sek-level="module"]').length > 0 );
25
  }
26
  });
 
 
27
  self.deactivateLinks();
28
 
29
  $('body').on([
@@ -35,13 +50,36 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
35
  ].join(' '), function( evt ) {
36
  self.deactivateLinks(evt);
37
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  },
 
 
 
39
  deactivateLinks : function( evt ) {
40
  evt = evt || {};
41
  var _doSafe_ = function() {
42
  if ( "yes" === $(this).data('sek-unlinked') )
43
  return;
 
 
 
 
44
  var isJavascriptProtocol = _.isString( $(this)[0].protocol ) && -1 !== $(this)[0].protocol.indexOf('javascript');
 
45
  if ( ! isJavascriptProtocol && api.isLinkPreviewable( $(this)[0] ) ) {
46
  $(this).addClass('nimble-shift-clickable');
47
  $(this).data('sek-unlinked', "yes").attr('data-nimble-href', $(this).attr('href') ).attr('href', 'javascript:void(0)');
@@ -76,8 +114,14 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
76
  });
77
  });
78
  },
 
 
 
 
 
79
  scheduleHighlightActiveLevel : function() {
80
  var self = this;
 
81
  this.activeLevelUI = new api.Value('');
82
  this.activeUIChangedRecently = new api.Value( false );
83
 
@@ -92,13 +136,25 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
92
  }
93
  self.activeUIChangedRecently( Date.now() );
94
  });
 
 
 
 
 
 
 
95
  _.each( [ 'sek-refresh-stylesheet', 'sek-refresh-level' ], function( msgId ) {
96
  api.preview.bind( msgId, function( params ) {
97
  self.activeUIChangedRecently( Date.now() );
98
  });
99
  });
 
 
 
 
100
  this.activeUIChangedRecently.bind( function( hasChangedRecently ) {
101
  var $newActiveLevel = $('[data-sek-id="' + self.activeLevelUI() +'"]');
 
102
  if ( $('.sek-highlight-active-ui').length ) {
103
  $('.sek-highlight-active-ui').removeClass('sek-highlight-active-ui');
104
  }
@@ -117,38 +173,57 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
117
  var SekPreviewPrototype = SekPreviewPrototype || {};
118
  ( function( api, $, _ ) {
119
  $.extend( SekPreviewPrototype, {
 
120
  setupSortable: function() {
121
  var self = this;
122
  this.sortableDefaultParams = {
 
 
123
  placeholder: "sortable-placeholder",
124
  over: function( event, ui ) {},
125
  cursorAt: { top:0, left: 0 },//@fixes https://github.com/presscustomizr/nimble-builder/issues/114
126
  tolerance: "pointer",//@fixes https://github.com/presscustomizr/nimble-builder/issues/114
127
  };
 
 
 
128
  $('[data-sek-level="location"]').each( function() {
129
  self.makeSektionsSortableInLocation( $(this).data('sek-id') );
130
  });
 
 
131
  $( 'body').on( 'sek-section-added sek-level-refreshed', '[data-sek-level="location"]', function( evt, params ) {
132
  self.makeSektionsSortableInLocation( $(this).data('sek-id') );
133
  });
 
 
 
 
134
  $('[data-sek-level="location"]').each( function() {
135
  $(this).find( '[data-sek-level="section"]' ).each( function() {
136
  self.makeColumnsSortableInSektion( $(this).data('sek-id') );
137
  });
138
  });
 
139
  $('body').on( 'sek-columns-refreshed sek-section-added', '[data-sek-level="section"]', function( evt ) {
140
  self.makeColumnsSortableInSektion( $(this).data('sek-id') );
141
  });
 
142
  $( 'body').on( 'sek-level-refreshed', '[data-sek-level="location"]', function( evt, params ) {
143
  $(this).find( '[data-sek-level="section"]' ).each( function() {
144
  self.makeColumnsSortableInSektion( $(this).data('sek-id') );
145
  });
146
  });
 
 
 
 
147
  $('[data-sek-level="location"]').each( function() {
148
  $(this).find( '[data-sek-level="column"]' ).each( function() {
149
  self.makeModulesSortableInColumn( $(this).data('sek-id') );
150
  });
151
  });
 
152
  $('body').on( 'sek-modules-refreshed', '[data-sek-level="column"]', function() {
153
  self.makeModulesSortableInColumn( $(this).data('sek-id') );
154
  });
@@ -157,6 +232,7 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
157
  self.makeModulesSortableInColumn( $(this).data('sek-id') );
158
  });
159
  });
 
160
  $( 'body').on( 'sek-level-refreshed', '[data-sek-level="location"]', function( evt, params ) {
161
  $(this).find( '[data-sek-level="column"]' ).each( function() {
162
  self.makeModulesSortableInColumn( $(this).data('sek-id') );
@@ -168,6 +244,43 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
168
  });
169
  });
170
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
  return this;
172
  },//setupSortable()
173
 
@@ -181,6 +294,7 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
181
 
182
  defaults = $.extend( true, {}, self.sortableDefaultParams );
183
  $(this).sortable( _.extend( defaults, {
 
184
  handle : '.sek-move-section',
185
  connectWith : '[data-sek-is-global-location="false"]',
186
  placeholder: {
@@ -195,6 +309,8 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
195
  $('body').addClass('sek-moving-section');
196
  $sourceLocation = ui.item.closest('[data-sek-level="location"]');
197
  from_location = $sourceLocation.data('sek-id');
 
 
198
  $sourceLocation.children( '[data-sek-level="section"]' ).each( function() {
199
  startOrder.push( $(this).data('sek-id') );
200
  });
@@ -205,6 +321,8 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
205
  newOrder = [];
206
  $targetLocation = ui.item.closest('[data-sek-level="location"]');
207
  to_location = $targetLocation.data('sek-id');
 
 
208
  $targetLocation.children( '[data-sek-level="section"]' ).each( function() {
209
  newOrder.push( $(this).data('sek-id') );
210
  });
@@ -226,6 +344,19 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
226
  }));
227
  });
228
  },//makeSektionsSortableInLocation
 
 
 
 
 
 
 
 
 
 
 
 
 
229
  makeColumnsSortableInSektion : function( sektionId ) {
230
  var self = this,
231
  defaults = $.extend( true, {}, self.sortableDefaultParams ),
@@ -245,12 +376,17 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
245
  $columnsInTargetSektion = $targetSektion.find('.sek-sektion-inner').first().children( '[data-sek-level="column"]' ),
246
  currentColnumber = $columnsInTargetSektion.length,
247
  currentColCSSSuffix = Math.floor( 100/currentColnumber );
 
 
248
  var nextColNumber;
249
  if ( true === args.forTarget ) {
250
  nextColNumber = 12 < ( currentColnumber + 1 ) ? 12 : currentColnumber + 1;
251
  } else {
252
  nextColNumber = 1 > ( currentColnumber - 1 ) ? 1 : currentColnumber -1;
253
  }
 
 
 
254
  var nextColCSSSuffix = Math.floor( 100/nextColNumber ),
255
  current_columns_css_class = 'sek-col-' + currentColCSSSuffix,
256
  next_columns_css_class = 'sek-col-' + nextColCSSSuffix,
@@ -264,8 +400,13 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
264
  $(this).data( 'sek-is-sender', null ).data('_sortable_columns_css_classes_', null );
265
  });
266
  };
 
 
 
 
267
 
268
  $sortableCandidate.sortable( _.extend( defaults, {
 
269
  handle : '.sek-move-column',
270
  connectWith: ".sek-sektion-inner",
271
  over : function( event, ui ) {
@@ -317,6 +458,9 @@ var SekPreviewPrototype = SekPreviewPrototype || {};
317
  var _isCrossSkope = is_global_from_location !== is_global_to_location,
318
  _isCrossLocation = to_location != from_location,
319
  _isGlobalToGlobal = true === is_global_from_location && true === is_global_to_location;
 
 
 
320
  if ( _isCrossSkope || ( _isGlobalToGlobal && _isCrossLocation ) ) {
321
  api.preview.send( 'sek-notify', {
322
  message : sekPreviewLocalized.i18n["Mo
1
+ //global sekPreviewLocalized
2
  var SekPreviewPrototype = SekPreviewPrototype || {};
3
  ( function( api, $, _ ) {
4
  $.extend( SekPreviewPrototype, {
5
  initialize: function() {
6
  var self = this;
7
+
8
+ // Set the skope_id
9
  try { this.skope_id = _.findWhere( _wpCustomizeSettings.czr_new_skopes, { skope : 'local' }).skope_id; } catch( _er_ ) {
10
  this.errare('Preview => error when storing the skope_id', _er_ );
11
  return;
12
  }
13
+
14
+ // Active UI
15
  this.scheduleHighlightActiveLevel();
16
+
17
+ // The loading icon when a level is refreshed
18
  self.setupLoader();
19
+
20
+ // DOM READY
21
  $( function() {
22
  self.setupSortable();
23
  self.setupResizable();
26
 
27
  self.schedulePanelMsgReactions();
28
  });
29
+
30
+ // Make sure we don't force a minimum height to empty columns when a section has at least one module
31
+ // => allow a better previewing experience and more realistic spacing adjustments
32
+ // The css class .sek-has-modules is also printed server side
33
+ // @see php SEK_Front_Render::render()
34
  $('body').on('sek-columns-refreshed sek-modules-refreshed', function( evt, params ) {
35
  if ( !_.isUndefined( params ) && !_.isUndefined( params.in_sektion ) && $('[data-sek-id="' + params.in_sektion +'"]').length > 0 ) {
36
  var $updatedSektion = $('[data-sek-id="' + params.in_sektion +'"]');
37
  $updatedSektion.toggleClass( 'sek-has-modules', $updatedSektion.find('[data-sek-level="module"]').length > 0 );
38
  }
39
  });
40
+
41
+ // Deactivates the links
42
  self.deactivateLinks();
43
 
44
  $('body').on([
50
  ].join(' '), function( evt ) {
51
  self.deactivateLinks(evt);
52
  });
53
+
54
+
55
+ // Send the contextually active locations
56
+ // 1) on init
57
+ // 2) and when requested by the control panel
58
+ // introduced for the level tree, https://github.com/presscustomizr/nimble-builder/issues/359
59
+ var sendActiveLocations = function() {
60
+ var active_locs = [];
61
+ $('[data-sek-level="location"]').each( function() {
62
+ active_locs.push( $(this).data('sek-id') );
63
+ });
64
+ api.preview.send('sek-active-locations-in-preview', { active_locations : active_locs } );
65
+ };
66
+ api.preview.bind('sek-request-active-locations', sendActiveLocations );
67
+ sendActiveLocations();
68
  },
69
+
70
+ // Fired on initialize()
71
+ // and on user generated events
72
  deactivateLinks : function( evt ) {
73
  evt = evt || {};
74
  var _doSafe_ = function() {
75
  if ( "yes" === $(this).data('sek-unlinked') )
76
  return;
77
+ // Several cases :
78
+ // 1- internal link ( <=> api.isLinkPreviewable(... ) = true ) : we allow navigation with shift + click
79
+ // 2- extenal link => navigation is disabled.
80
+ // 3- server disabled links, with href attribute set to "javascript:void(0)", this case is checked isJavascriptProtocol
81
  var isJavascriptProtocol = _.isString( $(this)[0].protocol ) && -1 !== $(this)[0].protocol.indexOf('javascript');
82
+ // the check on isJavascriptProtocol fixes issue https://github.com/presscustomizr/nimble-builder/issues/255
83
  if ( ! isJavascriptProtocol && api.isLinkPreviewable( $(this)[0] ) ) {
84
  $(this).addClass('nimble-shift-clickable');
85
  $(this).data('sek-unlinked', "yes").attr('data-nimble-href', $(this).attr('href') ).attr('href', 'javascript:void(0)');
114
  });
115
  });
116
  },
117
+
118
+ // Hightlight the currently level in the preview, corresponding to the active ui in the panel
119
+ //
120
+ // When a new ui is generated, the activeLevelUI is set @see ::schedulePanelMsgReactions()
121
+ // When the level options are modidied ( 'sek-refresh-stylesheet', 'sek-refresh-level' ),
122
  scheduleHighlightActiveLevel : function() {
123
  var self = this;
124
+ // Stores the currently edited level
125
  this.activeLevelUI = new api.Value('');
126
  this.activeUIChangedRecently = new api.Value( false );
127
 
136
  }
137
  self.activeUIChangedRecently( Date.now() );
138
  });
139
+
140
+ // apiParams : {
141
+ // action : 'sek-refresh-level',
142
+ // id : params.uiParams.id,
143
+ // level : params.uiParams.level
144
+ // },
145
+ // skope_id : api.czr_skopeBase.getSkopeProperty( 'skope_id' ),
146
  _.each( [ 'sek-refresh-stylesheet', 'sek-refresh-level' ], function( msgId ) {
147
  api.preview.bind( msgId, function( params ) {
148
  self.activeUIChangedRecently( Date.now() );
149
  });
150
  });
151
+
152
+
153
+ // This api.Value() is updated with Date.now() when something just happened and false after 3000 ms of inactivity
154
+ // so we can always react to changes, and refresh the timeOut
155
  this.activeUIChangedRecently.bind( function( hasChangedRecently ) {
156
  var $newActiveLevel = $('[data-sek-id="' + self.activeLevelUI() +'"]');
157
+ // remove the highlight class if it was previously set to another level
158
  if ( $('.sek-highlight-active-ui').length ) {
159
  $('.sek-highlight-active-ui').removeClass('sek-highlight-active-ui');
160
  }
173
  var SekPreviewPrototype = SekPreviewPrototype || {};
174
  ( function( api, $, _ ) {
175
  $.extend( SekPreviewPrototype, {
176
+ // Fired on Dom Ready, in ::initialize()
177
  setupSortable: function() {
178
  var self = this;
179
  this.sortableDefaultParams = {
180
+ //forcePlaceholderSize: true,
181
+ //handle: '.fa-arrows-alt',<= set by level
182
  placeholder: "sortable-placeholder",
183
  over: function( event, ui ) {},
184
  cursorAt: { top:0, left: 0 },//@fixes https://github.com/presscustomizr/nimble-builder/issues/114
185
  tolerance: "pointer",//@fixes https://github.com/presscustomizr/nimble-builder/issues/114
186
  };
187
+
188
+ // SEKTIONS
189
+ // On dom ready
190
  $('[data-sek-level="location"]').each( function() {
191
  self.makeSektionsSortableInLocation( $(this).data('sek-id') );
192
  });
193
+
194
+ // Schedule with delegation
195
  $( 'body').on( 'sek-section-added sek-level-refreshed', '[data-sek-level="location"]', function( evt, params ) {
196
  self.makeSektionsSortableInLocation( $(this).data('sek-id') );
197
  });
198
+
199
+
200
+ // COLUMNS
201
+ // On dom ready
202
  $('[data-sek-level="location"]').each( function() {
203
  $(this).find( '[data-sek-level="section"]' ).each( function() {
204
  self.makeColumnsSortableInSektion( $(this).data('sek-id') );
205
  });
206
  });
207
+ // Schedule with delegation
208
  $('body').on( 'sek-columns-refreshed sek-section-added', '[data-sek-level="section"]', function( evt ) {
209
  self.makeColumnsSortableInSektion( $(this).data('sek-id') );
210
  });
211
+ // this case occurs when moving a section from one location to another for example
212
  $( 'body').on( 'sek-level-refreshed', '[data-sek-level="location"]', function( evt, params ) {
213
  $(this).find( '[data-sek-level="section"]' ).each( function() {
214
  self.makeColumnsSortableInSektion( $(this).data('sek-id') );
215
  });
216
  });
217
+
218
+
219
+ // MODULES
220
+ // On dom ready
221
  $('[data-sek-level="location"]').each( function() {
222
  $(this).find( '[data-sek-level="column"]' ).each( function() {
223
  self.makeModulesSortableInColumn( $(this).data('sek-id') );
224
  });
225
  });
226
+ // Schedule with delegation
227
  $('body').on( 'sek-modules-refreshed', '[data-sek-level="column"]', function() {
228
  self.makeModulesSortableInColumn( $(this).data('sek-id') );
229
  });
232
  self.makeModulesSortableInColumn( $(this).data('sek-id') );
233
  });
234
  });
235
+ // this case occurs when moving a section from one location to another for example
236
  $( 'body').on( 'sek-level-refreshed', '[data-sek-level="location"]', function( evt, params ) {
237
  $(this).find( '[data-sek-level="column"]' ).each( function() {
238
  self.makeModulesSortableInColumn( $(this).data('sek-id') );
244
  });
245
  });
246
 
247
+ // NESTED SEKTIONS
248
+ // $('.sek-column-inner', '[data-sek-level="section"]').children( '[data-sek-level="section"]' ).each( function() {
249
+ // defaults = $.extend( true, {}, self.sortableDefaultParams );
250
+ // $(this).sortable( _.extend( defaults, {
251
+ // handle : '.sek-move-nested-section',
252
+ // connectWith: ".sek-column-inner, [data-sek-level="location"]",
253
+ // start: function( event, ui ) {
254
+ // // store the startOrder
255
+ // $('[data-sek-level="location"]').children( '[data-sek-level="section"]' ).each( function() {
256
+ // startOrder.push( $(this).data('sek-id') );
257
+ // });
258
+ // //console.log('column moved from', from_sektion, ui );
259
+ // },
260
+ // stop : function( event, ui ) {
261
+ // newOrder = [];
262
+ // // Restrict to the direct children
263
+ // $('[data-sek-level="location"]').children( '[data-sek-level="section"]' ).each( function() {
264
+ // newOrder.push( $(this).data('sek-id') );
265
+ // });
266
+
267
+ // // api.preview.send( 'sek-move', {
268
+ // // id : ui.item.data('sek-id'),
269
+ // // level : 'section',
270
+ // // newOrder : newOrder
271
+ // // });
272
+ // }
273
+ // }));
274
+ // });
275
+
276
+
277
+ // <SORTABLE>
278
+ // $('.sek-sektion-inner').each( function() {
279
+ // $(this).sortable({
280
+ // connectWith: ".sek-sektion-inner"
281
+ // }).disableSelection();
282
+ // });
283
+
284
  return this;
285
  },//setupSortable()
286
 
294
 
295
  defaults = $.extend( true, {}, self.sortableDefaultParams );
296
  $(this).sortable( _.extend( defaults, {
297
+ //handle : '.sek-move-section, .sek-section-dyn-ui > .sek-dyn-ui-location-type',//@fixes https://github.com/presscustomizr/nimble-builder/issues/153
298
  handle : '.sek-move-section',
299
  connectWith : '[data-sek-is-global-location="false"]',
300
  placeholder: {
309
  $('body').addClass('sek-moving-section');
310
  $sourceLocation = ui.item.closest('[data-sek-level="location"]');
311
  from_location = $sourceLocation.data('sek-id');
312
+
313
+ // store the startOrder
314
  $sourceLocation.children( '[data-sek-level="section"]' ).each( function() {
315
  startOrder.push( $(this).data('sek-id') );
316
  });
321
  newOrder = [];
322
  $targetLocation = ui.item.closest('[data-sek-level="location"]');
323
  to_location = $targetLocation.data('sek-id');
324
+
325
+ // Restrict to the direct children
326
  $targetLocation.children( '[data-sek-level="section"]' ).each( function() {
327
  newOrder.push( $(this).data('sek-id') );
328
  });
344
  }));
345
  });
346
  },//makeSektionsSortableInLocation
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+ // Instantiate sortable for a given column Id
355
+ // Columns are a little more complex because we want to emulate the future layouts when moving a column from section to section
356
+ // for that, we need to compute the number of columns and play with css classes.
357
+ // During this process, we use two $.data to store informations :
358
+ // 'sek-is-sender' => tells us if this is the sektion from which we started to drag a column
359
+ // '_sortable_columns_css_classes_' => stores the current and future css classes
360
  makeColumnsSortableInSektion : function( sektionId ) {
361
  var self = this,
362
  defaults = $.extend( true, {}, self.sortableDefaultParams ),
376
  $columnsInTargetSektion = $targetSektion.find('.sek-sektion-inner').first().children( '[data-sek-level="column"]' ),
377
  currentColnumber = $columnsInTargetSektion.length,
378
  currentColCSSSuffix = Math.floor( 100/currentColnumber );
379
+
380
+ // the future columns number is different for the source and target sektions.
381
  var nextColNumber;
382
  if ( true === args.forTarget ) {
383
  nextColNumber = 12 < ( currentColnumber + 1 ) ? 12 : currentColnumber + 1;
384
  } else {
385
  nextColNumber = 1 > ( currentColnumber - 1 ) ? 1 : currentColnumber -1;
386
  }
387
+
388
+ // this css suffix is consistent with the one written server side
389
+ // @see SEK_Front_Render::render() case 'column'
390
  var nextColCSSSuffix = Math.floor( 100/nextColNumber ),
391
  current_columns_css_class = 'sek-col-' + currentColCSSSuffix,
392
  next_columns_css_class = 'sek-col-' + nextColCSSSuffix,
400
  $(this).data( 'sek-is-sender', null ).data('_sortable_columns_css_classes_', null );
401
  });
402
  };
403
+ // if ( $sortableCandidate.children('[data-sek-level="column"]').length > 11 ) {
404
+ // self.errare('12 COLUMNS');
405
+ // return;
406
+ // }
407
 
408
  $sortableCandidate.sortable( _.extend( defaults, {
409
+ //handle : '.sek-move-column, .sek-column-dyn-ui > .sek-dyn-ui-location-type',//@fixes https://github.com/presscustomizr/nimble-builder/issues/153
410
  handle : '.sek-move-column',
411
  connectWith: ".sek-sektion-inner",
412
  over : function( event, ui ) {
458
  var _isCrossSkope = is_global_from_location !== is_global_to_location,
459
  _isCrossLocation = to_location != from_location,
460
  _isGlobalToGlobal = true === is_global_from_location && true === is_global_to_location;
461
+
462
+ // Not possible to drag from a local location to a global
463
+ // Not possible to drag from a global header to a global footer
464
  if ( _isCrossSkope || ( _isGlobalToGlobal && _isCrossLocation ) ) {
465
  api.preview.send( 'sek-notify', {
466
  message : sekPreviewLocalized.i18n["Mo