PluginProbe ʕ •ᴥ•ʔ
Secure Custom Fields / 6.4.1-beta5
Secure Custom Fields v6.4.1-beta5
6.9.5 6.9.4 6.9.3 6.9.2 6.9.1 6.9.0 6.8.9 6.8.7 6.8.8 6.8.6 6.8.4 6.8.5 trunk 6.4.0-beta1 6.4.0-beta2 6.4.1 6.4.1-beta3 6.4.1-beta4 6.4.1-beta5 6.4.1-beta6 6.4.1-beta7 6.4.2 6.5.0 6.5.1 6.5.2 6.5.3 6.5.4 6.5.5 6.5.6 6.5.7 6.6.0 6.7.0 6.7.1 6.8.0 6.8.1 6.8.2 6.8.3
secure-custom-fields / assets / build / js / pro / acf-pro-field-group.js
secure-custom-fields / assets / build / js / pro Last commit date
acf-pro-blocks.js 1 year ago acf-pro-blocks.js.map 1 year ago acf-pro-blocks.min.js 1 year ago acf-pro-field-group.js 1 year ago acf-pro-field-group.js.map 1 year ago acf-pro-field-group.min.js 1 year ago acf-pro-input.js 1 year ago acf-pro-input.js.map 1 year ago acf-pro-input.min.js 1 year ago acf-pro-ui-options-page.js 1 year ago acf-pro-ui-options-page.js.map 1 year ago acf-pro-ui-options-page.min.js 1 year ago index.php 1 year ago
acf-pro-field-group.js
679 lines
1 /******/ (() => { // webpackBootstrap
2 /******/ var __webpack_modules__ = ({
3
4 /***/ "./assets/src/js/pro/_acf-setting-clone.js":
5 /*!*************************************************!*\
6 !*** ./assets/src/js/pro/_acf-setting-clone.js ***!
7 \*************************************************/
8 /***/ (() => {
9
10 (function ($) {
11 /**
12 * CloneDisplayFieldSetting
13 *
14 * Extra logic for this field setting
15 *
16 * @date 18/4/18
17 * @since ACF 5.6.9
18 *
19 * @param void
20 * @return void
21 */
22
23 var CloneDisplayFieldSetting = acf.FieldSetting.extend({
24 type: 'clone',
25 name: 'display',
26 render: function () {
27 // vars
28 var display = this.field.val();
29
30 // set data attribute used by CSS to hide/show
31 this.$fieldObject.attr('data-display', display);
32 }
33 });
34 acf.registerFieldSetting(CloneDisplayFieldSetting);
35
36 /**
37 * ClonePrefixLabelFieldSetting
38 *
39 * Extra logic for this field setting
40 *
41 * @date 18/4/18
42 * @since ACF 5.6.9
43 *
44 * @param void
45 * @return void
46 */
47
48 var ClonePrefixLabelFieldSetting = acf.FieldSetting.extend({
49 type: 'clone',
50 name: 'prefix_label',
51 render: function () {
52 // vars
53 var prefix = '';
54
55 // if checked
56 if (this.field.val()) {
57 prefix = this.fieldObject.prop('label') + ' ';
58 }
59
60 // update HTML
61 this.$('code').html(prefix + '%field_label%');
62 }
63 });
64 acf.registerFieldSetting(ClonePrefixLabelFieldSetting);
65
66 /**
67 * ClonePrefixNameFieldSetting
68 *
69 * Extra logic for this field setting
70 *
71 * @date 18/4/18
72 * @since ACF 5.6.9
73 *
74 * @param void
75 * @return void
76 */
77
78 var ClonePrefixNameFieldSetting = acf.FieldSetting.extend({
79 type: 'clone',
80 name: 'prefix_name',
81 render: function () {
82 // vars
83 var prefix = '';
84
85 // if checked
86 if (this.field.val()) {
87 prefix = this.fieldObject.prop('name') + '_';
88 }
89
90 // update HTML
91 this.$('code').html(prefix + '%field_name%');
92 }
93 });
94 acf.registerFieldSetting(ClonePrefixNameFieldSetting);
95
96 /**
97 * cloneFieldSelectHelper
98 *
99 * Customizes the clone field setting Select2 isntance
100 *
101 * @date 18/4/18
102 * @since ACF 5.6.9
103 *
104 * @param void
105 * @return void
106 */
107
108 var cloneFieldSelectHelper = new acf.Model({
109 filters: {
110 select2_args: 'select2Args'
111 },
112 select2Args: function (options, $select, data, $el, instance) {
113 // check
114 if (data.ajaxAction == 'acf/fields/clone/query') {
115 // remain open on select
116 options.closeOnSelect = false;
117
118 // customize ajaxData function
119 instance.data.ajaxData = this.ajaxData;
120 }
121
122 // return
123 return options;
124 },
125 ajaxData: function (data) {
126 // find current fields
127 data.fields = {};
128
129 // loop
130 acf.getFieldObjects().map(function (fieldObject) {
131 // append
132 data.fields[fieldObject.prop('key')] = {
133 key: fieldObject.prop('key'),
134 type: fieldObject.prop('type'),
135 label: fieldObject.prop('label'),
136 ancestors: fieldObject.getParents().length
137 };
138 });
139
140 // append title
141 data.title = $('#title').val();
142
143 // return
144 return data;
145 }
146 });
147 })(jQuery);
148
149 /***/ }),
150
151 /***/ "./assets/src/js/pro/_acf-setting-flexible-content.js":
152 /*!************************************************************!*\
153 !*** ./assets/src/js/pro/_acf-setting-flexible-content.js ***!
154 \************************************************************/
155 /***/ (() => {
156
157 (function ($) {
158 /**
159 * CloneDisplayFieldSetting
160 *
161 * Extra logic for this field setting
162 *
163 * @date 18/4/18
164 * @since ACF 5.6.9
165 *
166 * @param void
167 * @return void
168 */
169
170 var FlexibleContentLayoutFieldSetting = acf.FieldSetting.extend({
171 type: 'flexible_content',
172 name: 'fc_layout',
173 events: {
174 'blur .layout-label': 'onChangeLabel',
175 'blur .layout-name': 'onChangeName',
176 'click .add-layout': 'onClickAdd',
177 'click .acf-field-settings-fc_head': 'onClickEdit',
178 'click .acf-field-setting-fc-duplicate': 'onClickDuplicate',
179 'click .acf-field-setting-fc-delete': 'onClickDelete',
180 'changed:layoutLabel': 'updateLayoutTitles',
181 'changed:layoutName': 'updateLayoutTitles'
182 },
183 $input: function (name) {
184 return $('#' + this.getInputId() + '-' + name);
185 },
186 $list: function () {
187 return this.$('.acf-field-list:first');
188 },
189 getInputId: function () {
190 return this.fieldObject.getInputId() + '-layouts-' + this.field.get('id');
191 },
192 // get all sub fields
193 getFields: function () {
194 return acf.getFieldObjects({
195 parent: this.$el
196 });
197 },
198 // get immediate children
199 getChildren: function () {
200 return acf.getFieldObjects({
201 list: this.$list()
202 });
203 },
204 initialize: function () {
205 // add sortable
206 var $tbody = this.$el.parent();
207 $tbody.css('position', 'relative');
208 if (!$tbody.hasClass('ui-sortable')) {
209 $tbody.sortable({
210 items: '> .acf-field-setting-fc_layout',
211 handle: '.acf-fc_draggable',
212 forceHelperSize: true,
213 forcePlaceholderSize: true,
214 scroll: true,
215 stop: this.proxy(function (event, ui) {
216 this.fieldObject.save();
217 })
218 });
219 }
220
221 // add meta to sub fields
222 this.updateFieldLayouts();
223 this.updateLayoutTitles();
224 },
225 updateFieldLayouts: function () {
226 this.getChildren().map(this.updateFieldLayout, this);
227 },
228 updateFieldLayout: function (field) {
229 field.prop('parent_layout', this.get('id'));
230 },
231 updateLayoutTitles: function () {
232 const label = this.get('layoutLabel');
233 const name = this.get('layoutName');
234 const $layoutHeaderLabelText = this.$el.find('> .acf-label .acf-fc-layout-label');
235 if (label) {
236 $layoutHeaderLabelText.text(acf.decode(label));
237 }
238 const $layoutHeaderNameText = this.$el.find('> .acf-label .acf-fc-layout-name span');
239 if (name) {
240 $layoutHeaderNameText.text(name);
241 $layoutHeaderNameText.parent().css('display', '');
242 } else {
243 $layoutHeaderNameText.parent().css('display', 'none');
244 }
245 },
246 onClickEdit: function (e) {
247 const $target = $(e.target);
248 if ($target.hasClass('acf-btn') || $target.hasClass('copyable') || $target.parent().hasClass('acf-btn') || $target.parent().hasClass('copyable')) {
249 return;
250 }
251 this.isOpen() ? this.close() : this.open();
252 },
253 isOpen: function (e) {
254 const $settings = this.$el.children('.acf-field-layout-settings');
255 return $settings.hasClass('open');
256 },
257 open: function (element, isAddingLayout) {
258 const $header = element ? element.children('.acf-field-settings-fc_head') : this.$el.children('.acf-field-settings-fc_head');
259 const $settings = element ? element.children('.acf-field-layout-settings') : this.$el.children('.acf-field-layout-settings');
260 const toggle = element ? element.find('.toggle-indicator').first() : this.$el.find('.toggle-indicator').first();
261
262 // action (show)
263 acf.doAction('show', $settings);
264
265 // open
266 if (isAddingLayout) {
267 $settings.slideDown({
268 complete: function () {
269 $settings.find('.layout-label').trigger('focus');
270 }
271 });
272 } else {
273 $settings.slideDown();
274 }
275 toggle.addClass('open');
276 if (toggle.hasClass('closed')) {
277 toggle.removeClass('closed');
278 }
279 $settings.addClass('open');
280 $header.addClass('open');
281 },
282 close: function () {
283 const $header = this.$el.children('.acf-field-settings-fc_head');
284 const $settings = this.$el.children('.acf-field-layout-settings');
285 const toggle = this.$el.find('.toggle-indicator').first();
286
287 // close
288 $settings.slideUp();
289 $settings.removeClass('open');
290 toggle.removeClass('open');
291 $header.removeClass('open');
292 if (!toggle.hasClass('closed')) {
293 toggle.addClass('closed');
294 }
295
296 // action (hide)
297 acf.doAction('hide', $settings);
298 },
299 onChangeLabel: function (e, $el) {
300 let label = $el.val();
301 const safeLabel = acf.encode(label);
302 this.set('layoutLabel', safeLabel);
303 this.$el.attr('data-layout-label', safeLabel);
304 let $name = this.$input('name');
305
306 // render name
307 if ($name.val() == '') {
308 acf.val($name, acf.strSanitize(label));
309 this.$el.find('.layout-name').trigger('blur');
310 }
311 },
312 onChangeName: function (e, $el) {
313 const sanitizedName = acf.strSanitize($el.val(), false);
314 $el.val(sanitizedName);
315 this.set('layoutName', sanitizedName);
316 this.$el.attr('data-layout-name', sanitizedName);
317 },
318 onClickAdd: function (e, $el) {
319 e.preventDefault();
320 var prevKey = this.get('id');
321 var newKey = acf.uniqid('layout_');
322
323 // duplicate
324 $layout = acf.duplicate({
325 $el: this.$el,
326 search: prevKey,
327 replace: newKey,
328 after: function ($el, $el2) {
329 var $list = $el2.find('.acf-field-list:first');
330
331 // remove sub fields
332 $list.children('.acf-field-object').remove();
333
334 // show empty
335 $list.addClass('-empty');
336
337 // reset layout meta values
338 $el2.attr('data-layout-label', '');
339 $el2.attr('data-layout-name', '');
340 $el2.find('.acf-fc-meta input').val('');
341 $el2.find('label.acf-fc-layout-label').html(acf.__('Layout'));
342 }
343 });
344
345 // get layout
346 var layout = acf.getFieldSetting($layout);
347
348 // update hidden input
349 layout.$input('key').val(newKey);
350 !this.isOpen() ? this.open(layout.$el, true) : layout.$el.find('.layout-label').trigger('focus');
351
352 // save
353 this.fieldObject.save();
354 },
355 onClickDuplicate: function (e, $el) {
356 e.preventDefault();
357 var prevKey = this.get('id');
358 var newKey = acf.uniqid('layout_');
359
360 // duplicate
361 $layout = acf.duplicate({
362 $el: this.$el,
363 search: prevKey,
364 replace: newKey
365 });
366
367 // get all fields in new layout similar to fieldManager.onDuplicateField().
368 // important to run field.wipe() before making any changes to the "parent_layout" prop
369 // to ensure the correct input is modified.
370 var children = acf.getFieldObjects({
371 parent: $layout
372 });
373 if (children.length) {
374 // loop
375 children.map(function (child) {
376 // wipe field
377 child.wipe();
378
379 // if the child is open, re-fire the open method to ensure it's initialised correctly.
380 if (child.isOpen()) {
381 child.open();
382 }
383
384 // update parent
385 child.updateParent();
386 });
387
388 // action
389 acf.doAction('duplicate_field_objects', children, this.fieldObject, this.fieldObject);
390 }
391
392 // get layout
393 var layout = acf.getFieldSetting($layout);
394
395 // get current label/names so we can prepare to append 'copy'
396 var label = layout.get('layoutLabel');
397 var name = layout.get('layoutName');
398 var end = name.split('_').pop();
399 var copy = acf.__('copy');
400
401 // increase suffix "1"
402 if (acf.isNumeric(end)) {
403 var i = end * 1 + 1;
404 label = label.replace(end, i);
405 name = name.replace(end, i);
406
407 // increase suffix "(copy1)"
408 } else if (end.indexOf(copy) === 0) {
409 var i = end.replace(copy, '') * 1;
410 i = i ? i + 1 : 2;
411
412 // replace
413 label = label.replace(end, copy + i);
414 name = name.replace(end, copy + i);
415
416 // add default "(copy)"
417 } else {
418 label += ' (' + copy + ')';
419 name += '_' + copy;
420 }
421
422 // update inputs and data attributes which will trigger header label updates too.
423 layout.$input('label').val(label);
424 layout.set('layoutLabel', label);
425 layout.$el.attr('data-layout-label', label);
426 layout.$input('name').val(name);
427 layout.set('layoutName', name);
428 layout.$el.attr('data-layout-name', name);
429
430 // update hidden input
431 layout.$input('key').val(newKey);
432 !this.isOpen() ? this.open(layout.$el, true) : layout.$el.find('.layout-label').trigger('focus');
433 // save
434 this.fieldObject.save();
435 },
436 onClickDelete: function (e, $el) {
437 e.preventDefault();
438 // Bypass confirmation when holding down "shift" key.
439 if (e.shiftKey) {
440 return this.delete();
441 }
442
443 // add class
444 this.$el.addClass('-hover');
445
446 // add tooltip
447 var tooltip = acf.newTooltip({
448 confirmRemove: true,
449 target: $el,
450 context: this,
451 confirm: function () {
452 this.delete();
453 },
454 cancel: function () {
455 this.$el.removeClass('-hover');
456 }
457 });
458 },
459 delete: function () {
460 var $siblings = this.$el.siblings('.acf-field-setting-fc_layout');
461
462 // validate
463 if (!$siblings.length) {
464 alert(acf.__('Flexible Content requires at least 1 layout'));
465 return false;
466 }
467
468 // delete sub fields
469 this.getFields().map(function (child) {
470 child.delete({
471 animate: false
472 });
473 });
474
475 // remove tr
476 acf.remove(this.$el);
477
478 // save
479 this.fieldObject.save();
480 }
481 });
482 acf.registerFieldSetting(FlexibleContentLayoutFieldSetting);
483
484 /**
485 * flexibleContentHelper
486 *
487 * description
488 *
489 * @date 19/4/18
490 * @since ACF 5.6.9
491 *
492 * @param type $var Description. Default.
493 * @return type Description.
494 */
495
496 var flexibleContentHelper = new acf.Model({
497 actions: {
498 sortstop_field_object: 'updateParentLayout',
499 change_field_object_parent: 'updateParentLayout'
500 },
501 updateParentLayout: function (fieldObject) {
502 var parent = fieldObject.getParent();
503
504 // delete meta
505 if (!parent || parent.prop('type') !== 'flexible_content') {
506 fieldObject.prop('parent_layout', null);
507 return;
508 }
509
510 // get layout
511 var $layout = fieldObject.$el.closest('.acf-field-setting-fc_layout');
512 var layout = acf.getFieldSetting($layout);
513
514 // check if previous prop exists
515 // - if not, set prop to allow following code to trigger 'change' and save the field
516 if (!fieldObject.has('parent_layout')) {
517 fieldObject.prop('parent_layout', 0);
518 }
519
520 // update meta
521 fieldObject.prop('parent_layout', layout.get('id'));
522 }
523 });
524 })(jQuery);
525
526 /***/ }),
527
528 /***/ "./assets/src/js/pro/_acf-setting-repeater.js":
529 /*!****************************************************!*\
530 !*** ./assets/src/js/pro/_acf-setting-repeater.js ***!
531 \****************************************************/
532 /***/ (() => {
533
534 (function ($) {
535 /*
536 * Repeater
537 *
538 * This field type requires some extra logic for its settings
539 *
540 * @type function
541 * @date 24/10/13
542 * @since ACF 5.0.0
543 *
544 * @param n/a
545 * @return n/a
546 */
547
548 var RepeaterCollapsedFieldSetting = acf.FieldSetting.extend({
549 type: 'repeater',
550 name: 'collapsed',
551 events: {
552 'focus select': 'onFocus'
553 },
554 onFocus: function (e, $el) {
555 // vars
556 var $select = $el;
557
558 // collapsed
559 var choices = [];
560
561 // keep 'null' choice
562 choices.push({
563 label: $select.find('option[value=""]').text(),
564 value: ''
565 });
566
567 // find sub fields
568 var $list = this.fieldObject.$('.acf-field-list:first');
569 var fields = acf.getFieldObjects({
570 list: $list
571 });
572
573 // loop
574 fields.map(function (field) {
575 choices.push({
576 label: field.prop('label'),
577 value: field.prop('key')
578 });
579 });
580
581 // render
582 acf.renderSelect($select, choices);
583 }
584 });
585 acf.registerFieldSetting(RepeaterCollapsedFieldSetting);
586 })(jQuery);
587
588 /***/ })
589
590 /******/ });
591 /************************************************************************/
592 /******/ // The module cache
593 /******/ var __webpack_module_cache__ = {};
594 /******/
595 /******/ // The require function
596 /******/ function __webpack_require__(moduleId) {
597 /******/ // Check if module is in cache
598 /******/ var cachedModule = __webpack_module_cache__[moduleId];
599 /******/ if (cachedModule !== undefined) {
600 /******/ return cachedModule.exports;
601 /******/ }
602 /******/ // Create a new module (and put it into the cache)
603 /******/ var module = __webpack_module_cache__[moduleId] = {
604 /******/ // no module.id needed
605 /******/ // no module.loaded needed
606 /******/ exports: {}
607 /******/ };
608 /******/
609 /******/ // Execute the module function
610 /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
611 /******/
612 /******/ // Return the exports of the module
613 /******/ return module.exports;
614 /******/ }
615 /******/
616 /************************************************************************/
617 /******/ /* webpack/runtime/compat get default export */
618 /******/ (() => {
619 /******/ // getDefaultExport function for compatibility with non-harmony modules
620 /******/ __webpack_require__.n = (module) => {
621 /******/ var getter = module && module.__esModule ?
622 /******/ () => (module['default']) :
623 /******/ () => (module);
624 /******/ __webpack_require__.d(getter, { a: getter });
625 /******/ return getter;
626 /******/ };
627 /******/ })();
628 /******/
629 /******/ /* webpack/runtime/define property getters */
630 /******/ (() => {
631 /******/ // define getter functions for harmony exports
632 /******/ __webpack_require__.d = (exports, definition) => {
633 /******/ for(var key in definition) {
634 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
635 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
636 /******/ }
637 /******/ }
638 /******/ };
639 /******/ })();
640 /******/
641 /******/ /* webpack/runtime/hasOwnProperty shorthand */
642 /******/ (() => {
643 /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
644 /******/ })();
645 /******/
646 /******/ /* webpack/runtime/make namespace object */
647 /******/ (() => {
648 /******/ // define __esModule on exports
649 /******/ __webpack_require__.r = (exports) => {
650 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
651 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
652 /******/ }
653 /******/ Object.defineProperty(exports, '__esModule', { value: true });
654 /******/ };
655 /******/ })();
656 /******/
657 /************************************************************************/
658 var __webpack_exports__ = {};
659 // This entry need to be wrapped in an IIFE because it need to be in strict mode.
660 (() => {
661 "use strict";
662 /*!**************************************************!*\
663 !*** ./assets/src/js/pro/acf-pro-field-group.js ***!
664 \**************************************************/
665 __webpack_require__.r(__webpack_exports__);
666 /* harmony import */ var _acf_setting_repeater_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_acf-setting-repeater.js */ "./assets/src/js/pro/_acf-setting-repeater.js");
667 /* harmony import */ var _acf_setting_repeater_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_acf_setting_repeater_js__WEBPACK_IMPORTED_MODULE_0__);
668 /* harmony import */ var _acf_setting_flexible_content_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_acf-setting-flexible-content.js */ "./assets/src/js/pro/_acf-setting-flexible-content.js");
669 /* harmony import */ var _acf_setting_flexible_content_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_acf_setting_flexible_content_js__WEBPACK_IMPORTED_MODULE_1__);
670 /* harmony import */ var _acf_setting_clone_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_acf-setting-clone.js */ "./assets/src/js/pro/_acf-setting-clone.js");
671 /* harmony import */ var _acf_setting_clone_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_acf_setting_clone_js__WEBPACK_IMPORTED_MODULE_2__);
672
673
674
675 })();
676
677 /******/ })()
678 ;
679 //# sourceMappingURL=acf-pro-field-group.js.map