Advanced Custom Fields - Version 5.8.3

Version Description

Release Date - 7 August 2019

  • Tweak - Changed Options Page location rules to show "page_title" instead of "menu_title".
  • Fix - Fixed bug causing Textarea field to incorrectly validate maxlength.
  • Fix - Fixed bug allowing Range field values outside of the min and max settings.
  • Fix - Fixed bug in block RegExp causing some blocks to miss the "acf/pre_save_block" filter.
  • Dev - Added $block_type parameter to block settings "enqueue_assets" callback.
  • i18n - Added French Canadian language thanks to Brenger Zyla.
  • i18n - Updated French language thanks to Brenger Zyla.
Download this release

Release Info

Developer elliotcondon
Plugin Icon 128x128 Advanced Custom Fields
Version 5.8.3
Comparing to
See all releases

Code changes from version 5.8.2 to 5.8.3

Files changed (92) hide show
  1. acf.php +11 -10
  2. assets/build/css/_dark.scss +437 -0
  3. assets/build/css/_field-group.scss +600 -0
  4. assets/build/css/_fields.scss +2778 -0
  5. assets/build/css/_forms.scss +306 -0
  6. assets/build/css/_global.scss +1812 -0
  7. assets/build/css/_gutenberg.scss +123 -0
  8. assets/build/css/_input.scss +61 -0
  9. assets/build/css/_media.scss +505 -0
  10. assets/build/css/_mixins.scss +39 -0
  11. assets/build/css/_postbox.scss +50 -0
  12. assets/build/css/_variables.scss +24 -0
  13. assets/build/css/acf-dark.scss +1 -0
  14. assets/build/css/acf-field-group.scss +3 -0
  15. assets/build/css/acf-global.scss +3 -0
  16. assets/build/css/acf-input.scss +7 -0
  17. assets/build/images/acf-logo.psd +0 -0
  18. assets/build/js/_acf-compatibility.js +761 -0
  19. assets/build/js/_acf-condition-types.js +447 -0
  20. assets/build/js/_acf-condition.js +249 -0
  21. assets/build/js/_acf-conditions.js +306 -0
  22. assets/build/js/_acf-field-accordion.js +232 -0
  23. assets/build/js/_acf-field-button-group.js +45 -0
  24. assets/build/js/_acf-field-checkbox.js +97 -0
  25. assets/build/js/_acf-field-color-picker.js +64 -0
  26. assets/build/js/_acf-field-date-picker.js +157 -0
  27. assets/build/js/_acf-field-date-time-picker.js +99 -0
  28. assets/build/js/_acf-field-file.js +120 -0
  29. assets/build/js/_acf-field-google-map.js +553 -0
  30. assets/build/js/_acf-field-image.js +198 -0
  31. assets/build/js/_acf-field-link.js +191 -0
  32. assets/build/js/_acf-field-oembed.js +163 -0
  33. assets/build/js/_acf-field-page-link.js +9 -0
  34. assets/build/js/_acf-field-post-object.js +9 -0
  35. assets/build/js/_acf-field-radio.js +68 -0
  36. assets/build/js/_acf-field-range.js +42 -0
  37. assets/build/js/_acf-field-relationship.js +380 -0
  38. assets/build/js/_acf-field-select.js +57 -0
  39. assets/build/js/_acf-field-tab.js +505 -0
  40. assets/build/js/_acf-field-taxonomy.js +321 -0
  41. assets/build/js/_acf-field-time-picker.js +77 -0
  42. assets/build/js/_acf-field-true-false.js +95 -0
  43. assets/build/js/_acf-field-url.js +64 -0
  44. assets/build/js/_acf-field-user.js +9 -0
  45. assets/build/js/_acf-field-wysiwyg.js +102 -0
  46. assets/build/js/_acf-field.js +524 -0
  47. assets/build/js/_acf-fields.js +372 -0
  48. assets/build/js/_acf-helpers.js +361 -0
  49. assets/build/js/_acf-hooks.js +252 -0
  50. assets/build/js/_acf-media.js +832 -0
  51. assets/build/js/_acf-model.js +908 -0
  52. assets/build/js/_acf-notice.js +146 -0
  53. assets/build/js/_acf-panel.js +34 -0
  54. assets/build/js/_acf-popup.js +121 -0
  55. assets/build/js/_acf-postbox.js +212 -0
  56. assets/build/js/_acf-screen.js +593 -0
  57. assets/build/js/_acf-select2.js +793 -0
  58. assets/build/js/_acf-tinymce.js +398 -0
  59. assets/build/js/_acf-tooltip.js +324 -0
  60. assets/build/js/_acf-unload.js +62 -0
  61. assets/build/js/_acf-validation.js +1006 -0
  62. assets/build/js/_acf.js +2188 -0
  63. assets/build/js/_field-group-compatibility.js +281 -0
  64. assets/build/js/_field-group-conditions.js +403 -0
  65. assets/build/js/_field-group-field.js +808 -0
  66. assets/build/js/_field-group-fields.js +468 -0
  67. assets/build/js/_field-group-locations.js +104 -0
  68. assets/build/js/_field-group-settings.js +248 -0
  69. assets/build/js/_field-group.js +182 -0
  70. assets/build/js/acf-field-group.js +7 -0
  71. assets/build/js/acf-field-group.min.js +7 -0
  72. assets/build/js/acf-input.js +45 -0
  73. assets/build/js/acf-input.min.js +45 -0
  74. assets/js/acf-input.js +5 -5
  75. assets/js/acf-input.min.js +4 -4
  76. includes/acf-helper-functions.php +79 -2
  77. includes/acf-utility-functions.php +158 -0
  78. includes/api/api-helpers.php +0 -222
  79. includes/compatibility.php +14 -1
  80. includes/deprecated.php +21 -0
  81. includes/fields/class-acf-field-image.php +0 -60
  82. includes/fields/class-acf-field-post_object.php +1 -1
  83. includes/fields/class-acf-field-range.php +1 -1
  84. includes/fields/class-acf-field-textarea.php +4 -2
  85. includes/l10n.php +4 -9
  86. lang/acf-fr_CA.mo +0 -0
  87. lang/acf-fr_CA.po +3571 -0
  88. lang/acf-fr_FR.mo +0 -0
  89. lang/acf-fr_FR.po +524 -1112
  90. lang/acf-pl_PL.mo +0 -0
  91. lang/acf-pl_PL.po +7 -6
  92. readme.txt +11 -0
acf.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Advanced Custom Fields
4
  Plugin URI: https://www.advancedcustomfields.com
5
  Description: Customize WordPress with powerful, professional and intuitive fields.
6
- Version: 5.8.2
7
  Author: Elliot Condon
8
  Author URI: https://www.advancedcustomfields.com
9
  Text Domain: acf
@@ -17,7 +17,7 @@ if( ! class_exists('ACF') ) :
17
  class ACF {
18
 
19
  /** @var string The plugin version number */
20
- var $version = '5.8.2';
21
 
22
  /** @var array The plugin settings array */
23
  var $settings = array();
@@ -118,21 +118,20 @@ class ACF {
118
  $this->define( 'ACF_VERSION', $version );
119
  $this->define( 'ACF_PATH', $path );
120
 
 
 
121
 
122
- // api
123
- include_once( ACF_PATH . 'includes/api/api-helpers.php');
124
  acf_include('includes/api/api-template.php');
125
  acf_include('includes/api/api-term.php');
126
 
127
- // Include models.
128
  acf_include('includes/class-acf-data.php');
129
 
130
- // Include core functions.
131
- acf_include('includes/acf-data-functions.php');
132
  acf_include('includes/acf-helper-functions.php');
133
  acf_include('includes/acf-hook-functions.php');
134
-
135
- // Include functions.
136
  acf_include('includes/acf-field-functions.php');
137
  acf_include('includes/acf-field-group-functions.php');
138
  acf_include('includes/acf-form-functions.php');
@@ -202,7 +201,9 @@ class ACF {
202
  acf_include('pro/acf-pro.php');
203
 
204
  // Include tests.
205
- //acf_include('tests/tests.php');
 
 
206
 
207
  // actions
208
  add_action('init', array($this, 'init'), 5);
3
  Plugin Name: Advanced Custom Fields
4
  Plugin URI: https://www.advancedcustomfields.com
5
  Description: Customize WordPress with powerful, professional and intuitive fields.
6
+ Version: 5.8.3
7
  Author: Elliot Condon
8
  Author URI: https://www.advancedcustomfields.com
9
  Text Domain: acf
17
  class ACF {
18
 
19
  /** @var string The plugin version number */
20
+ var $version = '5.8.3';
21
 
22
  /** @var array The plugin settings array */
23
  var $settings = array();
118
  $this->define( 'ACF_VERSION', $version );
119
  $this->define( 'ACF_PATH', $path );
120
 
121
+ // Include utility functions.
122
+ include_once( ACF_PATH . 'includes/acf-utility-functions.php');
123
 
124
+ // Include previous API functions.
125
+ acf_include('includes/api/api-helpers.php');
126
  acf_include('includes/api/api-template.php');
127
  acf_include('includes/api/api-term.php');
128
 
129
+ // Include classes.
130
  acf_include('includes/class-acf-data.php');
131
 
132
+ // Include functions.
 
133
  acf_include('includes/acf-helper-functions.php');
134
  acf_include('includes/acf-hook-functions.php');
 
 
135
  acf_include('includes/acf-field-functions.php');
136
  acf_include('includes/acf-field-group-functions.php');
137
  acf_include('includes/acf-form-functions.php');
201
  acf_include('pro/acf-pro.php');
202
 
203
  // Include tests.
204
+ if( defined('ACF_DEV') && ACF_DEV ) {
205
+ acf_include('tests/tests.php');
206
+ }
207
 
208
  // actions
209
  add_action('init', array($this, 'init'), 5);
assets/build/css/_dark.scss ADDED
@@ -0,0 +1,437 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------------------------------------
2
+ *
3
+ * Dark mode
4
+ *
5
+ * WordPress plugin: https://en-au.wordpress.org/plugins/dark-mode/
6
+ * Github Documentation: https://github.com/danieltj27/Dark-Mode/wiki/Help:-Plugin-Compatibility-Guide
7
+ *
8
+ *--------------------------------------------------------------------------------------------*/
9
+
10
+ // Dark Mode Colours.
11
+ $white: #ffffff;
12
+ $black: #000000;
13
+ $blue: #0073aa;
14
+ $medium-blue: #00a0d2;
15
+ $clear: transparent;
16
+
17
+ $accent-red: #dc3232;
18
+ $accent-orange: #f56e28;
19
+ $accent-yellow: #ffb900;
20
+ $accent-green: #46b450;
21
+ $accent-blue: $blue;
22
+ $accent-purple: #826eb4;
23
+
24
+ $base-grey: #23282d;
25
+ $light-grey: #bbc8d4;
26
+ $heavy-grey: #37444c;
27
+ $dark-grey: #32373c;
28
+ $ultra-grey: #191f25;
29
+ $dark-silver: #50626f;
30
+ $base-blue: #2e74aa;
31
+ $light-blue: #4092d2;
32
+ $dark-blue: #2c5f88;
33
+ $ultra-blue: #1f3f58;
34
+ $bright-blue: #30ceff;
35
+
36
+ $editor-lavender: #c678dd;
37
+ $editor-sunglo: #e06c75;
38
+ $editor-olivine: #98c379;
39
+
40
+ // Custom variables.
41
+ $body_text: #bbc8d4;
42
+ $body_background: #23282d;
43
+ $body_background2: #191f25;
44
+ $postbox_background: #32373c;
45
+ $postbox_border: #191f25;
46
+ $postbox_divider: #23282d;
47
+ $input_background: #50626f;
48
+ $input_text: #fff;
49
+ $input_border: #191f25;
50
+
51
+ // Mixins.
52
+ @mixin dark-text() {
53
+ color: $body_text;
54
+ }
55
+ @mixin dark-heading() {
56
+ color: $body_text;
57
+ }
58
+ @mixin dark-border() {
59
+ border-color: $postbox_border;
60
+ }
61
+ @mixin dark-background() {
62
+ background: $body_background;
63
+ }
64
+ @mixin darker-background() {
65
+ background: darken($body_background, 5%);
66
+ }
67
+ @mixin dark-postbox() {
68
+ background-color: $postbox_background;
69
+ border-color: $postbox_border;
70
+ color: $body_text;
71
+ }
72
+ @mixin dark-postbox-block() {
73
+ background-color: #2d3136;
74
+ border-color: $postbox_divider;
75
+ }
76
+ @mixin dark-divider() {
77
+ border-color: $postbox_divider;
78
+ }
79
+ @mixin dark-input() {
80
+ background-color: $input_background;
81
+ border-color: $input_border;
82
+ color: $input_text;
83
+ }
84
+
85
+
86
+ /*---------------------------------------------------------------------------------------------
87
+ *
88
+ * Global
89
+ *
90
+ *---------------------------------------------------------------------------------------------*/
91
+
92
+ // acf-box
93
+ .acf-box {
94
+ @include dark-postbox();
95
+
96
+ .title,
97
+ .footer {
98
+ @include dark-divider();
99
+ }
100
+
101
+ h2 {
102
+ @include dark-heading();
103
+ }
104
+
105
+ table, tbody, tr {
106
+ background: transparent !important;
107
+ }
108
+ }
109
+
110
+ // thead
111
+ .acf-thead {
112
+ @include dark-heading();
113
+ @include dark-border();
114
+ }
115
+ .acf-tfoot {
116
+ @include dark-postbox-block();
117
+ }
118
+
119
+ // table clear
120
+ .acf-table.-clear,
121
+ .acf-table.-clear tr {
122
+ background: transparent !important;
123
+ }
124
+
125
+ // loading overlay
126
+ .acf-loading-overlay {
127
+ background: rgba(0,0,0,0.5);
128
+ }
129
+
130
+
131
+ /*---------------------------------------------------------------------------------------------
132
+ *
133
+ * Fields
134
+ *
135
+ *---------------------------------------------------------------------------------------------*/
136
+
137
+ // fields
138
+ .acf-fields {
139
+
140
+ // field
141
+ > .acf-field {
142
+ @include dark-divider();
143
+ }
144
+ }
145
+
146
+ // fields (left)
147
+ .acf-fields.-left {
148
+
149
+ > .acf-field {
150
+ &:before {
151
+ background: rgba(0,0,0,0.1);
152
+ @include dark-divider();
153
+ }
154
+ }
155
+ }
156
+
157
+ // fields (border)
158
+ .acf-fields.-border {
159
+ @include dark-postbox();
160
+ }
161
+
162
+ // width
163
+ .acf-field[data-width] + .acf-field[data-width] {
164
+ @include dark-divider();
165
+ }
166
+
167
+ // text
168
+ .acf-input-prepend,
169
+ .acf-input-append {
170
+ @include dark-postbox();
171
+ }
172
+
173
+ // tab
174
+ .acf-tab-wrap {
175
+
176
+ }
177
+
178
+ .acf-fields > .acf-tab-wrap {
179
+ @include dark-postbox();
180
+
181
+ .acf-tab-group {
182
+ @include dark-postbox-block();
183
+
184
+ li {
185
+ a {
186
+ @include dark-postbox-block();
187
+
188
+ &:hover {
189
+ @include dark-postbox-block();
190
+ @include dark-text();
191
+ }
192
+ }
193
+
194
+ &.active a {
195
+ @include dark-postbox();
196
+ }
197
+ }
198
+ }
199
+ }
200
+
201
+ .acf-fields.-sidebar {
202
+ &:before {
203
+ @include dark-postbox-block();
204
+ }
205
+ }
206
+
207
+ .acf-fields.-sidebar.-left {
208
+ &:before {
209
+ @include dark-postbox-block();
210
+ background: $body_background;
211
+ }
212
+ > .acf-tab-wrap.-left {
213
+ .acf-tab-group li a {
214
+ @include dark-postbox-block();
215
+ }
216
+
217
+ .acf-tab-group li.active a {
218
+ @include dark-postbox-block();
219
+ }
220
+ }
221
+ }
222
+
223
+ // file
224
+ .acf-file-uploader {
225
+
226
+ .show-if-value {
227
+ @include dark-postbox();
228
+
229
+ .file-icon {
230
+ @include dark-postbox-block();
231
+ }
232
+ }
233
+ }
234
+
235
+ // acf-oembed
236
+ .acf-oembed {
237
+ @include dark-postbox-block();
238
+
239
+ .title {
240
+ @include dark-input();
241
+ }
242
+ }
243
+
244
+ // gallery
245
+ .acf-gallery {
246
+ @include dark-postbox-block();
247
+
248
+ .acf-gallery-main {
249
+ @include dark-background();
250
+ }
251
+
252
+ .acf-gallery-attachment {
253
+ .margin {
254
+ @include dark-postbox-block();
255
+ }
256
+ }
257
+
258
+ .acf-gallery-side {
259
+ @include dark-postbox-block();
260
+
261
+ .acf-gallery-side-info {
262
+ @include dark-postbox-block();
263
+ }
264
+ }
265
+
266
+ .acf-gallery-toolbar {
267
+ @include dark-postbox-block();
268
+ }
269
+ }
270
+
271
+ // button group
272
+ .acf-button-group {
273
+
274
+ label:not(.selected) {
275
+ @include dark-postbox-block();
276
+ }
277
+ }
278
+
279
+ // switch
280
+ .acf-switch:not(.-on) {
281
+ @include dark-postbox-block();
282
+ .acf-switch-slider {
283
+ @include dark-input();
284
+ }
285
+ }
286
+
287
+ // link
288
+ .acf-link .link-wrap {
289
+ @include dark-postbox-block();
290
+ }
291
+
292
+ // relationship
293
+ .acf-relationship {
294
+ .filters {
295
+ @include dark-postbox();
296
+ }
297
+ .selection {
298
+ @include dark-postbox-block();
299
+ .choices,
300
+ .choices-list,
301
+ .values {
302
+ @include dark-postbox-block();
303
+ }
304
+ }
305
+ }
306
+
307
+ // checkbox
308
+ .acf-taxonomy-field .categorychecklist-holder {
309
+ @include dark-postbox-block();
310
+ }
311
+
312
+ // google map
313
+ .acf-google-map {
314
+ @include dark-postbox-block();
315
+
316
+ .title {
317
+ @include dark-input();
318
+ }
319
+ }
320
+
321
+ // accordion
322
+ .acf-accordion {
323
+ @include dark-postbox();
324
+ }
325
+ .acf-field.acf-accordion .acf-accordion-content > .acf-fields {
326
+ @include dark-border();
327
+ }
328
+
329
+ // flexible content
330
+ .acf-flexible-content {
331
+ .layout {
332
+ @include dark-postbox();
333
+
334
+ .acf-fc-layout-handle {
335
+ @include dark-postbox-block();
336
+
337
+ .acf-fc-layout-order {
338
+ @include dark-postbox();
339
+ }
340
+ }
341
+ }
342
+ }
343
+
344
+ // repeater
345
+ #wpbody .acf-table {
346
+ @include dark-postbox-block();
347
+
348
+ > tbody,
349
+ > thead {
350
+ > tr {
351
+ background: transparent;
352
+
353
+ > td,
354
+ > th {
355
+ @include dark-border();
356
+ }
357
+ }
358
+ }
359
+ }
360
+
361
+ // Select
362
+ .acf-field select {
363
+ optgroup, optgroup:nth-child(2n) {
364
+ background: $input_background;
365
+ }
366
+ }
367
+
368
+ /*---------------------------------------------------------------------------------------------
369
+ *
370
+ * Field Group
371
+ *
372
+ *---------------------------------------------------------------------------------------------*/
373
+
374
+ // fields
375
+ #acf-field-group-fields {
376
+
377
+ // field list
378
+ .acf-field-list-wrap {
379
+ @include dark-postbox();
380
+ }
381
+
382
+ .acf-field-list {
383
+ .no-fields-message {
384
+ @include dark-postbox();
385
+ }
386
+ }
387
+
388
+ // field
389
+ .acf-field-object {
390
+ @include dark-postbox();
391
+ @include dark-divider();
392
+
393
+
394
+ table, tbody, tr, td, th {
395
+ background: transparent;
396
+ @include dark-divider();
397
+ }
398
+
399
+ .acf-field {
400
+ .acf-label {
401
+ @include dark-postbox-block();
402
+ }
403
+ }
404
+
405
+ // sortable
406
+ &.ui-sortable-helper {
407
+ @include dark-border();
408
+ box-shadow: none;
409
+ }
410
+
411
+ &.ui-sortable-placeholder {
412
+ @include dark-postbox-block();
413
+ box-shadow: none;
414
+ }
415
+ }
416
+
417
+ .acf-field-object + .acf-field-object-tab::before,
418
+ .acf-field-object + .acf-field-object-accordion::before {
419
+ @include dark-postbox-block();
420
+ }
421
+ }
422
+
423
+
424
+ /*---------------------------------------------------------------------------------------------
425
+ *
426
+ * Admin: Tools
427
+ *
428
+ *---------------------------------------------------------------------------------------------*/
429
+
430
+ // tools
431
+ .acf-meta-box-wrap {
432
+
433
+ .acf-fields {
434
+ @include dark-input();
435
+ background: transparent;
436
+ }
437
+ }
assets/build/css/_field-group.scss ADDED
@@ -0,0 +1,600 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*---------------------------------------------------------------------------------------------
2
+ *
3
+ * Global
4
+ *
5
+ *---------------------------------------------------------------------------------------------*/
6
+
7
+ #adv-settings .show-field-keys label {
8
+ padding: 0 5px;
9
+ }
10
+
11
+
12
+ #acf-field-group-fields > .inside,
13
+ #acf-field-group-locations > .inside,
14
+ #acf-field-group-options > .inside {
15
+ padding: 0;
16
+ margin: 0;
17
+ }
18
+
19
+ .acf-field {
20
+
21
+ p.description {
22
+ font-style: normal;
23
+ font-size: 12px;
24
+ color: #777777;
25
+ }
26
+
27
+ }
28
+
29
+
30
+ /*---------------------------------------------------------------------------------------------
31
+ *
32
+ * Postbox: Publish
33
+ *
34
+ *---------------------------------------------------------------------------------------------*/
35
+
36
+ #minor-publishing-actions,
37
+ #misc-publishing-actions #visibility {
38
+ display: none;
39
+ }
40
+
41
+ #minor-publishing {
42
+ border-bottom: 0 none;
43
+ }
44
+
45
+ #misc-pub-section {
46
+ border-bottom: 0 none;
47
+ }
48
+
49
+ #misc-publishing-actions .misc-pub-section {
50
+ border-bottom-color: #F5F5F5;
51
+ }
52
+
53
+
54
+ /*---------------------------------------------------------------------------------------------
55
+ *
56
+ * Postbox: Fields
57
+ *
58
+ *---------------------------------------------------------------------------------------------*/
59
+
60
+ #acf-field-group-fields {
61
+ border: 0 none;
62
+ box-shadow: none;
63
+
64
+
65
+ /* metabox */
66
+ > .handlediv,
67
+ > .hndle {
68
+ display: none;
69
+ }
70
+
71
+
72
+ /* links */
73
+ a {
74
+ text-decoration: none;
75
+
76
+ &:active,
77
+ &:focus {
78
+ outline: none;
79
+ box-shadow: none;
80
+ }
81
+ }
82
+
83
+
84
+ /* table header */
85
+ .li-field-order { width: 20%; }
86
+ .li-field-label { width: 30%; }
87
+ .li-field-name { width: 25%; }
88
+ .li-field-type { width: 25%; }
89
+ .li-field-key { display: none; }
90
+
91
+
92
+ /* show keys */
93
+ &.show-field-keys {
94
+
95
+ .li-field-label,
96
+ .li-field-name,
97
+ .li-field-type,
98
+ .li-field-key { width: 20%; }
99
+ .li-field-key { display: block; }
100
+ }
101
+
102
+
103
+ /* fields */
104
+ .acf-field-list-wrap {
105
+ border: #DFDFDF solid 1px;
106
+ }
107
+
108
+ .acf-field-list {
109
+ background: #F9F9F9;
110
+ margin-top: -1px;
111
+
112
+ /* no fields */
113
+ .no-fields-message {
114
+ padding: 15px 15px;
115
+ background: #fff;
116
+ display: none;
117
+ }
118
+
119
+ /* empty */
120
+ &.-empty {
121
+ .no-fields-message {
122
+ display: block;
123
+ }
124
+ }
125
+ }
126
+
127
+ }
128
+
129
+
130
+ /* field object */
131
+ .acf-field-object {
132
+ border-top: #F0F0F0 solid 1px;
133
+ background: #fff;
134
+
135
+ /* sortable */
136
+ &.ui-sortable-helper {
137
+ border-top-color: #fff;
138
+ box-shadow: 0 0 0 1px #DFDFDF, 0 1px 4px rgba(0,0,0,0.1);
139
+ }
140
+
141
+ &.ui-sortable-placeholder {
142
+ box-shadow: 0 -1px 0 0 #DFDFDF;
143
+ visibility: visible !important;
144
+ background: #F9F9F9;
145
+ border-top-color: transparent;
146
+ min-height: 54px;
147
+
148
+ // hide tab field separator
149
+ &:after, &:before {
150
+ visibility: hidden;
151
+ }
152
+ }
153
+
154
+
155
+ /* meta */
156
+ > .meta {
157
+ display: none;
158
+ }
159
+
160
+
161
+ /* handle */
162
+ > .handle {
163
+
164
+ a {
165
+ -webkit-transition: none;
166
+ -moz-transition: none;
167
+ -o-transition: none;
168
+ transition: none;
169
+ }
170
+
171
+ li {
172
+ padding-top: 10px;
173
+ padding-bottom: 10px;
174
+ word-wrap: break-word;
175
+ }
176
+
177
+ .acf-icon {
178
+ margin: 1px 0 0;
179
+ cursor: move;
180
+ background: transparent;
181
+ float: left;
182
+
183
+ height: 28px;
184
+ line-height: 28px;
185
+ width: 28px;
186
+ font-size: 13px;
187
+ color: #444;
188
+ position: relative;
189
+ z-index: 1;
190
+ }
191
+
192
+ strong {
193
+ display: block;
194
+ padding-bottom: 6px;
195
+ font-size: 14px;
196
+ line-height: 14px;
197
+ min-height: 14px;
198
+ }
199
+
200
+ .row-options {
201
+ visibility: hidden;
202
+
203
+ a {
204
+ margin-right: 4px;
205
+ }
206
+
207
+ a.delete-field {
208
+ color: #a00;
209
+
210
+ &:hover { color: #f00; }
211
+ }
212
+ }
213
+
214
+ }
215
+
216
+ /* open */
217
+ &.open {
218
+
219
+ + .acf-field-object {
220
+ border-top-color: #E1E1E1;
221
+ }
222
+
223
+ > .handle {
224
+ background: $acf_blue;
225
+ border: darken($acf_blue, 2%) solid 1px;
226
+ text-shadow: #268FBB 0 1px 0;
227
+ color: #fff;
228
+ position: relative;
229
+ margin: -1px -1px 0 -1px;
230
+
231
+ a {
232
+ color: #fff !important;
233
+
234
+ &:hover {
235
+ text-decoration: underline !important;
236
+ }
237
+ }
238
+
239
+ .acf-icon {
240
+ border-color: #fff;
241
+ color: #fff;
242
+ }
243
+
244
+ .acf-required {
245
+ color: #fff;
246
+ }
247
+ }
248
+ }
249
+
250
+
251
+ /*
252
+ // debug
253
+ &[data-save="meta"] {
254
+ > .handle {
255
+ border-left: #ffb700 solid 5px !important;
256
+ }
257
+ }
258
+
259
+ &[data-save="settings"] {
260
+ > .handle {
261
+ border-left: #0ec563 solid 5px !important;
262
+ }
263
+ }
264
+ */
265
+
266
+
267
+ /* hover */
268
+ &:hover, &.-hover {
269
+
270
+ > .handle {
271
+
272
+ .row-options {
273
+ visibility: visible;
274
+ }
275
+
276
+ }
277
+ }
278
+
279
+
280
+ /* settings */
281
+ > .settings {
282
+ display: none;
283
+ width: 100%;
284
+
285
+ > .acf-table {
286
+ border: none;
287
+ }
288
+ }
289
+
290
+
291
+ /* conditional logic */
292
+ .rule-groups {
293
+ margin-top: 20px;
294
+ }
295
+
296
+ }
297
+
298
+
299
+ /*---------------------------------------------------------------------------------------------
300
+ *
301
+ * Postbox: Locations
302
+ *
303
+ *---------------------------------------------------------------------------------------------*/
304
+
305
+ .rule-groups {
306
+
307
+ h4 {
308
+ margin: 15px 0 5px;
309
+ }
310
+
311
+ .rule-group {
312
+ margin: 0 0 5px;
313
+
314
+ h4 {
315
+ margin: 0 0 3px;
316
+ }
317
+
318
+ td.param {
319
+ width: 35%;
320
+ }
321
+
322
+ td.operator {
323
+ width: 20%;
324
+ }
325
+
326
+ td.add {
327
+ width: 40px;
328
+ }
329
+
330
+ td.remove {
331
+ width: 28px;
332
+ vertical-align: middle;
333
+
334
+ a {
335
+ visibility: hidden;
336
+ }
337
+ }
338
+
339
+ tr:hover td.remove a {
340
+ visibility: visible;
341
+ }
342
+
343
+ /* Don't allow user to delete the first field group */
344
+ &:first-child tr:first-child td.remove a {
345
+ visibility: hidden !important;
346
+ }
347
+
348
+ // empty select
349
+ select:empty {
350
+ background: #f8f8f8;
351
+ }
352
+ }
353
+ }
354
+
355
+
356
+ /*---------------------------------------------------------------------------------------------
357
+ *
358
+ * Options
359
+ *
360
+ *---------------------------------------------------------------------------------------------*/
361
+
362
+ #acf-field-group-options tr[data-name="hide_on_screen"] li {
363
+ float: left;
364
+ width: 33%;
365
+ }
366
+
367
+ @media (max-width: 1100px) {
368
+
369
+ #acf-field-group-options tr[data-name="hide_on_screen"] li {
370
+ width: 50%;
371
+ }
372
+
373
+ }
374
+
375
+
376
+ /*---------------------------------------------------------------------------------------------
377
+ *
378
+ * Conditional Logic
379
+ *
380
+ *---------------------------------------------------------------------------------------------*/
381
+
382
+ table.conditional-logic-rules {
383
+ background: transparent;
384
+ border: 0 none;
385
+ border-radius: 0;
386
+ }
387
+
388
+ table.conditional-logic-rules tbody td {
389
+ background: transparent;
390
+ border: 0 none !important;
391
+ padding: 5px 2px !important;
392
+ }
393
+
394
+
395
+ /*---------------------------------------------------------------------------------------------
396
+ *
397
+ * Field: Tab
398
+ *
399
+ *---------------------------------------------------------------------------------------------*/
400
+
401
+ .acf-field-object-tab {
402
+
403
+ // hide setting
404
+ .acf-field-setting-name,
405
+ .acf-field-setting-instructions,
406
+ .acf-field-setting-required,
407
+ .acf-field-setting-warning,
408
+ .acf-field-setting-wrapper {
409
+ display: none;
410
+ }
411
+
412
+ // hide name
413
+ .li-field-name {
414
+ visibility: hidden;
415
+ }
416
+
417
+ // add spacer
418
+ .acf-field-object + & {
419
+
420
+ &:before {
421
+ display: block;
422
+ content: "";
423
+ height: 5px;
424
+ width: 100%;
425
+ background: #f9f9f9;
426
+ border-bottom: #f0f0f0 solid 1px;
427
+ }
428
+ }
429
+
430
+ p:first-child {
431
+ margin: 0.5em 0;
432
+ }
433
+ }
434
+
435
+
436
+ /*---------------------------------------------------------------------------------------------
437
+ *
438
+ * Field: Accordion
439
+ *
440
+ *---------------------------------------------------------------------------------------------*/
441
+
442
+ .acf-field-object-accordion {
443
+ @extend .acf-field-object-tab;
444
+
445
+ // show settings
446
+ .acf-field-setting-instructions {
447
+ display: table-row;
448
+ }
449
+
450
+ }
451
+
452
+
453
+ /*---------------------------------------------------------------------------------------------
454
+ *
455
+ * Field: Message
456
+ *
457
+ *---------------------------------------------------------------------------------------------*/
458
+
459
+ .acf-field-object-message tr[data-name="name"],
460
+ .acf-field-object-message tr[data-name="instructions"],
461
+ .acf-field-object-message tr[data-name="required"] {
462
+ display: none !important;
463
+ }
464
+
465
+ .acf-field-object-message .li-field-name {
466
+ visibility: hidden;
467
+ }
468
+
469
+ .acf-field-object-message textarea {
470
+ height: 175px !important;
471
+ }
472
+
473
+
474
+ /*---------------------------------------------------------------------------------------------
475
+ *
476
+ * Field: Separator
477
+ *
478
+ *---------------------------------------------------------------------------------------------*/
479
+
480
+ .acf-field-object-separator tr[data-name="name"],
481
+ .acf-field-object-separator tr[data-name="instructions"],
482
+ .acf-field-object-separator tr[data-name="required"] {
483
+ display: none !important;
484
+ }
485
+
486
+
487
+ /*---------------------------------------------------------------------------------------------
488
+ *
489
+ * Field: Date Picker
490
+ *
491
+ *---------------------------------------------------------------------------------------------*/
492
+
493
+ .acf-field-object-date-picker,
494
+ .acf-field-object-time-picker,
495
+ .acf-field-object-date-time-picker {
496
+
497
+ .acf-radio-list {
498
+
499
+ li {
500
+ line-height: 25px;
501
+ }
502
+
503
+ span {
504
+ display: inline-block;
505
+ min-width: 10em;
506
+ }
507
+
508
+ input[type="text"] {
509
+ width: 100px;
510
+ }
511
+ }
512
+
513
+ }
514
+
515
+ .acf-field-object-date-time-picker {
516
+
517
+ .acf-radio-list {
518
+
519
+ span {
520
+ min-width: 15em;
521
+ }
522
+
523
+ input[type="text"] {
524
+ width: 200px;
525
+ }
526
+ }
527
+
528
+ }
529
+
530
+
531
+ /*--------------------------------------------------------------------------------------------
532
+ *
533
+ * Slug
534
+ *
535
+ *--------------------------------------------------------------------------------------------*/
536
+
537
+ #slugdiv {
538
+
539
+ .inside {
540
+ padding: 12px;
541
+ margin: 0;
542
+ }
543
+
544
+ input[type="text"] {
545
+ width: 100%;
546
+ height: 28px;
547
+ font-size: 14px;
548
+ }
549
+ }
550
+
551
+
552
+ /*--------------------------------------------------------------------------------------------
553
+ *
554
+ * RTL
555
+ *
556
+ *--------------------------------------------------------------------------------------------*/
557
+
558
+ html[dir="rtl"] .acf-field-object.open > .handle {
559
+ margin: -1px -1px 0;
560
+ }
561
+
562
+ html[dir="rtl"] .acf-field-object.open > .handle .acf-icon {
563
+ float: right;
564
+ }
565
+
566
+ html[dir="rtl"] .acf-field-object.open > .handle .li-field-order {
567
+ padding-left: 0 !important;
568
+ padding-right: 15px !important;
569
+ }
570
+
571
+
572
+ /*---------------------------------------------------------------------------------------------
573
+ *
574
+ * Device
575
+ *
576
+ *---------------------------------------------------------------------------------------------*/
577
+
578
+ @media only screen and (max-width: 850px) {
579
+
580
+ tr.acf-field,
581
+ td.acf-label,
582
+ td.acf-input {
583
+ display: block !important;
584
+ width: auto !important;
585
+ border: 0 none !important;
586
+ }
587
+
588
+ tr.acf-field {
589
+ border-top: #ededed solid 1px !important;
590
+ margin-bottom: 0 !important;
591
+ }
592
+
593
+ td.acf-label {
594
+ background: transparent !important;
595
+ padding-bottom: 0 !important;
596
+
597
+ }
598
+
599
+ }
600
+
assets/build/css/_fields.scss ADDED
@@ -0,0 +1,2778 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------------------------------------
2
+ *
3
+ * acf-field
4
+ *
5
+ *--------------------------------------------------------------------------------------------*/
6
+
7
+ .acf-field,
8
+ .acf-field .acf-label,
9
+ .acf-field .acf-input {
10
+ -webkit-box-sizing: border-box;
11
+ -moz-box-sizing: border-box;
12
+ box-sizing: border-box;
13
+ position: relative;
14
+ }
15
+
16
+ .acf-field {
17
+ margin: 15px 0;
18
+
19
+ // clear is important as it will avoid any layout issues with floating fields
20
+ // do not delete (you have tried this)
21
+ clear: both;
22
+
23
+ // description
24
+ p.description {
25
+ display: block;
26
+ margin: 0;
27
+ padding: 0;
28
+ }
29
+
30
+ // label
31
+ .acf-label {
32
+ vertical-align: top;
33
+ margin: 0 0 10px;
34
+
35
+ label {
36
+ display: block;
37
+ font-weight: bold;
38
+ margin: 0 0 3px;
39
+ padding: 0;
40
+ }
41
+
42
+ &:empty {
43
+ margin-bottom: 0;
44
+ }
45
+ }
46
+
47
+ // input
48
+ .acf-input {
49
+ vertical-align: top;
50
+
51
+ > p.description {
52
+ margin-top: 5px;
53
+ }
54
+ }
55
+
56
+ // notice
57
+ .acf-notice {
58
+ margin: 0 0 15px;
59
+ background: #edf2ff;
60
+ color: #2183b9;
61
+ border: none;
62
+
63
+ .acf-notice-dismiss {
64
+ background: transparent;
65
+ color: inherit;
66
+
67
+ &:hover {
68
+ background: #fff;
69
+ }
70
+ }
71
+
72
+ // dismiss
73
+ &.-dismiss {
74
+ padding-right: 40px;
75
+ }
76
+
77
+ // error
78
+ &.-error {
79
+ background: #ffe6e6;
80
+ color: #d12626;
81
+ }
82
+
83
+ // success
84
+ &.-success {
85
+ background: #eefbe8;
86
+ color: #32a23b;
87
+ }
88
+
89
+ // warning
90
+ &.-warning {
91
+ background: #fff3e6;
92
+ color: #d16226;
93
+ }
94
+ }
95
+
96
+ // table
97
+ @at-root td#{&}, tr#{&} {
98
+ margin: 0;
99
+ }
100
+ }
101
+
102
+ // width
103
+ .acf-field[data-width] {
104
+ float: left;
105
+ clear: none;
106
+
107
+ // next
108
+ + .acf-field[data-width] {
109
+ border-left: 1px solid #eeeeee;
110
+ }
111
+
112
+ // rtl
113
+ html[dir="rtl"] & {
114
+ float: right;
115
+
116
+ + .acf-field[data-width] {
117
+ border-left: none;
118
+ border-right: 1px solid #eeeeee;
119
+ }
120
+ }
121
+
122
+ // table
123
+ @at-root td#{&}, tr#{&} {
124
+ float: none;
125
+ }
126
+
127
+ // mobile
128
+ /*
129
+ @media screen and (max-width: $sm) {
130
+ float: none;
131
+ width: auto;
132
+ border-left-width: 0;
133
+ border-right-width: 0;
134
+ }
135
+ */
136
+ }
137
+
138
+
139
+ // float helpers
140
+ .acf-field.-c0 {
141
+ clear: both;
142
+ border-left-width: 0 !important;
143
+
144
+ // rtl
145
+ html[dir="rtl"] & {
146
+ border-left-width: 1px !important;
147
+ border-right-width: 0 !important;
148
+ }
149
+ }
150
+
151
+ .acf-field.-r0 {
152
+ border-top-width: 0 !important;
153
+ }
154
+
155
+
156
+ /*--------------------------------------------------------------------------------------------
157
+ *
158
+ * acf-fields
159
+ *
160
+ *--------------------------------------------------------------------------------------------*/
161
+
162
+ .acf-fields {
163
+ position: relative;
164
+
165
+ // clearifx
166
+ @include clearfix();
167
+
168
+ // border
169
+ &.-border {
170
+ border: #dfdfdf solid 1px;
171
+ background: #fff;
172
+ }
173
+
174
+ // field
175
+ > .acf-field {
176
+ position: relative;
177
+ margin: 0;
178
+ padding: $field_padding;
179
+ border-top: #EEEEEE solid 1px;
180
+
181
+ // first
182
+ &:first-child {
183
+ border-top-width: 0;
184
+ }
185
+ }
186
+
187
+ // table
188
+ @at-root td#{&} {
189
+ padding: 0 !important;
190
+ }
191
+ }
192
+
193
+
194
+
195
+ /*--------------------------------------------------------------------------------------------
196
+ *
197
+ * acf-fields (clear)
198
+ *
199
+ *--------------------------------------------------------------------------------------------*/
200
+
201
+ .acf-fields.-clear > .acf-field {
202
+ border: none;
203
+ padding: 0;
204
+ margin: 15px 0;
205
+
206
+ // width
207
+ &[data-width] {
208
+ border: none !important;
209
+ }
210
+
211
+ // label
212
+ > .acf-label {
213
+ padding: 0;
214
+ }
215
+
216
+ // input
217
+ > .acf-input {
218
+ padding: 0;
219
+ }
220
+ }
221
+
222
+
223
+ /*--------------------------------------------------------------------------------------------
224
+ *
225
+ * acf-fields (left)
226
+ *
227
+ *--------------------------------------------------------------------------------------------*/
228
+
229
+ .acf-fields.-left > .acf-field {
230
+ padding: $fy 0;
231
+
232
+ // clearifx
233
+ @include clearfix();
234
+
235
+ // sidebar
236
+ &:before {
237
+ content: "";
238
+ display: block;
239
+ position: absolute;
240
+ z-index: 0;
241
+ background: #F9F9F9;
242
+ border-color: #E1E1E1;
243
+ border-style: solid;
244
+ border-width: 0 1px 0 0;
245
+ top: 0;
246
+ bottom: 0;
247
+ left: 0;
248
+ width: 20%;
249
+ }
250
+
251
+ // width
252
+ &[data-width] {
253
+ float: none;
254
+ width: auto !important;
255
+ border-left-width: 0 !important;
256
+ border-right-width: 0 !important;
257
+ }
258
+
259
+ // label
260
+ > .acf-label {
261
+ float: left;
262
+ width: 20%;
263
+ margin: 0;
264
+ padding: 0 $fx;
265
+ }
266
+
267
+ // input
268
+ > .acf-input {
269
+ float: left;
270
+ width: 80%;
271
+ margin: 0;
272
+ padding: 0 $fx;
273
+ }
274
+
275
+ // rtl
276
+ html[dir="rtl"] & {
277
+
278
+ // sidebar
279
+ &:before {
280
+ border-width: 0 0 0 1px;
281
+ left: auto;
282
+ right: 0;
283
+ }
284
+
285
+ // label
286
+ > .acf-label {
287
+ float: right;
288
+ }
289
+
290
+ // input
291
+ > .acf-input {
292
+ float: right;
293
+ }
294
+ }
295
+
296
+ // mobile
297
+ @media screen and (max-width: $sm) {
298
+
299
+ // sidebar
300
+ &:before {
301
+ display: none;
302
+ }
303
+
304
+ // label
305
+ > .acf-label {
306
+ width: 100%;
307
+ margin-bottom: 10px;
308
+ }
309
+
310
+ // input
311
+ > .acf-input {
312
+ width: 100%;
313
+ }
314
+ }
315
+ }
316
+
317
+ /* clear + left */
318
+ .acf-fields.-clear.-left > .acf-field {
319
+ padding: 0;
320
+ border: none;
321
+
322
+ // sidebar
323
+ &:before {
324
+ display: none;
325
+ }
326
+
327
+ // label
328
+ > .acf-label {
329
+ padding: 0;
330
+ }
331
+
332
+ // input
333
+ > .acf-input {
334
+ padding: 0;
335
+ }
336
+ }
337
+
338
+
339
+ /*--------------------------------------------------------------------------------------------
340
+ *
341
+ * acf-table
342
+ *
343
+ *--------------------------------------------------------------------------------------------*/
344
+
345
+ .acf-table tr.acf-field {
346
+
347
+ // label
348
+ > td.acf-label {
349
+ padding: $fp;
350
+ margin: 0;
351
+ background: #F9F9F9;
352
+ width: 20%;
353
+ }
354
+
355
+ // input
356
+ > td.acf-input {
357
+ padding: $fp;
358
+ margin: 0;
359
+ border-left-color: #E1E1E1;
360
+ }
361
+ }
362
+
363
+ .acf-sortable-tr-helper {
364
+ position: relative !important;
365
+ display: table-row !important;
366
+ }
367
+
368
+
369
+ /*--------------------------------------------------------------------------------------------
370
+ *
371
+ * acf-postbox
372
+ *
373
+ *--------------------------------------------------------------------------------------------*/
374
+
375
+ .acf-postbox {
376
+ position: relative;
377
+
378
+ // inside
379
+ > .inside {
380
+ margin: 0 !important; /* override WP style - do not delete - you have tried this before */
381
+ padding: 0 !important; /* override WP style - do not delete - you have tried this before */
382
+ }
383
+
384
+ // hndle
385
+ > .hndle {
386
+
387
+ /* edit field group */
388
+ .acf-hndle-cog {
389
+ color: #AAAAAA;
390
+ font-size: 16px;
391
+ line-height: 20px;
392
+ padding: 0 2px;
393
+ float: right;
394
+ position: relative;
395
+ display: none;
396
+
397
+ &:hover {
398
+ color: #777777;
399
+ }
400
+ }
401
+ }
402
+
403
+ // hover
404
+ &:hover > .hndle .acf-hndle-cog {
405
+ display: block;
406
+ }
407
+
408
+ // replace
409
+ .acf-replace-with-fields {
410
+ padding: 15px;
411
+ text-align: center;
412
+ }
413
+ }
414
+
415
+ // Correct margin around #acf_after_title
416
+ #post-body-content #acf_after_title-sortables {
417
+ margin: 20px 0 -20px;
418
+ }
419
+
420
+ /* seamless */
421
+ .acf-postbox.seamless {
422
+ border: 0 none;
423
+ background: transparent;
424
+ box-shadow: none;
425
+
426
+
427
+ /* hide hndle */
428
+ > .hndle,
429
+ > .handlediv {
430
+ display: none !important;
431
+ }
432
+
433
+
434
+ /* inside */
435
+ > .inside {
436
+ display: block !important; /* stop metabox from hiding when closed */
437
+ margin-left: -$field_padding_x !important;
438
+ margin-right: -$field_padding_x !important;
439
+
440
+ > .acf-field {
441
+ border-color: transparent;
442
+ }
443
+ }
444
+ }
445
+
446
+
447
+ /* seamless (left) */
448
+ .acf-postbox.seamless > .acf-fields.-left {
449
+
450
+ /* hide sidebar bg */
451
+ > .acf-field:before {
452
+ display: none;
453
+ }
454
+
455
+
456
+ /* mobile */
457
+ @media screen and (max-width: 782px) {
458
+
459
+ /* remove padding */
460
+ & > .acf-field > .acf-label,
461
+ & > .acf-field > .acf-input {
462
+ padding: 0;
463
+ }
464
+ }
465
+ }
466
+
467
+ /*---------------------------------------------------------------------------------------------
468
+ *
469
+ * Inputs
470
+ *
471
+ *---------------------------------------------------------------------------------------------*/
472
+
473
+ .acf-field {
474
+
475
+ // inputs
476
+ input[type="text"],
477
+ input[type="password"],
478
+ input[type="number"],
479
+ input[type="search"],
480
+ input[type="email"],
481
+ input[type="url"],
482
+ textarea,
483
+ select {
484
+ width: 100%;
485
+ padding: 3px 5px;
486
+ resize: none;
487
+ margin: 0;
488
+ -webkit-box-sizing: border-box;
489
+ -moz-box-sizing: border-box;
490
+ box-sizing: border-box;
491
+
492
+ font-size: 14px;
493
+ line-height: 1.4;
494
+
495
+ // disabled
496
+ &:disabled {
497
+ background: #f8f8f8;
498
+ }
499
+
500
+ // readonly
501
+ &[readonly] {
502
+ background: #f8f8f8;
503
+ }
504
+ }
505
+
506
+ // textarea
507
+ textarea {
508
+ resize: vertical;
509
+ }
510
+
511
+ }
512
+
513
+
514
+ /*---------------------------------------------------------------------------------------------
515
+ *
516
+ * Text
517
+ *
518
+ *---------------------------------------------------------------------------------------------*/
519
+ .acf-input-prepend,
520
+ .acf-input-append,
521
+ .acf-input-wrap {
522
+ box-sizing: border-box;
523
+ }
524
+
525
+ .acf-input-prepend,
526
+ .acf-input-append {
527
+ font-size: 13px;
528
+ line-height: 20px;
529
+ padding: 3px 7px;
530
+ background: #F4F4F4;
531
+ border: #DFDFDF solid 1px;
532
+ }
533
+
534
+ .acf-input-prepend {
535
+ float: left;
536
+ border-right-width: 0;
537
+ border-radius: 3px 0 0 3px;
538
+ }
539
+
540
+ .acf-input-append {
541
+ float: right;
542
+ border-left-width: 0;
543
+ border-radius: 0 3px 3px 0;
544
+ }
545
+
546
+ .acf-input-wrap {
547
+ position: relative;
548
+ overflow: hidden;
549
+
550
+ input {
551
+ height: 28px;
552
+ margin: 0;
553
+ }
554
+ }
555
+
556
+ input.acf-is-prepended {
557
+ border-radius: 0 3px 3px 0 !important;
558
+ }
559
+
560
+ input.acf-is-appended {
561
+ border-radius: 3px 0 0 3px !important;
562
+ }
563
+
564
+ input.acf-is-prepended.acf-is-appended {
565
+ border-radius: 0 !important;
566
+ }
567
+
568
+
569
+ /* rtl */
570
+ html[dir="rtl"] .acf-input-prepend {
571
+ border-left-width: 0;
572
+ border-right-width: 1px;
573
+ border-radius: 0 3px 3px 0;
574
+
575
+ float: right;
576
+ }
577
+
578
+ html[dir="rtl"] .acf-input-append {
579
+ border-left-width: 1px;
580
+ border-right-width: 0;
581
+ border-radius: 3px 0 0 3px;
582
+ float: left;
583
+ }
584
+
585
+ html[dir="rtl"] input.acf-is-prepended {
586
+ border-radius: 3px 0 0 3px !important;
587
+ }
588
+
589
+ html[dir="rtl"] input.acf-is-appended {
590
+ border-radius: 0 3px 3px 0 !important;
591
+ }
592
+
593
+ html[dir="rtl"] input.acf-is-prepended.acf-is-appended {
594
+ border-radius: 0 !important;
595
+ }
596
+
597
+
598
+ /*---------------------------------------------------------------------------------------------
599
+ *
600
+ * Color Picker
601
+ *
602
+ *---------------------------------------------------------------------------------------------*/
603
+
604
+ .acf-color-picker {
605
+
606
+ .wp-picker-active {
607
+ position: relative;
608
+ z-index: 1;
609
+ }
610
+
611
+ }
612
+
613
+
614
+ /*---------------------------------------------------------------------------------------------
615
+ *
616
+ * Url
617
+ *
618
+ *---------------------------------------------------------------------------------------------*/
619
+
620
+ .acf-url {
621
+
622
+ i {
623
+ position: absolute;
624
+ top: 4px;
625
+ left: 4px;
626
+ opacity: 0.5;
627
+ color: #A9A9A9;
628
+ }
629
+
630
+ input[type="url"] {
631
+ padding-left: 25px;
632
+ }
633
+
634
+ &.-valid i {
635
+ opacity: 1;
636
+ }
637
+
638
+ }
639
+
640
+
641
+ /*---------------------------------------------------------------------------------------------
642
+ *
643
+ * Select
644
+ *
645
+ *---------------------------------------------------------------------------------------------*/
646
+
647
+ .acf-field select {
648
+ padding: 2px;
649
+ }
650
+
651
+ .acf-field select optgroup {
652
+ padding: 5px;
653
+ background: #fff;
654
+ }
655
+
656
+ .acf-field select option {
657
+ padding: 3px;
658
+ }
659
+
660
+ .acf-field select optgroup option {
661
+ padding-left: 5px;
662
+ }
663
+
664
+ .acf-field select optgroup:nth-child(2n) {
665
+ background: #F9F9F9;
666
+ }
667
+
668
+ .acf-field .select2-input {
669
+ max-width: 200px;
670
+ }
671
+
672
+
673
+ /*---------------------------------------------------------------------------------------------
674
+ *
675
+ * Select2 (v3)
676
+ *
677
+ *---------------------------------------------------------------------------------------------*/
678
+
679
+ .select2-container.-acf {
680
+
681
+ .select2-choices {
682
+ background: #fff;
683
+ border-color: #ddd;
684
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.07) inset;
685
+ min-height: 31px;
686
+
687
+ .select2-search-choice {
688
+ margin: 5px 0 5px 5px;
689
+ padding: 3px 5px 3px 18px;
690
+ border-color: #bbb;
691
+ background: #f9f9f9;
692
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25) inset;
693
+
694
+ /* sortable item*/
695
+ &.ui-sortable-helper {
696
+ background: #5897fb;
697
+ border-color: darken(#5897fb, 5%);
698
+ color: #fff;
699
+ box-shadow: 0 0 3px rgba(0,0,0,0.1);
700
+
701
+ a {
702
+ visibility: hidden;
703
+ }
704
+ }
705
+
706
+
707
+ /* sortable shadow */
708
+ &.ui-sortable-placeholder {
709
+ background-color: #f7f7f7;
710
+ border-color: #f7f7f7;
711
+ visibility: visible !important;
712
+ }
713
+ }
714
+
715
+ .select2-search-choice-focus {
716
+ border-color: #999;
717
+ }
718
+
719
+ .select2-search-field input {
720
+ height: 31px;
721
+ line-height: 22px;
722
+ margin: 0;
723
+ padding: 5px 5px 5px 7px;
724
+ }
725
+ }
726
+
727
+ .select2-choice {
728
+ border-color: #BBBBBB;
729
+
730
+ .select2-arrow {
731
+ background: transparent;
732
+ border-left-color: #DFDFDF;
733
+ padding-left: 1px;
734
+ }
735
+
736
+ .select2-result-description {
737
+ display: none;
738
+ }
739
+ }
740
+
741
+
742
+
743
+ /* open */
744
+ &.select2-container-active .select2-choices,
745
+ &.select2-dropdown-open .select2-choices {
746
+ border-color: #5B9DD9;
747
+ border-radius: 3px 3px 0 0;
748
+ }
749
+
750
+
751
+ /* single open */
752
+ &.select2-dropdown-open .select2-choice {
753
+ background: #fff;
754
+ border-color: #5B9DD9;
755
+ }
756
+
757
+ }
758
+
759
+ /* rtl */
760
+ html[dir="rtl"] .select2-container.-acf {
761
+
762
+ .select2-search-choice-close {
763
+ left: 24px;
764
+ }
765
+
766
+ .select2-choice > .select2-chosen {
767
+ margin-left: 42px;
768
+ }
769
+
770
+ .select2-choice .select2-arrow {
771
+ padding-left: 0;
772
+ padding-right: 1px;
773
+ }
774
+ }
775
+
776
+
777
+ /* description */
778
+ .select2-drop {
779
+
780
+ /* search*/
781
+ .select2-search {
782
+ padding: 4px 4px 0;
783
+ }
784
+
785
+
786
+ /* result */
787
+ .select2-result {
788
+
789
+ .select2-result-description {
790
+ color: #999;
791
+ font-size: 12px;
792
+ margin-left: 5px;
793
+ }
794
+
795
+
796
+ /* hover*/
797
+ &.select2-highlighted {
798
+
799
+ .select2-result-description {
800
+ color: #fff;
801
+ opacity: 0.75;
802
+ }
803
+
804
+ }
805
+
806
+ }
807
+
808
+ }
809
+
810
+
811
+
812
+ /*---------------------------------------------------------------------------------------------
813
+ *
814
+ * Select2 (v4)
815
+ *
816
+ *---------------------------------------------------------------------------------------------*/
817
+
818
+ // Fix unneeded bottom margin.
819
+ .select2-container.-acf {
820
+
821
+ // Reset WP default style.
822
+ li{
823
+ margin-bottom: 0;
824
+ }
825
+
826
+ // Multiple wrap.
827
+ .select2-selection--multiple {
828
+
829
+ // If no value, increase hidden search input full width.
830
+ // Overrides calculated px width issues.
831
+ .select2-search--inline:first-child {
832
+ float: none;
833
+ input {
834
+ width: 100% !important;
835
+ }
836
+ }
837
+
838
+ // ul: Remove padding because li already has margin-right.
839
+ .select2-selection__rendered {
840
+ padding-right: 0;
841
+ }
842
+
843
+ // li
844
+ .select2-selection__choice {
845
+ background-color: #f7f7f7;
846
+ border-color: #cccccc;
847
+
848
+ // Allow choice to wrap multiple lines.
849
+ max-width: 100%;
850
+ overflow: hidden;
851
+ word-wrap: normal !important;
852
+ white-space: normal;
853
+
854
+ // Sortable.
855
+ &.ui-sortable-helper {
856
+ background: #5897fb;
857
+ border-color: darken(#5897fb, 5%);
858
+ color: #fff;
859
+ box-shadow: 0 0 3px rgba(0,0,0,0.1);
860
+
861
+ span {
862
+ visibility: hidden;
863
+ }
864
+ }
865
+
866
+ // Sortable shadow
867
+ &.ui-sortable-placeholder {
868
+ background-color: #f7f7f7;
869
+ border-color: #f7f7f7;
870
+ visibility: visible !important;
871
+ }
872
+ }
873
+
874
+ // search
875
+ .select2-search__field {
876
+ box-shadow: none !important;
877
+ }
878
+ }
879
+
880
+ // Single choice.
881
+ .select2-selection--single {
882
+
883
+ }
884
+
885
+ // Fix single select pushing out repeater field table width.
886
+ .acf-row & .select2-selection--single {
887
+ overflow: hidden;
888
+ .select2-selection__rendered {
889
+ white-space: normal;
890
+ }
891
+ }
892
+ }
893
+
894
+ // z-index helper.
895
+ .select2-container {
896
+ .select2-dropdown {
897
+ z-index: 900000;
898
+ }
899
+ }
900
+
901
+ /*---------------------------------------------------------------------------------------------
902
+ *
903
+ * Link
904
+ *
905
+ *---------------------------------------------------------------------------------------------*/
906
+
907
+ .link-wrap {
908
+ border: #dddddd solid 1px;
909
+ border-radius: 3px;
910
+ padding: 5px;
911
+ line-height: 26px;
912
+ background: #fff;
913
+
914
+ word-wrap: break-word;
915
+ word-break: break-all;
916
+
917
+ .link-title {
918
+ padding: 0 5px;
919
+ }
920
+
921
+ }
922
+
923
+ .acf-link {
924
+
925
+ .link-wrap,
926
+ .acf-icon.-link-ext { display: none; }
927
+
928
+ /* value */
929
+ &.-value {
930
+
931
+ .button { display: none; }
932
+ .link-wrap { display: inline-block; }
933
+
934
+ }
935
+
936
+
937
+ /* external */
938
+ &.-external {
939
+
940
+ .acf-icon.-link-ext { display: inline-block; }
941
+
942
+ }
943
+
944
+ }
945
+
946
+ #wp-link-backdrop { z-index: 900000 !important; }
947
+ #wp-link-wrap { z-index: 900001 !important; }
948
+
949
+
950
+
951
+ /*---------------------------------------------------------------------------------------------
952
+ *
953
+ * Radio
954
+ *
955
+ *---------------------------------------------------------------------------------------------*/
956
+
957
+ ul.acf-radio-list,
958
+ ul.acf-checkbox-list {
959
+ background: transparent;
960
+ position: relative;
961
+ padding: 1px;
962
+ margin: 0;
963
+
964
+ li {
965
+ font-size: 13px;
966
+ line-height: 22px;
967
+ margin: 0;
968
+ position: relative;
969
+ word-wrap: break-word;
970
+
971
+ label {
972
+ display: inline;
973
+ }
974
+
975
+ input[type="checkbox"],
976
+ input[type="radio"] {
977
+ margin: -1px 4px 0 0;
978
+ vertical-align: middle;
979
+ }
980
+
981
+ input[type="text"] {
982
+ width: auto;
983
+ vertical-align: middle;
984
+ margin: 2px 0;
985
+ }
986
+
987
+
988
+ /* attachment sidebar fix*/
989
+ span {
990
+ float: none;
991
+ }
992
+
993
+ i {
994
+ vertical-align: middle;
995
+ }
996
+ }
997
+
998
+
999
+ /* hl */
1000
+ &.acf-hl {
1001
+
1002
+ li {
1003
+ margin-right: 20px;
1004
+ clear: none;
1005
+ }
1006
+ }
1007
+
1008
+
1009
+ /* rtl */
1010
+ html[dir="rtl"] & {
1011
+
1012
+ input[type="checkbox"],
1013
+ input[type="radio"] {
1014
+ margin-left: 4px;
1015
+ margin-right: 0;
1016
+ }
1017
+ }
1018
+
1019
+
1020
+
1021
+
1022
+ }
1023
+
1024
+
1025
+ /*---------------------------------------------------------------------------------------------
1026
+ *
1027
+ * Button Group
1028
+ *
1029
+ *---------------------------------------------------------------------------------------------*/
1030
+
1031
+ .acf-button-group {
1032
+ display: inline-block;
1033
+
1034
+ label {
1035
+ display: inline-block;
1036
+ border: #ccc solid 1px;
1037
+ position: relative;
1038
+ z-index: 1;
1039
+ padding: 5px 10px;
1040
+ background: #fff;
1041
+
1042
+ &:hover {
1043
+ border-color: darken(#ccc, 20%);
1044
+ z-index: 2;
1045
+ }
1046
+
1047
+ &.selected {
1048
+ border-color: darken(#309cf3, 1%);
1049
+ background: #309cf3;
1050
+ color: #fff;
1051
+ z-index: 2;
1052
+
1053
+ &:hover {
1054
+ background: lighten(#309cf3, 5%);
1055
+ }
1056
+ }
1057
+ }
1058
+
1059
+ input {
1060
+ display: none !important;
1061
+ }
1062
+
1063
+
1064
+ /* default (horizontal) */
1065
+ & {
1066
+ padding-left: 1px;
1067
+ display: inline-flex;
1068
+ flex-direction: row;
1069
+ flex-wrap: nowrap;
1070
+
1071
+ label {
1072
+ margin: 0 0 0 -1px;
1073
+ flex: 1;
1074
+ text-align: center;
1075
+ white-space: nowrap;
1076
+
1077
+ // corners
1078
+ &:first-child {
1079
+ border-radius: 3px 0 0 3px;
1080
+ html[dir="rtl"] & { border-radius: 0 3px 3px 0; }
1081
+ }
1082
+ &:last-child {
1083
+ border-radius: 0 3px 3px 0;
1084
+ html[dir="rtl"] & { border-radius: 3px 0 0 3px; }
1085
+ }
1086
+ &:only-child { border-radius: 3px; }
1087
+ }
1088
+ }
1089
+
1090
+
1091
+ /* vertical */
1092
+ &.-vertical {
1093
+ padding-left: 0;
1094
+ padding-top: 1px;
1095
+ flex-direction: column;
1096
+
1097
+ label {
1098
+ margin: -1px 0 0 0;
1099
+
1100
+ // corners
1101
+ &:first-child { border-radius: 3px 3px 0 0; }
1102
+ &:last-child { border-radius: 0 0 3px 3px; }
1103
+ &:only-child { border-radius: 3px; }
1104
+
1105
+ }
1106
+ }
1107
+
1108
+
1109
+ }
1110
+
1111
+
1112
+
1113
+ /*---------------------------------------------------------------------------------------------
1114
+ *
1115
+ * Checkbox
1116
+ *
1117
+ *---------------------------------------------------------------------------------------------*/
1118
+
1119
+ .acf-checkbox-list {
1120
+
1121
+ .button {
1122
+ margin: 10px 0 0;
1123
+ }
1124
+
1125
+ }
1126
+
1127
+
1128
+
1129
+ /*---------------------------------------------------------------------------------------------
1130
+ *
1131
+ * True / False
1132
+ *
1133
+ *---------------------------------------------------------------------------------------------*/
1134
+
1135
+ .acf-switch {
1136
+ display: inline-block;
1137
+ border-radius: 5px;
1138
+ cursor: pointer;
1139
+ position: relative;
1140
+ background: #f8f8f8;
1141
+ height: 30px;
1142
+ vertical-align: middle;
1143
+ //box-shadow: inset 0 0 1px rgba(0,0,0,0.2);
1144
+ border: #ccc solid 1px;
1145
+
1146
+ -webkit-transition: background 0.25s ease;
1147
+ -moz-transition: background 0.25s ease;
1148
+ -o-transition: background 0.25s ease;
1149
+ transition: background 0.25s ease;
1150
+
1151
+ span {
1152
+ display: inline-block;
1153
+ float: left;
1154
+ text-align: center;
1155
+
1156
+ font-size: 13px;
1157
+ line-height: 22px;
1158
+
1159
+ padding: 4px 10px;
1160
+ min-width: 15px;
1161
+
1162
+ i {
1163
+ vertical-align: middle;
1164
+ }
1165
+ }
1166
+
1167
+ .acf-switch-on {
1168
+ color: #fff;
1169
+ text-shadow: darken($acf_blue, 10%) 0 1px 0;
1170
+ }
1171
+
1172
+ .acf-switch-off {
1173
+
1174
+ }
1175
+
1176
+ .acf-switch-slider {
1177
+ position: absolute;
1178
+ top: 2px;
1179
+ left: 2px;
1180
+ bottom: 2px;
1181
+ right: 50%;
1182
+ z-index: 1;
1183
+ background: #fff;
1184
+ border-radius: 3px;
1185
+ border: #ccc solid 1px;
1186
+
1187
+ -webkit-transition: all 0.25s ease;
1188
+ -moz-transition: all 0.25s ease;
1189
+ -o-transition: all 0.25s ease;
1190
+ transition: all 0.25s ease;
1191
+
1192
+ transition-property: left, right;
1193
+ }
1194
+
1195
+
1196
+ /* hover */
1197
+ &:hover {
1198
+ .acf-switch-slider{
1199
+ border-color: darken(#ccc, 10%);
1200
+ }
1201
+ }
1202
+
1203
+
1204
+ /* active */
1205
+ &.-on {
1206
+ background: #309cf3;
1207
+ border-color: darken(#309cf3, 1%);
1208
+
1209
+ .acf-switch-slider {
1210
+ left: 50%;
1211
+ right: 2px;
1212
+ border-color: darken(#309cf3, 10%);
1213
+ }
1214
+
1215
+ /* hover */
1216
+ &:hover {
1217
+ background: lighten(#309cf3, 5%);
1218
+ }
1219
+ }
1220
+
1221
+
1222
+ /* focus */
1223
+ &.-focus {
1224
+
1225
+ .acf-switch-slider {
1226
+ border-color: #5b9dd9;
1227
+ box-shadow: 0 0 2px rgba(30, 140, 190, 0.5);
1228
+ }
1229
+
1230
+
1231
+ &.-on {
1232
+
1233
+ .acf-switch-slider {
1234
+ border-color: darken($acf_blue, 20%);
1235
+ box-shadow: 0 0 2px darken($acf_blue, 10%);
1236
+ }
1237
+ }
1238
+
1239
+ }
1240
+
1241
+
1242
+ /* message */
1243
+ + span {
1244
+ margin-left: 6px;
1245
+ }
1246
+
1247
+ }
1248
+
1249
+
1250
+ /* checkbox */
1251
+ .acf-switch-input {
1252
+ opacity: 0;
1253
+ position: absolute;
1254
+ margin: 0;
1255
+ }
1256
+
1257
+
1258
+ /* in media modal */
1259
+ .compat-item .acf-true-false {
1260
+
1261
+ .message {
1262
+ float: none;
1263
+ padding: 0;
1264
+ vertical-align: middle;
1265
+ }
1266
+
1267
+ }
1268
+
1269
+
1270
+ /*--------------------------------------------------------------------------
1271
+ *
1272
+ * Google Map
1273
+ *
1274
+ *-------------------------------------------------------------------------*/
1275
+
1276
+ .acf-google-map {
1277
+ position: relative;
1278
+ border: #DFDFDF solid 1px;
1279
+ background: #fff;
1280
+
1281
+ .title {
1282
+ position: relative;
1283
+ border-bottom: #DFDFDF solid 1px;
1284
+
1285
+ .search {
1286
+ margin: 0;
1287
+ font-size: 14px;
1288
+ line-height: 30px;
1289
+ height: 40px;
1290
+ padding: 5px 10px;
1291
+ border: 0 none;
1292
+ box-shadow: none;
1293
+ border-radius: 0;
1294
+ font-family: inherit;
1295
+ cursor: text;
1296
+ }
1297
+
1298
+ .acf-actions {
1299
+
1300
+ }
1301
+
1302
+ .acf-loading {
1303
+ position: absolute;
1304
+ top: 10px;
1305
+ right: 11px;
1306
+ display: none;
1307
+ }
1308
+
1309
+ &:hover {
1310
+ .acf-actions { display: block; }
1311
+ }
1312
+ }
1313
+
1314
+ .canvas {
1315
+ height: 400px;
1316
+ }
1317
+
1318
+
1319
+ /* default is focused */
1320
+ .title {
1321
+ .acf-icon.-location {
1322
+ display: inline-block;
1323
+ }
1324
+ .acf-icon.-cancel {
1325
+ display: none;
1326
+ }
1327
+ .acf-icon.-search {
1328
+ display: none;
1329
+ }
1330
+ }
1331
+
1332
+
1333
+ /* -search */
1334
+ &.-search .title {
1335
+ .acf-icon.-location {
1336
+ display: none;
1337
+ }
1338
+ .acf-icon.-cancel {
1339
+ display: inline-block;
1340
+ }
1341
+ .acf-icon.-search {
1342
+ display: inline-block;
1343
+ }
1344
+ }
1345
+
1346
+
1347
+
1348
+ /* -value */
1349
+ &.-value .title {
1350
+ .search {
1351
+ font-weight: bold;
1352
+ }
1353
+ .acf-icon.-location {
1354
+ display: none;
1355
+ }
1356
+ .acf-icon.-cancel {
1357
+ display: inline-block;
1358
+ }
1359
+ .acf-icon.-search {
1360
+ display: none;
1361
+ }
1362
+ }
1363
+
1364
+
1365
+ /* -loading */
1366
+ &.-loading .title {
1367
+ a {
1368
+ display: none !important;
1369
+ }
1370
+ i {
1371
+ display: inline-block;
1372
+ }
1373
+ }
1374
+
1375
+ }
1376
+
1377
+
1378
+
1379
+ /* autocomplete */
1380
+ .pac-container {
1381
+ border-width: 1px 0;
1382
+ box-shadow: none;
1383
+ }
1384
+
1385
+ .pac-container:after {
1386
+ display: none;
1387
+ }
1388
+
1389
+ .pac-container .pac-item:first-child {
1390
+ border-top: 0 none;
1391
+ }
1392
+ .pac-container .pac-item {
1393
+ padding: 5px 10px;
1394
+ cursor: pointer;
1395
+ }
1396
+
1397
+
1398
+ html[dir="rtl"] .pac-container .pac-item {
1399
+ text-align: right;
1400
+ }
1401
+
1402
+
1403
+ /*--------------------------------------------------------------------------
1404
+ *
1405
+ * Relationship
1406
+ *
1407
+ *-------------------------------------------------------------------------*/
1408
+
1409
+ .acf-relationship {
1410
+ background: #fff;
1411
+
1412
+ /* filters (top) */
1413
+ .filters {
1414
+ @include clearfix();
1415
+ border: #DFDFDF solid 1px;
1416
+ background: #fff;
1417
+
1418
+
1419
+ .filter {
1420
+ margin: 0;
1421
+ padding: 0;
1422
+ float: left;
1423
+ width: 100%;
1424
+
1425
+
1426
+ /* inner padding */
1427
+ span {
1428
+ display: block;
1429
+ padding: 7px 7px 7px 0;
1430
+ }
1431
+
1432
+ &:first-child span {
1433
+ padding-left: 7px;
1434
+ }
1435
+
1436
+
1437
+ // inputs
1438
+ input, select {
1439
+ height: 28px;
1440
+ line-height: 28px;
1441
+ padding: 2px;
1442
+ width: 100%;
1443
+ margin: 0;
1444
+ float: none; /* potential fix for media popup? */
1445
+
1446
+ &:focus,
1447
+ &:active {
1448
+ outline: none;
1449
+ box-shadow: none;
1450
+ }
1451
+ }
1452
+
1453
+ input {
1454
+ border-color: transparent;
1455
+ box-shadow: none;
1456
+ }
1457
+
1458
+ }
1459
+
1460
+
1461
+ /* widths */
1462
+ &.-f2 {
1463
+ .filter { width: 50%; }
1464
+ }
1465
+ &.-f3 {
1466
+ .filter { width: 25%; }
1467
+ .filter.-search { width: 50%; }
1468
+ }
1469
+
1470
+ }
1471
+
1472
+
1473
+ /* list */
1474
+ .list {
1475
+ margin: 0;
1476
+ padding: 5px;
1477
+ height: 160px;
1478
+ overflow: auto;
1479
+
1480
+ .acf-rel-label,
1481
+ .acf-rel-item,
1482
+ p {
1483
+ padding: 5px 7px;
1484
+ margin: 0;
1485
+ display: block;
1486
+ position: relative;
1487
+ min-height: 18px;
1488
+ }
1489
+
1490
+ .acf-rel-label {
1491
+ font-weight: bold;
1492
+ }
1493
+
1494
+ .acf-rel-item {
1495
+ cursor: pointer;
1496
+
1497
+ b {
1498
+ text-decoration: underline;
1499
+ font-weight: normal;
1500
+ }
1501
+
1502
+ .thumbnail {
1503
+ background: darken(#f9f9f9, 10%);
1504
+ width: 22px;
1505
+ height: 22px;
1506
+ float: left;
1507
+ margin: -2px 5px 0 0;
1508
+
1509
+ img {
1510
+ max-width: 22px;
1511
+ max-height: 22px;
1512
+ margin: 0 auto;
1513
+ display: block;
1514
+ }
1515
+
1516
+ &.-icon {
1517
+ background: #fff;
1518
+
1519
+ img {
1520
+ max-height: 20px;
1521
+ margin-top: 1px;
1522
+ }
1523
+ }
1524
+ }
1525
+
1526
+ /* hover */
1527
+ &:hover {
1528
+ background: #3875D7;
1529
+ color: #fff;
1530
+
1531
+ .thumbnail {
1532
+ background: lighten(#3875D7, 25%);
1533
+
1534
+ &.-icon {
1535
+ background: #fff;
1536
+ }
1537
+ }
1538
+ }
1539
+
1540
+
1541
+ /* disabled */
1542
+ &.disabled {
1543
+ opacity: 0.5;
1544
+
1545
+ &:hover {
1546
+ background: transparent;
1547
+ color: #333;
1548
+ cursor: default;
1549
+
1550
+ .thumbnail {
1551
+ background: darken(#f9f9f9, 10%);
1552
+
1553
+ &.-icon {
1554
+ background: #fff;
1555
+ }
1556
+ }
1557
+ }
1558
+ }
1559
+ }
1560
+
1561
+ ul {
1562
+ padding-bottom: 5px;
1563
+
1564
+ .acf-rel-label,
1565
+ .acf-rel-item,
1566
+ p {
1567
+ padding-left: 20px;
1568
+ }
1569
+
1570
+ }
1571
+
1572
+ }
1573
+
1574
+
1575
+ /* selection (bottom) */
1576
+ .selection {
1577
+ @include clearfix();
1578
+ border: #DFDFDF solid 1px;
1579
+ position: relative;
1580
+ margin-top: -1px;
1581
+
1582
+ .values,
1583
+ .choices {
1584
+ width: 50%;
1585
+ background: #fff;
1586
+ float: left
1587
+ }
1588
+
1589
+ /* choices */
1590
+ .choices {
1591
+ background: #F9F9F9;
1592
+
1593
+ .list {
1594
+ border-right: #DFDFDF solid 1px;
1595
+ }
1596
+
1597
+ }
1598
+
1599
+
1600
+ /* values */
1601
+ .values {
1602
+
1603
+ .acf-icon {
1604
+ position: absolute;
1605
+ top: 4px;
1606
+ right: 7px;
1607
+ display: none;
1608
+
1609
+ /* rtl */
1610
+ html[dir="rtl"] & {
1611
+ right: auto;
1612
+ left: 7px;
1613
+ }
1614
+
1615
+ }
1616
+
1617
+ .acf-rel-item:hover .acf-icon {
1618
+ display: block;
1619
+ }
1620
+
1621
+ .acf-rel-item {
1622
+ cursor: move;
1623
+
1624
+ b {
1625
+ text-decoration: none;
1626
+ }
1627
+
1628
+ }
1629
+
1630
+ }
1631
+
1632
+ }
1633
+
1634
+
1635
+ }
1636
+
1637
+ /* menu item fix */
1638
+ .menu-item {
1639
+
1640
+ .acf-relationship {
1641
+
1642
+ ul {
1643
+ width: auto;
1644
+ }
1645
+
1646
+ li {
1647
+ display: block;
1648
+ }
1649
+ }
1650
+ }
1651
+
1652
+
1653
+ /*--------------------------------------------------------------------------
1654
+ *
1655
+ * WYSIWYG
1656
+ *
1657
+ *-------------------------------------------------------------------------*/
1658
+
1659
+ .acf-editor-wrap {
1660
+
1661
+ // Delay.
1662
+ &.delay {
1663
+
1664
+ .acf-editor-toolbar {
1665
+ content: "";
1666
+ display: block;
1667
+ background: #f5f5f5;
1668
+ border-bottom: #dddddd solid 1px;
1669
+ color: #555d66;
1670
+ padding: 10px;
1671
+ }
1672
+
1673
+ .wp-editor-area {
1674
+ padding: 10px;
1675
+ border: none;
1676
+ color: inherit !important; // Fixes white text bug.
1677
+ }
1678
+ }
1679
+
1680
+ iframe{
1681
+ min-height: 200px;
1682
+ }
1683
+
1684
+ .wp-editor-container{
1685
+ border: 1px solid #E5E5E5;
1686
+ box-shadow: none !important;
1687
+ }
1688
+
1689
+ .wp-editor-tabs {
1690
+ box-sizing: content-box;
1691
+ }
1692
+ }
1693
+
1694
+ // Full Screen Mode.
1695
+ #mce_fullscreen_container {
1696
+ z-index: 900000 !important;
1697
+ }
1698
+
1699
+ /*---------------------------------------------------------------------------------------------
1700
+ *
1701
+ * Tab
1702
+ *
1703
+ *---------------------------------------------------------------------------------------------*/
1704
+
1705
+ .acf-field-tab {
1706
+ display: none !important;
1707
+ }
1708
+
1709
+ // class to hide fields
1710
+ .hidden-by-tab {
1711
+ display: none !important;
1712
+ }
1713
+
1714
+ // ensure floating fields do not disturb tab wrap
1715
+ .acf-tab-wrap {
1716
+ clear: both;
1717
+ z-index: 1;
1718
+ }
1719
+
1720
+ // tab group
1721
+ .acf-tab-group {
1722
+ border-bottom: #ccc solid 1px;
1723
+ padding: 10px 10px 0;
1724
+
1725
+ li {
1726
+ margin: 0 0.5em 0 0;
1727
+
1728
+ a {
1729
+ padding: 5px 10px;
1730
+ display: block;
1731
+
1732
+ color: #555;
1733
+ font-size: 14px;
1734
+ font-weight: 600;
1735
+ line-height: 24px;
1736
+
1737
+ border: #ccc solid 1px;
1738
+ border-bottom: 0 none;
1739
+ text-decoration: none;
1740
+ background: #e5e5e5;
1741
+ transition: none;
1742
+
1743
+ &:hover {
1744
+ background: #FFF;
1745
+ }
1746
+
1747
+ &:focus {
1748
+ outline: none;
1749
+ box-shadow: none;
1750
+ }
1751
+
1752
+ &:empty {
1753
+ display: none;
1754
+ }
1755
+
1756
+ }
1757
+
1758
+
1759
+ // rtl
1760
+ html[dir="rtl"] & {
1761
+ margin: 0 0 0 0.5em;
1762
+ }
1763
+
1764
+
1765
+ // active
1766
+ &.active a {
1767
+ background: #F1F1F1;
1768
+ color: #000;
1769
+ padding-bottom: 6px;
1770
+ margin-bottom: -1px;
1771
+ position: relative;
1772
+ z-index: 1;
1773
+ }
1774
+ }
1775
+ }
1776
+
1777
+
1778
+ // inside acf-fields
1779
+ .acf-fields > .acf-tab-wrap {
1780
+ background: #F9F9F9;
1781
+
1782
+ // group
1783
+ .acf-tab-group {
1784
+ position: relative;
1785
+ z-index: 1;
1786
+ margin-bottom: -1px;
1787
+ border-top: #DFDFDF solid 1px;
1788
+ border-bottom: #DFDFDF solid 1px;
1789
+
1790
+ li a {
1791
+ background: #f1f1f1;
1792
+
1793
+ &:hover {
1794
+ background: #FFF;
1795
+ }
1796
+ }
1797
+
1798
+ li.active a {
1799
+ background: #FFFFFF;
1800
+ }
1801
+ }
1802
+
1803
+ // first child
1804
+ // fixes issue causing double border-top due to WP postbox .handlediv
1805
+ &:first-child .acf-tab-group {
1806
+ border-top: none;
1807
+ }
1808
+
1809
+ }
1810
+
1811
+
1812
+ // inside acf-fields.-left
1813
+ .acf-fields.-left > .acf-tab-wrap {
1814
+
1815
+ // group
1816
+ .acf-tab-group {
1817
+ padding-left: 20%;
1818
+
1819
+ /* mobile */
1820
+ @media screen and (max-width: $sm) {
1821
+ padding-left: 10px;
1822
+ }
1823
+
1824
+
1825
+ /* rtl */
1826
+ html[dir="rtl"] & {
1827
+ padding-left: 0;
1828
+ padding-right: 20%;
1829
+
1830
+ /* mobile */
1831
+ @media screen and (max-width: 850px) {
1832
+ padding-right: 10px;
1833
+ }
1834
+ }
1835
+ }
1836
+ }
1837
+
1838
+
1839
+ // left
1840
+ .acf-tab-wrap.-left {
1841
+
1842
+ // group
1843
+ .acf-tab-group {
1844
+ position: absolute;
1845
+ left: 0;
1846
+ width: 20%;
1847
+ border: 0 none;
1848
+ padding: 0 !important; /* important overrides 'left aligned labels' */
1849
+ margin: 1px 0 0;
1850
+
1851
+ // li
1852
+ li {
1853
+ float: none;
1854
+ margin: -1px 0 0;
1855
+
1856
+ a {
1857
+ border: 1px solid #ededed;
1858
+ font-size: 13px;
1859
+ line-height: 18px;
1860
+ color: #0073aa;
1861
+ padding: 10px;
1862
+ margin: 0;
1863
+ font-weight: normal;
1864
+ border-width: 1px 0;
1865
+ border-radius: 0;
1866
+ background: transparent;
1867
+
1868
+ &:hover {
1869
+ color: #00a0d2;
1870
+ }
1871
+ }
1872
+
1873
+ &.active a {
1874
+ border-color:#DFDFDF;
1875
+ color: #000;
1876
+ margin-right: -1px;
1877
+ background: #fff;
1878
+ }
1879
+ }
1880
+
1881
+ // rtl
1882
+ html[dir="rtl"] & {
1883
+ left: auto;
1884
+ right: 0;
1885
+
1886
+ li.active a {
1887
+ margin-right: 0;
1888
+ margin-left: -1px;
1889
+ }
1890
+ }
1891
+ }
1892
+
1893
+ // space before field
1894
+ .acf-field + &:before {
1895
+ content: "";
1896
+ display: block;
1897
+ position: relative;
1898
+ z-index: 1;
1899
+ height: 10px;
1900
+ border-top: #DFDFDF solid 1px;
1901
+ border-bottom: #DFDFDF solid 1px;
1902
+ margin-bottom: -1px;
1903
+ }
1904
+
1905
+
1906
+ // first child has negative margin issues
1907
+ &:first-child {
1908
+
1909
+ .acf-tab-group {
1910
+
1911
+ li:first-child a {
1912
+ border-top: none;
1913
+ }
1914
+ }
1915
+ }
1916
+ }
1917
+
1918
+
1919
+ /* sidebar */
1920
+ .acf-fields.-sidebar {
1921
+ padding: 0 0 0 20% !important;
1922
+ position: relative;
1923
+
1924
+ /* before */
1925
+ &:before {
1926
+ content: "";
1927
+ display: block;
1928
+ position: absolute;
1929
+ top: 0;
1930
+ left: 0;
1931
+ width: 20%;
1932
+ bottom: 0;
1933
+ border-right: #DFDFDF solid 1px;
1934
+ background: #F9F9F9;
1935
+ z-index: 1;
1936
+ }
1937
+
1938
+
1939
+ /* rtl */
1940
+ html[dir="rtl"] & {
1941
+ padding: 0 20% 0 0 !important;
1942
+
1943
+ &:before {
1944
+ border-left: #DFDFDF solid 1px;
1945
+ border-right-width: 0;
1946
+ left: auto;
1947
+ right: 0;
1948
+ }
1949
+ }
1950
+
1951
+
1952
+ // left
1953
+ &.-left {
1954
+ padding: 0 0 0 180px !important;
1955
+
1956
+ /* rtl */
1957
+ html[dir="rtl"] & {
1958
+ padding: 0 180px 0 0 !important;
1959
+ }
1960
+
1961
+ &:before {
1962
+ background: #F1F1F1;
1963
+ border-color: #dfdfdf;
1964
+ width: 180px;
1965
+ }
1966
+
1967
+ > .acf-tab-wrap.-left .acf-tab-group {
1968
+ width: 180px;
1969
+
1970
+ li a {
1971
+ border-color: #e4e4e4;
1972
+ }
1973
+
1974
+ li.active a {
1975
+ background: #F9F9F9;
1976
+ }
1977
+
1978
+ }
1979
+ }
1980
+
1981
+ // fix double border
1982
+ > .acf-field-tab + .acf-field {
1983
+ border-top: none;
1984
+ }
1985
+ }
1986
+
1987
+
1988
+ // clear
1989
+ .acf-fields.-clear > .acf-tab-wrap {
1990
+ background: transparent;
1991
+
1992
+ // group
1993
+ .acf-tab-group {
1994
+ margin-top: 0;
1995
+ border-top: none;
1996
+ padding-left: 0;
1997
+ padding-right: 0;
1998
+
1999
+ li a {
2000
+ background: #e5e5e5;
2001
+
2002
+ &:hover {
2003
+ background: #fff;
2004
+ }
2005
+ }
2006
+
2007
+ li.active a {
2008
+ background: #f1f1f1;
2009
+ }
2010
+ }
2011
+ }
2012
+
2013
+
2014
+ /* seamless */
2015
+ .acf-postbox.seamless {
2016
+
2017
+ // sidebar
2018
+ > .acf-fields.-sidebar {
2019
+ margin-left: 0 !important;
2020
+
2021
+ &:before {
2022
+ background: transparent;
2023
+ }
2024
+ }
2025
+
2026
+ // default
2027
+ > .acf-fields > .acf-tab-wrap {
2028
+ background: transparent;
2029
+ margin-bottom: 10px;
2030
+ padding-left: $fx;
2031
+ padding-right: $fx;
2032
+
2033
+ .acf-tab-group {
2034
+ border-top: 0 none;
2035
+
2036
+ li a {
2037
+ background: #e5e5e5;
2038
+
2039
+ &:hover {
2040
+ background: #fff;
2041
+ }
2042
+ }
2043
+
2044
+ li.active a {
2045
+ background: #f1f1f1;
2046
+ }
2047
+ }
2048
+ }
2049
+
2050
+ // left tabs
2051
+ > .acf-fields > .acf-tab-wrap.-left {
2052
+
2053
+ &:before {
2054
+ border-top: none;
2055
+ height: auto;
2056
+ }
2057
+
2058
+ .acf-tab-group {
2059
+ margin-bottom: 0;
2060
+
2061
+ li a {
2062
+ border-width: 1px 0 1px 1px !important;
2063
+ border-color: #cccccc;
2064
+ background: #e5e5e5;
2065
+ }
2066
+
2067
+ li.active a {
2068
+ background: #f1f1f1;
2069
+ }
2070
+ }
2071
+
2072
+ }
2073
+ }
2074
+
2075
+
2076
+ // menu
2077
+ .menu-edit,
2078
+ .widget {
2079
+ .acf-fields.-clear > .acf-tab-wrap .acf-tab-group li {
2080
+ a { background: #f1f1f1; }
2081
+ a:hover, &.active a { background: #fff; }
2082
+ }
2083
+ }
2084
+
2085
+ .compat-item .acf-tab-wrap td {
2086
+ display: block;
2087
+ }
2088
+
2089
+
2090
+
2091
+ /* within gallery sidebar */
2092
+ .acf-gallery-side .acf-tab-wrap {
2093
+ border-top: 0 none !important;
2094
+ }
2095
+
2096
+ .acf-gallery-side .acf-tab-wrap .acf-tab-group {
2097
+ margin: 10px 0 !important;
2098
+ padding: 0 !important;
2099
+ }
2100
+
2101
+ .acf-gallery-side .acf-tab-group li.active a {
2102
+ background: #F9F9F9 !important;
2103
+ }
2104
+
2105
+
2106
+
2107
+ /* withing widget */
2108
+ .widget .acf-tab-group {
2109
+ border-bottom-color: #e8e8e8;
2110
+ }
2111
+
2112
+ .widget .acf-tab-group li a {
2113
+ background: #F1F1F1;
2114
+ }
2115
+
2116
+ .widget .acf-tab-group li.active a {
2117
+ background: #fff;
2118
+ }
2119
+
2120
+
2121
+ /* media popup (edit image) */
2122
+ .media-modal.acf-expanded .compat-attachment-fields > tbody > tr.acf-tab-wrap .acf-tab-group {
2123
+ padding-left: 23%;
2124
+ border-bottom-color: #DDDDDD;
2125
+ }
2126
+
2127
+
2128
+ /* table */
2129
+
2130
+
2131
+ .form-table > tbody > tr.acf-tab-wrap .acf-tab-group {
2132
+ padding: 0 5px 0 210px;
2133
+ }
2134
+
2135
+ /* rtl */
2136
+ html[dir="rtl"] .form-table > tbody > tr.acf-tab-wrap .acf-tab-group {
2137
+ padding: 0 210px 0 5px;
2138
+ }
2139
+
2140
+
2141
+ /*--------------------------------------------------------------------------------------------
2142
+ *
2143
+ * oembed
2144
+ *
2145
+ *--------------------------------------------------------------------------------------------*/
2146
+
2147
+ .acf-oembed {
2148
+ position: relative;
2149
+ border: #DFDFDF solid 1px;
2150
+ background: #fff;
2151
+
2152
+ .title {
2153
+ position: relative;
2154
+ border-bottom: #DFDFDF solid 1px;
2155
+ padding: 5px 10px;
2156
+
2157
+ .input-search {
2158
+ margin: 0;
2159
+ font-size: 14px;
2160
+ line-height: 30px;
2161
+ height: 30px;
2162
+ padding: 0;
2163
+ border: 0 none;
2164
+ box-shadow: none;
2165
+ border-radius: 0;
2166
+ font-family: inherit;
2167
+ cursor: text;
2168
+ }
2169
+
2170
+ .acf-actions {
2171
+ padding: 6px;
2172
+ }
2173
+ }
2174
+
2175
+ .canvas {
2176
+ position: relative;
2177
+ min-height: 250px;
2178
+ background: #F9F9F9;
2179
+
2180
+ .canvas-media {
2181
+ position: relative;
2182
+ z-index: 1;
2183
+ }
2184
+
2185
+ iframe {
2186
+ display: block;
2187
+ margin: 0;
2188
+ padding: 0;
2189
+ width: 100%;
2190
+ }
2191
+
2192
+ .acf-icon.-picture {
2193
+ @include centered();
2194
+ z-index: 0;
2195
+
2196
+ height: 42px;
2197
+ width: 42px;
2198
+ font-size: 42px;
2199
+ color: #999;
2200
+ }
2201
+
2202
+ .acf-loading-overlay {
2203
+ background: rgba(255,255,255,0.9);
2204
+ }
2205
+
2206
+ .canvas-error {
2207
+ position: absolute;
2208
+ top: 50%;
2209
+ left: 0%;
2210
+ right: 0%;
2211
+ margin: -9px 0 0 0;
2212
+ text-align: center;
2213
+ display: none;
2214
+
2215
+ p {
2216
+ padding: 8px;
2217
+ margin: 0;
2218
+ display: inline;
2219
+ }
2220
+ }
2221
+ }
2222
+
2223
+ // has value
2224
+ &.has-value {
2225
+ .canvas {
2226
+ min-height: 50px;
2227
+ }
2228
+
2229
+ .input-search {
2230
+ font-weight: bold;
2231
+ }
2232
+
2233
+ .title:hover .acf-actions {
2234
+ display: block;
2235
+ }
2236
+ }
2237
+
2238
+ }
2239
+
2240
+ /*--------------------------------------------------------------------------------------------
2241
+ *
2242
+ * Image
2243
+ *
2244
+ *--------------------------------------------------------------------------------------------*/
2245
+
2246
+ .acf-image-uploader {
2247
+ @include clearfix();
2248
+ position: relative;
2249
+
2250
+
2251
+ p {
2252
+ margin: 0;
2253
+ }
2254
+
2255
+
2256
+ /* image wrap*/
2257
+ .image-wrap {
2258
+ position: relative;
2259
+ float: left;
2260
+
2261
+ img {
2262
+ max-width: 100%;
2263
+ width: auto;
2264
+ height: auto;
2265
+ display: block;
2266
+ min-width: 30px;
2267
+ min-height: 30px;
2268
+ background: #f1f1f1;
2269
+ margin: 0;
2270
+ padding: 0;
2271
+
2272
+
2273
+ /* svg */
2274
+ &[src$=".svg"] {
2275
+ min-height: 100px;
2276
+ min-width: 100px;
2277
+ }
2278
+ }
2279
+
2280
+
2281
+ /* hover */
2282
+ &:hover .acf-actions {
2283
+ display: block;
2284
+ }
2285
+ }
2286
+
2287
+
2288
+ /* input */
2289
+ input.button {
2290
+ width: auto;
2291
+ }
2292
+
2293
+
2294
+ /* rtl */
2295
+ html[dir="rtl"] & {
2296
+
2297
+ .image-wrap {
2298
+ float: right;
2299
+ }
2300
+
2301
+ }
2302
+
2303
+ }
2304
+
2305
+
2306
+ /*--------------------------------------------------------------------------------------------
2307
+ *
2308
+ * File
2309
+ *
2310
+ *--------------------------------------------------------------------------------------------*/
2311
+
2312
+ .acf-file-uploader {
2313
+ position: relative;
2314
+
2315
+ p {
2316
+ margin: 0;
2317
+ }
2318
+
2319
+ .file-wrap {
2320
+ border: #DFDFDF solid 1px;
2321
+ min-height: 84px;
2322
+ position: relative;
2323
+ background: #fff;
2324
+ }
2325
+
2326
+ .file-icon {
2327
+ position: absolute;
2328
+ top: 0;
2329
+ left: 0;
2330
+ bottom: 0;
2331
+ padding: 10px;
2332
+ background: #F1F1F1;
2333
+ border-right: #E5E5E5 solid 1px;
2334
+
2335
+ img {
2336
+ display: block;
2337
+ padding: 0;
2338
+ margin: 0;
2339
+ max-width: 48px;
2340
+ }
2341
+ }
2342
+
2343
+ .file-info {
2344
+ padding: 10px;
2345
+ margin-left: 69px;
2346
+
2347
+ p {
2348
+ margin: 0 0 2px;
2349
+ font-size: 13px;
2350
+ line-height: 1.4em;
2351
+ word-break: break-all;
2352
+ }
2353
+
2354
+ a {
2355
+ text-decoration: none;
2356
+ }
2357
+ }
2358
+
2359
+ /* hover */
2360
+ &:hover .acf-actions {
2361
+ display: block;
2362
+ }
2363
+
2364
+
2365
+ /* rtl */
2366
+ html[dir="rtl"] & {
2367
+
2368
+ .file-icon {
2369
+ left: auto;
2370
+ right: 0;
2371
+ border-left: #E5E5E5 solid 1px;
2372
+ border-right: none;
2373
+ }
2374
+
2375
+ .file-info {
2376
+ margin-right: 69px;
2377
+ margin-left: 0;
2378
+ }
2379
+ }
2380
+
2381
+ }
2382
+
2383
+
2384
+ /*---------------------------------------------------------------------------------------------
2385
+ *
2386
+ * Date Picker
2387
+ *
2388
+ *---------------------------------------------------------------------------------------------*/
2389
+
2390
+ .acf-ui-datepicker .ui-datepicker {
2391
+ z-index: 900000 !important;
2392
+
2393
+ .ui-widget-header a {
2394
+ cursor: pointer;
2395
+ transition: none;
2396
+ }
2397
+ }
2398
+
2399
+
2400
+ /* fix highlight state overriding hover / active */
2401
+ .acf-ui-datepicker .ui-state-highlight.ui-state-hover {
2402
+ border: 1px solid #98b7e8 !important;
2403
+ background: #98b7e8 !important;
2404
+ font-weight: normal !important;
2405
+ color: #ffffff !important;
2406
+ }
2407
+
2408
+ .acf-ui-datepicker .ui-state-highlight.ui-state-active {
2409
+ border: 1px solid #3875d7 !important;
2410
+ background: #3875d7 !important;
2411
+ font-weight: normal !important;
2412
+ color: #ffffff !important;
2413
+ }
2414
+
2415
+
2416
+ /*---------------------------------------------------------------------------------------------
2417
+ *
2418
+ * Separator field
2419
+ *
2420
+ *---------------------------------------------------------------------------------------------*/
2421
+
2422
+ .acf-field-separator {
2423
+
2424
+ .acf-label {
2425
+ margin-bottom: 0;
2426
+
2427
+ label {
2428
+ font-weight: normal;
2429
+ }
2430
+ }
2431
+
2432
+ .acf-input {
2433
+ display: none;
2434
+ }
2435
+
2436
+
2437
+ /* fields */
2438
+ .acf-fields > & {
2439
+ background: #f9f9f9;
2440
+ border-bottom: 1px solid #dfdfdf;
2441
+ border-top: 1px solid #dfdfdf;
2442
+ margin-bottom: -1px;
2443
+ z-index: 2;
2444
+ }
2445
+
2446
+ }
2447
+
2448
+
2449
+ /*---------------------------------------------------------------------------------------------
2450
+ *
2451
+ * Taxonomy
2452
+ *
2453
+ *---------------------------------------------------------------------------------------------*/
2454
+
2455
+ .acf-taxonomy-field {
2456
+ position: relative;
2457
+
2458
+ .categorychecklist-holder {
2459
+ border: #DFDFDF solid 1px;
2460
+ border-radius: 3px;
2461
+ max-height: 200px;
2462
+ overflow: auto;
2463
+ }
2464
+
2465
+ .acf-checkbox-list {
2466
+ margin: 0;
2467
+ padding: 10px;
2468
+
2469
+ ul.children {
2470
+ padding-left: 18px;
2471
+ }
2472
+ }
2473
+
2474
+
2475
+ /* hover */
2476
+ &:hover {
2477
+ .acf-actions {
2478
+ display: block;
2479
+ }
2480
+ }
2481
+
2482
+
2483
+ /* select */
2484
+ &[data-ftype="select"] {
2485
+ .acf-actions {
2486
+ padding: 0;
2487
+ margin: -9px;
2488
+ }
2489
+ }
2490
+
2491
+ }
2492
+
2493
+
2494
+ /*---------------------------------------------------------------------------------------------
2495
+ *
2496
+ * Range
2497
+ *
2498
+ *---------------------------------------------------------------------------------------------*/
2499
+
2500
+ .acf-range-wrap {
2501
+
2502
+ .acf-append,
2503
+ .acf-prepend {
2504
+ display: inline-block;
2505
+ vertical-align: middle;
2506
+ line-height: 28px;
2507
+ margin: 0 7px 0 0;
2508
+ }
2509
+
2510
+ .acf-append {
2511
+ margin: 0 0 0 7px;
2512
+ }
2513
+
2514
+ input[type="range"] {
2515
+ display: inline-block;
2516
+ padding: 0;
2517
+ margin: 0;
2518
+ vertical-align: middle;
2519
+ height: 28px;
2520
+
2521
+ &:focus {
2522
+ outline: none;
2523
+ }
2524
+
2525
+ }
2526
+
2527
+ input[type="number"] {
2528
+ display: inline-block;
2529
+ min-width: 3em;
2530
+ margin-left: 10px;
2531
+ vertical-align: middle;
2532
+ }
2533
+
2534
+
2535
+ /* rtl */
2536
+ html[dir="rtl"] & {
2537
+
2538
+ input[type="number"] {
2539
+ margin-right: 10px;
2540
+ margin-left: 0;
2541
+ }
2542
+
2543
+ .acf-append { margin: 0 7px 0 0; }
2544
+ .acf-prepend { margin: 0 0 0 7px; }
2545
+
2546
+ }
2547
+
2548
+ }
2549
+
2550
+
2551
+ /*---------------------------------------------------------------------------------------------
2552
+ *
2553
+ * acf-accordion
2554
+ *
2555
+ *---------------------------------------------------------------------------------------------*/
2556
+
2557
+ .acf-accordion {
2558
+ margin: 0;
2559
+ padding: 0;
2560
+ background: #fff;
2561
+
2562
+ /* title */
2563
+ .acf-accordion-title {
2564
+ margin: 0;
2565
+ padding: 12px;
2566
+ font-weight: bold;
2567
+ cursor: pointer;
2568
+ font-size: inherit;
2569
+ font-size: 13px;
2570
+ line-height: 1.4em;
2571
+
2572
+ label {
2573
+ margin: 0;
2574
+ padding: 0;
2575
+ font-size: 13px;
2576
+ line-height: 1.4em;
2577
+ }
2578
+
2579
+ p {
2580
+ font-weight: normal;
2581
+ }
2582
+
2583
+ .acf-accordion-icon {
2584
+ float: right;
2585
+ }
2586
+ }
2587
+
2588
+ .acf-accordion-content {
2589
+ margin: 0;
2590
+ padding: 0 12px 12px;
2591
+ display: none;
2592
+ }
2593
+
2594
+
2595
+ /* open */
2596
+ &.-open {
2597
+
2598
+ > .acf-accordion-content {
2599
+ display: block;
2600
+ }
2601
+
2602
+ }
2603
+ }
2604
+
2605
+
2606
+ /* field specific */
2607
+ .acf-field.acf-accordion {
2608
+ padding: 0 !important;
2609
+ border-color: #dfdfdf;
2610
+
2611
+ .acf-accordion-title {
2612
+ padding: 12px;
2613
+ width: auto !important;
2614
+ float: none !important;
2615
+ width: auto !important;
2616
+ }
2617
+
2618
+ .acf-accordion-content {
2619
+ padding: 0;
2620
+ float: none !important;
2621
+ width: auto !important;
2622
+
2623
+ > .acf-fields {
2624
+ border-top: #EEEEEE solid 1px;
2625
+
2626
+ &.-clear {
2627
+ padding: 0 $fx $fy;
2628
+ }
2629
+ }
2630
+ }
2631
+ }
2632
+
2633
+
2634
+ /* field specific (left) */
2635
+ .acf-fields.-left > .acf-field.acf-accordion {
2636
+ padding: 0 !important;
2637
+
2638
+ &:before {
2639
+ display: none;
2640
+ }
2641
+
2642
+ .acf-accordion-title {
2643
+ width: auto;
2644
+ margin: 0 !important;
2645
+ padding: 12px;
2646
+ float: none !important;
2647
+ }
2648
+
2649
+ .acf-accordion-content {
2650
+ padding: 0 !important;
2651
+ }
2652
+ }
2653
+
2654
+
2655
+ /* field specific (clear) */
2656
+ .acf-fields.-clear > .acf-field.acf-accordion {
2657
+ border: #cccccc solid 1px;
2658
+ background: transparent;
2659
+
2660
+ + .acf-field.acf-accordion {
2661
+ margin-top: -16px;
2662
+ }
2663
+ }
2664
+
2665
+
2666
+ /* table */
2667
+ tr.acf-field.acf-accordion {
2668
+ background: transparent;
2669
+
2670
+ > .acf-input {
2671
+ padding: 0 !important;
2672
+ border: #cccccc solid 1px;
2673
+ }
2674
+
2675
+ .acf-accordion-content {
2676
+ padding: 0 12px 12px;
2677
+ }
2678
+ }
2679
+
2680
+
2681
+ /* #addtag */
2682
+ #addtag div.acf-field.error {
2683
+ border: 0 none;
2684
+ padding: 8px 0;
2685
+ }
2686
+
2687
+
2688
+ #addtag > .acf-field.acf-accordion {
2689
+ padding-right: 0;
2690
+ margin-right: 5%;
2691
+
2692
+ + p.submit {
2693
+ margin-top: 0;
2694
+ }
2695
+ }
2696
+
2697
+
2698
+
2699
+ /* border */
2700
+ tr.acf-accordion {
2701
+ margin: 15px 0 !important;
2702
+
2703
+ + tr.acf-accordion {
2704
+ margin-top: -16px !important;
2705
+ }
2706
+ }
2707
+
2708
+
2709
+ /* seamless */
2710
+ .acf-postbox.seamless > .acf-fields > .acf-accordion {
2711
+ margin-left: $field_padding_x !important;
2712
+ margin-right: $field_padding_x !important;
2713
+ }
2714
+
2715
+
2716
+ /* rtl */
2717
+ html[dir="rtl"] .acf-accordion {
2718
+
2719
+ }
2720
+
2721
+
2722
+ /* menu item */
2723
+ /*
2724
+ .menu-item-settings > .field-acf > .acf-field.acf-accordion {
2725
+ border: #dfdfdf solid 1px;
2726
+ margin: 10px -13px 10px -11px;
2727
+
2728
+ + .acf-field.acf-accordion {
2729
+ margin-top: -11px;
2730
+ }
2731
+ }
2732
+ */
2733
+
2734
+
2735
+ /* widget */
2736
+ .widget .widget-content > .acf-field.acf-accordion {
2737
+ border: #dfdfdf solid 1px;
2738
+ margin-bottom: 10px;
2739
+
2740
+ .acf-accordion-title {
2741
+ margin-bottom: 0;
2742
+ }
2743
+
2744
+ + .acf-field.acf-accordion {
2745
+ margin-top: -11px;
2746
+ }
2747
+ }
2748
+
2749
+
2750
+ // seamless
2751
+ .acf-postbox.seamless > .acf-fields > .acf-field.acf-accordion {
2752
+ border: #e5e5e5 solid 1px;
2753
+
2754
+ // siblings
2755
+ + .acf-field.acf-accordion {
2756
+ margin-top: -1px;
2757
+ }
2758
+ }
2759
+
2760
+
2761
+ // media modal
2762
+ .media-modal .compat-attachment-fields .acf-field.acf-accordion {
2763
+
2764
+ // siblings
2765
+ + .acf-field.acf-accordion {
2766
+ margin-top: -1px;
2767
+ }
2768
+
2769
+ // input
2770
+ > .acf-input {
2771
+ width: 100%;
2772
+ }
2773
+
2774
+ // table
2775
+ .compat-attachment-fields > tbody > tr > td {
2776
+ padding-bottom: 5px;
2777
+ }
2778
+ }
assets/build/css/_forms.scss ADDED
@@ -0,0 +1,306 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------------------------------------
2
+ *
3
+ * User
4
+ *
5
+ *--------------------------------------------------------------------------------------------*/
6
+
7
+ .form-table > tbody {
8
+
9
+ /* field */
10
+ > .acf-field {
11
+
12
+ /* label */
13
+ > .acf-label {
14
+ padding: 20px 10px 20px 0;
15
+ width: 210px;
16
+
17
+ /* rtl */
18
+ html[dir="rtl"] & {
19
+ padding: 20px 0 20px 10px;
20
+ }
21
+
22
+ label {
23
+ font-size: 14px;
24
+ color: #23282d;
25
+ }
26
+
27
+ }
28
+
29
+
30
+ /* input */
31
+ > .acf-input {
32
+ padding: 15px 10px;
33
+
34
+ /* rtl */
35
+ html[dir="rtl"] & {
36
+ padding: 15px 10px 15px 5%;
37
+ }
38
+ }
39
+
40
+ }
41
+
42
+
43
+ /* tab wrap */
44
+ > .acf-tab-wrap td {
45
+ padding: 15px 5% 15px 0;
46
+
47
+ /* rtl */
48
+ html[dir="rtl"] & {
49
+ padding: 15px 0 15px 5%;
50
+ }
51
+
52
+ }
53
+
54
+
55
+ /* misc */
56
+ .form-table th.acf-th {
57
+ width: auto;
58
+ }
59
+
60
+ }
61
+
62
+ #your-profile,
63
+ #createuser {
64
+
65
+ /* override for user css */
66
+ .acf-field input[type="text"],
67
+ .acf-field input[type="password"],
68
+ .acf-field input[type="number"],
69
+ .acf-field input[type="search"],
70
+ .acf-field input[type="email"],
71
+ .acf-field input[type="url"],
72
+ .acf-field select {
73
+ max-width: 25em;
74
+ }
75
+
76
+ .acf-field textarea {
77
+ max-width: 500px;
78
+ }
79
+
80
+
81
+ /* allow sub fields to display correctly */
82
+ .acf-field .acf-field input[type="text"],
83
+ .acf-field .acf-field input[type="password"],
84
+ .acf-field .acf-field input[type="number"],
85
+ .acf-field .acf-field input[type="search"],
86
+ .acf-field .acf-field input[type="email"],
87
+ .acf-field .acf-field input[type="url"],
88
+ .acf-field .acf-field textarea,
89
+ .acf-field .acf-field select {
90
+ max-width: none;
91
+ }
92
+ }
93
+
94
+ #registerform {
95
+
96
+ h2 {
97
+ margin: 1em 0;
98
+ }
99
+
100
+ .acf-field {
101
+ margin-top: 0;
102
+
103
+ .acf-label {
104
+ margin-bottom: 0;
105
+
106
+ label {
107
+ font-weight: normal;
108
+ line-height: 1.5;
109
+ }
110
+ }
111
+
112
+ /*
113
+ .acf-input {
114
+ input {
115
+ font-size: 24px;
116
+ padding: 5px;
117
+ height: auto;
118
+ }
119
+ }
120
+ */
121
+ }
122
+
123
+ p.submit {
124
+ text-align: right;
125
+ }
126
+
127
+ }
128
+
129
+ /*--------------------------------------------------------------------------------------------
130
+ *
131
+ * Term
132
+ *
133
+ *--------------------------------------------------------------------------------------------*/
134
+
135
+ // add term
136
+ #acf-term-fields {
137
+ padding-right: 5%;
138
+
139
+ > .acf-field {
140
+
141
+ > .acf-label {
142
+ margin: 0;
143
+
144
+ label {
145
+ font-size: 12px;
146
+ font-weight: normal;
147
+ }
148
+ }
149
+ }
150
+
151
+ }
152
+
153
+ p.submit .spinner,
154
+ p.submit .acf-spinner {
155
+ vertical-align: top;
156
+ float: none;
157
+ margin: 4px 4px 0;
158
+ }
159
+
160
+
161
+ // edit term
162
+ #edittag .acf-fields.-left {
163
+
164
+ > .acf-field {
165
+ padding-left: 220px;
166
+
167
+ &:before {
168
+ width: 209px;
169
+ }
170
+
171
+ > .acf-label {
172
+ width: 220px;
173
+ margin-left: -220px;
174
+ padding: 0 10px;
175
+ }
176
+
177
+ > .acf-input {
178
+ padding: 0;
179
+ }
180
+ }
181
+ }
182
+
183
+ #edittag > .acf-fields.-left {
184
+ width: 96%;
185
+
186
+ > .acf-field {
187
+
188
+ > .acf-label {
189
+ padding-left: 0;
190
+ }
191
+ }
192
+ }
193
+
194
+
195
+ /*--------------------------------------------------------------------------------------------
196
+ *
197
+ * Comment
198
+ *
199
+ *--------------------------------------------------------------------------------------------*/
200
+
201
+ .editcomment td:first-child {
202
+ white-space: nowrap;
203
+ width: 131px;
204
+ }
205
+
206
+
207
+ /*--------------------------------------------------------------------------------------------
208
+ *
209
+ * Widget
210
+ *
211
+ *--------------------------------------------------------------------------------------------*/
212
+
213
+ #widgets-right .widget .acf-field .description {
214
+ padding-left: 0;
215
+ padding-right: 0;
216
+ }
217
+
218
+ .acf-widget-fields {
219
+
220
+ > .acf-field {
221
+
222
+ .acf-label {
223
+ margin-bottom: 5px;
224
+
225
+ label {
226
+ font-weight: normal;
227
+ margin: 0;
228
+ }
229
+ }
230
+ }
231
+ }
232
+
233
+ /*--------------------------------------------------------------------------------------------
234
+ *
235
+ * Nav Menu
236
+ *
237
+ *--------------------------------------------------------------------------------------------*/
238
+
239
+ .acf-menu-settings {
240
+ border-top: 1px solid #eee;
241
+ margin-top: 2em;
242
+
243
+ // seamless
244
+ &.-seamless {
245
+ border-top: none;
246
+ margin-top: 15px;
247
+
248
+ > h2 { display: none; }
249
+ }
250
+
251
+ // Fix relationship conflict.
252
+ .list li {
253
+ display: block;
254
+ margin-bottom: 0;
255
+ }
256
+ }
257
+
258
+ .acf-menu-item-fields {
259
+ margin-right: 10px;
260
+ float: left;
261
+ }
262
+
263
+ /*---------------------------------------------------------------------------------------------
264
+ *
265
+ * Attachment Form (single)
266
+ *
267
+ *---------------------------------------------------------------------------------------------*/
268
+
269
+ #post .compat-attachment-fields {
270
+
271
+ .compat-field-acf-form-data {
272
+ display: none;
273
+ }
274
+
275
+ &,
276
+ > tbody,
277
+ > tbody > tr,
278
+ > tbody > tr > th,
279
+ > tbody > tr > td {
280
+ display: block;
281
+ }
282
+
283
+ > tbody > .acf-field {
284
+ margin: 15px 0;
285
+
286
+ > .acf-label {
287
+ margin: 0;
288
+
289
+ label {
290
+ margin: 0;
291
+ padding: 0;
292
+
293
+ p {
294
+ margin: 0 0 3px !important;
295
+ }
296
+ }
297
+ }
298
+
299
+ > .acf-input {
300
+ margin: 0;
301
+ }
302
+ }
303
+ }
304
+
305
+
306
+
assets/build/css/_global.scss ADDED
@@ -0,0 +1,1812 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------------------------------------
2
+ *
3
+ * Global
4
+ *
5
+ *--------------------------------------------------------------------------------------------*/
6
+
7
+ /* Horizontal List */
8
+ .acf-hl { padding: 0; margin: 0; list-style: none; display: block; position: relative; }
9
+ .acf-hl > li { float: left; display: block; margin: 0; padding: 0; }
10
+ .acf-hl > li.acf-fr { float: right; }
11
+
12
+
13
+ /* Horizontal List: Clearfix */
14
+ .acf-hl:before, .acf-hl:after,
15
+ .acf-bl:before, .acf-bl:after,
16
+ .acf-cf:before, .acf-cf:after {
17
+ content: "";
18
+ display: block;
19
+ line-height: 0;
20
+ }
21
+ .acf-hl:after,
22
+ .acf-bl:after,
23
+ .acf-cf:after {
24
+ clear: both;
25
+ }
26
+
27
+
28
+ /* Block List */
29
+ .acf-bl { padding: 0; margin: 0; list-style: none; display: block; position: relative; }
30
+ .acf-bl > li { display: block; margin: 0; padding: 0; float: none; }
31
+
32
+
33
+ /* Visibility */
34
+ .acf-hidden {
35
+ display: none !important;
36
+ }
37
+ .acf-empty {
38
+ display: table-cell !important;
39
+ * { display: none !important; }
40
+ }
41
+
42
+ /* Float */
43
+ .acf-fl { float: left; }
44
+ .acf-fr { float: right; }
45
+ .acf-fn { float: none; }
46
+
47
+
48
+ /* Align */
49
+ .acf-al { text-align: left; }
50
+ .acf-ar { text-align: right; }
51
+ .acf-ac { text-align: center; }
52
+
53
+
54
+ /* loading */
55
+ .acf-loading,
56
+ .acf-spinner {
57
+ display: inline-block;
58
+ height: 20px;
59
+ width: 20px;
60
+ vertical-align: text-top;
61
+ background: transparent url(../images/spinner.gif) no-repeat 50% 50%;
62
+ }
63
+
64
+
65
+ /* spinner */
66
+ .acf-spinner {
67
+ display: none;
68
+ }
69
+
70
+ .acf-spinner.is-active {
71
+ display: inline-block;
72
+ }
73
+
74
+
75
+ /* WP < 4.2 */
76
+ .spinner.is-active {
77
+ display: inline-block;
78
+ }
79
+
80
+
81
+ /* required */
82
+ .acf-required {
83
+ color: #f00;
84
+ }
85
+
86
+
87
+ /* show on hover */
88
+ .acf-soh .acf-soh-target {
89
+ -webkit-transition: opacity 0.25s 0s ease-in-out, visibility 0s linear 0.25s;
90
+ -moz-transition: opacity 0.25s 0s ease-in-out, visibility 0s linear 0.25s;
91
+ -o-transition: opacity 0.25s 0s ease-in-out, visibility 0s linear 0.25s;
92
+ transition: opacity 0.25s 0s ease-in-out, visibility 0s linear 0.25s;
93
+
94
+ visibility: hidden;
95
+ opacity: 0;
96
+ }
97
+
98
+ .acf-soh:hover .acf-soh-target {
99
+ -webkit-transition-delay:0s;
100
+ -moz-transition-delay:0s;
101
+ -o-transition-delay:0s;
102
+ transition-delay:0s;
103
+
104
+ visibility: visible;
105
+ opacity: 1;
106
+ }
107
+
108
+
109
+ /* show if value */
110
+ .show-if-value { display: none; }
111
+ .hide-if-value { display: block; }
112
+
113
+ .has-value .show-if-value { display: block; }
114
+ .has-value .hide-if-value { display: none; }
115
+
116
+
117
+ /* select2 WP animation fix */
118
+ .select2-search-choice-close {
119
+ -webkit-transition: none;
120
+ -moz-transition: none;
121
+ -o-transition: none;
122
+ transition: none;
123
+ }
124
+
125
+
126
+ /*---------------------------------------------------------------------------------------------
127
+ *
128
+ * tooltip
129
+ *
130
+ *---------------------------------------------------------------------------------------------*/
131
+
132
+ /* tooltip */
133
+ .acf-tooltip {
134
+ background: #2F353E;
135
+ border-radius: 5px;
136
+ color: #fff;
137
+ padding: 5px 10px;
138
+ position: absolute;
139
+ font-size: 12px;
140
+ line-height: 1.4em;
141
+ z-index: 900000;
142
+
143
+
144
+ /* tip */
145
+ &:before {
146
+ border: solid;
147
+ border-color: transparent;
148
+ border-width: 6px;
149
+ content: "";
150
+ position: absolute;
151
+ }
152
+
153
+
154
+ /* positions */
155
+ &.top {
156
+ margin-top: -8px;
157
+
158
+ &:before {
159
+ top: 100%;
160
+ left: 50%;
161
+ margin-left: -6px;
162
+ border-top-color: #2F353E;
163
+ border-bottom-width: 0;
164
+ }
165
+ }
166
+
167
+ &.right {
168
+ margin-left: 8px;
169
+
170
+ &:before {
171
+ top: 50%;
172
+ margin-top: -6px;
173
+ right: 100%;
174
+ border-right-color: #2F353E;
175
+ border-left-width: 0;
176
+ }
177
+ }
178
+
179
+ &.bottom {
180
+ margin-top: 8px;
181
+
182
+ &:before {
183
+ bottom: 100%;
184
+ left: 50%;
185
+ margin-left: -6px;
186
+ border-bottom-color: #2F353E;
187
+ border-top-width: 0;
188
+ }
189
+ }
190
+
191
+ &.left {
192
+ margin-left: -8px;
193
+
194
+ &:before {
195
+ top: 50%;
196
+ margin-top: -6px;
197
+ left: 100%;
198
+ border-left-color: #2F353E;
199
+ border-right-width: 0;
200
+ }
201
+ }
202
+
203
+ .acf-overlay {
204
+ z-index: -1;
205
+ }
206
+
207
+ }
208
+
209
+
210
+ /* confirm */
211
+ .acf-tooltip.-confirm {
212
+ z-index: 900001; // +1 higher than .acf-tooltip
213
+
214
+ a {
215
+ text-decoration: none;
216
+ color: #9ea3a8;
217
+
218
+ &:hover {
219
+ text-decoration: underline;
220
+ }
221
+
222
+ &[data-event="confirm"] {
223
+ color: #F55E4F;
224
+ }
225
+ }
226
+ }
227
+
228
+ .acf-overlay {
229
+ position: fixed;
230
+ top: 0;
231
+ bottom: 0;
232
+ left: 0;
233
+ right: 0;
234
+ cursor: default;
235
+ }
236
+
237
+ .acf-tooltip-target {
238
+ position: relative;
239
+ z-index: 900002; // +1 higher than .acf-tooltip
240
+ }
241
+
242
+
243
+ /*---------------------------------------------------------------------------------------------
244
+ *
245
+ * loading
246
+ *
247
+ *---------------------------------------------------------------------------------------------*/
248
+ .acf-loading-overlay {
249
+ position: absolute;
250
+ top: 0;
251
+ bottom: 0;
252
+ left: 0;
253
+ right: 0;
254
+ cursor: default;
255
+ z-index: 99;
256
+ background: rgba(249, 249, 249, 0.5);
257
+
258
+ i {
259
+ @include centered();
260
+ }
261
+ }
262
+
263
+
264
+ /*---------------------------------------------------------------------------------------------
265
+ *
266
+ * callout
267
+ *
268
+ *---------------------------------------------------------------------------------------------*/
269
+
270
+ .acf-callout {
271
+ margin: 20px 0;
272
+ padding: 20px;
273
+
274
+ background-color: #FCF8F2;
275
+ border-left: 3px solid #F0AD4E;
276
+ }
277
+
278
+ .acf-callout h4 {
279
+ color: #F0AD4E;
280
+ margin: 0 !important;
281
+ }
282
+
283
+ .acf-callout p {
284
+ margin-bottom: 0;
285
+ }
286
+
287
+ .acf-callout.danger {
288
+ border-color: #D9534F;
289
+ background-color: #FDF7F7;
290
+ }
291
+
292
+ .acf-callout.danger h4 {
293
+ color: #D9534F;
294
+ }
295
+
296
+ .acf-callout.success {
297
+ background-color: #f4faf6;
298
+ border-color: #bcf1c5;
299
+ }
300
+
301
+ .acf-callout.success h4 {
302
+ color: #3aad60;
303
+ }
304
+
305
+
306
+ /*--------------------------------------------------------------------------------------------
307
+ *
308
+ * acf-icon
309
+ *
310
+ *--------------------------------------------------------------------------------------------*/
311
+
312
+ @font-face {
313
+ font-family: 'acf';
314
+ src: url('../font/acf.eot?57601716');
315
+ src: url('../font/acf.eot?57601716#iefix') format('embedded-opentype'),
316
+ url('../font/acf.woff2?57601716') format('woff2'),
317
+ url('../font/acf.woff?57601716') format('woff'),
318
+ url('../font/acf.ttf?57601716') format('truetype'),
319
+ url('../font/acf.svg?57601716#acf') format('svg');
320
+ font-weight: normal;
321
+ font-style: normal;
322
+ }
323
+
324
+ .acf-icon:before {
325
+ font-family: "acf";
326
+ font-style: normal;
327
+ font-weight: normal;
328
+ speak: none;
329
+
330
+ display: inline-block;
331
+ text-decoration: inherit;
332
+ width: 1em;
333
+ // margin-right: .2em;
334
+ text-align: center;
335
+ /* opacity: .8; */
336
+
337
+ /* For safety - reset parent styles, that can break glyph codes*/
338
+ font-variant: normal;
339
+ text-transform: none;
340
+
341
+ /* fix buttons height, for twitter bootstrap */
342
+ line-height: 1em;
343
+
344
+ /* Font smoothing. That was taken from TWBS */
345
+ -webkit-font-smoothing: antialiased;
346
+ -moz-osx-font-smoothing: grayscale;
347
+
348
+ /* more consistent vertical align */
349
+ position: relative;
350
+ }
351
+
352
+ .acf-icon.-plus:before { content: '\e800'; } /* '' */
353
+ .acf-icon.-minus:before { content: '\e801'; } /* '' */
354
+ .acf-icon.-cancel:before { content: '\e802'; } /* '' */
355
+ .acf-icon.-pencil:before { content: '\e803'; top: -1px; } /* '' */
356
+ .acf-icon.-location:before { content: '\e804'; } /* '' */
357
+ .acf-icon.-down:before { content: '\e805'; top: 1px; } /* '' */
358
+ .acf-icon.-left:before { content: '\e806'; left: -1px; } /* '' */
359
+ .acf-icon.-right:before { content: '\e807'; left: 1px; } /* '' */
360
+ .acf-icon.-up:before { content: '\e808'; top: -1px; } /* '' */
361
+ .acf-icon.-sync:before { content: '\e809'; } /* '' */
362
+ .acf-icon.-globe:before { content: '\e80a'; } /* '' */
363
+ .acf-icon.-picture:before { content: '\e80b'; } /* '' */
364
+ .acf-icon.-check:before { content: '\e80c'; } /* '' */
365
+ .acf-icon.-dot-3:before { content: '\e80d'; } /* '' */
366
+ .acf-icon.-arrow-combo:before { content: '\e80e'; } /* '' */
367
+ .acf-icon.-arrow-up:before { content: '\e810'; top: -1px; } /* '' */
368
+ .acf-icon.-arrow-down:before { content: '\e80f'; top: 1px; } /* '' */
369
+ .acf-icon.-search:before { content: '\e811'; } /* '' */
370
+ .acf-icon.-link-ext:before { content: '\f08e'; } /* '' */
371
+
372
+
373
+ /* collapse */
374
+ .acf-icon.-collapse:before { content: '\e810'; top: -1px; } /* arrow-up */
375
+ .-collapsed .acf-icon.-collapse:before { content: '\e80f'; top: 1px; } /* arrow-down */
376
+
377
+
378
+ /* default */
379
+ .acf-icon {
380
+ display: inline-block;
381
+ height: 26px;
382
+ width: 26px;
383
+ border: transparent solid 1px;
384
+ border-radius: 100%;
385
+
386
+ font-size: 16px;
387
+ line-height: 26px;
388
+ text-align: center;
389
+ text-decoration: none;
390
+ vertical-align: top;
391
+ box-sizing: content-box;
392
+ }
393
+
394
+
395
+ /* elements */
396
+ span.acf-icon {
397
+ color: #999;
398
+ border-color: #BBB;
399
+ background-color: #fff;
400
+ }
401
+
402
+
403
+ /* icon */
404
+ a.acf-icon {
405
+ color: #999;
406
+ border-color: #BBB;
407
+ background-color: #fff;
408
+
409
+ position: relative;
410
+ overflow: hidden;
411
+ transition: none;
412
+
413
+
414
+ /* clear */
415
+ &.-clear {
416
+ color: #444;
417
+ background: transparent;
418
+ border: none;
419
+ }
420
+
421
+
422
+ /* light*/
423
+ &.light {
424
+ border: none;
425
+ padding: 1px;
426
+ background: #F5F5F5;
427
+ color: #72777c;
428
+ }
429
+
430
+
431
+ /* states */
432
+ &:hover {
433
+ border-color: transparent;
434
+ background: $acf_blue;
435
+ color: #fff;
436
+ }
437
+
438
+ &:active {
439
+ color: #fff;
440
+ background-color: darken($acf_blue, 5%);
441
+ }
442
+
443
+
444
+ /* remove WP outline box-shadow */
445
+ &:active,
446
+ &:focus {
447
+ outline: none;
448
+ box-shadow: none;
449
+ }
450
+
451
+
452
+ /* red */
453
+ &.-minus,
454
+ &.-cancel {
455
+
456
+ &:hover {
457
+ background-color: #F55E4F;
458
+ }
459
+
460
+ &:active {
461
+ background-color: darken(#F55E4F, 5%);
462
+ }
463
+
464
+ }
465
+
466
+ }
467
+
468
+
469
+ /* minor tweaks */
470
+ .acf-icon.-pencil {
471
+ font-size: 15px;
472
+ }
473
+
474
+ .acf-icon.-location {
475
+ font-size: 18px;
476
+ }
477
+
478
+
479
+ /* sizes */
480
+ .acf-icon.small,
481
+ .acf-icon.-small {
482
+ width: 18px;
483
+ height: 18px;
484
+ line-height: 18px;
485
+ font-size: 14px;
486
+ }
487
+
488
+
489
+ /* dark */
490
+ .acf-icon.dark {
491
+ border-color: transparent;
492
+ background: #23282D;
493
+ color: #eee;
494
+ }
495
+
496
+ a.acf-icon.dark:hover {
497
+ border-color: transparent;
498
+ background: #191E23;
499
+ color: #00b9eb;
500
+ }
501
+
502
+ a.acf-icon.-minus.dark:hover,
503
+ a.acf-icon.-cancel.dark:hover {
504
+ color: #D54E21;
505
+ }
506
+
507
+
508
+ /* grey */
509
+ .acf-icon.grey {
510
+ border-color: transparent;
511
+ background: #b4b9be;
512
+ color: #fff;
513
+ }
514
+
515
+ a.acf-icon.grey:hover {
516
+ border-color: transparent;
517
+ background: #00A0D2;
518
+ color: #fff;
519
+ }
520
+
521
+ a.acf-icon.-minus.grey:hover,
522
+ a.acf-icon.-cancel.grey:hover {
523
+ background: #32373C;
524
+ }
525
+
526
+
527
+ /* red */
528
+ .acf-icon.red {
529
+ border-color: transparent;
530
+ background-color: #F55E4F;
531
+ color: #fff;
532
+ }
533
+
534
+
535
+ /* yellow */
536
+ .acf-icon.yellow {
537
+ border-color: transparent;
538
+ background-color: #FDBC40;
539
+ color: #fff;
540
+ }
541
+
542
+
543
+ /* logo */
544
+ .acf-icon.logo {
545
+ width: 150px;
546
+ height: 150px;
547
+ background: #5EE8BF;
548
+
549
+ border: 0 none;
550
+ position: absolute;
551
+ right: 0;
552
+ top: 0;
553
+ }
554
+
555
+
556
+ /*--------------------------------------------------------------------------------------------
557
+ *
558
+ * acf-box
559
+ *
560
+ *--------------------------------------------------------------------------------------------*/
561
+
562
+ .acf-box {
563
+ background: #FFFFFF;
564
+ border: 1px solid #E5E5E5;
565
+ position: relative;
566
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
567
+
568
+ /* title */
569
+ .title {
570
+ border-bottom: 1px solid #EEEEEE;
571
+ margin: 0;
572
+ padding: 15px;
573
+
574
+ h3 {
575
+ font-size: 14px;
576
+ line-height: 1em;
577
+ margin: 0;
578
+ padding: 0;
579
+ }
580
+ }
581
+
582
+
583
+ .inner {
584
+ padding: 15px;
585
+ }
586
+
587
+ h2 {
588
+ color: #333333;
589
+ font-size: 26px;
590
+ line-height: 1.25em;
591
+ margin: 0.25em 0 0.75em;
592
+ padding: 0;
593
+ }
594
+
595
+ h3 {
596
+ margin: 1.5em 0 0;
597
+ }
598
+
599
+ p {
600
+ margin-top: 0.5em;
601
+ }
602
+
603
+ a {
604
+ text-decoration: none;
605
+ }
606
+
607
+ i {
608
+ &.dashicons-external {
609
+ margin-top: -1px;
610
+ }
611
+ }
612
+
613
+ /* footer */
614
+ .footer {
615
+ border-top: 1px solid #eee;
616
+ padding: 12px;
617
+ font-size: 13px;
618
+ line-height: 1.5;
619
+
620
+ p {
621
+ margin: 0;
622
+ }
623
+ }
624
+ }
625
+
626
+ /*--------------------------------------------------------------------------------------------
627
+ *
628
+ * acf-notice
629
+ *
630
+ *--------------------------------------------------------------------------------------------*/
631
+
632
+ .acf-notice {
633
+ position: relative;
634
+ display: block;
635
+ color: #fff;
636
+ margin: 5px 0 15px;
637
+ padding: 3px 12px;
638
+ background: $acf_notice;
639
+ border-left: darken($acf_notice, 8%) solid 4px;
640
+
641
+ p {
642
+ font-size: 13px;
643
+ line-height: 1.5;
644
+ margin: 0.5em 0;
645
+ text-shadow: none;
646
+ color: inherit;
647
+ }
648
+
649
+ a.acf-notice-dismiss {
650
+ position: absolute;
651
+ border-color: transparent;
652
+ top: 9px;
653
+ right: 12px;
654
+ color: #fff;
655
+ background: rgba(0,0,0,0.1);
656
+
657
+ &:hover {
658
+ background: rgba(0,0,0,0.2);
659
+ }
660
+ }
661
+
662
+ // dismiss
663
+ &.-dismiss {
664
+ padding-right: 40px;
665
+ }
666
+
667
+ // error
668
+ &.-error {
669
+ background: $acf_error;
670
+ border-color: darken($acf_error, 8%);
671
+ }
672
+
673
+ // success
674
+ &.-success {
675
+ background: $acf_success;
676
+ border-color: darken($acf_success, 8%);
677
+ }
678
+
679
+ // warning
680
+ &.-warning {
681
+ background: $acf_warning;
682
+ border-color: darken($acf_warning, 8%);
683
+ }
684
+ }
685
+
686
+
687
+ /*--------------------------------------------------------------------------------------------
688
+ *
689
+ * acf-table
690
+ *
691
+ *--------------------------------------------------------------------------------------------*/
692
+
693
+ .acf-table {
694
+ border: #DFDFDF solid 1px;
695
+ background: #fff;
696
+ border-spacing: 0;
697
+ border-radius: 0;
698
+ table-layout: auto;
699
+ padding: 0;
700
+ margin: 0;
701
+ width: 100%;
702
+ clear: both;
703
+ box-sizing: content-box;
704
+
705
+ /* defaults */
706
+ > tbody > tr,
707
+ > thead > tr {
708
+
709
+ > th, > td {
710
+ padding: 8px;
711
+ vertical-align: top;
712
+ background: #fff;
713
+ text-align: left;
714
+ border-style: solid;
715
+ font-weight: normal;
716
+ }
717
+
718
+ > th {
719
+ position: relative;
720
+ color: #333333;
721
+ }
722
+
723
+ }
724
+
725
+
726
+ /* thead */
727
+ > thead {
728
+
729
+ > tr {
730
+
731
+ > th {
732
+ border-color: #E1E1E1;
733
+ border-width: 0 0 1px 1px;
734
+
735
+ &:first-child {
736
+ border-left-width: 0;
737
+ }
738
+ }
739
+
740
+ }
741
+
742
+ }
743
+
744
+
745
+ /* tbody */
746
+ > tbody {
747
+
748
+ > tr {
749
+ z-index: 1;
750
+
751
+ > td {
752
+ border-color: #EDEDED;
753
+ border-width: 1px 0 0 1px;
754
+
755
+ &:first-child {
756
+ border-left-width: 0;
757
+ }
758
+ }
759
+
760
+ &:first-child > td {
761
+ border-top-width: 0;
762
+ }
763
+ }
764
+
765
+ }
766
+
767
+
768
+ /* -clear */
769
+ &.-clear {
770
+ border: 0 none;
771
+
772
+ > tbody > tr,
773
+ > thead > tr {
774
+
775
+ > td, >th {
776
+ border: 0 none;
777
+ padding: 4px;
778
+ }
779
+ }
780
+ }
781
+ }
782
+
783
+
784
+ /* remove tr */
785
+ .acf-remove-element {
786
+ -webkit-transition: all 0.25s ease-out;
787
+ -moz-transition: all 0.25s ease-out;
788
+ -o-transition: all 0.25s ease-out;
789
+ transition: all 0.25s ease-out;
790
+
791
+ transform: translate(50px, 0);
792
+ opacity: 0;
793
+ }
794
+
795
+
796
+ /* fade-up */
797
+ .acf-fade-up {
798
+ -webkit-transition: all 0.25s ease-out;
799
+ -moz-transition: all 0.25s ease-out;
800
+ -o-transition: all 0.25s ease-out;
801
+ transition: all 0.25s ease-out;
802
+
803
+ transform: translate(0, -10px);
804
+ opacity: 0;
805
+ }
806
+
807
+
808
+ /*---------------------------------------------------------------------------------------------
809
+ *
810
+ * wp-admin
811
+ *
812
+ *---------------------------------------------------------------------------------------------*/
813
+
814
+ /* Menu */
815
+ #adminmenu a[href="edit.php?post_type=acf-field-group&page=acf-settings-info"] {
816
+ display: none;
817
+ }
818
+
819
+
820
+ /*---------------------------------------------------------------------------------------------
821
+ *
822
+ * Field Group List
823
+ *
824
+ *---------------------------------------------------------------------------------------------*/
825
+
826
+ #icon-edit.icon32-posts-acf-field-group {
827
+ background-position: -11px -5px;
828
+ }
829
+
830
+ #acf-field-group-wrap {
831
+
832
+ .tablenav,
833
+ p.search-box {
834
+ display: none;
835
+ }
836
+
837
+ .wp-list-table {
838
+
839
+ .column-acf-fg-description,
840
+ .column-acf-fg-description:before {
841
+ display: none !important; /* important needed to override mobile */
842
+ }
843
+
844
+ .column-acf-fg-count {
845
+ width: 10%;
846
+ }
847
+
848
+ .column-acf-fg-status {
849
+ width: 10%;
850
+ }
851
+
852
+ }
853
+
854
+ .tablenav.bottom {
855
+ display: block;
856
+ }
857
+
858
+ .acf-description {
859
+ font-weight: normal;
860
+ font-size: 13px;
861
+ color: #999;
862
+ margin-left: 7px;
863
+ font-style: italic;
864
+ }
865
+
866
+ }
867
+
868
+
869
+
870
+
871
+ /* subsubsub */
872
+ #acf-field-group-wrap .subsubsub {
873
+
874
+ /* WPML */
875
+ margin-bottom: 3px;
876
+
877
+ ul {
878
+ margin: 0;
879
+ }
880
+
881
+ + .subsubsub {
882
+ margin-top: 0;
883
+ }
884
+
885
+ /* search */
886
+ a:focus {
887
+ box-shadow: none;
888
+ }
889
+
890
+ }
891
+
892
+
893
+
894
+ /* columns (replicate post edit layout) */
895
+ .acf-columns-2 {
896
+ margin-right: 300px;
897
+ clear: both;
898
+ @include clearfix();
899
+
900
+ /* rtl */
901
+ html[dir="rtl"] & {
902
+ margin-right: 0;
903
+ margin-left: 300px;
904
+ }
905
+
906
+ .acf-column-1 {
907
+ float: left;
908
+ width: 100%;
909
+
910
+ /* rtl */
911
+ html[dir="rtl"] & {
912
+ float: right;
913
+ }
914
+ }
915
+
916
+ .acf-column-2 {
917
+ float: right;
918
+ margin-right: -300px;
919
+ width: 280px;
920
+
921
+ /* rtl */
922
+ html[dir="rtl"] & {
923
+ float: left;
924
+ margin-right: 0;
925
+ margin-left: -300px;
926
+ }
927
+ }
928
+
929
+ }
930
+
931
+
932
+ /* search */
933
+ #acf-field-group-wrap .search-box {
934
+
935
+ &:after {
936
+ display: block;
937
+ content: "";
938
+ height: 5px;
939
+ }
940
+
941
+ }
942
+
943
+ .acf-clear {
944
+ clear: both;
945
+ }
946
+
947
+
948
+ /* mobile compatibilty */
949
+ @media screen and (max-width: 782px) {
950
+
951
+ #acf-field-group-wrap #the-list .acf-icon:after {
952
+ content: attr(title);
953
+ position: absolute;
954
+ margin-left: 5px;
955
+ font-size: 13px;
956
+ line-height: 18px;
957
+ font-style: normal;
958
+ color: #444;
959
+ }
960
+
961
+ }
962
+
963
+
964
+ /*---------------------------------------------------------------------------------------------
965
+ *
966
+ * Fake table
967
+ *
968
+ *---------------------------------------------------------------------------------------------*/
969
+
970
+ .acf-thead,
971
+ .acf-tbody,
972
+ .acf-tfoot {
973
+ width: 100%;
974
+ padding: 0;
975
+ margin: 0;
976
+ }
977
+
978
+ .acf-thead > li,
979
+ .acf-tbody > li,
980
+ .acf-tfoot > li {
981
+ -webkit-box-sizing: border-box;
982
+ -moz-box-sizing: border-box;
983
+ box-sizing: border-box;
984
+
985
+ padding: 8px 15px;
986
+ font-size: 12px;
987
+ line-height: 14px;
988
+ }
989
+
990
+
991
+ .acf-thead {
992
+ border-bottom: #E1E1E1 solid 1px;
993
+ color: #23282d;
994
+ }
995
+
996
+ .acf-thead > li {
997
+ font-size: 14px;
998
+ line-height: 1.4em;
999
+ font-family: "Open Sans",sans-serif;
1000
+ font-weight: bold;
1001
+ }
1002
+
1003
+ .acf-tfoot {
1004
+ background: #f5f5f5;
1005
+ border-top: #dddddd solid 1px;
1006
+ }
1007
+
1008
+ .acf-tfoot > li {
1009
+ color: #7A9BBE;
1010
+ font-size: 12px;
1011
+ line-height: 27px;
1012
+ }
1013
+
1014
+ /*--------------------------------------------------------------------------------------------
1015
+ *
1016
+ * Settings
1017
+ *
1018
+ *--------------------------------------------------------------------------------------------*/
1019
+
1020
+ .acf-settings-wrap {
1021
+
1022
+ #poststuff {
1023
+ padding-top: 15px;
1024
+ }
1025
+
1026
+ .acf-box {
1027
+ margin: 20px 0;
1028
+ }
1029
+
1030
+ table {
1031
+ margin: 0;
1032
+
1033
+ .button {
1034
+ vertical-align: middle;
1035
+ }
1036
+ }
1037
+ }
1038
+
1039
+
1040
+ /*--------------------------------------------------------------------------------------------
1041
+ *
1042
+ * Settings: Add-ons
1043
+ *
1044
+ *--------------------------------------------------------------------------------------------*/
1045
+
1046
+ .add-ons-list {
1047
+ margin: 20px 0 0 -18px;
1048
+ max-width: 960px;
1049
+ }
1050
+
1051
+ .add-ons-list .add-on {
1052
+ width: 220px;
1053
+ margin: 0 0 20px 18px;
1054
+ float: left;
1055
+ }
1056
+
1057
+ .add-ons-list .add-on .inner {
1058
+ min-height: 90px;
1059
+ }
1060
+
1061
+ .add-ons-list .add-on-acf-pro {
1062
+ width: 940px;
1063
+ }
1064
+
1065
+ .add-ons-list .add-on .thumbnail {
1066
+
1067
+ }
1068
+
1069
+ .add-ons-list .add-on .thumbnail img {
1070
+ display: block;
1071
+ }
1072
+
1073
+ .add-ons-list .add-on h3 a {
1074
+ color: inherit;
1075
+ text-decoration: none;
1076
+ }
1077
+
1078
+ .add-ons-list .add-on h3 {
1079
+ margin: 0.5em 0;
1080
+ }
1081
+
1082
+
1083
+ /*--------------------------------------------------------------------------------------------
1084
+ *
1085
+ * acf-popup
1086
+ *
1087
+ *--------------------------------------------------------------------------------------------*/
1088
+
1089
+ #acf-popup {
1090
+ position: fixed;
1091
+ z-index: 900000;
1092
+ top: 0;
1093
+ left: 0;
1094
+ right: 0;
1095
+ bottom: 0;
1096
+ text-align: center;
1097
+
1098
+ // bg
1099
+ .bg {
1100
+ position: absolute;
1101
+ top: 0;
1102
+ left: 0;
1103
+ right: 0;
1104
+ bottom: 0;
1105
+ z-index: 0;
1106
+ background: rgba(0,0,0,0.25);
1107
+ }
1108
+
1109
+ &:before {
1110
+ content: '';
1111
+ display: inline-block;
1112
+ height: 100%;
1113
+ vertical-align: middle;
1114
+ }
1115
+
1116
+ // box
1117
+ .acf-popup-box {
1118
+ display: inline-block;
1119
+ vertical-align: middle;
1120
+ z-index: 1;
1121
+ min-width: 300px;
1122
+ min-height: 160px;
1123
+ border-color: #aaaaaa;
1124
+ box-shadow: 0 5px 30px -5px rgba(0, 0, 0, 0.25);
1125
+ text-align: left;
1126
+ @include rtl();
1127
+
1128
+ // title
1129
+ .title {
1130
+ min-height: 15px;
1131
+ line-height: 15px;
1132
+
1133
+ // icon
1134
+ .acf-icon {
1135
+ position: absolute;
1136
+ top: 10px;
1137
+ right: 10px;
1138
+
1139
+ // rtl
1140
+ html[dir="rtl"] & {
1141
+ right: auto;
1142
+ left: 10px;
1143
+ }
1144
+ }
1145
+ }
1146
+
1147
+ .inner {
1148
+ min-height: 50px;
1149
+
1150
+ // use margin instead of padding to allow inner elements marin to overlap and avoid large hitespace at top/bottom
1151
+ padding: 0;
1152
+ margin: 15px;
1153
+ }
1154
+
1155
+ // loading
1156
+ .loading {
1157
+ position: absolute;
1158
+ top: 45px;
1159
+ left: 0;
1160
+ right: 0;
1161
+ bottom: 0;
1162
+ z-index: 2;
1163
+ background: rgba(0,0,0,0.1);
1164
+ display: none;
1165
+
1166
+ i {
1167
+ @include centered();
1168
+ }
1169
+ }
1170
+
1171
+ }
1172
+ }
1173
+
1174
+
1175
+ // acf-submit
1176
+ .acf-submit {
1177
+ margin-bottom: 0;
1178
+ line-height: 28px; // .button height
1179
+
1180
+ // message
1181
+ span {
1182
+ float: right;
1183
+ color: #999;
1184
+
1185
+ &.-error {
1186
+ color: #dd4232;
1187
+ }
1188
+ }
1189
+
1190
+ // button (allow margin between loading)
1191
+ .button {
1192
+ margin-right: 5px;
1193
+ }
1194
+ }
1195
+
1196
+ /*--------------------------------------------------------------------------------------------
1197
+ *
1198
+ * upgrade notice
1199
+ *
1200
+ *--------------------------------------------------------------------------------------------*/
1201
+
1202
+ #acf-upgrade-notice {
1203
+ position: relative;
1204
+ background: #fff;
1205
+ border-left: 4px solid #00a0d2;
1206
+ padding: 20px;
1207
+ @include clearfix();
1208
+
1209
+ .col-content {
1210
+ float: left;
1211
+ width: 55%;
1212
+ padding-left: 90px;
1213
+ }
1214
+
1215
+ .col-actions {
1216
+ float: right;
1217
+ text-align: center;
1218
+ padding: 10px;
1219
+ }
1220
+
1221
+ img {
1222
+ float: left;
1223
+ width: 70px;
1224
+ height: 70px;
1225
+ margin: 0 0 0 -90px;
1226
+ }
1227
+
1228
+ h2 {
1229
+ font-size: 16px;
1230
+ margin: 2px 0 6.5px;
1231
+ }
1232
+
1233
+ p {
1234
+ padding: 0;
1235
+ margin: 0;
1236
+ }
1237
+
1238
+ .button:before {
1239
+ margin-top: 11px;
1240
+ }
1241
+
1242
+ // mobile
1243
+ @media screen and (max-width: $sm) {
1244
+
1245
+ .col-content,
1246
+ .col-actions {
1247
+ float: none;
1248
+ padding-left: 90px;
1249
+ width: auto;
1250
+ text-align: left;
1251
+ }
1252
+ }
1253
+ }
1254
+
1255
+
1256
+ /*--------------------------------------------------------------------------------------------
1257
+ *
1258
+ * Welcome
1259
+ *
1260
+ *--------------------------------------------------------------------------------------------*/
1261
+
1262
+ .acf-wrap {
1263
+
1264
+ h1 {
1265
+ margin-top: 0;
1266
+ padding-top: 20px;
1267
+ }
1268
+
1269
+ .about-text {
1270
+ margin-top: 0.5em;
1271
+ min-height: 50px;
1272
+ }
1273
+
1274
+ .about-headline-callout {
1275
+ font-size: 2.4em;
1276
+ font-weight: 300;
1277
+ line-height: 1.3;
1278
+ margin: 1.1em 0 0.2em;
1279
+ text-align: center;
1280
+ }
1281
+
1282
+ .feature-section {
1283
+ padding: 40px 0;
1284
+
1285
+ h2 {
1286
+ margin-top: 20px;
1287
+ }
1288
+ }
1289
+
1290
+ .changelog {
1291
+ list-style: disc;
1292
+ padding-left: 15px;
1293
+
1294
+ li {
1295
+ margin: 0 0 0.75em;
1296
+ }
1297
+ }
1298
+
1299
+ .acf-three-col {
1300
+ display: flex;
1301
+ flex-wrap: wrap;
1302
+ justify-content: space-between;
1303
+
1304
+ > div {
1305
+ flex: 1;
1306
+ align-self: flex-start;
1307
+ min-width: 31%;
1308
+ max-width: 31%;
1309
+
1310
+ @media screen and (max-width: $md) {
1311
+ min-width: 48%;
1312
+ }
1313
+
1314
+ @media screen and (max-width: $sm) {
1315
+ min-width: 100%;
1316
+ }
1317
+ }
1318
+
1319
+ h3 .badge {
1320
+ display: inline-block;
1321
+ vertical-align: top;
1322
+ border-radius: 5px;
1323
+ background: #fc9700;
1324
+ color: #fff;
1325
+ font-weight: normal;
1326
+ font-size: 12px;
1327
+ padding: 2px 5px;
1328
+ }
1329
+
1330
+ img + h3 {
1331
+ margin-top: 0.5em;
1332
+ }
1333
+ }
1334
+ }
1335
+
1336
+ /*--------------------------------------------------------------------------------------------
1337
+ *
1338
+ * acf-hl cols
1339
+ *
1340
+ *--------------------------------------------------------------------------------------------*/
1341
+
1342
+ .acf-hl[data-cols] {
1343
+ margin-left: -10px;
1344
+ margin-right: -10px;
1345
+
1346
+ > li {
1347
+ padding: 0 10px;
1348
+
1349
+ -webkit-box-sizing: border-box;
1350
+ -moz-box-sizing: border-box;
1351
+ box-sizing: border-box;
1352
+ }
1353
+
1354
+ }
1355
+
1356
+
1357
+ /* sizes */
1358
+ .acf-hl[data-cols="2"] > li { width: 50%; }
1359
+ .acf-hl[data-cols="3"] > li { width: 33.333%; }
1360
+ .acf-hl[data-cols="4"] > li { width: 25%; }
1361
+
1362
+
1363
+ /* mobile */
1364
+ @media screen and (max-width: $sm) {
1365
+
1366
+ .acf-hl[data-cols] {
1367
+ margin-left: 0;
1368
+ margin-right: 0;
1369
+ margin-top: -10px;
1370
+
1371
+ > li {
1372
+ width: 100% !important;
1373
+ padding: 10px 0 0;
1374
+ }
1375
+
1376
+ }
1377
+
1378
+ }
1379
+
1380
+
1381
+
1382
+ /*--------------------------------------------------------------------------------------------
1383
+ *
1384
+ * misc
1385
+ *
1386
+ *--------------------------------------------------------------------------------------------*/
1387
+
1388
+ .acf-actions {
1389
+ text-align: right;
1390
+ z-index: 1;
1391
+
1392
+ a {
1393
+ margin-left: 4px;
1394
+ }
1395
+
1396
+
1397
+ /* hover */
1398
+ &.-hover {
1399
+ position: absolute;
1400
+ display: none;
1401
+ top: 0;
1402
+ right: 0;
1403
+ padding: 5px;
1404
+ }
1405
+
1406
+
1407
+ /* rtl */
1408
+ html[dir="rtl"] & {
1409
+
1410
+ a {
1411
+ margin-left: 0;
1412
+ margin-right: 4px;
1413
+ }
1414
+
1415
+ &.-hover {
1416
+ right: auto;
1417
+ left: 0;
1418
+ }
1419
+
1420
+ }
1421
+ }
1422
+
1423
+
1424
+ /* ul compatibility */
1425
+ ul.acf-actions {
1426
+ li { float: right; margin-left: 4px; }
1427
+ }
1428
+
1429
+
1430
+ /*--------------------------------------------------------------------------------------------
1431
+ *
1432
+ * Plugins
1433
+ *
1434
+ *--------------------------------------------------------------------------------------------*/
1435
+
1436
+ .acf-plugin-upgrade-notice {
1437
+ font-weight: normal;
1438
+ color: #fff;
1439
+ background: #d54d21;
1440
+ padding: 1em;
1441
+ margin: 9px 0;
1442
+
1443
+ &:before {
1444
+ content: "\f348";
1445
+ display: inline-block;
1446
+ font: 400 18px/1 dashicons;
1447
+ speak: none;
1448
+ margin: 0 8px 0 -2px;
1449
+ -webkit-font-smoothing: antialiased;
1450
+ -moz-osx-font-smoothing: grayscale;
1451
+ vertical-align: top;
1452
+ }
1453
+
1454
+ h4 {
1455
+ display: none;
1456
+ }
1457
+
1458
+ ul,
1459
+ li {
1460
+ display: inline;
1461
+ color: inherit;
1462
+ list-style: none;
1463
+ }
1464
+
1465
+ li:after {
1466
+ content: '. ';
1467
+ display: inline;
1468
+ }
1469
+
1470
+ }
1471
+
1472
+
1473
+ /*--------------------------------------------------------------------------------------------
1474
+ *
1475
+ * RTL
1476
+ *
1477
+ *--------------------------------------------------------------------------------------------*/
1478
+
1479
+ html[dir="rtl"] .acf-fl { float: right; }
1480
+ html[dir="rtl"] .acf-fr { float: left; }
1481
+
1482
+ html[dir="rtl"] .acf-hl > li {
1483
+ float: right;
1484
+ }
1485
+
1486
+ html[dir="rtl"] .acf-hl > li.acf-fr {
1487
+ float: left;
1488
+ }
1489
+
1490
+ html[dir="rtl"] .acf-icon.logo {
1491
+ left: 0;
1492
+ right: auto;
1493
+ }
1494
+
1495
+
1496
+ html[dir="rtl"] .acf-table thead th {
1497
+ text-align: right;
1498
+ border-right-width: 1px;
1499
+ border-left-width: 0px;
1500
+ }
1501
+
1502
+ html[dir="rtl"] .acf-table > tbody > tr > td {
1503
+ text-align: right;
1504
+ border-right-width: 1px;
1505
+ border-left-width: 0px;
1506
+ }
1507
+
1508
+ html[dir="rtl"] .acf-table > thead > tr > th:first-child,
1509
+ html[dir="rtl"] .acf-table > tbody > tr > td:first-child {
1510
+ border-right-width: 0;
1511
+ }
1512
+
1513
+ html[dir="rtl"] .acf-table > tbody > tr > td.order + td {
1514
+ border-right-color: #e1e1e1;
1515
+ }
1516
+
1517
+
1518
+ /*---------------------------------------------------------------------------------------------
1519
+ *
1520
+ * acf-postbox-columns
1521
+ *
1522
+ *---------------------------------------------------------------------------------------------*/
1523
+
1524
+ .acf-postbox-columns {
1525
+ @include clearfix();
1526
+ position: relative;
1527
+ margin-top: -11px;
1528
+ margin-bottom: -11px;
1529
+ margin-left: -12px;
1530
+ margin-right: (280px - 12px);
1531
+
1532
+ .acf-postbox-main,
1533
+ .acf-postbox-side {
1534
+ @include border-box();
1535
+ padding: 0 12px 12px;
1536
+ }
1537
+
1538
+ .acf-postbox-main {
1539
+ float: left;
1540
+ width: 100%;
1541
+ }
1542
+
1543
+ .acf-postbox-side {
1544
+ float: right;
1545
+ width: 280px;
1546
+ margin-right: -280px;
1547
+
1548
+ &:before {
1549
+ content: "";
1550
+ display: block;
1551
+ position: absolute;
1552
+ width: 1px;
1553
+ height: 100%;
1554
+ top: 0;
1555
+ right: 0;
1556
+ background: #ebebeb;
1557
+ }
1558
+ }
1559
+ }
1560
+
1561
+
1562
+ /* mobile */
1563
+ @media only screen and (max-width: 850px) {
1564
+
1565
+ .acf-postbox-columns {
1566
+ margin: 0;
1567
+
1568
+ .acf-postbox-main,
1569
+ .acf-postbox-side {
1570
+ float: none;
1571
+ width: auto;
1572
+ margin: 0;
1573
+ padding: 0;
1574
+ }
1575
+
1576
+ .acf-postbox-side {
1577
+ margin-top: 1em;
1578
+
1579
+ &:before {
1580
+ display: none;
1581
+ }
1582
+ }
1583
+ }
1584
+ }
1585
+
1586
+
1587
+ /*---------------------------------------------------------------------------------------------
1588
+ *
1589
+ * acf-panel
1590
+ *
1591
+ *---------------------------------------------------------------------------------------------*/
1592
+
1593
+ .acf-panel {
1594
+ margin-top: -1px;
1595
+ border-top: 1px solid #e2e4e7;
1596
+ border-bottom: 1px solid #e2e4e7;
1597
+
1598
+ .acf-panel-title {
1599
+ margin: 0;
1600
+ padding: 12px;
1601
+ font-weight: bold;
1602
+ cursor: pointer;
1603
+ font-size: inherit;
1604
+
1605
+ i {
1606
+ float: right;
1607
+ }
1608
+ }
1609
+
1610
+ .acf-panel-inside {
1611
+ margin: 0;
1612
+ padding: 0 12px 12px;
1613
+ display: none;
1614
+ }
1615
+
1616
+ /* open */
1617
+ &.-open {
1618
+
1619
+ .acf-panel-inside {
1620
+ display: block;
1621
+ }
1622
+
1623
+ }
1624
+
1625
+
1626
+ /* inside postbox */
1627
+ .postbox & {
1628
+ margin-left: -12px;
1629
+ margin-right: -12px;
1630
+ }
1631
+
1632
+
1633
+ /* fields */
1634
+ .acf-field {
1635
+ margin: 20px 0 0;
1636
+
1637
+ .acf-label label {
1638
+ color: #555d66;
1639
+ font-weight: normal;
1640
+ }
1641
+
1642
+ &:first-child {
1643
+ margin-top: 0;
1644
+ }
1645
+ }
1646
+
1647
+ }
1648
+
1649
+
1650
+ /*---------------------------------------------------------------------------------------------
1651
+ *
1652
+ * Admin Tools
1653
+ *
1654
+ *---------------------------------------------------------------------------------------------*/
1655
+
1656
+ #acf-admin-tools {
1657
+
1658
+ .notice {
1659
+ margin-top: 10px;
1660
+ }
1661
+ }
1662
+
1663
+ .acf-meta-box-wrap {
1664
+ margin-top: 10px;
1665
+
1666
+ .postbox {
1667
+ @include border-box();
1668
+
1669
+ .inside {
1670
+ margin-bottom: 0;
1671
+ }
1672
+
1673
+ .hndle {
1674
+ font-size: 14px;
1675
+ padding: 8px 12px;
1676
+ margin: 0;
1677
+ line-height: 1.4;
1678
+ }
1679
+
1680
+ .handlediv {
1681
+ display: none;
1682
+ }
1683
+ }
1684
+
1685
+
1686
+ /* acf-fields */
1687
+ .acf-fields {
1688
+ border: #ebebeb solid 1px;
1689
+ background: #fafafa;
1690
+ border-radius: 3px;
1691
+ }
1692
+ }
1693
+
1694
+
1695
+ /* grid */
1696
+ .acf-meta-box-wrap.-grid {
1697
+ margin-left: 8px;
1698
+ margin-right: 8px;
1699
+
1700
+ .postbox {
1701
+ float: left;
1702
+ clear: left;
1703
+ width: 50%;
1704
+ margin: 0 0 16px;
1705
+
1706
+ &:nth-child(odd) {
1707
+ margin-left: -8px;
1708
+ }
1709
+
1710
+ &:nth-child(even) {
1711
+ float: right;
1712
+ clear: right;
1713
+ margin-right: -8px;
1714
+ }
1715
+ }
1716
+ }
1717
+
1718
+
1719
+ /* mobile */
1720
+ @media only screen and (max-width: 850px) {
1721
+
1722
+ .acf-meta-box-wrap.-grid {
1723
+ margin-left: 0;
1724
+ margin-right: 0;
1725
+
1726
+ .postbox {
1727
+ margin-left: 0 !important;
1728
+ margin-right: 0 !important;
1729
+ width: 100%;
1730
+ }
1731
+ }
1732
+ }
1733
+
1734
+
1735
+ /* export tool */
1736
+ #acf-admin-tool-export {
1737
+
1738
+ p {
1739
+ max-width: 800px;
1740
+ }
1741
+
1742
+ ul {
1743
+ column-width: 200px;
1744
+ }
1745
+
1746
+ .acf-postbox-side .button {
1747
+ margin: 0;
1748
+ width: 100%;
1749
+ }
1750
+
1751
+ textarea {
1752
+ display: block;
1753
+ width: 100%;
1754
+ min-height: 500px;
1755
+
1756
+ background: #fafafa;
1757
+ box-shadow: none;
1758
+ padding: 7px;
1759
+ border-radius: 3px;
1760
+ }
1761
+
1762
+ /* panel: selection */
1763
+ .acf-panel-selection {
1764
+ .acf-label {
1765
+ display: none;
1766
+ }
1767
+ }
1768
+ }
1769
+
1770
+ /*---------------------------------------------------------------------------------------------
1771
+ *
1772
+ * Retina
1773
+ *
1774
+ *---------------------------------------------------------------------------------------------*/
1775
+
1776
+ @media
1777
+ only screen and (-webkit-min-device-pixel-ratio: 2),
1778
+ only screen and ( min--moz-device-pixel-ratio: 2),
1779
+ only screen and ( -o-min-device-pixel-ratio: 2/1),
1780
+ only screen and ( min-device-pixel-ratio: 2),
1781
+ only screen and ( min-resolution: 192dpi),
1782
+ only screen and ( min-resolution: 2dppx) {
1783
+
1784
+ .acf-loading,
1785
+ .acf-spinner {
1786
+ background-image: url(../images/spinner@2x.gif);
1787
+ background-size: 20px 20px;
1788
+ }
1789
+
1790
+ }
1791
+
1792
+
1793
+ /*---------------------------------------------------------------------------------------------
1794
+ *
1795
+ * Device
1796
+ *
1797
+ *---------------------------------------------------------------------------------------------*/
1798
+
1799
+ @media only screen and (max-width: 850px) {
1800
+
1801
+ .acf-columns-2 {
1802
+ margin-right: 0;
1803
+ }
1804
+
1805
+ .acf-columns-2 .acf-column-1,
1806
+ .acf-columns-2 .acf-column-2 {
1807
+ float: none;
1808
+ width: auto;
1809
+ margin: 0;
1810
+ }
1811
+
1812
+ }
assets/build/css/_gutenberg.scss ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------------------------------------
2
+ *
3
+ * Gutenberg
4
+ *
5
+ *--------------------------------------------------------------------------------------------*/
6
+ #editor {
7
+
8
+ // main column is split into "editor" and "metaboxes".
9
+ // remove WP flex that pushed metaboxes to bottom.
10
+ .edit-post-visual-editor,
11
+ .edit-post-layout__metaboxes {
12
+ flex-basis: 0%;
13
+ flex-grow: 0;
14
+ }
15
+
16
+ // metabox wrap
17
+ .edit-post-layout__metaboxes {
18
+ background: transparent;
19
+ border-top: 0 none;
20
+ margin-top: 0;
21
+ padding: 30px;
22
+
23
+ @media screen and (min-width: 600px) {
24
+ padding: 46px;
25
+ }
26
+
27
+ .edit-post-meta-boxes-area {
28
+ margin: 0;
29
+ }
30
+
31
+ // make postbox look like a classic box.
32
+ .postbox {
33
+ border: #e2e4e7 solid 1px;
34
+ border-bottom: none;
35
+ margin: 0 0 20px;
36
+ }
37
+ }
38
+
39
+ // improve handle style
40
+ .postbox {
41
+ .handlediv {
42
+ height: 46px;
43
+ width: auto;
44
+ padding: 0 14px 0 5px;
45
+ }
46
+ .hndle {
47
+ color: #191e23 !important;
48
+ font-size: 13px;
49
+ line-height: 16px;
50
+
51
+ .acf-hndle-cog {
52
+ line-height: 16px;
53
+ }
54
+ }
55
+
56
+ // change icons to match gutenberg sidebar accordions
57
+ .handlediv .toggle-indicator {
58
+ color: #191e23;
59
+ }
60
+ .handlediv .toggle-indicator:before {
61
+ content: "\f343";
62
+ font-size: 18px;
63
+ width: auto;
64
+ }
65
+ &.closed .handlediv .toggle-indicator:before {
66
+ content: "\f347";
67
+ }
68
+ }
69
+
70
+ // acf-input-wrap
71
+ .acf-input-prepend,
72
+ .acf-input-append {
73
+ box-sizing: border-box;
74
+ height: 28px;
75
+ }
76
+
77
+ // accordion
78
+ .acf-accordion {
79
+ padding: 0 !important;
80
+
81
+ .acf-accordion-title {
82
+ color: #191e23;
83
+ font-weight: 600;
84
+
85
+ &:hover {
86
+ background: #f8f9f9;
87
+ }
88
+
89
+ label {
90
+ font-weight: inherit;
91
+ }
92
+ }
93
+ }
94
+
95
+ // table
96
+ .acf-table {
97
+ box-sizing: border-box;
98
+
99
+ .acf-row-handle {
100
+ width: 32px;
101
+ }
102
+ }
103
+
104
+ // main error message
105
+ .components-notice-list .acf-notice.-error {
106
+ margin: 0 0 5px;
107
+ min-height: 50px;
108
+ padding: 6px 12px;
109
+ border-left: 4px solid #00a0d2;
110
+ color: #191e23;
111
+ background-color: #f9e2e2;
112
+ border-left-color: #d94f4f;
113
+
114
+ p {
115
+ margin: 1em 0;
116
+ }
117
+
118
+ .acf-notice-dismiss {
119
+ top: 15px;
120
+ right: 15px;
121
+ }
122
+ }
123
+ }
assets/build/css/_input.scss ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------------------------------------
2
+ *
3
+ * Confirm remove
4
+ *
5
+ *--------------------------------------------------------------------------------------------*/
6
+
7
+ .acf-temp-remove {
8
+ position: relative;
9
+ opacity: 1;
10
+ -webkit-transition: all 0.25s ease;
11
+ -moz-transition: all 0.25s ease;
12
+ -o-transition: all 0.25s ease;
13
+ transition: all 0.25s ease;
14
+ overflow: hidden;
15
+
16
+ /* overlay prevents hover */
17
+ &:after {
18
+ display: block;
19
+ content: "";
20
+ position: absolute;
21
+ top: 0;
22
+ left: 0;
23
+ right: 0;
24
+ bottom: 0;
25
+ z-index: 99;
26
+ }
27
+ }
28
+
29
+
30
+ /*--------------------------------------------------------------------------
31
+ *
32
+ * Conditional Logic
33
+ *
34
+ *-------------------------------------------------------------------------*/
35
+
36
+ /* Hide */
37
+ .hidden-by-conditional-logic {
38
+ display: none !important;
39
+ }
40
+
41
+
42
+ /* Hide (appear empty) */
43
+ .hidden-by-conditional-logic.appear-empty {
44
+ display: table-cell !important;
45
+ }
46
+
47
+ .hidden-by-conditional-logic.appear-empty .acf-input {
48
+ display: none !important;
49
+ }
50
+
51
+
52
+ /*--------------------------------------------------------------------------
53
+ *
54
+ * 3rd Party
55
+ *
56
+ *-------------------------------------------------------------------------*/
57
+
58
+ /* Tabify shows hidden postboxes */
59
+ .acf-postbox.acf-hidden {
60
+ display: none !important;
61
+ }
assets/build/css/_media.scss ADDED
@@ -0,0 +1,505 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*---------------------------------------------------------------------------------------------
2
+ *
3
+ * Media Model
4
+ *
5
+ *---------------------------------------------------------------------------------------------*/
6
+
7
+ /* WP sets tables to act as divs. ACF uses tables, so these muct be reset */
8
+ .media-modal .compat-attachment-fields td.acf-input {
9
+
10
+ table {
11
+ display: table;
12
+ table-layout: auto;
13
+
14
+ tbody {
15
+ display: table-row-group;
16
+ }
17
+
18
+ tr {
19
+ display: table-row;
20
+ }
21
+
22
+ td, th {
23
+ display: table-cell;
24
+ }
25
+
26
+ }
27
+
28
+ }
29
+
30
+
31
+ /* field widths floats */
32
+ .media-modal .compat-attachment-fields > tbody > .acf-field {
33
+ margin: 5px 0;
34
+
35
+ > .acf-label {
36
+ min-width: 30%;
37
+ margin: 0;
38
+ padding: 0;
39
+ float: left;
40
+ text-align: right;
41
+ display: block;
42
+ float: left;
43
+
44
+ > label {
45
+ padding-top: 6px;
46
+ margin: 0;
47
+ color: #666666;
48
+ font-weight: 400;
49
+ line-height: 16px;
50
+ }
51
+ }
52
+
53
+ > .acf-input {
54
+ width: 65%;
55
+ margin: 0;
56
+ padding: 0;
57
+ float: right;
58
+ display: block;
59
+ }
60
+
61
+ p.description {
62
+ margin: 0;
63
+ }
64
+ }
65
+
66
+
67
+ /* restricted selection (copy of WP .upload-errors)*/
68
+ .acf-selection-error {
69
+ background: #ffebe8;
70
+ border: 1px solid #c00;
71
+ border-radius: 3px;
72
+ padding: 8px;
73
+ margin: 20px 0 0;
74
+
75
+ .selection-error-label {
76
+ background: #CC0000;
77
+ border-radius: 3px;
78
+ color: #fff;
79
+ font-weight: bold;
80
+ margin-right: 8px;
81
+ padding: 2px 4px;
82
+ }
83
+
84
+ .selection-error-message {
85
+ color: #b44;
86
+ display: block;
87
+ padding-top: 8px;
88
+ word-wrap: break-word;
89
+ white-space: pre-wrap;
90
+ }
91
+ }
92
+
93
+
94
+ /* disabled attachment */
95
+ .media-modal .attachment.acf-disabled {
96
+
97
+ .thumbnail {
98
+ opacity: 0.25 !important;
99
+ }
100
+
101
+ .attachment-preview:before {
102
+ background: rgba(0,0,0,0.15);
103
+ z-index: 1;
104
+ position: relative;
105
+ }
106
+
107
+ }
108
+
109
+
110
+ /* misc */
111
+ .media-modal {
112
+
113
+ /* compat-item */
114
+ .compat-field-acf-form-data,
115
+ .compat-field-acf-blank {
116
+ display: none !important;
117
+ }
118
+
119
+
120
+ /* allow line breaks in upload error */
121
+ .upload-error-message {
122
+ white-space: pre-wrap;
123
+ }
124
+
125
+
126
+ /* fix required span */
127
+ .acf-required {
128
+ padding: 0 !important;
129
+ margin: 0 !important;
130
+ float: none !important;
131
+ color: #f00 !important;
132
+ }
133
+
134
+
135
+ /* sidebar */
136
+ .media-sidebar {
137
+
138
+ .compat-item{
139
+ padding-bottom: 20px;
140
+ }
141
+
142
+ }
143
+
144
+
145
+ /* mobile md */
146
+ @media (max-width: 900px) {
147
+
148
+ /* label */
149
+ .setting span,
150
+ .compat-attachment-fields > tbody > .acf-field > .acf-label {
151
+ width: 98%;
152
+ float: none;
153
+ text-align: left;
154
+ min-height: 0;
155
+ padding: 0;
156
+ }
157
+
158
+
159
+ /* field */
160
+ .setting input,
161
+ .setting textarea,
162
+ .compat-attachment-fields > tbody > .acf-field > .acf-input {
163
+ float: none;
164
+ height: auto;
165
+ max-width: none;
166
+ width: 98%;
167
+ }
168
+
169
+ }
170
+
171
+
172
+ }
173
+
174
+
175
+
176
+ /*---------------------------------------------------------------------------------------------
177
+ *
178
+ * Media Model (expand details)
179
+ *
180
+ *---------------------------------------------------------------------------------------------*/
181
+
182
+ .media-modal .acf-expand-details {
183
+ float: right;
184
+ padding: 1px 10px;
185
+ margin-right: 6px;
186
+ height: 18px;
187
+ line-height: 18px;
188
+ color: #AAAAAA;
189
+ font-size: 12px;
190
+
191
+ &:focus, &:active {
192
+ outline: 0 none;
193
+ box-shadow: none;
194
+ color: #AAAAAA;
195
+ }
196
+
197
+ &:hover {
198
+ color: #666666 !important;
199
+ }
200
+
201
+ span {
202
+ display: block;
203
+ float: left;
204
+ }
205
+
206
+ .acf-icon {
207
+ margin: 0 4px 0 0;
208
+ }
209
+
210
+ &:hover .acf-icon {
211
+ border-color: #AAAAAA;
212
+ }
213
+
214
+ .is-open { display: none; }
215
+ .is-closed { display: block; }
216
+
217
+
218
+ /* mobile sm */
219
+ @media (max-width: $sm) {
220
+ display: none;
221
+ }
222
+ }
223
+
224
+
225
+ /* expanded */
226
+ .media-modal.acf-expanded {
227
+
228
+ /* toggle */
229
+ .acf-expand-details {
230
+ .is-open { display: block; }
231
+ .is-closed { display: none; }
232
+
233
+ }
234
+
235
+ // Components.
236
+ .attachments-browser .media-toolbar,
237
+ .attachments-browser .attachments { right: 740px; }
238
+ .media-sidebar { width: 708px; }
239
+
240
+ // Sidebar.
241
+ .media-sidebar {
242
+
243
+ // Attachment info.
244
+ .attachment-info {
245
+ .thumbnail {
246
+ float: left;
247
+ max-height: none;
248
+
249
+ img {
250
+ max-width: 100%;
251
+ max-height: 200px;
252
+ }
253
+ }
254
+
255
+ .details {
256
+ float: right;
257
+ }
258
+ }
259
+
260
+ // Label
261
+ .attachment-info .thumbnail,
262
+ .attachment-details .setting span,
263
+ .compat-attachment-fields > tbody > .acf-field > .acf-label {
264
+ min-width: 20%;
265
+ margin-right: 0;
266
+ }
267
+
268
+ // Input
269
+ .attachment-info .details,
270
+ .attachment-details .setting input,
271
+ .attachment-details .setting textarea,
272
+ .attachment-details .setting + .description,
273
+ .compat-attachment-fields > tbody > .acf-field > .acf-input {
274
+ min-width: 77%;
275
+ }
276
+ }
277
+
278
+ // Screen: Medium.
279
+ @media (max-width: 900px) {
280
+
281
+ // Components.
282
+ .attachments-browser .media-toolbar { display: none; }
283
+ .attachments { display: none; }
284
+ .media-sidebar { width: auto; max-width: none !important; bottom: 0 !important; }
285
+
286
+ // Sidebar.
287
+ .media-sidebar {
288
+
289
+ // Attachment info.
290
+ .attachment-info {
291
+ .thumbnail {
292
+ min-width: 0;
293
+ max-width: none;
294
+ width: 30%;
295
+ }
296
+
297
+ .details {
298
+ min-width: 0;
299
+ max-width: none;
300
+ width: 67%;
301
+ }
302
+
303
+ }
304
+ }
305
+ }
306
+
307
+ // Screen: small.
308
+ @media (max-width: 640px) {
309
+
310
+ // Sidebar.
311
+ .media-sidebar {
312
+
313
+ // Attachment info.
314
+ .attachment-info {
315
+ .thumbnail, .details {
316
+ width: 100%;
317
+ }
318
+ }
319
+ }
320
+ }
321
+ }
322
+
323
+
324
+
325
+ /*---------------------------------------------------------------------------------------------
326
+ *
327
+ * ACF Media Model
328
+ *
329
+ *---------------------------------------------------------------------------------------------*/
330
+
331
+ .acf-media-modal {
332
+
333
+ /* hide embed settings */
334
+ .media-embed {
335
+
336
+ .setting.align,
337
+ .setting.link-to {
338
+ display: none;
339
+ }
340
+
341
+ }
342
+
343
+ // only allow for devices larger than mobile
344
+ @media screen and (min-width: 1024px) {
345
+
346
+ // - requires long selector to override WP core
347
+ .media-modal-content .media-frame .media-toolbar-secondary {
348
+ max-width: none;
349
+
350
+ select.attachment-filters {
351
+ width: auto;
352
+ min-width: 150px;
353
+ max-width: none;
354
+ margin: 11px 6px 0 0;
355
+ vertical-align: middle;
356
+ }
357
+ }
358
+ }
359
+ }
360
+
361
+
362
+ /*---------------------------------------------------------------------------------------------
363
+ *
364
+ * ACF Media Model (Select Mode)
365
+ *
366
+ *---------------------------------------------------------------------------------------------*/
367
+
368
+ .acf-media-modal.-select {
369
+
370
+
371
+
372
+ }
373
+
374
+
375
+ /*---------------------------------------------------------------------------------------------
376
+ *
377
+ * ACF Media Model (Edit Mode)
378
+ *
379
+ *---------------------------------------------------------------------------------------------*/
380
+
381
+ .acf-media-modal.-edit {
382
+
383
+ /* resize modal */
384
+ left: 15%;
385
+ right: 15%;
386
+ top: 100px;
387
+ bottom: 100px;
388
+
389
+
390
+ /* hide elements */
391
+ .media-frame-menu,
392
+ .media-frame-router,
393
+ .media-frame-content .attachments,
394
+ .media-frame-content .media-toolbar {
395
+ display: none;
396
+ }
397
+
398
+
399
+ /* full width */
400
+ .media-frame-title,
401
+ .media-frame-content,
402
+ .media-frame-toolbar,
403
+ .media-sidebar {
404
+ width: auto;
405
+ left: 0;
406
+ right: 0;
407
+ }
408
+
409
+
410
+ /* tidy up incorrect distance */
411
+ .media-frame-content {
412
+ top: 50px;
413
+ }
414
+
415
+
416
+ /* title box shadow (to match media grid) */
417
+ .media-frame-title {
418
+ border-bottom: 1px solid #DFDFDF;
419
+ box-shadow: 0 4px 4px -4px rgba(0, 0, 0, 0.1);
420
+ }
421
+
422
+
423
+ /* sidebar */
424
+ .media-sidebar {
425
+
426
+ padding: 0 16px;
427
+
428
+ /* WP details */
429
+ .attachment-details {
430
+
431
+ overflow: visible;
432
+
433
+ /* hide 'Attachment Details' heading */
434
+ > h3, > h2 {
435
+ display: none;
436
+ }
437
+
438
+
439
+ /* remove overflow */
440
+ .attachment-info {
441
+ background: #fff;
442
+ border-bottom: #dddddd solid 1px;
443
+ padding: 16px;
444
+ margin: 0 -16px 16px;
445
+ }
446
+
447
+ /* move thumbnail */
448
+ .thumbnail {
449
+ margin: 0 16px 0 0;
450
+ }
451
+
452
+ .setting {
453
+ margin: 0 0 5px;
454
+
455
+ span {
456
+ margin: 0;
457
+ }
458
+ }
459
+
460
+ }
461
+
462
+
463
+ /* ACF fields */
464
+ .compat-attachment-fields {
465
+
466
+ > tbody > .acf-field {
467
+ margin: 0 0 5px;
468
+
469
+ p.description {
470
+ margin-top: 3px;
471
+ }
472
+ }
473
+
474
+ }
475
+
476
+
477
+ /* WP required message */
478
+ .media-types-required-info { display: none; }
479
+
480
+ }
481
+
482
+
483
+ /* mobile md */
484
+ @media (max-width: 900px) {
485
+ top: 30px;
486
+ right: 30px;
487
+ bottom: 30px;
488
+ left: 30px;
489
+ }
490
+
491
+
492
+ /* mobile sm */
493
+ @media (max-width: 640px) {
494
+ top: 0;
495
+ right: 0;
496
+ bottom: 0;
497
+ left: 0;
498
+ }
499
+
500
+ @media (max-width: 480px) {
501
+ .media-frame-content {
502
+ top: 40px;
503
+ }
504
+ }
505
+ }
assets/build/css/_mixins.scss ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------------------------------------
2
+ *
3
+ * Mixins
4
+ *
5
+ *--------------------------------------------------------------------------------------------*/
6
+ @mixin clearfix() {
7
+ &:after {
8
+ display: block;
9
+ clear: both;
10
+ content: "";
11
+ }
12
+ }
13
+
14
+ @mixin border-box() {
15
+ -webkit-box-sizing: border-box;
16
+ -moz-box-sizing: border-box;
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ @mixin centered() {
21
+ position: absolute;
22
+ top: 50%;
23
+ left: 50%;
24
+ transform: translate(-50%, -50%);
25
+ }
26
+
27
+ @mixin animate( $properties: 'all' ) {
28
+ -webkit-transition: $properties 0.3s ease; // Safari 3.2+, Chrome
29
+ -moz-transition: $properties 0.3s ease; // Firefox 4-15
30
+ -o-transition: $properties 0.3s ease; // Opera 10.5–12.00
31
+ transition: $properties 0.3s ease; // Firefox 16+, Opera 12.50+
32
+ }
33
+
34
+ @mixin rtl() {
35
+ html[dir="rtl"] & {
36
+ text-align: right;
37
+ @content;
38
+ }
39
+ }
assets/build/css/_postbox.scss ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Postbox.
2
+
3
+ // Gutenberg specific styles.
4
+ #editor {
5
+
6
+ // Postbox container.
7
+ .edit-post-layout__metaboxes {
8
+ padding: 0;
9
+ }
10
+
11
+ // Alter postbox to look like panel component.
12
+ .postbox {
13
+ color: #444;
14
+
15
+ .handlediv {
16
+ color: #191e23 !important;
17
+ height: 46px;
18
+ width: auto;
19
+ padding: 0 14px 0 5px;
20
+ position: relative;
21
+ z-index: 2;
22
+ }
23
+ .hndle {
24
+ color: #191e23 !important;
25
+ font-size: 13px;
26
+ line-height: normal;
27
+ padding: 15px;
28
+
29
+ &:hover {
30
+ background: #f2f4f5;
31
+ }
32
+ .acf-hndle-cog {
33
+ line-height: 16px;
34
+ }
35
+ }
36
+
37
+ // change icons to match gutenberg sidebar accordions
38
+ .handlediv .toggle-indicator {
39
+ color: inherit;
40
+ &:before {
41
+ content: "\f343";
42
+ font-size: 18px;
43
+ width: auto;
44
+ }
45
+ }
46
+ &.closed .handlediv .toggle-indicator:before {
47
+ content: "\f347";
48
+ }
49
+ }
50
+ }
assets/build/css/_variables.scss ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------------------------------------
2
+ *
3
+ * Vars
4
+ *
5
+ *--------------------------------------------------------------------------------------------*/
6
+
7
+ /* colors */
8
+ $acf_blue: #2a9bd9;
9
+ $acf_notice: #2a9bd9;
10
+ $acf_error: #F55E4F;
11
+ $acf_success: #46b450;
12
+ $acf_warning: #fd8d3b;
13
+
14
+ /* acf-field */
15
+ $field_padding: 15px 12px;
16
+ $field_padding_x: 12px;
17
+ $field_padding_y: 15px;
18
+ $fp: 15px 12px;
19
+ $fy: 15px;
20
+ $fx: 12px;
21
+
22
+ /* responsive */
23
+ $md: 880px;
24
+ $sm: 640px;
assets/build/css/acf-dark.scss ADDED
@@ -0,0 +1 @@
 
1
+ @import "dark";
assets/build/css/acf-field-group.scss ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ @import "variables";
2
+ @import "mixins";
3
+ @import "field-group";
assets/build/css/acf-global.scss ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ @import "variables";
2
+ @import "mixins";
3
+ @import "global";
assets/build/css/acf-input.scss ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ @import "variables";
2
+ @import "mixins";
3
+ @import "fields";
4
+ @import "forms";
5
+ @import "media";
6
+ @import "input";
7
+ @import "postbox";
assets/build/images/acf-logo.psd ADDED
Binary file
assets/build/js/_acf-compatibility.js ADDED
@@ -0,0 +1,761 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * acf.newCompatibility
5
+ *
6
+ * Inserts a new __proto__ object compatibility layer
7
+ *
8
+ * @date 15/2/18
9
+ * @since 5.6.9
10
+ *
11
+ * @param object instance The object to modify.
12
+ * @param object compatibilty Optional. The compatibilty layer.
13
+ * @return object compatibilty
14
+ */
15
+
16
+ acf.newCompatibility = function( instance, compatibilty ){
17
+
18
+ // defaults
19
+ compatibilty = compatibilty || {};
20
+
21
+ // inherit __proto_-
22
+ compatibilty.__proto__ = instance.__proto__;
23
+
24
+ // inject
25
+ instance.__proto__ = compatibilty;
26
+
27
+ // reference
28
+ instance.compatibility = compatibilty;
29
+
30
+ // return
31
+ return compatibilty;
32
+ };
33
+
34
+ /**
35
+ * acf.getCompatibility
36
+ *
37
+ * Returns the compatibility layer for a given instance
38
+ *
39
+ * @date 13/3/18
40
+ * @since 5.6.9
41
+ *
42
+ * @param object instance The object to look in.
43
+ * @return object|null compatibility The compatibility object or null on failure.
44
+ */
45
+
46
+ acf.getCompatibility = function( instance ) {
47
+ return instance.compatibility || null;
48
+ };
49
+
50
+ /**
51
+ * acf (compatibility)
52
+ *
53
+ * Compatibility layer for the acf object
54
+ *
55
+ * @date 15/2/18
56
+ * @since 5.6.9
57
+ *
58
+ * @param void
59
+ * @return void
60
+ */
61
+
62
+ var _acf = acf.newCompatibility(acf, {
63
+
64
+ // storage
65
+ l10n: {},
66
+ o: {},
67
+ fields: {},
68
+
69
+ // changed function names
70
+ update: acf.set,
71
+ add_action: acf.addAction,
72
+ remove_action: acf.removeAction,
73
+ do_action: acf.doAction,
74
+ add_filter: acf.addFilter,
75
+ remove_filter: acf.removeFilter,
76
+ apply_filters: acf.applyFilters,
77
+ parse_args: acf.parseArgs,
78
+ disable_el: acf.disable,
79
+ disable_form: acf.disable,
80
+ enable_el: acf.enable,
81
+ enable_form: acf.enable,
82
+ update_user_setting: acf.updateUserSetting,
83
+ prepare_for_ajax: acf.prepareForAjax,
84
+ is_ajax_success: acf.isAjaxSuccess,
85
+ remove_el: acf.remove,
86
+ remove_tr: acf.remove,
87
+ str_replace: acf.strReplace,
88
+ render_select: acf.renderSelect,
89
+ get_uniqid: acf.uniqid,
90
+ serialize_form: acf.serialize,
91
+ esc_html: acf.strEscape,
92
+ str_sanitize: acf.strSanitize,
93
+
94
+ });
95
+
96
+ _acf._e = function( k1, k2 ){
97
+
98
+ // defaults
99
+ k1 = k1 || '';
100
+ k2 = k2 || '';
101
+
102
+ // compability
103
+ var compatKey = k2 ? k1 + '.' + k2 : k1;
104
+ var compats = {
105
+ 'image.select': 'Select Image',
106
+ 'image.edit': 'Edit Image',
107
+ 'image.update': 'Update Image'
108
+ };
109
+ if( compats[compatKey] ) {
110
+ return acf.__(compats[compatKey]);
111
+ }
112
+
113
+ // try k1
114
+ var string = this.l10n[ k1 ] || '';
115
+
116
+ // try k2
117
+ if( k2 ) {
118
+ string = string[ k2 ] || '';
119
+ }
120
+
121
+ // return
122
+ return string;
123
+ };
124
+
125
+ _acf.get_selector = function( s ) {
126
+
127
+ // vars
128
+ var selector = '.acf-field';
129
+
130
+ // bail early if no search
131
+ if( !s ) {
132
+ return selector;
133
+ }
134
+
135
+ // compatibility with object
136
+ if( $.isPlainObject(s) ) {
137
+ if( $.isEmptyObject(s) ) {
138
+ return selector;
139
+ } else {
140
+ for( var k in s ) { s = s[k]; break; }
141
+ }
142
+ }
143
+
144
+ // append
145
+ selector += '-' + s;
146
+
147
+ // replace underscores (split/join replaces all and is faster than regex!)
148
+ selector = acf.strReplace('_', '-', selector);
149
+
150
+ // remove potential double up
151
+ selector = acf.strReplace('field-field-', 'field-', selector);
152
+
153
+ // return
154
+ return selector;
155
+ };
156
+
157
+ _acf.get_fields = function( s, $el, all ){
158
+
159
+ // args
160
+ var args = {
161
+ is: s || '',
162
+ parent: $el || false,
163
+ suppressFilters: all || false,
164
+ };
165
+
166
+ // change 'field_123' to '.acf-field-123'
167
+ if( args.is ) {
168
+ args.is = this.get_selector( args.is );
169
+ }
170
+
171
+ // return
172
+ return acf.findFields(args);
173
+ };
174
+
175
+ _acf.get_field = function( s, $el ){
176
+
177
+ // get fields
178
+ var $fields = this.get_fields.apply(this, arguments);
179
+
180
+ // return
181
+ if( $fields.length ) {
182
+ return $fields.first();
183
+ } else {
184
+ return false;
185
+ }
186
+ };
187
+
188
+ _acf.get_closest_field = function( $el, s ){
189
+ return $el.closest( this.get_selector(s) );
190
+ };
191
+
192
+ _acf.get_field_wrap = function( $el ){
193
+ return $el.closest( this.get_selector() );
194
+ };
195
+
196
+ _acf.get_field_key = function( $field ){
197
+ return $field.data('key');
198
+ };
199
+
200
+ _acf.get_field_type = function( $field ){
201
+ return $field.data('type');
202
+ };
203
+
204
+ _acf.get_data = function( $el, defaults ){
205
+ return acf.parseArgs( $el.data(), defaults );
206
+ };
207
+
208
+ _acf.maybe_get = function( obj, key, value ){
209
+
210
+ // default
211
+ if( value === undefined ) {
212
+ value = null;
213
+ }
214
+
215
+ // get keys
216
+ keys = String(key).split('.');
217
+
218
+ // acf.isget
219
+ for( var i = 0; i < keys.length; i++ ) {
220
+ if( !obj.hasOwnProperty(keys[i]) ) {
221
+ return value;
222
+ }
223
+ obj = obj[ keys[i] ];
224
+ }
225
+ return obj;
226
+ };
227
+
228
+
229
+ /**
230
+ * hooks
231
+ *
232
+ * Modify add_action and add_filter functions to add compatibility with changed $field parameter
233
+ * Using the acf.add_action() or acf.add_filter() functions will interpret new field parameters as jQuery $field
234
+ *
235
+ * @date 12/5/18
236
+ * @since 5.6.9
237
+ *
238
+ * @param void
239
+ * @return void
240
+ */
241
+
242
+ var compatibleArgument = function( arg ){
243
+ return ( arg instanceof acf.Field ) ? arg.$el : arg;
244
+ };
245
+
246
+ var compatibleArguments = function( args ){
247
+ return acf.arrayArgs( args ).map( compatibleArgument );
248
+ }
249
+
250
+ var compatibleCallback = function( origCallback ){
251
+ return function(){
252
+
253
+ // convert to compatible arguments
254
+ if( arguments.length ) {
255
+ var args = compatibleArguments(arguments);
256
+
257
+ // add default argument for 'ready', 'append' and 'load' events
258
+ } else {
259
+ var args = [ $(document) ];
260
+ }
261
+
262
+ // return
263
+ return origCallback.apply(this, args);
264
+ }
265
+ }
266
+
267
+ _acf.add_action = function( action, callback, priority, context ){
268
+
269
+ // handle multiple actions
270
+ var actions = action.split(' ');
271
+ var length = actions.length;
272
+ if( length > 1 ) {
273
+ for( var i = 0; i < length; i++) {
274
+ action = actions[i];
275
+ _acf.add_action.apply(this, arguments);
276
+ }
277
+ return this;
278
+ }
279
+
280
+ // single
281
+ var callback = compatibleCallback(callback);
282
+ return acf.addAction.apply(this, arguments);
283
+ };
284
+
285
+ _acf.add_filter = function( action, callback, priority, context ){
286
+ var callback = compatibleCallback(callback);
287
+ return acf.addFilter.apply(this, arguments);
288
+ };
289
+
290
+ /*
291
+ * acf.model
292
+ *
293
+ * This model acts as a scafold for action.event driven modules
294
+ *
295
+ * @type object
296
+ * @date 8/09/2014
297
+ * @since 5.0.0
298
+ *
299
+ * @param (object)
300
+ * @return (object)
301
+ */
302
+
303
+ _acf.model = {
304
+ actions: {},
305
+ filters: {},
306
+ events: {},
307
+ extend: function( args ){
308
+
309
+ // extend
310
+ var model = $.extend( {}, this, args );
311
+
312
+ // setup actions
313
+ $.each(model.actions, function( name, callback ){
314
+ model._add_action( name, callback );
315
+ });
316
+
317
+ // setup filters
318
+ $.each(model.filters, function( name, callback ){
319
+ model._add_filter( name, callback );
320
+ });
321
+
322
+ // setup events
323
+ $.each(model.events, function( name, callback ){
324
+ model._add_event( name, callback );
325
+ });
326
+
327
+ // return
328
+ return model;
329
+ },
330
+
331
+ _add_action: function( name, callback ) {
332
+
333
+ // split
334
+ var model = this,
335
+ data = name.split(' ');
336
+
337
+ // add missing priority
338
+ var name = data[0] || '',
339
+ priority = data[1] || 10;
340
+
341
+ // add action
342
+ acf.add_action(name, model[ callback ], priority, model);
343
+
344
+ },
345
+
346
+ _add_filter: function( name, callback ) {
347
+
348
+ // split
349
+ var model = this,
350
+ data = name.split(' ');
351
+
352
+ // add missing priority
353
+ var name = data[0] || '',
354
+ priority = data[1] || 10;
355
+
356
+ // add action
357
+ acf.add_filter(name, model[ callback ], priority, model);
358
+ },
359
+
360
+ _add_event: function( name, callback ) {
361
+
362
+ // vars
363
+ var model = this,
364
+ i = name.indexOf(' '),
365
+ event = (i > 0) ? name.substr(0,i) : name,
366
+ selector = (i > 0) ? name.substr(i+1) : '';
367
+
368
+ // event
369
+ var fn = function( e ){
370
+
371
+ // append $el to event object
372
+ e.$el = $(this);
373
+
374
+ // append $field to event object (used in field group)
375
+ if( acf.field_group ) {
376
+ e.$field = e.$el.closest('.acf-field-object');
377
+ }
378
+
379
+ // event
380
+ if( typeof model.event === 'function' ) {
381
+ e = model.event( e );
382
+ }
383
+
384
+ // callback
385
+ model[ callback ].apply(model, arguments);
386
+
387
+ };
388
+
389
+ // add event
390
+ if( selector ) {
391
+ $(document).on(event, selector, fn);
392
+ } else {
393
+ $(document).on(event, fn);
394
+ }
395
+ },
396
+
397
+ get: function( name, value ){
398
+
399
+ // defaults
400
+ value = value || null;
401
+
402
+ // get
403
+ if( typeof this[ name ] !== 'undefined' ) {
404
+ value = this[ name ];
405
+ }
406
+
407
+ // return
408
+ return value;
409
+ },
410
+
411
+ set: function( name, value ){
412
+
413
+ // set
414
+ this[ name ] = value;
415
+
416
+ // function for 3rd party
417
+ if( typeof this[ '_set_' + name ] === 'function' ) {
418
+ this[ '_set_' + name ].apply(this);
419
+ }
420
+
421
+ // return for chaining
422
+ return this;
423
+ }
424
+ };
425
+
426
+ /*
427
+ * field
428
+ *
429
+ * This model sets up many of the field's interactions
430
+ *
431
+ * @type function
432
+ * @date 21/02/2014
433
+ * @since 3.5.1
434
+ *
435
+ * @param n/a
436
+ * @return n/a
437
+ */
438
+
439
+ _acf.field = acf.model.extend({
440
+ type: '',
441
+ o: {},
442
+ $field: null,
443
+ _add_action: function( name, callback ) {
444
+
445
+ // vars
446
+ var model = this;
447
+
448
+ // update name
449
+ name = name + '_field/type=' + model.type;
450
+
451
+ // add action
452
+ acf.add_action(name, function( $field ){
453
+
454
+ // focus
455
+ model.set('$field', $field);
456
+
457
+ // callback
458
+ model[ callback ].apply(model, arguments);
459
+ });
460
+ },
461
+
462
+ _add_filter: function( name, callback ) {
463
+
464
+ // vars
465
+ var model = this;
466
+
467
+ // update name
468
+ name = name + '_field/type=' + model.type;
469
+
470
+ // add action
471
+ acf.add_filter(name, function( $field ){
472
+
473
+ // focus
474
+ model.set('$field', $field);
475
+
476
+ // callback
477
+ model[ callback ].apply(model, arguments);
478
+ });
479
+ },
480
+
481
+ _add_event: function( name, callback ) {
482
+
483
+ // vars
484
+ var model = this,
485
+ event = name.substr(0,name.indexOf(' ')),
486
+ selector = name.substr(name.indexOf(' ')+1),
487
+ context = acf.get_selector(model.type);
488
+
489
+ // add event
490
+ $(document).on(event, context + ' ' + selector, function( e ){
491
+
492
+ // vars
493
+ var $el = $(this);
494
+ var $field = acf.get_closest_field( $el, model.type );
495
+
496
+ // bail early if no field
497
+ if( !$field.length ) return;
498
+
499
+ // focus
500
+ if( !$field.is(model.$field) ) {
501
+ model.set('$field', $field);
502
+ }
503
+
504
+ // append to event
505
+ e.$el = $el;
506
+ e.$field = $field;
507
+
508
+ // callback
509
+ model[ callback ].apply(model, [e]);
510
+ });
511
+ },
512
+
513
+ _set_$field: function(){
514
+
515
+ // callback
516
+ if( typeof this.focus === 'function' ) {
517
+ this.focus();
518
+ }
519
+ },
520
+
521
+ // depreciated
522
+ doFocus: function( $field ){
523
+ return this.set('$field', $field);
524
+ }
525
+ });
526
+
527
+
528
+ /**
529
+ * validation
530
+ *
531
+ * description
532
+ *
533
+ * @date 15/2/18
534
+ * @since 5.6.9
535
+ *
536
+ * @param type $var Description. Default.
537
+ * @return type Description.
538
+ */
539
+
540
+ var _validation = acf.newCompatibility(acf.validation, {
541
+ remove_error: function( $field ){
542
+ acf.getField( $field ).removeError();
543
+ },
544
+ add_warning: function( $field, message ){
545
+ acf.getField( $field ).showNotice({
546
+ text: message,
547
+ type: 'warning',
548
+ timeout: 1000
549
+ });
550
+ },
551
+ fetch: acf.validateForm,
552
+ enableSubmit: acf.enableSubmit,
553
+ disableSubmit: acf.disableSubmit,
554
+ showSpinner: acf.showSpinner,
555
+ hideSpinner: acf.hideSpinner,
556
+ unlockForm: acf.unlockForm,
557
+ lockForm: acf.lockForm
558
+ });
559
+
560
+
561
+ /**
562
+ * tooltip
563
+ *
564
+ * description
565
+ *
566
+ * @date 15/2/18
567
+ * @since 5.6.9
568
+ *
569
+ * @param type $var Description. Default.
570
+ * @return type Description.
571
+ */
572
+
573
+ _acf.tooltip = {
574
+
575
+ tooltip: function( text, $el ){
576
+
577
+ var tooltip = acf.newTooltip({
578
+ text: text,
579
+ target: $el
580
+ });
581
+
582
+ // return
583
+ return tooltip.$el;
584
+ },
585
+
586
+ temp: function( text, $el ){
587
+
588
+ var tooltip = acf.newTooltip({
589
+ text: text,
590
+ target: $el,
591
+ timeout: 250
592
+ });
593
+ },
594
+
595
+ confirm: function( $el, callback, text, button_y, button_n ){
596
+
597
+ var tooltip = acf.newTooltip({
598
+ confirm: true,
599
+ text: text,
600
+ target: $el,
601
+ confirm: function(){
602
+ callback(true);
603
+ },
604
+ cancel: function(){
605
+ callback(false);
606
+ }
607
+ });
608
+ },
609
+
610
+ confirm_remove: function( $el, callback ){
611
+
612
+ var tooltip = acf.newTooltip({
613
+ confirmRemove: true,
614
+ target: $el,
615
+ confirm: function(){
616
+ callback(true);
617
+ },
618
+ cancel: function(){
619
+ callback(false);
620
+ }
621
+ });
622
+ },
623
+ };
624
+
625
+ /**
626
+ * tooltip
627
+ *
628
+ * description
629
+ *
630
+ * @date 15/2/18
631
+ * @since 5.6.9
632
+ *
633
+ * @param type $var Description. Default.
634
+ * @return type Description.
635
+ */
636
+
637
+ _acf.media = new acf.Model({
638
+ activeFrame: false,
639
+ actions: {
640
+ 'new_media_popup': 'onNewMediaPopup'
641
+ },
642
+
643
+ frame: function(){
644
+ return this.activeFrame;
645
+ },
646
+
647
+ onNewMediaPopup: function( popup ){
648
+ this.activeFrame = popup.frame;
649
+ },
650
+
651
+ popup: function( props ){
652
+
653
+ // update props
654
+ if( props.mime_types ) {
655
+ props.allowedTypes = props.mime_types;
656
+ }
657
+ if( props.id ) {
658
+ props.attachment = props.id;
659
+ }
660
+
661
+ // new
662
+ var popup = acf.newMediaPopup( props );
663
+
664
+ // append
665
+ /*
666
+ if( props.selected ) {
667
+ popup.selected = props.selected;
668
+ }
669
+ */
670
+
671
+ // return
672
+ return popup.frame;
673
+ }
674
+ });
675
+
676
+
677
+ /**
678
+ * Select2
679
+ *
680
+ * description
681
+ *
682
+ * @date 11/6/18
683
+ * @since 5.6.9
684
+ *
685
+ * @param type $var Description. Default.
686
+ * @return type Description.
687
+ */
688
+
689
+ _acf.select2 = {
690
+ init: function( $select, args, $field ){
691
+
692
+ // compatible args
693
+ if( args.allow_null ) {
694
+ args.allowNull = args.allow_null;
695
+ }
696
+ if( args.ajax_action ) {
697
+ args.ajaxAction = args.ajax_action;
698
+ }
699
+ if( $field ) {
700
+ args.field = acf.getField($field);
701
+ }
702
+
703
+ // return
704
+ return acf.newSelect2( $select, args );
705
+ },
706
+
707
+ destroy: function( $select ){
708
+ return acf.getInstance( $select ).destroy();
709
+
710
+ },
711
+ };
712
+
713
+ /**
714
+ * postbox
715
+ *
716
+ * description
717
+ *
718
+ * @date 11/6/18
719
+ * @since 5.6.9
720
+ *
721
+ * @param type $var Description. Default.
722
+ * @return type Description.
723
+ */
724
+
725
+ _acf.postbox = {
726
+ render: function( args ){
727
+
728
+ // compatible args
729
+ if( args.edit_url ) {
730
+ args.editLink = args.edit_url;
731
+ }
732
+ if( args.edit_title ) {
733
+ args.editTitle = args.edit_title;
734
+ }
735
+
736
+ // return
737
+ return acf.newPostbox( args );
738
+ }
739
+ };
740
+
741
+ /**
742
+ * acf.screen
743
+ *
744
+ * description
745
+ *
746
+ * @date 11/6/18
747
+ * @since 5.6.9
748
+ *
749
+ * @param type $var Description. Default.
750
+ * @return type Description.
751
+ */
752
+
753
+ acf.newCompatibility(acf.screen, {
754
+ update: function(){
755
+ return this.set.apply(this, arguments);
756
+ },
757
+ fetch: acf.screen.check
758
+ });
759
+ _acf.ajax = acf.screen;
760
+
761
+ })(jQuery);
assets/build/js/_acf-condition-types.js ADDED
@@ -0,0 +1,447 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var __ = acf.__;
4
+
5
+ var parseString = function( val ){
6
+ return val ? '' + val : '';
7
+ };
8
+
9
+ var isEqualTo = function( v1, v2 ){
10
+ return ( parseString(v1).toLowerCase() === parseString(v2).toLowerCase() );
11
+ };
12
+
13
+ var isEqualToNumber = function( v1, v2 ){
14
+ return ( parseFloat(v1) === parseFloat(v2) );
15
+ };
16
+
17
+ var isGreaterThan = function( v1, v2 ){
18
+ return ( parseFloat(v1) > parseFloat(v2) );
19
+ };
20
+
21
+ var isLessThan = function( v1, v2 ){
22
+ return ( parseFloat(v1) < parseFloat(v2) );
23
+ };
24
+
25
+ var inArray = function( v1, array ){
26
+
27
+ // cast all values as string
28
+ array = array.map(function(v2){
29
+ return parseString(v2);
30
+ });
31
+
32
+ return (array.indexOf( v1 ) > -1);
33
+ }
34
+
35
+ var containsString = function( haystack, needle ){
36
+ return ( parseString(haystack).indexOf( parseString(needle) ) > -1 );
37
+ };
38
+
39
+ var matchesPattern = function( v1, pattern ){
40
+ var regexp = new RegExp(parseString(pattern), 'gi');
41
+ return parseString(v1).match( regexp );
42
+ };
43
+
44
+ /**
45
+ * hasValue
46
+ *
47
+ * description
48
+ *
49
+ * @date 1/2/18
50
+ * @since 5.6.5
51
+ *
52
+ * @param void
53
+ * @return void
54
+ */
55
+
56
+ var HasValue = acf.Condition.extend({
57
+ type: 'hasValue',
58
+ operator: '!=empty',
59
+ label: __('Has any value'),
60
+ fieldTypes: [ 'text', 'textarea', 'number', 'range', 'email', 'url', 'password', 'image', 'file', 'wysiwyg', 'oembed', 'select', 'checkbox', 'radio', 'button_group', 'link', 'post_object', 'page_link', 'relationship', 'taxonomy', 'user', 'google_map', 'date_picker', 'date_time_picker', 'time_picker', 'color_picker' ],
61
+ match: function( rule, field ){
62
+ return (field.val() ? true : false);
63
+ },
64
+ choices: function( fieldObject ){
65
+ return '<input type="text" disabled="" />';
66
+ }
67
+ });
68
+
69
+ acf.registerConditionType( HasValue );
70
+
71
+ /**
72
+ * hasValue
73
+ *
74
+ * description
75
+ *
76
+ * @date 1/2/18
77
+ * @since 5.6.5
78
+ *
79
+ * @param void
80
+ * @return void
81
+ */
82
+
83
+ var HasNoValue = HasValue.extend({
84
+ type: 'hasNoValue',
85
+ operator: '==empty',
86
+ label: __('Has no value'),
87
+ match: function( rule, field ){
88
+ return !HasValue.prototype.match.apply(this, arguments);
89
+ }
90
+ });
91
+
92
+ acf.registerConditionType( HasNoValue );
93
+
94
+
95
+
96
+ /**
97
+ * EqualTo
98
+ *
99
+ * description
100
+ *
101
+ * @date 1/2/18
102
+ * @since 5.6.5
103
+ *
104
+ * @param void
105
+ * @return void
106
+ */
107
+
108
+ var EqualTo = acf.Condition.extend({
109
+ type: 'equalTo',
110
+ operator: '==',
111
+ label: __('Value is equal to'),
112
+ fieldTypes: [ 'text', 'textarea', 'number', 'range', 'email', 'url', 'password' ],
113
+ match: function( rule, field ){
114
+ if( $.isNumeric(rule.value) ) {
115
+ return isEqualToNumber( rule.value, field.val() );
116
+ } else {
117
+ return isEqualTo( rule.value, field.val() );
118
+ }
119
+ },
120
+ choices: function( fieldObject ){
121
+ return '<input type="text" />';
122
+ }
123
+ });
124
+
125
+ acf.registerConditionType( EqualTo );
126
+
127
+ /**
128
+ * NotEqualTo
129
+ *
130
+ * description
131
+ *
132
+ * @date 1/2/18
133
+ * @since 5.6.5
134
+ *
135
+ * @param void
136
+ * @return void
137
+ */
138
+
139
+ var NotEqualTo = EqualTo.extend({
140
+ type: 'notEqualTo',
141
+ operator: '!=',
142
+ label: __('Value is not equal to'),
143
+ match: function( rule, field ){
144
+ return !EqualTo.prototype.match.apply(this, arguments);
145
+ }
146
+ });
147
+
148
+ acf.registerConditionType( NotEqualTo );
149
+
150
+ /**
151
+ * PatternMatch
152
+ *
153
+ * description
154
+ *
155
+ * @date 1/2/18
156
+ * @since 5.6.5
157
+ *
158
+ * @param void
159
+ * @return void
160
+ */
161
+
162
+ var PatternMatch = acf.Condition.extend({
163
+ type: 'patternMatch',
164
+ operator: '==pattern',
165
+ label: __('Value matches pattern'),
166
+ fieldTypes: [ 'text', 'textarea', 'email', 'url', 'password', 'wysiwyg' ],
167
+ match: function( rule, field ){
168
+ return matchesPattern( field.val(), rule.value );
169
+ },
170
+ choices: function( fieldObject ){
171
+ return '<input type="text" placeholder="[a-z0-9]" />';
172
+ }
173
+ });
174
+
175
+ acf.registerConditionType( PatternMatch );
176
+
177
+ /**
178
+ * Contains
179
+ *
180
+ * description
181
+ *
182
+ * @date 1/2/18
183
+ * @since 5.6.5
184
+ *
185
+ * @param void
186
+ * @return void
187
+ */
188
+
189
+ var Contains = acf.Condition.extend({
190
+ type: 'contains',
191
+ operator: '==contains',
192
+ label: __('Value contains'),
193
+ fieldTypes: [ 'text', 'textarea', 'number', 'email', 'url', 'password', 'wysiwyg', 'oembed', 'select' ],
194
+ match: function( rule, field ){
195
+ return containsString( field.val(), rule.value );
196
+ },
197
+ choices: function( fieldObject ){
198
+ return '<input type="text" />';
199
+ }
200
+ });
201
+
202
+ acf.registerConditionType( Contains );
203
+
204
+ /**
205
+ * TrueFalseEqualTo
206
+ *
207
+ * description
208
+ *
209
+ * @date 1/2/18
210
+ * @since 5.6.5
211
+ *
212
+ * @param void
213
+ * @return void
214
+ */
215
+
216
+ var TrueFalseEqualTo = EqualTo.extend({
217
+ type: 'trueFalseEqualTo',
218
+ choiceType: 'select',
219
+ fieldTypes: [ 'true_false' ],
220
+ choices: function( field ){
221
+ return [
222
+ {
223
+ id: 1,
224
+ text: __('Checked')
225
+ }
226
+ ];
227
+ },
228
+ });
229
+
230
+ acf.registerConditionType( TrueFalseEqualTo );
231
+
232
+ /**
233
+ * TrueFalseNotEqualTo
234
+ *
235
+ * description
236
+ *
237
+ * @date 1/2/18
238
+ * @since 5.6.5
239
+ *
240
+ * @param void
241
+ * @return void
242
+ */
243
+
244
+ var TrueFalseNotEqualTo = NotEqualTo.extend({
245
+ type: 'trueFalseNotEqualTo',
246
+ choiceType: 'select',
247
+ fieldTypes: [ 'true_false' ],
248
+ choices: function( field ){
249
+ return [
250
+ {
251
+ id: 1,
252
+ text: __('Checked')
253
+ }
254
+ ];
255
+ },
256
+ });
257
+
258
+ acf.registerConditionType( TrueFalseNotEqualTo );
259
+
260
+ /**
261
+ * SelectEqualTo
262
+ *
263
+ * description
264
+ *
265
+ * @date 1/2/18
266
+ * @since 5.6.5
267
+ *
268
+ * @param void
269
+ * @return void
270
+ */
271
+
272
+ var SelectEqualTo = acf.Condition.extend({
273
+ type: 'selectEqualTo',
274
+ operator: '==',
275
+ label: __('Value is equal to'),
276
+ fieldTypes: [ 'select', 'checkbox', 'radio', 'button_group' ],
277
+ match: function( rule, field ){
278
+ var val = field.val();
279
+ if( val instanceof Array ) {
280
+ return inArray( rule.value, val );
281
+ } else {
282
+ return isEqualTo( rule.value, val );
283
+ }
284
+ },
285
+ choices: function( fieldObject ){
286
+
287
+ // vars
288
+ var choices = [];
289
+ var lines = fieldObject.$setting('choices textarea').val().split("\n");
290
+
291
+ // allow null
292
+ if( fieldObject.$input('allow_null').prop('checked') ) {
293
+ choices.push({
294
+ id: '',
295
+ text: __('Null')
296
+ });
297
+ }
298
+
299
+ // loop
300
+ lines.map(function( line ){
301
+
302
+ // split
303
+ line = line.split(':');
304
+
305
+ // default label to value
306
+ line[1] = line[1] || line[0];
307
+
308
+ // append
309
+ choices.push({
310
+ id: $.trim( line[0] ),
311
+ text: $.trim( line[1] )
312
+ });
313
+ });
314
+
315
+ // return
316
+ return choices;
317
+ },
318
+ });
319
+
320
+ acf.registerConditionType( SelectEqualTo );
321
+
322
+ /**
323
+ * SelectNotEqualTo
324
+ *
325
+ * description
326
+ *
327
+ * @date 1/2/18
328
+ * @since 5.6.5
329
+ *
330
+ * @param void
331
+ * @return void
332
+ */
333
+
334
+ var SelectNotEqualTo = SelectEqualTo.extend({
335
+ type: 'selectNotEqualTo',
336
+ operator: '!=',
337
+ label: __('Value is not equal to'),
338
+ match: function( rule, field ){
339
+ return !SelectEqualTo.prototype.match.apply(this, arguments);
340
+ }
341
+ });
342
+
343
+ acf.registerConditionType( SelectNotEqualTo );
344
+
345
+ /**
346
+ * GreaterThan
347
+ *
348
+ * description
349
+ *
350
+ * @date 1/2/18
351
+ * @since 5.6.5
352
+ *
353
+ * @param void
354
+ * @return void
355
+ */
356
+
357
+ var GreaterThan = acf.Condition.extend({
358
+ type: 'greaterThan',
359
+ operator: '>',
360
+ label: __('Value is greater than'),
361
+ fieldTypes: [ 'number', 'range' ],
362
+ match: function( rule, field ){
363
+ var val = field.val();
364
+ if( val instanceof Array ) {
365
+ val = val.length;
366
+ }
367
+ return isGreaterThan( val, rule.value );
368
+ },
369
+ choices: function( fieldObject ){
370
+ return '<input type="number" />';
371
+ }
372
+ });
373
+
374
+ acf.registerConditionType( GreaterThan );
375
+
376
+
377
+ /**
378
+ * LessThan
379
+ *
380
+ * description
381
+ *
382
+ * @date 1/2/18
383
+ * @since 5.6.5
384
+ *
385
+ * @param void
386
+ * @return void
387
+ */
388
+
389
+ var LessThan = GreaterThan.extend({
390
+ type: 'lessThan',
391
+ operator: '<',
392
+ label: __('Value is less than'),
393
+ match: function( rule, field ){
394
+ var val = field.val();
395
+ if( val instanceof Array ) {
396
+ val = val.length;
397
+ }
398
+ return isLessThan( val, rule.value );
399
+ },
400
+ choices: function( fieldObject ){
401
+ return '<input type="number" />';
402
+ }
403
+ });
404
+
405
+ acf.registerConditionType( LessThan );
406
+
407
+ /**
408
+ * SelectedGreaterThan
409
+ *
410
+ * description
411
+ *
412
+ * @date 1/2/18
413
+ * @since 5.6.5
414
+ *
415
+ * @param void
416
+ * @return void
417
+ */
418
+
419
+ var SelectionGreaterThan = GreaterThan.extend({
420
+ type: 'selectionGreaterThan',
421
+ label: __('Selection is greater than'),
422
+ fieldTypes: [ 'checkbox', 'select', 'post_object', 'page_link', 'relationship', 'taxonomy', 'user' ],
423
+ });
424
+
425
+ acf.registerConditionType( SelectionGreaterThan );
426
+
427
+ /**
428
+ * SelectedGreaterThan
429
+ *
430
+ * description
431
+ *
432
+ * @date 1/2/18
433
+ * @since 5.6.5
434
+ *
435
+ * @param void
436
+ * @return void
437
+ */
438
+
439
+ var SelectionLessThan = LessThan.extend({
440
+ type: 'selectionLessThan',
441
+ label: __('Selection is less than'),
442
+ fieldTypes: [ 'checkbox', 'select', 'post_object', 'page_link', 'relationship', 'taxonomy', 'user' ],
443
+ });
444
+
445
+ acf.registerConditionType( SelectionLessThan );
446
+
447
+ })(jQuery);
assets/build/js/_acf-condition.js ADDED
@@ -0,0 +1,249 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ // vars
4
+ var storage = [];
5
+
6
+ /**
7
+ * acf.Condition
8
+ *
9
+ * description
10
+ *
11
+ * @date 23/3/18
12
+ * @since 5.6.9
13
+ *
14
+ * @param type $var Description. Default.
15
+ * @return type Description.
16
+ */
17
+
18
+ acf.Condition = acf.Model.extend({
19
+
20
+ type: '', // used for model name
21
+ operator: '==', // rule operator
22
+ label: '', // label shown when editing fields
23
+ choiceType: 'input', // input, select
24
+ fieldTypes: [], // auto connect this conditions with these field types
25
+
26
+ data: {
27
+ conditions: false, // the parent instance
28
+ field: false, // the field which we query against
29
+ rule: {} // the rule [field, operator, value]
30
+ },
31
+
32
+ events: {
33
+ 'change': 'change',
34
+ 'keyup': 'change',
35
+ 'enableField': 'change',
36
+ 'disableField': 'change'
37
+ },
38
+
39
+ setup: function( props ){
40
+ $.extend(this.data, props);
41
+ },
42
+
43
+ getEventTarget: function( $el, event ){
44
+ return $el || this.get('field').$el;
45
+ },
46
+
47
+ change: function( e, $el ){
48
+ this.get('conditions').change( e );
49
+ },
50
+
51
+ match: function( rule, field ){
52
+ return false;
53
+ },
54
+
55
+ calculate: function(){
56
+ return this.match( this.get('rule'), this.get('field') );
57
+ },
58
+
59
+ choices: function( field ){
60
+ return '<input type="text" />';
61
+ }
62
+ });
63
+
64
+ /**
65
+ * acf.newCondition
66
+ *
67
+ * description
68
+ *
69
+ * @date 1/2/18
70
+ * @since 5.6.5
71
+ *
72
+ * @param type $var Description. Default.
73
+ * @return type Description.
74
+ */
75
+
76
+ acf.newCondition = function( rule, conditions ){
77
+
78
+ // currently setting up conditions for fieldX, this field is the 'target'
79
+ var target = conditions.get('field');
80
+
81
+ // use the 'target' to find the 'trigger' field.
82
+ // - this field is used to setup the conditional logic events
83
+ var field = target.getField( rule.field );
84
+
85
+ // bail ealry if no target or no field (possible if field doesn't exist due to HTML error)
86
+ if( !target || !field ) {
87
+ return false;
88
+ }
89
+
90
+ // vars
91
+ var args = {
92
+ rule: rule,
93
+ target: target,
94
+ conditions: conditions,
95
+ field: field
96
+ };
97
+
98
+ // vars
99
+ var fieldType = field.get('type');
100
+ var operator = rule.operator;
101
+
102
+ // get avaibale conditions
103
+ var conditionTypes = acf.getConditionTypes({
104
+ fieldType: fieldType,
105
+ operator: operator,
106
+ });
107
+
108
+ // instantiate
109
+ var model = conditionTypes[0] || acf.Condition;
110
+
111
+ // instantiate
112
+ var condition = new model( args );
113
+
114
+ // return
115
+ return condition;
116
+ };
117
+
118
+ /**
119
+ * mid
120
+ *
121
+ * Calculates the model ID for a field type
122
+ *
123
+ * @date 15/12/17
124
+ * @since 5.6.5
125
+ *
126
+ * @param string type
127
+ * @return string
128
+ */
129
+
130
+ var modelId = function( type ) {
131
+ return acf.strPascalCase( type || '' ) + 'Condition';
132
+ };
133
+
134
+ /**
135
+ * acf.registerConditionType
136
+ *
137
+ * description
138
+ *
139
+ * @date 1/2/18
140
+ * @since 5.6.5
141
+ *
142
+ * @param type $var Description. Default.
143
+ * @return type Description.
144
+ */
145
+
146
+ acf.registerConditionType = function( model ){
147
+
148
+ // vars
149
+ var proto = model.prototype;
150
+ var type = proto.type;
151
+ var mid = modelId( type );
152
+
153
+ // store model
154
+ acf.models[ mid ] = model;
155
+
156
+ // store reference
157
+ storage.push( type );
158
+ };
159
+
160
+ /**
161
+ * acf.getConditionType
162
+ *
163
+ * description
164
+ *
165
+ * @date 1/2/18
166
+ * @since 5.6.5
167
+ *
168
+ * @param type $var Description. Default.
169
+ * @return type Description.
170
+ */
171
+
172
+ acf.getConditionType = function( type ){
173
+ var mid = modelId( type );
174
+ return acf.models[ mid ] || false;
175
+ }
176
+
177
+ /**
178
+ * acf.registerConditionForFieldType
179
+ *
180
+ * description
181
+ *
182
+ * @date 1/2/18
183
+ * @since 5.6.5
184
+ *
185
+ * @param type $var Description. Default.
186
+ * @return type Description.
187
+ */
188
+
189
+ acf.registerConditionForFieldType = function( conditionType, fieldType ){
190
+
191
+ // get model
192
+ var model = acf.getConditionType( conditionType );
193
+
194
+ // append
195
+ if( model ) {
196
+ model.prototype.fieldTypes.push( fieldType );
197
+ }
198
+ };
199
+
200
+ /**
201
+ * acf.getConditionTypes
202
+ *
203
+ * description
204
+ *
205
+ * @date 1/2/18
206
+ * @since 5.6.5
207
+ *
208
+ * @param type $var Description. Default.
209
+ * @return type Description.
210
+ */
211
+
212
+ acf.getConditionTypes = function( args ){
213
+
214
+ // defaults
215
+ args = acf.parseArgs(args, {
216
+ fieldType: '',
217
+ operator: ''
218
+ });
219
+
220
+ // clonse available types
221
+ var types = [];
222
+
223
+ // loop
224
+ storage.map(function( type ){
225
+
226
+ // vars
227
+ var model = acf.getConditionType(type);
228
+ var ProtoFieldTypes = model.prototype.fieldTypes;
229
+ var ProtoOperator = model.prototype.operator;
230
+
231
+ // check fieldType
232
+ if( args.fieldType && ProtoFieldTypes.indexOf( args.fieldType ) === -1 ) {
233
+ return;
234
+ }
235
+
236
+ // check operator
237
+ if( args.operator && ProtoOperator !== args.operator ) {
238
+ return;
239
+ }
240
+
241
+ // append
242
+ types.push( model );
243
+ });
244
+
245
+ // return
246
+ return types;
247
+ };
248
+
249
+ })(jQuery);
assets/build/js/_acf-conditions.js ADDED
@@ -0,0 +1,306 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ // vars
4
+ var CONTEXT = 'conditional_logic';
5
+
6
+ /**
7
+ * conditionsManager
8
+ *
9
+ * description
10
+ *
11
+ * @date 1/2/18
12
+ * @since 5.6.5
13
+ *
14
+ * @param type $var Description. Default.
15
+ * @return type Description.
16
+ */
17
+
18
+ var conditionsManager = new acf.Model({
19
+
20
+ id: 'conditionsManager',
21
+
22
+ priority: 20, // run actions later
23
+
24
+ actions: {
25
+ 'new_field': 'onNewField',
26
+ },
27
+
28
+ onNewField: function( field ){
29
+ if( field.has('conditions') ) {
30
+ field.getConditions().render();
31
+ }
32
+ },
33
+ });
34
+
35
+ /**
36
+ * acf.Field.prototype.getField
37
+ *
38
+ * Finds a field that is related to another field
39
+ *
40
+ * @date 1/2/18
41
+ * @since 5.6.5
42
+ *
43
+ * @param type $var Description. Default.
44
+ * @return type Description.
45
+ */
46
+
47
+ var getSiblingField = function( field, key ){
48
+
49
+ // find sibling (very fast)
50
+ var fields = acf.getFields({
51
+ key: key,
52
+ sibling: field.$el,
53
+ suppressFilters: true,
54
+ });
55
+
56
+ // find sibling-children (fast)
57
+ // needed for group fields, accordions, etc
58
+ if( !fields.length ) {
59
+ fields = acf.getFields({
60
+ key: key,
61
+ parent: field.$el.parent(),
62
+ suppressFilters: true,
63
+ });
64
+ }
65
+
66
+ // return
67
+ if( fields.length ) {
68
+ return fields[0];
69
+ }
70
+ return false;
71
+ };
72
+
73
+ acf.Field.prototype.getField = function( key ){
74
+
75
+ // get sibling field
76
+ var field = getSiblingField( this, key );
77
+
78
+ // return early
79
+ if( field ) {
80
+ return field;
81
+ }
82
+
83
+ // move up through each parent and try again
84
+ var parents = this.parents();
85
+ for( var i = 0; i < parents.length; i++ ) {
86
+
87
+ // get sibling field
88
+ field = getSiblingField( parents[i], key );
89
+
90
+ // return early
91
+ if( field ) {
92
+ return field;
93
+ }
94
+ }
95
+
96
+ // return
97
+ return false;
98
+ };
99
+
100
+
101
+ /**
102
+ * acf.Field.prototype.getConditions
103
+ *
104
+ * Returns the field's conditions instance
105
+ *
106
+ * @date 1/2/18
107
+ * @since 5.6.5
108
+ *
109
+ * @param type $var Description. Default.
110
+ * @return type Description.
111
+ */
112
+
113
+ acf.Field.prototype.getConditions = function(){
114
+
115
+ // instantiate
116
+ if( !this.conditions ) {
117
+ this.conditions = new Conditions( this );
118
+ }
119
+
120
+ // return
121
+ return this.conditions;
122
+ };
123
+
124
+
125
+ /**
126
+ * Conditions
127
+ *
128
+ * description
129
+ *
130
+ * @date 1/2/18
131
+ * @since 5.6.5
132
+ *
133
+ * @param type $var Description. Default.
134
+ * @return type Description.
135
+ */
136
+ var timeout = false;
137
+ var Conditions = acf.Model.extend({
138
+
139
+ id: 'Conditions',
140
+
141
+ data: {
142
+ field: false, // The field with "data-conditions" (target).
143
+ timeStamp: false, // Reference used during "change" event.
144
+ groups: [], // The groups of condition instances.
145
+ },
146
+
147
+ setup: function( field ){
148
+
149
+ // data
150
+ this.data.field = field;
151
+
152
+ // vars
153
+ var conditions = field.get('conditions');
154
+
155
+ // detect groups
156
+ if( conditions instanceof Array ) {
157
+
158
+ // detect groups
159
+ if( conditions[0] instanceof Array ) {
160
+
161
+ // loop
162
+ conditions.map(function(rules, i){
163
+ this.addRules( rules, i );
164
+ }, this);
165
+
166
+ // detect rules
167
+ } else {
168
+ this.addRules( conditions );
169
+ }
170
+
171
+ // detect rule
172
+ } else {
173
+ this.addRule( conditions );
174
+ }
175
+ },
176
+
177
+ change: function( e ){
178
+
179
+ // this function may be triggered multiple times per event due to multiple condition classes
180
+ // compare timestamp to allow only 1 trigger per event
181
+ if( this.get('timeStamp') === e.timeStamp ) {
182
+ return false;
183
+ } else {
184
+ this.set('timeStamp', e.timeStamp, true);
185
+ }
186
+
187
+ // render condition and store result
188
+ var changed = this.render();
189
+ },
190
+
191
+ render: function(){
192
+ return this.calculate() ? this.show() : this.hide();
193
+ },
194
+
195
+ show: function(){
196
+ return this.get('field').showEnable(this.cid, CONTEXT);
197
+ },
198
+
199
+ hide: function(){
200
+ return this.get('field').hideDisable(this.cid, CONTEXT);
201
+ },
202
+
203
+ calculate: function(){
204
+
205
+ // vars
206
+ var pass = false;
207
+
208
+ // loop
209
+ this.getGroups().map(function( group ){
210
+
211
+ // igrnore this group if another group passed
212
+ if( pass ) return;
213
+
214
+ // find passed
215
+ var passed = group.filter(function(condition){
216
+ return condition.calculate();
217
+ });
218
+
219
+ // if all conditions passed, update the global var
220
+ if( passed.length == group.length ) {
221
+ pass = true;
222
+ }
223
+ });
224
+
225
+ return pass;
226
+ },
227
+
228
+ hasGroups: function(){
229
+ return this.data.groups != null;
230
+ },
231
+
232
+ getGroups: function(){
233
+ return this.data.groups;
234
+ },
235
+
236
+ addGroup: function(){
237
+ var group = [];
238
+ this.data.groups.push( group );
239
+ return group;
240
+ },
241
+
242
+ hasGroup: function( i ){
243
+ return this.data.groups[i] != null;
244
+ },
245
+
246
+ getGroup: function( i ){
247
+ return this.data.groups[i];
248
+ },
249
+
250
+ removeGroup: function( i ){
251
+ this.data.groups[i].delete;
252
+ return this;
253
+ },
254
+
255
+ addRules: function( rules, group ){
256
+ rules.map(function( rule ){
257
+ this.addRule( rule, group );
258
+ }, this);
259
+ },
260
+
261
+ addRule: function( rule, group ){
262
+
263
+ // defaults
264
+ group = group || 0;
265
+
266
+ // vars
267
+ var groupArray;
268
+
269
+ // get group
270
+ if( this.hasGroup(group) ) {
271
+ groupArray = this.getGroup(group);
272
+ } else {
273
+ groupArray = this.addGroup();
274
+ }
275
+
276
+ // instantiate
277
+ var condition = acf.newCondition( rule, this );
278
+
279
+ // bail ealry if condition failed (field did not exist)
280
+ if( !condition ) {
281
+ return false;
282
+ }
283
+
284
+ // add rule
285
+ groupArray.push(condition);
286
+ },
287
+
288
+ hasRule: function(){
289
+
290
+ },
291
+
292
+ getRule: function( rule, group ){
293
+
294
+ // defaults
295
+ rule = rule || 0;
296
+ group = group || 0;
297
+
298
+ return this.data.groups[ group ][ rule ];
299
+ },
300
+
301
+ removeRule: function(){
302
+
303
+ }
304
+ });
305
+
306
+ })(jQuery);
assets/build/js/_acf-field-accordion.js ADDED
@@ -0,0 +1,232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var i = 0;
4
+
5
+ var Field = acf.Field.extend({
6
+
7
+ type: 'accordion',
8
+
9
+ wait: '',
10
+
11
+ $control: function(){
12
+ return this.$('.acf-fields:first');
13
+ },
14
+
15
+ initialize: function(){
16
+
17
+ // bail early if is cell
18
+ if( this.$el.is('td') ) return;
19
+
20
+ // enpoint
21
+ if( this.get('endpoint') ) {
22
+ return this.remove();
23
+ }
24
+
25
+ // vars
26
+ var $field = this.$el;
27
+ var $label = this.$labelWrap()
28
+ var $input = this.$inputWrap();
29
+ var $wrap = this.$control();
30
+ var $instructions = $input.children('.description');
31
+
32
+ // force description into label
33
+ if( $instructions.length ) {
34
+ $label.append( $instructions );
35
+ }
36
+
37
+ // table
38
+ if( this.$el.is('tr') ) {
39
+
40
+ // vars
41
+ var $table = this.$el.closest('table');
42
+ var $newLabel = $('<div class="acf-accordion-title"/>');
43
+ var $newInput = $('<div class="acf-accordion-content"/>');
44
+ var $newTable = $('<table class="' + $table.attr('class') + '"/>');
45
+ var $newWrap = $('<tbody/>');
46
+
47
+ // dom
48
+ $newLabel.append( $label.html() );
49
+ $newTable.append( $newWrap );
50
+ $newInput.append( $newTable );
51
+ $input.append( $newLabel );
52
+ $input.append( $newInput );
53
+
54
+ // modify
55
+ $label.remove();
56
+ $wrap.remove();
57
+ $input.attr('colspan', 2);
58
+
59
+ // update vars
60
+ $label = $newLabel;
61
+ $input = $newInput;
62
+ $wrap = $newWrap;
63
+ }
64
+
65
+ // add classes
66
+ $field.addClass('acf-accordion');
67
+ $label.addClass('acf-accordion-title');
68
+ $input.addClass('acf-accordion-content');
69
+
70
+ // index
71
+ i++;
72
+
73
+ // multi-expand
74
+ if( this.get('multi_expand') ) {
75
+ $field.attr('multi-expand', 1);
76
+ }
77
+
78
+ // open
79
+ var order = acf.getPreference('this.accordions') || [];
80
+ if( order[i-1] !== undefined ) {
81
+ this.set('open', order[i-1]);
82
+ }
83
+
84
+ if( this.get('open') ) {
85
+ $field.addClass('-open');
86
+ $input.css('display', 'block'); // needed for accordion to close smoothly
87
+ }
88
+
89
+ // add icon
90
+ $label.prepend( accordionManager.iconHtml({ open: this.get('open') }) );
91
+
92
+ // classes
93
+ // - remove 'inside' which is a #poststuff WP class
94
+ var $parent = $field.parent();
95
+ $wrap.addClass( $parent.hasClass('-left') ? '-left' : '' );
96
+ $wrap.addClass( $parent.hasClass('-clear') ? '-clear' : '' );
97
+
98
+ // append
99
+ $wrap.append( $field.nextUntil('.acf-field-accordion', '.acf-field') );
100
+
101
+ // clean up
102
+ $wrap.removeAttr('data-open data-multi_expand data-endpoint');
103
+ },
104
+
105
+ });
106
+
107
+ acf.registerFieldType( Field );
108
+
109
+
110
+ /**
111
+ * accordionManager
112
+ *
113
+ * Events manager for the acf accordion
114
+ *
115
+ * @date 14/2/18
116
+ * @since 5.6.9
117
+ *
118
+ * @param void
119
+ * @return void
120
+ */
121
+
122
+ var accordionManager = new acf.Model({
123
+
124
+ actions: {
125
+ 'unload': 'onUnload'
126
+ },
127
+
128
+ events: {
129
+ 'click .acf-accordion-title': 'onClick',
130
+ 'invalidField .acf-accordion': 'onInvalidField'
131
+ },
132
+
133
+ isOpen: function( $el ) {
134
+ return $el.hasClass('-open');
135
+ },
136
+
137
+ toggle: function( $el ){
138
+ if( this.isOpen($el) ) {
139
+ this.close( $el );
140
+ } else {
141
+ this.open( $el );
142
+ }
143
+ },
144
+
145
+ iconHtml: function( props ){
146
+
147
+ // Determine icon.
148
+ //if( acf.isGutenberg() ) {
149
+ // var icon = props.open ? 'arrow-up-alt2' : 'arrow-down-alt2';
150
+ //} else {
151
+ var icon = props.open ? 'arrow-down' : 'arrow-right';
152
+ //}
153
+
154
+ // Return HTML.
155
+ return '<i class="acf-accordion-icon dashicons dashicons-' + icon + '"></i>';
156
+ },
157
+
158
+ open: function( $el ){
159
+
160
+ // open
161
+ $el.find('.acf-accordion-content:first').slideDown().css('display', 'block');
162
+ $el.find('.acf-accordion-icon:first').replaceWith( this.iconHtml({ open: true }) );
163
+ $el.addClass('-open');
164
+
165
+ // action
166
+ acf.doAction('show', $el);
167
+
168
+ // close siblings
169
+ if( !$el.attr('multi-expand') ) {
170
+ $el.siblings('.acf-accordion.-open').each(function(){
171
+ accordionManager.close( $(this) );
172
+ });
173
+ }
174
+ },
175
+
176
+ close: function( $el ){
177
+
178
+ // close
179
+ $el.find('.acf-accordion-content:first').slideUp();
180
+ $el.find('.acf-accordion-icon:first').replaceWith( this.iconHtml({ open: false }) );
181
+ $el.removeClass('-open');
182
+
183
+ // action
184
+ acf.doAction('hide', $el);
185
+ },
186
+
187
+ onClick: function( e, $el ){
188
+
189
+ // prevent Defailt
190
+ e.preventDefault();
191
+
192
+ // open close
193
+ this.toggle( $el.parent() );
194
+
195
+ },
196
+
197
+ onInvalidField: function( e, $el ){
198
+
199
+ // bail early if already focused
200
+ if( this.busy ) {
201
+ return;
202
+ }
203
+
204
+ // disable functionality for 1sec (allow next validation to work)
205
+ this.busy = true;
206
+ this.setTimeout(function(){
207
+ this.busy = false;
208
+ }, 1000);
209
+
210
+ // open accordion
211
+ this.open( $el );
212
+ },
213
+
214
+ onUnload: function( e ){
215
+
216
+ // vars
217
+ var order = [];
218
+
219
+ // loop
220
+ $('.acf-accordion').each(function(){
221
+ var open = $(this).hasClass('-open') ? 1 : 0;
222
+ order.push(open);
223
+ });
224
+
225
+ // set
226
+ if( order.length ) {
227
+ acf.setPreference('this.accordions', order);
228
+ }
229
+ }
230
+ });
231
+
232
+ })(jQuery);
assets/build/js/_acf-field-button-group.js ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'button_group',
6
+
7
+ events: {
8
+ 'click input[type="radio"]': 'onClick'
9
+ },
10
+
11
+ $control: function(){
12
+ return this.$('.acf-button-group');
13
+ },
14
+
15
+ $input: function(){
16
+ return this.$('input:checked');
17
+ },
18
+
19
+ setValue: function( val ){
20
+ this.$('input[value="' + val + '"]').prop('checked', true).trigger('change');
21
+ },
22
+
23
+ onClick: function( e, $el ){
24
+
25
+ // vars
26
+ var $label = $el.parent('label');
27
+ var selected = $label.hasClass('selected');
28
+
29
+ // remove previous selected
30
+ this.$('.selected').removeClass('selected');
31
+
32
+ // add active class
33
+ $label.addClass('selected');
34
+
35
+ // allow null
36
+ if( this.get('allow_null') && selected ) {
37
+ $label.removeClass('selected');
38
+ $el.prop('checked', false).trigger('change');
39
+ }
40
+ }
41
+ });
42
+
43
+ acf.registerFieldType( Field );
44
+
45
+ })(jQuery);
assets/build/js/_acf-field-checkbox.js ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'checkbox',
6
+
7
+ events: {
8
+ 'change input': 'onChange',
9
+ 'click .acf-add-checkbox': 'onClickAdd',
10
+ 'click .acf-checkbox-toggle': 'onClickToggle',
11
+ 'click .acf-checkbox-custom': 'onClickCustom'
12
+ },
13
+
14
+ $control: function(){
15
+ return this.$('.acf-checkbox-list');
16
+ },
17
+
18
+ $toggle: function(){
19
+ return this.$('.acf-checkbox-toggle');
20
+ },
21
+
22
+ $input: function(){
23
+ return this.$('input[type="hidden"]');
24
+ },
25
+
26
+ $inputs: function(){
27
+ return this.$('input[type="checkbox"]').not('.acf-checkbox-toggle');
28
+ },
29
+
30
+ getValue: function(){
31
+ var val = [];
32
+ this.$(':checked').each(function(){
33
+ val.push( $(this).val() );
34
+ });
35
+ return val.length ? val : false;
36
+ },
37
+
38
+ onChange: function( e, $el ){
39
+
40
+ // vars
41
+ var checked = $el.prop('checked');
42
+ var $toggle = this.$toggle();
43
+
44
+ // selected
45
+ if( checked ) {
46
+ $el.parent().addClass('selected');
47
+ } else {
48
+ $el.parent().removeClass('selected');
49
+ }
50
+
51
+ // determine if all inputs are checked
52
+ if( $toggle.length ) {
53
+ var $inputs = this.$inputs();
54
+
55
+ // all checked
56
+ if( $inputs.not(':checked').length == 0 ) {
57
+ $toggle.prop('checked', true);
58
+ } else {
59
+ $toggle.prop('checked', false);
60
+ }
61
+ }
62
+ },
63
+
64
+ onClickAdd: function( e, $el ){
65
+ var html = '<li><input class="acf-checkbox-custom" type="checkbox" checked="checked" /><input type="text" name="' + this.getInputName() + '[]" /></li>';
66
+ $el.parent('li').before( html );
67
+ },
68
+
69
+ onClickToggle: function( e, $el ){
70
+ var checked = $el.prop('checked');
71
+ var $inputs = this.$inputs();
72
+ $inputs.prop('checked', checked);
73
+ },
74
+
75
+ onClickCustom: function( e, $el ){
76
+ var checked = $el.prop('checked');
77
+ var $text = $el.next('input[type="text"]');
78
+
79
+ // checked
80
+ if( checked ) {
81
+ $text.prop('disabled', false);
82
+
83
+ // not checked
84
+ } else {
85
+ $text.prop('disabled', true);
86
+
87
+ // remove
88
+ if( $text.val() == '' ) {
89
+ $el.parent('li').remove();
90
+ }
91
+ }
92
+ }
93
+ });
94
+
95
+ acf.registerFieldType( Field );
96
+
97
+ })(jQuery);
assets/build/js/_acf-field-color-picker.js ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'color_picker',
6
+
7
+ wait: 'load',
8
+
9
+ $control: function(){
10
+ return this.$('.acf-color-picker');
11
+ },
12
+
13
+ $input: function(){
14
+ return this.$('input[type="hidden"]');
15
+ },
16
+
17
+ $inputText: function(){
18
+ return this.$('input[type="text"]');
19
+ },
20
+
21
+ setValue: function( val ){
22
+
23
+ // update input (with change)
24
+ acf.val( this.$input(), val );
25
+
26
+ // update iris
27
+ this.$inputText().iris('color', val);
28
+ },
29
+
30
+ initialize: function(){
31
+
32
+ // vars
33
+ var $input = this.$input();
34
+ var $inputText = this.$inputText();
35
+
36
+ // event
37
+ var onChange = function( e ){
38
+
39
+ // timeout is required to ensure the $input val is correct
40
+ setTimeout(function(){
41
+ acf.val( $input, $inputText.val() );
42
+ }, 1);
43
+ }
44
+
45
+ // args
46
+ var args = {
47
+ defaultColor: false,
48
+ palettes: true,
49
+ hide: true,
50
+ change: onChange,
51
+ clear: onChange
52
+ };
53
+
54
+ // filter
55
+ var args = acf.applyFilters('color_picker_args', args, this);
56
+
57
+ // initialize
58
+ $inputText.wpColorPicker( args );
59
+ }
60
+ });
61
+
62
+ acf.registerFieldType( Field );
63
+
64
+ })(jQuery);
assets/build/js/_acf-field-date-picker.js ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'date_picker',
6
+
7
+ events: {
8
+ 'blur input[type="text"]': 'onBlur'
9
+ },
10
+
11
+ $control: function(){
12
+ return this.$('.acf-date-picker');
13
+ },
14
+
15
+ $input: function(){
16
+ return this.$('input[type="hidden"]');
17
+ },
18
+
19
+ $inputText: function(){
20
+ return this.$('input[type="text"]');
21
+ },
22
+
23
+ initialize: function(){
24
+
25
+ // save_format: compatibility with ACF < 5.0.0
26
+ if( this.has('save_format') ) {
27
+ return this.initializeCompatibility();
28
+ }
29
+
30
+ // vars
31
+ var $input = this.$input();
32
+ var $inputText = this.$inputText();
33
+
34
+ // args
35
+ var args = {
36
+ dateFormat: this.get('date_format'),
37
+ altField: $input,
38
+ altFormat: 'yymmdd',
39
+ changeYear: true,
40
+ yearRange: "-100:+100",
41
+ changeMonth: true,
42
+ showButtonPanel: true,
43
+ firstDay: this.get('first_day')
44
+ };
45
+
46
+ // filter
47
+ args = acf.applyFilters('date_picker_args', args, this);
48
+
49
+ // add date picker
50
+ acf.newDatePicker( $inputText, args );
51
+
52
+ // action
53
+ acf.doAction('date_picker_init', $inputText, args, this);
54
+
55
+ },
56
+
57
+ initializeCompatibility: function(){
58
+
59
+ // vars
60
+ var $input = this.$input();
61
+ var $inputText = this.$inputText();
62
+
63
+ // get and set value from alt field
64
+ $inputText.val( $input.val() );
65
+
66
+ // args
67
+ var args = {
68
+ dateFormat: this.get('date_format'),
69
+ altField: $input,
70
+ altFormat: this.get('save_format'),
71
+ changeYear: true,
72
+ yearRange: "-100:+100",
73
+ changeMonth: true,
74
+ showButtonPanel: true,
75
+ firstDay: this.get('first_day')
76
+ };
77
+
78
+ // filter for 3rd party customization
79
+ args = acf.applyFilters('date_picker_args', args, this);
80
+
81
+ // backup
82
+ var dateFormat = args.dateFormat;
83
+
84
+ // change args.dateFormat
85
+ args.dateFormat = this.get('save_format');
86
+
87
+ // add date picker
88
+ acf.newDatePicker( $inputText, args );
89
+
90
+ // now change the format back to how it should be.
91
+ $inputText.datepicker( 'option', 'dateFormat', dateFormat );
92
+
93
+ // action for 3rd party customization
94
+ acf.doAction('date_picker_init', $inputText, args, this);
95
+ },
96
+
97
+ onBlur: function(){
98
+ if( !this.$inputText().val() ) {
99
+ acf.val( this.$input(), '' );
100
+ }
101
+ }
102
+ });
103
+
104
+ acf.registerFieldType( Field );
105
+
106
+
107
+ // manager
108
+ var datePickerManager = new acf.Model({
109
+ priority: 5,
110
+ wait: 'ready',
111
+ initialize: function(){
112
+
113
+ // vars
114
+ var locale = acf.get('locale');
115
+ var rtl = acf.get('rtl');
116
+ var l10n = acf.get('datePickerL10n');
117
+
118
+ // bail ealry if no l10n
119
+ if( !l10n ) {
120
+ return false;
121
+ }
122
+
123
+ // bail ealry if no datepicker library
124
+ if( typeof $.datepicker === 'undefined' ) {
125
+ return false;
126
+ }
127
+
128
+ // rtl
129
+ l10n.isRTL = rtl;
130
+
131
+ // append
132
+ $.datepicker.regional[ locale ] = l10n;
133
+ $.datepicker.setDefaults(l10n);
134
+ }
135
+ });
136
+
137
+ // add
138
+ acf.newDatePicker = function( $input, args ){
139
+
140
+ // bail ealry if no datepicker library
141
+ if( typeof $.datepicker === 'undefined' ) {
142
+ return false;
143
+ }
144
+
145
+ // defaults
146
+ args = args || {};
147
+
148
+ // initialize
149
+ $input.datepicker( args );
150
+
151
+ // wrap the datepicker (only if it hasn't already been wrapped)
152
+ if( $('body > #ui-datepicker-div').exists() ) {
153
+ $('body > #ui-datepicker-div').wrap('<div class="acf-ui-datepicker" />');
154
+ }
155
+ };
156
+
157
+ })(jQuery);
assets/build/js/_acf-field-date-time-picker.js ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.models.DatePickerField.extend({
4
+
5
+ type: 'date_time_picker',
6
+
7
+ $control: function(){
8
+ return this.$('.acf-date-time-picker');
9
+ },
10
+
11
+ initialize: function(){
12
+
13
+ // vars
14
+ var $input = this.$input();
15
+ var $inputText = this.$inputText();
16
+
17
+ // args
18
+ var args = {
19
+ dateFormat: this.get('date_format'),
20
+ timeFormat: this.get('time_format'),
21
+ altField: $input,
22
+ altFieldTimeOnly: false,
23
+ altFormat: 'yy-mm-dd',
24
+ altTimeFormat: 'HH:mm:ss',
25
+ changeYear: true,
26
+ yearRange: "-100:+100",
27
+ changeMonth: true,
28
+ showButtonPanel: true,
29
+ firstDay: this.get('first_day'),
30
+ controlType: 'select',
31
+ oneLine: true
32
+ };
33
+
34
+ // filter
35
+ args = acf.applyFilters('date_time_picker_args', args, this);
36
+
37
+ // add date time picker
38
+ acf.newDateTimePicker( $inputText, args );
39
+
40
+ // action
41
+ acf.doAction('date_time_picker_init', $inputText, args, this);
42
+ }
43
+ });
44
+
45
+ acf.registerFieldType( Field );
46
+
47
+
48
+ // manager
49
+ var dateTimePickerManager = new acf.Model({
50
+ priority: 5,
51
+ wait: 'ready',
52
+ initialize: function(){
53
+
54
+ // vars
55
+ var locale = acf.get('locale');
56
+ var rtl = acf.get('rtl');
57
+ var l10n = acf.get('dateTimePickerL10n');
58
+
59
+ // bail ealry if no l10n
60
+ if( !l10n ) {
61
+ return false;
62
+ }
63
+
64
+ // bail ealry if no datepicker library
65
+ if( typeof $.timepicker === 'undefined' ) {
66
+ return false;
67
+ }
68
+
69
+ // rtl
70
+ l10n.isRTL = rtl;
71
+
72
+ // append
73
+ $.timepicker.regional[ locale ] = l10n;
74
+ $.timepicker.setDefaults(l10n);
75
+ }
76
+ });
77
+
78
+
79
+ // add
80
+ acf.newDateTimePicker = function( $input, args ){
81
+
82
+ // bail ealry if no datepicker library
83
+ if( typeof $.timepicker === 'undefined' ) {
84
+ return false;
85
+ }
86
+
87
+ // defaults
88
+ args = args || {};
89
+
90
+ // initialize
91
+ $input.datetimepicker( args );
92
+
93
+ // wrap the datepicker (only if it hasn't already been wrapped)
94
+ if( $('body > #ui-datepicker-div').exists() ) {
95
+ $('body > #ui-datepicker-div').wrap('<div class="acf-ui-datepicker" />');
96
+ }
97
+ };
98
+
99
+ })(jQuery);
assets/build/js/_acf-field-file.js ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.models.ImageField.extend({
4
+
5
+ type: 'file',
6
+
7
+ $control: function(){
8
+ return this.$('.acf-file-uploader');
9
+ },
10
+
11
+ $input: function(){
12
+ return this.$('input[type="hidden"]');
13
+ },
14
+
15
+ validateAttachment: function( attachment ){
16
+
17
+ // defaults
18
+ attachment = attachment || {};
19
+
20
+ // WP attachment
21
+ if( attachment.id !== undefined ) {
22
+ attachment = attachment.attributes;
23
+ }
24
+
25
+ // args
26
+ attachment = acf.parseArgs(attachment, {
27
+ url: '',
28
+ alt: '',
29
+ title: '',
30
+ filename: '',
31
+ filesizeHumanReadable: '',
32
+ icon: '/wp-includes/images/media/default.png'
33
+ });
34
+
35
+ // return
36
+ return attachment;
37
+ },
38
+
39
+ render: function( attachment ){
40
+
41
+ // vars
42
+ attachment = this.validateAttachment( attachment );
43
+
44
+ // update image
45
+ this.$('img').attr({
46
+ src: attachment.icon,
47
+ alt: attachment.alt,
48
+ title: attachment.title
49
+ });
50
+
51
+ // update elements
52
+ this.$('[data-name="title"]').text( attachment.title );
53
+ this.$('[data-name="filename"]').text( attachment.filename ).attr( 'href', attachment.url );
54
+ this.$('[data-name="filesize"]').text( attachment.filesizeHumanReadable );
55
+
56
+ // vars
57
+ var val = attachment.id || '';
58
+
59
+ // update val
60
+ acf.val( this.$input(), val );
61
+
62
+ // update class
63
+ if( val ) {
64
+ this.$control().addClass('has-value');
65
+ } else {
66
+ this.$control().removeClass('has-value');
67
+ }
68
+ },
69
+
70
+ selectAttachment: function(){
71
+
72
+ // vars
73
+ var parent = this.parent();
74
+ var multiple = (parent && parent.get('type') === 'repeater');
75
+
76
+ // new frame
77
+ var frame = acf.newMediaPopup({
78
+ mode: 'select',
79
+ title: acf.__('Select File'),
80
+ field: this.get('key'),
81
+ multiple: multiple,
82
+ library: this.get('library'),
83
+ allowedTypes: this.get('mime_types'),
84
+ select: $.proxy(function( attachment, i ) {
85
+ if( i > 0 ) {
86
+ this.append( attachment, parent );
87
+ } else {
88
+ this.render( attachment );
89
+ }
90
+ }, this)
91
+ });
92
+ },
93
+
94
+ editAttachment: function(){
95
+
96
+ // vars
97
+ var val = this.val();
98
+
99
+ // bail early if no val
100
+ if( !val ) {
101
+ return false;
102
+ }
103
+
104
+ // popup
105
+ var frame = acf.newMediaPopup({
106
+ mode: 'edit',
107
+ title: acf.__('Edit File'),
108
+ button: acf.__('Update File'),
109
+ attachment: val,
110
+ field: this.get('key'),
111
+ select: $.proxy(function( attachment, i ) {
112
+ this.render( attachment );
113
+ }, this)
114
+ });
115
+ }
116
+ });
117
+
118
+ acf.registerFieldType( Field );
119
+
120
+ })(jQuery);
assets/build/js/_acf-field-google-map.js ADDED
@@ -0,0 +1,553 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'google_map',
6
+
7
+ map: false,
8
+
9
+ wait: 'load',
10
+
11
+ events: {
12
+ 'click a[data-name="clear"]': 'onClickClear',
13
+ 'click a[data-name="locate"]': 'onClickLocate',
14
+ 'click a[data-name="search"]': 'onClickSearch',
15
+ 'keydown .search': 'onKeydownSearch',
16
+ 'keyup .search': 'onKeyupSearch',
17
+ 'focus .search': 'onFocusSearch',
18
+ 'blur .search': 'onBlurSearch',
19
+ 'showField': 'onShow'
20
+ },
21
+
22
+ $control: function(){
23
+ return this.$('.acf-google-map');
24
+ },
25
+
26
+ $input: function( name ){
27
+ return this.$('input[data-name="' + (name || 'address') + '"]');
28
+ },
29
+
30
+ $search: function(){
31
+ return this.$('.search');
32
+ },
33
+
34
+ $canvas: function(){
35
+ return this.$('.canvas');
36
+ },
37
+
38
+ addClass: function( name ){
39
+ this.$control().addClass( name );
40
+ },
41
+
42
+ removeClass: function( name ){
43
+ this.$control().removeClass( name );
44
+ },
45
+
46
+ getValue: function(){
47
+
48
+ // defaults
49
+ var val = {
50
+ lat: '',
51
+ lng: '',
52
+ address: ''
53
+ };
54
+
55
+ // loop
56
+ this.$('input[type="hidden"]').each(function(){
57
+ val[ $(this).data('name') ] = $(this).val();
58
+ });
59
+
60
+ // return false if no lat/lng
61
+ if( !val.lat || !val.lng ) {
62
+ val = false;
63
+ }
64
+
65
+ // return
66
+ return val;
67
+ },
68
+
69
+ setValue: function( val ){
70
+
71
+ // defaults
72
+ val = acf.parseArgs(val, {
73
+ lat: '',
74
+ lng: '',
75
+ address: ''
76
+ });
77
+
78
+ // loop
79
+ for( var name in val ) {
80
+ acf.val( this.$input(name), val[name] );
81
+ }
82
+
83
+ // return false if no lat/lng
84
+ if( !val.lat || !val.lng ) {
85
+ val = false;
86
+ }
87
+
88
+ // render
89
+ this.renderVal( val );
90
+
91
+ // action
92
+ var latLng = this.newLatLng( val.lat, val.lng );
93
+ acf.doAction('google_map_change', latLng, this.map, this);
94
+ },
95
+
96
+ renderVal: function( val ){
97
+
98
+ // has value
99
+ if( val ) {
100
+ this.addClass('-value');
101
+ this.setPosition( val.lat, val.lng );
102
+ this.map.marker.setVisible( true );
103
+
104
+ // no value
105
+ } else {
106
+ this.removeClass('-value');
107
+ this.map.marker.setVisible( false );
108
+ }
109
+
110
+ // search
111
+ this.$search().val( val.address );
112
+ },
113
+
114
+ setPosition: function( lat, lng ){
115
+
116
+ // vars
117
+ var latLng = this.newLatLng( lat, lng );
118
+
119
+ // update marker
120
+ this.map.marker.setPosition( latLng );
121
+
122
+ // show marker
123
+ this.map.marker.setVisible( true );
124
+
125
+ // center
126
+ this.center();
127
+
128
+ // return
129
+ return this;
130
+ },
131
+
132
+ center: function(){
133
+
134
+ // vars
135
+ var position = this.map.marker.getPosition();
136
+ var lat = this.get('lat');
137
+ var lng = this.get('lng');
138
+
139
+ // if marker exists, center on the marker
140
+ if( position ) {
141
+ lat = position.lat();
142
+ lng = position.lng();
143
+ }
144
+
145
+ // latlng
146
+ var latLng = this.newLatLng( lat, lng );
147
+
148
+ // set center of map
149
+ this.map.setCenter( latLng );
150
+ },
151
+
152
+ getSearchVal: function(){
153
+ return this.$search().val();
154
+ },
155
+
156
+ initialize: function(){
157
+
158
+ // Ensure Google API is loaded and then initialize map.
159
+ withAPI( this.initializeMap.bind(this) );
160
+ },
161
+
162
+ newLatLng: function( lat, lng ){
163
+ return new google.maps.LatLng( parseFloat(lat), parseFloat(lng) );
164
+ },
165
+
166
+ initializeMap: function(){
167
+
168
+ // vars
169
+ var zoom = this.get('zoom');
170
+ var lat = this.get('lat');
171
+ var lng = this.get('lng');
172
+
173
+ // Create Map.
174
+ var mapArgs = {
175
+ scrollwheel: false,
176
+ zoom: parseInt( zoom ),
177
+ center: this.newLatLng(lat, lng),
178
+ mapTypeId: google.maps.MapTypeId.ROADMAP,
179
+ marker: {
180
+ draggable: true,
181
+ raiseOnDrag: true
182
+ },
183
+ autocomplete: {}
184
+ };
185
+ mapArgs = acf.applyFilters('google_map_args', mapArgs, this);
186
+ var map = new google.maps.Map( this.$canvas()[0], mapArgs );
187
+
188
+ // Create Marker.
189
+ var markerArgs = acf.parseArgs(mapArgs.marker, {
190
+ draggable: true,
191
+ raiseOnDrag: true,
192
+ map: map
193
+ });
194
+ markerArgs = acf.applyFilters('google_map_marker_args', markerArgs, this);
195
+ var marker = new google.maps.Marker( markerArgs );
196
+
197
+ // Maybe Create Autocomplete.
198
+ var autocomplete = false;
199
+ if( acf.isset(google, 'maps', 'places', 'Autocomplete') ) {
200
+ var autocompleteArgs = mapArgs.autocomplete || {};
201
+ autocompleteArgs = acf.applyFilters('google_map_autocomplete_args', autocompleteArgs, this);
202
+ autocomplete = new google.maps.places.Autocomplete( this.$search()[0], autocompleteArgs );
203
+ autocomplete.bindTo('bounds', map);
204
+ }
205
+
206
+ // Add map events.
207
+ this.addMapEvents( this, map, marker, autocomplete );
208
+
209
+ // Append references.
210
+ map.acf = this;
211
+ map.marker = marker;
212
+ map.autocomplete = autocomplete;
213
+ this.map = map;
214
+
215
+ // action for 3rd party customization
216
+ acf.doAction('google_map_init', map, marker, this);
217
+
218
+ // set position
219
+ var val = this.getValue();
220
+ this.renderVal( val );
221
+ },
222
+
223
+ addMapEvents: function( field, map, marker, autocomplete ){
224
+
225
+ // Click map.
226
+ google.maps.event.addListener( map, 'click', function( e ) {
227
+
228
+ // vars
229
+ var lat = e.latLng.lat();
230
+ var lng = e.latLng.lng();
231
+
232
+ // search
233
+ field.searchPosition( lat, lng );
234
+ });
235
+
236
+ // Drag marker.
237
+ google.maps.event.addListener( marker, 'dragend', function(){
238
+
239
+ // vars
240
+ var position = this.getPosition();
241
+ var lat = position.lat();
242
+ var lng = position.lng();
243
+
244
+ // search
245
+ field.searchPosition( lat, lng );
246
+ });
247
+
248
+ // Autocomplete search.
249
+ if( autocomplete ) {
250
+
251
+ // autocomplete event place_changed is triggered each time the input changes
252
+ // customize the place object with the current "search value" to allow users controll over the address text
253
+ google.maps.event.addListener(autocomplete, 'place_changed', function() {
254
+ var place = this.getPlace();
255
+ place.address = field.getSearchVal();
256
+ field.setPlace( place );
257
+ });
258
+ }
259
+ },
260
+
261
+ searchPosition: function( lat, lng ){
262
+
263
+ // vars
264
+ var latLng = this.newLatLng( lat, lng );
265
+ var $wrap = this.$control();
266
+
267
+ // set position
268
+ this.setPosition( lat, lng );
269
+
270
+ // add class
271
+ $wrap.addClass('-loading');
272
+
273
+ // callback
274
+ var callback = $.proxy(function( results, status ){
275
+
276
+ // remove class
277
+ $wrap.removeClass('-loading');
278
+
279
+ // vars
280
+ var address = '';
281
+
282
+ // validate
283
+ if( status != google.maps.GeocoderStatus.OK ) {
284
+ console.log('Geocoder failed due to: ' + status);
285
+ } else if( !results[0] ) {
286
+ console.log('No results found');
287
+ } else {
288
+ address = results[0].formatted_address;
289
+ }
290
+
291
+ // update val
292
+ this.val({
293
+ lat: lat,
294
+ lng: lng,
295
+ address: address
296
+ });
297
+
298
+ }, this);
299
+
300
+ // query
301
+ geocoder.geocode({ 'latLng' : latLng }, callback);
302
+ },
303
+
304
+ setPlace: function( place ){
305
+
306
+ // bail if no place
307
+ if( !place ) return this;
308
+
309
+ // search name if no geometry
310
+ // - possible when hitting enter in search address
311
+ if( place.name && !place.geometry ) {
312
+ this.searchAddress(place.name);
313
+ return this;
314
+ }
315
+
316
+ // vars
317
+ var lat = place.geometry.location.lat();
318
+ var lng = place.geometry.location.lng();
319
+ var address = place.address || place.formatted_address;
320
+
321
+ // update
322
+ this.setValue({
323
+ lat: lat,
324
+ lng: lng,
325
+ address: address
326
+ });
327
+
328
+ // return
329
+ return this;
330
+ },
331
+
332
+ searchAddress: function( address ){
333
+
334
+ // is address latLng?
335
+ var latLng = address.split(',');
336
+ if( latLng.length == 2 ) {
337
+
338
+ // vars
339
+ var lat = latLng[0];
340
+ var lng = latLng[1];
341
+
342
+ // check
343
+ if( $.isNumeric(lat) && $.isNumeric(lng) ) {
344
+ return this.searchPosition( lat, lng );
345
+ }
346
+ }
347
+
348
+ // vars
349
+ var $wrap = this.$control();
350
+
351
+ // add class
352
+ $wrap.addClass('-loading');
353
+
354
+ // callback
355
+ var callback = this.proxy(function( results, status ){
356
+
357
+ // remove class
358
+ $wrap.removeClass('-loading');
359
+
360
+ // vars
361
+ var lat = '';
362
+ var lng = '';
363
+
364
+ // validate
365
+ if( status != google.maps.GeocoderStatus.OK ) {
366
+ console.log('Geocoder failed due to: ' + status);
367
+ } else if( !results[0] ) {
368
+ console.log('No results found');
369
+ } else {
370
+ lat = results[0].geometry.location.lat();
371
+ lng = results[0].geometry.location.lng();
372
+ //address = results[0].formatted_address;
373
+ }
374
+
375
+ // update val
376
+ this.val({
377
+ lat: lat,
378
+ lng: lng,
379
+ address: address
380
+ });
381
+
382
+ //acf.doAction('google_map_geocode_results', results, status, this.$el, this);
383
+
384
+ });
385
+
386
+ // query
387
+ geocoder.geocode({ 'address' : address }, callback);
388
+ },
389
+
390
+ searchLocation: function(){
391
+
392
+ // Try HTML5 geolocation
393
+ if( !navigator.geolocation ) {
394
+ return alert( acf.__('Sorry, this browser does not support geolocation') );
395
+ }
396
+
397
+ // vars
398
+ var $wrap = this.$control();
399
+
400
+ // add class
401
+ $wrap.addClass('-loading');
402
+
403
+ // callback
404
+ var onSuccess = $.proxy(function( results, status ){
405
+
406
+ // remove class
407
+ $wrap.removeClass('-loading');
408
+
409
+ // vars
410
+ var lat = results.coords.latitude;
411
+ var lng = results.coords.longitude;
412
+
413
+ // search;
414
+ this.searchPosition( lat, lng );
415
+
416
+ }, this);
417
+
418
+ var onFailure = function( error ){
419
+ $wrap.removeClass('-loading');
420
+ }
421
+
422
+ // try query
423
+ navigator.geolocation.getCurrentPosition( onSuccess, onFailure );
424
+ },
425
+
426
+ onClickClear: function( e, $el ){
427
+ this.val( false );
428
+ },
429
+
430
+ onClickLocate: function( e, $el ){
431
+ this.searchLocation();
432
+ },
433
+
434
+ onClickSearch: function( e, $el ){
435
+ this.searchAddress( this.$search().val() );
436
+ },
437
+
438
+ onFocusSearch: function( e, $el ){
439
+ this.removeClass('-value');
440
+ this.onKeyupSearch.apply(this, arguments);
441
+ },
442
+
443
+ onBlurSearch: function( e, $el ){
444
+
445
+ // timeout to allow onClickLocate event
446
+ this.setTimeout(function(){
447
+ this.removeClass('-search');
448
+ if( $el.val() ) {
449
+ this.addClass('-value');
450
+ }
451
+ }, 100);
452
+ },
453
+
454
+ onKeyupSearch: function( e, $el ){
455
+ if( $el.val() ) {
456
+ this.addClass('-search');
457
+ } else {
458
+ this.removeClass('-search');
459
+ }
460
+ },
461
+
462
+ onKeydownSearch: function( e, $el ){
463
+
464
+ // prevent form from submitting
465
+ if( e.which == 13 ) {
466
+ e.preventDefault();
467
+ }
468
+ },
469
+
470
+ onMousedown: function(){
471
+
472
+ /*
473
+ // clear timeout in 1ms (onMousedown will run before onBlurSearch)
474
+ this.setTimeout(function(){
475
+ clearTimeout( this.get('timeout') );
476
+ }, 1);
477
+ */
478
+ },
479
+
480
+ onShow: function(){
481
+
482
+ // bail early if no map
483
+ // - possible if JS API was not loaded
484
+ if( !this.map ) {
485
+ return false;
486
+ }
487
+
488
+ // center map when it is shown (by a tab / collapsed row)
489
+ // - use delay to avoid rendering issues with browsers (ensures div is visible)
490
+ this.setTimeout( this.center, 10 );
491
+ }
492
+ });
493
+
494
+ acf.registerFieldType( Field );
495
+
496
+ // Vars.
497
+ var loading = false;
498
+ var geocoder = false;
499
+
500
+ /**
501
+ * withAPI
502
+ *
503
+ * Loads the Google Maps API library and troggers callback.
504
+ *
505
+ * @date 28/3/19
506
+ * @since 5.7.14
507
+ *
508
+ * @param function callback The callback to excecute.
509
+ * @return void
510
+ */
511
+
512
+ function withAPI( callback ) {
513
+
514
+ // Check if geocoder exists.
515
+ if( geocoder ) {
516
+ return callback();
517
+ }
518
+
519
+ // Check if geocoder API exists.
520
+ if( acf.isset(window, 'google', 'maps', 'Geocoder') ) {
521
+ geocoder = new google.maps.Geocoder();
522
+ return callback();
523
+ }
524
+
525
+ // Geocoder will need to be loaded. Hook callback to action.
526
+ acf.addAction( 'google_map_api_loaded', callback );
527
+
528
+ // Bail early if already loading API.
529
+ if( loading ) {
530
+ return;
531
+ }
532
+
533
+ // load api
534
+ var url = acf.get('google_map_api');
535
+ if( url ) {
536
+
537
+ // Set loading status.
538
+ loading = true;
539
+
540
+ // Load API
541
+ $.ajax({
542
+ url: url,
543
+ dataType: 'script',
544
+ cache: true,
545
+ success: function(){
546
+ geocoder = new google.maps.Geocoder();
547
+ acf.doAction('google_map_api_loaded');
548
+ }
549
+ });
550
+ }
551
+ }
552
+
553
+ })(jQuery);
assets/build/js/_acf-field-image.js ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'image',
6
+
7
+ $control: function(){
8
+ return this.$('.acf-image-uploader');
9
+ },
10
+
11
+ $input: function(){
12
+ return this.$('input[type="hidden"]');
13
+ },
14
+
15
+ events: {
16
+ 'click a[data-name="add"]': 'onClickAdd',
17
+ 'click a[data-name="edit"]': 'onClickEdit',
18
+ 'click a[data-name="remove"]': 'onClickRemove',
19
+ 'change input[type="file"]': 'onChange'
20
+ },
21
+
22
+ initialize: function(){
23
+
24
+ // add attribute to form
25
+ if( this.get('uploader') === 'basic' ) {
26
+ this.$el.closest('form').attr('enctype', 'multipart/form-data');
27
+ }
28
+ },
29
+
30
+ validateAttachment: function( attachment ){
31
+
32
+ // defaults
33
+ attachment = attachment || {};
34
+
35
+ // WP attachment
36
+ if( attachment.id !== undefined ) {
37
+ attachment = attachment.attributes;
38
+ }
39
+
40
+ // args
41
+ attachment = acf.parseArgs(attachment, {
42
+ url: '',
43
+ alt: '',
44
+ title: '',
45
+ caption: '',
46
+ description: '',
47
+ width: 0,
48
+ height: 0
49
+ });
50
+
51
+ // preview size
52
+ var url = acf.isget(attachment, 'sizes', this.get('preview_size'), 'url');
53
+ if( url !== null ) {
54
+ attachment.url = url;
55
+ }
56
+
57
+ // return
58
+ return attachment;
59
+ },
60
+
61
+ render: function( attachment ){
62
+
63
+ // vars
64
+ attachment = this.validateAttachment( attachment );
65
+
66
+ // update image
67
+ this.$('img').attr({
68
+ src: attachment.url,
69
+ alt: attachment.alt,
70
+ title: attachment.title
71
+ });
72
+
73
+ // vars
74
+ var val = attachment.id || '';
75
+
76
+ // update val
77
+ this.val( val );
78
+
79
+ // update class
80
+ if( val ) {
81
+ this.$control().addClass('has-value');
82
+ } else {
83
+ this.$control().removeClass('has-value');
84
+ }
85
+ },
86
+
87
+ // create a new repeater row and render value
88
+ append: function( attachment, parent ){
89
+
90
+ // create function to find next available field within parent
91
+ var getNext = function( field, parent ){
92
+
93
+ // find existing file fields within parent
94
+ var fields = acf.getFields({
95
+ key: field.get('key'),
96
+ parent: parent.$el
97
+ });
98
+
99
+ // find the first field with no value
100
+ for( var i = 0; i < fields.length; i++ ) {
101
+ if( !fields[i].val() ) {
102
+ return fields[i];
103
+ }
104
+ }
105
+
106
+ // return
107
+ return false;
108
+ }
109
+
110
+ // find existing file fields within parent
111
+ var field = getNext( this, parent );
112
+
113
+ // add new row if no available field
114
+ if( !field ) {
115
+ parent.$('.acf-button:last').trigger('click');
116
+ field = getNext( this, parent );
117
+ }
118
+
119
+ // render
120
+ if( field ) {
121
+ field.render( attachment );
122
+ }
123
+ },
124
+
125
+ selectAttachment: function(){
126
+
127
+ // vars
128
+ var parent = this.parent();
129
+ var multiple = (parent && parent.get('type') === 'repeater');
130
+
131
+ // new frame
132
+ var frame = acf.newMediaPopup({
133
+ mode: 'select',
134
+ type: 'image',
135
+ title: acf.__('Select Image'),
136
+ field: this.get('key'),
137
+ multiple: multiple,
138
+ library: this.get('library'),
139
+ allowedTypes: this.get('mime_types'),
140
+ select: $.proxy(function( attachment, i ) {
141
+ if( i > 0 ) {
142
+ this.append( attachment, parent );
143
+ } else {
144
+ this.render( attachment );
145
+ }
146
+ }, this)
147
+ });
148
+ },
149
+
150
+ editAttachment: function(){
151
+
152
+ // vars
153
+ var val = this.val();
154
+
155
+ // bail early if no val
156
+ if( !val ) return;
157
+
158
+ // popup
159
+ var frame = acf.newMediaPopup({
160
+ mode: 'edit',
161
+ title: acf.__('Edit Image'),
162
+ button: acf.__('Update Image'),
163
+ attachment: val,
164
+ field: this.get('key'),
165
+ select: $.proxy(function( attachment, i ) {
166
+ this.render( attachment );
167
+ }, this)
168
+ });
169
+ },
170
+
171
+ removeAttachment: function(){
172
+ this.render( false );
173
+ },
174
+
175
+ onClickAdd: function( e, $el ){
176
+ this.selectAttachment();
177
+ },
178
+
179
+ onClickEdit: function( e, $el ){
180
+ this.editAttachment();
181
+ },
182
+
183
+ onClickRemove: function( e, $el ){
184
+ this.removeAttachment();
185
+ },
186
+
187
+ onChange: function( e, $el ){
188
+ var $hiddenInput = this.$input();
189
+
190
+ acf.getFileInputData($el, function( data ){
191
+ $hiddenInput.val( $.param(data) );
192
+ });
193
+ }
194
+ });
195
+
196
+ acf.registerFieldType( Field );
197
+
198
+ })(jQuery);
assets/build/js/_acf-field-link.js ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'link',
6
+
7
+ events: {
8
+ 'click a[data-name="add"]': 'onClickEdit',
9
+ 'click a[data-name="edit"]': 'onClickEdit',
10
+ 'click a[data-name="remove"]': 'onClickRemove',
11
+ 'change .link-node': 'onChange',
12
+ },
13
+
14
+ $control: function(){
15
+ return this.$('.acf-link');
16
+ },
17
+
18
+ $node: function(){
19
+ return this.$('.link-node');
20
+ },
21
+
22
+ getValue: function(){
23
+
24
+ // vars
25
+ var $node = this.$node();
26
+
27
+ // return false if empty
28
+ if( !$node.attr('href') ) {
29
+ return false;
30
+ }
31
+
32
+ // return
33
+ return {
34
+ title: $node.html(),
35
+ url: $node.attr('href'),
36
+ target: $node.attr('target')
37
+ };
38
+ },
39
+
40
+ setValue: function( val ){
41
+
42
+ // default
43
+ val = acf.parseArgs(val, {
44
+ title: '',
45
+ url: '',
46
+ target: ''
47
+ });
48
+
49
+ // vars
50
+ var $div = this.$control();
51
+ var $node = this.$node();
52
+
53
+ // remove class
54
+ $div.removeClass('-value -external');
55
+
56
+ // add class
57
+ if( val.url ) $div.addClass('-value');
58
+ if( val.target === '_blank' ) $div.addClass('-external');
59
+
60
+ // update text
61
+ this.$('.link-title').html( val.title );
62
+ this.$('.link-url').attr('href', val.url).html( val.url );
63
+
64
+ // update node
65
+ $node.html(val.title);
66
+ $node.attr('href', val.url);
67
+ $node.attr('target', val.target);
68
+
69
+ // update inputs
70
+ this.$('.input-title').val( val.title );
71
+ this.$('.input-target').val( val.target );
72
+ this.$('.input-url').val( val.url ).trigger('change');
73
+ },
74
+
75
+ onClickEdit: function( e, $el ){
76
+ acf.wpLink.open( this.$node() );
77
+ },
78
+
79
+ onClickRemove: function( e, $el ){
80
+ this.setValue( false );
81
+ },
82
+
83
+ onChange: function( e, $el ){
84
+
85
+ // get the changed value
86
+ var val = this.getValue();
87
+
88
+ // update inputs
89
+ this.setValue(val);
90
+ }
91
+
92
+ });
93
+
94
+ acf.registerFieldType( Field );
95
+
96
+
97
+ // manager
98
+ acf.wpLink = new acf.Model({
99
+
100
+ getNodeValue: function(){
101
+ var $node = this.get('node');
102
+ return {
103
+ title: $node.html(),
104
+ url: $node.attr('href'),
105
+ target: $node.attr('target')
106
+ };
107
+ },
108
+
109
+ setNodeValue: function( val ){
110
+ var $node = this.get('node');
111
+ $node.html( val.title );
112
+ $node.attr('href', val.url);
113
+ $node.attr('target', val.target);
114
+ $node.trigger('change');
115
+ },
116
+
117
+ getInputValue: function(){
118
+ return {
119
+ title: $('#wp-link-text').val(),
120
+ url: $('#wp-link-url').val(),
121
+ target: $('#wp-link-target').prop('checked') ? '_blank' : ''
122
+ };
123
+ },
124
+
125
+ setInputValue: function( val ){
126
+ $('#wp-link-text').val( val.title );
127
+ $('#wp-link-url').val( val.url );
128
+ $('#wp-link-target').prop('checked', val.target === '_blank' );
129
+ },
130
+
131
+ open: function( $node ){
132
+
133
+ // add events
134
+ this.on('wplink-open', 'onOpen');
135
+ this.on('wplink-close', 'onClose');
136
+
137
+ // set node
138
+ this.set('node', $node);
139
+
140
+ // create textarea
141
+ var $textarea = $('<textarea id="acf-link-textarea" style="display:none;"></textarea>');
142
+ $('body').append( $textarea );
143
+
144
+ // vars
145
+ var val = this.getNodeValue();
146
+
147
+ // open popup
148
+ wpLink.open( 'acf-link-textarea', val.url, val.title, null );
149
+
150
+ },
151
+
152
+ onOpen: function(){
153
+
154
+ // always show title (WP will hide title if empty)
155
+ $('#wp-link-wrap').addClass('has-text-field');
156
+
157
+ // set inputs
158
+ var val = this.getNodeValue();
159
+ this.setInputValue( val );
160
+ },
161
+
162
+ close: function(){
163
+ wpLink.close();
164
+ },
165
+
166
+ onClose: function(){
167
+
168
+ // bail early if no node
169
+ // needed due to WP triggering this event twice
170
+ if( !this.has('node') ) {
171
+ return false;
172
+ }
173
+
174
+ // remove events
175
+ this.off('wplink-open');
176
+ this.off('wplink-close');
177
+
178
+ // set value
179
+ var val = this.getInputValue();
180
+ this.setNodeValue( val );
181
+
182
+ // remove textarea
183
+ $('#acf-link-textarea').remove();
184
+
185
+ // reset
186
+ this.set('node', null);
187
+
188
+ }
189
+ });
190
+
191
+ })(jQuery);
assets/build/js/_acf-field-oembed.js ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'oembed',
6
+
7
+ events: {
8
+ 'click [data-name="clear-button"]': 'onClickClear',
9
+ 'keypress .input-search': 'onKeypressSearch',
10
+ 'keyup .input-search': 'onKeyupSearch',
11
+ 'change .input-search': 'onChangeSearch'
12
+ },
13
+
14
+ $control: function(){
15
+ return this.$('.acf-oembed');
16
+ },
17
+
18
+ $input: function(){
19
+ return this.$('.input-value');
20
+ },
21
+
22
+ $search: function(){
23
+ return this.$('.input-search');
24
+ },
25
+
26
+ getValue: function(){
27
+ return this.$input().val();
28
+ },
29
+
30
+ getSearchVal: function(){
31
+ return this.$search().val();
32
+ },
33
+
34
+ setValue: function( val ){
35
+
36
+ // class
37
+ if( val ) {
38
+ this.$control().addClass('has-value');
39
+ } else {
40
+ this.$control().removeClass('has-value');
41
+ }
42
+
43
+ acf.val( this.$input(), val );
44
+ },
45
+
46
+ showLoading: function( show ){
47
+ acf.showLoading( this.$('.canvas') );
48
+ },
49
+
50
+ hideLoading: function(){
51
+ acf.hideLoading( this.$('.canvas') );
52
+ },
53
+
54
+ maybeSearch: function(){
55
+
56
+ // vars
57
+ var prevUrl = this.val();
58
+ var url = this.getSearchVal();
59
+
60
+ // no value
61
+ if( !url ) {
62
+ return this.clear();
63
+ }
64
+
65
+ // fix missing 'http://' - causes the oembed code to error and fail
66
+ if( url.substr(0, 4) != 'http' ) {
67
+ url = 'http://' + url;
68
+ }
69
+
70
+ // bail early if no change
71
+ if( url === prevUrl ) return;
72
+
73
+ // clear existing timeout
74
+ var timeout = this.get('timeout');
75
+ if( timeout ) {
76
+ clearTimeout( timeout );
77
+ }
78
+
79
+ // set new timeout
80
+ var callback = $.proxy(this.search, this, url);
81
+ this.set('timeout', setTimeout(callback, 300));
82
+
83
+ },
84
+
85
+ search: function( url ){
86
+
87
+ // ajax
88
+ var ajaxData = {
89
+ action: 'acf/fields/oembed/search',
90
+ s: url,
91
+ field_key: this.get('key')
92
+ };
93
+
94
+ // clear existing timeout
95
+ var xhr = this.get('xhr');
96
+ if( xhr ) {
97
+ xhr.abort();
98
+ }
99
+
100
+ // loading
101
+ this.showLoading();
102
+
103
+ // query
104
+ var xhr = $.ajax({
105
+ url: acf.get('ajaxurl'),
106
+ data: acf.prepareForAjax(ajaxData),
107
+ type: 'post',
108
+ dataType: 'json',
109
+ context: this,
110
+ success: function( json ){
111
+
112
+ // error
113
+ if( !json || !json.html ) {
114
+ json = {
115
+ url: false,
116
+ html: ''
117
+ }
118
+ }
119
+
120
+ // update vars
121
+ this.val( json.url );
122
+ this.$('.canvas-media').html( json.html );
123
+ },
124
+ complete: function(){
125
+ this.hideLoading();
126
+ }
127
+ });
128
+
129
+ this.set('xhr', xhr);
130
+ },
131
+
132
+ clear: function(){
133
+ this.val('');
134
+ this.$search().val('');
135
+ this.$('.canvas-media').html('');
136
+ },
137
+
138
+ onClickClear: function( e, $el ){
139
+ this.clear();
140
+ },
141
+
142
+ onKeypressSearch: function( e, $el ){
143
+ if( e.which == 13 ) {
144
+ e.preventDefault();
145
+ this.maybeSearch();
146
+ }
147
+ },
148
+
149
+ onKeyupSearch: function( e, $el ){
150
+ if( $el.val() ) {
151
+ this.maybeSearch();
152
+ }
153
+ },
154
+
155
+ onChangeSearch: function( e, $el ){
156
+ this.maybeSearch();
157
+ }
158
+
159
+ });
160
+
161
+ acf.registerFieldType( Field );
162
+
163
+ })(jQuery);
assets/build/js/_acf-field-page-link.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.models.SelectField.extend({
4
+ type: 'page_link',
5
+ });
6
+
7
+ acf.registerFieldType( Field );
8
+
9
+ })(jQuery);
assets/build/js/_acf-field-post-object.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.models.SelectField.extend({
4
+ type: 'post_object',
5
+ });
6
+
7
+ acf.registerFieldType( Field );
8
+
9
+ })(jQuery);
assets/build/js/_acf-field-radio.js ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'radio',
6
+
7
+ events: {
8
+ 'click input[type="radio"]': 'onClick',
9
+ },
10
+
11
+ $control: function(){
12
+ return this.$('.acf-radio-list');
13
+ },
14
+
15
+ $input: function(){
16
+ return this.$('input:checked');
17
+ },
18
+
19
+ $inputText: function(){
20
+ return this.$('input[type="text"]');
21
+ },
22
+
23
+ getValue: function(){
24
+ var val = this.$input().val();
25
+ if( val === 'other' && this.get('other_choice') ) {
26
+ val = this.$inputText().val();
27
+ }
28
+ return val;
29
+ },
30
+
31
+ onClick: function( e, $el ){
32
+
33
+ // vars
34
+ var $label = $el.parent('label');
35
+ var selected = $label.hasClass('selected');
36
+ var val = $el.val();
37
+
38
+ // remove previous selected
39
+ this.$('.selected').removeClass('selected');
40
+
41
+ // add active class
42
+ $label.addClass('selected');
43
+
44
+ // allow null
45
+ if( this.get('allow_null') && selected ) {
46
+ $label.removeClass('selected');
47
+ $el.prop('checked', false).trigger('change');
48
+ val = false;
49
+ }
50
+
51
+ // other
52
+ if( this.get('other_choice') ) {
53
+
54
+ // enable
55
+ if( val === 'other' ) {
56
+ this.$inputText().prop('disabled', false);
57
+
58
+ // disable
59
+ } else {
60
+ this.$inputText().prop('disabled', true);
61
+ }
62
+ }
63
+ }
64
+ });
65
+
66
+ acf.registerFieldType( Field );
67
+
68
+ })(jQuery);
assets/build/js/_acf-field-range.js ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'range',
6
+
7
+ events: {
8
+ 'input input[type="range"]': 'onChange',
9
+ 'change input': 'onChange'
10
+ },
11
+
12
+ $input: function(){
13
+ return this.$('input[type="range"]');
14
+ },
15
+
16
+ $inputAlt: function(){
17
+ return this.$('input[type="number"]');
18
+ },
19
+
20
+ setValue: function( val ){
21
+ this.busy = true;
22
+
23
+ // Update range input (with change).
24
+ acf.val( this.$input(), val );
25
+
26
+ // Update alt input (without change).
27
+ // Read in input value to inherit min/max validation.
28
+ acf.val( this.$inputAlt(), this.$input().val(), true );
29
+
30
+ this.busy = false;
31
+ },
32
+
33
+ onChange: function( e, $el ){
34
+ if( !this.busy ) {
35
+ this.setValue( $el.val() );
36
+ }
37
+ }
38
+ });
39
+
40
+ acf.registerFieldType( Field );
41
+
42
+ })(jQuery);
assets/build/js/_acf-field-relationship.js ADDED
@@ -0,0 +1,380 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'relationship',
6
+
7
+ events: {
8
+ 'keypress [data-filter]': 'onKeypressFilter',
9
+ 'change [data-filter]': 'onChangeFilter',
10
+ 'keyup [data-filter]': 'onChangeFilter',
11
+ 'click .choices-list .acf-rel-item': 'onClickAdd',
12
+ 'click [data-name="remove_item"]': 'onClickRemove',
13
+ 'mouseover': 'onHover'
14
+ },
15
+
16
+ $control: function(){
17
+ return this.$('.acf-relationship');
18
+ },
19
+
20
+ $list: function( list ) {
21
+ return this.$('.' + list + '-list');
22
+ },
23
+
24
+ $listItems: function( list ) {
25
+ return this.$list( list ).find('.acf-rel-item');
26
+ },
27
+
28
+ $listItem: function( list, id ) {
29
+ return this.$list( list ).find('.acf-rel-item[data-id="' + id + '"]');
30
+ },
31
+
32
+ getValue: function(){
33
+ var val = [];
34
+ this.$listItems('values').each(function(){
35
+ val.push( $(this).data('id') );
36
+ });
37
+ return val.length ? val : false;
38
+ },
39
+
40
+ newChoice: function( props ){
41
+ return [
42
+ '<li>',
43
+ '<span data-id="' + props.id + '" class="acf-rel-item">' + props.text + '</span>',
44
+ '</li>'
45
+ ].join('');
46
+ },
47
+
48
+ newValue: function( props ){
49
+ return [
50
+ '<li>',
51
+ '<input type="hidden" name="' + this.getInputName() + '[]" value="' + props.id + '" />',
52
+ '<span data-id="' + props.id + '" class="acf-rel-item">' + props.text,
53
+ '<a href="#" class="acf-icon -minus small dark" data-name="remove_item"></a>',
54
+ '</span>',
55
+ '</li>'
56
+ ].join('');
57
+ },
58
+
59
+ addSortable: function( self ){
60
+
61
+ // sortable
62
+ this.$list('values').sortable({
63
+ items: 'li',
64
+ forceHelperSize: true,
65
+ forcePlaceholderSize: true,
66
+ scroll: true,
67
+ update: function(){
68
+ self.$input().trigger('change');
69
+ }
70
+ });
71
+ },
72
+
73
+ initialize: function(){
74
+
75
+ // scroll
76
+ var onScroll = this.proxy(function(e){
77
+
78
+ // bail early if no more results
79
+ if( this.get('loading') || !this.get('more') ) {
80
+ return;
81
+ }
82
+
83
+ // Scrolled to bottom
84
+ var $list = this.$list('choices');
85
+ var scrollTop = Math.ceil( $list.scrollTop() );
86
+ var scrollHeight = Math.ceil( $list[0].scrollHeight );
87
+ var innerHeight = Math.ceil( $list.innerHeight() );
88
+ var paged = this.get('paged') || 1;
89
+ if( (scrollTop + innerHeight) >= scrollHeight ) {
90
+
91
+ // update paged
92
+ this.set('paged', (paged+1));
93
+
94
+ // fetch
95
+ this.fetch();
96
+ }
97
+
98
+ });
99
+
100
+ this.$list('choices').scrollTop(0).on('scroll', onScroll);
101
+
102
+ // fetch
103
+ this.fetch();
104
+ },
105
+
106
+ onHover: function( e ){
107
+
108
+ // only once
109
+ $().off(e);
110
+
111
+ // add sortable
112
+ this.addSortable( this );
113
+ },
114
+
115
+ onKeypressFilter: function( e, $el ){
116
+
117
+ // don't submit form
118
+ if( e.which == 13 ) {
119
+ e.preventDefault();
120
+ }
121
+ },
122
+
123
+ onChangeFilter: function( e, $el ){
124
+
125
+ // vars
126
+ var val = $el.val();
127
+ var filter = $el.data('filter');
128
+
129
+ // Bail early if filter has not changed
130
+ if( this.get(filter) === val ) {
131
+ return;
132
+ }
133
+
134
+ // update attr
135
+ this.set(filter, val);
136
+
137
+ // reset paged
138
+ this.set('paged', 1);
139
+
140
+ // fetch
141
+ if( $el.is('select') ) {
142
+ this.fetch();
143
+
144
+ // search must go through timeout
145
+ } else {
146
+ this.maybeFetch();
147
+ }
148
+ },
149
+
150
+ onClickAdd: function( e, $el ){
151
+
152
+ // vars
153
+ var val = this.val();
154
+ var max = parseInt( this.get('max') );
155
+
156
+ // can be added?
157
+ if( $el.hasClass('disabled') ) {
158
+ return false;
159
+ }
160
+
161
+ // validate
162
+ if( max > 0 && val && val.length >= max ) {
163
+
164
+ // add notice
165
+ this.showNotice({
166
+ text: acf.__('Maximum values reached ( {max} values )').replace('{max}', max),
167
+ type: 'warning'
168
+ });
169
+ return false;
170
+ }
171
+
172
+ // disable
173
+ $el.addClass('disabled');
174
+
175
+ // add
176
+ var html = this.newValue({
177
+ id: $el.data('id'),
178
+ text: $el.html()
179
+ });
180
+ this.$list('values').append( html )
181
+
182
+ // trigger change
183
+ this.$input().trigger('change');
184
+ },
185
+
186
+ onClickRemove: function( e, $el ){
187
+
188
+ // Prevent default here because generic handler wont be triggered.
189
+ e.preventDefault();
190
+
191
+ // vars
192
+ var $span = $el.parent();
193
+ var $li = $span.parent();
194
+ var id = $span.data('id');
195
+
196
+ // remove value
197
+ $li.remove();
198
+
199
+ // show choice
200
+ this.$listItem('choices', id).removeClass('disabled');
201
+
202
+ // trigger change
203
+ this.$input().trigger('change');
204
+ },
205
+
206
+ maybeFetch: function(){
207
+
208
+ // vars
209
+ var timeout = this.get('timeout');
210
+
211
+ // abort timeout
212
+ if( timeout ) {
213
+ clearTimeout( timeout );
214
+ }
215
+
216
+ // fetch
217
+ timeout = this.setTimeout(this.fetch, 300);
218
+ this.set('timeout', timeout);
219
+ },
220
+
221
+ getAjaxData: function(){
222
+
223
+ // load data based on element attributes
224
+ var ajaxData = this.$control().data();
225
+ for( var name in ajaxData ) {
226
+ ajaxData[ name ] = this.get( name );
227
+ }
228
+
229
+ // extra
230
+ ajaxData.action = 'acf/fields/relationship/query';
231
+ ajaxData.field_key = this.get('key');
232
+
233
+ // Filter.
234
+ ajaxData = acf.applyFilters( 'relationship_ajax_data', ajaxData, this );
235
+
236
+ // return
237
+ return ajaxData;
238
+ },
239
+
240
+ fetch: function(){
241
+
242
+ // abort XHR if this field is already loading AJAX data
243
+ var xhr = this.get('xhr');
244
+ if( xhr ) {
245
+ xhr.abort();
246
+ }
247
+
248
+ // add to this.o
249
+ var ajaxData = this.getAjaxData();
250
+
251
+ // clear html if is new query
252
+ var $choiceslist = this.$list( 'choices' );
253
+ if( ajaxData.paged == 1 ) {
254
+ $choiceslist.html('');
255
+ }
256
+
257
+ // loading
258
+ var $loading = $('<li><i class="acf-loading"></i> ' + acf.__('Loading') + '</li>');
259
+ $choiceslist.append($loading);
260
+ this.set('loading', true);
261
+
262
+ // callback
263
+ var onComplete = function(){
264
+ this.set('loading', false);
265
+ $loading.remove();
266
+ };
267
+
268
+ var onSuccess = function( json ){
269
+
270
+ // no results
271
+ if( !json || !json.results || !json.results.length ) {
272
+
273
+ // prevent pagination
274
+ this.set('more', false);
275
+
276
+ // add message
277
+ if( this.get('paged') == 1 ) {
278
+ this.$list('choices').append('<li>' + acf.__('No matches found') + '</li>');
279
+ }
280
+
281
+ // return
282
+ return;
283
+ }
284
+
285
+ // set more (allows pagination scroll)
286
+ this.set('more', json.more );
287
+
288
+ // get new results
289
+ var html = this.walkChoices(json.results);
290
+ var $html = $( html );
291
+
292
+ // apply .disabled to left li's
293
+ var val = this.val();
294
+ if( val && val.length ) {
295
+ val.map(function( id ){
296
+ $html.find('.acf-rel-item[data-id="' + id + '"]').addClass('disabled');
297
+ });
298
+ }
299
+
300
+ // append
301
+ $choiceslist.append( $html );
302
+
303
+ // merge together groups
304
+ var $prevLabel = false;
305
+ var $prevList = false;
306
+
307
+ $choiceslist.find('.acf-rel-label').each(function(){
308
+
309
+ var $label = $(this);
310
+ var $list = $label.siblings('ul');
311
+
312
+ if( $prevLabel && $prevLabel.text() == $label.text() ) {
313
+ $prevList.append( $list.children() );
314
+ $(this).parent().remove();
315
+ return;
316
+ }
317
+
318
+ // update vars
319
+ $prevLabel = $label;
320
+ $prevList = $list;
321
+ });
322
+ };
323
+
324
+ // get results
325
+ var xhr = $.ajax({
326
+ url: acf.get('ajaxurl'),
327
+ dataType: 'json',
328
+ type: 'post',
329
+ data: acf.prepareForAjax(ajaxData),
330
+ context: this,
331
+ success: onSuccess,
332
+ complete: onComplete
333
+ });
334
+
335
+ // set
336
+ this.set('xhr', xhr);
337
+ },
338
+
339
+ walkChoices: function( data ){
340
+
341
+ // walker
342
+ var walk = function( data ){
343
+
344
+ // vars
345
+ var html = '';
346
+
347
+ // is array
348
+ if( $.isArray(data) ) {
349
+ data.map(function(item){
350
+ html += walk( item );
351
+ });
352
+
353
+ // is item
354
+ } else if( $.isPlainObject(data) ) {
355
+
356
+ // group
357
+ if( data.children !== undefined ) {
358
+
359
+ html += '<li><span class="acf-rel-label">' + data.text + '</span><ul class="acf-bl">';
360
+ html += walk( data.children );
361
+ html += '</ul></li>';
362
+
363
+ // single
364
+ } else {
365
+ html += '<li><span class="acf-rel-item" data-id="' + data.id + '">' + data.text + '</span></li>';
366
+ }
367
+ }
368
+
369
+ // return
370
+ return html;
371
+ };
372
+
373
+ return walk( data );
374
+ }
375
+
376
+ });
377
+
378
+ acf.registerFieldType( Field );
379
+
380
+ })(jQuery);
assets/build/js/_acf-field-select.js ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'select',
6
+
7
+ select2: false,
8
+
9
+ wait: 'load',
10
+
11
+ events: {
12
+ 'removeField': 'onRemove'
13
+ },
14
+
15
+ $input: function(){
16
+ return this.$('select');
17
+ },
18
+
19
+ initialize: function(){
20
+
21
+ // vars
22
+ var $select = this.$input();
23
+
24
+ // inherit data
25
+ this.inherit( $select );
26
+
27
+ // select2
28
+ if( this.get('ui') ) {
29
+
30
+ // populate ajax_data (allowing custom attribute to already exist)
31
+ var ajaxAction = this.get('ajax_action');
32
+ if( !ajaxAction ) {
33
+ ajaxAction = 'acf/fields/' + this.get('type') + '/query';
34
+ }
35
+
36
+ // select2
37
+ this.select2 = acf.newSelect2($select, {
38
+ field: this,
39
+ ajax: this.get('ajax'),
40
+ multiple: this.get('multiple'),
41
+ placeholder: this.get('placeholder'),
42
+ allowNull: this.get('allow_null'),
43
+ ajaxAction: ajaxAction,
44
+ });
45
+ }
46
+ },
47
+
48
+ onRemove: function(){
49
+ if( this.select2 ) {
50
+ this.select2.destroy();
51
+ }
52
+ }
53
+ });
54
+
55
+ acf.registerFieldType( Field );
56
+
57
+ })(jQuery);
assets/build/js/_acf-field-tab.js ADDED
@@ -0,0 +1,505 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ // vars
4
+ var CONTEXT = 'tab';
5
+
6
+ var Field = acf.Field.extend({
7
+
8
+ type: 'tab',
9
+
10
+ wait: '',
11
+
12
+ tabs: false,
13
+
14
+ tab: false,
15
+
16
+ findFields: function(){
17
+ return this.$el.nextUntil('.acf-field-tab', '.acf-field');
18
+ },
19
+
20
+ getFields: function(){
21
+ return acf.getFields( this.findFields() );
22
+ },
23
+
24
+ findTabs: function(){
25
+ return this.$el.prevAll('.acf-tab-wrap:first');
26
+ },
27
+
28
+ findTab: function(){
29
+ return this.$('.acf-tab-button');
30
+ },
31
+
32
+ initialize: function(){
33
+
34
+ // bail early if is td
35
+ if( this.$el.is('td') ) {
36
+ this.events = {};
37
+ return false;
38
+ }
39
+
40
+ // vars
41
+ var $tabs = this.findTabs();
42
+ var $tab = this.findTab();
43
+ var settings = acf.parseArgs($tab.data(), {
44
+ endpoint: false,
45
+ placement: '',
46
+ before: this.$el
47
+ });
48
+
49
+ // create wrap
50
+ if( !$tabs.length || settings.endpoint ) {
51
+ this.tabs = new Tabs( settings );
52
+ } else {
53
+ this.tabs = $tabs.data('acf');
54
+ }
55
+
56
+ // add tab
57
+ this.tab = this.tabs.addTab($tab, this);
58
+ },
59
+
60
+ isActive: function(){
61
+ return this.tab.isActive();
62
+ },
63
+
64
+ showFields: function(){
65
+
66
+ // show fields
67
+ this.getFields().map(function( field ){
68
+ field.show( this.cid, CONTEXT );
69
+ field.hiddenByTab = false;
70
+ }, this);
71
+
72
+ },
73
+
74
+ hideFields: function(){
75
+
76
+ // hide fields
77
+ this.getFields().map(function( field ){
78
+ field.hide( this.cid, CONTEXT );
79
+ field.hiddenByTab = this.tab;
80
+ }, this);
81
+
82
+ },
83
+
84
+ show: function( lockKey ){
85
+
86
+ // show field and store result
87
+ var visible = acf.Field.prototype.show.apply(this, arguments);
88
+
89
+ // check if now visible
90
+ if( visible ) {
91
+
92
+ // show tab
93
+ this.tab.show();
94
+
95
+ // check active tabs
96
+ this.tabs.refresh();
97
+ }
98
+
99
+ // return
100
+ return visible;
101
+ },
102
+
103
+ hide: function( lockKey ){
104
+
105
+ // hide field and store result
106
+ var hidden = acf.Field.prototype.hide.apply(this, arguments);
107
+
108
+ // check if now hidden
109
+ if( hidden ) {
110
+
111
+ // hide tab
112
+ this.tab.hide();
113
+
114
+ // reset tabs if this was active
115
+ if( this.isActive() ) {
116
+ this.tabs.reset();
117
+ }
118
+ }
119
+
120
+ // return
121
+ return hidden;
122
+ },
123
+
124
+ enable: function( lockKey ){
125
+
126
+ // enable fields
127
+ this.getFields().map(function( field ){
128
+ field.enable( CONTEXT );
129
+ });
130
+ },
131
+
132
+ disable: function( lockKey ){
133
+
134
+ // disable fields
135
+ this.getFields().map(function( field ){
136
+ field.disable( CONTEXT );
137
+ });
138
+ }
139
+ });
140
+
141
+ acf.registerFieldType( Field );
142
+
143
+
144
+ /**
145
+ * tabs
146
+ *
147
+ * description
148
+ *
149
+ * @date 8/2/18
150
+ * @since 5.6.5
151
+ *
152
+ * @param type $var Description. Default.
153
+ * @return type Description.
154
+ */
155
+
156
+ var i = 0;
157
+ var Tabs = acf.Model.extend({
158
+
159
+ tabs: [],
160
+
161
+ active: false,
162
+
163
+ actions: {
164
+ 'refresh': 'onRefresh'
165
+ },
166
+
167
+ data: {
168
+ before: false,
169
+ placement: 'top',
170
+ index: 0,
171
+ initialized: false,
172
+ },
173
+
174
+ setup: function( settings ){
175
+
176
+ // data
177
+ $.extend(this.data, settings);
178
+
179
+ // define this prop to avoid scope issues
180
+ this.tabs = [];
181
+ this.active = false;
182
+
183
+ // vars
184
+ var placement = this.get('placement');
185
+ var $before = this.get('before');
186
+ var $parent = $before.parent();
187
+
188
+ // add sidebar for left placement
189
+ if( placement == 'left' && $parent.hasClass('acf-fields') ) {
190
+ $parent.addClass('-sidebar');
191
+ }
192
+
193
+ // create wrap
194
+ if( $before.is('tr') ) {
195
+ this.$el = $('<tr class="acf-tab-wrap"><td colspan="2"><ul class="acf-hl acf-tab-group"></ul></td></tr>');
196
+ } else {
197
+ this.$el = $('<div class="acf-tab-wrap -' + placement + '"><ul class="acf-hl acf-tab-group"></ul></div>');
198
+ }
199
+
200
+ // append
201
+ $before.before( this.$el );
202
+
203
+ // set index
204
+ this.set('index', i, true);
205
+ i++;
206
+ },
207
+
208
+ initializeTabs: function(){
209
+
210
+ // find first visible tab
211
+ var tab = this.getVisible().shift();
212
+
213
+ // remember previous tab state
214
+ var order = acf.getPreference('this.tabs') || [];
215
+ var groupIndex = this.get('index');
216
+ var tabIndex = order[ groupIndex ];
217
+
218
+ if( this.tabs[ tabIndex ] && this.tabs[ tabIndex ].isVisible() ) {
219
+ tab = this.tabs[ tabIndex ];
220
+ }
221
+
222
+ // select
223
+ if( tab ) {
224
+ this.selectTab( tab );
225
+ } else {
226
+ this.closeTabs();
227
+ }
228
+
229
+ // set local variable used by tabsManager
230
+ this.set('initialized', true);
231
+ },
232
+
233
+ getVisible: function(){
234
+ return this.tabs.filter(function( tab ){
235
+ return tab.isVisible();
236
+ });
237
+ },
238
+
239
+ getActive: function(){
240
+ return this.active;
241
+ },
242
+
243
+ setActive: function( tab ){
244
+ return this.active = tab;
245
+ },
246
+
247
+ hasActive: function(){
248
+ return (this.active !== false);
249
+ },
250
+
251
+ isActive: function( tab ){
252
+ var active = this.getActive();
253
+ return (active && active.cid === tab.cid);
254
+ },
255
+
256
+ closeActive: function(){
257
+ if( this.hasActive() ) {
258
+ this.closeTab( this.getActive() );
259
+ }
260
+ },
261
+
262
+ openTab: function( tab ){
263
+
264
+ // close existing tab
265
+ this.closeActive();
266
+
267
+ // open
268
+ tab.open();
269
+
270
+ // set active
271
+ this.setActive( tab );
272
+ },
273
+
274
+ closeTab: function( tab ){
275
+
276
+ // close
277
+ tab.close();
278
+
279
+ // set active
280
+ this.setActive( false );
281
+ },
282
+
283
+ closeTabs: function(){
284
+ this.tabs.map( this.closeTab, this );
285
+ },
286
+
287
+ selectTab: function( tab ){
288
+
289
+ // close other tabs
290
+ this.tabs.map(function( t ){
291
+ if( tab.cid !== t.cid ) {
292
+ this.closeTab( t );
293
+ }
294
+ }, this);
295
+
296
+ // open
297
+ this.openTab( tab );
298
+
299
+ },
300
+
301
+ addTab: function( $a, field ){
302
+
303
+ // create <li>
304
+ var $li = $('<li></li>');
305
+
306
+ // append <a>
307
+ $li.append( $a );
308
+
309
+ // append
310
+ this.$('ul').append( $li );
311
+
312
+ // initialize
313
+ var tab = new Tab({
314
+ $el: $li,
315
+ field: field,
316
+ group: this,
317
+ });
318
+
319
+ // store
320
+ this.tabs.push( tab );
321
+
322
+ // return
323
+ return tab;
324
+ },
325
+
326
+ reset: function(){
327
+
328
+ // close existing tab
329
+ this.closeActive();
330
+
331
+ // find and active a tab
332
+ return this.refresh();
333
+ },
334
+
335
+ refresh: function(){
336
+
337
+ // bail early if active already exists
338
+ if( this.hasActive() ) {
339
+ return false;
340
+ }
341
+
342
+ // find next active tab
343
+ var tab = this.getVisible().shift();
344
+
345
+ // open tab
346
+ if( tab ) {
347
+ this.openTab( tab );
348
+ }
349
+
350
+ // return
351
+ return tab;
352
+ },
353
+
354
+ onRefresh: function(){
355
+
356
+ // only for left placements
357
+ if( this.get('placement') !== 'left' ) {
358
+ return;
359
+ }
360
+
361
+ // vars
362
+ var $parent = this.$el.parent();
363
+ var $list = this.$el.children('ul');
364
+ var attribute = $parent.is('td') ? 'height' : 'min-height';
365
+
366
+ // find height (minus 1 for border-bottom)
367
+ var height = $list.position().top + $list.outerHeight(true) - 1;
368
+
369
+ // add css
370
+ $parent.css(attribute, height);
371
+ }
372
+ });
373
+
374
+ var Tab = acf.Model.extend({
375
+
376
+ group: false,
377
+
378
+ field: false,
379
+
380
+ events: {
381
+ 'click a': 'onClick'
382
+ },
383
+
384
+ index: function(){
385
+ return this.$el.index();
386
+ },
387
+
388
+ isVisible: function(){
389
+ return acf.isVisible( this.$el );
390
+ },
391
+
392
+ isActive: function(){
393
+ return this.$el.hasClass('active');
394
+ },
395
+
396
+ open: function(){
397
+
398
+ // add class
399
+ this.$el.addClass('active');
400
+
401
+ // show field
402
+ this.field.showFields();
403
+ },
404
+
405
+ close: function(){
406
+
407
+ // remove class
408
+ this.$el.removeClass('active');
409
+
410
+ // hide field
411
+ this.field.hideFields();
412
+ },
413
+
414
+ onClick: function( e, $el ){
415
+
416
+ // prevent default
417
+ e.preventDefault();
418
+
419
+ // toggle
420
+ this.toggle();
421
+ },
422
+
423
+ toggle: function(){
424
+
425
+ // bail early if already active
426
+ if( this.isActive() ) {
427
+ return;
428
+ }
429
+
430
+ // toggle this tab
431
+ this.group.openTab( this );
432
+ }
433
+ });
434
+
435
+ var tabsManager = new acf.Model({
436
+
437
+ priority: 50,
438
+
439
+ actions: {
440
+ 'prepare': 'render',
441
+ 'append': 'render',
442
+ 'unload': 'onUnload',
443
+ 'invalid_field': 'onInvalidField'
444
+ },
445
+
446
+ findTabs: function(){
447
+ return $('.acf-tab-wrap');
448
+ },
449
+
450
+ getTabs: function(){
451
+ return acf.getInstances( this.findTabs() );
452
+ },
453
+
454
+ render: function( $el ){
455
+ this.getTabs().map(function( tabs ){
456
+ if( !tabs.get('initialized') ) {
457
+ tabs.initializeTabs();
458
+ }
459
+ });
460
+ },
461
+
462
+ onInvalidField: function( field ){
463
+
464
+ // bail early if busy
465
+ if( this.busy ) {
466
+ return;
467
+ }
468
+
469
+ // ignore if not hidden by tab
470
+ if( !field.hiddenByTab ) {
471
+ return;
472
+ }
473
+
474
+ // toggle tab
475
+ field.hiddenByTab.toggle();
476
+
477
+ // ignore other invalid fields
478
+ this.busy = true;
479
+ this.setTimeout(function(){
480
+ this.busy = false;
481
+ }, 100);
482
+ },
483
+
484
+ onUnload: function(){
485
+
486
+ // vars
487
+ var order = [];
488
+
489
+ // loop
490
+ this.getTabs().map(function( group ){
491
+ var active = group.hasActive() ? group.getActive().index() : 0;
492
+ order.push(active);
493
+ });
494
+
495
+ // bail if no tabs
496
+ if( !order.length ) {
497
+ return;
498
+ }
499
+
500
+ // update
501
+ acf.setPreference('this.tabs', order);
502
+ }
503
+ });
504
+
505
+ })(jQuery);
assets/build/js/_acf-field-taxonomy.js ADDED
@@ -0,0 +1,321 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'taxonomy',
6
+
7
+ data: {
8
+ 'ftype': 'select'
9
+ },
10
+
11
+ select2: false,
12
+
13
+ wait: 'load',
14
+
15
+ events: {
16
+ 'click a[data-name="add"]': 'onClickAdd',
17
+ 'click input[type="radio"]': 'onClickRadio',
18
+ },
19
+
20
+ $control: function(){
21
+ return this.$('.acf-taxonomy-field');
22
+ },
23
+
24
+ $input: function(){
25
+ return this.getRelatedPrototype().$input.apply(this, arguments);
26
+ },
27
+
28
+ getRelatedType: function(){
29
+
30
+ // vars
31
+ var fieldType = this.get('ftype');
32
+
33
+ // normalize
34
+ if( fieldType == 'multi_select' ) {
35
+ fieldType = 'select';
36
+ }
37
+
38
+ // return
39
+ return fieldType;
40
+
41
+ },
42
+
43
+ getRelatedPrototype: function(){
44
+ return acf.getFieldType( this.getRelatedType() ).prototype;
45
+ },
46
+
47
+ getValue: function(){
48
+ return this.getRelatedPrototype().getValue.apply(this, arguments);
49
+ },
50
+
51
+ setValue: function(){
52
+ return this.getRelatedPrototype().setValue.apply(this, arguments);
53
+ },
54
+
55
+ initialize: function(){
56
+ this.getRelatedPrototype().initialize.apply(this, arguments);
57
+ },
58
+
59
+ onRemove: function(){
60
+ if( this.select2 ) {
61
+ this.select2.destroy();
62
+ }
63
+ },
64
+
65
+ onClickAdd: function( e, $el ){
66
+
67
+ // vars
68
+ var field = this;
69
+ var popup = false;
70
+ var $form = false;
71
+ var $name = false;
72
+ var $parent = false;
73
+ var $button = false;
74
+ var $message = false;
75
+ var notice = false;
76
+
77
+ // step 1.
78
+ var step1 = function(){
79
+
80
+ // popup
81
+ popup = acf.newPopup({
82
+ title: $el.attr('title'),
83
+ loading: true,
84
+ width: '300px'
85
+ });
86
+
87
+ // ajax
88
+ var ajaxData = {
89
+ action: 'acf/fields/taxonomy/add_term',
90
+ field_key: field.get('key')
91
+ };
92
+
93
+ // get HTML
94
+ $.ajax({
95
+ url: acf.get('ajaxurl'),
96
+ data: acf.prepareForAjax(ajaxData),
97
+ type: 'post',
98
+ dataType: 'html',
99
+ success: step2
100
+ });
101
+ };
102
+
103
+ // step 2.
104
+ var step2 = function( html ){
105
+
106
+ // update popup
107
+ popup.loading(false);
108
+ popup.content(html);
109
+
110
+ // vars
111
+ $form = popup.$('form');
112
+ $name = popup.$('input[name="term_name"]');
113
+ $parent = popup.$('select[name="term_parent"]');
114
+ $button = popup.$('.acf-submit-button');
115
+
116
+ // focus
117
+ $name.focus();
118
+
119
+ // submit form
120
+ popup.on('submit', 'form', step3);
121
+ };
122
+
123
+ // step 3.
124
+ var step3 = function( e, $el ){
125
+
126
+ // prevent
127
+ e.preventDefault();
128
+ e.stopImmediatePropagation();
129
+
130
+ // basic validation
131
+ if( $name.val() === '' ) {
132
+ $name.focus();
133
+ return false;
134
+ }
135
+
136
+ // disable
137
+ acf.startButtonLoading( $button );
138
+
139
+ // ajax
140
+ var ajaxData = {
141
+ action: 'acf/fields/taxonomy/add_term',
142
+ field_key: field.get('key'),
143
+ term_name: $name.val(),
144
+ term_parent: $parent.length ? $parent.val() : 0
145
+ };
146
+
147
+ $.ajax({
148
+ url: acf.get('ajaxurl'),
149
+ data: acf.prepareForAjax(ajaxData),
150
+ type: 'post',
151
+ dataType: 'json',
152
+ success: step4
153
+ });
154
+ };
155
+
156
+ // step 4.
157
+ var step4 = function( json ){
158
+
159
+ // enable
160
+ acf.stopButtonLoading( $button );
161
+
162
+ // remove prev notice
163
+ if( notice ) {
164
+ notice.remove();
165
+ }
166
+
167
+ // success
168
+ if( acf.isAjaxSuccess(json) ) {
169
+
170
+ // clear name
171
+ $name.val('');
172
+
173
+ // update term lists
174
+ step5( json.data );
175
+
176
+ // notice
177
+ notice = acf.newNotice({
178
+ type: 'success',
179
+ text: acf.getAjaxMessage(json),
180
+ target: $form,
181
+ timeout: 2000,
182
+ dismiss: false
183
+ });
184
+
185
+ } else {
186
+
187
+ // notice
188
+ notice = acf.newNotice({
189
+ type: 'error',
190
+ text: acf.getAjaxError(json),
191
+ target: $form,
192
+ timeout: 2000,
193
+ dismiss: false
194
+ });
195
+ }
196
+
197
+ // focus
198
+ $name.focus();
199
+ };
200
+
201
+ // step 5.
202
+ var step5 = function( term ){
203
+
204
+ // update parent dropdown
205
+ var $option = $('<option value="' + term.term_id + '">' + term.term_label + '</option>');
206
+ if( term.term_parent ) {
207
+ $parent.children('option[value="' + term.term_parent + '"]').after( $option );
208
+ } else {
209
+ $parent.append( $option );
210
+ }
211
+
212
+ // add this new term to all taxonomy field
213
+ var fields = acf.getFields({
214
+ type: 'taxonomy'
215
+ });
216
+
217
+ fields.map(function( otherField ){
218
+ if( otherField.get('taxonomy') == field.get('taxonomy') ) {
219
+ otherField.appendTerm( term );
220
+ }
221
+ });
222
+
223
+ // select
224
+ field.selectTerm( term.term_id );
225
+ };
226
+
227
+ // run
228
+ step1();
229
+ },
230
+
231
+ appendTerm: function( term ){
232
+
233
+ if( this.getRelatedType() == 'select' ) {
234
+ this.appendTermSelect( term );
235
+ } else {
236
+ this.appendTermCheckbox( term );
237
+ }
238
+ },
239
+
240
+ appendTermSelect: function( term ){
241
+
242
+ this.select2.addOption({
243
+ id: term.term_id,
244
+ text: term.term_label
245
+ });
246
+
247
+ },
248
+
249
+ appendTermCheckbox: function( term ){
250
+
251
+ // vars
252
+ var name = this.$('[name]:first').attr('name');
253
+ var $ul = this.$('ul:first');
254
+
255
+ // allow multiple selection
256
+ if( this.getRelatedType() == 'checkbox' ) {
257
+ name += '[]';
258
+ }
259
+
260
+ // create new li
261
+ var $li = $([
262
+ '<li data-id="' + term.term_id + '">',
263
+ '<label>',
264
+ '<input type="' + this.get('ftype') + '" value="' + term.term_id + '" name="' + name + '" /> ',
265
+ '<span>' + term.term_name + '</span>',
266
+ '</label>',
267
+ '</li>'
268
+ ].join(''));
269
+
270
+ // find parent
271
+ if( term.term_parent ) {
272
+
273
+ // vars
274
+ var $parent = $ul.find('li[data-id="' + term.term_parent + '"]');
275
+
276
+ // update vars
277
+ $ul = $parent.children('ul');
278
+
279
+ // create ul
280
+ if( !$ul.exists() ) {
281
+ $ul = $('<ul class="children acf-bl"></ul>');
282
+ $parent.append( $ul );
283
+ }
284
+ }
285
+
286
+ // append
287
+ $ul.append( $li );
288
+ },
289
+
290
+ selectTerm: function( id ){
291
+ if( this.getRelatedType() == 'select' ) {
292
+ this.select2.selectOption( id );
293
+ } else {
294
+ var $input = this.$('input[value="' + id + '"]');
295
+ $input.prop('checked', true).trigger('change');
296
+ }
297
+ },
298
+
299
+ onClickRadio: function( e, $el ){
300
+
301
+ // vars
302
+ var $label = $el.parent('label');
303
+ var selected = $label.hasClass('selected');
304
+
305
+ // remove previous selected
306
+ this.$('.selected').removeClass('selected');
307
+
308
+ // add active class
309
+ $label.addClass('selected');
310
+
311
+ // allow null
312
+ if( this.get('allow_null') && selected ) {
313
+ $label.removeClass('selected');
314
+ $el.prop('checked', false).trigger('change');
315
+ }
316
+ }
317
+ });
318
+
319
+ acf.registerFieldType( Field );
320
+
321
+ })(jQuery);
assets/build/js/_acf-field-time-picker.js ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.models.DatePickerField.extend({
4
+
5
+ type: 'time_picker',
6
+
7
+ $control: function(){
8
+ return this.$('.acf-time-picker');
9
+ },
10
+
11
+ initialize: function(){
12
+
13
+ // vars
14
+ var $input = this.$input();
15
+ var $inputText = this.$inputText();
16
+
17
+ // args
18
+ var args = {
19
+ timeFormat: this.get('time_format'),
20
+ altField: $input,
21
+ altFieldTimeOnly: false,
22
+ altTimeFormat: 'HH:mm:ss',
23
+ showButtonPanel: true,
24
+ controlType: 'select',
25
+ oneLine: true,
26
+ closeText: acf.get('dateTimePickerL10n').selectText,
27
+ timeOnly: true,
28
+ };
29
+
30
+ // add custom 'Close = Select' functionality
31
+ args.onClose = function( value, dp_instance, t_instance ){
32
+
33
+ // vars
34
+ var $close = dp_instance.dpDiv.find('.ui-datepicker-close');
35
+
36
+ // if clicking close button
37
+ if( !value && $close.is(':hover') ) {
38
+ t_instance._updateDateTime();
39
+ }
40
+ };
41
+
42
+
43
+ // filter
44
+ args = acf.applyFilters('time_picker_args', args, this);
45
+
46
+ // add date time picker
47
+ acf.newTimePicker( $inputText, args );
48
+
49
+ // action
50
+ acf.doAction('time_picker_init', $inputText, args, this);
51
+ }
52
+ });
53
+
54
+ acf.registerFieldType( Field );
55
+
56
+
57
+ // add
58
+ acf.newTimePicker = function( $input, args ){
59
+
60
+ // bail ealry if no datepicker library
61
+ if( typeof $.timepicker === 'undefined' ) {
62
+ return false;
63
+ }
64
+
65
+ // defaults
66
+ args = args || {};
67
+
68
+ // initialize
69
+ $input.timepicker( args );
70
+
71
+ // wrap the datepicker (only if it hasn't already been wrapped)
72
+ if( $('body > #ui-datepicker-div').exists() ) {
73
+ $('body > #ui-datepicker-div').wrap('<div class="acf-ui-datepicker" />');
74
+ }
75
+ };
76
+
77
+ })(jQuery);
assets/build/js/_acf-field-true-false.js ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'true_false',
6
+
7
+ events: {
8
+ 'change .acf-switch-input': 'onChange',
9
+ 'focus .acf-switch-input': 'onFocus',
10
+ 'blur .acf-switch-input': 'onBlur',
11
+ 'keypress .acf-switch-input': 'onKeypress'
12
+ },
13
+
14
+ $input: function(){
15
+ return this.$('input[type="checkbox"]');
16
+ },
17
+
18
+ $switch: function(){
19
+ return this.$('.acf-switch');
20
+ },
21
+
22
+ getValue: function(){
23
+ return this.$input().prop('checked') ? 1 : 0;
24
+ },
25
+
26
+ initialize: function(){
27
+ this.render();
28
+ },
29
+
30
+ render: function(){
31
+
32
+ // vars
33
+ var $switch = this.$switch();
34
+
35
+ // bail ealry if no $switch
36
+ if( !$switch.length ) return;
37
+
38
+ // vars
39
+ var $on = $switch.children('.acf-switch-on');
40
+ var $off = $switch.children('.acf-switch-off');
41
+ var width = Math.max( $on.width(), $off.width() );
42
+
43
+ // bail ealry if no width
44
+ if( !width ) return;
45
+
46
+ // set widths
47
+ $on.css( 'min-width', width );
48
+ $off.css( 'min-width', width );
49
+
50
+ },
51
+
52
+ switchOn: function() {
53
+ this.$input().prop('checked', true);
54
+ this.$switch().addClass('-on');
55
+ },
56
+
57
+ switchOff: function() {
58
+ this.$input().prop('checked', false);
59
+ this.$switch().removeClass('-on');
60
+ },
61
+
62
+ onChange: function( e, $el ){
63
+ if( $el.prop('checked') ) {
64
+ this.switchOn();
65
+ } else {
66
+ this.switchOff();
67
+ }
68
+ },
69
+
70
+ onFocus: function( e, $el ){
71
+ this.$switch().addClass('-focus');
72
+ },
73
+
74
+ onBlur: function( e, $el ){
75
+ this.$switch().removeClass('-focus');
76
+ },
77
+
78
+ onKeypress: function( e, $el ){
79
+
80
+ // left
81
+ if( e.keyCode === 37 ) {
82
+ return this.switchOff();
83
+ }
84
+
85
+ // right
86
+ if( e.keyCode === 39 ) {
87
+ return this.switchOn();
88
+ }
89
+
90
+ }
91
+ });
92
+
93
+ acf.registerFieldType( Field );
94
+
95
+ })(jQuery);
assets/build/js/_acf-field-url.js ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'url',
6
+
7
+ events: {
8
+ 'keyup input[type="url"]': 'onkeyup'
9
+ },
10
+
11
+ $control: function(){
12
+ return this.$('.acf-input-wrap');
13
+ },
14
+
15
+ $input: function(){
16
+ return this.$('input[type="url"]');
17
+ },
18
+
19
+ initialize: function(){
20
+ this.render();
21
+ },
22
+
23
+ isValid: function(){
24
+
25
+ // vars
26
+ var val = this.val();
27
+
28
+ // bail early if no val
29
+ if( !val ) {
30
+ return false;
31
+ }
32
+
33
+ // url
34
+ if( val.indexOf('://') !== -1 ) {
35
+ return true;
36
+ }
37
+
38
+ // protocol relative url
39
+ if( val.indexOf('//') === 0 ) {
40
+ return true;
41
+ }
42
+
43
+ // return
44
+ return false;
45
+ },
46
+
47
+ render: function(){
48
+
49
+ // add class
50
+ if( this.isValid() ) {
51
+ this.$control().addClass('-valid');
52
+ } else {
53
+ this.$control().removeClass('-valid');
54
+ }
55
+ },
56
+
57
+ onkeyup: function( e, $el ){
58
+ this.render();
59
+ }
60
+ });
61
+
62
+ acf.registerFieldType( Field );
63
+
64
+ })(jQuery);
assets/build/js/_acf-field-user.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.models.SelectField.extend({
4
+ type: 'user',
5
+ });
6
+
7
+ acf.registerFieldType( Field );
8
+
9
+ })(jQuery);
assets/build/js/_acf-field-wysiwyg.js ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Field = acf.Field.extend({
4
+
5
+ type: 'wysiwyg',
6
+
7
+ wait: 'load',
8
+
9
+ events: {
10
+ 'mousedown .acf-editor-wrap.delay': 'onMousedown',
11
+ 'unmountField': 'disableEditor',
12
+ 'remountField': 'enableEditor',
13
+ 'removeField': 'disableEditor'
14
+ },
15
+
16
+ $control: function(){
17
+ return this.$('.acf-editor-wrap');
18
+ },
19
+
20
+ $input: function(){
21
+ return this.$('textarea');
22
+ },
23
+
24
+ getMode: function(){
25
+ return this.$control().hasClass('tmce-active') ? 'visual' : 'text';
26
+ },
27
+
28
+ initialize: function(){
29
+
30
+ // initializeEditor if no delay
31
+ if( !this.$control().hasClass('delay') ) {
32
+ this.initializeEditor();
33
+ }
34
+ },
35
+
36
+ initializeEditor: function(){
37
+
38
+ // vars
39
+ var $wrap = this.$control();
40
+ var $textarea = this.$input();
41
+ var args = {
42
+ tinymce: true,
43
+ quicktags: true,
44
+ toolbar: this.get('toolbar'),
45
+ mode: this.getMode(),
46
+ field: this
47
+ };
48
+
49
+ // generate new id
50
+ var oldId = $textarea.attr('id');
51
+ var newId = acf.uniqueId('acf-editor-');
52
+
53
+ // store copy of textarea data
54
+ var data = $textarea.data();
55
+
56
+ // rename
57
+ acf.rename({
58
+ target: $wrap,
59
+ search: oldId,
60
+ replace: newId,
61
+ destructive: true
62
+ });
63
+
64
+ // update id
65
+ this.set('id', newId, true);
66
+
67
+ // initialize
68
+ acf.tinymce.initialize( newId, args );
69
+
70
+ // apply data to new textarea (acf.rename creates a new textarea element due to destructive mode)
71
+ // fixes bug where conditional logic "disabled" is lost during "screen_check"
72
+ this.$input().data(data);
73
+ },
74
+
75
+ onMousedown: function( e ){
76
+
77
+ // prevent default
78
+ e.preventDefault();
79
+
80
+ // remove delay class
81
+ var $wrap = this.$control();
82
+ $wrap.removeClass('delay');
83
+ $wrap.find('.acf-editor-toolbar').remove();
84
+
85
+ // initialize
86
+ this.initializeEditor();
87
+ },
88
+
89
+ enableEditor: function(){
90
+ if( this.getMode() == 'visual' ) {
91
+ acf.tinymce.enable( this.get('id') );
92
+ }
93
+ },
94
+
95
+ disableEditor: function(){
96
+ acf.tinymce.destroy( this.get('id') );
97
+ }
98
+ });
99
+
100
+ acf.registerFieldType( Field );
101
+
102
+ })(jQuery);
assets/build/js/_acf-field.js ADDED
@@ -0,0 +1,524 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ // vars
4
+ var storage = [];
5
+
6
+ /**
7
+ * acf.Field
8
+ *
9
+ * description
10
+ *
11
+ * @date 23/3/18
12
+ * @since 5.6.9
13
+ *
14
+ * @param type $var Description. Default.
15
+ * @return type Description.
16
+ */
17
+
18
+ acf.Field = acf.Model.extend({
19
+
20
+ // field type
21
+ type: '',
22
+
23
+ // class used to avoid nested event triggers
24
+ eventScope: '.acf-field',
25
+
26
+ // initialize events on 'ready'
27
+ wait: 'ready',
28
+
29
+ /**
30
+ * setup
31
+ *
32
+ * Called during the constructor function to setup this field ready for initialization
33
+ *
34
+ * @date 8/5/18
35
+ * @since 5.6.9
36
+ *
37
+ * @param jQuery $field The field element.
38
+ * @return void
39
+ */
40
+
41
+ setup: function( $field ){
42
+
43
+ // set $el
44
+ this.$el = $field;
45
+
46
+ // inherit $field data
47
+ this.inherit( $field );
48
+
49
+ // inherit controll data
50
+ this.inherit( this.$control() );
51
+ },
52
+
53
+ /**
54
+ * val
55
+ *
56
+ * Sets or returns the field's value
57
+ *
58
+ * @date 8/5/18
59
+ * @since 5.6.9
60
+ *
61
+ * @param mixed val Optional. The value to set
62
+ * @return mixed
63
+ */
64
+
65
+ val: function( val ){
66
+ if( val !== undefined ) {
67
+ return this.setValue( val );
68
+ } else {
69
+ return this.prop('disabled') ? null : this.getValue();
70
+ }
71
+ },
72
+
73
+ /**
74
+ * getValue
75
+ *
76
+ * returns the field's value
77
+ *
78
+ * @date 8/5/18
79
+ * @since 5.6.9
80
+ *
81
+ * @param void
82
+ * @return mixed
83
+ */
84
+
85
+ getValue: function(){
86
+ return this.$input().val();
87
+ },
88
+
89
+ /**
90
+ * setValue
91
+ *
92
+ * sets the field's value and returns true if changed
93
+ *
94
+ * @date 8/5/18
95
+ * @since 5.6.9
96
+ *
97
+ * @param mixed val
98
+ * @return boolean. True if changed.
99
+ */
100
+
101
+ setValue: function( val ){
102
+ return acf.val( this.$input(), val );
103
+ },
104
+
105
+ /**
106
+ * __
107
+ *
108
+ * i18n helper to be removed
109
+ *
110
+ * @date 8/5/18
111
+ * @since 5.6.9
112
+ *
113
+ * @param type $var Description. Default.
114
+ * @return type Description.
115
+ */
116
+
117
+ __: function( string ){
118
+ return acf._e( this.type, string );
119
+ },
120
+
121
+ /**
122
+ * $control
123
+ *
124
+ * returns the control jQuery element used for inheriting data. Uses this.control setting.
125
+ *
126
+ * @date 8/5/18
127
+ * @since 5.6.9
128
+ *
129
+ * @param void
130
+ * @return jQuery
131
+ */
132
+
133
+ $control: function(){
134
+ return false;
135
+ },
136
+
137
+ /**
138
+ * $input
139
+ *
140
+ * returns the input jQuery element used for saving values. Uses this.input setting.
141
+ *
142
+ * @date 8/5/18
143
+ * @since 5.6.9
144
+ *
145
+ * @param void
146
+ * @return jQuery
147
+ */
148
+
149
+ $input: function(){
150
+ return this.$('[name]:first');
151
+ },
152
+
153
+ /**
154
+ * $inputWrap
155
+ *
156
+ * description
157
+ *
158
+ * @date 12/5/18
159
+ * @since 5.6.9
160
+ *
161
+ * @param type $var Description. Default.
162
+ * @return type Description.
163
+ */
164
+
165
+ $inputWrap: function(){
166
+ return this.$('.acf-input:first');
167
+ },
168
+
169
+ /**
170
+ * $inputWrap
171
+ *
172
+ * description
173
+ *
174
+ * @date 12/5/18
175
+ * @since 5.6.9
176
+ *
177
+ * @param type $var Description. Default.
178
+ * @return type Description.
179
+ */
180
+
181
+ $labelWrap: function(){
182
+ return this.$('.acf-label:first');
183
+ },
184
+
185
+ /**
186
+ * getInputName
187
+ *
188
+ * Returns the field's input name
189
+ *
190
+ * @date 8/5/18
191
+ * @since 5.6.9
192
+ *
193
+ * @param void
194
+ * @return string
195
+ */
196
+
197
+ getInputName: function(){
198
+ return this.$input().attr('name') || '';
199
+ },
200
+
201
+ /**
202
+ * parent
203
+ *
204
+ * returns the field's parent field or false on failure.
205
+ *
206
+ * @date 8/5/18
207
+ * @since 5.6.9
208
+ *
209
+ * @param void
210
+ * @return object|false
211
+ */
212
+
213
+ parent: function() {
214
+
215
+ // vars
216
+ var parents = this.parents();
217
+
218
+ // return
219
+ return parents.length ? parents[0] : false;
220
+ },
221
+
222
+ /**
223
+ * parents
224
+ *
225
+ * description
226
+ *
227
+ * @date 9/7/18
228
+ * @since 5.6.9
229
+ *
230
+ * @param type $var Description. Default.
231
+ * @return type Description.
232
+ */
233
+
234
+ parents: function(){
235
+
236
+ // vars
237
+ var $parents = this.$el.parents('.acf-field');
238
+
239
+ // convert
240
+ var parents = acf.getFields( $parents );
241
+
242
+ // return
243
+ return parents;
244
+ },
245
+
246
+ show: function( lockKey, context ){
247
+
248
+ // show field and store result
249
+ var changed = acf.show( this.$el, lockKey );
250
+
251
+ // do action if visibility has changed
252
+ if( changed ) {
253
+ this.prop('hidden', false);
254
+ acf.doAction('show_field', this, context);
255
+ }
256
+
257
+ // return
258
+ return changed;
259
+ },
260
+
261
+ hide: function( lockKey, context ){
262
+
263
+ // hide field and store result
264
+ var changed = acf.hide( this.$el, lockKey );
265
+
266
+ // do action if visibility has changed
267
+ if( changed ) {
268
+ this.prop('hidden', true);
269
+ acf.doAction('hide_field', this, context);
270
+ }
271
+
272
+ // return
273
+ return changed;
274
+ },
275
+
276
+ enable: function( lockKey, context ){
277
+
278
+ // enable field and store result
279
+ var changed = acf.enable( this.$el, lockKey );
280
+
281
+ // do action if disabled has changed
282
+ if( changed ) {
283
+ this.prop('disabled', false);
284
+ acf.doAction('enable_field', this, context);
285
+ }
286
+
287
+ // return
288
+ return changed;
289
+ },
290
+
291
+ disable: function( lockKey, context ){
292
+
293
+ // disabled field and store result
294
+ var changed = acf.disable( this.$el, lockKey );
295
+
296
+ // do action if disabled has changed
297
+ if( changed ) {
298
+ this.prop('disabled', true);
299
+ acf.doAction('disable_field', this, context);
300
+ }
301
+
302
+ // return
303
+ return changed;
304
+ },
305
+
306
+ showEnable: function( lockKey, context ){
307
+
308
+ // enable
309
+ this.enable.apply(this, arguments);
310
+
311
+ // show and return true if changed
312
+ return this.show.apply(this, arguments);
313
+ },
314
+
315
+ hideDisable: function( lockKey, context ){
316
+
317
+ // disable
318
+ this.disable.apply(this, arguments);
319
+
320
+ // hide and return true if changed
321
+ return this.hide.apply(this, arguments);
322
+ },
323
+
324
+ showNotice: function( props ){
325
+
326
+ // ensure object
327
+ if( typeof props !== 'object' ) {
328
+ props = { text: props };
329
+ }
330
+
331
+ // remove old notice
332
+ if( this.notice ) {
333
+ this.notice.remove();
334
+ }
335
+
336
+ // create new notice
337
+ props.target = this.$inputWrap();
338
+ this.notice = acf.newNotice( props );
339
+ },
340
+
341
+ removeNotice: function( timeout ){
342
+ if( this.notice ) {
343
+ this.notice.away( timeout || 0 );
344
+ this.notice = false;
345
+ }
346
+ },
347
+
348
+ showError: function( message ){
349
+
350
+ // add class
351
+ this.$el.addClass('acf-error');
352
+
353
+ // add message
354
+ if( message !== undefined ) {
355
+ this.showNotice({
356
+ text: message,
357
+ type: 'error',
358
+ dismiss: false
359
+ });
360
+ }
361
+
362
+ // action
363
+ acf.doAction('invalid_field', this);
364
+
365
+ // add event
366
+ this.$el.one('focus change', 'input, select, textarea', $.proxy( this.removeError, this ));
367
+ },
368
+
369
+ removeError: function(){
370
+
371
+ // remove class
372
+ this.$el.removeClass('acf-error');
373
+
374
+ // remove notice
375
+ this.removeNotice( 250 );
376
+
377
+ // action
378
+ acf.doAction('valid_field', this);
379
+ },
380
+
381
+ trigger: function( name, args, bubbles ){
382
+
383
+ // allow some events to bubble
384
+ if( name == 'invalidField' ) {
385
+ bubbles = true;
386
+ }
387
+
388
+ // return
389
+ return acf.Model.prototype.trigger.apply(this, [name, args, bubbles]);
390
+ },
391
+ });
392
+
393
+ /**
394
+ * newField
395
+ *
396
+ * description
397
+ *
398
+ * @date 14/12/17
399
+ * @since 5.6.5
400
+ *
401
+ * @param type $var Description. Default.
402
+ * @return type Description.
403
+ */
404
+
405
+ acf.newField = function( $field ){
406
+
407
+ // vars
408
+ var type = $field.data('type');
409
+ var mid = modelId( type );
410
+ var model = acf.models[ mid ] || acf.Field;
411
+
412
+ // instantiate
413
+ var field = new model( $field );
414
+
415
+ // actions
416
+ acf.doAction('new_field', field);
417
+
418
+ // return
419
+ return field;
420
+ };
421
+
422
+ /**
423
+ * mid
424
+ *
425
+ * Calculates the model ID for a field type
426
+ *
427
+ * @date 15/12/17
428
+ * @since 5.6.5
429
+ *
430
+ * @param string type
431
+ * @return string
432
+ */
433
+
434
+ var modelId = function( type ) {
435
+ return acf.strPascalCase( type || '' ) + 'Field';
436
+ };
437
+
438
+ /**
439
+ * registerFieldType
440
+ *
441
+ * description
442
+ *
443
+ * @date 14/12/17
444
+ * @since 5.6.5
445
+ *
446
+ * @param type $var Description. Default.
447
+ * @return type Description.
448
+ */
449
+
450
+ acf.registerFieldType = function( model ){
451
+
452
+ // vars
453
+ var proto = model.prototype;
454
+ var type = proto.type;
455
+ var mid = modelId( type );
456
+
457
+ // store model
458
+ acf.models[ mid ] = model;
459
+
460
+ // store reference
461
+ storage.push( type );
462
+ };
463
+
464
+ /**
465
+ * acf.getFieldType
466
+ *
467
+ * description
468
+ *
469
+ * @date 1/2/18
470
+ * @since 5.6.5
471
+ *
472
+ * @param type $var Description. Default.
473
+ * @return type Description.
474
+ */
475
+
476
+ acf.getFieldType = function( type ){
477
+ var mid = modelId( type );
478
+ return acf.models[ mid ] || false;
479
+ }
480
+
481
+ /**
482
+ * acf.getFieldTypes
483
+ *
484
+ * description
485
+ *
486
+ * @date 1/2/18
487
+ * @since 5.6.5
488
+ *
489
+ * @param type $var Description. Default.
490
+ * @return type Description.
491
+ */
492
+
493
+ acf.getFieldTypes = function( args ){
494
+
495
+ // defaults
496
+ args = acf.parseArgs(args, {
497
+ category: '',
498
+ // hasValue: true
499
+ });
500
+
501
+ // clonse available types
502
+ var types = [];
503
+
504
+ // loop
505
+ storage.map(function( type ){
506
+
507
+ // vars
508
+ var model = acf.getFieldType(type);
509
+ var proto = model.prototype;
510
+
511
+ // check operator
512
+ if( args.category && proto.category !== args.category ) {
513
+ return;
514
+ }
515
+
516
+ // append
517
+ types.push( model );
518
+ });
519
+
520
+ // return
521
+ return types;
522
+ };
523
+
524
+ })(jQuery);
assets/build/js/_acf-fields.js ADDED
@@ -0,0 +1,372 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * findFields
5
+ *
6
+ * Returns a jQuery selection object of acf fields.
7
+ *
8
+ * @date 14/12/17
9
+ * @since 5.6.5
10
+ *
11
+ * @param object $args {
12
+ * Optional. Arguments to find fields.
13
+ *
14
+ * @type string key The field's key (data-attribute).
15
+ * @type string name The field's name (data-attribute).
16
+ * @type string type The field's type (data-attribute).
17
+ * @type string is jQuery selector to compare against.
18
+ * @type jQuery parent jQuery element to search within.
19
+ * @type jQuery sibling jQuery element to search alongside.
20
+ * @type limit int The number of fields to find.
21
+ * @type suppressFilters bool Whether to allow filters to add/remove results. Default behaviour will ignore clone fields.
22
+ * }
23
+ * @return jQuery
24
+ */
25
+
26
+ acf.findFields = function( args ){
27
+
28
+ // vars
29
+ var selector = '.acf-field';
30
+ var $fields = false;
31
+
32
+ // args
33
+ args = acf.parseArgs(args, {
34
+ key: '',
35
+ name: '',
36
+ type: '',
37
+ is: '',
38
+ parent: false,
39
+ sibling: false,
40
+ limit: false,
41
+ visible: false,
42
+ suppressFilters: false,
43
+ });
44
+
45
+ // filter args
46
+ if( !args.suppressFilters ) {
47
+ args = acf.applyFilters('find_fields_args', args);
48
+ }
49
+
50
+ // key
51
+ if( args.key ) {
52
+ selector += '[data-key="' + args.key + '"]';
53
+ }
54
+
55
+ // type
56
+ if( args.type ) {
57
+ selector += '[data-type="' + args.type + '"]';
58
+ }
59
+
60
+ // name
61
+ if( args.name ) {
62
+ selector += '[data-name="' + args.name + '"]';
63
+ }
64
+
65
+ // is
66
+ if( args.is ) {
67
+ selector += args.is;
68
+ }
69
+
70
+ // visibility
71
+ if( args.visible ) {
72
+ selector += ':visible';
73
+ }
74
+
75
+ // query
76
+ if( args.parent ) {
77
+ $fields = args.parent.find( selector );
78
+ } else if( args.sibling ) {
79
+ $fields = args.sibling.siblings( selector );
80
+ } else {
81
+ $fields = $( selector );
82
+ }
83
+
84
+ // filter
85
+ if( !args.suppressFilters ) {
86
+ $fields = $fields.not('.acf-clone .acf-field');
87
+ $fields = acf.applyFilters('find_fields', $fields);
88
+ }
89
+
90
+ // limit
91
+ if( args.limit ) {
92
+ $fields = $fields.slice( 0, args.limit );
93
+ }
94
+
95
+ // return
96
+ return $fields;
97
+
98
+ };
99
+
100
+ /**
101
+ * findField
102
+ *
103
+ * Finds a specific field with jQuery
104
+ *
105
+ * @date 14/12/17
106
+ * @since 5.6.5
107
+ *
108
+ * @param string key The field's key.
109
+ * @param jQuery $parent jQuery element to search within.
110
+ * @return jQuery
111
+ */
112
+
113
+ acf.findField = function( key, $parent ){
114
+ return acf.findFields({
115
+ key: key,
116
+ limit: 1,
117
+ parent: $parent,
118
+ suppressFilters: true
119
+ });
120
+ };
121
+
122
+ /**
123
+ * getField
124
+ *
125
+ * Returns a field instance
126
+ *
127
+ * @date 14/12/17
128
+ * @since 5.6.5
129
+ *
130
+ * @param jQuery|string $field jQuery element or field key.
131
+ * @return object
132
+ */
133
+
134
+ acf.getField = function( $field ){
135
+
136
+ // allow jQuery
137
+ if( $field instanceof jQuery ) {
138
+
139
+ // find fields
140
+ } else {
141
+ $field = acf.findField( $field );
142
+ }
143
+
144
+ // instantiate
145
+ var field = $field.data('acf');
146
+ if( !field ) {
147
+ field = acf.newField( $field );
148
+ }
149
+
150
+ // return
151
+ return field;
152
+ };
153
+
154
+ /**
155
+ * getFields
156
+ *
157
+ * Returns multiple field instances
158
+ *
159
+ * @date 14/12/17
160
+ * @since 5.6.5
161
+ *
162
+ * @param jQuery|object $fields jQuery elements or query args.
163
+ * @return array
164
+ */
165
+
166
+ acf.getFields = function( $fields ){
167
+
168
+ // allow jQuery
169
+ if( $fields instanceof jQuery ) {
170
+
171
+ // find fields
172
+ } else {
173
+ $fields = acf.findFields( $fields );
174
+ }
175
+
176
+ // loop
177
+ var fields = [];
178
+ $fields.each(function(){
179
+ var field = acf.getField( $(this) );
180
+ fields.push( field );
181
+ });
182
+
183
+ // return
184
+ return fields;
185
+ };
186
+
187
+ /**
188
+ * findClosestField
189
+ *
190
+ * Returns the closest jQuery field element
191
+ *
192
+ * @date 9/4/18
193
+ * @since 5.6.9
194
+ *
195
+ * @param jQuery $el
196
+ * @return jQuery
197
+ */
198
+
199
+ acf.findClosestField = function( $el ){
200
+ return $el.closest('.acf-field');
201
+ };
202
+
203
+ /**
204
+ * getClosestField
205
+ *
206
+ * Returns the closest field instance
207
+ *
208
+ * @date 22/1/18
209
+ * @since 5.6.5
210
+ *
211
+ * @param jQuery $el
212
+ * @return object
213
+ */
214
+
215
+ acf.getClosestField = function( $el ){
216
+ var $field = acf.findClosestField( $el );
217
+ return this.getField( $field );
218
+ };
219
+
220
+ /**
221
+ * addGlobalFieldAction
222
+ *
223
+ * Sets up callback logic for global field actions
224
+ *
225
+ * @date 15/6/18
226
+ * @since 5.6.9
227
+ *
228
+ * @param string action
229
+ * @return void
230
+ */
231
+
232
+ var addGlobalFieldAction = function( action ){
233
+
234
+ // vars
235
+ var globalAction = action;
236
+ var pluralAction = action + '_fields'; // ready_fields
237
+ var singleAction = action + '_field'; // ready_field
238
+
239
+ // global action
240
+ var globalCallback = function( $el /*, arg1, arg2, etc*/ ){
241
+ //console.log( action, arguments );
242
+
243
+ // get args [$el, ...]
244
+ var args = acf.arrayArgs( arguments );
245
+ var extraArgs = args.slice(1);
246
+
247
+ // find fields
248
+ var fields = acf.getFields({ parent: $el });
249
+
250
+ // check
251
+ if( fields.length ) {
252
+
253
+ // pluralAction
254
+ var pluralArgs = [ pluralAction, fields ].concat( extraArgs );
255
+ acf.doAction.apply(null, pluralArgs);
256
+ }
257
+ };
258
+
259
+ // plural action
260
+ var pluralCallback = function( fields /*, arg1, arg2, etc*/ ){
261
+ //console.log( pluralAction, arguments );
262
+
263
+ // get args [fields, ...]
264
+ var args = acf.arrayArgs( arguments );
265
+ var extraArgs = args.slice(1);
266
+
267
+ // loop
268
+ fields.map(function( field, i ){
269
+ //setTimeout(function(){
270
+ // singleAction
271
+ var singleArgs = [ singleAction, field ].concat( extraArgs );
272
+ acf.doAction.apply(null, singleArgs);
273
+ //}, i * 100);
274
+ });
275
+ };
276
+
277
+ // add actions
278
+ acf.addAction(globalAction, globalCallback);
279
+ acf.addAction(pluralAction, pluralCallback);
280
+
281
+ // also add single action
282
+ addSingleFieldAction( action );
283
+ }
284
+
285
+ /**
286
+ * addSingleFieldAction
287
+ *
288
+ * Sets up callback logic for single field actions
289
+ *
290
+ * @date 15/6/18
291
+ * @since 5.6.9
292
+ *
293
+ * @param string action
294
+ * @return void
295
+ */
296
+
297
+ var addSingleFieldAction = function( action ){
298
+
299
+ // vars
300
+ var singleAction = action + '_field'; // ready_field
301
+ var singleEvent = action + 'Field'; // readyField
302
+
303
+ // single action
304
+ var singleCallback = function( field /*, arg1, arg2, etc*/ ){
305
+ //console.log( singleAction, arguments );
306
+
307
+ // get args [field, ...]
308
+ var args = acf.arrayArgs( arguments );
309
+ var extraArgs = args.slice(1);
310
+
311
+ // action variations (ready_field/type=image)
312
+ var variations = ['type', 'name', 'key'];
313
+ variations.map(function( variation ){
314
+
315
+ // vars
316
+ var prefix = '/' + variation + '=' + field.get(variation);
317
+
318
+ // singleAction
319
+ args = [ singleAction + prefix , field ].concat( extraArgs );
320
+ acf.doAction.apply(null, args);
321
+ });
322
+
323
+ // event
324
+ if( singleFieldEvents.indexOf(action) > -1 ) {
325
+ field.trigger(singleEvent, extraArgs);
326
+ }
327
+ };
328
+
329
+ // add actions
330
+ acf.addAction(singleAction, singleCallback);
331
+ }
332
+
333
+ // vars
334
+ var globalFieldActions = [ 'prepare', 'ready', 'load', 'append', 'remove', 'unmount', 'remount', 'sortstart', 'sortstop', 'show', 'hide', 'unload' ];
335
+ var singleFieldActions = [ 'valid', 'invalid', 'enable', 'disable', 'new' ];
336
+ var singleFieldEvents = [ 'remove', 'unmount', 'remount', 'sortstart', 'sortstop', 'show', 'hide', 'unload', 'valid', 'invalid', 'enable', 'disable' ];
337
+
338
+ // add
339
+ globalFieldActions.map( addGlobalFieldAction );
340
+ singleFieldActions.map( addSingleFieldAction );
341
+
342
+ /**
343
+ * fieldsEventManager
344
+ *
345
+ * Manages field actions and events
346
+ *
347
+ * @date 15/12/17
348
+ * @since 5.6.5
349
+ *
350
+ * @param void
351
+ * @param void
352
+ */
353
+
354
+ var fieldsEventManager = new acf.Model({
355
+ id: 'fieldsEventManager',
356
+ events: {
357
+ 'click .acf-field a[href="#"]': 'onClick',
358
+ 'change .acf-field': 'onChange'
359
+ },
360
+ onClick: function( e ){
361
+
362
+ // prevent default of any link with an href of #
363
+ e.preventDefault();
364
+ },
365
+ onChange: function(){
366
+
367
+ // preview hack allows post to save with no title or content
368
+ $('#_acf_changed').val(1);
369
+ }
370
+ });
371
+
372
+ })(jQuery);
assets/build/js/_acf-helpers.js ADDED
@@ -0,0 +1,361 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * refreshHelper
5
+ *
6
+ * description
7
+ *
8
+ * @date 1/7/18
9
+ * @since 5.6.9
10
+ *
11
+ * @param type $var Description. Default.
12
+ * @return type Description.
13
+ */
14
+
15
+ var refreshHelper = new acf.Model({
16
+ priority: 90,
17
+ timeout: 0,
18
+ actions: {
19
+ 'new_field': 'refresh',
20
+ 'show_field': 'refresh',
21
+ 'hide_field': 'refresh',
22
+ 'remove_field': 'refresh'
23
+ },
24
+ refresh: function(){
25
+ clearTimeout( this.timeout );
26
+ this.timeout = setTimeout(function(){
27
+ acf.doAction('refresh');
28
+ }, 0);
29
+ }
30
+ });
31
+
32
+ /**
33
+ * mountHelper
34
+ *
35
+ * Adds compatiblity for the 'unmount' and 'remount' actions added in 5.8.0
36
+ *
37
+ * @date 7/3/19
38
+ * @since 5.7.14
39
+ *
40
+ * @param void
41
+ * @return void
42
+ */
43
+ var mountHelper = new acf.Model({
44
+ priority: 1,
45
+ actions: {
46
+ 'sortstart': 'onSortstart',
47
+ 'sortstop': 'onSortstop'
48
+ },
49
+ onSortstart: function( $item ){
50
+ acf.doAction('unmount', $item);
51
+ },
52
+ onSortstop: function( $item ){
53
+ acf.doAction('remount', $item);
54
+ }
55
+ });
56
+
57
+ /**
58
+ * sortableHelper
59
+ *
60
+ * Adds compatibility for sorting a <tr> element
61
+ *
62
+ * @date 6/3/18
63
+ * @since 5.6.9
64
+ *
65
+ * @param void
66
+ * @return void
67
+ */
68
+
69
+ var sortableHelper = new acf.Model({
70
+ actions: {
71
+ 'sortstart': 'onSortstart'
72
+ },
73
+ onSortstart: function( $item, $placeholder ){
74
+
75
+ // if $item is a tr, apply some css to the elements
76
+ if( $item.is('tr') ) {
77
+
78
+ // replace $placeholder children with a single td
79
+ // fixes "width calculation issues" due to conditional logic hiding some children
80
+ $placeholder.html('<td style="padding:0;" colspan="' + $placeholder.children().length + '"></td>');
81
+
82
+ // add helper class to remove absolute positioning
83
+ $item.addClass('acf-sortable-tr-helper');
84
+
85
+ // set fixed widths for children
86
+ $item.children().each(function(){
87
+ $(this).width( $(this).width() );
88
+ });
89
+
90
+ // mimic height
91
+ $placeholder.height( $item.height() + 'px' );
92
+
93
+ // remove class
94
+ $item.removeClass('acf-sortable-tr-helper');
95
+ }
96
+ }
97
+ });
98
+
99
+ /**
100
+ * duplicateHelper
101
+ *
102
+ * Fixes browser bugs when duplicating an element
103
+ *
104
+ * @date 6/3/18
105
+ * @since 5.6.9
106
+ *
107
+ * @param void
108
+ * @return void
109
+ */
110
+
111
+ var duplicateHelper = new acf.Model({
112
+ actions: {
113
+ 'after_duplicate': 'onAfterDuplicate'
114
+ },
115
+ onAfterDuplicate: function( $el, $el2 ){
116
+
117
+ // get original values
118
+ var vals = [];
119
+ $el.find('select').each(function(i){
120
+ vals.push( $(this).val() );
121
+ });
122
+
123
+ // set duplicate values
124
+ $el2.find('select').each(function(i){
125
+ $(this).val( vals[i] );
126
+ });
127
+ }
128
+ });
129
+
130
+ /**
131
+ * tableHelper
132
+ *
133
+ * description
134
+ *
135
+ * @date 6/3/18
136
+ * @since 5.6.9
137
+ *
138
+ * @param type $var Description. Default.
139
+ * @return type Description.
140
+ */
141
+
142
+ var tableHelper = new acf.Model({
143
+
144
+ id: 'tableHelper',
145
+
146
+ priority: 20,
147
+
148
+ actions: {
149
+ 'refresh': 'renderTables'
150
+ },
151
+
152
+ renderTables: function( $el ){
153
+
154
+ // loop
155
+ var self = this;
156
+ $('.acf-table:visible').each(function(){
157
+ self.renderTable( $(this) );
158
+ });
159
+ },
160
+
161
+ renderTable: function( $table ){
162
+
163
+ // vars
164
+ var $ths = $table.find('> thead > tr:visible > th[data-key]');
165
+ var $tds = $table.find('> tbody > tr:visible > td[data-key]');
166
+
167
+ // bail early if no thead
168
+ if( !$ths.length || !$tds.length ) {
169
+ return false;
170
+ }
171
+
172
+
173
+ // visiblity
174
+ $ths.each(function( i ){
175
+
176
+ // vars
177
+ var $th = $(this);
178
+ var key = $th.data('key');
179
+ var $cells = $tds.filter('[data-key="' + key + '"]');
180
+ var $hidden = $cells.filter('.acf-hidden');
181
+
182
+ // always remove empty and allow cells to be hidden
183
+ $cells.removeClass('acf-empty');
184
+
185
+ // hide $th if all cells are hidden
186
+ if( $cells.length === $hidden.length ) {
187
+ acf.hide( $th );
188
+
189
+ // force all hidden cells to appear empty
190
+ } else {
191
+ acf.show( $th );
192
+ $hidden.addClass('acf-empty');
193
+ }
194
+ });
195
+
196
+
197
+ // clear width
198
+ $ths.css('width', 'auto');
199
+
200
+ // get visible
201
+ $ths = $ths.not('.acf-hidden');
202
+
203
+ // vars
204
+ var availableWidth = 100;
205
+ var colspan = $ths.length;
206
+
207
+ // set custom widths first
208
+ var $fixedWidths = $ths.filter('[data-width]');
209
+ $fixedWidths.each(function(){
210
+ var width = $(this).data('width');
211
+ $(this).css('width', width + '%');
212
+ availableWidth -= width;
213
+ });
214
+
215
+ // set auto widths
216
+ var $auoWidths = $ths.not('[data-width]');
217
+ if( $auoWidths.length ) {
218
+ var width = availableWidth / $auoWidths.length;
219
+ $auoWidths.css('width', width + '%');
220
+ availableWidth = 0;
221
+ }
222
+
223
+ // avoid stretching issue
224
+ if( availableWidth > 0 ) {
225
+ $ths.last().css('width', 'auto');
226
+ }
227
+
228
+
229
+ // update colspan on collapsed
230
+ $tds.filter('.-collapsed-target').each(function(){
231
+
232
+ // vars
233
+ var $td = $(this);
234
+
235
+ // check if collapsed
236
+ if( $td.parent().hasClass('-collapsed') ) {
237
+ $td.attr('colspan', $ths.length);
238
+ } else {
239
+ $td.removeAttr('colspan');
240
+ }
241
+ });
242
+ }
243
+ });
244
+
245
+
246
+ /**
247
+ * fieldsHelper
248
+ *
249
+ * description
250
+ *
251
+ * @date 6/3/18
252
+ * @since 5.6.9
253
+ *
254
+ * @param type $var Description. Default.
255
+ * @return type Description.
256
+ */
257
+
258
+ var fieldsHelper = new acf.Model({
259
+
260
+ id: 'fieldsHelper',
261
+
262
+ priority: 30,
263
+
264
+ actions: {
265
+ 'refresh': 'renderGroups'
266
+ },
267
+
268
+ renderGroups: function(){
269
+
270
+ // loop
271
+ var self = this;
272
+ $('.acf-fields:visible').each(function(){
273
+ self.renderGroup( $(this) );
274
+ });
275
+ },
276
+
277
+ renderGroup: function( $el ){
278
+
279
+ // vars
280
+ var top = 0;
281
+ var height = 0;
282
+ var $row = $();
283
+
284
+ // get fields
285
+ var $fields = $el.children('.acf-field[data-width]:visible');
286
+
287
+ // bail early if no fields
288
+ if( !$fields.length ) {
289
+ return false;
290
+ }
291
+
292
+ // bail ealry if is .-left
293
+ if( $el.hasClass('-left') ) {
294
+ $fields.removeAttr('data-width');
295
+ $fields.css('width', 'auto');
296
+ return false;
297
+ }
298
+
299
+ // reset fields
300
+ $fields.removeClass('-r0 -c0').css({'min-height': 0});
301
+
302
+ // loop
303
+ $fields.each(function( i ){
304
+
305
+ // vars
306
+ var $field = $(this);
307
+ var position = $field.position();
308
+ var thisTop = Math.ceil( position.top );
309
+ var thisLeft = Math.ceil( position.left );
310
+
311
+ // detect change in row
312
+ if( $row.length && thisTop > top ) {
313
+
314
+ // set previous heights
315
+ $row.css({'min-height': height+'px'});
316
+
317
+ // update position due to change in row above
318
+ position = $field.position();
319
+ thisTop = Math.ceil( position.top );
320
+ thisLeft = Math.ceil( position.left );
321
+
322
+ // reset vars
323
+ top = 0;
324
+ height = 0;
325
+ $row = $();
326
+ }
327
+
328
+ // rtl
329
+ if( acf.get('rtl') ) {
330
+ thisLeft = Math.ceil( $field.parent().width() - (position.left + $field.outerWidth()) );
331
+ }
332
+
333
+ // add classes
334
+ if( thisTop == 0 ) {
335
+ $field.addClass('-r0');
336
+ } else if( thisLeft == 0 ) {
337
+ $field.addClass('-c0');
338
+ }
339
+
340
+ // get height after class change
341
+ // - add 1 for subpixel rendering
342
+ var thisHeight = Math.ceil( $field.outerHeight() ) + 1;
343
+
344
+ // set height
345
+ height = Math.max( height, thisHeight );
346
+
347
+ // set y
348
+ top = Math.max( top, thisTop );
349
+
350
+ // append
351
+ $row = $row.add( $field );
352
+ });
353
+
354
+ // clean up
355
+ if( $row.length ) {
356
+ $row.css({'min-height': height+'px'});
357
+ }
358
+ }
359
+ });
360
+
361
+ })(jQuery);
assets/build/js/_acf-hooks.js ADDED
@@ -0,0 +1,252 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( window, undefined ) {
2
+ "use strict";
3
+
4
+ /**
5
+ * Handles managing all events for whatever you plug it into. Priorities for hooks are based on lowest to highest in
6
+ * that, lowest priority hooks are fired first.
7
+ */
8
+ var EventManager = function() {
9
+ /**
10
+ * Maintain a reference to the object scope so our public methods never get confusing.
11
+ */
12
+ var MethodsAvailable = {
13
+ removeFilter : removeFilter,
14
+ applyFilters : applyFilters,
15
+ addFilter : addFilter,
16
+ removeAction : removeAction,
17
+ doAction : doAction,
18
+ addAction : addAction,
19
+ storage : getStorage
20
+ };
21
+
22
+ /**
23
+ * Contains the hooks that get registered with this EventManager. The array for storage utilizes a "flat"
24
+ * object literal such that looking up the hook utilizes the native object literal hash.
25
+ */
26
+ var STORAGE = {
27
+ actions : {},
28
+ filters : {}
29
+ };
30
+
31
+ function getStorage() {
32
+
33
+ return STORAGE;
34
+
35
+ };
36
+
37
+ /**
38
+ * Adds an action to the event manager.
39
+ *
40
+ * @param action Must contain namespace.identifier
41
+ * @param callback Must be a valid callback function before this action is added
42
+ * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
43
+ * @param [context] Supply a value to be used for this
44
+ */
45
+ function addAction( action, callback, priority, context ) {
46
+ if( typeof action === 'string' && typeof callback === 'function' ) {
47
+ priority = parseInt( ( priority || 10 ), 10 );
48
+ _addHook( 'actions', action, callback, priority, context );
49
+ }
50
+
51
+ return MethodsAvailable;
52
+ }
53
+
54
+ /**
55
+ * Performs an action if it exists. You can pass as many arguments as you want to this function; the only rule is
56
+ * that the first argument must always be the action.
57
+ */
58
+ function doAction( /* action, arg1, arg2, ... */ ) {
59
+ var args = Array.prototype.slice.call( arguments );
60
+ var action = args.shift();
61
+
62
+ if( typeof action === 'string' ) {
63
+ _runHook( 'actions', action, args );
64
+ }
65
+
66
+ return MethodsAvailable;
67
+ }
68
+
69
+ /**
70
+ * Removes the specified action if it contains a namespace.identifier & exists.
71
+ *
72
+ * @param action The action to remove
73
+ * @param [callback] Callback function to remove
74
+ */
75
+ function removeAction( action, callback ) {
76
+ if( typeof action === 'string' ) {
77
+ _removeHook( 'actions', action, callback );
78
+ }
79
+
80
+ return MethodsAvailable;
81
+ }
82
+
83
+ /**
84
+ * Adds a filter to the event manager.
85
+ *
86
+ * @param filter Must contain namespace.identifier
87
+ * @param callback Must be a valid callback function before this action is added
88
+ * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
89
+ * @param [context] Supply a value to be used for this
90
+ */
91
+ function addFilter( filter, callback, priority, context ) {
92
+ if( typeof filter === 'string' && typeof callback === 'function' ) {
93
+ priority = parseInt( ( priority || 10 ), 10 );
94
+ _addHook( 'filters', filter, callback, priority, context );
95
+ }
96
+
97
+ return MethodsAvailable;
98
+ }
99
+
100
+ /**
101
+ * Performs a filter if it exists. You should only ever pass 1 argument to be filtered. The only rule is that
102
+ * the first argument must always be the filter.
103
+ */
104
+ function applyFilters( /* filter, filtered arg, arg2, ... */ ) {
105
+ var args = Array.prototype.slice.call( arguments );
106
+ var filter = args.shift();
107
+
108
+ if( typeof filter === 'string' ) {
109
+ return _runHook( 'filters', filter, args );
110
+ }
111
+
112
+ return MethodsAvailable;
113
+ }
114
+
115
+ /**
116
+ * Removes the specified filter if it contains a namespace.identifier & exists.
117
+ *
118
+ * @param filter The action to remove
119
+ * @param [callback] Callback function to remove
120
+ */
121
+ function removeFilter( filter, callback ) {
122
+ if( typeof filter === 'string') {
123
+ _removeHook( 'filters', filter, callback );
124
+ }
125
+
126
+ return MethodsAvailable;
127
+ }
128
+
129
+ /**
130
+ * Removes the specified hook by resetting the value of it.
131
+ *
132
+ * @param type Type of hook, either 'actions' or 'filters'
133
+ * @param hook The hook (namespace.identifier) to remove
134
+ * @private
135
+ */
136
+ function _removeHook( type, hook, callback, context ) {
137
+ if ( !STORAGE[ type ][ hook ] ) {
138
+ return;
139
+ }
140
+ if ( !callback ) {
141
+ STORAGE[ type ][ hook ] = [];
142
+ } else {
143
+ var handlers = STORAGE[ type ][ hook ];
144
+ var i;
145
+ if ( !context ) {
146
+ for ( i = handlers.length; i--; ) {
147
+ if ( handlers[i].callback === callback ) {
148
+ handlers.splice( i, 1 );
149
+ }
150
+ }
151
+ }
152
+ else {
153
+ for ( i = handlers.length; i--; ) {
154
+ var handler = handlers[i];
155
+ if ( handler.callback === callback && handler.context === context) {
156
+ handlers.splice( i, 1 );
157
+ }
158
+ }
159
+ }
160
+ }
161
+ }
162
+
163
+ /**
164
+ * Adds the hook to the appropriate storage container
165
+ *
166
+ * @param type 'actions' or 'filters'
167
+ * @param hook The hook (namespace.identifier) to add to our event manager
168
+ * @param callback The function that will be called when the hook is executed.
169
+ * @param priority The priority of this hook. Must be an integer.
170
+ * @param [context] A value to be used for this
171
+ * @private
172
+ */
173
+ function _addHook( type, hook, callback, priority, context ) {
174
+ var hookObject = {
175
+ callback : callback,
176
+ priority : priority,
177
+ context : context
178
+ };
179
+
180
+ // Utilize 'prop itself' : http://jsperf.com/hasownproperty-vs-in-vs-undefined/19
181
+ var hooks = STORAGE[ type ][ hook ];
182
+ if( hooks ) {
183
+ hooks.push( hookObject );
184
+ hooks = _hookInsertSort( hooks );
185
+ }
186
+ else {
187
+ hooks = [ hookObject ];
188
+ }
189
+
190
+ STORAGE[ type ][ hook ] = hooks;
191
+ }
192
+
193
+ /**
194
+ * Use an insert sort for keeping our hooks organized based on priority. This function is ridiculously faster
195
+ * than bubble sort, etc: http://jsperf.com/javascript-sort
196
+ *
197
+ * @param hooks The custom array containing all of the appropriate hooks to perform an insert sort on.
198
+ * @private
199
+ */
200
+ function _hookInsertSort( hooks ) {
201
+ var tmpHook, j, prevHook;
202
+ for( var i = 1, len = hooks.length; i < len; i++ ) {
203
+ tmpHook = hooks[ i ];
204
+ j = i;
205
+ while( ( prevHook = hooks[ j - 1 ] ) && prevHook.priority > tmpHook.priority ) {
206
+ hooks[ j ] = hooks[ j - 1 ];
207
+ --j;
208
+ }
209
+ hooks[ j ] = tmpHook;
210
+ }
211
+
212
+ return hooks;
213
+ }
214
+
215
+ /**
216
+ * Runs the specified hook. If it is an action, the value is not modified but if it is a filter, it is.
217
+ *
218
+ * @param type 'actions' or 'filters'
219
+ * @param hook The hook ( namespace.identifier ) to be ran.
220
+ * @param args Arguments to pass to the action/filter. If it's a filter, args is actually a single parameter.
221
+ * @private
222
+ */
223
+ function _runHook( type, hook, args ) {
224
+ var handlers = STORAGE[ type ][ hook ];
225
+
226
+ if ( !handlers ) {
227
+ return (type === 'filters') ? args[0] : false;
228
+ }
229
+
230
+ var i = 0, len = handlers.length;
231
+ if ( type === 'filters' ) {
232
+ for ( ; i < len; i++ ) {
233
+ args[ 0 ] = handlers[ i ].callback.apply( handlers[ i ].context, args );
234
+ }
235
+ } else {
236
+ for ( ; i < len; i++ ) {
237
+ handlers[ i ].callback.apply( handlers[ i ].context, args );
238
+ }
239
+ }
240
+
241
+ return ( type === 'filters' ) ? args[ 0 ] : true;
242
+ }
243
+
244
+ // return all of the publicly available methods
245
+ return MethodsAvailable;
246
+
247
+ };
248
+
249
+ // instantiate
250
+ acf.hooks = new EventManager();
251
+
252
+ } )( window );
assets/build/js/_acf-media.js ADDED
@@ -0,0 +1,832 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * acf.newMediaPopup
5
+ *
6
+ * description
7
+ *
8
+ * @date 10/1/18
9
+ * @since 5.6.5
10
+ *
11
+ * @param type $var Description. Default.
12
+ * @return type Description.
13
+ */
14
+
15
+ acf.newMediaPopup = function( args ){
16
+
17
+ // args
18
+ var popup = null;
19
+ var args = acf.parseArgs(args, {
20
+ mode: 'select', // 'select', 'edit'
21
+ title: '', // 'Upload Image'
22
+ button: '', // 'Select Image'
23
+ type: '', // 'image', ''
24
+ field: false, // field instance
25
+ allowedTypes: '', // '.jpg, .png, etc'
26
+ library: 'all', // 'all', 'uploadedTo'
27
+ multiple: false, // false, true, 'add'
28
+ attachment: 0, // the attachment to edit
29
+ autoOpen: true, // open the popup automatically
30
+ open: function(){}, // callback after close
31
+ select: function(){}, // callback after select
32
+ close: function(){} // callback after close
33
+ });
34
+
35
+ // initialize
36
+ if( args.mode == 'edit' ) {
37
+ popup = new acf.models.EditMediaPopup( args );
38
+ } else {
39
+ popup = new acf.models.SelectMediaPopup( args );
40
+ }
41
+
42
+ // open popup (allow frame customization before opening)
43
+ if( args.autoOpen ) {
44
+ setTimeout(function(){
45
+ popup.open();
46
+ }, 1);
47
+ }
48
+
49
+ // action
50
+ acf.doAction('new_media_popup', popup);
51
+
52
+ // return
53
+ return popup;
54
+ };
55
+
56
+
57
+ /**
58
+ * getPostID
59
+ *
60
+ * description
61
+ *
62
+ * @date 10/1/18
63
+ * @since 5.6.5
64
+ *
65
+ * @param type $var Description. Default.
66
+ * @return type Description.
67
+ */
68
+
69
+ var getPostID = function() {
70
+ var postID = acf.get('post_id');
71
+ return $.isNumeric(postID) ? postID : 0;
72
+ }
73
+
74
+
75
+ /**
76
+ * acf.getMimeTypes
77
+ *
78
+ * description
79
+ *
80
+ * @date 11/1/18
81
+ * @since 5.6.5
82
+ *
83
+ * @param type $var Description. Default.
84
+ * @return type Description.
85
+ */
86
+
87
+ acf.getMimeTypes = function(){
88
+ return this.get('mimeTypes');
89
+ };
90
+
91
+ acf.getMimeType = function( name ){
92
+
93
+ // vars
94
+ var allTypes = acf.getMimeTypes();
95
+
96
+ // search
97
+ if( allTypes[name] !== undefined ) {
98
+ return allTypes[name];
99
+ }
100
+
101
+ // some types contain a mixed key such as "jpg|jpeg|jpe"
102
+ for( var key in allTypes ) {
103
+ if( key.indexOf(name) !== -1 ) {
104
+ return allTypes[key];
105
+ }
106
+ }
107
+
108
+ // return
109
+ return false;
110
+ };
111
+
112
+
113
+ /**
114
+ * MediaPopup
115
+ *
116
+ * description
117
+ *
118
+ * @date 10/1/18
119
+ * @since 5.6.5
120
+ *
121
+ * @param type $var Description. Default.
122
+ * @return type Description.
123
+ */
124
+
125
+ var MediaPopup = acf.Model.extend({
126
+
127
+ id: 'MediaPopup',
128
+ data: {},
129
+ defaults: {},
130
+ frame: false,
131
+
132
+ setup: function( props ){
133
+ $.extend(this.data, props);
134
+ },
135
+
136
+ initialize: function(){
137
+
138
+ // vars
139
+ var options = this.getFrameOptions();
140
+
141
+ // add states
142
+ this.addFrameStates( options );
143
+
144
+ // create frame
145
+ var frame = wp.media( options );
146
+
147
+ // add args reference
148
+ frame.acf = this;
149
+
150
+ // add events
151
+ this.addFrameEvents( frame, options );
152
+
153
+ // strore frame
154
+ this.frame = frame;
155
+ },
156
+
157
+ open: function(){
158
+ this.frame.open();
159
+ },
160
+
161
+ close: function(){
162
+ this.frame.close();
163
+ },
164
+
165
+ remove: function(){
166
+ this.frame.detach();
167
+ this.frame.remove();
168
+ },
169
+
170
+ getFrameOptions: function(){
171
+
172
+ // vars
173
+ var options = {
174
+ title: this.get('title'),
175
+ multiple: this.get('multiple'),
176
+ library: {},
177
+ states: []
178
+ };
179
+
180
+ // type
181
+ if( this.get('type') ) {
182
+ options.library.type = this.get('type');
183
+ }
184
+
185
+ // type
186
+ if( this.get('library') === 'uploadedTo' ) {
187
+ options.library.uploadedTo = getPostID();
188
+ }
189
+
190
+ // attachment
191
+ if( this.get('attachment') ) {
192
+ options.library.post__in = [ this.get('attachment') ];
193
+ }
194
+
195
+ // button
196
+ if( this.get('button') ) {
197
+ options.button = {
198
+ text: this.get('button')
199
+ };
200
+ }
201
+
202
+ // return
203
+ return options;
204
+ },
205
+
206
+ addFrameStates: function( options ){
207
+
208
+ // create query
209
+ var Query = wp.media.query( options.library );
210
+
211
+ // add _acfuploader
212
+ // this is super wack!
213
+ // if you add _acfuploader to the options.library args, new uploads will not be added to the library view.
214
+ // this has been traced back to the wp.media.model.Query initialize function (which can't be overriden)
215
+ // Adding any custom args will cause the Attahcments to not observe the uploader queue
216
+ // To bypass this security issue, we add in the args AFTER the Query has been initialized
217
+ // options.library._acfuploader = settings.field;
218
+ if( this.get('field') && acf.isset(Query, 'mirroring', 'args') ) {
219
+ Query.mirroring.args._acfuploader = this.get('field');
220
+ }
221
+
222
+ // add states
223
+ options.states.push(
224
+
225
+ // main state
226
+ new wp.media.controller.Library({
227
+ library: Query,
228
+ multiple: this.get('multiple'),
229
+ title: this.get('title'),
230
+ priority: 20,
231
+ filterable: 'all',
232
+ editable: true,
233
+ allowLocalEdits: true
234
+ })
235
+
236
+ );
237
+
238
+ // edit image functionality (added in WP 3.9)
239
+ if( acf.isset(wp, 'media', 'controller', 'EditImage') ) {
240
+ options.states.push( new wp.media.controller.EditImage() );
241
+ }
242
+ },
243
+
244
+ addFrameEvents: function( frame, options ){
245
+
246
+ // log all events
247
+ //frame.on('all', function( e ) {
248
+ // console.log( 'frame all: %o', e );
249
+ //});
250
+
251
+ // add class
252
+ frame.on('open',function() {
253
+ this.$el.closest('.media-modal').addClass('acf-media-modal -' + this.acf.get('mode') );
254
+ }, frame);
255
+
256
+ // edit image view
257
+ // source: media-views.js:2410 editImageContent()
258
+ frame.on('content:render:edit-image', function(){
259
+
260
+ var image = this.state().get('image');
261
+ var view = new wp.media.view.EditImage({ model: image, controller: this }).render();
262
+ this.content.set( view );
263
+
264
+ // after creating the wrapper view, load the actual editor via an ajax call
265
+ view.loadEditor();
266
+
267
+ }, frame);
268
+
269
+ // update toolbar button
270
+ //frame.on( 'toolbar:create:select', function( toolbar ) {
271
+ // toolbar.view = new wp.media.view.Toolbar.Select({
272
+ // text: frame.options._button,
273
+ // controller: this
274
+ // });
275
+ //}, frame );
276
+
277
+ // on select
278
+ frame.on('select', function() {
279
+
280
+ // vars
281
+ var selection = frame.state().get('selection');
282
+
283
+ // if selecting images
284
+ if( selection ) {
285
+
286
+ // loop
287
+ selection.each(function( attachment, i ){
288
+ frame.acf.get('select').apply( frame.acf, [attachment, i] );
289
+ });
290
+ }
291
+ });
292
+
293
+ // on close
294
+ frame.on('close',function(){
295
+
296
+ // callback and remove
297
+ setTimeout(function(){
298
+ frame.acf.get('close').apply( frame.acf );
299
+ frame.acf.remove();
300
+ }, 1);
301
+ });
302
+ }
303
+ });
304
+
305
+
306
+ /**
307
+ * acf.models.SelectMediaPopup
308
+ *
309
+ * description
310
+ *
311
+ * @date 10/1/18
312
+ * @since 5.6.5
313
+ *
314
+ * @param type $var Description. Default.
315
+ * @return type Description.
316
+ */
317
+
318
+ acf.models.SelectMediaPopup = MediaPopup.extend({
319
+ id: 'SelectMediaPopup',
320
+ setup: function( props ){
321
+
322
+ // default button
323
+ if( !props.button ) {
324
+ props.button = acf._x('Select', 'verb');
325
+ }
326
+
327
+ // parent
328
+ MediaPopup.prototype.setup.apply(this, arguments);
329
+ },
330
+
331
+ addFrameEvents: function( frame, options ){
332
+
333
+ // plupload
334
+ // adds _acfuploader param to validate uploads
335
+ if( acf.isset(_wpPluploadSettings, 'defaults', 'multipart_params') ) {
336
+
337
+ // add _acfuploader so that Uploader will inherit
338
+ _wpPluploadSettings.defaults.multipart_params._acfuploader = this.get('field');
339
+
340
+ // remove acf_field so future Uploaders won't inherit
341
+ frame.on('open', function(){
342
+ delete _wpPluploadSettings.defaults.multipart_params._acfuploader;
343
+ });
344
+ }
345
+
346
+ // browse
347
+ frame.on('content:activate:browse', function(){
348
+
349
+ // vars
350
+ var toolbar = false;
351
+
352
+ // populate above vars making sure to allow for failure
353
+ // perhaps toolbar does not exist because the frame open is Upload Files
354
+ try {
355
+ toolbar = frame.content.get().toolbar;
356
+ } catch(e) {
357
+ console.log(e);
358
+ return;
359
+ }
360
+
361
+ // callback
362
+ frame.acf.customizeFilters.apply(frame.acf, [toolbar]);
363
+ });
364
+
365
+ // parent
366
+ MediaPopup.prototype.addFrameEvents.apply(this, arguments);
367
+
368
+ },
369
+
370
+ customizeFilters: function( toolbar ){
371
+
372
+ // vars
373
+ var filters = toolbar.get('filters');
374
+
375
+ // image
376
+ if( this.get('type') == 'image' ) {
377
+
378
+ // update all
379
+ filters.filters.all.text = acf.__('All images');
380
+
381
+ // remove some filters
382
+ delete filters.filters.audio;
383
+ delete filters.filters.video;
384
+ delete filters.filters.image;
385
+
386
+ // update all filters to show images
387
+ $.each(filters.filters, function( i, filter ){
388
+ filter.props.type = filter.props.type || 'image';
389
+ });
390
+ }
391
+
392
+ // specific types
393
+ if( this.get('allowedTypes') ) {
394
+
395
+ // convert ".jpg, .png" into ["jpg", "png"]
396
+ var allowedTypes = this.get('allowedTypes').split(' ').join('').split('.').join('').split(',');
397
+
398
+ // loop
399
+ allowedTypes.map(function( name ){
400
+
401
+ // get type
402
+ var mimeType = acf.getMimeType( name );
403
+
404
+ // bail early if no type
405
+ if( !mimeType ) return;
406
+
407
+ // create new filter
408
+ var newFilter = {
409
+ text: mimeType,
410
+ props: {
411
+ status: null,
412
+ type: mimeType,
413
+ uploadedTo: null,
414
+ orderby: 'date',
415
+ order: 'DESC'
416
+ },
417
+ priority: 20
418
+ };
419
+
420
+ // append
421
+ filters.filters[ mimeType ] = newFilter;
422
+
423
+ });
424
+ }
425
+
426
+
427
+
428
+ // uploaded to post
429
+ if( this.get('library') === 'uploadedTo' ) {
430
+
431
+ // vars
432
+ var uploadedTo = this.frame.options.library.uploadedTo;
433
+
434
+ // remove some filters
435
+ delete filters.filters.unattached;
436
+ delete filters.filters.uploaded;
437
+
438
+ // add uploadedTo to filters
439
+ $.each(filters.filters, function( i, filter ){
440
+ filter.text += ' (' + acf.__('Uploaded to this post') + ')';
441
+ filter.props.uploadedTo = uploadedTo;
442
+ });
443
+ }
444
+
445
+ // add _acfuploader to filters
446
+ var field = this.get('field');
447
+ $.each(filters.filters, function( k, filter ){
448
+ filter.props._acfuploader = field;
449
+ });
450
+
451
+ // add _acfuplaoder to search
452
+ var search = toolbar.get('search');
453
+ search.model.attributes._acfuploader = field;
454
+
455
+ // render (custom function added to prototype)
456
+ if( filters.renderFilters ) {
457
+ filters.renderFilters();
458
+ }
459
+ }
460
+ });
461
+
462
+
463
+ /**
464
+ * acf.models.EditMediaPopup
465
+ *
466
+ * description
467
+ *
468
+ * @date 10/1/18
469
+ * @since 5.6.5
470
+ *
471
+ * @param type $var Description. Default.
472
+ * @return type Description.
473
+ */
474
+
475
+ acf.models.EditMediaPopup = MediaPopup.extend({
476
+ id: 'SelectMediaPopup',
477
+ setup: function( props ){
478
+
479
+ // default button
480
+ if( !props.button ) {
481
+ props.button = acf._x('Update', 'verb');
482
+ }
483
+
484
+ // parent
485
+ MediaPopup.prototype.setup.apply(this, arguments);
486
+ },
487
+
488
+ addFrameEvents: function( frame, options ){
489
+
490
+ // add class
491
+ frame.on('open',function() {
492
+
493
+ // add class
494
+ this.$el.closest('.media-modal').addClass('acf-expanded');
495
+
496
+ // set to browse
497
+ if( this.content.mode() != 'browse' ) {
498
+ this.content.mode('browse');
499
+ }
500
+
501
+ // set selection
502
+ var state = this.state();
503
+ var selection = state.get('selection');
504
+ var attachment = wp.media.attachment( frame.acf.get('attachment') );
505
+ selection.add( attachment );
506
+
507
+ }, frame);
508
+
509
+ // parent
510
+ MediaPopup.prototype.addFrameEvents.apply(this, arguments);
511
+
512
+ }
513
+ });
514
+
515
+
516
+ /**
517
+ * customizePrototypes
518
+ *
519
+ * description
520
+ *
521
+ * @date 11/1/18
522
+ * @since 5.6.5
523
+ *
524
+ * @param type $var Description. Default.
525
+ * @return type Description.
526
+ */
527
+
528
+ var customizePrototypes = new acf.Model({
529
+ id: 'customizePrototypes',
530
+ wait: 'ready',
531
+
532
+ initialize: function(){
533
+
534
+ // bail early if no media views
535
+ if( !acf.isset(window, 'wp', 'media', 'view') ) {
536
+ return;
537
+ }
538
+
539
+ // fix bug where CPT without "editor" does not set post.id setting which then prevents uploadedTo from working
540
+ var postID = getPostID();
541
+ if( postID && acf.isset(wp, 'media', 'view', 'settings', 'post') ) {
542
+ wp.media.view.settings.post.id = postID;
543
+ }
544
+
545
+ // customize
546
+ this.customizeAttachmentsButton();
547
+ this.customizeAttachmentsRouter();
548
+ this.customizeAttachmentFilters();
549
+ this.customizeAttachmentCompat();
550
+ this.customizeAttachmentLibrary();
551
+ },
552
+
553
+ customizeAttachmentsButton: function(){
554
+
555
+ // validate
556
+ if( !acf.isset(wp, 'media', 'view', 'Button') ) {
557
+ return;
558
+ }
559
+
560
+ // Extend
561
+ var Button = wp.media.view.Button;
562
+ wp.media.view.Button = Button.extend({
563
+
564
+ // Fix bug where "Select" button appears blank after editing an image.
565
+ // Do this by simplifying Button initialize function and avoid deleting this.options.
566
+ initialize: function() {
567
+ var options = _.defaults( this.options, this.defaults );
568
+ this.model = new Backbone.Model( options );
569
+ this.listenTo( this.model, 'change', this.render );
570
+ }
571
+ });
572
+
573
+ },
574
+
575
+ customizeAttachmentsRouter: function(){
576
+
577
+ // validate
578
+ if( !acf.isset(wp, 'media', 'view', 'Router') ) {
579
+ return;
580
+ }
581
+
582
+ // vars
583
+ var Parent = wp.media.view.Router;
584
+
585
+ // extend
586
+ wp.media.view.Router = Parent.extend({
587
+
588
+ addExpand: function(){
589
+
590
+ // vars
591
+ var $a = $([
592
+ '<a href="#" class="acf-expand-details">',
593
+ '<span class="is-closed"><span class="acf-icon -left small grey"></span>' + acf.__('Expand Details') + '</span>',
594
+ '<span class="is-open"><span class="acf-icon -right small grey"></span>' + acf.__('Collapse Details') + '</span>',
595
+ '</a>'
596
+ ].join(''));
597
+
598
+ // add events
599
+ $a.on('click', function( e ){
600
+ e.preventDefault();
601
+ var $div = $(this).closest('.media-modal');
602
+ if( $div.hasClass('acf-expanded') ) {
603
+ $div.removeClass('acf-expanded');
604
+ } else {
605
+ $div.addClass('acf-expanded');
606
+ }
607
+ });
608
+
609
+ // append
610
+ this.$el.append( $a );
611
+ },
612
+
613
+ initialize: function(){
614
+
615
+ // initialize
616
+ Parent.prototype.initialize.apply( this, arguments );
617
+
618
+ // add buttons
619
+ this.addExpand();
620
+
621
+ // return
622
+ return this;
623
+ }
624
+ });
625
+ },
626
+
627
+ customizeAttachmentFilters: function(){
628
+
629
+ // validate
630
+ if( !acf.isset(wp, 'media', 'view', 'AttachmentFilters', 'All') ) {
631
+ return;
632
+ }
633
+
634
+ // vars
635
+ var Parent = wp.media.view.AttachmentFilters.All;
636
+
637
+ // renderFilters
638
+ // copied from media-views.js:6939
639
+ Parent.prototype.renderFilters = function(){
640
+
641
+ // Build `<option>` elements.
642
+ this.$el.html( _.chain( this.filters ).map( function( filter, value ) {
643
+ return {
644
+ el: $( '<option></option>' ).val( value ).html( filter.text )[0],
645
+ priority: filter.priority || 50
646
+ };
647
+ }, this ).sortBy('priority').pluck('el').value() );
648
+
649
+ };
650
+ },
651
+
652
+ customizeAttachmentCompat: function(){
653
+
654
+ // validate
655
+ if( !acf.isset(wp, 'media', 'view', 'AttachmentCompat') ) {
656
+ return;
657
+ }
658
+
659
+ // vars
660
+ var AttachmentCompat = wp.media.view.AttachmentCompat;
661
+ var timeout = false;
662
+
663
+ // extend
664
+ wp.media.view.AttachmentCompat = AttachmentCompat.extend({
665
+
666
+ render: function() {
667
+
668
+ // WP bug
669
+ // When multiple media frames exist on the same page (WP content, WYSIWYG, image, file ),
670
+ // WP creates multiple instances of this AttachmentCompat view.
671
+ // Each instance will attempt to render when a new modal is created.
672
+ // Use a property to avoid this and only render once per instance.
673
+ if( this.rendered ) {
674
+ return this;
675
+ }
676
+
677
+ // render HTML
678
+ AttachmentCompat.prototype.render.apply( this, arguments );
679
+
680
+ // when uploading, render is called twice.
681
+ // ignore first render by checking for #acf-form-data element
682
+ if( !this.$('#acf-form-data').length ) {
683
+ return this;
684
+ }
685
+
686
+ // clear timeout
687
+ clearTimeout( timeout );
688
+
689
+ // setTimeout
690
+ timeout = setTimeout($.proxy(function(){
691
+ this.rendered = true;
692
+ acf.doAction('append', this.$el);
693
+ }, this), 50);
694
+
695
+ // return
696
+ return this;
697
+ },
698
+
699
+ save: function( event ) {
700
+ var data = {};
701
+
702
+ if ( event ) {
703
+ event.preventDefault();
704
+ }
705
+
706
+ //_.each( this.$el.serializeArray(), function( pair ) {
707
+ // data[ pair.name ] = pair.value;
708
+ //});
709
+
710
+ // Serialize data more thoroughly to allow chckbox inputs to save.
711
+ data = acf.serializeForAjax(this.$el);
712
+
713
+ this.controller.trigger( 'attachment:compat:waiting', ['waiting'] );
714
+ this.model.saveCompat( data ).always( _.bind( this.postSave, this ) );
715
+ }
716
+ });
717
+
718
+ },
719
+
720
+ customizeAttachmentLibrary: function(){
721
+
722
+ // validate
723
+ if( !acf.isset(wp, 'media', 'view', 'Attachment', 'Library') ) {
724
+ return;
725
+ }
726
+
727
+ // vars
728
+ var AttachmentLibrary = wp.media.view.Attachment.Library;
729
+
730
+ // extend
731
+ wp.media.view.Attachment.Library = AttachmentLibrary.extend({
732
+
733
+ render: function() {
734
+
735
+ // vars
736
+ var popup = acf.isget(this, 'controller', 'acf');
737
+ var attributes = acf.isget(this, 'model', 'attributes');
738
+
739
+ // check vars exist to avoid errors
740
+ if( popup && attributes ) {
741
+
742
+ // show errors
743
+ if( attributes.acf_errors ) {
744
+ this.$el.addClass('acf-disabled');
745
+ }
746
+
747
+ // disable selected
748
+ var selected = popup.get('selected');
749
+ if( selected && selected.indexOf(attributes.id) > -1 ) {
750
+ this.$el.addClass('acf-selected');
751
+ }
752
+ }
753
+
754
+ // render
755
+ return AttachmentLibrary.prototype.render.apply( this, arguments );
756
+
757
+ },
758
+
759
+
760
+ /*
761
+ * toggleSelection
762
+ *
763
+ * This function is called before an attachment is selected
764
+ * A good place to check for errors and prevent the 'select' function from being fired
765
+ *
766
+ * @type function
767
+ * @date 29/09/2016
768
+ * @since 5.4.0
769
+ *
770
+ * @param options (object)
771
+ * @return n/a
772
+ */
773
+
774
+ toggleSelection: function( options ) {
775
+
776
+ // vars
777
+ // source: wp-includes/js/media-views.js:2880
778
+ var collection = this.collection,
779
+ selection = this.options.selection,
780
+ model = this.model,
781
+ single = selection.single();
782
+
783
+
784
+ // vars
785
+ var frame = this.controller;
786
+ var errors = acf.isget(this, 'model', 'attributes', 'acf_errors');
787
+ var $sidebar = frame.$el.find('.media-frame-content .media-sidebar');
788
+
789
+ // remove previous error
790
+ $sidebar.children('.acf-selection-error').remove();
791
+
792
+ // show attachment details
793
+ $sidebar.children().removeClass('acf-hidden');
794
+
795
+ // add message
796
+ if( frame && errors ) {
797
+
798
+ // vars
799
+ var filename = acf.isget(this, 'model', 'attributes', 'filename');
800
+
801
+ // hide attachment details
802
+ // Gallery field continues to show previously selected attachment...
803
+ $sidebar.children().addClass('acf-hidden');
804
+
805
+ // append message
806
+ $sidebar.prepend([
807
+ '<div class="acf-selection-error">',
808
+ '<span class="selection-error-label">' + acf.__('Restricted') +'</span>',
809
+ '<span class="selection-error-filename">' + filename + '</span>',
810
+ '<span class="selection-error-message">' + errors + '</span>',
811
+ '</div>'
812
+ ].join(''));
813
+
814
+ // reset selection (unselects all attachments)
815
+ selection.reset();
816
+
817
+ // set single (attachment displayed in sidebar)
818
+ selection.single( model );
819
+
820
+ // return and prevent 'select' form being fired
821
+ return;
822
+
823
+ }
824
+
825
+ // return
826
+ return AttachmentLibrary.prototype.toggleSelection.apply( this, arguments );
827
+ }
828
+ });
829
+ }
830
+ });
831
+
832
+ })(jQuery);
assets/build/js/_acf-model.js ADDED
@@ -0,0 +1,908 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ // Cached regex to split keys for `addEvent`.
4
+ var delegateEventSplitter = /^(\S+)\s*(.*)$/;
5
+
6
+ /**
7
+ * extend
8
+ *
9
+ * Helper function to correctly set up the prototype chain for subclasses
10
+ * Heavily inspired by backbone.js
11
+ *
12
+ * @date 14/12/17
13
+ * @since 5.6.5
14
+ *
15
+ * @param object protoProps New properties for this object.
16
+ * @return function.
17
+ */
18
+
19
+ var extend = function( protoProps ) {
20
+
21
+ // vars
22
+ var Parent = this;
23
+ var Child;
24
+
25
+ // The constructor function for the new subclass is either defined by you
26
+ // (the "constructor" property in your `extend` definition), or defaulted
27
+ // by us to simply call the parent constructor.
28
+ if( protoProps && protoProps.hasOwnProperty('constructor') ) {
29
+ Child = protoProps.constructor;
30
+ } else {
31
+ Child = function(){ return Parent.apply(this, arguments); };
32
+ }
33
+
34
+ // Add static properties to the constructor function, if supplied.
35
+ $.extend(Child, Parent);
36
+
37
+ // Set the prototype chain to inherit from `parent`, without calling
38
+ // `parent`'s constructor function and add the prototype properties.
39
+ Child.prototype = Object.create(Parent.prototype);
40
+ $.extend(Child.prototype, protoProps);
41
+ Child.prototype.constructor = Child;
42
+
43
+ // Set a convenience property in case the parent's prototype is needed later.
44
+ //Child.prototype.__parent__ = Parent.prototype;
45
+
46
+ // return
47
+ return Child;
48
+
49
+ };
50
+
51
+
52
+ /**
53
+ * Model
54
+ *
55
+ * Base class for all inheritence
56
+ *
57
+ * @date 14/12/17
58
+ * @since 5.6.5
59
+ *
60
+ * @param object props
61
+ * @return function.
62
+ */
63
+
64
+ var Model = acf.Model = function(){
65
+
66
+ // generate uique client id
67
+ this.cid = acf.uniqueId('acf');
68
+
69
+ // set vars to avoid modifying prototype
70
+ this.data = $.extend(true, {}, this.data);
71
+
72
+ // pass props to setup function
73
+ this.setup.apply(this, arguments);
74
+
75
+ // store on element (allow this.setup to create this.$el)
76
+ if( this.$el && !this.$el.data('acf') ) {
77
+ this.$el.data('acf', this);
78
+ }
79
+
80
+ // initialize
81
+ var initialize = function(){
82
+ this.initialize();
83
+ this.addEvents();
84
+ this.addActions();
85
+ this.addFilters();
86
+ };
87
+
88
+ // initialize on action
89
+ if( this.wait && !acf.didAction(this.wait) ) {
90
+ this.addAction(this.wait, initialize);
91
+
92
+ // initialize now
93
+ } else {
94
+ initialize.apply(this);
95
+ }
96
+ };
97
+
98
+ // Attach all inheritable methods to the Model prototype.
99
+ $.extend(Model.prototype, {
100
+
101
+ // Unique model id
102
+ id: '',
103
+
104
+ // Unique client id
105
+ cid: '',
106
+
107
+ // jQuery element
108
+ $el: null,
109
+
110
+ // Data specific to this instance
111
+ data: {},
112
+
113
+ // toggle used when changing data
114
+ busy: false,
115
+ changed: false,
116
+
117
+ // Setup events hooks
118
+ events: {},
119
+ actions: {},
120
+ filters: {},
121
+
122
+ // class used to avoid nested event triggers
123
+ eventScope: '',
124
+
125
+ // action to wait until initialize
126
+ wait: false,
127
+
128
+ // action priority default
129
+ priority: 10,
130
+
131
+ /**
132
+ * get
133
+ *
134
+ * Gets a specific data value
135
+ *
136
+ * @date 14/12/17
137
+ * @since 5.6.5
138
+ *
139
+ * @param string name
140
+ * @return mixed
141
+ */
142
+
143
+ get: function( name ) {
144
+ return this.data[name];
145
+ },
146
+
147
+ /**
148
+ * has
149
+ *
150
+ * Returns `true` if the data exists and is not null
151
+ *
152
+ * @date 14/12/17
153
+ * @since 5.6.5
154
+ *
155
+ * @param string name
156
+ * @return boolean
157
+ */
158
+
159
+ has: function( name ) {
160
+ return this.get(name) != null;
161
+ },
162
+
163
+ /**
164
+ * set
165
+ *
166
+ * Sets a specific data value
167
+ *
168
+ * @date 14/12/17
169
+ * @since 5.6.5
170
+ *
171
+ * @param string name
172
+ * @param mixed value
173
+ * @return this
174
+ */
175
+
176
+ set: function( name, value, silent ) {
177
+
178
+ // bail if unchanged
179
+ var prevValue = this.get(name);
180
+ if( prevValue == value ) {
181
+ return this;
182
+ }
183
+
184
+ // set data
185
+ this.data[ name ] = value;
186
+
187
+ // trigger events
188
+ if( !silent ) {
189
+ this.changed = true;
190
+ this.trigger('changed:' + name, [value, prevValue]);
191
+ this.trigger('changed', [name, value, prevValue]);
192
+ }
193
+
194
+ // return
195
+ return this;
196
+ },
197
+
198
+ /**
199
+ * inherit
200
+ *
201
+ * Inherits the data from a jQuery element
202
+ *
203
+ * @date 14/12/17
204
+ * @since 5.6.5
205
+ *
206
+ * @param jQuery $el
207
+ * @return this
208
+ */
209
+
210
+ inherit: function( data ){
211
+
212
+ // allow jQuery
213
+ if( data instanceof jQuery ) {
214
+ data = data.data();
215
+ }
216
+
217
+ // extend
218
+ $.extend(this.data, data);
219
+
220
+ // return
221
+ return this;
222
+ },
223
+
224
+ /**
225
+ * prop
226
+ *
227
+ * mimics the jQuery prop function
228
+ *
229
+ * @date 4/6/18
230
+ * @since 5.6.9
231
+ *
232
+ * @param type $var Description. Default.
233
+ * @return type Description.
234
+ */
235
+
236
+ prop: function(){
237
+ return this.$el.prop.apply(this.$el, arguments);
238
+ },
239
+
240
+ /**
241
+ * setup
242
+ *
243
+ * Run during constructor function
244
+ *
245
+ * @date 14/12/17
246
+ * @since 5.6.5
247
+ *
248
+ * @param n/a
249
+ * @return n/a
250
+ */
251
+
252
+ setup: function( props ){
253
+ $.extend(this, props);
254
+ },
255
+
256
+ /**
257
+ * initialize
258
+ *
259
+ * Also run during constructor function
260
+ *
261
+ * @date 14/12/17
262
+ * @since 5.6.5
263
+ *
264
+ * @param n/a
265
+ * @return n/a
266
+ */
267
+
268
+ initialize: function(){},
269
+
270
+ /**
271
+ * addElements
272
+ *
273
+ * Adds multiple jQuery elements to this object
274
+ *
275
+ * @date 9/5/18
276
+ * @since 5.6.9
277
+ *
278
+ * @param type $var Description. Default.
279
+ * @return type Description.
280
+ */
281
+
282
+ addElements: function( elements ){
283
+ elements = elements || this.elements || null;
284
+ if( !elements || !Object.keys(elements).length ) return false;
285
+ for( var i in elements ) {
286
+ this.addElement( i, elements[i] );
287
+ }
288
+ },
289
+
290
+ /**
291
+ * addElement
292
+ *
293
+ * description
294
+ *
295
+ * @date 9/5/18
296
+ * @since 5.6.9
297
+ *
298
+ * @param type $var Description. Default.
299
+ * @return type Description.
300
+ */
301
+
302
+ addElement: function( name, selector){
303
+ this[ '$' + name ] = this.$( selector );
304
+ },
305
+
306
+ /**
307
+ * addEvents
308
+ *
309
+ * Adds multiple event handlers
310
+ *
311
+ * @date 14/12/17
312
+ * @since 5.6.5
313
+ *
314
+ * @param object events {event1 : callback, event2 : callback, etc }
315
+ * @return n/a
316
+ */
317
+
318
+ addEvents: function( events ){
319
+ events = events || this.events || null;
320
+ if( !events ) return false;
321
+ for( var key in events ) {
322
+ var match = key.match(delegateEventSplitter);
323
+ this.on(match[1], match[2], events[key]);
324
+ }
325
+ },
326
+
327
+ /**
328
+ * removeEvents
329
+ *
330
+ * Removes multiple event handlers
331
+ *
332
+ * @date 14/12/17
333
+ * @since 5.6.5
334
+ *
335
+ * @param object events {event1 : callback, event2 : callback, etc }
336
+ * @return n/a
337
+ */
338
+
339
+ removeEvents: function( events ){
340
+ events = events || this.events || null;
341
+ if( !events ) return false;
342
+ for( var key in events ) {
343
+ var match = key.match(delegateEventSplitter);
344
+ this.off(match[1], match[2], events[key]);
345
+ }
346
+ },
347
+
348
+ /**
349
+ * getEventTarget
350
+ *
351
+ * Returns a jQUery element to tigger an event on
352
+ *
353
+ * @date 5/6/18
354
+ * @since 5.6.9
355
+ *
356
+ * @param jQuery $el The default jQuery element. Optional.
357
+ * @param string event The event name. Optional.
358
+ * @return jQuery
359
+ */
360
+
361
+ getEventTarget: function( $el, event ){
362
+ return $el || this.$el || $(document);
363
+ },
364
+
365
+ /**
366
+ * validateEvent
367
+ *
368
+ * Returns true if the event target's closest $el is the same as this.$el
369
+ * Requires both this.el and this.$el to be defined
370
+ *
371
+ * @date 5/6/18
372
+ * @since 5.6.9
373
+ *
374
+ * @param type $var Description. Default.
375
+ * @return type Description.
376
+ */
377
+
378
+ validateEvent: function( e ){
379
+ if( this.eventScope ) {
380
+ return $( e.target ).closest( this.eventScope ).is( this.$el );
381
+ } else {
382
+ return true;
383
+ }
384
+ },
385
+
386
+ /**
387
+ * proxyEvent
388
+ *
389
+ * Returns a new event callback function scoped to this model
390
+ *
391
+ * @date 29/3/18
392
+ * @since 5.6.9
393
+ *
394
+ * @param function callback
395
+ * @return function
396
+ */
397
+
398
+ proxyEvent: function( callback ){
399
+ return this.proxy(function(e){
400
+
401
+ // validate
402
+ if( !this.validateEvent(e) ) {
403
+ return;
404
+ }
405
+
406
+ // construct args
407
+ var args = acf.arrayArgs( arguments );
408
+ var extraArgs = args.slice(1);
409
+ var eventArgs = [ e, $(e.currentTarget) ].concat( extraArgs );
410
+
411
+ // callback
412
+ callback.apply(this, eventArgs);
413
+ });
414
+ },
415
+
416
+ /**
417
+ * on
418
+ *
419
+ * Adds an event handler similar to jQuery
420
+ * Uses the instance 'cid' to namespace event
421
+ *
422
+ * @date 14/12/17
423
+ * @since 5.6.5
424
+ *
425
+ * @param string name
426
+ * @param string callback
427
+ * @return n/a
428
+ */
429
+
430
+ on: function( a1, a2, a3, a4 ){
431
+
432
+ // vars
433
+ var $el, event, selector, callback, args;
434
+
435
+ // find args
436
+ if( a1 instanceof jQuery ) {
437
+
438
+ // 1. args( $el, event, selector, callback )
439
+ if( a4 ) {
440
+ $el = a1; event = a2; selector = a3; callback = a4;
441
+
442
+ // 2. args( $el, event, callback )
443
+ } else {
444
+ $el = a1; event = a2; callback = a3;
445
+ }
446
+ } else {
447
+
448
+ // 3. args( event, selector, callback )
449
+ if( a3 ) {
450
+ event = a1; selector = a2; callback = a3;
451
+
452
+ // 4. args( event, callback )
453
+ } else {
454
+ event = a1; callback = a2;
455
+ }
456
+ }
457
+
458
+ // element
459
+ $el = this.getEventTarget( $el );
460
+
461
+ // modify callback
462
+ if( typeof callback === 'string' ) {
463
+ callback = this.proxyEvent( this[callback] );
464
+ }
465
+
466
+ // modify event
467
+ event = event + '.' + this.cid;
468
+
469
+ // args
470
+ if( selector ) {
471
+ args = [ event, selector, callback ];
472
+ } else {
473
+ args = [ event, callback ];
474
+ }
475
+
476
+ // on()
477
+ $el.on.apply($el, args);
478
+ },
479
+
480
+ /**
481
+ * off
482
+ *
483
+ * Removes an event handler similar to jQuery
484
+ *
485
+ * @date 14/12/17
486
+ * @since 5.6.5
487
+ *
488
+ * @param string name
489
+ * @param string callback
490
+ * @return n/a
491
+ */
492
+
493
+ off: function( a1, a2 ,a3 ){
494
+
495
+ // vars
496
+ var $el, event, selector, args;
497
+
498
+ // find args
499
+ if( a1 instanceof jQuery ) {
500
+
501
+ // 1. args( $el, event, selector )
502
+ if( a3 ) {
503
+ $el = a1; event = a2; selector = a3;
504
+
505
+ // 2. args( $el, event )
506
+ } else {
507
+ $el = a1; event = a2;
508
+ }
509
+ } else {
510
+
511
+ // 3. args( event, selector )
512
+ if( a2 ) {
513
+ event = a1; selector = a2;
514
+
515
+ // 4. args( event )
516
+ } else {
517
+ event = a1;
518
+ }
519
+ }
520
+
521
+ // element
522
+ $el = this.getEventTarget( $el );
523
+
524
+ // modify event
525
+ event = event + '.' + this.cid;
526
+
527
+ // args
528
+ if( selector ) {
529
+ args = [ event, selector ];
530
+ } else {
531
+ args = [ event ];
532
+ }
533
+
534
+ // off()
535
+ $el.off.apply($el, args);
536
+ },
537
+
538
+ /**
539
+ * trigger
540
+ *
541
+ * Triggers an event similar to jQuery
542
+ *
543
+ * @date 14/12/17
544
+ * @since 5.6.5
545
+ *
546
+ * @param string name
547
+ * @param string callback
548
+ * @return n/a
549
+ */
550
+
551
+ trigger: function( name, args, bubbles ){
552
+ var $el = this.getEventTarget();
553
+ if( bubbles ) {
554
+ $el.trigger.apply( $el, arguments );
555
+ } else {
556
+ $el.triggerHandler.apply( $el, arguments );
557
+ }
558
+ return this;
559
+ },
560
+
561
+ /**
562
+ * addActions
563
+ *
564
+ * Adds multiple action handlers
565
+ *
566
+ * @date 14/12/17
567
+ * @since 5.6.5
568
+ *
569
+ * @param object actions {action1 : callback, action2 : callback, etc }
570
+ * @return n/a
571
+ */
572
+
573
+ addActions: function( actions ){
574
+ actions = actions || this.actions || null;
575
+ if( !actions ) return false;
576
+ for( var i in actions ) {
577
+ this.addAction( i, actions[i] );
578
+ }
579
+ },
580
+
581
+ /**
582
+ * removeActions
583
+ *
584
+ * Removes multiple action handlers
585
+ *
586
+ * @date 14/12/17
587
+ * @since 5.6.5
588
+ *
589
+ * @param object actions {action1 : callback, action2 : callback, etc }
590
+ * @return n/a
591
+ */
592
+
593
+ removeActions: function( actions ){
594
+ actions = actions || this.actions || null;
595
+ if( !actions ) return false;
596
+ for( var i in actions ) {
597
+ this.removeAction( i, actions[i] );
598
+ }
599
+ },
600
+
601
+ /**
602
+ * addAction
603
+ *
604
+ * Adds an action using the wp.hooks library
605
+ *
606
+ * @date 14/12/17
607
+ * @since 5.6.5
608
+ *
609
+ * @param string name
610
+ * @param string callback
611
+ * @return n/a
612
+ */
613
+
614
+ addAction: function( name, callback, priority ){
615
+ //console.log('addAction', name, priority);
616
+ // defaults
617
+ priority = priority || this.priority;
618
+
619
+ // modify callback
620
+ if( typeof callback === 'string' ) {
621
+ callback = this[ callback ];
622
+ }
623
+
624
+ // add
625
+ acf.addAction(name, callback, priority, this);
626
+
627
+ },
628
+
629
+ /**
630
+ * removeAction
631
+ *
632
+ * Remove an action using the wp.hooks library
633
+ *
634
+ * @date 14/12/17
635
+ * @since 5.6.5
636
+ *
637
+ * @param string name
638
+ * @param string callback
639
+ * @return n/a
640
+ */
641
+
642
+ removeAction: function( name, callback ){
643
+ acf.removeAction(name, this[ callback ]);
644
+ },
645
+
646
+ /**
647
+ * addFilters
648
+ *
649
+ * Adds multiple filter handlers
650
+ *
651
+ * @date 14/12/17
652
+ * @since 5.6.5
653
+ *
654
+ * @param object filters {filter1 : callback, filter2 : callback, etc }
655
+ * @return n/a
656
+ */
657
+
658
+ addFilters: function( filters ){
659
+ filters = filters || this.filters || null;
660
+ if( !filters ) return false;
661
+ for( var i in filters ) {
662
+ this.addFilter( i, filters[i] );
663
+ }
664
+ },
665
+
666
+ /**
667
+ * addFilter
668
+ *
669
+ * Adds a filter using the wp.hooks library
670
+ *
671
+ * @date 14/12/17
672
+ * @since 5.6.5
673
+ *
674
+ * @param string name
675
+ * @param string callback
676
+ * @return n/a
677
+ */
678
+
679
+ addFilter: function( name, callback, priority ){
680
+
681
+ // defaults
682
+ priority = priority || this.priority;
683
+
684
+ // modify callback
685
+ if( typeof callback === 'string' ) {
686
+ callback = this[ callback ];
687
+ }
688
+
689
+ // add
690
+ acf.addFilter(name, callback, priority, this);
691
+
692
+ },
693
+
694
+ /**
695
+ * removeFilters
696
+ *
697
+ * Removes multiple filter handlers
698
+ *
699
+ * @date 14/12/17
700
+ * @since 5.6.5
701
+ *
702
+ * @param object filters {filter1 : callback, filter2 : callback, etc }
703
+ * @return n/a
704
+ */
705
+
706
+ removeFilters: function( filters ){
707
+ filters = filters || this.filters || null;
708
+ if( !filters ) return false;
709
+ for( var i in filters ) {
710
+ this.removeFilter( i, filters[i] );
711
+ }
712
+ },
713
+
714
+ /**
715
+ * removeFilter
716
+ *
717
+ * Remove a filter using the wp.hooks library
718
+ *
719
+ * @date 14/12/17
720
+ * @since 5.6.5
721
+ *
722
+ * @param string name
723
+ * @param string callback
724
+ * @return n/a
725
+ */
726
+
727
+ removeFilter: function( name, callback ){
728
+ acf.removeFilter(name, this[ callback ]);
729
+ },
730
+
731
+ /**
732
+ * $
733
+ *
734
+ * description
735
+ *
736
+ * @date 16/12/17
737
+ * @since 5.6.5
738
+ *
739
+ * @param type $var Description. Default.
740
+ * @return type Description.
741
+ */
742
+
743
+ $: function( selector ){
744
+ return this.$el.find( selector );
745
+ },
746
+
747
+ /**
748
+ * remove
749
+ *
750
+ * Removes the element and listenters
751
+ *
752
+ * @date 19/12/17
753
+ * @since 5.6.5
754
+ *
755
+ * @param type $var Description. Default.
756
+ * @return type Description.
757
+ */
758
+
759
+ remove: function(){
760
+ this.removeEvents();
761
+ this.removeActions();
762
+ this.removeFilters();
763
+ this.$el.remove();
764
+ },
765
+
766
+ /**
767
+ * setTimeout
768
+ *
769
+ * description
770
+ *
771
+ * @date 16/1/18
772
+ * @since 5.6.5
773
+ *
774
+ * @param type $var Description. Default.
775
+ * @return type Description.
776
+ */
777
+
778
+ setTimeout: function( callback, milliseconds ){
779
+ return setTimeout( this.proxy(callback), milliseconds );
780
+ },
781
+
782
+ /**
783
+ * time
784
+ *
785
+ * used for debugging
786
+ *
787
+ * @date 7/3/18
788
+ * @since 5.6.9
789
+ *
790
+ * @param type $var Description. Default.
791
+ * @return type Description.
792
+ */
793
+
794
+ time: function(){
795
+ console.time( this.id || this.cid );
796
+ },
797
+
798
+ /**
799
+ * timeEnd
800
+ *
801
+ * used for debugging
802
+ *
803
+ * @date 7/3/18
804
+ * @since 5.6.9
805
+ *
806
+ * @param type $var Description. Default.
807
+ * @return type Description.
808
+ */
809
+
810
+ timeEnd: function(){
811
+ console.timeEnd( this.id || this.cid );
812
+ },
813
+
814
+ /**
815
+ * show
816
+ *
817
+ * description
818
+ *
819
+ * @date 15/3/18
820
+ * @since 5.6.9
821
+ *
822
+ * @param type $var Description. Default.
823
+ * @return type Description.
824
+ */
825
+
826
+ show: function(){
827
+ acf.show( this.$el );
828
+ },
829
+
830
+
831
+ /**
832
+ * hide
833
+ *
834
+ * description
835
+ *
836
+ * @date 15/3/18
837
+ * @since 5.6.9
838
+ *
839
+ * @param type $var Description. Default.
840
+ * @return type Description.
841
+ */
842
+
843
+ hide: function(){
844
+ acf.hide( this.$el );
845
+ },
846
+
847
+ /**
848
+ * proxy
849
+ *
850
+ * Returns a new function scoped to this model
851
+ *
852
+ * @date 29/3/18
853
+ * @since 5.6.9
854
+ *
855
+ * @param function callback
856
+ * @return function
857
+ */
858
+
859
+ proxy: function( callback ){
860
+ return $.proxy( callback, this );
861
+ }
862
+
863
+
864
+ });
865
+
866
+ // Set up inheritance for the model
867
+ Model.extend = extend;
868
+
869
+ // Global model storage
870
+ acf.models = {};
871
+
872
+ /**
873
+ * acf.getInstance
874
+ *
875
+ * This function will get an instance from an element
876
+ *
877
+ * @date 5/3/18
878
+ * @since 5.6.9
879
+ *
880
+ * @param type $var Description. Default.
881
+ * @return type Description.
882
+ */
883
+
884
+ acf.getInstance = function( $el ){
885
+ return $el.data('acf');
886
+ };
887
+
888
+ /**
889
+ * acf.getInstances
890
+ *
891
+ * This function will get an array of instances from multiple elements
892
+ *
893
+ * @date 5/3/18
894
+ * @since 5.6.9
895
+ *
896
+ * @param type $var Description. Default.
897
+ * @return type Description.
898
+ */
899
+
900
+ acf.getInstances = function( $el ){
901
+ var instances = [];
902
+ $el.each(function(){
903
+ instances.push( acf.getInstance( $(this) ) );
904
+ });
905
+ return instances;
906
+ };
907
+
908
+ })(jQuery);
assets/build/js/_acf-notice.js ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var Notice = acf.Model.extend({
4
+
5
+ data: {
6
+ text: '',
7
+ type: '',
8
+ timeout: 0,
9
+ dismiss: true,
10
+ target: false,
11
+ close: function(){}
12
+ },
13
+
14
+ events: {
15
+ 'click .acf-notice-dismiss': 'onClickClose',
16
+ },
17
+
18
+ tmpl: function(){
19
+ return '<div class="acf-notice"></div>';
20
+ },
21
+
22
+ setup: function( props ){
23
+ $.extend(this.data, props);
24
+ this.$el = $(this.tmpl());
25
+ },
26
+
27
+ initialize: function(){
28
+
29
+ // render
30
+ this.render();
31
+
32
+ // show
33
+ this.show();
34
+ },
35
+
36
+ render: function(){
37
+
38
+ // class
39
+ this.type( this.get('type') );
40
+
41
+ // text
42
+ this.html( '<p>' + this.get('text') + '</p>' );
43
+
44
+ // close
45
+ if( this.get('dismiss') ) {
46
+ this.$el.append('<a href="#" class="acf-notice-dismiss acf-icon -cancel small"></a>');
47
+ this.$el.addClass('-dismiss');
48
+ }
49
+
50
+ // timeout
51
+ var timeout = this.get('timeout');
52
+ if( timeout ) {
53
+ this.away( timeout );
54
+ }
55
+ },
56
+
57
+ update: function( props ){
58
+
59
+ // update
60
+ $.extend(this.data, props);
61
+
62
+ // re-initialize
63
+ this.initialize();
64
+
65
+ // refresh events
66
+ this.removeEvents();
67
+ this.addEvents();
68
+ },
69
+
70
+ show: function(){
71
+ var $target = this.get('target');
72
+ if( $target ) {
73
+ $target.prepend( this.$el );
74
+ }
75
+ },
76
+
77
+ hide: function(){
78
+ this.$el.remove();
79
+ },
80
+
81
+ away: function( timeout ){
82
+ this.setTimeout(function(){
83
+ acf.remove( this.$el );
84
+ }, timeout );
85
+ },
86
+
87
+ type: function( type ){
88
+
89
+ // remove prev type
90
+ var prevType = this.get('type');
91
+ if( prevType ) {
92
+ this.$el.removeClass('-' + prevType);
93
+ }
94
+
95
+ // add new type
96
+ this.$el.addClass('-' + type);
97
+
98
+ // backwards compatibility
99
+ if( type == 'error' ) {
100
+ this.$el.addClass('acf-error-message');
101
+ }
102
+ },
103
+
104
+ html: function( html ){
105
+ this.$el.html( html );
106
+ },
107
+
108
+ text: function( text ){
109
+ this.$('p').html( text );
110
+ },
111
+
112
+ onClickClose: function( e, $el ){
113
+ e.preventDefault();
114
+ this.get('close').apply(this, arguments);
115
+ this.remove();
116
+ }
117
+ });
118
+
119
+ acf.newNotice = function( props ){
120
+
121
+ // ensure object
122
+ if( typeof props !== 'object' ) {
123
+ props = { text: props };
124
+ }
125
+
126
+ // instantiate
127
+ return new Notice( props );
128
+ };
129
+
130
+ var noticeManager = new acf.Model({
131
+ wait: 'prepare',
132
+ priority: 1,
133
+ initialize: function(){
134
+
135
+ // vars
136
+ var $notice = $('.acf-admin-notice');
137
+
138
+ // move to avoid WP flicker
139
+ if( $notice.length ) {
140
+ $('h1:first').after( $notice );
141
+ }
142
+ }
143
+ });
144
+
145
+
146
+ })(jQuery);
assets/build/js/_acf-panel.js ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var panel = new acf.Model({
4
+
5
+ events: {
6
+ 'click .acf-panel-title': 'onClick',
7
+ },
8
+
9
+ onClick: function( e, $el ){
10
+ e.preventDefault();
11
+ this.toggle( $el.parent() );
12
+ },
13
+
14
+ isOpen: function( $el ) {
15
+ return $el.hasClass('-open');
16
+ },
17
+
18
+ toggle: function( $el ){
19
+ this.isOpen($el) ? this.close( $el ) : this.open( $el );
20
+ },
21
+
22
+ open: function( $el ){
23
+ $el.addClass('-open');
24
+ $el.find('.acf-panel-title i').attr('class', 'dashicons dashicons-arrow-down');
25
+ },
26
+
27
+ close: function( $el ){
28
+ $el.removeClass('-open');
29
+ $el.find('.acf-panel-title i').attr('class', 'dashicons dashicons-arrow-right');
30
+ }
31
+
32
+ });
33
+
34
+ })(jQuery);
assets/build/js/_acf-popup.js ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ acf.models.Popup = acf.Model.extend({
4
+
5
+ data: {
6
+ title: '',
7
+ content: '',
8
+ width: 0,
9
+ height: 0,
10
+ loading: false,
11
+ },
12
+
13
+ events: {
14
+ 'click [data-event="close"]': 'onClickClose',
15
+ 'click .acf-close-popup': 'onClickClose',
16
+ },
17
+
18
+ setup: function( props ){
19
+ $.extend(this.data, props);
20
+ this.$el = $(this.tmpl());
21
+ },
22
+
23
+ initialize: function(){
24
+ this.render();
25
+ this.open();
26
+ },
27
+
28
+ tmpl: function(){
29
+ return [
30
+ '<div id="acf-popup">',
31
+ '<div class="acf-popup-box acf-box">',
32
+ '<div class="title"><h3></h3><a href="#" class="acf-icon -cancel grey" data-event="close"></a></div>',
33
+ '<div class="inner"></div>',
34
+ '<div class="loading"><i class="acf-loading"></i></div>',
35
+ '</div>',
36
+ '<div class="bg" data-event="close"></div>',
37
+ '</div>'
38
+ ].join('');
39
+ },
40
+
41
+ render: function(){
42
+
43
+ // vars
44
+ var title = this.get('title');
45
+ var content = this.get('content');
46
+ var loading = this.get('loading');
47
+ var width = this.get('width');
48
+ var height = this.get('height');
49
+
50
+ // html
51
+ this.title( title );
52
+ this.content( content );
53
+
54
+ // width
55
+ if( width ) {
56
+ this.$('.acf-popup-box').css('width', width);
57
+ }
58
+
59
+ // height
60
+ if( height ) {
61
+ this.$('.acf-popup-box').css('min-height', height);
62
+ }
63
+
64
+ // loading
65
+ this.loading( loading );
66
+
67
+ // action
68
+ acf.doAction('append', this.$el);
69
+
70
+ },
71
+
72
+ update: function( props ){
73
+ this.data = acf.parseArgs(props, this.data);
74
+ this.render();
75
+ },
76
+
77
+ title: function( title ){
78
+ this.$('.title:first h3').html( title );
79
+ },
80
+
81
+ content: function( content ){
82
+ this.$('.inner:first').html( content );
83
+ },
84
+
85
+ loading: function( show ){
86
+ var $loading = this.$('.loading:first');
87
+ show ? $loading.show() : $loading.hide();
88
+ },
89
+
90
+ open: function(){
91
+ $('body').append( this.$el );
92
+ },
93
+
94
+ close: function(){
95
+ this.remove();
96
+ },
97
+
98
+ onClickClose: function( e, $el ){
99
+ e.preventDefault();
100
+ this.close();
101
+ }
102
+
103
+ });
104
+
105
+ /**
106
+ * newPopup
107
+ *
108
+ * Creates a new Popup with the supplied props
109
+ *
110
+ * @date 17/12/17
111
+ * @since 5.6.5
112
+ *
113
+ * @param object props
114
+ * @return object
115
+ */
116
+
117
+ acf.newPopup = function( props ){
118
+ return new acf.models.Popup( props );
119
+ };
120
+
121
+ })(jQuery);
assets/build/js/_acf-postbox.js ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * postboxManager
5
+ *
6
+ * Manages postboxes on the screen.
7
+ *
8
+ * @date 25/5/19
9
+ * @since 5.8.1
10
+ *
11
+ * @param void
12
+ * @return void
13
+ */
14
+ var postboxManager = new acf.Model({
15
+ wait: 'prepare',
16
+ priority: 1,
17
+ initialize: function(){
18
+ (acf.get('postboxes') || []).map( acf.newPostbox );
19
+ },
20
+ });
21
+
22
+ /**
23
+ * acf.getPostbox
24
+ *
25
+ * Returns a postbox instance.
26
+ *
27
+ * @date 23/9/18
28
+ * @since 5.7.7
29
+ *
30
+ * @param mixed $el Either a jQuery element or the postbox id.
31
+ * @return object
32
+ */
33
+ acf.getPostbox = function( $el ){
34
+
35
+ // allow string parameter
36
+ if( typeof arguments[0] == 'string' ) {
37
+ $el = $('#' + arguments[0]);
38
+ }
39
+
40
+ // return instance
41
+ return acf.getInstance( $el );
42
+ };
43
+
44
+ /**
45
+ * acf.getPostboxes
46
+ *
47
+ * Returns an array of postbox instances.
48
+ *
49
+ * @date 23/9/18
50
+ * @since 5.7.7
51
+ *
52
+ * @param void
53
+ * @return array
54
+ */
55
+ acf.getPostboxes = function(){
56
+ return acf.getInstances( $('.acf-postbox') );
57
+ };
58
+
59
+ /**
60
+ * acf.newPostbox
61
+ *
62
+ * Returns a new postbox instance for the given props.
63
+ *
64
+ * @date 20/9/18
65
+ * @since 5.7.6
66
+ *
67
+ * @param object props The postbox properties.
68
+ * @return object
69
+ */
70
+ acf.newPostbox = function( props ){
71
+ return new acf.models.Postbox( props );
72
+ };
73
+
74
+ /**
75
+ * acf.models.Postbox
76
+ *
77
+ * The postbox model.
78
+ *
79
+ * @date 20/9/18
80
+ * @since 5.7.6
81
+ *
82
+ * @param void
83
+ * @return void
84
+ */
85
+ acf.models.Postbox = acf.Model.extend({
86
+
87
+ data: {
88
+ id: '',
89
+ key: '',
90
+ style: 'default',
91
+ label: 'top',
92
+ edit: ''
93
+ },
94
+
95
+ setup: function( props ){
96
+
97
+ // compatibilty
98
+ if( props.editLink ) {
99
+ props.edit = props.editLink;
100
+ }
101
+
102
+ // extend data
103
+ $.extend(this.data, props);
104
+
105
+ // set $el
106
+ this.$el = this.$postbox();
107
+ },
108
+
109
+ $postbox: function(){
110
+ return $('#' + this.get('id'));
111
+ },
112
+
113
+ $hide: function(){
114
+ return $('#' + this.get('id') + '-hide');
115
+ },
116
+
117
+ $hideLabel: function(){
118
+ return this.$hide().parent();
119
+ },
120
+
121
+ $hndle: function(){
122
+ return this.$('> .hndle');
123
+ },
124
+
125
+ $inside: function(){
126
+ return this.$('> .inside');
127
+ },
128
+
129
+ isVisible: function(){
130
+ return this.$el.hasClass('acf-hidden');
131
+ },
132
+
133
+ initialize: function(){
134
+
135
+ // Add default class.
136
+ this.$el.addClass('acf-postbox');
137
+
138
+ // Remove 'hide-if-js class.
139
+ // This class is added by WP to postboxes that are hidden via the "Screen Options" tab.
140
+ this.$el.removeClass('hide-if-js');
141
+
142
+ // Add field group style class (ignore in block editor).
143
+ if( acf.get('editor') !== 'block' ) {
144
+ var style = this.get('style');
145
+ if( style !== 'default' ) {
146
+ this.$el.addClass( style );
147
+ }
148
+ }
149
+
150
+ // Add .inside class.
151
+ this.$inside().addClass('acf-fields').addClass('-' + this.get('label'));
152
+
153
+ // Append edit link.
154
+ var edit = this.get('edit');
155
+ if( edit ) {
156
+ this.$hndle().append('<a href="' + edit + '" class="dashicons dashicons-admin-generic acf-hndle-cog acf-js-tooltip" title="' + acf.__('Edit field group') + '"></a>');
157
+ }
158
+
159
+ // Show postbox.
160
+ this.show();
161
+ },
162
+
163
+ show: function(){
164
+
165
+ // Show label.
166
+ this.$hideLabel().show();
167
+
168
+ // toggle on checkbox
169
+ this.$hide().prop('checked', true);
170
+
171
+ // Show postbox
172
+ this.$el.show().removeClass('acf-hidden');
173
+ },
174
+
175
+ enable: function(){
176
+ acf.enable( this.$el, 'postbox' );
177
+ },
178
+
179
+ showEnable: function(){
180
+ this.show();
181
+ this.enable();
182
+ },
183
+
184
+ hide: function(){
185
+
186
+ // Hide label.
187
+ this.$hideLabel().hide();
188
+
189
+ // Hide postbox
190
+ this.$el.hide().addClass('acf-hidden');
191
+ },
192
+
193
+ disable: function(){
194
+ acf.disable( this.$el, 'postbox' );
195
+ },
196
+
197
+ hideDisable: function(){
198
+ this.hide();
199
+ this.disable();
200
+ },
201
+
202
+ html: function( html ){
203
+
204
+ // Update HTML.
205
+ this.$inside().html( html );
206
+
207
+ // Do action.
208
+ acf.doAction('append', this.$el);
209
+ }
210
+ });
211
+
212
+ })(jQuery);
assets/build/js/_acf-screen.js ADDED
@@ -0,0 +1,593 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ acf.screen = new acf.Model({
4
+
5
+ active: true,
6
+
7
+ xhr: false,
8
+
9
+ timeout: false,
10
+
11
+ wait: 'load',
12
+
13
+ events: {
14
+ 'change #page_template': 'onChange',
15
+ 'change #parent_id': 'onChange',
16
+ 'change #post-formats-select': 'onChange',
17
+ 'change .categorychecklist': 'onChange',
18
+ 'change .tagsdiv': 'onChange',
19
+ 'change .acf-taxonomy-field[data-save="1"]': 'onChange',
20
+ 'change #product-type': 'onChange'
21
+ },
22
+
23
+ isPost: function(){
24
+ return acf.get('screen') === 'post';
25
+ },
26
+
27
+ isUser: function(){
28
+ return acf.get('screen') === 'user';
29
+ },
30
+
31
+ isTaxonomy: function(){
32
+ return acf.get('screen') === 'taxonomy';
33
+ },
34
+
35
+ isAttachment: function(){
36
+ return acf.get('screen') === 'attachment';
37
+ },
38
+
39
+ isNavMenu: function(){
40
+ return acf.get('screen') === 'nav_menu';
41
+ },
42
+
43
+ isWidget: function(){
44
+ return acf.get('screen') === 'widget';
45
+ },
46
+
47
+ isComment: function(){
48
+ return acf.get('screen') === 'comment';
49
+ },
50
+
51
+ getPageTemplate: function(){
52
+ var $el = $('#page_template');
53
+ return $el.length ? $el.val() : null;
54
+ },
55
+
56
+ getPageParent: function( e, $el ){
57
+ var $el = $('#parent_id');
58
+ return $el.length ? $el.val() : null;
59
+ },
60
+
61
+ getPageType: function( e, $el ){
62
+ return this.getPageParent() ? 'child' : 'parent';
63
+ },
64
+
65
+ getPostType: function(){
66
+ return $('#post_type').val();
67
+ },
68
+
69
+ getPostFormat: function( e, $el ){
70
+ var $el = $('#post-formats-select input:checked');
71
+ if( $el.length ) {
72
+ var val = $el.val();
73
+ return (val == '0') ? 'standard' : val;
74
+ }
75
+ return null;
76
+ },
77
+
78
+ getPostCoreTerms: function(){
79
+
80
+ // vars
81
+ var terms = {};
82
+
83
+ // serialize WP taxonomy postboxes
84
+ var data = acf.serialize( $('.categorydiv, .tagsdiv') );
85
+
86
+ // use tax_input (tag, custom-taxonomy) when possible.
87
+ // this data is already formatted in taxonomy => [terms].
88
+ if( data.tax_input ) {
89
+ terms = data.tax_input;
90
+ }
91
+
92
+ // append "category" which uses a different name
93
+ if( data.post_category ) {
94
+ terms.category = data.post_category;
95
+ }
96
+
97
+ // convert any string values (tags) into array format
98
+ for( var tax in terms ) {
99
+ if( !acf.isArray(terms[tax]) ) {
100
+ terms[tax] = terms[tax].split(/,[\s]?/);
101
+ }
102
+ }
103
+
104
+ // return
105
+ return terms;
106
+ },
107
+
108
+ getPostTerms: function(){
109
+
110
+ // Get core terms.
111
+ var terms = this.getPostCoreTerms();
112
+
113
+ // loop over taxonomy fields and add their values
114
+ acf.getFields({type: 'taxonomy'}).map(function( field ){
115
+
116
+ // ignore fields that don't save
117
+ if( !field.get('save') ) {
118
+ return;
119
+ }
120
+
121
+ // vars
122
+ var val = field.val();
123
+ var tax = field.get('taxonomy');
124
+
125
+ // check val
126
+ if( val ) {
127
+
128
+ // ensure terms exists
129
+ terms[ tax ] = terms[ tax ] || [];
130
+
131
+ // ensure val is an array
132
+ val = acf.isArray(val) ? val : [val];
133
+
134
+ // append
135
+ terms[ tax ] = terms[ tax ].concat( val );
136
+ }
137
+ });
138
+
139
+ // add WC product type
140
+ if( (productType = this.getProductType()) !== null ) {
141
+ terms.product_type = [productType];
142
+ }
143
+
144
+ // remove duplicate values
145
+ for( var tax in terms ) {
146
+ terms[tax] = acf.uniqueArray(terms[tax]);
147
+ }
148
+
149
+ // return
150
+ return terms;
151
+ },
152
+
153
+ getProductType: function(){
154
+ var $el = $('#product-type');
155
+ return $el.length ? $el.val() : null;
156
+ },
157
+
158
+ check: function(){
159
+
160
+ // bail early if not for post
161
+ if( acf.get('screen') !== 'post' ) {
162
+ return;
163
+ }
164
+
165
+ // abort XHR if is already loading AJAX data
166
+ if( this.xhr ) {
167
+ this.xhr.abort();
168
+ }
169
+
170
+ // vars
171
+ var ajaxData = acf.parseArgs(this.data, {
172
+ action: 'acf/ajax/check_screen',
173
+ screen: acf.get('screen'),
174
+ exists: []
175
+ });
176
+
177
+ // post id
178
+ if( this.isPost() ) {
179
+ ajaxData.post_id = acf.get('post_id');
180
+ }
181
+
182
+ // post type
183
+ if( (postType = this.getPostType()) !== null ) {
184
+ ajaxData.post_type = postType;
185
+ }
186
+
187
+ // page template
188
+ if( (pageTemplate = this.getPageTemplate()) !== null ) {
189
+ ajaxData.page_template = pageTemplate;
190
+ }
191
+
192
+ // page parent
193
+ if( (pageParent = this.getPageParent()) !== null ) {
194
+ ajaxData.page_parent = pageParent;
195
+ }
196
+
197
+ // page type
198
+ if( (pageType = this.getPageType()) !== null ) {
199
+ ajaxData.page_type = pageType;
200
+ }
201
+
202
+ // post format
203
+ if( (postFormat = this.getPostFormat()) !== null ) {
204
+ ajaxData.post_format = postFormat;
205
+ }
206
+
207
+ // post terms
208
+ if( (postTerms = this.getPostTerms()) !== null ) {
209
+ ajaxData.post_terms = postTerms;
210
+ }
211
+
212
+ // add array of existing postboxes to increase performance and reduce JSON HTML
213
+ acf.getPostboxes().map(function( postbox ){
214
+ ajaxData.exists.push( postbox.get('key') );
215
+ });
216
+
217
+ // filter
218
+ ajaxData = acf.applyFilters('check_screen_args', ajaxData);
219
+
220
+ // success
221
+ var onSuccess = function( json ){
222
+
223
+ // Check success.
224
+ if( acf.isAjaxSuccess(json) ) {
225
+
226
+ // Render post screen.
227
+ if( acf.get('screen') == 'post' ) {
228
+ this.renderPostScreen( json.data );
229
+
230
+ // Render user screen.
231
+ } else if( acf.get('screen') == 'user' ) {
232
+ this.renderUserScreen( json.data );
233
+ }
234
+ }
235
+
236
+ // action
237
+ acf.doAction('check_screen_complete', json.data, ajaxData);
238
+ };
239
+
240
+ // ajax
241
+ this.xhr = $.ajax({
242
+ url: acf.get('ajaxurl'),
243
+ data: acf.prepareForAjax( ajaxData ),
244
+ type: 'post',
245
+ dataType: 'json',
246
+ context: this,
247
+ success: onSuccess
248
+ });
249
+ },
250
+
251
+ onChange: function( e, $el ){
252
+ this.setTimeout(this.check, 1);
253
+ },
254
+
255
+ renderPostScreen: function( data ){
256
+
257
+ // vars
258
+ var visible = [];
259
+
260
+ // Helper function to copy events
261
+ var copyEvents = function( $from, $to ){
262
+ var events = $._data($from[0]).events;
263
+ for( var type in events ) {
264
+ for( var i = 0; i < events[type].length; i++ ) {
265
+ $to.on( type, events[type][i].handler );
266
+ }
267
+ }
268
+ }
269
+
270
+ // Helper function to sort metabox.
271
+ var sortMetabox = function( id, ids ){
272
+
273
+ // Find position of id within ids.
274
+ var index = ids.indexOf( id );
275
+
276
+ // Bail early if index not found.
277
+ if( index == -1 ) {
278
+ return false;
279
+ }
280
+
281
+ // Loop over metaboxes behind (in reverse order).
282
+ for( var i = index-1; i >= 0; i-- ) {
283
+ if( $('#'+ids[i]).length ) {
284
+ return $('#'+ids[i]).after( $('#'+id) );
285
+ }
286
+ }
287
+
288
+ // Loop over metaboxes infront.
289
+ for( var i = index+1; i < ids.length; i++ ) {
290
+ if( $('#'+ids[i]).length ) {
291
+ return $('#'+ids[i]).before( $('#'+id) );
292
+ }
293
+ }
294
+
295
+ // Return false if not sorted.
296
+ return false;
297
+ };
298
+
299
+ // Show these postboxes.
300
+ data.results.map(function( result, i ){
301
+
302
+ // vars
303
+ var postbox = acf.getPostbox( result.id );
304
+
305
+ // Create postbox if doesn't exist.
306
+ if( !postbox ) {
307
+
308
+ // Create it.
309
+ var $postbox = $([
310
+ '<div id="' + result.id + '" class="postbox">',
311
+ '<button type="button" class="handlediv" aria-expanded="false">',
312
+ '<span class="screen-reader-text">Toggle panel: ' + result.title + '</span>',
313
+ '<span class="toggle-indicator" aria-hidden="true"></span>',
314
+ '</button>',
315
+ '<h2 class="hndle ui-sortable-handle">',
316
+ '<span>' + result.title + '</span>',
317
+ '</h2>',
318
+ '<div class="inside">',
319
+ result.html,
320
+ '</div>',
321
+ '</div>'
322
+ ].join(''));
323
+
324
+ // Create new hide toggle.
325
+ if( $('#adv-settings').length ) {
326
+ var $prefs = $('#adv-settings .metabox-prefs');
327
+ var $label = $([
328
+ '<label for="' + result.id + '-hide">',
329
+ '<input class="hide-postbox-tog" name="' + result.id + '-hide" type="checkbox" id="' + result.id + '-hide" value="' + result.id + '" checked="checked">',
330
+ ' ' + result.title,
331
+ '</label>'
332
+ ].join(''));
333
+
334
+ // Copy default WP events onto checkbox.
335
+ copyEvents( $prefs.find('input').first(), $label.find('input') );
336
+
337
+ // Append hide label
338
+ $prefs.append( $label );
339
+ }
340
+
341
+ // Append metabox to the bottom of "side-sortables".
342
+ if( result.position === 'side' ) {
343
+ $('#' + result.position + '-sortables').append( $postbox );
344
+
345
+ // Prepend metabox to the top of "normal-sortbables".
346
+ } else {
347
+ $('#' + result.position + '-sortables').prepend( $postbox );
348
+ }
349
+
350
+ // Position metabox amongst existing ACF metaboxes within the same location.
351
+ var order = [];
352
+ data.results.map(function( _result ){
353
+ if( result.position === _result.position && $('#' + result.position + '-sortables #' + _result.id).length ) {
354
+ order.push( _result.id );
355
+ }
356
+ });
357
+ sortMetabox(result.id, order)
358
+
359
+ // Check 'sorted' for user preference.
360
+ if( data.sorted ) {
361
+
362
+ // Loop over each position (acf_after_title, side, normal).
363
+ for( var position in data.sorted ) {
364
+
365
+ // Explode string into array of ids.
366
+ var order = data.sorted[position].split(',');
367
+
368
+ // Position metabox relative to order.
369
+ if( sortMetabox(result.id, order) ) {
370
+ break;
371
+ }
372
+ }
373
+ }
374
+
375
+ // Copy default WP events onto metabox.
376
+ var $submitdiv = $('#submitdiv');
377
+ if( $('#submitdiv').length ) {
378
+ copyEvents( $submitdiv.children('.handlediv'), $postbox.children('.handlediv') );
379
+ copyEvents( $submitdiv.children('.hndle'), $postbox.children('.hndle') );
380
+ }
381
+
382
+ // Initalize it (modifies HTML).
383
+ postbox = acf.newPostbox( result );
384
+
385
+ // Trigger action.
386
+ acf.doAction('append', $postbox);
387
+ acf.doAction('append_postbox', postbox);
388
+ }
389
+
390
+ // show postbox
391
+ postbox.showEnable();
392
+
393
+ // Do action.
394
+ acf.doAction('show_postbox', postbox);
395
+
396
+ // append
397
+ visible.push( result.id );
398
+ });
399
+
400
+ // Hide these postboxes.
401
+ acf.getPostboxes().map(function( postbox ){
402
+ if( visible.indexOf( postbox.get('id') ) === -1 ) {
403
+ postbox.hideDisable();
404
+
405
+ // Do action.
406
+ acf.doAction('hide_postbox', postbox);
407
+ }
408
+ });
409
+
410
+ // Update style.
411
+ $('#acf-style').html( data.style );
412
+ },
413
+
414
+ renderUserScreen: function( json ){
415
+
416
+ }
417
+ });
418
+
419
+ /**
420
+ * gutenScreen
421
+ *
422
+ * Adds compatibility with the Gutenberg edit screen.
423
+ *
424
+ * @date 11/12/18
425
+ * @since 5.8.0
426
+ *
427
+ * @param void
428
+ * @return void
429
+ */
430
+ var gutenScreen = new acf.Model({
431
+
432
+ // Wait until load to avoid 'core' issues when loading taxonomies.
433
+ wait: 'load',
434
+
435
+ initialize: function(){
436
+
437
+ // Bail early if not Gutenberg.
438
+ if( !acf.isGutenberg() ) {
439
+ return;
440
+ }
441
+
442
+ // Listen for changes.
443
+ wp.data.subscribe(this.proxy(this.onChange));
444
+
445
+ // Customize "acf.screen.get" functions.
446
+ acf.screen.getPageTemplate = this.getPageTemplate;
447
+ acf.screen.getPageParent = this.getPageParent;
448
+ acf.screen.getPostType = this.getPostType;
449
+ acf.screen.getPostFormat = this.getPostFormat;
450
+ acf.screen.getPostCoreTerms = this.getPostCoreTerms;
451
+
452
+ // Disable unload
453
+ acf.unload.disable();
454
+
455
+ // Add actions.
456
+ //this.addAction( 'append_postbox', acf.screen.refreshAvailableMetaBoxesPerLocation );
457
+ },
458
+
459
+ onChange: function(){
460
+
461
+ // Get edits.
462
+ var edits = wp.data.select( 'core/editor' ).getPostEdits();
463
+
464
+ // Check specific attributes.
465
+ var attributes = [
466
+ 'template',
467
+ 'parent',
468
+ 'format'
469
+ ];
470
+
471
+ // Append taxonomy attributes.
472
+ var taxonomies = wp.data.select( 'core' ).getTaxonomies() || [];
473
+ taxonomies.map(function( taxonomy ){
474
+ attributes.push( taxonomy.rest_base );
475
+ });
476
+
477
+ // Filter out attributes that have not changed.
478
+ attributes = attributes.filter(this.proxy(function( attr ){
479
+ return ( edits[attr] !== undefined && edits[attr] !== this.get(attr) );
480
+ }));
481
+
482
+ // Trigger change if has attributes.
483
+ if( attributes.length ) {
484
+ this.triggerChange( edits )
485
+ }
486
+ },
487
+
488
+ triggerChange: function( edits ){
489
+
490
+ // Update this.data if edits are provided.
491
+ if( edits !== undefined ) {
492
+ this.data = edits;
493
+ }
494
+
495
+ // Check screen.
496
+ acf.screen.check();
497
+ },
498
+
499
+ getPageTemplate: function(){
500
+ return wp.data.select( 'core/editor' ).getEditedPostAttribute( 'template' );
501
+ },
502
+
503
+ getPageParent: function( e, $el ){
504
+ return wp.data.select( 'core/editor' ).getEditedPostAttribute( 'parent' );
505
+ },
506
+
507
+ getPostType: function(){
508
+ return wp.data.select( 'core/editor' ).getEditedPostAttribute( 'type' );
509
+ },
510
+
511
+ getPostFormat: function( e, $el ){
512
+ return wp.data.select( 'core/editor' ).getEditedPostAttribute( 'format' );
513
+ },
514
+
515
+ getPostCoreTerms: function(){
516
+
517
+ // vars
518
+ var terms = {};
519
+
520
+ // Loop over taxonomies.
521
+ var taxonomies = wp.data.select( 'core' ).getTaxonomies() || [];
522
+ taxonomies.map(function( taxonomy ){
523
+
524
+ // Append selected taxonomies to terms object.
525
+ var postTerms = wp.data.select( 'core/editor' ).getEditedPostAttribute( taxonomy.rest_base );
526
+ if( postTerms ) {
527
+ terms[ taxonomy.slug ] = postTerms;
528
+ }
529
+ });
530
+
531
+ // return
532
+ return terms;
533
+ }
534
+ });
535
+
536
+ /**
537
+ * acf.screen.refreshAvailableMetaBoxesPerLocation
538
+ *
539
+ * Refreshes the WP data state based on metaboxes found in the DOM.
540
+ *
541
+ * Caution. Not safe to use.
542
+ * Causes duplicate dispatch listeners when saving post resulting in duplicate postmeta.
543
+ *
544
+ * @date 6/3/19
545
+ * @since 5.7.13
546
+ *
547
+ * @param void
548
+ * @return void
549
+ */
550
+ acf.screen.refreshAvailableMetaBoxesPerLocation = function() {
551
+
552
+ // Extract vars.
553
+ var select = wp.data.select( 'core/edit-post' );
554
+ var dispatch = wp.data.dispatch( 'core/edit-post' );
555
+
556
+ // Load current metabox locations and data.
557
+ var data = {};
558
+ select.getActiveMetaBoxLocations().map(function( location ){
559
+ data[ location ] = select.getMetaBoxesPerLocation( location );
560
+ });
561
+
562
+ // Generate flat array of existing ids.
563
+ var ids = [];
564
+ for( var k in data ) {
565
+ ids = ids.concat( data[k].map(function(m){ return m.id; }) );
566
+ }
567
+
568
+ // Append ACF metaboxes.
569
+ acf.getPostboxes().map(function( postbox ){
570
+
571
+ // Ignore if already exists in data.
572
+ if( ids.indexOf( postbox.get('id') ) !== -1 ) {
573
+ return;
574
+ }
575
+
576
+ // Get metabox location looking at parent form.
577
+ var location = postbox.$el.closest('form').attr('class').replace('metabox-location-', '');
578
+
579
+ // Ensure location exists.
580
+ data[ location ] = data[ location ] || [];
581
+
582
+ // Append.
583
+ data[ location ].push({
584
+ id: postbox.get('id'),
585
+ title: postbox.get('title')
586
+ });
587
+ });
588
+
589
+ // Update state.
590
+ dispatch.setAvailableMetaBoxesPerLocation(data);
591
+ };
592
+
593
+ })(jQuery);
assets/build/js/_acf-select2.js ADDED
@@ -0,0 +1,793 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * acf.newSelect2
5
+ *
6
+ * description
7
+ *
8
+ * @date 13/1/18
9
+ * @since 5.6.5
10
+ *
11
+ * @param type $var Description. Default.
12
+ * @return type Description.
13
+ */
14
+
15
+ acf.newSelect2 = function( $select, props ){
16
+
17
+ // defaults
18
+ props = acf.parseArgs(props, {
19
+ allowNull: false,
20
+ placeholder: '',
21
+ multiple: false,
22
+ field: false,
23
+ ajax: false,
24
+ ajaxAction: '',
25
+ ajaxData: function( data ){ return data; },
26
+ ajaxResults: function( json ){ return json; },
27
+ });
28
+
29
+ // initialize
30
+ if( getVersion() == 4 ) {
31
+ var select2 = new Select2_4( $select, props );
32
+ } else {
33
+ var select2 = new Select2_3( $select, props );
34
+ }
35
+
36
+ // actions
37
+ acf.doAction('new_select2', select2);
38
+
39
+ // return
40
+ return select2;
41
+ };
42
+
43
+ /**
44
+ * getVersion
45
+ *
46
+ * description
47
+ *
48
+ * @date 13/1/18
49
+ * @since 5.6.5
50
+ *
51
+ * @param type $var Description. Default.
52
+ * @return type Description.
53
+ */
54
+
55
+ function getVersion() {
56
+
57
+ // v4
58
+ if( acf.isset(window, 'jQuery', 'fn', 'select2', 'amd') ) {
59
+ return 4;
60
+ }
61
+
62
+ // v3
63
+ if( acf.isset(window, 'Select2') ) {
64
+ return 3;
65
+ }
66
+
67
+ // return
68
+ return false;
69
+ }
70
+
71
+ /**
72
+ * Select2
73
+ *
74
+ * description
75
+ *
76
+ * @date 13/1/18
77
+ * @since 5.6.5
78
+ *
79
+ * @param type $var Description. Default.
80
+ * @return type Description.
81
+ */
82
+
83
+ var Select2 = acf.Model.extend({
84
+
85
+ setup: function( $select, props ){
86
+ $.extend(this.data, props);
87
+ this.$el = $select;
88
+ },
89
+
90
+ initialize: function(){
91
+
92
+ },
93
+
94
+ selectOption: function( value ){
95
+ var $option = this.getOption( value );
96
+ if( !$option.prop('selected') ) {
97
+ $option.prop('selected', true).trigger('change');
98
+ }
99
+ },
100
+
101
+ unselectOption: function( value ){
102
+ var $option = this.getOption( value );
103
+ if( $option.prop('selected') ) {
104
+ $option.prop('selected', false).trigger('change');
105
+ }
106
+ },
107
+
108
+ getOption: function( value ){
109
+ return this.$('option[value="' + value + '"]');
110
+ },
111
+
112
+ addOption: function( option ){
113
+
114
+ // defaults
115
+ option = acf.parseArgs(option, {
116
+ id: '',
117
+ text: '',
118
+ selected: false
119
+ });
120
+
121
+ // vars
122
+ var $option = this.getOption( option.id );
123
+
124
+ // append
125
+ if( !$option.length ) {
126
+ $option = $('<option></option>');
127
+ $option.html( option.text );
128
+ $option.attr('value', option.id);
129
+ $option.prop('selected', option.selected);
130
+ this.$el.append($option);
131
+ }
132
+
133
+ // chain
134
+ return $option;
135
+ },
136
+
137
+ getValue: function(){
138
+
139
+ // vars
140
+ var val = [];
141
+ var $options = this.$el.find('option:selected');
142
+
143
+ // bail early if no selected
144
+ if( !$options.exists() ) {
145
+ return val;
146
+ }
147
+
148
+ // sort by attribute
149
+ $options = $options.sort(function(a, b) {
150
+ return +a.getAttribute('data-i') - +b.getAttribute('data-i');
151
+ });
152
+
153
+ // loop
154
+ $options.each(function(){
155
+ var $el = $(this);
156
+ val.push({
157
+ $el: $el,
158
+ id: $el.attr('value'),
159
+ text: $el.text(),
160
+ });
161
+ });
162
+
163
+ // return
164
+ return val;
165
+
166
+ },
167
+
168
+ mergeOptions: function(){
169
+
170
+ },
171
+
172
+ getChoices: function(){
173
+
174
+ // callback
175
+ var crawl = function( $parent ){
176
+
177
+ // vars
178
+ var choices = [];
179
+
180
+ // loop
181
+ $parent.children().each(function(){
182
+
183
+ // vars
184
+ var $child = $(this);
185
+
186
+ // optgroup
187
+ if( $child.is('optgroup') ) {
188
+
189
+ choices.push({
190
+ text: $child.attr('label'),
191
+ children: crawl( $child )
192
+ });
193
+
194
+ // option
195
+ } else {
196
+
197
+ choices.push({
198
+ id: $child.attr('value'),
199
+ text: $child.text()
200
+ });
201
+ }
202
+ });
203
+
204
+ // return
205
+ return choices;
206
+ };
207
+
208
+ // crawl
209
+ return crawl( this.$el );
210
+ },
211
+
212
+ decodeChoices: function( choices ){
213
+
214
+ // callback
215
+ var crawl = function( items ){
216
+ items.map(function( item ){
217
+ item.text = acf.decode( item.text );
218
+ if( item.children ) {
219
+ item.children = crawl( item.children );
220
+ }
221
+ return item;
222
+ });
223
+ return items;
224
+ };
225
+
226
+ // crawl
227
+ return crawl( choices );
228
+ },
229
+
230
+ getAjaxData: function( params ){
231
+
232
+ // vars
233
+ var ajaxData = {
234
+ action: this.get('ajaxAction'),
235
+ s: params.term || '',
236
+ paged: params.page || 1
237
+ };
238
+
239
+ // field helper
240
+ var field = this.get('field');
241
+ if( field ) {
242
+ ajaxData.field_key = field.get('key');
243
+ }
244
+
245
+ // callback
246
+ var callback = this.get('ajaxData');
247
+ if( callback ) {
248
+ ajaxData = callback.apply( this, [ajaxData, params] );
249
+ }
250
+
251
+ // filter
252
+ ajaxData = acf.applyFilters( 'select2_ajax_data', ajaxData, this.data, this.$el, (field || false), this );
253
+
254
+ // return
255
+ return acf.prepareForAjax(ajaxData);
256
+ },
257
+
258
+ getAjaxResults: function( json, params ){
259
+
260
+ // defaults
261
+ json = acf.parseArgs(json, {
262
+ results: false,
263
+ more: false,
264
+ });
265
+
266
+ // decode
267
+ if( json.results ) {
268
+ json.results = this.decodeChoices(json.results);
269
+ }
270
+
271
+ // callback
272
+ var callback = this.get('ajaxResults');
273
+ if( callback ) {
274
+ json = callback.apply( this, [json, params] );
275
+ }
276
+
277
+ // filter
278
+ json = acf.applyFilters( 'select2_ajax_results', json, params, this );
279
+
280
+ // return
281
+ return json;
282
+ },
283
+
284
+ processAjaxResults: function( json, params ){
285
+
286
+ // vars
287
+ var json = this.getAjaxResults( json, params );
288
+
289
+ // change more to pagination
290
+ if( json.more ) {
291
+ json.pagination = { more: true };
292
+ }
293
+
294
+ // merge together groups
295
+ setTimeout($.proxy(this.mergeOptions, this), 1);
296
+
297
+ // return
298
+ return json;
299
+ },
300
+
301
+ destroy: function(){
302
+
303
+ // destroy via api
304
+ if( this.$el.data('select2') ) {
305
+ this.$el.select2('destroy');
306
+ }
307
+
308
+ // destory via HTML (duplicating HTML does not contain data)
309
+ this.$el.siblings('.select2-container').remove();
310
+ }
311
+
312
+ });
313
+
314
+
315
+ /**
316
+ * Select2_4
317
+ *
318
+ * description
319
+ *
320
+ * @date 13/1/18
321
+ * @since 5.6.5
322
+ *
323
+ * @param type $var Description. Default.
324
+ * @return type Description.
325
+ */
326
+
327
+ var Select2_4 = Select2.extend({
328
+
329
+ initialize: function(){
330
+
331
+ // vars
332
+ var $select = this.$el;
333
+ var options = {
334
+ width: '100%',
335
+ allowClear: this.get('allowNull'),
336
+ placeholder: this.get('placeholder'),
337
+ multiple: this.get('multiple'),
338
+ data: [],
339
+ escapeMarkup: function( m ){ return m; }
340
+ };
341
+
342
+ // multiple
343
+ if( options.multiple ) {
344
+
345
+ // reorder options
346
+ this.getValue().map(function( item ){
347
+ item.$el.detach().appendTo( $select );
348
+ });
349
+ }
350
+
351
+ // remove conflicting atts
352
+ $select.removeData('ajax');
353
+ $select.removeAttr('data-ajax');
354
+
355
+ // ajax
356
+ if( this.get('ajax') ) {
357
+
358
+ options.ajax = {
359
+ url: acf.get('ajaxurl'),
360
+ delay: 250,
361
+ dataType: 'json',
362
+ type: 'post',
363
+ cache: false,
364
+ data: $.proxy(this.getAjaxData, this),
365
+ processResults: $.proxy(this.processAjaxResults, this),
366
+ };
367
+ }
368
+
369
+ // filter for 3rd party customization
370
+ //options = acf.applyFilters( 'select2_args', options, $select, this );
371
+ var field = this.get('field');
372
+ options = acf.applyFilters( 'select2_args', options, $select, this.data, (field || false), this );
373
+
374
+ // add select2
375
+ $select.select2( options );
376
+
377
+ // get container (Select2 v4 does not return this from constructor)
378
+ var $container = $select.next('.select2-container');
379
+
380
+ // multiple
381
+ if( options.multiple ) {
382
+
383
+ // vars
384
+ var $ul = $container.find('ul');
385
+
386
+ // sortable
387
+ $ul.sortable({
388
+ stop: function( e ) {
389
+
390
+ // loop
391
+ $ul.find('.select2-selection__choice').each(function() {
392
+
393
+ // vars
394
+ var $option = $( $(this).data('data').element );
395
+
396
+ // detach and re-append to end
397
+ $option.detach().appendTo( $select );
398
+ });
399
+
400
+ // trigger change on input (JS error if trigger on select)
401
+ $select.trigger('change');
402
+ }
403
+ });
404
+
405
+ // on select, move to end
406
+ $select.on('select2:select', this.proxy(function( e ){
407
+ this.getOption( e.params.data.id ).detach().appendTo( this.$el );
408
+ }));
409
+ }
410
+
411
+ // add class
412
+ $container.addClass('-acf');
413
+
414
+ // action for 3rd party customization
415
+ acf.doAction('select2_init', $select, options, this.data, (field || false), this);
416
+ },
417
+
418
+ mergeOptions: function(){
419
+
420
+ // vars
421
+ var $prevOptions = false;
422
+ var $prevGroup = false;
423
+
424
+ // loop
425
+ $('.select2-results__option[role="group"]').each(function(){
426
+
427
+ // vars
428
+ var $options = $(this).children('ul');
429
+ var $group = $(this).children('strong');
430
+
431
+ // compare to previous
432
+ if( $prevGroup && $prevGroup.text() === $group.text() ) {
433
+ $prevOptions.append( $options.children() );
434
+ $(this).remove();
435
+ return;
436
+ }
437
+
438
+ // update vars
439
+ $prevOptions = $options;
440
+ $prevGroup = $group;
441
+
442
+ });
443
+ },
444
+
445
+ });
446
+
447
+ /**
448
+ * Select2_3
449
+ *
450
+ * description
451
+ *
452
+ * @date 13/1/18
453
+ * @since 5.6.5
454
+ *
455
+ * @param type $var Description. Default.
456
+ * @return type Description.
457
+ */
458
+
459
+ var Select2_3 = Select2.extend({
460
+
461
+ initialize: function(){
462
+
463
+ // vars
464
+ var $select = this.$el;
465
+ var value = this.getValue();
466
+ var multiple = this.get('multiple');
467
+ var options = {
468
+ width: '100%',
469
+ allowClear: this.get('allowNull'),
470
+ placeholder: this.get('placeholder'),
471
+ separator: '||',
472
+ multiple: this.get('multiple'),
473
+ data: this.getChoices(),
474
+ escapeMarkup: function( m ){ return m; },
475
+ dropdownCss: {
476
+ 'z-index': '999999999'
477
+ },
478
+ initSelection: function( element, callback ) {
479
+ if( multiple ) {
480
+ callback( value );
481
+ } else {
482
+ callback( value.shift() );
483
+ }
484
+ }
485
+ };
486
+
487
+ // get hidden input
488
+ var $input = $select.siblings('input');
489
+ if( !$input.length ) {
490
+ $input = $('<input type="hidden" />');
491
+ $select.before( $input );
492
+ }
493
+
494
+ // set input value
495
+ inputValue = value.map(function(item){ return item.id }).join('||');
496
+ $input.val( inputValue );
497
+
498
+ // multiple
499
+ if( options.multiple ) {
500
+
501
+ // reorder options
502
+ value.map(function( item ){
503
+ item.$el.detach().appendTo( $select );
504
+ });
505
+ }
506
+
507
+ // remove blank option as we have a clear all button
508
+ if( options.allowClear ) {
509
+ options.data = options.data.filter(function(item){
510
+ return item.id !== '';
511
+ });
512
+ }
513
+
514
+ // remove conflicting atts
515
+ $select.removeData('ajax');
516
+ $select.removeAttr('data-ajax');
517
+
518
+ // ajax
519
+ if( this.get('ajax') ) {
520
+
521
+ options.ajax = {
522
+ url: acf.get('ajaxurl'),
523
+ quietMillis: 250,
524
+ dataType: 'json',
525
+ type: 'post',
526
+ cache: false,
527
+ data: $.proxy(this.getAjaxData, this),
528
+ results: $.proxy(this.processAjaxResults, this),
529
+ };
530
+ }
531
+
532
+ // filter for 3rd party customization
533
+ var field = this.get('field');
534
+ options = acf.applyFilters( 'select2_args', options, $select, this.data, (field || false), this );
535
+
536
+ // add select2
537
+ $input.select2( options );
538
+
539
+ // get container
540
+ var $container = $input.select2('container');
541
+
542
+ // helper to find this select's option
543
+ var getOption = $.proxy(this.getOption, this);
544
+
545
+ // multiple
546
+ if( options.multiple ) {
547
+
548
+ // vars
549
+ var $ul = $container.find('ul');
550
+
551
+ // sortable
552
+ $ul.sortable({
553
+ stop: function() {
554
+
555
+ // loop
556
+ $ul.find('.select2-search-choice').each(function() {
557
+
558
+ // vars
559
+ var data = $(this).data('select2Data');
560
+ var $option = getOption( data.id );
561
+
562
+ // detach and re-append to end
563
+ $option.detach().appendTo( $select );
564
+ });
565
+
566
+ // trigger change on input (JS error if trigger on select)
567
+ $select.trigger('change');
568
+ }
569
+ });
570
+ }
571
+
572
+ // on select, create option and move to end
573
+ $input.on('select2-selecting', function( e ){
574
+
575
+ // vars
576
+ var item = e.choice;
577
+ var $option = getOption( item.id );
578
+
579
+ // create if doesn't exist
580
+ if( !$option.length ) {
581
+ $option = $('<option value="' + item.id + '">' + item.text + '</option>');
582
+ }
583
+
584
+ // detach and re-append to end
585
+ $option.detach().appendTo( $select );
586
+ });
587
+
588
+ // add class
589
+ $container.addClass('-acf');
590
+
591
+ // action for 3rd party customization
592
+ acf.doAction('select2_init', $select, options, this.data, (field || false), this);
593
+
594
+ // change
595
+ $input.on('change', function(){
596
+ var val = $input.val();
597
+ if( val.indexOf('||') ) {
598
+ val = val.split('||');
599
+ }
600
+ $select.val( val ).trigger('change');
601
+ });
602
+
603
+ // hide select
604
+ $select.hide();
605
+ },
606
+
607
+ mergeOptions: function(){
608
+
609
+ // vars
610
+ var $prevOptions = false;
611
+ var $prevGroup = false;
612
+
613
+ // loop
614
+ $('#select2-drop .select2-result-with-children').each(function(){
615
+
616
+ // vars
617
+ var $options = $(this).children('ul');
618
+ var $group = $(this).children('.select2-result-label');
619
+
620
+ // compare to previous
621
+ if( $prevGroup && $prevGroup.text() === $group.text() ) {
622
+ $prevGroup.append( $options.children() );
623
+ $(this).remove();
624
+ return;
625
+ }
626
+
627
+ // update vars
628
+ $prevOptions = $options;
629
+ $prevGroup = $group;
630
+
631
+ });
632
+
633
+ },
634
+
635
+ getAjaxData: function( term, page ){
636
+
637
+ // create Select2 v4 params
638
+ var params = {
639
+ term: term,
640
+ page: page
641
+ }
642
+
643
+ // return
644
+ return Select2.prototype.getAjaxData.apply(this, [params]);
645
+ },
646
+
647
+ });
648
+
649
+
650
+ // manager
651
+ var select2Manager = new acf.Model({
652
+ priority: 5,
653
+ wait: 'prepare',
654
+ initialize: function(){
655
+
656
+ // vars
657
+ var locale = acf.get('locale');
658
+ var rtl = acf.get('rtl');
659
+ var l10n = acf.get('select2L10n');
660
+ var version = getVersion();
661
+
662
+ // bail ealry if no l10n
663
+ if( !l10n ) {
664
+ return false;
665
+ }
666
+
667
+ // bail early if 'en'
668
+ if( locale.indexOf('en') === 0 ) {
669
+ return false;
670
+ }
671
+
672
+ // initialize
673
+ if( version == 4 ) {
674
+ this.addTranslations4();
675
+ } else if( version == 3 ) {
676
+ this.addTranslations3();
677
+ }
678
+ },
679
+
680
+ addTranslations4: function(){
681
+
682
+ // vars
683
+ var l10n = acf.get('select2L10n');
684
+ var locale = acf.get('locale');
685
+
686
+ // modify local to match html[lang] attribute (used by Select2)
687
+ locale = locale.replace('_', '-');
688
+
689
+ // select2L10n
690
+ var select2L10n = {
691
+ errorLoading: function () {
692
+ return l10n.load_fail;
693
+ },
694
+ inputTooLong: function (args) {
695
+ var overChars = args.input.length - args.maximum;
696
+ if( overChars > 1 ) {
697
+ return l10n.input_too_long_n.replace( '%d', overChars );
698
+ }
699
+ return l10n.input_too_long_1;
700
+ },
701
+ inputTooShort: function( args ){
702
+ var remainingChars = args.minimum - args.input.length;
703
+ if( remainingChars > 1 ) {
704
+ return l10n.input_too_short_n.replace( '%d', remainingChars );
705
+ }
706
+ return l10n.input_too_short_1;
707
+ },
708
+ loadingMore: function () {
709
+ return l10n.load_more;
710
+ },
711
+ maximumSelected: function( args ) {
712
+ var maximum = args.maximum;
713
+ if( maximum > 1 ) {
714
+ return l10n.selection_too_long_n.replace( '%d', maximum );
715
+ }
716
+ return l10n.selection_too_long_1;
717
+ },
718
+ noResults: function () {
719
+ return l10n.matches_0;
720
+ },
721
+ searching: function () {
722
+ return l10n.searching;
723
+ }
724
+ };
725
+
726
+ // append
727
+ jQuery.fn.select2.amd.define('select2/i18n/' + locale, [], function(){
728
+ return select2L10n;
729
+ });
730
+ },
731
+
732
+ addTranslations3: function(){
733
+
734
+ // vars
735
+ var l10n = acf.get('select2L10n');
736
+ var locale = acf.get('locale');
737
+
738
+ // modify local to match html[lang] attribute (used by Select2)
739
+ locale = locale.replace('_', '-');
740
+
741
+ // select2L10n
742
+ var select2L10n = {
743
+ formatMatches: function( matches ) {
744
+ if( matches > 1 ) {
745
+ return l10n.matches_n.replace( '%d', matches );
746
+ }
747
+ return l10n.matches_1;
748
+ },
749
+ formatNoMatches: function() {
750
+ return l10n.matches_0;
751
+ },
752
+ formatAjaxError: function() {
753
+ return l10n.load_fail;
754
+ },
755
+ formatInputTooShort: function( input, min ) {
756
+ var remainingChars = min - input.length;
757
+ if( remainingChars > 1 ) {
758
+ return l10n.input_too_short_n.replace( '%d', remainingChars );
759
+ }
760
+ return l10n.input_too_short_1;
761
+ },
762
+ formatInputTooLong: function( input, max ) {
763
+ var overChars = input.length - max;
764
+ if( overChars > 1 ) {
765
+ return l10n.input_too_long_n.replace( '%d', overChars );
766
+ }
767
+ return l10n.input_too_long_1;
768
+ },
769
+ formatSelectionTooBig: function( maximum ) {
770
+ if( maximum > 1 ) {
771
+ return l10n.selection_too_long_n.replace( '%d', maximum );
772
+ }
773
+ return l10n.selection_too_long_1;
774
+ },
775
+ formatLoadMore: function() {
776
+ return l10n.load_more;
777
+ },
778
+ formatSearching: function() {
779
+ return l10n.searching;
780
+ }
781
+ };
782
+
783
+ // ensure locales exists
784
+ $.fn.select2.locales = $.fn.select2.locales || {};
785
+
786
+ // append
787
+ $.fn.select2.locales[ locale ] = select2L10n;
788
+ $.extend($.fn.select2.defaults, select2L10n);
789
+ }
790
+
791
+ });
792
+
793
+ })(jQuery);
assets/build/js/_acf-tinymce.js ADDED
@@ -0,0 +1,398 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ acf.tinymce = {
4
+
5
+ /*
6
+ * defaults
7
+ *
8
+ * This function will return default mce and qt settings
9
+ *
10
+ * @type function
11
+ * @date 18/8/17
12
+ * @since 5.6.0
13
+ *
14
+ * @param $post_id (int)
15
+ * @return $post_id (int)
16
+ */
17
+
18
+ defaults: function(){
19
+
20
+ // bail early if no tinyMCEPreInit
21
+ if( typeof tinyMCEPreInit === 'undefined' ) return false;
22
+
23
+ // vars
24
+ var defaults = {
25
+ tinymce: tinyMCEPreInit.mceInit.acf_content,
26
+ quicktags: tinyMCEPreInit.qtInit.acf_content
27
+ };
28
+
29
+ // return
30
+ return defaults;
31
+ },
32
+
33
+
34
+ /*
35
+ * initialize
36
+ *
37
+ * This function will initialize the tinymce and quicktags instances
38
+ *
39
+ * @type function
40
+ * @date 18/8/17
41
+ * @since 5.6.0
42
+ *
43
+ * @param $post_id (int)
44
+ * @return $post_id (int)
45
+ */
46
+
47
+ initialize: function( id, args ){
48
+
49
+ // defaults
50
+ args = acf.parseArgs(args, {
51
+ tinymce: true,
52
+ quicktags: true,
53
+ toolbar: 'full',
54
+ mode: 'visual', // visual,text
55
+ field: false
56
+ });
57
+
58
+ // tinymce
59
+ if( args.tinymce ) {
60
+ this.initializeTinymce( id, args );
61
+ }
62
+
63
+ // quicktags
64
+ if( args.quicktags ) {
65
+ this.initializeQuicktags( id, args );
66
+ }
67
+ },
68
+
69
+
70
+ /*
71
+ * initializeTinymce
72
+ *
73
+ * This function will initialize the tinymce instance
74
+ *
75
+ * @type function
76
+ * @date 18/8/17
77
+ * @since 5.6.0
78
+ *
79
+ * @param $post_id (int)
80
+ * @return $post_id (int)
81
+ */
82
+
83
+ initializeTinymce: function( id, args ){
84
+
85
+ // vars
86
+ var $textarea = $('#'+id);
87
+ var defaults = this.defaults();
88
+ var toolbars = acf.get('toolbars');
89
+ var field = args.field || false;
90
+ var $field = field.$el || false;
91
+
92
+ // bail early
93
+ if( typeof tinymce === 'undefined' ) return false;
94
+ if( !defaults ) return false;
95
+
96
+ // check if exists
97
+ if( tinymce.get(id) ) {
98
+ return this.enable( id );
99
+ }
100
+
101
+ // settings
102
+ var init = $.extend( {}, defaults.tinymce, args.tinymce );
103
+ init.id = id;
104
+ init.selector = '#' + id;
105
+
106
+ // toolbar
107
+ var toolbar = args.toolbar;
108
+ if( toolbar && toolbars && toolbars[toolbar] ) {
109
+
110
+ for( var i = 1; i <= 4; i++ ) {
111
+ init[ 'toolbar' + i ] = toolbars[toolbar][i] || '';
112
+ }
113
+ }
114
+
115
+ // event
116
+ init.setup = function( ed ){
117
+
118
+ ed.on('change', function(e) {
119
+ ed.save(); // save to textarea
120
+ $textarea.trigger('change');
121
+ });
122
+
123
+ // Fix bug where Gutenberg does not hear "mouseup" event and tries to select multiple blocks.
124
+ ed.on('mouseup', function(e) {
125
+ var event = new MouseEvent('mouseup');
126
+ window.dispatchEvent(event);
127
+ });
128
+
129
+ // Temporarily comment out. May not be necessary due to wysiwyg field actions.
130
+ //ed.on('unload', function(e) {
131
+ // acf.tinymce.remove( id );
132
+ //});
133
+ };
134
+
135
+ // disable wp_autoresize_on (no solution yet for fixed toolbar)
136
+ init.wp_autoresize_on = false;
137
+
138
+ // Enable wpautop allowing value to save without <p> tags.
139
+ // Only if the "TinyMCE Advanced" plugin hasn't already set this functionality.
140
+ if( !init.tadv_noautop ) {
141
+ init.wpautop = true;
142
+ }
143
+
144
+ // hook for 3rd party customization
145
+ init = acf.applyFilters('wysiwyg_tinymce_settings', init, id, field);
146
+
147
+ // z-index fix (caused too many conflicts)
148
+ //if( acf.isset(tinymce,'ui','FloatPanel') ) {
149
+ // tinymce.ui.FloatPanel.zIndex = 900000;
150
+ //}
151
+
152
+ // store settings
153
+ tinyMCEPreInit.mceInit[ id ] = init;
154
+
155
+ // visual tab is active
156
+ if( args.mode == 'visual' ) {
157
+
158
+ // init
159
+ var result = tinymce.init( init );
160
+
161
+ // get editor
162
+ var ed = tinymce.get( id );
163
+
164
+ // validate
165
+ if( !ed ) {
166
+ return false;
167
+ }
168
+
169
+ // add reference
170
+ ed.acf = args.field;
171
+
172
+ // action
173
+ acf.doAction('wysiwyg_tinymce_init', ed, ed.id, init, field);
174
+ }
175
+ },
176
+
177
+ /*
178
+ * initializeQuicktags
179
+ *
180
+ * This function will initialize the quicktags instance
181
+ *
182
+ * @type function
183
+ * @date 18/8/17
184
+ * @since 5.6.0
185
+ *
186
+ * @param $post_id (int)
187
+ * @return $post_id (int)
188
+ */
189
+
190
+ initializeQuicktags: function( id, args ){
191
+
192
+ // vars
193
+ var defaults = this.defaults();
194
+
195
+ // bail early
196
+ if( typeof quicktags === 'undefined' ) return false;
197
+ if( !defaults ) return false;
198
+
199
+ // settings
200
+ var init = $.extend( {}, defaults.quicktags, args.quicktags );
201
+ init.id = id;
202
+
203
+ // filter
204
+ var field = args.field || false;
205
+ var $field = field.$el || false;
206
+ init = acf.applyFilters('wysiwyg_quicktags_settings', init, init.id, field);
207
+
208
+ // store settings
209
+ tinyMCEPreInit.qtInit[ id ] = init;
210
+
211
+ // init
212
+ var ed = quicktags( init );
213
+
214
+ // validate
215
+ if( !ed ) {
216
+ return false;
217
+ }
218
+
219
+ // generate HTML
220
+ this.buildQuicktags( ed );
221
+
222
+ // action for 3rd party customization
223
+ acf.doAction('wysiwyg_quicktags_init', ed, ed.id, init, field);
224
+ },
225
+
226
+
227
+ /*
228
+ * buildQuicktags
229
+ *
230
+ * This function will build the quicktags HTML
231
+ *
232
+ * @type function
233
+ * @date 18/8/17
234
+ * @since 5.6.0
235
+ *
236
+ * @param $post_id (int)
237
+ * @return $post_id (int)
238
+ */
239
+
240
+ buildQuicktags: function( ed ){
241
+
242
+ var canvas, name, settings, theButtons, html, ed, id, i, use, instanceId,
243
+ defaults = ',strong,em,link,block,del,ins,img,ul,ol,li,code,more,close,';
244
+
245
+ canvas = ed.canvas;
246
+ name = ed.name;
247
+ settings = ed.settings;
248
+ html = '';
249
+ theButtons = {};
250
+ use = '';
251
+ instanceId = ed.id;
252
+
253
+ // set buttons
254
+ if ( settings.buttons ) {
255
+ use = ','+settings.buttons+',';
256
+ }
257
+
258
+ for ( i in edButtons ) {
259
+ if ( ! edButtons[i] ) {
260
+ continue;
261
+ }
262
+
263
+ id = edButtons[i].id;
264
+ if ( use && defaults.indexOf( ',' + id + ',' ) !== -1 && use.indexOf( ',' + id + ',' ) === -1 ) {
265
+ continue;
266
+ }
267
+
268
+ if ( ! edButtons[i].instance || edButtons[i].instance === instanceId ) {
269
+ theButtons[id] = edButtons[i];
270
+
271
+ if ( edButtons[i].html ) {
272
+ html += edButtons[i].html( name + '_' );
273
+ }
274
+ }
275
+ }
276
+
277
+ if ( use && use.indexOf(',dfw,') !== -1 ) {
278
+ theButtons.dfw = new QTags.DFWButton();
279
+ html += theButtons.dfw.html( name + '_' );
280
+ }
281
+
282
+ if ( 'rtl' === document.getElementsByTagName( 'html' )[0].dir ) {
283
+ theButtons.textdirection = new QTags.TextDirectionButton();
284
+ html += theButtons.textdirection.html( name + '_' );
285
+ }
286
+
287
+ ed.toolbar.innerHTML = html;
288
+ ed.theButtons = theButtons;
289
+
290
+ if ( typeof jQuery !== 'undefined' ) {
291
+ jQuery( document ).triggerHandler( 'quicktags-init', [ ed ] );
292
+ }
293
+
294
+ },
295
+
296
+ disable: function( id ){
297
+ this.destroyTinymce( id );
298
+ },
299
+
300
+ remove: function( id ){
301
+ this.destroyTinymce( id );
302
+ },
303
+
304
+ destroy: function( id ){
305
+ this.destroyTinymce( id );
306
+ },
307
+
308
+ destroyTinymce: function( id ){
309
+
310
+ // bail early
311
+ if( typeof tinymce === 'undefined' ) return false;
312
+
313
+ // get editor
314
+ var ed = tinymce.get( id );
315
+
316
+ // bail early if no editor
317
+ if( !ed ) return false;
318
+
319
+ // save
320
+ ed.save();
321
+
322
+ // destroy editor
323
+ ed.destroy();
324
+
325
+ // return
326
+ return true;
327
+ },
328
+
329
+ enable: function( id ){
330
+ this.enableTinymce( id );
331
+ },
332
+
333
+ enableTinymce: function( id ){
334
+
335
+ // bail early
336
+ if( typeof switchEditors === 'undefined' ) return false;
337
+
338
+ // bail ealry if not initialized
339
+ if( typeof tinyMCEPreInit.mceInit[ id ] === 'undefined' ) return false;
340
+
341
+ // toggle
342
+ switchEditors.go( id, 'tmce');
343
+
344
+ // return
345
+ return true;
346
+ }
347
+ };
348
+
349
+ var editorManager = new acf.Model({
350
+
351
+ // hook in before fieldsEventManager, conditions, etc
352
+ priority: 5,
353
+
354
+ actions: {
355
+ 'prepare': 'onPrepare',
356
+ 'ready': 'onReady',
357
+ },
358
+ onPrepare: function(){
359
+
360
+ // find hidden editor which may exist within a field
361
+ var $div = $('#acf-hidden-wp-editor');
362
+
363
+ // move to footer
364
+ if( $div.exists() ) {
365
+ $div.appendTo('body');
366
+ }
367
+ },
368
+ onReady: function(){
369
+
370
+ // Restore wp.editor functions used by tinymce removed in WP5.
371
+ if( acf.isset(window,'wp','oldEditor') ) {
372
+ wp.editor.autop = wp.oldEditor.autop;
373
+ wp.editor.removep = wp.oldEditor.removep;
374
+ }
375
+
376
+ // bail early if no tinymce
377
+ if( !acf.isset(window,'tinymce','on') ) return;
378
+
379
+ // restore default activeEditor
380
+ tinymce.on('AddEditor', function( data ){
381
+
382
+ // vars
383
+ var editor = data.editor;
384
+
385
+ // bail early if not 'acf'
386
+ if( editor.id.substr(0, 3) !== 'acf' ) return;
387
+
388
+ // override if 'content' exists
389
+ editor = tinymce.editors.content || editor;
390
+
391
+ // update vars
392
+ tinymce.activeEditor = editor;
393
+ wpActiveEditor = editor.id;
394
+ });
395
+ }
396
+ });
397
+
398
+ })(jQuery);
assets/build/js/_acf-tooltip.js ADDED
@@ -0,0 +1,324 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ acf.newTooltip = function( props ){
4
+
5
+ // ensure object
6
+ if( typeof props !== 'object' ) {
7
+ props = { text: props };
8
+ }
9
+
10
+ // confirmRemove
11
+ if( props.confirmRemove !== undefined ) {
12
+
13
+ props.textConfirm = acf.__('Remove');
14
+ props.textCancel = acf.__('Cancel');
15
+ return new TooltipConfirm( props );
16
+
17
+ // confirm
18
+ } else if( props.confirm !== undefined ) {
19
+
20
+ return new TooltipConfirm( props );
21
+
22
+ // default
23
+ } else {
24
+ return new Tooltip( props );
25
+ }
26
+
27
+ };
28
+
29
+ var Tooltip = acf.Model.extend({
30
+
31
+ data: {
32
+ text: '',
33
+ timeout: 0,
34
+ target: null
35
+ },
36
+
37
+ tmpl: function(){
38
+ return '<div class="acf-tooltip"></div>';
39
+ },
40
+
41
+ setup: function( props ){
42
+ $.extend(this.data, props);
43
+ this.$el = $(this.tmpl());
44
+ },
45
+
46
+ initialize: function(){
47
+
48
+ // render
49
+ this.render();
50
+
51
+ // append
52
+ this.show();
53
+
54
+ // position
55
+ this.position();
56
+
57
+ // timeout
58
+ var timeout = this.get('timeout');
59
+ if( timeout ) {
60
+ setTimeout( $.proxy(this.fade, this), timeout );
61
+ }
62
+ },
63
+
64
+ update: function( props ){
65
+ $.extend(this.data, props);
66
+ this.initialize();
67
+ },
68
+
69
+ render: function(){
70
+ this.html( this.get('text') );
71
+ },
72
+
73
+ show: function(){
74
+ $('body').append( this.$el );
75
+ },
76
+
77
+ hide: function(){
78
+ this.$el.remove();
79
+ },
80
+
81
+ fade: function(){
82
+
83
+ // add class
84
+ this.$el.addClass('acf-fade-up');
85
+
86
+ // remove
87
+ this.setTimeout(function(){
88
+ this.remove();
89
+ }, 250);
90
+ },
91
+
92
+ html: function( html ){
93
+ this.$el.html( html );
94
+ },
95
+
96
+ position: function(){
97
+
98
+ // vars
99
+ var $tooltip = this.$el;
100
+ var $target = this.get('target');
101
+ if( !$target ) return;
102
+
103
+ // Reset position.
104
+ $tooltip.removeClass('right left bottom top').css({ top: 0, left: 0 });
105
+
106
+ // Declare tollerance to edge of screen.
107
+ var tolerance = 10;
108
+
109
+ // Find target position.
110
+ var targetWidth = $target.outerWidth();
111
+ var targetHeight = $target.outerHeight();
112
+ var targetTop = $target.offset().top;
113
+ var targetLeft = $target.offset().left;
114
+
115
+ // Find tooltip position.
116
+ var tooltipWidth = $tooltip.outerWidth();
117
+ var tooltipHeight = $tooltip.outerHeight();
118
+ var tooltipTop = $tooltip.offset().top; // Should be 0, but WP media grid causes this to be 32 (toolbar padding).
119
+
120
+ // Assume default top alignment.
121
+ var top = targetTop - tooltipHeight - tooltipTop;
122
+ var left = targetLeft + (targetWidth / 2) - (tooltipWidth / 2);
123
+
124
+ // Check if too far left.
125
+ if( left < tolerance ) {
126
+ $tooltip.addClass('right');
127
+ left = targetLeft + targetWidth;
128
+ top = targetTop + (targetHeight / 2) - (tooltipHeight / 2) - tooltipTop;
129
+
130
+ // Check if too far right.
131
+ } else if( (left + tooltipWidth + tolerance) > $(window).width() ) {
132
+ $tooltip.addClass('left');
133
+ left = targetLeft - tooltipWidth;
134
+ top = targetTop + (targetHeight / 2) - (tooltipHeight / 2) - tooltipTop;
135
+
136
+ // Check if too far up.
137
+ } else if( top - $(window).scrollTop() < tolerance ) {
138
+ $tooltip.addClass('bottom');
139
+ top = targetTop + targetHeight - tooltipTop;
140
+
141
+ // No colision with edges.
142
+ } else {
143
+ $tooltip.addClass('top');
144
+ }
145
+
146
+ // update css
147
+ $tooltip.css({ 'top': top, 'left': left });
148
+ }
149
+ });
150
+
151
+ var TooltipConfirm = Tooltip.extend({
152
+
153
+ data: {
154
+ text: '',
155
+ textConfirm: '',
156
+ textCancel: '',
157
+ target: null,
158
+ targetConfirm: true,
159
+ confirm: function(){},
160
+ cancel: function(){},
161
+ context: false
162
+ },
163
+
164
+ events: {
165
+ 'click [data-event="cancel"]': 'onCancel',
166
+ 'click [data-event="confirm"]': 'onConfirm',
167
+ },
168
+
169
+ addEvents: function(){
170
+
171
+ // add events
172
+ acf.Model.prototype.addEvents.apply(this);
173
+
174
+ // vars
175
+ var $document = $(document);
176
+ var $target = this.get('target');
177
+
178
+ // add global 'cancel' click event
179
+ // - use timeout to avoid the current 'click' event triggering the onCancel function
180
+ this.setTimeout(function(){
181
+ this.on( $document, 'click', 'onCancel' );
182
+ });
183
+
184
+ // add target 'confirm' click event
185
+ // - allow setting to control this feature
186
+ if( this.get('targetConfirm') ) {
187
+ this.on( $target, 'click', 'onConfirm' );
188
+ }
189
+ },
190
+
191
+ removeEvents: function(){
192
+
193
+ // remove events
194
+ acf.Model.prototype.removeEvents.apply(this);
195
+
196
+ // vars
197
+ var $document = $(document);
198
+ var $target = this.get('target');
199
+
200
+ // remove custom events
201
+ this.off( $document, 'click' );
202
+ this.off( $target, 'click' );
203
+ },
204
+
205
+ render: function(){
206
+
207
+ // defaults
208
+ var text = this.get('text') || acf.__('Are you sure?');
209
+ var textConfirm = this.get('textConfirm') || acf.__('Yes');
210
+ var textCancel = this.get('textCancel') || acf.__('No');
211
+
212
+ // html
213
+ var html = [
214
+ text,
215
+ '<a href="#" data-event="confirm">' + textConfirm + '</a>',
216
+ '<a href="#" data-event="cancel">' + textCancel + '</a>'
217
+ ].join(' ');
218
+
219
+ // html
220
+ this.html( html );
221
+
222
+ // class
223
+ this.$el.addClass('-confirm');
224
+ },
225
+
226
+ onCancel: function( e, $el ){
227
+
228
+ // prevent default
229
+ e.preventDefault();
230
+ e.stopImmediatePropagation();
231
+
232
+ // callback
233
+ var callback = this.get('cancel');
234
+ var context = this.get('context') || this;
235
+ callback.apply( context, arguments );
236
+
237
+ //remove
238
+ this.remove();
239
+ },
240
+
241
+ onConfirm: function( e, $el ){
242
+
243
+ // prevent default
244
+ e.preventDefault();
245
+ e.stopImmediatePropagation();
246
+
247
+ // callback
248
+ var callback = this.get('confirm');
249
+ var context = this.get('context') || this;
250
+ callback.apply( context, arguments );
251
+
252
+ //remove
253
+ this.remove();
254
+ }
255
+ });
256
+
257
+ // storage
258
+ acf.models.Tooltip = Tooltip;
259
+ acf.models.TooltipConfirm = TooltipConfirm;
260
+
261
+
262
+ /**
263
+ * tooltipManager
264
+ *
265
+ * description
266
+ *
267
+ * @date 17/4/18
268
+ * @since 5.6.9
269
+ *
270
+ * @param type $var Description. Default.
271
+ * @return type Description.
272
+ */
273
+
274
+ var tooltipHoverHelper = new acf.Model({
275
+
276
+ tooltip: false,
277
+
278
+ events: {
279
+ 'mouseenter .acf-js-tooltip': 'showTitle',
280
+ 'mouseup .acf-js-tooltip': 'hideTitle',
281
+ 'mouseleave .acf-js-tooltip': 'hideTitle'
282
+ },
283
+
284
+ showTitle: function( e, $el ){
285
+
286
+ // vars
287
+ var title = $el.attr('title');
288
+
289
+ // bail ealry if no title
290
+ if( !title ) {
291
+ return;
292
+ }
293
+
294
+ // clear title to avoid default browser tooltip
295
+ $el.attr('title', '');
296
+
297
+ // create
298
+ if( !this.tooltip ) {
299
+ this.tooltip = acf.newTooltip({
300
+ text: title,
301
+ target: $el
302
+ });
303
+
304
+ // update
305
+ } else {
306
+ this.tooltip.update({
307
+ text: title,
308
+ target: $el
309
+ });
310
+ }
311
+
312
+ },
313
+
314
+ hideTitle: function( e, $el ){
315
+
316
+ // hide tooltip
317
+ this.tooltip.hide();
318
+
319
+ // restore title
320
+ $el.attr('title', this.tooltip.get('text'));
321
+ }
322
+ });
323
+
324
+ })(jQuery);
assets/build/js/_acf-unload.js ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ acf.unload = new acf.Model({
4
+
5
+ wait: 'load',
6
+ active: true,
7
+ changed: false,
8
+
9
+ actions: {
10
+ 'validation_failure': 'startListening',
11
+ 'validation_success': 'stopListening'
12
+ },
13
+
14
+ events: {
15
+ 'change form .acf-field': 'startListening',
16
+ 'submit form': 'stopListening'
17
+ },
18
+
19
+ enable: function(){
20
+ this.active = true;
21
+ },
22
+
23
+ disable: function(){
24
+ this.active = false;
25
+ },
26
+
27
+ reset: function(){
28
+ this.stopListening();
29
+ },
30
+
31
+ startListening: function(){
32
+
33
+ // bail ealry if already changed, not active
34
+ if( this.changed || !this.active ) {
35
+ return;
36
+ }
37
+
38
+ // update
39
+ this.changed = true;
40
+
41
+ // add event
42
+ $(window).on('beforeunload', this.onUnload);
43
+
44
+ },
45
+
46
+ stopListening: function(){
47
+
48
+ // update
49
+ this.changed = false;
50
+
51
+ // remove event
52
+ $(window).off('beforeunload', this.onUnload);
53
+
54
+ },
55
+
56
+ onUnload: function(){
57
+ return acf.__('The changes you made will be lost if you navigate away from this page');
58
+ }
59
+
60
+ });
61
+
62
+ })(jQuery);
assets/build/js/_acf-validation.js ADDED
@@ -0,0 +1,1006 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * Validator
5
+ *
6
+ * The model for validating forms
7
+ *
8
+ * @date 4/9/18
9
+ * @since 5.7.5
10
+ *
11
+ * @param void
12
+ * @return void
13
+ */
14
+ var Validator = acf.Model.extend({
15
+
16
+ /** @var string The model identifier. */
17
+ id: 'Validator',
18
+
19
+ /** @var object The model data. */
20
+ data: {
21
+
22
+ /** @var array The form errors. */
23
+ errors: [],
24
+
25
+ /** @var object The form notice. */
26
+ notice: null,
27
+
28
+ /** @var string The form status. loading, invalid, valid */
29
+ status: ''
30
+ },
31
+
32
+ /** @var object The model events. */
33
+ events: {
34
+ 'changed:status': 'onChangeStatus'
35
+ },
36
+
37
+ /**
38
+ * addErrors
39
+ *
40
+ * Adds errors to the form.
41
+ *
42
+ * @date 4/9/18
43
+ * @since 5.7.5
44
+ *
45
+ * @param array errors An array of errors.
46
+ * @return void
47
+ */
48
+ addErrors: function( errors ){
49
+ errors.map( this.addError, this );
50
+ },
51
+
52
+ /**
53
+ * addError
54
+ *
55
+ * Adds and error to the form.
56
+ *
57
+ * @date 4/9/18
58
+ * @since 5.7.5
59
+ *
60
+ * @param object error An error object containing input and message.
61
+ * @return void
62
+ */
63
+ addError: function( error ){
64
+ this.data.errors.push( error );
65
+ },
66
+
67
+ /**
68
+ * hasErrors
69
+ *
70
+ * Returns true if the form has errors.
71
+ *
72
+ * @date 4/9/18
73
+ * @since 5.7.5
74
+ *
75
+ * @param void
76
+ * @return bool
77
+ */
78
+ hasErrors: function(){
79
+ return this.data.errors.length;
80
+ },
81
+
82
+ /**
83
+ * clearErrors
84
+ *
85
+ * Removes any errors.
86
+ *
87
+ * @date 4/9/18
88
+ * @since 5.7.5
89
+ *
90
+ * @param void
91
+ * @return void
92
+ */
93
+ clearErrors: function(){
94
+ return this.data.errors = [];
95
+ },
96
+
97
+ /**
98
+ * getErrors
99
+ *
100
+ * Returns the forms errors.
101
+ *
102
+ * @date 4/9/18
103
+ * @since 5.7.5
104
+ *
105
+ * @param void
106
+ * @return array
107
+ */
108
+ getErrors: function(){
109
+ return this.data.errors;
110
+ },
111
+
112
+ /**
113
+ * getFieldErrors
114
+ *
115
+ * Returns the forms field errors.
116
+ *
117
+ * @date 4/9/18
118
+ * @since 5.7.5
119
+ *
120
+ * @param void
121
+ * @return array
122
+ */
123
+ getFieldErrors: function(){
124
+
125
+ // vars
126
+ var errors = [];
127
+ var inputs = [];
128
+
129
+ // loop
130
+ this.getErrors().map(function(error){
131
+
132
+ // bail early if global
133
+ if( !error.input ) return;
134
+
135
+ // update if exists
136
+ var i = inputs.indexOf(error.input);
137
+ if( i > -1 ) {
138
+ errors[ i ] = error;
139
+
140
+ // update
141
+ } else {
142
+ errors.push( error );
143
+ inputs.push( error.input );
144
+ }
145
+ });
146
+
147
+ // return
148
+ return errors;
149
+ },
150
+
151
+ /**
152
+ * getGlobalErrors
153
+ *
154
+ * Returns the forms global errors (errors without a specific input).
155
+ *
156
+ * @date 4/9/18
157
+ * @since 5.7.5
158
+ *
159
+ * @param void
160
+ * @return array
161
+ */
162
+ getGlobalErrors: function(){
163
+
164
+ // return array of errors that contain no input
165
+ return this.getErrors().filter(function(error){
166
+ return !error.input;
167
+ });
168
+ },
169
+
170
+ /**
171
+ * showErrors
172
+ *
173
+ * Displays all errors for this form.
174
+ *
175
+ * @date 4/9/18
176
+ * @since 5.7.5
177
+ *
178
+ * @param void
179
+ * @return void
180
+ */
181
+ showErrors: function(){
182
+
183
+ // bail early if no errors
184
+ if( !this.hasErrors() ) {
185
+ return;
186
+ }
187
+
188
+ // vars
189
+ var fieldErrors = this.getFieldErrors();
190
+ var globalErrors = this.getGlobalErrors();
191
+
192
+ // vars
193
+ var errorCount = 0;
194
+ var $scrollTo = false;
195
+
196
+ // loop
197
+ fieldErrors.map(function( error ){
198
+
199
+ // get input
200
+ var $input = this.$('[name="' + error.input + '"]').first();
201
+
202
+ // if $_POST value was an array, this $input may not exist
203
+ if( !$input.length ) {
204
+ $input = this.$('[name^="' + error.input + '"]').first();
205
+ }
206
+
207
+ // bail early if input doesn't exist
208
+ if( !$input.length ) {
209
+ return;
210
+ }
211
+
212
+ // increase
213
+ errorCount++;
214
+
215
+ // get field
216
+ var field = acf.getClosestField( $input );
217
+
218
+ // show error
219
+ field.showError( error.message );
220
+
221
+ // set $scrollTo
222
+ if( !$scrollTo ) {
223
+ $scrollTo = field.$el;
224
+ }
225
+ }, this);
226
+
227
+ // errorMessage
228
+ var errorMessage = acf.__('Validation failed');
229
+ globalErrors.map(function( error ){
230
+ errorMessage += '. ' + error.message;
231
+ });
232
+ if( errorCount == 1 ) {
233
+ errorMessage += '. ' + acf.__('1 field requires attention');
234
+ } else if( errorCount > 1 ) {
235
+ errorMessage += '. ' + acf.__('%d fields require attention').replace('%d', errorCount);
236
+ }
237
+
238
+ // notice
239
+ if( this.has('notice') ) {
240
+ this.get('notice').update({
241
+ type: 'error',
242
+ text: errorMessage
243
+ });
244
+ } else {
245
+ var notice = acf.newNotice({
246
+ type: 'error',
247
+ text: errorMessage,
248
+ target: this.$el
249
+ });
250
+ this.set('notice', notice);
251
+ }
252
+
253
+ // if no $scrollTo, set to message
254
+ if( !$scrollTo ) {
255
+ $scrollTo = this.get('notice').$el;
256
+ }
257
+
258
+ // timeout
259
+ setTimeout(function(){
260
+ $("html, body").animate({ scrollTop: $scrollTo.offset().top - ( $(window).height() / 2 ) }, 500);
261
+ }, 10);
262
+ },
263
+
264
+ /**
265
+ * onChangeStatus
266
+ *
267
+ * Update the form class when changing the 'status' data
268
+ *
269
+ * @date 4/9/18
270
+ * @since 5.7.5
271
+ *
272
+ * @param object e The event object.
273
+ * @param jQuery $el The form element.
274
+ * @param string value The new status.
275
+ * @param string prevValue The old status.
276
+ * @return void
277
+ */
278
+ onChangeStatus: function( e, $el, value, prevValue ){
279
+ this.$el.removeClass('is-'+prevValue).addClass('is-'+value);
280
+ },
281
+
282
+ /**
283
+ * validate
284
+ *
285
+ * Vaildates the form via AJAX.
286
+ *
287
+ * @date 4/9/18
288
+ * @since 5.7.5
289
+ *
290
+ * @param object args A list of settings to customize the validation process.
291
+ * @return bool True if the form is valid.
292
+ */
293
+ validate: function( args ){
294
+
295
+ // default args
296
+ args = acf.parseArgs(args, {
297
+
298
+ // trigger event
299
+ event: false,
300
+
301
+ // reset the form after submit
302
+ reset: false,
303
+
304
+ // loading callback
305
+ loading: function(){},
306
+
307
+ // complete callback
308
+ complete: function(){},
309
+
310
+ // failure callback
311
+ failure: function(){},
312
+
313
+ // success callback
314
+ success: function( $form ){
315
+ $form.submit();
316
+ }
317
+ });
318
+
319
+ // return true if is valid - allows form submit
320
+ if( this.get('status') == 'valid' ) {
321
+ return true;
322
+ }
323
+
324
+ // return false if is currently validating - prevents form submit
325
+ if( this.get('status') == 'validating' ) {
326
+ return false;
327
+ }
328
+
329
+ // return true if no ACF fields exist (no need to validate)
330
+ if( !this.$('.acf-field').length ) {
331
+ return true;
332
+ }
333
+
334
+ // if event is provided, create a new success callback.
335
+ if( args.event ) {
336
+ var event = $.Event(null, args.event);
337
+ args.success = function(){
338
+ acf.enableSubmit( $(event.target) ).trigger( event );
339
+ }
340
+ }
341
+
342
+ // action for 3rd party
343
+ acf.doAction('validation_begin', this.$el);
344
+
345
+ // lock form
346
+ acf.lockForm( this.$el );
347
+
348
+ // loading callback
349
+ args.loading( this.$el, this );
350
+
351
+ // update status
352
+ this.set('status', 'validating');
353
+
354
+ // success callback
355
+ var onSuccess = function( json ){
356
+
357
+ // validate
358
+ if( !acf.isAjaxSuccess(json) ) {
359
+ return;
360
+ }
361
+
362
+ // filter
363
+ var data = acf.applyFilters('validation_complete', json.data, this.$el, this);
364
+
365
+ // add errors
366
+ if( !data.valid ) {
367
+ this.addErrors( data.errors );
368
+ }
369
+ };
370
+
371
+ // complete
372
+ var onComplete = function(){
373
+
374
+ // unlock form
375
+ acf.unlockForm( this.$el );
376
+
377
+ // failure
378
+ if( this.hasErrors() ) {
379
+
380
+ // update status
381
+ this.set('status', 'invalid');
382
+
383
+ // action
384
+ acf.doAction('validation_failure', this.$el, this);
385
+
386
+ // display errors
387
+ this.showErrors();
388
+
389
+ // failure callback
390
+ args.failure( this.$el, this );
391
+
392
+ // success
393
+ } else {
394
+
395
+ // update status
396
+ this.set('status', 'valid');
397
+
398
+ // remove previous error message
399
+ if( this.has('notice') ) {
400
+ this.get('notice').update({
401
+ type: 'success',
402
+ text: acf.__('Validation successful'),
403
+ timeout: 1000
404
+ });
405
+ }
406
+
407
+ // action
408
+ acf.doAction('validation_success', this.$el, this);
409
+ acf.doAction('submit', this.$el);
410
+
411
+ // success callback (submit form)
412
+ args.success( this.$el, this );
413
+
414
+ // lock form
415
+ acf.lockForm( this.$el );
416
+
417
+ // reset
418
+ if( args.reset ) {
419
+ this.reset();
420
+ }
421
+ }
422
+
423
+ // complete callback
424
+ args.complete( this.$el, this );
425
+
426
+ // clear errors
427
+ this.clearErrors();
428
+ };
429
+
430
+ // serialize form data
431
+ var data = acf.serialize( this.$el );
432
+ data.action = 'acf/validate_save_post';
433
+
434
+ // ajax
435
+ $.ajax({
436
+ url: acf.get('ajaxurl'),
437
+ data: acf.prepareForAjax(data),
438
+ type: 'post',
439
+ dataType: 'json',
440
+ context: this,
441
+ success: onSuccess,
442
+ complete: onComplete
443
+ });
444
+
445
+ // return false to fail validation and allow AJAX
446
+ return false
447
+ },
448
+
449
+ /**
450
+ * setup
451
+ *
452
+ * Called during the constructor function to setup this instance
453
+ *
454
+ * @date 4/9/18
455
+ * @since 5.7.5
456
+ *
457
+ * @param jQuery $form The form element.
458
+ * @return void
459
+ */
460
+ setup: function( $form ){
461
+
462
+ // set $el
463
+ this.$el = $form;
464
+ },
465
+
466
+ /**
467
+ * reset
468
+ *
469
+ * Rests the validation to be used again.
470
+ *
471
+ * @date 6/9/18
472
+ * @since 5.7.5
473
+ *
474
+ * @param void
475
+ * @return void
476
+ */
477
+ reset: function(){
478
+
479
+ // reset data
480
+ this.set('errors', []);
481
+ this.set('notice', null);
482
+ this.set('status', '');
483
+
484
+ // unlock form
485
+ acf.unlockForm( this.$el );
486
+ }
487
+ });
488
+
489
+ /**
490
+ * getValidator
491
+ *
492
+ * Returns the instance for a given form element.
493
+ *
494
+ * @date 4/9/18
495
+ * @since 5.7.5
496
+ *
497
+ * @param jQuery $el The form element.
498
+ * @return object
499
+ */
500
+ var getValidator = function( $el ){
501
+
502
+ // instantiate
503
+ var validator = $el.data('acf');
504
+ if( !validator ) {
505
+ validator = new Validator( $el );
506
+ }
507
+
508
+ // return
509
+ return validator;
510
+ };
511
+
512
+ /**
513
+ * acf.validateForm
514
+ *
515
+ * A helper function for the Validator.validate() function.
516
+ * Returns true if form is valid, or fetches a validation request and returns false.
517
+ *
518
+ * @date 4/4/18
519
+ * @since 5.6.9
520
+ *
521
+ * @param object args A list of settings to customize the validation process.
522
+ * @return bool
523
+ */
524
+
525
+ acf.validateForm = function( args ){
526
+ return getValidator( args.form ).validate( args );
527
+ };
528
+
529
+ /**
530
+ * acf.enableSubmit
531
+ *
532
+ * Enables a submit button and returns the element.
533
+ *
534
+ * @date 30/8/18
535
+ * @since 5.7.4
536
+ *
537
+ * @param jQuery $submit The submit button.
538
+ * @return jQuery
539
+ */
540
+ acf.enableSubmit = function( $submit ){
541
+ return $submit.removeClass('disabled');
542
+ };
543
+
544
+ /**
545
+ * acf.disableSubmit
546
+ *
547
+ * Disables a submit button and returns the element.
548
+ *
549
+ * @date 30/8/18
550
+ * @since 5.7.4
551
+ *
552
+ * @param jQuery $submit The submit button.
553
+ * @return jQuery
554
+ */
555
+ acf.disableSubmit = function( $submit ){
556
+ return $submit.addClass('disabled');
557
+ };
558
+
559
+ /**
560
+ * acf.showSpinner
561
+ *
562
+ * Shows the spinner element.
563
+ *
564
+ * @date 4/9/18
565
+ * @since 5.7.5
566
+ *
567
+ * @param jQuery $spinner The spinner element.
568
+ * @return jQuery
569
+ */
570
+ acf.showSpinner = function( $spinner ){
571
+ $spinner.addClass('is-active'); // add class (WP > 4.2)
572
+ $spinner.css('display', 'inline-block'); // css (WP < 4.2)
573
+ return $spinner;
574
+ };
575
+
576
+ /**
577
+ * acf.hideSpinner
578
+ *
579
+ * Hides the spinner element.
580
+ *
581
+ * @date 4/9/18
582
+ * @since 5.7.5
583
+ *
584
+ * @param jQuery $spinner The spinner element.
585
+ * @return jQuery
586
+ */
587
+ acf.hideSpinner = function( $spinner ){
588
+ $spinner.removeClass('is-active'); // add class (WP > 4.2)
589
+ $spinner.css('display', 'none'); // css (WP < 4.2)
590
+ return $spinner;
591
+ };
592
+
593
+ /**
594
+ * acf.lockForm
595
+ *
596
+ * Locks a form by disabeling its primary inputs and showing a spinner.
597
+ *
598
+ * @date 4/9/18
599
+ * @since 5.7.5
600
+ *
601
+ * @param jQuery $form The form element.
602
+ * @return jQuery
603
+ */
604
+ acf.lockForm = function( $form ){
605
+
606
+ // vars
607
+ var $wrap = findSubmitWrap( $form );
608
+ var $submit = $wrap.find('.button, [type="submit"]');
609
+ var $spinner = $wrap.find('.spinner, .acf-spinner');
610
+
611
+ // hide all spinners (hides the preview spinner)
612
+ acf.hideSpinner( $spinner );
613
+
614
+ // lock
615
+ acf.disableSubmit( $submit );
616
+ acf.showSpinner( $spinner.last() );
617
+ return $form;
618
+ };
619
+
620
+ /**
621
+ * acf.unlockForm
622
+ *
623
+ * Unlocks a form by enabeling its primary inputs and hiding all spinners.
624
+ *
625
+ * @date 4/9/18
626
+ * @since 5.7.5
627
+ *
628
+ * @param jQuery $form The form element.
629
+ * @return jQuery
630
+ */
631
+ acf.unlockForm = function( $form ){
632
+
633
+ // vars
634
+ var $wrap = findSubmitWrap( $form );
635
+ var $submit = $wrap.find('.button, [type="submit"]');
636
+ var $spinner = $wrap.find('.spinner, .acf-spinner');
637
+
638
+ // unlock
639
+ acf.enableSubmit( $submit );
640
+ acf.hideSpinner( $spinner );
641
+ return $form;
642
+ };
643
+
644
+ /**
645
+ * findSubmitWrap
646
+ *
647
+ * An internal function to find the 'primary' form submit wrapping element.
648
+ *
649
+ * @date 4/9/18
650
+ * @since 5.7.5
651
+ *
652
+ * @param jQuery $form The form element.
653
+ * @return jQuery
654
+ */
655
+ var findSubmitWrap = function( $form ){
656
+
657
+ // default post submit div
658
+ var $wrap = $form.find('#submitdiv');
659
+ if( $wrap.length ) {
660
+ return $wrap;
661
+ }
662
+
663
+ // 3rd party publish box
664
+ var $wrap = $form.find('#submitpost');
665
+ if( $wrap.length ) {
666
+ return $wrap;
667
+ }
668
+
669
+ // term, user
670
+ var $wrap = $form.find('p.submit').last();
671
+ if( $wrap.length ) {
672
+ return $wrap;
673
+ }
674
+
675
+ // front end form
676
+ var $wrap = $form.find('.acf-form-submit');
677
+ if( $wrap.length ) {
678
+ return $wrap;
679
+ }
680
+
681
+ // default
682
+ return $form;
683
+ };
684
+
685
+ /**
686
+ * acf.validation
687
+ *
688
+ * Global validation logic
689
+ *
690
+ * @date 4/4/18
691
+ * @since 5.6.9
692
+ *
693
+ * @param void
694
+ * @return void
695
+ */
696
+
697
+ acf.validation = new acf.Model({
698
+
699
+ /** @var string The model identifier. */
700
+ id: 'validation',
701
+
702
+ /** @var bool The active state. Set to false before 'prepare' to prevent validation. */
703
+ active: true,
704
+
705
+ /** @var string The model initialize time. */
706
+ wait: 'prepare',
707
+
708
+ /** @var object The model actions. */
709
+ actions: {
710
+ 'ready': 'addInputEvents',
711
+ 'append': 'addInputEvents'
712
+ },
713
+
714
+ /** @var object The model events. */
715
+ events: {
716
+ 'click input[type="submit"]': 'onClickSubmit',
717
+ 'click button[type="submit"]': 'onClickSubmit',
718
+ //'click #editor .editor-post-publish-button': 'onClickSubmitGutenberg',
719
+ 'click #save-post': 'onClickSave',
720
+ 'submit form#post': 'onSubmitPost',
721
+ 'submit form': 'onSubmit',
722
+ },
723
+
724
+ /**
725
+ * initialize
726
+ *
727
+ * Called when initializing the model.
728
+ *
729
+ * @date 4/9/18
730
+ * @since 5.7.5
731
+ *
732
+ * @param void
733
+ * @return void
734
+ */
735
+ initialize: function(){
736
+
737
+ // check 'validation' setting
738
+ if( !acf.get('validation') ) {
739
+ this.active = false;
740
+ this.actions = {};
741
+ this.events = {};
742
+ }
743
+ },
744
+
745
+ /**
746
+ * enable
747
+ *
748
+ * Enables validation.
749
+ *
750
+ * @date 4/9/18
751
+ * @since 5.7.5
752
+ *
753
+ * @param void
754
+ * @return void
755
+ */
756
+ enable: function(){
757
+ this.active = true;
758
+ },
759
+
760
+ /**
761
+ * disable
762
+ *
763
+ * Disables validation.
764
+ *
765
+ * @date 4/9/18
766
+ * @since 5.7.5
767
+ *
768
+ * @param void
769
+ * @return void
770
+ */
771
+ disable: function(){
772
+ this.active = false;
773
+ },
774
+
775
+ /**
776
+ * reset
777
+ *
778
+ * Rests the form validation to be used again
779
+ *
780
+ * @date 6/9/18
781
+ * @since 5.7.5
782
+ *
783
+ * @param jQuery $form The form element.
784
+ * @return void
785
+ */
786
+ reset: function( $form ){
787
+ getValidator( $form ).reset();
788
+ },
789
+
790
+ /**
791
+ * addInputEvents
792
+ *
793
+ * Adds 'invalid' event listeners to HTML inputs.
794
+ *
795
+ * @date 4/9/18
796
+ * @since 5.7.5
797
+ *
798
+ * @param jQuery $el The element being added / readied.
799
+ * @return void
800
+ */
801
+ addInputEvents: function( $el ){
802
+
803
+ // vars
804
+ var $inputs = $('.acf-field [name]', $el);
805
+
806
+ // check
807
+ if( $inputs.length ) {
808
+ this.on( $inputs, 'invalid', 'onInvalid' );
809
+ }
810
+ },
811
+
812
+ /**
813
+ * onInvalid
814
+ *
815
+ * Callback for the 'invalid' event.
816
+ *
817
+ * @date 4/9/18
818
+ * @since 5.7.5
819
+ *
820
+ * @param object e The event object.
821
+ * @param jQuery $el The input element.
822
+ * @return void
823
+ */
824
+ onInvalid: function( e, $el ){
825
+
826
+ // prevent default
827
+ // - prevents browser error message
828
+ // - also fixes chrome bug where 'hidden-by-tab' field throws focus error
829
+ e.preventDefault();
830
+
831
+ // vars
832
+ var $form = $el.closest('form');
833
+
834
+ // check form exists
835
+ if( $form.length ) {
836
+
837
+ // add error to validator
838
+ getValidator( $form ).addError({
839
+ input: $el.attr('name'),
840
+ message: e.target.validationMessage
841
+ });
842
+
843
+ // trigger submit on $form
844
+ // - allows for "save", "preview" and "publish" to work
845
+ $form.submit();
846
+ }
847
+ },
848
+
849
+ /**
850
+ * onClickSubmit
851
+ *
852
+ * Callback when clicking submit.
853
+ *
854
+ * @date 4/9/18
855
+ * @since 5.7.5
856
+ *
857
+ * @param object e The event object.
858
+ * @param jQuery $el The input element.
859
+ * @return void
860
+ */
861
+ onClickSubmit: function( e, $el ){
862
+
863
+ // store the "click event" for later use in this.onSubmit()
864
+ this.set('originalEvent', e);
865
+ },
866
+
867
+ /**
868
+ * onClickSave
869
+ *
870
+ * Set ignore to true when saving a draft.
871
+ *
872
+ * @date 4/9/18
873
+ * @since 5.7.5
874
+ *
875
+ * @param object e The event object.
876
+ * @param jQuery $el The input element.
877
+ * @return void
878
+ */
879
+ onClickSave: function( e, $el ) {
880
+ this.set('ignore', true);
881
+ },
882
+
883
+ /**
884
+ * onClickSubmitGutenberg
885
+ *
886
+ * Custom validation event for the gutenberg editor.
887
+ *
888
+ * @date 29/10/18
889
+ * @since 5.8.0
890
+ *
891
+ * @param object e The event object.
892
+ * @param jQuery $el The input element.
893
+ * @return void
894
+ */
895
+ onClickSubmitGutenberg: function( e, $el ){
896
+
897
+ // validate
898
+ var valid = acf.validateForm({
899
+ form: $('#editor'),
900
+ event: e,
901
+ reset: true,
902
+ failure: function( $form, validator ){
903
+ var $notice = validator.get('notice').$el;
904
+ $notice.appendTo('.components-notice-list');
905
+ $notice.find('.acf-notice-dismiss').removeClass('small');
906
+ }
907
+ });
908
+
909
+ // if not valid, stop event and allow validation to continue
910
+ if( !valid ) {
911
+ e.preventDefault();
912
+ e.stopImmediatePropagation();
913
+ }
914
+ },
915
+
916
+ /**
917
+ * onSubmitPost
918
+ *
919
+ * Callback when the 'post' form is submit.
920
+ *
921
+ * @date 5/3/19
922
+ * @since 5.7.13
923
+ *
924
+ * @param object e The event object.
925
+ * @param jQuery $el The input element.
926
+ * @return void
927
+ */
928
+ onSubmitPost: function( e, $el ) {
929
+
930
+ // Check if is preview.
931
+ if( $('input#wp-preview').val() === 'dopreview' ) {
932
+
933
+ // Ignore validation.
934
+ this.set('ignore', true);
935
+
936
+ // Unlock form to fix conflict with core "submit.edit-post" event causing all submit buttons to be disabled.
937
+ acf.unlockForm( $el )
938
+ }
939
+ },
940
+
941
+ /**
942
+ * onSubmit
943
+ *
944
+ * Callback when the form is submit.
945
+ *
946
+ * @date 4/9/18
947
+ * @since 5.7.5
948
+ *
949
+ * @param object e The event object.
950
+ * @param jQuery $el The input element.
951
+ * @return void
952
+ */
953
+ onSubmit: function( e, $el ){
954
+
955
+ // Allow form to submit if...
956
+ if(
957
+ // Validation has been disabled.
958
+ !this.active
959
+
960
+ // Or this event is to be ignored.
961
+ || this.get('ignore')
962
+
963
+ // Or this event has already been prevented.
964
+ || e.isDefaultPrevented()
965
+ ) {
966
+ // Return early and call reset function.
967
+ return this.allowSubmit();
968
+ }
969
+
970
+ // Validate form.
971
+ var valid = acf.validateForm({
972
+ form: $el,
973
+ event: this.get('originalEvent')
974
+ });
975
+
976
+ // If not valid, stop event to prevent form submit.
977
+ if( !valid ) {
978
+ e.preventDefault();
979
+ }
980
+ },
981
+
982
+ /**
983
+ * allowSubmit
984
+ *
985
+ * Resets data during onSubmit when the form is allowed to submit.
986
+ *
987
+ * @date 5/3/19
988
+ * @since 5.7.13
989
+ *
990
+ * @param void
991
+ * @return void
992
+ */
993
+ allowSubmit: function(){
994
+
995
+ // Reset "ignore" state.
996
+ this.set('ignore', false);
997
+
998
+ // Reset "originalEvent" object.
999
+ this.set('originalEvent', false);
1000
+
1001
+ // Return true
1002
+ return true;
1003
+ }
1004
+ });
1005
+
1006
+ })(jQuery);
assets/build/js/_acf.js ADDED
@@ -0,0 +1,2188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * acf
5
+ *
6
+ * description
7
+ *
8
+ * @date 14/12/17
9
+ * @since 5.6.5
10
+ *
11
+ * @param type $var Description. Default.
12
+ * @return type Description.
13
+ */
14
+
15
+ // The global acf object
16
+ var acf = {};
17
+
18
+ // Set as a browser global
19
+ window.acf = acf;
20
+
21
+ /** @var object Data sent from PHP */
22
+ acf.data = {};
23
+
24
+
25
+ /**
26
+ * get
27
+ *
28
+ * Gets a specific data value
29
+ *
30
+ * @date 14/12/17
31
+ * @since 5.6.5
32
+ *
33
+ * @param string name
34
+ * @return mixed
35
+ */
36
+
37
+ acf.get = function( name ){
38
+ return this.data[name] || null;
39
+ };
40
+
41
+
42
+ /**
43
+ * has
44
+ *
45
+ * Returns `true` if the data exists and is not null
46
+ *
47
+ * @date 14/12/17
48
+ * @since 5.6.5
49
+ *
50
+ * @param string name
51
+ * @return boolean
52
+ */
53
+
54
+ acf.has = function( name ){
55
+ return this.get(name) !== null;
56
+ };
57
+
58
+
59
+ /**
60
+ * set
61
+ *
62
+ * Sets a specific data value
63
+ *
64
+ * @date 14/12/17
65
+ * @since 5.6.5
66
+ *
67
+ * @param string name
68
+ * @param mixed value
69
+ * @return this
70
+ */
71
+
72
+ acf.set = function( name, value ){
73
+ this.data[ name ] = value;
74
+ return this;
75
+ };
76
+
77
+
78
+ /**
79
+ * uniqueId
80
+ *
81
+ * Returns a unique ID
82
+ *
83
+ * @date 9/11/17
84
+ * @since 5.6.3
85
+ *
86
+ * @param string prefix Optional prefix.
87
+ * @return string
88
+ */
89
+
90
+ var idCounter = 0;
91
+ acf.uniqueId = function(prefix){
92
+ var id = ++idCounter + '';
93
+ return prefix ? prefix + id : id;
94
+ };
95
+
96
+ /**
97
+ * acf.uniqueArray
98
+ *
99
+ * Returns a new array with only unique values
100
+ * Credit: https://stackoverflow.com/questions/1960473/get-all-unique-values-in-an-array-remove-duplicates
101
+ *
102
+ * @date 23/3/18
103
+ * @since 5.6.9
104
+ *
105
+ * @param type $var Description. Default.
106
+ * @return type Description.
107
+ */
108
+
109
+ acf.uniqueArray = function( array ){
110
+ function onlyUnique(value, index, self) {
111
+ return self.indexOf(value) === index;
112
+ }
113
+ return array.filter( onlyUnique );
114
+ };
115
+
116
+ /**
117
+ * uniqid
118
+ *
119
+ * Returns a unique ID (PHP version)
120
+ *
121
+ * @date 9/11/17
122
+ * @since 5.6.3
123
+ * @source http://locutus.io/php/misc/uniqid/
124
+ *
125
+ * @param string prefix Optional prefix.
126
+ * @return string
127
+ */
128
+
129
+ var uniqidSeed = '';
130
+ acf.uniqid = function(prefix, moreEntropy){
131
+ // discuss at: http://locutus.io/php/uniqid/
132
+ // original by: Kevin van Zonneveld (http://kvz.io)
133
+ // revised by: Kankrelune (http://www.webfaktory.info/)
134
+ // note 1: Uses an internal counter (in locutus global) to avoid collision
135
+ // example 1: var $id = uniqid()
136
+ // example 1: var $result = $id.length === 13
137
+ // returns 1: true
138
+ // example 2: var $id = uniqid('foo')
139
+ // example 2: var $result = $id.length === (13 + 'foo'.length)
140
+ // returns 2: true
141
+ // example 3: var $id = uniqid('bar', true)
142
+ // example 3: var $result = $id.length === (23 + 'bar'.length)
143
+ // returns 3: true
144
+ if (typeof prefix === 'undefined') {
145
+ prefix = '';
146
+ }
147
+
148
+ var retId;
149
+ var formatSeed = function(seed, reqWidth) {
150
+ seed = parseInt(seed, 10).toString(16); // to hex str
151
+ if (reqWidth < seed.length) { // so long we split
152
+ return seed.slice(seed.length - reqWidth);
153
+ }
154
+ if (reqWidth > seed.length) { // so short we pad
155
+ return Array(1 + (reqWidth - seed.length)).join('0') + seed;
156
+ }
157
+ return seed;
158
+ };
159
+
160
+ if (!uniqidSeed) { // init seed with big random int
161
+ uniqidSeed = Math.floor(Math.random() * 0x75bcd15);
162
+ }
163
+ uniqidSeed++;
164
+
165
+ retId = prefix; // start with prefix, add current milliseconds hex string
166
+ retId += formatSeed(parseInt(new Date().getTime() / 1000, 10), 8);
167
+ retId += formatSeed(uniqidSeed, 5); // add seed hex string
168
+ if (moreEntropy) {
169
+ // for more entropy we add a float lower to 10
170
+ retId += (Math.random() * 10).toFixed(8).toString();
171
+ }
172
+
173
+ return retId;
174
+ };
175
+
176
+
177
+ /**
178
+ * strReplace
179
+ *
180
+ * Performs a string replace
181
+ *
182
+ * @date 14/12/17
183
+ * @since 5.6.5
184
+ *
185
+ * @param string search
186
+ * @param string replace
187
+ * @param string subject
188
+ * @return string
189
+ */
190
+
191
+ acf.strReplace = function( search, replace, subject ){
192
+ return subject.split(search).join(replace);
193
+ };
194
+
195
+
196
+ /**
197
+ * strCamelCase
198
+ *
199
+ * Converts a string into camelCase
200
+ * Thanks to https://stackoverflow.com/questions/2970525/converting-any-string-into-camel-case
201
+ *
202
+ * @date 14/12/17
203
+ * @since 5.6.5
204
+ *
205
+ * @param string str
206
+ * @return string
207
+ */
208
+
209
+ acf.strCamelCase = function( str ){
210
+
211
+ // replace [_-] characters with space
212
+ str = str.replace(/[_-]/g, ' ');
213
+
214
+ // camelCase
215
+ str = str.replace(/(?:^\w|\b\w|\s+)/g, function(match, index) {
216
+ if (+match === 0) return ""; // or if (/\s+/.test(match)) for white spaces
217
+ return index == 0 ? match.toLowerCase() : match.toUpperCase();
218
+ });
219
+
220
+ // return
221
+ return str;
222
+ };
223
+
224
+ /**
225
+ * strPascalCase
226
+ *
227
+ * Converts a string into PascalCase
228
+ * Thanks to https://stackoverflow.com/questions/1026069/how-do-i-make-the-first-letter-of-a-string-uppercase-in-javascript
229
+ *
230
+ * @date 14/12/17
231
+ * @since 5.6.5
232
+ *
233
+ * @param string str
234
+ * @return string
235
+ */
236
+
237
+ acf.strPascalCase = function( str ){
238
+ var camel = acf.strCamelCase( str );
239
+ return camel.charAt(0).toUpperCase() + camel.slice(1);
240
+ };
241
+
242
+ /**
243
+ * acf.strSlugify
244
+ *
245
+ * Converts a string into a HTML class friendly slug
246
+ *
247
+ * @date 21/3/18
248
+ * @since 5.6.9
249
+ *
250
+ * @param string str
251
+ * @return string
252
+ */
253
+
254
+ acf.strSlugify = function( str ){
255
+ return acf.strReplace( '_', '-', str.toLowerCase() );
256
+ };
257
+
258
+
259
+ acf.strSanitize = function( str ){
260
+
261
+ // chars (https://jsperf.com/replace-foreign-characters)
262
+ var map = {
263
+ "À": "A",
264
+ "Á": "A",
265
+ "Â": "A",
266
+ "Ã": "A",
267
+ "Ä": "A",
268
+ "Å": "A",
269
+ "Æ": "AE",
270
+ "Ç": "C",
271
+ "È": "E",
272
+ "É": "E",
273
+ "Ê": "E",
274
+ "Ë": "E",
275
+ "Ì": "I",
276
+ "Í": "I",
277
+ "Î": "I",
278
+ "Ï": "I",
279
+ "Ð": "D",
280
+ "Ñ": "N",
281
+ "Ò": "O",
282
+ "Ó": "O",
283
+ "Ô": "O",
284
+ "Õ": "O",
285
+ "Ö": "O",
286
+ "Ø": "O",
287
+ "Ù": "U",
288
+ "Ú": "U",
289
+ "Û": "U",
290
+ "Ü": "U",
291
+ "Ý": "Y",
292
+ "ß": "s",
293
+ "à": "a",
294
+ "á": "a",
295
+ "â": "a",
296
+ "ã": "a",
297
+ "ä": "a",
298
+ "å": "a",
299
+ "æ": "ae",
300
+ "ç": "c",
301
+ "è": "e",
302
+ "é": "e",
303
+ "ê": "e",
304
+ "ë": "e",
305
+ "ì": "i",
306
+ "í": "i",
307
+ "î": "i",
308
+ "ï": "i",
309
+ "ñ": "n",
310
+ "ò": "o",
311
+ "ó": "o",
312
+ "ô": "o",
313
+ "õ": "o",
314
+ "ö": "o",
315
+ "ø": "o",
316
+ "ù": "u",
317
+ "ú": "u",
318
+ "û": "u",
319
+ "ü": "u",
320
+ "ý": "y",
321
+ "ÿ": "y",
322
+ "Ā": "A",
323
+ "ā": "a",
324
+ "Ă": "A",
325
+ "ă": "a",
326
+ "Ą": "A",
327
+ "ą": "a",
328
+ "Ć": "C",
329
+ "ć": "c",
330
+ "Ĉ": "C",
331
+ "ĉ": "c",
332
+ "Ċ": "C",
333
+ "ċ": "c",
334
+ "Č": "C",
335
+ "č": "c",
336
+ "Ď": "D",
337
+ "ď": "d",
338
+ "Đ": "D",
339
+ "đ": "d",
340
+ "Ē": "E",
341
+ "ē": "e",
342
+ "Ĕ": "E",
343
+ "ĕ": "e",
344
+ "Ė": "E",
345
+ "ė": "e",
346
+ "Ę": "E",
347
+ "ę": "e",
348
+ "Ě": "E",
349
+ "ě": "e",
350
+ "Ĝ": "G",
351
+ "ĝ": "g",
352
+ "Ğ": "G",
353
+ "ğ": "g",
354
+ "Ġ": "G",
355
+ "ġ": "g",
356
+ "Ģ": "G",
357
+ "ģ": "g",
358
+ "Ĥ": "H",
359
+ "ĥ": "h",
360
+ "Ħ": "H",
361
+ "ħ": "h",
362
+ "Ĩ": "I",
363
+ "ĩ": "i",
364
+ "Ī": "I",
365
+ "ī": "i",
366
+ "Ĭ": "I",
367
+ "ĭ": "i",
368
+ "Į": "I",
369
+ "į": "i",
370
+ "İ": "I",
371
+ "ı": "i",
372
+ "IJ": "IJ",
373
+ "ij": "ij",
374
+ "Ĵ": "J",
375
+ "ĵ": "j",
376
+ "Ķ": "K",
377
+ "ķ": "k",
378
+ "Ĺ": "L",
379
+ "ĺ": "l",
380
+ "Ļ": "L",
381
+ "ļ": "l",
382
+ "Ľ": "L",
383
+ "ľ": "l",
384
+ "Ŀ": "L",
385
+ "ŀ": "l",
386
+ "Ł": "l",
387
+ "ł": "l",
388
+ "Ń": "N",
389
+ "ń": "n",
390
+ "Ņ": "N",
391
+ "ņ": "n",
392
+ "Ň": "N",
393
+ "ň": "n",
394
+ "ʼn": "n",
395
+ "Ō": "O",
396
+ "ō": "o",
397
+ "Ŏ": "O",
398
+ "ŏ": "o",
399
+ "Ő": "O",
400
+ "ő": "o",
401
+ "Œ": "OE",
402
+ "œ": "oe",
403
+ "Ŕ": "R",
404
+ "ŕ": "r",
405
+ "Ŗ": "R",
406
+ "ŗ": "r",
407
+ "Ř": "R",
408
+ "ř": "r",
409
+ "Ś": "S",
410
+ "ś": "s",
411
+ "Ŝ": "S",
412
+ "ŝ": "s",
413
+ "Ş": "S",
414
+ "ş": "s",
415
+ "Š": "S",
416
+ "š": "s",
417
+ "Ţ": "T",
418
+ "ţ": "t",
419
+ "Ť": "T",
420
+ "ť": "t",
421
+ "Ŧ": "T",
422
+ "ŧ": "t",
423
+ "Ũ": "U",
424
+ "ũ": "u",
425
+ "Ū": "U",
426
+ "ū": "u",
427
+ "Ŭ": "U",
428
+ "ŭ": "u",
429
+ "Ů": "U",
430
+ "ů": "u",
431
+ "Ű": "U",
432
+ "ű": "u",
433
+ "Ų": "U",
434
+ "ų": "u",
435
+ "Ŵ": "W",
436
+ "ŵ": "w",
437
+ "Ŷ": "Y",
438
+ "ŷ": "y",
439
+ "Ÿ": "Y",
440
+ "Ź": "Z",
441
+ "ź": "z",
442
+ "Ż": "Z",
443
+ "ż": "z",
444
+ "Ž": "Z",
445
+ "ž": "z",
446
+ "ſ": "s",
447
+ "ƒ": "f",
448
+ "Ơ": "O",
449
+ "ơ": "o",
450
+ "Ư": "U",
451
+ "ư": "u",
452
+ "Ǎ": "A",
453
+ "ǎ": "a",
454
+ "Ǐ": "I",
455
+ "ǐ": "i",
456
+ "Ǒ": "O",
457
+ "ǒ": "o",
458
+ "Ǔ": "U",
459
+ "ǔ": "u",
460
+ "Ǖ": "U",
461
+ "ǖ": "u",
462
+ "Ǘ": "U",
463
+ "ǘ": "u",
464
+ "Ǚ": "U",
465
+ "ǚ": "u",
466
+ "Ǜ": "U",
467
+ "ǜ": "u",
468
+ "Ǻ": "A",
469
+ "ǻ": "a",
470
+ "Ǽ": "AE",
471
+ "ǽ": "ae",
472
+ "Ǿ": "O",
473
+ "ǿ": "o",
474
+
475
+ // extra
476
+ ' ': '_',
477
+ "'": '',
478
+ '?': '',
479
+ '/': '',
480
+ '\\': '',
481
+ '.': '',
482
+ ',': '',
483
+ '`': '',
484
+ '>': '',
485
+ '<': '',
486
+ '"': '',
487
+ '[': '',
488
+ ']': '',
489
+ '|': '',
490
+ '{': '',
491
+ '}': '',
492
+ '(': '',
493
+ ')': ''
494
+ };
495
+
496
+ // vars
497
+ var nonWord = /\W/g;
498
+ var mapping = function (c) {
499
+ return (map[c] !== undefined) ? map[c] : c;
500
+ };
501
+
502
+ // replace
503
+ str = str.replace(nonWord, mapping);
504
+
505
+ // lowercase
506
+ str = str.toLowerCase();
507
+
508
+ // return
509
+ return str;
510
+ };
511
+
512
+ /**
513
+ * acf.strMatch
514
+ *
515
+ * Returns the number of characters that match between two strings
516
+ *
517
+ * @date 1/2/18
518
+ * @since 5.6.5
519
+ *
520
+ * @param type $var Description. Default.
521
+ * @return type Description.
522
+ */
523
+
524
+ acf.strMatch = function( s1, s2 ){
525
+
526
+ // vars
527
+ var val = 0;
528
+ var min = Math.min( s1.length, s2.length );
529
+
530
+ // loop
531
+ for( var i = 0; i < min; i++ ) {
532
+ if( s1[i] !== s2[i] ) {
533
+ break;
534
+ }
535
+ val++;
536
+ }
537
+
538
+ // return
539
+ return val;
540
+ };
541
+
542
+ /**
543
+ * acf.decode
544
+ *
545
+ * description
546
+ *
547
+ * @date 13/1/18
548
+ * @since 5.6.5
549
+ *
550
+ * @param type $var Description. Default.
551
+ * @return type Description.
552
+ */
553
+
554
+ acf.decode = function( string ){
555
+ return $('<textarea/>').html( string ).text();
556
+ };
557
+
558
+ /**
559
+ * acf.strEscape
560
+ *
561
+ * description
562
+ *
563
+ * @date 3/2/18
564
+ * @since 5.6.5
565
+ *
566
+ * @param type $var Description. Default.
567
+ * @return type Description.
568
+ */
569
+
570
+ acf.strEscape = function( string ){
571
+ return $('<div>').text(string).html();
572
+ };
573
+
574
+ /**
575
+ * parseArgs
576
+ *
577
+ * Merges together defaults and args much like the WP wp_parse_args function
578
+ *
579
+ * @date 14/12/17
580
+ * @since 5.6.5
581
+ *
582
+ * @param object args
583
+ * @param object defaults
584
+ * @return object
585
+ */
586
+
587
+ acf.parseArgs = function( args, defaults ){
588
+ if( typeof args !== 'object' ) args = {};
589
+ if( typeof defaults !== 'object' ) defaults = {};
590
+ return $.extend({}, defaults, args);
591
+ }
592
+
593
+ /**
594
+ * __
595
+ *
596
+ * Retrieve the translation of $text.
597
+ *
598
+ * @date 16/4/18
599
+ * @since 5.6.9
600
+ *
601
+ * @param string text Text to translate.
602
+ * @return string Translated text.
603
+ */
604
+
605
+ if( window.acfL10n == undefined ) {
606
+ acfL10n = {};
607
+ }
608
+
609
+ acf.__ = function( text ){
610
+ return acfL10n[ text ] || text;
611
+ };
612
+
613
+ /**
614
+ * _x
615
+ *
616
+ * Retrieve translated string with gettext context.
617
+ *
618
+ * @date 16/4/18
619
+ * @since 5.6.9
620
+ *
621
+ * @param string text Text to translate.
622
+ * @param string context Context information for the translators.
623
+ * @return string Translated text.
624
+ */
625
+
626
+ acf._x = function( text, context ){
627
+ return acfL10n[ text + '.' + context ] || acfL10n[ text ] || text;
628
+ };
629
+
630
+ /**
631
+ * _n
632
+ *
633
+ * Retrieve the plural or single form based on the amount.
634
+ *
635
+ * @date 16/4/18
636
+ * @since 5.6.9
637
+ *
638
+ * @param string single Single text to translate.
639
+ * @param string plural Plural text to translate.
640
+ * @param int number The number to compare against.
641
+ * @return string Translated text.
642
+ */
643
+
644
+ acf._n = function( single, plural, number ){
645
+ if( number == 1 ) {
646
+ return acf.__(single);
647
+ } else {
648
+ return acf.__(plural);
649
+ }
650
+ };
651
+
652
+ acf.isArray = function( a ){
653
+ return Array.isArray(a);
654
+ };
655
+
656
+ acf.isObject = function( a ){
657
+ return ( typeof a === 'object' );
658
+ }
659
+
660
+ /**
661
+ * serialize
662
+ *
663
+ * description
664
+ *
665
+ * @date 24/12/17
666
+ * @since 5.6.5
667
+ *
668
+ * @param type $var Description. Default.
669
+ * @return type Description.
670
+ */
671
+
672
+ var buildObject = function( obj, name, value ){
673
+
674
+ // replace [] with placeholder
675
+ name = name.replace('[]', '[%%index%%]');
676
+
677
+ // vars
678
+ var keys = name.match(/([^\[\]])+/g);
679
+ if( !keys ) return;
680
+ var length = keys.length;
681
+ var ref = obj;
682
+
683
+ // loop
684
+ for( var i = 0; i < length; i++ ) {
685
+
686
+ // vars
687
+ var key = String( keys[i] );
688
+
689
+ // value
690
+ if( i == length - 1 ) {
691
+
692
+ // %%index%%
693
+ if( key === '%%index%%' ) {
694
+ ref.push( value );
695
+
696
+ // default
697
+ } else {
698
+ ref[ key ] = value;
699
+ }
700
+
701
+ // path
702
+ } else {
703
+
704
+ // array
705
+ if( keys[i+1] === '%%index%%' ) {
706
+ if( !acf.isArray(ref[ key ]) ) {
707
+ ref[ key ] = [];
708
+ }
709
+
710
+ // object
711
+ } else {
712
+ if( !acf.isObject(ref[ key ]) ) {
713
+ ref[ key ] = {};
714
+ }
715
+ }
716
+
717
+ // crawl
718
+ ref = ref[ key ];
719
+ }
720
+ }
721
+ };
722
+
723
+ acf.serialize = function( $el, prefix ){
724
+
725
+ // vars
726
+ var obj = {};
727
+ var inputs = acf.serializeArray( $el );
728
+
729
+ // prefix
730
+ if( prefix !== undefined ) {
731
+
732
+ // filter and modify
733
+ inputs = inputs.filter(function( item ){
734
+ return item.name.indexOf(prefix) === 0;
735
+ }).map(function( item ){
736
+ item.name = item.name.slice(prefix.length);
737
+ return item;
738
+ });
739
+ }
740
+
741
+ // loop
742
+ for( var i = 0; i < inputs.length; i++ ) {
743
+ buildObject( obj, inputs[i].name, inputs[i].value );
744
+ }
745
+
746
+ // return
747
+ return obj;
748
+ };
749
+
750
+ /**
751
+ * acf.serializeArray
752
+ *
753
+ * Similar to $.serializeArray() but works with a parent wrapping element.
754
+ *
755
+ * @date 19/8/18
756
+ * @since 5.7.3
757
+ *
758
+ * @param jQuery $el The element or form to serialize.
759
+ * @return array
760
+ */
761
+
762
+ acf.serializeArray = function( $el ){
763
+ return $el.find('select, textarea, input').serializeArray();
764
+ }
765
+
766
+ /**
767
+ * acf.serializeForAjax
768
+ *
769
+ * Returns an object containing name => value data ready to be encoded for Ajax.
770
+ *
771
+ * @date 17/12/18
772
+ * @since 5.8.0
773
+ *
774
+ * @param jQUery $el The element or form to serialize.
775
+ * @return object
776
+ */
777
+ acf.serializeForAjax = function( $el ){
778
+
779
+ // vars
780
+ var data = {};
781
+ var index = {};
782
+
783
+ // Serialize inputs.
784
+ var inputs = acf.serializeArray( $el );
785
+
786
+ // Loop over inputs and build data.
787
+ inputs.map(function( item ){
788
+
789
+ // Append to array.
790
+ if( item.name.slice(-2) === '[]' ) {
791
+ data[ item.name ] = data[ item.name ] || [];
792
+ data[ item.name ].push( item.value );
793
+ // Append
794
+ } else {
795
+ data[ item.name ] = item.value;
796
+ }
797
+ });
798
+
799
+ // return
800
+ return data;
801
+ };
802
+
803
+ /**
804
+ * addAction
805
+ *
806
+ * Wrapper for acf.hooks.addAction
807
+ *
808
+ * @date 14/12/17
809
+ * @since 5.6.5
810
+ *
811
+ * @param n/a
812
+ * @return this
813
+ */
814
+
815
+ /*
816
+ var prefixAction = function( action ){
817
+ return 'acf_' + action;
818
+ }
819
+ */
820
+
821
+ acf.addAction = function( action, callback, priority, context ){
822
+ //action = prefixAction(action);
823
+ acf.hooks.addAction.apply(this, arguments);
824
+ return this;
825
+ };
826
+
827
+
828
+ /**
829
+ * removeAction
830
+ *
831
+ * Wrapper for acf.hooks.removeAction
832
+ *
833
+ * @date 14/12/17
834
+ * @since 5.6.5
835
+ *
836
+ * @param n/a
837
+ * @return this
838
+ */
839
+
840
+ acf.removeAction = function( action, callback ){
841
+ //action = prefixAction(action);
842
+ acf.hooks.removeAction.apply(this, arguments);
843
+ return this;
844
+ };
845
+
846
+
847
+ /**
848
+ * doAction
849
+ *
850
+ * Wrapper for acf.hooks.doAction
851
+ *
852
+ * @date 14/12/17
853
+ * @since 5.6.5
854
+ *
855
+ * @param n/a
856
+ * @return this
857
+ */
858
+
859
+ var actionHistory = {};
860
+ //var currentAction = false;
861
+ acf.doAction = function( action ){
862
+ //action = prefixAction(action);
863
+ //currentAction = action;
864
+ actionHistory[ action ] = 1;
865
+ acf.hooks.doAction.apply(this, arguments);
866
+ actionHistory[ action ] = 0;
867
+ return this;
868
+ };
869
+
870
+
871
+ /**
872
+ * doingAction
873
+ *
874
+ * Return true if doing action
875
+ *
876
+ * @date 14/12/17
877
+ * @since 5.6.5
878
+ *
879
+ * @param n/a
880
+ * @return this
881
+ */
882
+
883
+ acf.doingAction = function( action ){
884
+ //action = prefixAction(action);
885
+ return (actionHistory[ action ] === 1);
886
+ };
887
+
888
+
889
+ /**
890
+ * didAction
891
+ *
892
+ * Wrapper for acf.hooks.doAction
893
+ *
894
+ * @date 14/12/17
895
+ * @since 5.6.5
896
+ *
897
+ * @param n/a
898
+ * @return this
899
+ */
900
+
901
+ acf.didAction = function( action ){
902
+ //action = prefixAction(action);
903
+ return (actionHistory[ action ] !== undefined);
904
+ };
905
+
906
+ /**
907
+ * currentAction
908
+ *
909
+ * Wrapper for acf.hooks.doAction
910
+ *
911
+ * @date 14/12/17
912
+ * @since 5.6.5
913
+ *
914
+ * @param n/a
915
+ * @return this
916
+ */
917
+
918
+ acf.currentAction = function(){
919
+ for( var k in actionHistory ) {
920
+ if( actionHistory[k] ) {
921
+ return k;
922
+ }
923
+ }
924
+ return false;
925
+ };
926
+
927
+ /**
928
+ * addFilter
929
+ *
930
+ * Wrapper for acf.hooks.addFilter
931
+ *
932
+ * @date 14/12/17
933
+ * @since 5.6.5
934
+ *
935
+ * @param n/a
936
+ * @return this
937
+ */
938
+
939
+ acf.addFilter = function( action ){
940
+ //action = prefixAction(action);
941
+ acf.hooks.addFilter.apply(this, arguments);
942
+ return this;
943
+ };
944
+
945
+
946
+ /**
947
+ * removeFilter
948
+ *
949
+ * Wrapper for acf.hooks.removeFilter
950
+ *
951
+ * @date 14/12/17
952
+ * @since 5.6.5
953
+ *
954
+ * @param n/a
955
+ * @return this
956
+ */
957
+
958
+ acf.removeFilter = function( action ){
959
+ //action = prefixAction(action);
960
+ acf.hooks.removeFilter.apply(this, arguments);
961
+ return this;
962
+ };
963
+
964
+
965
+ /**
966
+ * applyFilters
967
+ *
968
+ * Wrapper for acf.hooks.applyFilters
969
+ *
970
+ * @date 14/12/17
971
+ * @since 5.6.5
972
+ *
973
+ * @param n/a
974
+ * @return this
975
+ */
976
+
977
+ acf.applyFilters = function( action ){
978
+ //action = prefixAction(action);
979
+ return acf.hooks.applyFilters.apply(this, arguments);
980
+ };
981
+
982
+
983
+ /**
984
+ * getArgs
985
+ *
986
+ * description
987
+ *
988
+ * @date 15/12/17
989
+ * @since 5.6.5
990
+ *
991
+ * @param type $var Description. Default.
992
+ * @return type Description.
993
+ */
994
+
995
+ acf.arrayArgs = function( args ){
996
+ return Array.prototype.slice.call( args );
997
+ };
998
+
999
+
1000
+ /**
1001
+ * extendArgs
1002
+ *
1003
+ * description
1004
+ *
1005
+ * @date 15/12/17
1006
+ * @since 5.6.5
1007
+ *
1008
+ * @param type $var Description. Default.
1009
+ * @return type Description.
1010
+ */
1011
+
1012
+ /*
1013
+ acf.extendArgs = function( ){
1014
+ var args = Array.prototype.slice.call( arguments );
1015
+ var realArgs = args.shift();
1016
+
1017
+ Array.prototype.push.call(arguments, 'bar')
1018
+ return Array.prototype.push.apply( args, arguments );
1019
+ };
1020
+ */
1021
+
1022
+ // Preferences
1023
+ // - use try/catch to avoid JS error if cookies are disabled on front-end form
1024
+ try {
1025
+ var preferences = JSON.parse(localStorage.getItem('acf')) || {};
1026
+ } catch(e) {
1027
+ var preferences = {};
1028
+ }
1029
+
1030
+
1031
+ /**
1032
+ * getPreferenceName
1033
+ *
1034
+ * Gets the true preference name.
1035
+ * Converts "this.thing" to "thing-123" if editing post 123.
1036
+ *
1037
+ * @date 11/11/17
1038
+ * @since 5.6.5
1039
+ *
1040
+ * @param string name
1041
+ * @return string
1042
+ */
1043
+
1044
+ var getPreferenceName = function( name ){
1045
+ if( name.substr(0, 5) === 'this.' ) {
1046
+ name = name.substr(5) + '-' + acf.get('post_id');
1047
+ }
1048
+ return name;
1049
+ };
1050
+
1051
+
1052
+ /**
1053
+ * acf.getPreference
1054
+ *
1055
+ * Gets a preference setting or null if not set.
1056
+ *
1057
+ * @date 11/11/17
1058
+ * @since 5.6.5
1059
+ *
1060
+ * @param string name
1061
+ * @return mixed
1062
+ */
1063
+
1064
+ acf.getPreference = function( name ){
1065
+ name = getPreferenceName( name );
1066
+ return preferences[ name ] || null;
1067
+ }
1068
+
1069
+
1070
+ /**
1071
+ * acf.setPreference
1072
+ *
1073
+ * Sets a preference setting.
1074
+ *
1075
+ * @date 11/11/17
1076
+ * @since 5.6.5
1077
+ *
1078
+ * @param string name
1079
+ * @param mixed value
1080
+ * @return n/a
1081
+ */
1082
+
1083
+ acf.setPreference = function( name, value ){
1084
+ name = getPreferenceName( name );
1085
+ if( value === null ) {
1086
+ delete preferences[ name ];
1087
+ } else {
1088
+ preferences[ name ] = value;
1089
+ }
1090
+ localStorage.setItem('acf', JSON.stringify(preferences));
1091
+ }
1092
+
1093
+
1094
+ /**
1095
+ * acf.removePreference
1096
+ *
1097
+ * Removes a preference setting.
1098
+ *
1099
+ * @date 11/11/17
1100
+ * @since 5.6.5
1101
+ *
1102
+ * @param string name
1103
+ * @return n/a
1104
+ */
1105
+
1106
+ acf.removePreference = function( name ){
1107
+ acf.setPreference(name, null);
1108
+ };
1109
+
1110
+
1111
+ /**
1112
+ * remove
1113
+ *
1114
+ * Removes an element with fade effect
1115
+ *
1116
+ * @date 1/1/18
1117
+ * @since 5.6.5
1118
+ *
1119
+ * @param type $var Description. Default.
1120
+ * @return type Description.
1121
+ */
1122
+
1123
+ acf.remove = function( props ){
1124
+
1125
+ // allow jQuery
1126
+ if( props instanceof jQuery ) {
1127
+ props = {
1128
+ target: props
1129
+ };
1130
+ }
1131
+
1132
+ // defaults
1133
+ props = acf.parseArgs(props, {
1134
+ target: false,
1135
+ endHeight: 0,
1136
+ complete: function(){}
1137
+ });
1138
+
1139
+ // action
1140
+ acf.doAction('remove', props.target);
1141
+
1142
+ // tr
1143
+ if( props.target.is('tr') ) {
1144
+ removeTr( props );
1145
+
1146
+ // div
1147
+ } else {
1148
+ removeDiv( props );
1149
+ }
1150
+
1151
+ };
1152
+
1153
+ /**
1154
+ * removeDiv
1155
+ *
1156
+ * description
1157
+ *
1158
+ * @date 16/2/18
1159
+ * @since 5.6.9
1160
+ *
1161
+ * @param type $var Description. Default.
1162
+ * @return type Description.
1163
+ */
1164
+
1165
+ var removeDiv = function( props ){
1166
+
1167
+ // vars
1168
+ var $el = props.target;
1169
+ var height = $el.height();
1170
+ var width = $el.width();
1171
+ var margin = $el.css('margin');
1172
+ var outerHeight = $el.outerHeight(true);
1173
+ var style = $el.attr('style') + ''; // needed to copy
1174
+
1175
+ // wrap
1176
+ $el.wrap('<div class="acf-temp-remove" style="height:' + outerHeight + 'px"></div>');
1177
+ var $wrap = $el.parent();
1178
+
1179
+ // set pos
1180
+ $el.css({
1181
+ height: height,
1182
+ width: width,
1183
+ margin: margin,
1184
+ position: 'absolute'
1185
+ });
1186
+
1187
+ // fade wrap
1188
+ setTimeout(function(){
1189
+
1190
+ $wrap.css({
1191
+ opacity: 0,
1192
+ height: props.endHeight
1193
+ });
1194
+
1195
+ }, 50);
1196
+
1197
+ // remove
1198
+ setTimeout(function(){
1199
+
1200
+ $el.attr('style', style);
1201
+ $wrap.remove();
1202
+ props.complete();
1203
+
1204
+ }, 301);
1205
+ };
1206
+
1207
+ /**
1208
+ * removeTr
1209
+ *
1210
+ * description
1211
+ *
1212
+ * @date 16/2/18
1213
+ * @since 5.6.9
1214
+ *
1215
+ * @param type $var Description. Default.
1216
+ * @return type Description.
1217
+ */
1218
+
1219
+ var removeTr = function( props ){
1220
+
1221
+ // vars
1222
+ var $tr = props.target;
1223
+ var height = $tr.height();
1224
+ var children = $tr.children().length;
1225
+
1226
+ // create dummy td
1227
+ var $td = $('<td class="acf-temp-remove" style="padding:0; height:' + height + 'px" colspan="' + children + '"></td>');
1228
+
1229
+ // fade away tr
1230
+ $tr.addClass('acf-remove-element');
1231
+
1232
+ // update HTML after fade animation
1233
+ setTimeout(function(){
1234
+ $tr.html( $td );
1235
+ }, 251);
1236
+
1237
+ // allow .acf-temp-remove to exist before changing CSS
1238
+ setTimeout(function(){
1239
+
1240
+ // remove class
1241
+ $tr.removeClass('acf-remove-element');
1242
+
1243
+ // collapse
1244
+ $td.css({
1245
+ height: props.endHeight
1246
+ });
1247
+
1248
+ }, 300);
1249
+
1250
+ // remove
1251
+ setTimeout(function(){
1252
+
1253
+ $tr.remove();
1254
+ props.complete();
1255
+
1256
+ }, 451);
1257
+ };
1258
+
1259
+ /**
1260
+ * duplicate
1261
+ *
1262
+ * description
1263
+ *
1264
+ * @date 3/1/18
1265
+ * @since 5.6.5
1266
+ *
1267
+ * @param type $var Description. Default.
1268
+ * @return type Description.
1269
+ */
1270
+
1271
+ acf.duplicate = function( args ){
1272
+
1273
+ // allow jQuery
1274
+ if( args instanceof jQuery ) {
1275
+ args = {
1276
+ target: args
1277
+ };
1278
+ }
1279
+
1280
+ // vars
1281
+ var timeout = 0;
1282
+
1283
+ // defaults
1284
+ args = acf.parseArgs(args, {
1285
+ target: false,
1286
+ search: '',
1287
+ replace: '',
1288
+ before: function( $el ){},
1289
+ after: function( $el, $el2 ){},
1290
+ append: function( $el, $el2 ){
1291
+ $el.after( $el2 );
1292
+ timeout = 1;
1293
+ }
1294
+ });
1295
+
1296
+ // compatibility
1297
+ args.target = args.target || args.$el;
1298
+
1299
+ // vars
1300
+ var $el = args.target;
1301
+
1302
+ // search
1303
+ args.search = args.search || $el.attr('data-id');
1304
+ args.replace = args.replace || acf.uniqid();
1305
+
1306
+ // before
1307
+ // - allow acf to modify DOM
1308
+ // - fixes bug where select field option is not selected
1309
+ args.before( $el );
1310
+ acf.doAction('before_duplicate', $el);
1311
+
1312
+ // clone
1313
+ var $el2 = $el.clone();
1314
+
1315
+ // rename
1316
+ acf.rename({
1317
+ target: $el2,
1318
+ search: args.search,
1319
+ replace: args.replace,
1320
+ });
1321
+
1322
+ // remove classes
1323
+ $el2.removeClass('acf-clone');
1324
+ $el2.find('.ui-sortable').removeClass('ui-sortable');
1325
+
1326
+ // after
1327
+ // - allow acf to modify DOM
1328
+ args.after( $el, $el2 );
1329
+ acf.doAction('after_duplicate', $el, $el2 );
1330
+
1331
+ // append
1332
+ args.append( $el, $el2 );
1333
+
1334
+ // append
1335
+ // - allow element to be moved into a visible position before fire action
1336
+ //var callback = function(){
1337
+ acf.doAction('append', $el2);
1338
+ //};
1339
+ //if( timeout ) {
1340
+ // setTimeout(callback, timeout);
1341
+ //} else {
1342
+ // callback();
1343
+ //}
1344
+
1345
+ // return
1346
+ return $el2;
1347
+ };
1348
+
1349
+ /**
1350
+ * rename
1351
+ *
1352
+ * description
1353
+ *
1354
+ * @date 7/1/18
1355
+ * @since 5.6.5
1356
+ *
1357
+ * @param type $var Description. Default.
1358
+ * @return type Description.
1359
+ */
1360
+
1361
+ acf.rename = function( args ){
1362
+
1363
+ // allow jQuery
1364
+ if( args instanceof jQuery ) {
1365
+ args = {
1366
+ target: args
1367
+ };
1368
+ }
1369
+
1370
+ // defaults
1371
+ args = acf.parseArgs(args, {
1372
+ target: false,
1373
+ destructive: false,
1374
+ search: '',
1375
+ replace: '',
1376
+ });
1377
+
1378
+ // vars
1379
+ var $el = args.target;
1380
+ var search = args.search || $el.attr('data-id');
1381
+ var replace = args.replace || acf.uniqid('acf');
1382
+ var replaceAttr = function(i, value){
1383
+ return value.replace( search, replace );
1384
+ }
1385
+
1386
+ // replace (destructive)
1387
+ if( args.destructive ) {
1388
+ var html = $el.outerHTML();
1389
+ html = acf.strReplace( search, replace, html );
1390
+ $el.replaceWith( html );
1391
+
1392
+ // replace
1393
+ } else {
1394
+ $el.attr('data-id', replace);
1395
+ $el.find('[id*="' + search + '"]').attr('id', replaceAttr);
1396
+ $el.find('[for*="' + search + '"]').attr('for', replaceAttr);
1397
+ $el.find('[name*="' + search + '"]').attr('name', replaceAttr);
1398
+ }
1399
+
1400
+ // return
1401
+ return $el;
1402
+ };
1403
+
1404
+
1405
+ /**
1406
+ * acf.prepareForAjax
1407
+ *
1408
+ * description
1409
+ *
1410
+ * @date 4/1/18
1411
+ * @since 5.6.5
1412
+ *
1413
+ * @param type $var Description. Default.
1414
+ * @return type Description.
1415
+ */
1416
+
1417
+ acf.prepareForAjax = function( data ){
1418
+
1419
+ // required
1420
+ data.nonce = acf.get('nonce');
1421
+ data.post_id = acf.get('post_id');
1422
+
1423
+ // language
1424
+ if( acf.has('language') ) {
1425
+ data.lang = acf.get('language');
1426
+ }
1427
+
1428
+ // filter for 3rd party customization
1429
+ data = acf.applyFilters('prepare_for_ajax', data);
1430
+
1431
+ // return
1432
+ return data;
1433
+ };
1434
+
1435
+
1436
+ /**
1437
+ * acf.startButtonLoading
1438
+ *
1439
+ * description
1440
+ *
1441
+ * @date 5/1/18
1442
+ * @since 5.6.5
1443
+ *
1444
+ * @param type $var Description. Default.
1445
+ * @return type Description.
1446
+ */
1447
+
1448
+ acf.startButtonLoading = function( $el ){
1449
+ $el.prop('disabled', true);
1450
+ $el.after(' <i class="acf-loading"></i>');
1451
+ }
1452
+
1453
+ acf.stopButtonLoading = function( $el ){
1454
+ $el.prop('disabled', false);
1455
+ $el.next('.acf-loading').remove();
1456
+ }
1457
+
1458
+
1459
+ /**
1460
+ * acf.showLoading
1461
+ *
1462
+ * description
1463
+ *
1464
+ * @date 12/1/18
1465
+ * @since 5.6.5
1466
+ *
1467
+ * @param type $var Description. Default.
1468
+ * @return type Description.
1469
+ */
1470
+
1471
+ acf.showLoading = function( $el ){
1472
+ $el.append('<div class="acf-loading-overlay"><i class="acf-loading"></i></div>');
1473
+ };
1474
+
1475
+ acf.hideLoading = function( $el ){
1476
+ $el.children('.acf-loading-overlay').remove();
1477
+ };
1478
+
1479
+
1480
+ /**
1481
+ * acf.updateUserSetting
1482
+ *
1483
+ * description
1484
+ *
1485
+ * @date 5/1/18
1486
+ * @since 5.6.5
1487
+ *
1488
+ * @param type $var Description. Default.
1489
+ * @return type Description.
1490
+ */
1491
+
1492
+ acf.updateUserSetting = function( name, value ){
1493
+
1494
+ var ajaxData = {
1495
+ action: 'acf/ajax/user_setting',
1496
+ name: name,
1497
+ value: value
1498
+ };
1499
+
1500
+ $.ajax({
1501
+ url: acf.get('ajaxurl'),
1502
+ data: acf.prepareForAjax(ajaxData),
1503
+ type: 'post',
1504
+ dataType: 'html'
1505
+ });
1506
+
1507
+ };
1508
+
1509
+
1510
+ /**
1511
+ * acf.val
1512
+ *
1513
+ * description
1514
+ *
1515
+ * @date 8/1/18
1516
+ * @since 5.6.5
1517
+ *
1518
+ * @param type $var Description. Default.
1519
+ * @return type Description.
1520
+ */
1521
+
1522
+ acf.val = function( $input, value, silent ){
1523
+
1524
+ // vars
1525
+ var prevValue = $input.val();
1526
+
1527
+ // bail if no change
1528
+ if( value === prevValue ) {
1529
+ return false
1530
+ }
1531
+
1532
+ // update value
1533
+ $input.val( value );
1534
+
1535
+ // prevent select elements displaying blank value if option doesn't exist
1536
+ if( $input.is('select') && $input.val() === null ) {
1537
+ $input.val( prevValue );
1538
+ return false;
1539
+ }
1540
+
1541
+ // update with trigger
1542
+ if( silent !== true ) {
1543
+ $input.trigger('change');
1544
+ }
1545
+
1546
+ // return
1547
+ return true;
1548
+ };
1549
+
1550
+ /**
1551
+ * acf.show
1552
+ *
1553
+ * description
1554
+ *
1555
+ * @date 9/2/18
1556
+ * @since 5.6.5
1557
+ *
1558
+ * @param type $var Description. Default.
1559
+ * @return type Description.
1560
+ */
1561
+
1562
+ acf.show = function( $el, lockKey ){
1563
+
1564
+ // unlock
1565
+ if( lockKey ) {
1566
+ acf.unlock($el, 'hidden', lockKey);
1567
+ }
1568
+
1569
+ // bail early if $el is still locked
1570
+ if( acf.isLocked($el, 'hidden') ) {
1571
+ //console.log( 'still locked', getLocks( $el, 'hidden' ));
1572
+ return false;
1573
+ }
1574
+
1575
+ // $el is hidden, remove class and return true due to change in visibility
1576
+ if( $el.hasClass('acf-hidden') ) {
1577
+ $el.removeClass('acf-hidden');
1578
+ return true;
1579
+
1580
+ // $el is visible, return false due to no change in visibility
1581
+ } else {
1582
+ return false;
1583
+ }
1584
+ };
1585
+
1586
+
1587
+ /**
1588
+ * acf.hide
1589
+ *
1590
+ * description
1591
+ *
1592
+ * @date 9/2/18
1593
+ * @since 5.6.5
1594
+ *
1595
+ * @param type $var Description. Default.
1596
+ * @return type Description.
1597
+ */
1598
+
1599
+ acf.hide = function( $el, lockKey ){
1600
+
1601
+ // lock
1602
+ if( lockKey ) {
1603
+ acf.lock($el, 'hidden', lockKey);
1604
+ }
1605
+
1606
+ // $el is hidden, return false due to no change in visibility
1607
+ if( $el.hasClass('acf-hidden') ) {
1608
+ return false;
1609
+
1610
+ // $el is visible, add class and return true due to change in visibility
1611
+ } else {
1612
+ $el.addClass('acf-hidden');
1613
+ return true;
1614
+ }
1615
+ };
1616
+
1617
+
1618
+ /**
1619
+ * acf.isHidden
1620
+ *
1621
+ * description
1622
+ *
1623
+ * @date 9/2/18
1624
+ * @since 5.6.5
1625
+ *
1626
+ * @param type $var Description. Default.
1627
+ * @return type Description.
1628
+ */
1629
+
1630
+ acf.isHidden = function( $el ){
1631
+ return $el.hasClass('acf-hidden');
1632
+ };
1633
+
1634
+
1635
+ /**
1636
+ * acf.isVisible
1637
+ *
1638
+ * description
1639
+ *
1640
+ * @date 9/2/18
1641
+ * @since 5.6.5
1642
+ *
1643
+ * @param type $var Description. Default.
1644
+ * @return type Description.
1645
+ */
1646
+
1647
+ acf.isVisible = function( $el ){
1648
+ return !acf.isHidden( $el );
1649
+ };
1650
+
1651
+
1652
+ /**
1653
+ * enable
1654
+ *
1655
+ * description
1656
+ *
1657
+ * @date 12/3/18
1658
+ * @since 5.6.9
1659
+ *
1660
+ * @param type $var Description. Default.
1661
+ * @return type Description.
1662
+ */
1663
+
1664
+ var enable = function( $el, lockKey ){
1665
+
1666
+ // check class. Allow .acf-disabled to overrule all JS
1667
+ if( $el.hasClass('acf-disabled') ) {
1668
+ return false;
1669
+ }
1670
+
1671
+ // unlock
1672
+ if( lockKey ) {
1673
+ acf.unlock($el, 'disabled', lockKey);
1674
+ }
1675
+
1676
+ // bail early if $el is still locked
1677
+ if( acf.isLocked($el, 'disabled') ) {
1678
+ return false;
1679
+ }
1680
+
1681
+ // $el is disabled, remove prop and return true due to change
1682
+ if( $el.prop('disabled') ) {
1683
+ $el.prop('disabled', false);
1684
+ return true;
1685
+
1686
+ // $el is enabled, return false due to no change
1687
+ } else {
1688
+ return false;
1689
+ }
1690
+ };
1691
+
1692
+ /**
1693
+ * acf.enable
1694
+ *
1695
+ * description
1696
+ *
1697
+ * @date 9/2/18
1698
+ * @since 5.6.5
1699
+ *
1700
+ * @param type $var Description. Default.
1701
+ * @return type Description.
1702
+ */
1703
+
1704
+ acf.enable = function( $el, lockKey ){
1705
+
1706
+ // enable single input
1707
+ if( $el.attr('name') ) {
1708
+ return enable( $el, lockKey );
1709
+ }
1710
+
1711
+ // find and enable child inputs
1712
+ // return true if any inputs have changed
1713
+ var results = false;
1714
+ $el.find('[name]').each(function(){
1715
+ var result = enable( $(this), lockKey );
1716
+ if( result ) {
1717
+ results = true;
1718
+ }
1719
+ });
1720
+ return results;
1721
+ };
1722
+
1723
+
1724
+ /**
1725
+ * disable
1726
+ *
1727
+ * description
1728
+ *
1729
+ * @date 12/3/18
1730
+ * @since 5.6.9
1731
+ *
1732
+ * @param type $var Description. Default.
1733
+ * @return type Description.
1734
+ */
1735
+
1736
+ var disable = function( $el, lockKey ){
1737
+
1738
+ // lock
1739
+ if( lockKey ) {
1740
+ acf.lock($el, 'disabled', lockKey);
1741
+ }
1742
+
1743
+ // $el is disabled, return false due to no change
1744
+ if( $el.prop('disabled') ) {
1745
+ return false;
1746
+
1747
+ // $el is enabled, add prop and return true due to change
1748
+ } else {
1749
+ $el.prop('disabled', true);
1750
+ return true;
1751
+ }
1752
+ };
1753
+
1754
+
1755
+ /**
1756
+ * acf.disable
1757
+ *
1758
+ * description
1759
+ *
1760
+ * @date 9/2/18
1761
+ * @since 5.6.5
1762
+ *
1763
+ * @param type $var Description. Default.
1764
+ * @return type Description.
1765
+ */
1766
+
1767
+ acf.disable = function( $el, lockKey ){
1768
+
1769
+ // disable single input
1770
+ if( $el.attr('name') ) {
1771
+ return disable( $el, lockKey );
1772
+ }
1773
+
1774
+ // find and enable child inputs
1775
+ // return true if any inputs have changed
1776
+ var results = false;
1777
+ $el.find('[name]').each(function(){
1778
+ var result = disable( $(this), lockKey );
1779
+ if( result ) {
1780
+ results = true;
1781
+ }
1782
+ });
1783
+ return results;
1784
+ };
1785
+
1786
+
1787
+ /**
1788
+ * acf.isset
1789
+ *
1790
+ * description
1791
+ *
1792
+ * @date 10/1/18
1793
+ * @since 5.6.5
1794
+ *
1795
+ * @param type $var Description. Default.
1796
+ * @return type Description.
1797
+ */
1798
+
1799
+ acf.isset = function( obj /*, level1, level2, ... */ ) {
1800
+ for( var i = 1; i < arguments.length; i++ ) {
1801
+ if( !obj || !obj.hasOwnProperty(arguments[i]) ) {
1802
+ return false;
1803
+ }
1804
+ obj = obj[ arguments[i] ];
1805
+ }
1806
+ return true;
1807
+ };
1808
+
1809
+ /**
1810
+ * acf.isget
1811
+ *
1812
+ * description
1813
+ *
1814
+ * @date 10/1/18
1815
+ * @since 5.6.5
1816
+ *
1817
+ * @param type $var Description. Default.
1818
+ * @return type Description.
1819
+ */
1820
+
1821
+ acf.isget = function( obj /*, level1, level2, ... */ ) {
1822
+ for( var i = 1; i < arguments.length; i++ ) {
1823
+ if( !obj || !obj.hasOwnProperty(arguments[i]) ) {
1824
+ return null;
1825
+ }
1826
+ obj = obj[ arguments[i] ];
1827
+ }
1828
+ return obj;
1829
+ };
1830
+
1831
+ /**
1832
+ * acf.getFileInputData
1833
+ *
1834
+ * description
1835
+ *
1836
+ * @date 10/1/18
1837
+ * @since 5.6.5
1838
+ *
1839
+ * @param type $var Description. Default.
1840
+ * @return type Description.
1841
+ */
1842
+
1843
+ acf.getFileInputData = function( $input, callback ){
1844
+
1845
+ // vars
1846
+ var value = $input.val();
1847
+
1848
+ // bail early if no value
1849
+ if( !value ) {
1850
+ return false;
1851
+ }
1852
+
1853
+ // data
1854
+ var data = {
1855
+ url: value
1856
+ };
1857
+
1858
+ // modern browsers
1859
+ var file = acf.isget( $input[0], 'files', 0);
1860
+ if( file ){
1861
+
1862
+ // update data
1863
+ data.size = file.size;
1864
+ data.type = file.type;
1865
+
1866
+ // image
1867
+ if( file.type.indexOf('image') > -1 ) {
1868
+
1869
+ // vars
1870
+ var windowURL = window.URL || window.webkitURL;
1871
+ var img = new Image();
1872
+
1873
+ img.onload = function() {
1874
+
1875
+ // update
1876
+ data.width = this.width;
1877
+ data.height = this.height;
1878
+
1879
+ callback( data );
1880
+ };
1881
+ img.src = windowURL.createObjectURL( file );
1882
+ } else {
1883
+ callback( data );
1884
+ }
1885
+ } else {
1886
+ callback( data );
1887
+ }
1888
+ };
1889
+
1890
+ /**
1891
+ * acf.isAjaxSuccess
1892
+ *
1893
+ * description
1894
+ *
1895
+ * @date 18/1/18
1896
+ * @since 5.6.5
1897
+ *
1898
+ * @param type $var Description. Default.
1899
+ * @return type Description.
1900
+ */
1901
+
1902
+ acf.isAjaxSuccess = function( json ){
1903
+ return ( json && json.success );
1904
+ };
1905
+
1906
+ /**
1907
+ * acf.getAjaxMessage
1908
+ *
1909
+ * description
1910
+ *
1911
+ * @date 18/1/18
1912
+ * @since 5.6.5
1913
+ *
1914
+ * @param type $var Description. Default.
1915
+ * @return type Description.
1916
+ */
1917
+
1918
+ acf.getAjaxMessage = function( json ){
1919
+ return acf.isget( json, 'data', 'message' );
1920
+ };
1921
+
1922
+ /**
1923
+ * acf.getAjaxError
1924
+ *
1925
+ * description
1926
+ *
1927
+ * @date 18/1/18
1928
+ * @since 5.6.5
1929
+ *
1930
+ * @param type $var Description. Default.
1931
+ * @return type Description.
1932
+ */
1933
+
1934
+ acf.getAjaxError = function( json ){
1935
+ return acf.isget( json, 'data', 'error' );
1936
+ };
1937
+
1938
+
1939
+ /**
1940
+ * acf.renderSelect
1941
+ *
1942
+ * Renders the innter html for a select field.
1943
+ *
1944
+ * @date 19/2/18
1945
+ * @since 5.6.9
1946
+ *
1947
+ * @param jQuery $select The select element.
1948
+ * @param array choices An array of choices.
1949
+ * @return void
1950
+ */
1951
+
1952
+ acf.renderSelect = function( $select, choices ){
1953
+
1954
+ // vars
1955
+ var value = $select.val();
1956
+ var values = [];
1957
+
1958
+ // callback
1959
+ var crawl = function( items ){
1960
+
1961
+ // vars
1962
+ var itemsHtml = '';
1963
+
1964
+ // loop
1965
+ items.map(function( item ){
1966
+
1967
+ // vars
1968
+ var text = item.text || item.label || '';
1969
+ var id = item.id || item.value || '';
1970
+
1971
+ // append
1972
+ values.push(id);
1973
+
1974
+ // optgroup
1975
+ if( item.children ) {
1976
+ itemsHtml += '<optgroup label="' + acf.strEscape(text) + '">' + crawl( item.children ) + '</optgroup>';
1977
+
1978
+ // option
1979
+ } else {
1980
+ itemsHtml += '<option value="' + id + '"' + (item.disabled ? ' disabled="disabled"' : '') + '>' + acf.strEscape(text) + '</option>';
1981
+ }
1982
+ });
1983
+
1984
+ // return
1985
+ return itemsHtml;
1986
+ };
1987
+
1988
+ // update HTML
1989
+ $select.html( crawl(choices) );
1990
+
1991
+ // update value
1992
+ if( values.indexOf(value) > -1 ){
1993
+ $select.val( value );
1994
+ }
1995
+
1996
+ // return selected value
1997
+ return $select.val();
1998
+ };
1999
+
2000
+ /**
2001
+ * acf.lock
2002
+ *
2003
+ * Creates a "lock" on an element for a given type and key
2004
+ *
2005
+ * @date 22/2/18
2006
+ * @since 5.6.9
2007
+ *
2008
+ * @param jQuery $el The element to lock.
2009
+ * @param string type The type of lock such as "condition" or "visibility".
2010
+ * @param string key The key that will be used to unlock.
2011
+ * @return void
2012
+ */
2013
+
2014
+ var getLocks = function( $el, type ){
2015
+ return $el.data('acf-lock-'+type) || [];
2016
+ };
2017
+
2018
+ var setLocks = function( $el, type, locks ){
2019
+ $el.data('acf-lock-'+type, locks);
2020
+ }
2021
+
2022
+ acf.lock = function( $el, type, key ){
2023
+ var locks = getLocks( $el, type );
2024
+ var i = locks.indexOf(key);
2025
+ if( i < 0 ) {
2026
+ locks.push( key );
2027
+ setLocks( $el, type, locks );
2028
+ }
2029
+ };
2030
+
2031
+ /**
2032
+ * acf.unlock
2033
+ *
2034
+ * Unlocks a "lock" on an element for a given type and key
2035
+ *
2036
+ * @date 22/2/18
2037
+ * @since 5.6.9
2038
+ *
2039
+ * @param jQuery $el The element to lock.
2040
+ * @param string type The type of lock such as "condition" or "visibility".
2041
+ * @param string key The key that will be used to unlock.
2042
+ * @return void
2043
+ */
2044
+
2045
+ acf.unlock = function( $el, type, key ){
2046
+ var locks = getLocks( $el, type );
2047
+ var i = locks.indexOf(key);
2048
+ if( i > -1 ) {
2049
+ locks.splice(i, 1);
2050
+ setLocks( $el, type, locks );
2051
+ }
2052
+
2053
+ // return true if is unlocked (no locks)
2054
+ return (locks.length === 0);
2055
+ };
2056
+
2057
+ /**
2058
+ * acf.isLocked
2059
+ *
2060
+ * Returns true if a lock exists for a given type
2061
+ *
2062
+ * @date 22/2/18
2063
+ * @since 5.6.9
2064
+ *
2065
+ * @param jQuery $el The element to lock.
2066
+ * @param string type The type of lock such as "condition" or "visibility".
2067
+ * @return void
2068
+ */
2069
+
2070
+ acf.isLocked = function( $el, type ){
2071
+ return ( getLocks( $el, type ).length > 0 );
2072
+ };
2073
+
2074
+ /**
2075
+ * acf.isGutenberg
2076
+ *
2077
+ * Returns true if the Gutenberg editor is being used.
2078
+ *
2079
+ * @date 14/11/18
2080
+ * @since 5.8.0
2081
+ *
2082
+ * @param vois
2083
+ * @return bool
2084
+ */
2085
+ acf.isGutenberg = function(){
2086
+ return ( window.wp && wp.data && wp.data.select && wp.data.select( 'core/editor' ) );
2087
+ };
2088
+
2089
+ /**
2090
+ * acf.objectToArray
2091
+ *
2092
+ * Returns an array of items from the given object.
2093
+ *
2094
+ * @date 20/11/18
2095
+ * @since 5.8.0
2096
+ *
2097
+ * @param object obj The object of items.
2098
+ * @return array
2099
+ */
2100
+ acf.objectToArray = function( obj ){
2101
+ return Object.keys( obj ).map(function( key ){
2102
+ return obj[key];
2103
+ });
2104
+ };
2105
+
2106
+ /*
2107
+ * exists
2108
+ *
2109
+ * This function will return true if a jQuery selection exists
2110
+ *
2111
+ * @type function
2112
+ * @date 8/09/2014
2113
+ * @since 5.0.0
2114
+ *
2115
+ * @param n/a
2116
+ * @return (boolean)
2117
+ */
2118
+
2119
+ $.fn.exists = function() {
2120
+ return $(this).length>0;
2121
+ };
2122
+
2123
+
2124
+ /*
2125
+ * outerHTML
2126
+ *
2127
+ * This function will return a string containing the HTML of the selected element
2128
+ *
2129
+ * @type function
2130
+ * @date 19/11/2013
2131
+ * @since 5.0.0
2132
+ *
2133
+ * @param $.fn
2134
+ * @return (string)
2135
+ */
2136
+
2137
+ $.fn.outerHTML = function() {
2138
+ return $(this).get(0).outerHTML;
2139
+ };
2140
+
2141
+ /*
2142
+ * indexOf
2143
+ *
2144
+ * This function will provide compatibility for ie8
2145
+ *
2146
+ * @type function
2147
+ * @date 5/3/17
2148
+ * @since 5.5.10
2149
+ *
2150
+ * @param n/a
2151
+ * @return n/a
2152
+ */
2153
+
2154
+ if( !Array.prototype.indexOf ) {
2155
+
2156
+ Array.prototype.indexOf = function(val) {
2157
+ return $.inArray(val, this);
2158
+ };
2159
+
2160
+ }
2161
+
2162
+
2163
+ // Set up actions from events
2164
+ $(document).ready(function(){
2165
+ acf.doAction('ready');
2166
+ });
2167
+
2168
+ $(window).on('load', function(){
2169
+ acf.doAction('load');
2170
+ });
2171
+
2172
+ $(window).on('beforeunload', function(){
2173
+ acf.doAction('unload');
2174
+ });
2175
+
2176
+ $(window).on('resize', function(){
2177
+ acf.doAction('resize');
2178
+ });
2179
+
2180
+ $(document).on('sortstart', function( event, ui ) {
2181
+ acf.doAction('sortstart', ui.item, ui.placeholder);
2182
+ });
2183
+
2184
+ $(document).on('sortstop', function( event, ui ) {
2185
+ acf.doAction('sortstop', ui.item, ui.placeholder);
2186
+ });
2187
+
2188
+ })(jQuery);
assets/build/js/_field-group-compatibility.js ADDED
@@ -0,0 +1,281 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ var _acf = acf.getCompatibility( acf );
4
+
5
+ /**
6
+ * fieldGroupCompatibility
7
+ *
8
+ * Compatibility layer for extinct acf.field_group
9
+ *
10
+ * @date 15/12/17
11
+ * @since 5.7.0
12
+ *
13
+ * @param void
14
+ * @return void
15
+ */
16
+
17
+ _acf.field_group = {
18
+
19
+ save_field: function( $field, type ){
20
+ type = (type !== undefined) ? type : 'settings';
21
+ acf.getFieldObject( $field ).save( type );
22
+ },
23
+
24
+ delete_field: function( $field, animate ){
25
+ animate = (animate !== undefined) ? animate : true;
26
+ acf.getFieldObject( $field ).delete({
27
+ animate: animate
28
+ });
29
+ },
30
+
31
+ update_field_meta: function( $field, name, value ){
32
+ acf.getFieldObject( $field ).prop( name, value );
33
+ },
34
+
35
+ delete_field_meta: function( $field, name ){
36
+ acf.getFieldObject( $field ).prop( name, null );
37
+ }
38
+ };
39
+
40
+ /**
41
+ * fieldGroupCompatibility.field_object
42
+ *
43
+ * Compatibility layer for extinct acf.field_group.field_object
44
+ *
45
+ * @date 15/12/17
46
+ * @since 5.7.0
47
+ *
48
+ * @param void
49
+ * @return void
50
+ */
51
+
52
+ _acf.field_group.field_object = acf.model.extend({
53
+
54
+ // vars
55
+ type: '',
56
+ o: {},
57
+ $field: null,
58
+ $settings: null,
59
+
60
+ tag: function( tag ) {
61
+
62
+ // vars
63
+ var type = this.type;
64
+
65
+
66
+ // explode, add 'field' and implode
67
+ // - open => open_field
68
+ // - change_type => change_field_type
69
+ var tags = tag.split('_');
70
+ tags.splice(1, 0, 'field');
71
+ tag = tags.join('_');
72
+
73
+
74
+ // add type
75
+ if( type ) {
76
+ tag += '/type=' + type;
77
+ }
78
+
79
+
80
+ // return
81
+ return tag;
82
+
83
+ },
84
+
85
+ selector: function(){
86
+
87
+ // vars
88
+ var selector = '.acf-field-object';
89
+ var type = this.type;
90
+
91
+
92
+ // add type
93
+ if( type ) {
94
+ selector += '-' + type;
95
+ selector = acf.str_replace('_', '-', selector);
96
+ }
97
+
98
+
99
+ // return
100
+ return selector;
101
+
102
+ },
103
+
104
+ _add_action: function( name, callback ) {
105
+
106
+ // vars
107
+ var model = this;
108
+
109
+
110
+ // add action
111
+ acf.add_action( this.tag(name), function( $field ){
112
+
113
+ // focus
114
+ model.set('$field', $field);
115
+
116
+
117
+ // callback
118
+ model[ callback ].apply(model, arguments);
119
+
120
+ });
121
+
122
+ },
123
+
124
+ _add_filter: function( name, callback ) {
125
+
126
+ // vars
127
+ var model = this;
128
+
129
+
130
+ // add action
131
+ acf.add_filter( this.tag(name), function( $field ){
132
+
133
+ // focus
134
+ model.set('$field', $field);
135
+
136
+
137
+ // callback
138
+ model[ callback ].apply(model, arguments);
139
+
140
+ });
141
+
142
+ },
143
+
144
+ _add_event: function( name, callback ) {
145
+
146
+ // vars
147
+ var model = this;
148
+ var event = name.substr(0,name.indexOf(' '));
149
+ var selector = name.substr(name.indexOf(' ')+1);
150
+ var context = this.selector();
151
+
152
+
153
+ // add event
154
+ $(document).on(event, context + ' ' + selector, function( e ){
155
+
156
+ // append $el to event object
157
+ e.$el = $(this);
158
+ e.$field = e.$el.closest('.acf-field-object');
159
+
160
+
161
+ // focus
162
+ model.set('$field', e.$field);
163
+
164
+
165
+ // callback
166
+ model[ callback ].apply(model, [e]);
167
+
168
+ });
169
+
170
+ },
171
+
172
+ _set_$field: function(){
173
+
174
+ // vars
175
+ this.o = this.$field.data();
176
+
177
+
178
+ // els
179
+ this.$settings = this.$field.find('> .settings > table > tbody');
180
+
181
+
182
+ // focus
183
+ this.focus();
184
+
185
+ },
186
+
187
+ focus: function(){
188
+
189
+ // do nothing
190
+
191
+ },
192
+
193
+ setting: function( name ) {
194
+
195
+ return this.$settings.find('> .acf-field-setting-' + name);
196
+
197
+ }
198
+
199
+ });
200
+
201
+
202
+ /*
203
+ * field
204
+ *
205
+ * This model fires actions and filters for registered fields
206
+ *
207
+ * @type function
208
+ * @date 21/02/2014
209
+ * @since 3.5.1
210
+ *
211
+ * @param n/a
212
+ * @return n/a
213
+ */
214
+
215
+ var actionManager = new acf.Model({
216
+
217
+ actions: {
218
+ 'open_field_object': 'onOpenFieldObject',
219
+ 'close_field_object': 'onCloseFieldObject',
220
+ 'add_field_object': 'onAddFieldObject',
221
+ 'duplicate_field_object': 'onDuplicateFieldObject',
222
+ 'delete_field_object': 'onDeleteFieldObject',
223
+ 'change_field_object_type': 'onChangeFieldObjectType',
224
+ 'change_field_object_label': 'onChangeFieldObjectLabel',
225
+ 'change_field_object_name': 'onChangeFieldObjectName',
226
+ 'change_field_object_parent': 'onChangeFieldObjectParent',
227
+ 'sortstop_field_object': 'onChangeFieldObjectParent'
228
+ },
229
+
230
+ onOpenFieldObject: function( field ){
231
+ acf.doAction('open_field', field.$el);
232
+ acf.doAction('open_field/type=' + field.get('type'), field.$el);
233
+
234
+ acf.doAction('render_field_settings', field.$el);
235
+ acf.doAction('render_field_settings/type=' + field.get('type'), field.$el);
236
+ },
237
+
238
+ onCloseFieldObject: function( field ){
239
+ acf.doAction('close_field', field.$el);
240
+ acf.doAction('close_field/type=' + field.get('type'), field.$el);
241
+ },
242
+
243
+ onAddFieldObject: function( field ){
244
+ acf.doAction('add_field', field.$el);
245
+ acf.doAction('add_field/type=' + field.get('type'), field.$el);
246
+ },
247
+
248
+ onDuplicateFieldObject: function( field ){
249
+ acf.doAction('duplicate_field', field.$el);
250
+ acf.doAction('duplicate_field/type=' + field.get('type'), field.$el);
251
+ },
252
+
253
+ onDeleteFieldObject: function( field ){
254
+ acf.doAction('delete_field', field.$el);
255
+ acf.doAction('delete_field/type=' + field.get('type'), field.$el);
256
+ },
257
+
258
+ onChangeFieldObjectType: function( field ){
259
+ acf.doAction('change_field_type', field.$el);
260
+ acf.doAction('change_field_type/type=' + field.get('type'), field.$el);
261
+
262
+ acf.doAction('render_field_settings', field.$el);
263
+ acf.doAction('render_field_settings/type=' + field.get('type'), field.$el);
264
+ },
265
+
266
+ onChangeFieldObjectLabel: function( field ){
267
+ acf.doAction('change_field_label', field.$el);
268
+ acf.doAction('change_field_label/type=' + field.get('type'), field.$el);
269
+ },
270
+
271
+ onChangeFieldObjectName: function( field ){
272
+ acf.doAction('change_field_name', field.$el);
273
+ acf.doAction('change_field_name/type=' + field.get('type'), field.$el);
274
+ },
275
+
276
+ onChangeFieldObjectParent: function( field ){
277
+ acf.doAction('update_field_parent', field.$el);
278
+ }
279
+ });
280
+
281
+ })(jQuery);
assets/build/js/_field-group-conditions.js ADDED
@@ -0,0 +1,403 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * ConditionalLogicFieldSetting
5
+ *
6
+ * description
7
+ *
8
+ * @date 3/2/18
9
+ * @since 5.6.5
10
+ *
11
+ * @param type $var Description. Default.
12
+ * @return type Description.
13
+ */
14
+
15
+ var ConditionalLogicFieldSetting = acf.FieldSetting.extend({
16
+ type: '',
17
+ name: 'conditional_logic',
18
+ events: {
19
+ 'change .conditions-toggle': 'onChangeToggle',
20
+ 'click .add-conditional-group': 'onClickAddGroup',
21
+ 'focus .condition-rule-field': 'onFocusField',
22
+ 'change .condition-rule-field': 'onChangeField',
23
+ 'change .condition-rule-operator': 'onChangeOperator',
24
+ 'click .add-conditional-rule': 'onClickAdd',
25
+ 'click .remove-conditional-rule': 'onClickRemove'
26
+ },
27
+
28
+ $rule: false,
29
+
30
+ scope: function( $rule ){
31
+ this.$rule = $rule;
32
+ return this;
33
+ },
34
+
35
+ ruleData: function( name, value ){
36
+ return this.$rule.data.apply( this.$rule, arguments );
37
+ },
38
+
39
+ $input: function( name ){
40
+ return this.$rule.find('.condition-rule-' + name);
41
+ },
42
+
43
+ $td: function( name ){
44
+ return this.$rule.find('td.' + name);
45
+ },
46
+
47
+ $toggle: function(){
48
+ return this.$('.conditions-toggle');
49
+ },
50
+
51
+ $control: function(){
52
+ return this.$('.rule-groups');
53
+ },
54
+
55
+ $groups: function(){
56
+ return this.$('.rule-group');
57
+ },
58
+
59
+ $rules: function(){
60
+ return this.$('.rule');
61
+ },
62
+
63
+ open: function(){
64
+ var $div = this.$control();
65
+ $div.show();
66
+ acf.enable( $div );
67
+ },
68
+
69
+ close: function(){
70
+ var $div = this.$control();
71
+ $div.hide();
72
+ acf.disable( $div );
73
+ },
74
+
75
+ render: function(){
76
+
77
+ // show
78
+ if( this.$toggle().prop('checked') ) {
79
+ this.renderRules();
80
+ this.open();
81
+
82
+ // hide
83
+ } else {
84
+ this.close();
85
+ }
86
+ },
87
+
88
+ renderRules: function(){
89
+
90
+ // vars
91
+ var self = this;
92
+
93
+ // loop
94
+ this.$rules().each(function(){
95
+ self.renderRule( $(this) );
96
+ });
97
+ },
98
+
99
+ renderRule: function( $rule ){
100
+ this.scope( $rule );
101
+ this.renderField();
102
+ this.renderOperator();
103
+ this.renderValue();
104
+ },
105
+
106
+ renderField: function(){
107
+
108
+ // vars
109
+ var choices = [];
110
+ var validFieldTypes = [];
111
+ var cid = this.fieldObject.cid;
112
+ var $select = this.$input('field');
113
+
114
+ // loop
115
+ acf.getFieldObjects().map(function( fieldObject ){
116
+
117
+ // vars
118
+ var choice = {
119
+ id: fieldObject.getKey(),
120
+ text: fieldObject.getLabel()
121
+ };
122
+
123
+ // bail early if is self
124
+ if( fieldObject.cid === cid ) {
125
+ choice.text += acf.__('(this field)');
126
+ choice.disabled = true;
127
+ }
128
+
129
+ // get selected field conditions
130
+ var conditionTypes = acf.getConditionTypes({
131
+ fieldType: fieldObject.getType()
132
+ });
133
+
134
+ // bail early if no types
135
+ if( !conditionTypes.length ) {
136
+ choice.disabled = true;
137
+ }
138
+
139
+ // calulate indents
140
+ var indents = fieldObject.getParents().length;
141
+ choice.text = '- '.repeat(indents) + choice.text;
142
+
143
+ // append
144
+ choices.push(choice);
145
+ });
146
+
147
+ // allow for scenario where only one field exists
148
+ if( !choices.length ) {
149
+ choices.push({
150
+ id: '',
151
+ text: acf.__('No toggle fields available'),
152
+ });
153
+ }
154
+
155
+ // render
156
+ acf.renderSelect( $select, choices );
157
+
158
+ // set
159
+ this.ruleData('field', $select.val());
160
+ },
161
+
162
+ renderOperator: function(){
163
+
164
+ // bail early if no field selected
165
+ if( !this.ruleData('field') ) {
166
+ return;
167
+ }
168
+
169
+ // vars
170
+ var $select = this.$input('operator');
171
+ var val = $select.val();
172
+ var choices = [];
173
+
174
+ // set saved value on first render
175
+ // - this allows the 2nd render to correctly select an option
176
+ if( $select.val() === null ) {
177
+ acf.renderSelect($select, [{
178
+ id: this.ruleData('operator'),
179
+ text: ''
180
+ }]);
181
+ }
182
+
183
+ // get selected field
184
+ var $field = acf.findFieldObject( this.ruleData('field') );
185
+ var field = acf.getFieldObject( $field );
186
+
187
+ // get selected field conditions
188
+ var conditionTypes = acf.getConditionTypes({
189
+ fieldType: field.getType()
190
+ });
191
+
192
+ // html
193
+ conditionTypes.map(function( model ){
194
+ choices.push({
195
+ id: model.prototype.operator,
196
+ text: acf.strEscape(model.prototype.label)
197
+ });
198
+ });
199
+
200
+ // render
201
+ acf.renderSelect( $select, choices );
202
+
203
+ // set
204
+ this.ruleData('operator', $select.val());
205
+ },
206
+
207
+ renderValue: function(){
208
+
209
+ // bail early if no field selected
210
+ if( !this.ruleData('field') || !this.ruleData('operator') ) {
211
+ return;
212
+ }
213
+
214
+ // vars
215
+ var $select = this.$input('value');
216
+ var $td = this.$td('value');
217
+ var val = $select.val();
218
+
219
+ // get selected field
220
+ var $field = acf.findFieldObject( this.ruleData('field') );
221
+ var field = acf.getFieldObject( $field );
222
+
223
+ // get selected field conditions
224
+ var conditionTypes = acf.getConditionTypes({
225
+ fieldType: field.getType(),
226
+ operator: this.ruleData('operator')
227
+ });
228
+
229
+ // html
230
+ var conditionType = conditionTypes[0].prototype;
231
+ var choices = conditionType.choices( field );
232
+
233
+ // create html: array
234
+ if( choices instanceof Array ) {
235
+ var $newSelect = $('<select></select>');
236
+ acf.renderSelect( $newSelect, choices );
237
+
238
+ // create html: string (<input />)
239
+ } else {
240
+ var $newSelect = $(choices);
241
+ }
242
+
243
+ // append
244
+ $select.detach();
245
+ $td.html( $newSelect );
246
+
247
+ // copy attrs
248
+ // timeout needed to avoid browser bug where "disabled" attribute is not applied
249
+ setTimeout(function(){
250
+ ['class', 'name', 'id'].map(function( attr ){
251
+ $newSelect.attr( attr, $select.attr(attr));
252
+ });
253
+ }, 0);
254
+
255
+ // select existing value (if not a disabled input)
256
+ if( !$newSelect.prop('disabled') ) {
257
+ acf.val( $newSelect, val, true );
258
+ }
259
+
260
+ // set
261
+ this.ruleData('value', $newSelect.val());
262
+ },
263
+
264
+ onChangeToggle: function(){
265
+ this.render();
266
+ },
267
+
268
+ onClickAddGroup: function( e, $el ){
269
+ this.addGroup();
270
+ },
271
+
272
+ addGroup: function(){
273
+
274
+ // vars
275
+ var $group = this.$('.rule-group:last');
276
+
277
+ // duplicate
278
+ var $group2 = acf.duplicate( $group );
279
+
280
+ // update h4
281
+ $group2.find('h4').text( acf.__('or') );
282
+
283
+ // remove all tr's except the first one
284
+ $group2.find('tr').not(':first').remove();
285
+
286
+ // save field
287
+ this.fieldObject.save();
288
+ },
289
+
290
+ onFocusField: function( e, $el ){
291
+ this.renderField();
292
+ },
293
+
294
+ onChangeField: function( e, $el ){
295
+
296
+ // scope
297
+ this.scope( $el.closest('.rule') );
298
+
299
+ // set data
300
+ this.ruleData('field', $el.val());
301
+
302
+ // render
303
+ this.renderOperator();
304
+ this.renderValue();
305
+ },
306
+
307
+ onChangeOperator: function( e, $el ){
308
+
309
+ // scope
310
+ this.scope( $el.closest('.rule') );
311
+
312
+ // set data
313
+ this.ruleData('operator', $el.val());
314
+
315
+ // render
316
+ this.renderValue();
317
+ },
318
+
319
+ onClickAdd: function( e, $el ){
320
+
321
+ // duplciate
322
+ var $rule = acf.duplicate( $el.closest('.rule') );
323
+
324
+ // render
325
+ this.renderRule( $rule );
326
+ },
327
+
328
+ onClickRemove: function( e, $el ){
329
+
330
+ // vars
331
+ var $rule = $el.closest('.rule');
332
+
333
+ // save field
334
+ this.fieldObject.save();
335
+
336
+ // remove group
337
+ if( $rule.siblings('.rule').length == 0 ) {
338
+ $rule.closest('.rule-group').remove();
339
+ }
340
+
341
+ // remove
342
+ $rule.remove();
343
+ }
344
+ });
345
+
346
+ acf.registerFieldSetting( ConditionalLogicFieldSetting );
347
+
348
+
349
+ /**
350
+ * conditionalLogicHelper
351
+ *
352
+ * description
353
+ *
354
+ * @date 20/4/18
355
+ * @since 5.6.9
356
+ *
357
+ * @param type $var Description. Default.
358
+ * @return type Description.
359
+ */
360
+
361
+ var conditionalLogicHelper = new acf.Model({
362
+ actions: {
363
+ 'duplicate_field_objects': 'onDuplicateFieldObjects',
364
+ },
365
+
366
+ onDuplicateFieldObjects: function( children, newField, prevField ){
367
+
368
+ // vars
369
+ var data = {};
370
+ var $selects = $();
371
+
372
+ // reference change in key
373
+ children.map(function( child ){
374
+
375
+ // store reference of changed key
376
+ data[ child.get('prevKey') ] = child.get('key');
377
+
378
+ // append condition select
379
+ $selects = $selects.add( child.$('.condition-rule-field') );
380
+ });
381
+
382
+ // loop
383
+ $selects.each(function(){
384
+
385
+ // vars
386
+ var $select = $(this);
387
+ var val = $select.val();
388
+
389
+ // bail early if val is not a ref key
390
+ if( !val || !data[val] ) {
391
+ return;
392
+ }
393
+
394
+ // modify selected option
395
+ $select.find('option:selected').attr('value', data[val]);
396
+
397
+ // set new val
398
+ $select.val( data[val] );
399
+
400
+ });
401
+ },
402
+ });
403
+ })(jQuery);
assets/build/js/_field-group-field.js ADDED
@@ -0,0 +1,808 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ acf.FieldObject = acf.Model.extend({
4
+
5
+ // class used to avoid nested event triggers
6
+ eventScope: '.acf-field-object',
7
+
8
+ // events
9
+ events: {
10
+ 'click .edit-field': 'onClickEdit',
11
+ 'click .delete-field': 'onClickDelete',
12
+ 'click .duplicate-field': 'duplicate',
13
+ 'click .move-field': 'move',
14
+
15
+ 'change .field-type': 'onChangeType',
16
+ 'change .field-required': 'onChangeRequired',
17
+ 'blur .field-label': 'onChangeLabel',
18
+ 'blur .field-name': 'onChangeName',
19
+
20
+ 'change': 'onChange',
21
+ 'changed': 'onChanged',
22
+ },
23
+
24
+ // data
25
+ data: {
26
+
27
+ // Similar to ID, but used for HTML puposes.
28
+ // It is possbile for a new field to have an ID of 0, but an id of 'field_123' */
29
+ id: 0,
30
+
31
+ // The field key ('field_123')
32
+ key: '',
33
+
34
+ // The field type (text, image, etc)
35
+ type: '',
36
+
37
+ // The $post->ID of this field
38
+ //ID: 0,
39
+
40
+ // The field's parent
41
+ //parent: 0,
42
+
43
+ // The menu order
44
+ //menu_order: 0
45
+ },
46
+
47
+ setup: function( $field ){
48
+
49
+ // set $el
50
+ this.$el = $field;
51
+
52
+ // inherit $field data (id, key, type)
53
+ this.inherit( $field );
54
+
55
+ // load additional props
56
+ // - this won't trigger 'changed'
57
+ this.prop('ID');
58
+ this.prop('parent');
59
+ this.prop('menu_order');
60
+ },
61
+
62
+ $input: function( name ){
63
+ return $('#' + this.getInputId() + '-' + name);
64
+ },
65
+
66
+ $meta: function(){
67
+ return this.$('.meta:first');
68
+ },
69
+
70
+ $handle: function(){
71
+ return this.$('.handle:first');
72
+ },
73
+
74
+ $settings: function(){
75
+ return this.$('.settings:first');
76
+ },
77
+
78
+ $setting: function( name ){
79
+ return this.$('.acf-field-settings:first > .acf-field-setting-' + name);
80
+ },
81
+
82
+ getParent: function(){
83
+ return acf.getFieldObjects({ child: this.$el, limit: 1 }).pop();
84
+ },
85
+
86
+ getParents: function(){
87
+ return acf.getFieldObjects({ child: this.$el });
88
+ },
89
+
90
+ getFields: function(){
91
+ return acf.getFieldObjects({ parent: this.$el });
92
+ },
93
+
94
+ getInputName: function(){
95
+ return 'acf_fields[' + this.get('id') + ']';
96
+ },
97
+
98
+ getInputId: function(){
99
+ return 'acf_fields-' + this.get('id');
100
+ },
101
+
102
+ newInput: function( name, value ){
103
+
104
+ // vars
105
+ var inputId = this.getInputId();
106
+ var inputName = this.getInputName();
107
+
108
+ // append name
109
+ if( name ) {
110
+ inputId += '-'+name;
111
+ inputName += '['+name+']';
112
+ }
113
+
114
+ // create input (avoid HTML + JSON value issues)
115
+ var $input = $('<input />').attr({
116
+ id: inputId,
117
+ name: inputName,
118
+ value: value
119
+ });
120
+ this.$('> .meta').append( $input );
121
+
122
+ // return
123
+ return $input;
124
+ },
125
+
126
+ getProp: function( name ){
127
+
128
+ // check data
129
+ if( this.has(name) ) {
130
+ return this.get(name);
131
+ }
132
+
133
+ // get input value
134
+ var $input = this.$input( name );
135
+ var value = $input.length ? $input.val() : null;
136
+
137
+ // set data silently (cache)
138
+ this.set(name, value, true);
139
+
140
+ // return
141
+ return value;
142
+ },
143
+
144
+ setProp: function( name, value ) {
145
+
146
+ // get input
147
+ var $input = this.$input( name );
148
+ var prevVal = $input.val();
149
+
150
+ // create if new
151
+ if( !$input.length ) {
152
+ $input = this.newInput( name, value );
153
+ }
154
+
155
+ // remove
156
+ if( value === null ) {
157
+ $input.remove();
158
+
159
+ // update
160
+ } else {
161
+ $input.val( value );
162
+ }
163
+
164
+ //console.log('setProp', name, value, this);
165
+
166
+ // set data silently (cache)
167
+ if( !this.has(name) ) {
168
+ //console.log('setting silently');
169
+ this.set(name, value, true);
170
+
171
+ // set data allowing 'change' event to fire
172
+ } else {
173
+ //console.log('setting loudly!');
174
+ this.set(name, value);
175
+ }
176
+
177
+ // return
178
+ return this;
179
+
180
+ },
181
+
182
+ prop: function( name, value ){
183
+ if( value !== undefined ) {
184
+ return this.setProp( name, value );
185
+ } else {
186
+ return this.getProp( name );
187
+ }
188
+ },
189
+
190
+ props: function( props ){
191
+ Object.keys( props ).map(function( key ){
192
+ this.setProp( key, props[key] );
193
+ }, this);
194
+ },
195
+
196
+ getLabel: function(){
197
+
198
+ // get label with empty default
199
+ var label = this.prop('label');
200
+ if( label === '' ) {
201
+ label = acf.__('(no label)')
202
+ }
203
+
204
+ // return
205
+ return label;
206
+ },
207
+
208
+ getName: function(){
209
+ return this.prop('name');
210
+ },
211
+
212
+ getType: function(){
213
+ return this.prop('type');
214
+ },
215
+
216
+ getTypeLabel: function(){
217
+ var type = this.prop('type');
218
+ var types = acf.get('fieldTypes');
219
+ return ( types[type] ) ? types[type].label : type;
220
+ },
221
+
222
+ getKey: function(){
223
+ return this.prop('key');
224
+ },
225
+
226
+ initialize: function(){
227
+ // do nothing
228
+ },
229
+
230
+ render: function(){
231
+
232
+ // vars
233
+ var $handle = this.$('.handle:first');
234
+ var menu_order = this.prop('menu_order');
235
+ var label = this.getLabel();
236
+ var name = this.prop('name');
237
+ var type = this.getTypeLabel();
238
+ var key = this.prop('key');
239
+ var required = this.$input('required').prop('checked');
240
+
241
+ // update menu order
242
+ $handle.find('.acf-icon').html( parseInt(menu_order) + 1 );
243
+
244
+ // update required
245
+ if( required ) {
246
+ label += ' <span class="acf-required">*</span>';
247
+ }
248
+
249
+ // update label
250
+ $handle.find('.li-field-label strong a').html( label );
251
+
252
+ // update name
253
+ $handle.find('.li-field-name').text( name );
254
+
255
+ // update type
256
+ $handle.find('.li-field-type').text( type );
257
+
258
+ // update key
259
+ $handle.find('.li-field-key').text( key );
260
+
261
+ // action for 3rd party customization
262
+ acf.doAction('render_field_object', this);
263
+ },
264
+
265
+ refresh: function(){
266
+ acf.doAction('refresh_field_object', this);
267
+ },
268
+
269
+ isOpen: function() {
270
+ return this.$el.hasClass('open');
271
+ },
272
+
273
+ onClickEdit: function( e ){
274
+ this.isOpen() ? this.close() : this.open();
275
+ },
276
+
277
+ open: function(){
278
+
279
+ // vars
280
+ var $settings = this.$el.children('.settings');
281
+
282
+ // open
283
+ $settings.slideDown();
284
+ this.$el.addClass('open');
285
+
286
+ // action (open)
287
+ acf.doAction('open_field_object', this);
288
+ this.trigger('openFieldObject');
289
+
290
+ // action (show)
291
+ acf.doAction('show', $settings);
292
+ },
293
+
294
+ close: function(){
295
+
296
+ // vars
297
+ var $settings = this.$el.children('.settings');
298
+
299
+ // close
300
+ $settings.slideUp();
301
+ this.$el.removeClass('open');
302
+
303
+ // action (close)
304
+ acf.doAction('close_field_object', this);
305
+ this.trigger('closeFieldObject');
306
+
307
+ // action (hide)
308
+ acf.doAction('hide', $settings);
309
+ },
310
+
311
+ serialize: function(){
312
+ return acf.serialize( this.$el, this.getInputName() );
313
+ },
314
+
315
+ save: function( type ){
316
+
317
+ // defaults
318
+ type = type || 'settings'; // meta, settings
319
+
320
+ // vars
321
+ var save = this.getProp('save');
322
+
323
+ // bail if already saving settings
324
+ if( save === 'settings' ) {
325
+ return;
326
+ }
327
+
328
+ // prop
329
+ this.setProp('save', type);
330
+
331
+ // debug
332
+ this.$el.attr('data-save', type);
333
+
334
+ // action
335
+ acf.doAction('save_field_object', this, type);
336
+ },
337
+
338
+ submit: function(){
339
+
340
+ // vars
341
+ var inputName = this.getInputName();
342
+ var save = this.get('save');
343
+
344
+ // close
345
+ if( this.isOpen() ) {
346
+ this.close();
347
+ }
348
+
349
+ // allow all inputs to save
350
+ if( save == 'settings' ) {
351
+ // do nothing
352
+
353
+ // allow only meta inputs to save
354
+ } else if( save == 'meta' ) {
355
+ this.$('> .settings [name^="' + inputName + '"]').remove();
356
+
357
+ // prevent all inputs from saving
358
+ } else {
359
+ this.$('[name^="' + inputName + '"]').remove();
360
+ }
361
+
362
+ // action
363
+ acf.doAction('submit_field_object', this);
364
+ },
365
+
366
+ onChange: function( e, $el ){
367
+
368
+ // save settings
369
+ this.save();
370
+
371
+ // action for 3rd party customization
372
+ acf.doAction('change_field_object', this);
373
+ },
374
+
375
+ onChanged: function( e, $el, name, value ){
376
+
377
+ // ignore 'save'
378
+ if( name == 'save' ) {
379
+ return;
380
+ }
381
+
382
+ // save meta
383
+ if( ['menu_order', 'parent'].indexOf(name) > -1 ) {
384
+ this.save('meta');
385
+
386
+ // save field
387
+ } else {
388
+ this.save();
389
+ }
390
+
391
+ // render
392
+ if( ['menu_order', 'label', 'required', 'name', 'type', 'key'].indexOf(name) > -1 ) {
393
+ this.render();
394
+ }
395
+
396
+ // action for 3rd party customization
397
+ acf.doAction('change_field_object_' + name, this, value);
398
+ },
399
+
400
+ onChangeLabel: function( e, $el ){
401
+
402
+ // set
403
+ var label = $el.val();
404
+ this.set('label', label);
405
+
406
+ // render name
407
+ if( this.prop('name') == '' ) {
408
+ var name = acf.applyFilters('generate_field_object_name', acf.strSanitize(label), this);
409
+ this.prop('name', name);
410
+ }
411
+ },
412
+
413
+ onChangeName: function( e, $el){
414
+
415
+ // set
416
+ var name = $el.val();
417
+ this.set('name', name);
418
+
419
+ // error
420
+ if( name.substr(0, 6) === 'field_' ) {
421
+ alert( acf.__('The string "field_" may not be used at the start of a field name') );
422
+ }
423
+ },
424
+
425
+ onChangeRequired: function( e, $el ){
426
+
427
+ // set
428
+ var required = $el.prop('checked') ? 1 : 0;
429
+ this.set('required', required);
430
+ },
431
+
432
+ delete: function( args ){
433
+
434
+ // defaults
435
+ args = acf.parseArgs(args, {
436
+ animate: true
437
+ });
438
+
439
+ // add to remove list
440
+ var id = this.prop('ID');
441
+
442
+ if( id ) {
443
+ var $input = $('#_acf_delete_fields');
444
+ var newVal = $input.val() + '|' + id;
445
+ $input.val( newVal );
446
+ }
447
+
448
+ // action
449
+ acf.doAction('delete_field_object', this);
450
+
451
+ // animate
452
+ if( args.animate ) {
453
+ this.removeAnimate();
454
+ } else {
455
+ this.remove();
456
+ }
457
+ },
458
+
459
+ onClickDelete: function( e, $el ){
460
+
461
+ // add class
462
+ this.$el.addClass('-hover');
463
+
464
+ // add tooltip
465
+ var self = this;
466
+ var tooltip = acf.newTooltip({
467
+ confirmRemove: true,
468
+ target: $el,
469
+ confirm: function(){
470
+ self.delete( true );
471
+ },
472
+ cancel: function(){
473
+ self.$el.removeClass('-hover');
474
+ }
475
+ });
476
+ },
477
+
478
+ removeAnimate: function(){
479
+
480
+ // vars
481
+ var field = this;
482
+ var $list = this.$el.parent();
483
+ var $fields = acf.findFieldObjects({
484
+ sibling: this.$el
485
+ });
486
+
487
+ // remove
488
+ acf.remove({
489
+ target: this.$el,
490
+ endHeight: $fields.length ? 0 : 50,
491
+ complete: function(){
492
+ field.remove();
493
+ acf.doAction('removed_field_object', field, $list);
494
+ }
495
+ });
496
+
497
+ // action
498
+ acf.doAction('remove_field_object', field, $list);
499
+ },
500
+
501
+ duplicate: function(){
502
+
503
+ // vars
504
+ var newKey = acf.uniqid('field_');
505
+
506
+ // duplicate
507
+ var $newField = acf.duplicate({
508
+ target: this.$el,
509
+ search: this.get('id'),
510
+ replace: newKey,
511
+ });
512
+
513
+ // set new key
514
+ $newField.attr('data-key', newKey);
515
+
516
+ // get instance
517
+ var newField = acf.getFieldObject( $newField );
518
+
519
+ // open / close
520
+ if( this.isOpen() ) {
521
+ this.close();
522
+ } else {
523
+ newField.open();
524
+ }
525
+
526
+ // focus label
527
+ var $label = newField.$setting('label input');
528
+ setTimeout(function(){
529
+ $label.focus();
530
+ }, 251);
531
+
532
+ // update newField label / name
533
+ var label = newField.prop('label');
534
+ var name = newField.prop('name');
535
+ var end = name.split('_').pop();
536
+ var copy = acf.__('copy');
537
+
538
+ // increase suffix "1"
539
+ if( $.isNumeric(end) ) {
540
+ var i = (end*1) + 1;
541
+ label = label.replace( end, i );
542
+ name = name.replace( end, i );
543
+
544
+ // increase suffix "(copy1)"
545
+ } else if( end.indexOf(copy) === 0 ) {
546
+ var i = end.replace(copy, '') * 1;
547
+ i = i ? i+1 : 2;
548
+
549
+ // replace
550
+ label = label.replace( end, copy + i );
551
+ name = name.replace( end, copy + i );
552
+
553
+ // add default "(copy)"
554
+ } else {
555
+ label += ' (' + copy + ')';
556
+ name += '_' + copy;
557
+ }
558
+
559
+ newField.prop('ID', 0);
560
+ newField.prop('label', label);
561
+ newField.prop('name', name);
562
+ newField.prop('key', newKey);
563
+
564
+ // action
565
+ acf.doAction('duplicate_field_object', this, newField);
566
+ acf.doAction('append_field_object', newField);
567
+ },
568
+
569
+ wipe: function(){
570
+
571
+ // vars
572
+ var prevId = this.get('id');
573
+ var prevKey = this.get('key');
574
+ var newKey = acf.uniqid('field_');
575
+
576
+ // rename
577
+ acf.rename({
578
+ target: this.$el,
579
+ search: prevId,
580
+ replace: newKey,
581
+ });
582
+
583
+ // data
584
+ this.set('id', newKey);
585
+ this.set('prevId', prevId);
586
+ this.set('prevKey', prevKey);
587
+
588
+ // props
589
+ this.prop('key', newKey);
590
+ this.prop('ID', 0);
591
+
592
+ // attr
593
+ this.$el.attr('data-key', newKey);
594
+ this.$el.attr('data-id', newKey);
595
+
596
+ // action
597
+ acf.doAction('wipe_field_object', this);
598
+ },
599
+
600
+ move: function(){
601
+
602
+ // helper
603
+ var hasChanged = function( field ){
604
+ return (field.get('save') == 'settings');
605
+ };
606
+
607
+ // vars
608
+ var changed = hasChanged(this);
609
+
610
+ // has sub fields changed
611
+ if( !changed ) {
612
+ acf.getFieldObjects({
613
+ parent: this.$el
614
+ }).map(function( field ){
615
+ changed = hasChanged(field) || field.changed;
616
+ });
617
+ }
618
+
619
+ // bail early if changed
620
+ if( changed ) {
621
+ alert( acf.__('This field cannot be moved until its changes have been saved') );
622
+ return;
623
+ }
624
+
625
+ // step 1.
626
+ var id = this.prop('ID');
627
+ var field = this;
628
+ var popup = false;
629
+ var step1 = function(){
630
+
631
+ // popup
632
+ popup = acf.newPopup({
633
+ title: acf.__('Move Custom Field'),
634
+ loading: true,
635
+ width: '300px'
636
+ });
637
+
638
+ // ajax
639
+ var ajaxData = {
640
+ action: 'acf/field_group/move_field',
641
+ field_id: id
642
+ };
643
+
644
+ // get HTML
645
+ $.ajax({
646
+ url: acf.get('ajaxurl'),
647
+ data: acf.prepareForAjax(ajaxData),
648
+ type: 'post',
649
+ dataType: 'html',
650
+ success: step2
651
+ });
652
+ };
653
+
654
+ var step2 = function( html ){
655
+
656
+ // update popup
657
+ popup.loading(false);
658
+ popup.content(html);
659
+
660
+ // submit form
661
+ popup.on('submit', 'form', step3);
662
+ };
663
+
664
+ var step3 = function( e, $el ){
665
+
666
+ // prevent
667
+ e.preventDefault();
668
+
669
+ // disable
670
+ acf.startButtonLoading( popup.$('.button') );
671
+
672
+ // ajax
673
+ var ajaxData = {
674
+ action: 'acf/field_group/move_field',
675
+ field_id: id,
676
+ field_group_id: popup.$('select').val()
677
+ };
678
+
679
+ // get HTML
680
+ $.ajax({
681
+ url: acf.get('ajaxurl'),
682
+ data: acf.prepareForAjax(ajaxData),
683
+ type: 'post',
684
+ dataType: 'html',
685
+ success: step4
686
+ });
687
+ };
688
+
689
+ var step4 = function( html ){
690
+
691
+ // update popup
692
+ popup.content(html);
693
+
694
+ // remove element
695
+ field.removeAnimate();
696
+ };
697
+
698
+ // start
699
+ step1();
700
+
701
+ },
702
+
703
+ onChangeType: function( e, $el ){
704
+
705
+ // clea previous timout
706
+ if( this.changeTimeout ) {
707
+ clearTimeout(this.changeTimeout);
708
+ }
709
+
710
+ // set new timeout
711
+ // - prevents changing type multiple times whilst user types in newType
712
+ this.changeTimeout = this.setTimeout(function(){
713
+ this.changeType( $el.val() );
714
+ }, 300);
715
+ },
716
+
717
+ changeType: function( newType ){
718
+
719
+ // vars
720
+ var prevType = this.prop('type');
721
+ var prevClass = acf.strSlugify( 'acf-field-object-' + prevType );
722
+ var newClass = acf.strSlugify( 'acf-field-object-' + newType );
723
+
724
+ // update props
725
+ this.$el.removeClass(prevClass).addClass(newClass);
726
+ this.$el.attr('data-type', newType);
727
+ this.$el.data('type', newType);
728
+
729
+ // abort XHR if this field is already loading AJAX data
730
+ if( this.has('xhr') ) {
731
+ this.get('xhr').abort();
732
+ }
733
+
734
+ // store settings
735
+ var $tbody = this.$('> .settings > table > tbody');
736
+ var $settings = $tbody.children('[data-setting="' + prevType + '"]');
737
+ this.set( 'settings-' + prevType, $settings );
738
+ $settings.detach();
739
+
740
+ // show settings
741
+ if( this.has('settings-' + newType) ) {
742
+ var $newSettings = this.get('settings-' + newType);
743
+ this.$setting('conditional_logic').before( $newSettings );
744
+ this.set('type', newType);
745
+ //this.refresh();
746
+ return;
747
+ }
748
+
749
+ // load settings
750
+ var $loading = $('<tr class="acf-field"><td class="acf-label"></td><td class="acf-input"><div class="acf-loading"></div></td></tr>');
751
+ this.$setting('conditional_logic').before( $loading );
752
+
753
+ // ajax
754
+ var ajaxData = {
755
+ action: 'acf/field_group/render_field_settings',
756
+ field: this.serialize(),
757
+ prefix: this.getInputName()
758
+ };
759
+
760
+ // ajax
761
+ var xhr = $.ajax({
762
+ url: acf.get('ajaxurl'),
763
+ data: acf.prepareForAjax(ajaxData),
764
+ type: 'post',
765
+ dataType: 'html',
766
+ context: this,
767
+ success: function( html ){
768
+
769
+ // bail early if no settings
770
+ if( !html ) return;
771
+
772
+ // append settings
773
+ $loading.after( html );
774
+
775
+ // events
776
+ acf.doAction('append', $tbody);
777
+ },
778
+ complete: function(){
779
+ // also triggered by xhr.abort();
780
+ $loading.remove();
781
+ this.set('type', newType);
782
+ //this.refresh();
783
+ }
784
+ });
785
+
786
+ // set
787
+ this.set('xhr', xhr);
788
+
789
+ },
790
+
791
+ updateParent: function(){
792
+
793
+ // vars
794
+ var ID = acf.get('post_id');
795
+
796
+ // check parent
797
+ var parent = this.getParent();
798
+ if( parent ) {
799
+ ID = parseInt(parent.prop('ID')) || parent.prop('key');
800
+ }
801
+
802
+ // update
803
+ this.prop('parent', ID);
804
+ }
805
+
806
+ });
807
+
808
+ })(jQuery);
assets/build/js/_field-group-fields.js ADDED
@@ -0,0 +1,468 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * acf.findFieldObject
5
+ *
6
+ * Returns a single fieldObject $el for a given field key
7
+ *
8
+ * @date 1/2/18
9
+ * @since 5.7.0
10
+ *
11
+ * @param string key The field key
12
+ * @return jQuery
13
+ */
14
+
15
+ acf.findFieldObject = function( key ){
16
+ return acf.findFieldObjects({
17
+ key: key,
18
+ limit: 1
19
+ });
20
+ };
21
+
22
+ /**
23
+ * acf.findFieldObjects
24
+ *
25
+ * Returns an array of fieldObject $el for the given args
26
+ *
27
+ * @date 1/2/18
28
+ * @since 5.7.0
29
+ *
30
+ * @param object args
31
+ * @return jQuery
32
+ */
33
+
34
+ acf.findFieldObjects = function( args ){
35
+
36
+ // vars
37
+ args = args || {};
38
+ var selector = '.acf-field-object';
39
+ var $fields = false;
40
+
41
+ // args
42
+ args = acf.parseArgs(args, {
43
+ id: '',
44
+ key: '',
45
+ type: '',
46
+ limit: false,
47
+ list: null,
48
+ parent: false,
49
+ sibling: false,
50
+ child: false,
51
+ });
52
+
53
+ // id
54
+ if( args.id ) {
55
+ selector += '[data-id="' + args.id + '"]';
56
+ }
57
+
58
+ // key
59
+ if( args.key ) {
60
+ selector += '[data-key="' + args.key + '"]';
61
+ }
62
+
63
+ // type
64
+ if( args.type ) {
65
+ selector += '[data-type="' + args.type + '"]';
66
+ }
67
+
68
+ // query
69
+ if( args.list ) {
70
+ $fields = args.list.children( selector );
71
+ } else if( args.parent ) {
72
+ $fields = args.parent.find( selector );
73
+ } else if( args.sibling ) {
74
+ $fields = args.sibling.siblings( selector );
75
+ } else if( args.child ) {
76
+ $fields = args.child.parents( selector );
77
+ } else {
78
+ $fields = $( selector );
79
+ }
80
+
81
+ // limit
82
+ if( args.limit ) {
83
+ $fields = $fields.slice( 0, args.limit );
84
+ }
85
+
86
+ // return
87
+ return $fields;
88
+ };
89
+
90
+ /**
91
+ * acf.getFieldObject
92
+ *
93
+ * Returns a single fieldObject instance for a given $el|key
94
+ *
95
+ * @date 1/2/18
96
+ * @since 5.7.0
97
+ *
98
+ * @param string|jQuery $field The field $el or key
99
+ * @return jQuery
100
+ */
101
+
102
+ acf.getFieldObject = function( $field ){
103
+
104
+ // allow key
105
+ if( typeof $field === 'string' ) {
106
+ $field = acf.findFieldObject( $field );
107
+ }
108
+
109
+ // instantiate
110
+ var field = $field.data('acf');
111
+ if( !field ) {
112
+ field = acf.newFieldObject( $field );
113
+ }
114
+
115
+ // return
116
+ return field;
117
+ };
118
+
119
+ /**
120
+ * acf.getFieldObjects
121
+ *
122
+ * Returns an array of fieldObject instances for the given args
123
+ *
124
+ * @date 1/2/18
125
+ * @since 5.7.0
126
+ *
127
+ * @param object args
128
+ * @return array
129
+ */
130
+
131
+ acf.getFieldObjects = function( args ){
132
+
133
+ // query
134
+ var $fields = acf.findFieldObjects( args );
135
+
136
+ // loop
137
+ var fields = [];
138
+ $fields.each(function(){
139
+ var field = acf.getFieldObject( $(this) );
140
+ fields.push( field );
141
+ });
142
+
143
+ // return
144
+ return fields;
145
+ };
146
+
147
+ /**
148
+ * acf.newFieldObject
149
+ *
150
+ * Initializes and returns a new FieldObject instance
151
+ *
152
+ * @date 1/2/18
153
+ * @since 5.7.0
154
+ *
155
+ * @param jQuery $field The field $el
156
+ * @return object
157
+ */
158
+
159
+ acf.newFieldObject = function( $field ){
160
+
161
+ // instantiate
162
+ var field = new acf.FieldObject( $field );
163
+
164
+ // action
165
+ acf.doAction('new_field_object', field);
166
+
167
+ // return
168
+ return field;
169
+ };
170
+
171
+ /**
172
+ * actionManager
173
+ *
174
+ * description
175
+ *
176
+ * @date 15/12/17
177
+ * @since 5.6.5
178
+ *
179
+ * @param type $var Description. Default.
180
+ * @return type Description.
181
+ */
182
+
183
+ var eventManager = new acf.Model({
184
+
185
+ priority: 5,
186
+
187
+ initialize: function(){
188
+
189
+ // actions
190
+ var actions = [
191
+ 'prepare',
192
+ 'ready',
193
+ 'append',
194
+ 'remove'
195
+ ];
196
+
197
+ // loop
198
+ actions.map(function( action ){
199
+ this.addFieldActions( action );
200
+ }, this);
201
+ },
202
+
203
+ addFieldActions: function( action ){
204
+
205
+ // vars
206
+ var pluralAction = action + '_field_objects'; // ready_field_objects
207
+ var singleAction = action + '_field_object'; // ready_field_object
208
+ var singleEvent = action + 'FieldObject'; // readyFieldObject
209
+
210
+ // global action
211
+ var callback = function( $el /*, arg1, arg2, etc*/ ){
212
+
213
+ // vars
214
+ var fieldObjects = acf.getFieldObjects({ parent: $el });
215
+
216
+ // call plural
217
+ if( fieldObjects.length ) {
218
+
219
+ /// get args [$el, arg1]
220
+ var args = acf.arrayArgs( arguments );
221
+
222
+ // modify args [pluralAction, fields, arg1]
223
+ args.splice(0, 1, pluralAction, fieldObjects);
224
+ acf.doAction.apply(null, args);
225
+ }
226
+ };
227
+
228
+ // plural action
229
+ var pluralCallback = function( fieldObjects /*, arg1, arg2, etc*/ ){
230
+
231
+ /// get args [fields, arg1]
232
+ var args = acf.arrayArgs( arguments );
233
+
234
+ // modify args [singleAction, fields, arg1]
235
+ args.unshift(singleAction);
236
+
237
+ // loop
238
+ fieldObjects.map(function( fieldObject ){
239
+
240
+ // modify args [singleAction, field, arg1]
241
+ args[1] = fieldObject;
242
+ acf.doAction.apply(null, args);
243
+ });
244
+ };
245
+
246
+ // single action
247
+ var singleCallback = function( fieldObject /*, arg1, arg2, etc*/ ){
248
+
249
+ /// get args [$field, arg1]
250
+ var args = acf.arrayArgs( arguments );
251
+
252
+ // modify args [singleAction, $field, arg1]
253
+ args.unshift(singleAction);
254
+
255
+ // action variations (ready_field/type=image)
256
+ var variations = ['type', 'name', 'key'];
257
+ variations.map(function( variation ){
258
+ args[0] = singleAction + '/' + variation + '=' + fieldObject.get(variation);
259
+ acf.doAction.apply(null, args);
260
+ });
261
+
262
+ // modify args [arg1]
263
+ args.splice(0, 2);
264
+
265
+ // event
266
+ fieldObject.trigger(singleEvent, args);
267
+ };
268
+
269
+ // add actions
270
+ acf.addAction(action, callback, 5);
271
+ acf.addAction(pluralAction, pluralCallback, 5);
272
+ acf.addAction(singleAction, singleCallback, 5);
273
+
274
+ }
275
+ });
276
+
277
+ /**
278
+ * fieldManager
279
+ *
280
+ * description
281
+ *
282
+ * @date 4/1/18
283
+ * @since 5.6.5
284
+ *
285
+ * @param type $var Description. Default.
286
+ * @return type Description.
287
+ */
288
+
289
+ var fieldManager = new acf.Model({
290
+
291
+ id: 'fieldManager',
292
+
293
+ events: {
294
+ 'submit #post': 'onSubmit',
295
+ 'mouseenter .acf-field-list': 'onHoverSortable',
296
+ 'click .add-field': 'onClickAdd',
297
+ },
298
+
299
+ actions: {
300
+ 'removed_field_object': 'onRemovedField',
301
+ 'sortstop_field_object': 'onReorderField',
302
+ 'delete_field_object': 'onDeleteField',
303
+ 'change_field_object_type': 'onChangeFieldType',
304
+ 'duplicate_field_object': 'onDuplicateField'
305
+ },
306
+
307
+ onSubmit: function( e, $el ){
308
+
309
+ // vars
310
+ var fields = acf.getFieldObjects();
311
+
312
+ // loop
313
+ fields.map(function( field ){
314
+ field.submit();
315
+ });
316
+ },
317
+
318
+ setFieldMenuOrder: function( field ){
319
+ this.renderFields( field.$el.parent() );
320
+ },
321
+
322
+ onHoverSortable: function( e, $el ){
323
+
324
+ // bail early if already sortable
325
+ if( $el.hasClass('ui-sortable') ) return;
326
+
327
+ // sortable
328
+ $el.sortable({
329
+ handle: '.acf-sortable-handle',
330
+ connectWith: '.acf-field-list',
331
+ start: function( e, ui ){
332
+ var field = acf.getFieldObject( ui.item );
333
+ ui.placeholder.height( ui.item.height() );
334
+ acf.doAction('sortstart_field_object', field, $el);
335
+ },
336
+ update: function( e, ui ){
337
+ var field = acf.getFieldObject( ui.item );
338
+ acf.doAction('sortstop_field_object', field, $el);
339
+ }
340
+ });
341
+ },
342
+
343
+ onRemovedField: function( field, $list ){
344
+ this.renderFields( $list );
345
+ },
346
+
347
+ onReorderField: function( field, $list ){
348
+ field.updateParent();
349
+ this.renderFields( $list );
350
+ },
351
+
352
+ onDeleteField: function( field ){
353
+
354
+ // delete children
355
+ field.getFields().map(function( child ){
356
+ child.delete({ animate: false });
357
+ });
358
+ },
359
+
360
+ onChangeFieldType: function( field ){
361
+ // this caused sub fields to disapear if changing type back...
362
+ //this.onDeleteField( field );
363
+ },
364
+
365
+ onDuplicateField: function( field, newField ){
366
+
367
+ // check for children
368
+ var children = newField.getFields();
369
+ if( children.length ) {
370
+
371
+ // loop
372
+ children.map(function( child ){
373
+
374
+ // wipe field
375
+ child.wipe();
376
+
377
+ // update parent
378
+ child.updateParent();
379
+ });
380
+
381
+ // action
382
+ acf.doAction('duplicate_field_objects', children, newField, field);
383
+ }
384
+
385
+ // set menu order
386
+ this.setFieldMenuOrder( newField );
387
+ },
388
+
389
+ renderFields: function( $list ){
390
+
391
+ // vars
392
+ var fields = acf.getFieldObjects({
393
+ list: $list
394
+ });
395
+
396
+ // no fields
397
+ if( !fields.length ) {
398
+ $list.addClass('-empty');
399
+ return;
400
+ }
401
+
402
+ // has fields
403
+ $list.removeClass('-empty');
404
+
405
+ // prop
406
+ fields.map(function( field, i ){
407
+ field.prop('menu_order', i);
408
+ });
409
+ },
410
+
411
+ onClickAdd: function( e, $el ){
412
+ var $list = $el.closest('.acf-tfoot').siblings('.acf-field-list');
413
+ this.addField( $list );
414
+ },
415
+
416
+ addField: function( $list ){
417
+
418
+ // vars
419
+ var html = $('#tmpl-acf-field').html();
420
+ var $el = $(html);
421
+ var prevId = $el.data('id');
422
+ var newKey = acf.uniqid('field_');
423
+
424
+ // duplicate
425
+ var $newField = acf.duplicate({
426
+ target: $el,
427
+ search: prevId,
428
+ replace: newKey,
429
+ append: function( $el, $el2 ){
430
+ $list.append( $el2 );
431
+ }
432
+ });
433
+
434
+ // get instance
435
+ var newField = acf.getFieldObject( $newField );
436
+
437
+ // props
438
+ newField.prop('key', newKey);
439
+ newField.prop('ID', 0);
440
+ newField.prop('label', '');
441
+ newField.prop('name', '');
442
+
443
+ // attr
444
+ $newField.attr('data-key', newKey);
445
+ $newField.attr('data-id', newKey);
446
+
447
+ // update parent prop
448
+ newField.updateParent();
449
+
450
+ // focus label
451
+ var $label = newField.$input('label');
452
+ setTimeout(function(){
453
+ $label.focus();
454
+ }, 251);
455
+
456
+ // open
457
+ newField.open();
458
+
459
+ // set menu order
460
+ this.renderFields( $list );
461
+
462
+ // action
463
+ acf.doAction('add_field_object', newField);
464
+ acf.doAction('append_field_object', newField);
465
+ }
466
+ });
467
+
468
+ })(jQuery);
assets/build/js/_field-group-locations.js ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * locationManager
5
+ *
6
+ * Field group location rules functionality
7
+ *
8
+ * @date 15/12/17
9
+ * @since 5.7.0
10
+ *
11
+ * @param void
12
+ * @return void
13
+ */
14
+
15
+ var locationManager = new acf.Model({
16
+
17
+ id: 'locationManager',
18
+ wait: 'ready',
19
+
20
+ events: {
21
+ 'click .add-location-rule': 'onClickAddRule',
22
+ 'click .add-location-group': 'onClickAddGroup',
23
+ 'click .remove-location-rule': 'onClickRemoveRule',
24
+ 'change .refresh-location-rule': 'onChangeRemoveRule'
25
+ },
26
+
27
+ initialize: function(){
28
+ this.$el = $('#acf-field-group-locations');
29
+ },
30
+
31
+ onClickAddRule: function( e, $el ){
32
+ this.addRule( $el.closest('tr') );
33
+ },
34
+
35
+ onClickRemoveRule: function( e, $el ){
36
+ this.removeRule( $el.closest('tr') );
37
+ },
38
+
39
+ onChangeRemoveRule: function( e, $el ){
40
+ this.changeRule( $el.closest('tr') );
41
+ },
42
+
43
+ onClickAddGroup: function( e, $el ){
44
+ this.addGroup();
45
+ },
46
+
47
+ addRule: function( $tr ){
48
+ acf.duplicate( $tr );
49
+ },
50
+
51
+ removeRule: function( $tr ){
52
+ if( $tr.siblings('tr').length == 0 ) {
53
+ $tr.closest('.rule-group').remove();
54
+ } else {
55
+ $tr.remove();
56
+ }
57
+ },
58
+
59
+ changeRule: function( $rule ){
60
+
61
+ // vars
62
+ var $group = $rule.closest('.rule-group');
63
+ var prefix = $rule.find('td.param select').attr('name').replace('[param]', '');
64
+
65
+ // ajaxdata
66
+ var ajaxdata = {};
67
+ ajaxdata.action = 'acf/field_group/render_location_rule';
68
+ ajaxdata.rule = acf.serialize( $rule, prefix );
69
+ ajaxdata.rule.id = $rule.data('id');
70
+ ajaxdata.rule.group = $group.data('id');
71
+
72
+ // temp disable
73
+ acf.disable( $rule.find('td.value') );
74
+
75
+ // ajax
76
+ $.ajax({
77
+ url: acf.get('ajaxurl'),
78
+ data: acf.prepareForAjax(ajaxdata),
79
+ type: 'post',
80
+ dataType: 'html',
81
+ success: function( html ){
82
+ if( !html ) return;
83
+ $rule.replaceWith( html );
84
+ }
85
+ });
86
+ },
87
+
88
+ addGroup: function(){
89
+
90
+ // vars
91
+ var $group = this.$('.rule-group:last');
92
+
93
+ // duplicate
94
+ $group2 = acf.duplicate( $group );
95
+
96
+ // update h4
97
+ $group2.find('h4').text( acf.__('or') );
98
+
99
+ // remove all tr's except the first one
100
+ $group2.find('tr').not(':first').remove();
101
+ }
102
+ });
103
+
104
+ })(jQuery);
assets/build/js/_field-group-settings.js ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * mid
5
+ *
6
+ * Calculates the model ID for a field type
7
+ *
8
+ * @date 15/12/17
9
+ * @since 5.6.5
10
+ *
11
+ * @param string type
12
+ * @return string
13
+ */
14
+
15
+ var modelId = function( type ) {
16
+ return acf.strPascalCase( type || '' ) + 'FieldSetting';
17
+ };
18
+
19
+ /**
20
+ * registerFieldType
21
+ *
22
+ * description
23
+ *
24
+ * @date 14/12/17
25
+ * @since 5.6.5
26
+ *
27
+ * @param type $var Description. Default.
28
+ * @return type Description.
29
+ */
30
+
31
+ acf.registerFieldSetting = function( model ){
32
+ var proto = model.prototype;
33
+ var mid = modelId(proto.type + ' ' + proto.name);
34
+ this.models[ mid ] = model;
35
+ };
36
+
37
+ /**
38
+ * newField
39
+ *
40
+ * description
41
+ *
42
+ * @date 14/12/17
43
+ * @since 5.6.5
44
+ *
45
+ * @param type $var Description. Default.
46
+ * @return type Description.
47
+ */
48
+
49
+ acf.newFieldSetting = function( field ){
50
+
51
+ // vars
52
+ var type = field.get('setting') || '';
53
+ var name = field.get('name') || '';
54
+ var mid = modelId( type + ' ' + name );
55
+ var model = acf.models[ mid ] || null;
56
+
57
+ // bail ealry if no setting
58
+ if( model === null ) return false;
59
+
60
+ // instantiate
61
+ var setting = new model( field );
62
+
63
+ // return
64
+ return setting;
65
+ };
66
+
67
+ /**
68
+ * acf.getFieldSetting
69
+ *
70
+ * description
71
+ *
72
+ * @date 19/4/18
73
+ * @since 5.6.9
74
+ *
75
+ * @param type $var Description. Default.
76
+ * @return type Description.
77
+ */
78
+
79
+ acf.getFieldSetting = function( field ) {
80
+
81
+ // allow jQuery
82
+ if( field instanceof jQuery ) {
83
+ field = acf.getField(field);
84
+ }
85
+
86
+ // return
87
+ return field.setting;
88
+ };
89
+
90
+ /**
91
+ * settingsManager
92
+ *
93
+ * description
94
+ *
95
+ * @date 6/1/18
96
+ * @since 5.6.5
97
+ *
98
+ * @param type $var Description. Default.
99
+ * @return type Description.
100
+ */
101
+
102
+ var settingsManager = new acf.Model({
103
+ actions: {
104
+ 'new_field': 'onNewField'
105
+ },
106
+ onNewField: function( field ){
107
+ field.setting = acf.newFieldSetting( field );
108
+ }
109
+ });
110
+
111
+ /**
112
+ * acf.FieldSetting
113
+ *
114
+ * description
115
+ *
116
+ * @date 6/1/18
117
+ * @since 5.6.5
118
+ *
119
+ * @param type $var Description. Default.
120
+ * @return type Description.
121
+ */
122
+
123
+ acf.FieldSetting = acf.Model.extend({
124
+
125
+ field: false,
126
+ type: '',
127
+ name: '',
128
+ wait: 'ready',
129
+ eventScope: '.acf-field',
130
+
131
+ events: {
132
+ 'change': 'render'
133
+ },
134
+
135
+ setup: function( field ){
136
+
137
+ // vars
138
+ var $field = field.$el;
139
+
140
+ // set props
141
+ this.$el = $field;
142
+ this.field = field;
143
+ this.$fieldObject = $field.closest('.acf-field-object');
144
+ this.fieldObject = acf.getFieldObject( this.$fieldObject );
145
+
146
+ // inherit data
147
+ $.extend(this.data, field.data);
148
+ },
149
+
150
+ initialize: function(){
151
+ this.render();
152
+ },
153
+
154
+ render: function(){
155
+ // do nothing
156
+ }
157
+ });
158
+
159
+ /*
160
+ * Date Picker
161
+ *
162
+ * This field type requires some extra logic for its settings
163
+ *
164
+ * @type function
165
+ * @date 24/10/13
166
+ * @since 5.0.0
167
+ *
168
+ * @param n/a
169
+ * @return n/a
170
+ */
171
+
172
+ var DisplayFormatFieldSetting = acf.FieldSetting.extend({
173
+ type: '',
174
+ name: '',
175
+ render: function(){
176
+ var $input = this.$('input[type="radio"]:checked');
177
+ if( $input.val() != 'other' ) {
178
+ this.$('input[type="text"]').val( $input.val() );
179
+ }
180
+ }
181
+ });
182
+
183
+ var DatePickerDisplayFormatFieldSetting = DisplayFormatFieldSetting.extend({
184
+ type: 'date_picker',
185
+ name: 'display_format'
186
+ });
187
+
188
+ var DatePickerReturnFormatFieldSetting = DisplayFormatFieldSetting.extend({
189
+ type: 'date_picker',
190
+ name: 'return_format'
191
+ });
192
+
193
+ acf.registerFieldSetting( DatePickerDisplayFormatFieldSetting );
194
+ acf.registerFieldSetting( DatePickerReturnFormatFieldSetting );
195
+
196
+ /*
197
+ * Date Time Picker
198
+ *
199
+ * This field type requires some extra logic for its settings
200
+ *
201
+ * @type function
202
+ * @date 24/10/13
203
+ * @since 5.0.0
204
+ *
205
+ * @param n/a
206
+ * @return n/a
207
+ */
208
+
209
+ var DateTimePickerDisplayFormatFieldSetting = DisplayFormatFieldSetting.extend({
210
+ type: 'date_time_picker',
211
+ name: 'display_format'
212
+ });
213
+
214
+ var DateTimePickerReturnFormatFieldSetting = DisplayFormatFieldSetting.extend({
215
+ type: 'date_time_picker',
216
+ name: 'return_format'
217
+ });
218
+
219
+ acf.registerFieldSetting( DateTimePickerDisplayFormatFieldSetting );
220
+ acf.registerFieldSetting( DateTimePickerReturnFormatFieldSetting );
221
+
222
+ /*
223
+ * Time Picker
224
+ *
225
+ * This field type requires some extra logic for its settings
226
+ *
227
+ * @type function
228
+ * @date 24/10/13
229
+ * @since 5.0.0
230
+ *
231
+ * @param n/a
232
+ * @return n/a
233
+ */
234
+
235
+ var TimePickerDisplayFormatFieldSetting = DisplayFormatFieldSetting.extend({
236
+ type: 'time_picker',
237
+ name: 'display_format'
238
+ });
239
+
240
+ var TimePickerReturnFormatFieldSetting = DisplayFormatFieldSetting.extend({
241
+ name: 'time_picker',
242
+ name: 'return_format'
243
+ });
244
+
245
+ acf.registerFieldSetting( TimePickerDisplayFormatFieldSetting );
246
+ acf.registerFieldSetting( TimePickerReturnFormatFieldSetting );
247
+
248
+ })(jQuery);
assets/build/js/_field-group.js ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, undefined){
2
+
3
+ /**
4
+ * fieldGroupManager
5
+ *
6
+ * Generic field group functionality
7
+ *
8
+ * @date 15/12/17
9
+ * @since 5.7.0
10
+ *
11
+ * @param void
12
+ * @return void
13
+ */
14
+
15
+ var fieldGroupManager = new acf.Model({
16
+
17
+ id: 'fieldGroupManager',
18
+
19
+ events: {
20
+ 'submit #post': 'onSubmit',
21
+ 'click a[href="#"]': 'onClick',
22
+ 'click .submitdelete': 'onClickTrash',
23
+ },
24
+
25
+ filters: {
26
+ 'find_fields_args': 'filterFindFieldArgs'
27
+ },
28
+
29
+ onSubmit: function( e, $el ){
30
+
31
+ // vars
32
+ var $title = $('#titlewrap #title');
33
+
34
+ // empty
35
+ if( !$title.val() ) {
36
+
37
+ // prevent default
38
+ e.preventDefault();
39
+
40
+ // unlock form
41
+ acf.unlockForm( $el );
42
+
43
+ // alert
44
+ alert( acf.__('Field group title is required') );
45
+
46
+ // focus
47
+ $title.focus();
48
+ }
49
+ },
50
+
51
+ onClick: function( e ){
52
+ e.preventDefault();
53
+ },
54
+
55
+ onClickTrash: function( e ){
56
+ var result = confirm( acf.__('Move to trash. Are you sure?') );
57
+ if( !result ) {
58
+ e.preventDefault();
59
+ }
60
+ },
61
+
62
+ filterFindFieldArgs: function( args ){
63
+ args.visible = true;
64
+ return args;
65
+ }
66
+ });
67
+
68
+
69
+ /**
70
+ * screenOptionsManager
71
+ *
72
+ * Screen options functionality
73
+ *
74
+ * @date 15/12/17
75
+ * @since 5.7.0
76
+ *
77
+ * @param void
78
+ * @return void
79
+ */
80
+
81
+ var screenOptionsManager = new acf.Model({
82
+
83
+ id: 'screenOptionsManager',
84
+ wait: 'prepare',
85
+
86
+ events: {
87
+ 'change': 'onChange'
88
+ },
89
+
90
+ initialize: function(){
91
+
92
+ // vars
93
+ var $div = $('#adv-settings');
94
+ var $append = $('#acf-append-show-on-screen');
95
+
96
+ // append
97
+ $div.find('.metabox-prefs').append( $append.html() );
98
+ $div.find('.metabox-prefs br').remove();
99
+
100
+ // clean up
101
+ $append.remove();
102
+
103
+ // initialize
104
+ this.$el = $('#acf-field-key-hide');
105
+
106
+ // render
107
+ this.render();
108
+ },
109
+
110
+ isChecked: function(){
111
+ return this.$el.prop('checked');
112
+ },
113
+
114
+ onChange: function( e, $el ) {
115
+ var val = this.isChecked() ? 1 : 0;
116
+ acf.updateUserSetting('show_field_keys', val);
117
+ this.render();
118
+ },
119
+
120
+ render: function(){
121
+ if( this.isChecked() ) {
122
+ $('#acf-field-group-fields').addClass('show-field-keys');
123
+ } else {
124
+ $('#acf-field-group-fields').removeClass('show-field-keys');
125
+ }
126
+ }
127
+
128
+ });
129
+
130
+
131
+ /**
132
+ * appendFieldManager
133
+ *
134
+ * Appends fields together
135
+ *
136
+ * @date 15/12/17
137
+ * @since 5.7.0
138
+ *
139
+ * @param void
140
+ * @return void
141
+ */
142
+
143
+ var appendFieldManager = new acf.Model({
144
+
145
+ actions: {
146
+ 'new_field' : 'onNewField'
147
+ },
148
+
149
+ onNewField: function( field ){
150
+
151
+ // bail ealry if not append
152
+ if( !field.has('append') ) return;
153
+
154
+ // vars
155
+ var append = field.get('append');
156
+ var $sibling = field.$el.siblings('[data-name="' + append + '"]').first();
157
+
158
+ // bail early if no sibling
159
+ if( !$sibling.length ) return;
160
+
161
+ // ul
162
+ var $div = $sibling.children('.acf-input');
163
+ var $ul = $div.children('ul');
164
+
165
+ // create ul
166
+ if( !$ul.length ) {
167
+ $div.wrapInner('<ul class="acf-hl"><li></li></ul>');
168
+ $ul = $div.children('ul');
169
+ }
170
+
171
+ // li
172
+ var html = field.$('.acf-input').html();
173
+ var $li = $('<li>' + html + '</li>');
174
+ $ul.append( $li );
175
+ $ul.attr('data-cols', $ul.children().length );
176
+
177
+ // clean up
178
+ field.remove();
179
+ }
180
+ });
181
+
182
+ })(jQuery);
assets/build/js/acf-field-group.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ // @codekit-prepend "_field-group.js";
2
+ // @codekit-prepend "_field-group-field.js";
3
+ // @codekit-prepend "_field-group-settings.js";
4
+ // @codekit-prepend "_field-group-conditions.js";
5
+ // @codekit-prepend "_field-group-fields.js";
6
+ // @codekit-prepend "_field-group-locations.js";
7
+ // @codekit-prepend "_field-group-compatibility.js";
assets/build/js/acf-field-group.min.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ // @codekit-prepend "_field-group.js";
2
+ // @codekit-prepend "_field-group-field.js";
3
+ // @codekit-prepend "_field-group-settings.js";
4
+ // @codekit-prepend "_field-group-conditions.js";
5
+ // @codekit-prepend "_field-group-fields.js";
6
+ // @codekit-prepend "_field-group-locations.js";
7
+ // @codekit-prepend "_field-group-compatibility.js";
assets/build/js/acf-input.js ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // @codekit-prepend "_acf.js";
2
+ // @codekit-prepend "_acf-hooks.js";
3
+ // @codekit-prepend "_acf-model.js";
4
+ // @codekit-prepend "_acf-popup.js";
5
+ // @codekit-prepend "_acf-unload.js";
6
+ // @codekit-prepend "_acf-panel.js";
7
+ // @codekit-prepend "_acf-notice.js";
8
+ // @codekit-prepend "_acf-postbox.js";
9
+ // @codekit-prepend "_acf-tooltip.js";
10
+ // @codekit-prepend "_acf-field.js";
11
+ // @codekit-prepend "_acf-fields.js";
12
+ // @codekit-prepend "_acf-field-accordion.js";
13
+ // @codekit-prepend "_acf-field-button-group.js";
14
+ // @codekit-prepend "_acf-field-checkbox.js";
15
+ // @codekit-prepend "_acf-field-color-picker.js";
16
+ // @codekit-prepend "_acf-field-date-picker.js";
17
+ // @codekit-prepend "_acf-field-date-time-picker.js";
18
+ // @codekit-prepend "_acf-field-google-map.js";
19
+ // @codekit-prepend "_acf-field-image.js";
20
+ // @codekit-prepend "_acf-field-file.js";
21
+ // @codekit-prepend "_acf-field-link.js";
22
+ // @codekit-prepend "_acf-field-oembed.js";
23
+ // @codekit-prepend "_acf-field-radio.js";
24
+ // @codekit-prepend "_acf-field-range.js";
25
+ // @codekit-prepend "_acf-field-relationship.js";
26
+ // @codekit-prepend "_acf-field-select.js";
27
+ // @codekit-prepend "_acf-field-tab.js";
28
+ // @codekit-prepend "_acf-field-post-object.js";
29
+ // @codekit-prepend "_acf-field-page-link.js";
30
+ // @codekit-prepend "_acf-field-user.js";
31
+ // @codekit-prepend "_acf-field-taxonomy.js";
32
+ // @codekit-prepend "_acf-field-time-picker.js";
33
+ // @codekit-prepend "_acf-field-true-false.js";
34
+ // @codekit-prepend "_acf-field-url.js";
35
+ // @codekit-prepend "_acf-field-wysiwyg.js";
36
+ // @codekit-prepend "_acf-condition.js";
37
+ // @codekit-prepend "_acf-conditions.js";
38
+ // @codekit-prepend "_acf-condition-types.js";
39
+ // @codekit-prepend "_acf-media.js";
40
+ // @codekit-prepend "_acf-screen.js";
41
+ // @codekit-prepend "_acf-select2.js";
42
+ // @codekit-prepend "_acf-tinymce.js";
43
+ // @codekit-prepend "_acf-validation.js";
44
+ // @codekit-prepend "_acf-helpers.js";
45
+ // @codekit-prepend "_acf-compatibility";
assets/build/js/acf-input.min.js ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // @codekit-prepend "_acf.js";
2
+ // @codekit-prepend "_acf-hooks.js";
3
+ // @codekit-prepend "_acf-model.js";
4
+ // @codekit-prepend "_acf-popup.js";
5
+ // @codekit-prepend "_acf-unload.js";
6
+ // @codekit-prepend "_acf-panel.js";
7
+ // @codekit-prepend "_acf-notice.js";
8
+ // @codekit-prepend "_acf-postbox.js";
9
+ // @codekit-prepend "_acf-tooltip.js";
10
+ // @codekit-prepend "_acf-field.js";
11
+ // @codekit-prepend "_acf-fields.js";
12
+ // @codekit-prepend "_acf-field-accordion.js";
13
+ // @codekit-prepend "_acf-field-button-group.js";
14
+ // @codekit-prepend "_acf-field-checkbox.js";
15
+ // @codekit-prepend "_acf-field-color-picker.js";
16
+ // @codekit-prepend "_acf-field-date-picker.js";
17
+ // @codekit-prepend "_acf-field-date-time-picker.js";
18
+ // @codekit-prepend "_acf-field-google-map.js";
19
+ // @codekit-prepend "_acf-field-image.js";
20
+ // @codekit-prepend "_acf-field-file.js";
21
+ // @codekit-prepend "_acf-field-link.js";
22
+ // @codekit-prepend "_acf-field-oembed.js";
23
+ // @codekit-prepend "_acf-field-radio.js";
24
+ // @codekit-prepend "_acf-field-range.js";
25
+ // @codekit-prepend "_acf-field-relationship.js";
26
+ // @codekit-prepend "_acf-field-select.js";
27
+ // @codekit-prepend "_acf-field-tab.js";
28
+ // @codekit-prepend "_acf-field-post-object.js";
29
+ // @codekit-prepend "_acf-field-page-link.js";
30
+ // @codekit-prepend "_acf-field-user.js";
31
+ // @codekit-prepend "_acf-field-taxonomy.js";
32
+ // @codekit-prepend "_acf-field-time-picker.js";
33
+ // @codekit-prepend "_acf-field-true-false.js";
34
+ // @codekit-prepend "_acf-field-url.js";
35
+ // @codekit-prepend "_acf-field-wysiwyg.js";
36
+ // @codekit-prepend "_acf-condition.js";
37
+ // @codekit-prepend "_acf-conditions.js";
38
+ // @codekit-prepend "_acf-condition-types.js";
39
+ // @codekit-prepend "_acf-media.js";
40
+ // @codekit-prepend "_acf-screen.js";
41
+ // @codekit-prepend "_acf-select2.js";
42
+ // @codekit-prepend "_acf-tinymce.js";
43
+ // @codekit-prepend "_acf-validation.js";
44
+ // @codekit-prepend "_acf-helpers.js";
45
+ // @codekit-prepend "_acf-compatibility";
assets/js/acf-input.js CHANGED
@@ -7170,15 +7170,15 @@
7170
  return this.$('input[type="number"]');
7171
  },
7172
 
7173
- setValue: function( val ){
7174
-
7175
  this.busy = true;
7176
 
7177
- // update range input (with change)
7178
  acf.val( this.$input(), val );
7179
 
7180
- // update alt input (without change)
7181
- acf.val( this.$inputAlt(), val, true );
 
7182
 
7183
  this.busy = false;
7184
  },
7170
  return this.$('input[type="number"]');
7171
  },
7172
 
7173
+ setValue: function( val ){
 
7174
  this.busy = true;
7175
 
7176
+ // Update range input (with change).
7177
  acf.val( this.$input(), val );
7178
 
7179
+ // Update alt input (without change).
7180
+ // Read in input value to inherit min/max validation.
7181
+ acf.val( this.$inputAlt(), this.$input().val(), true );
7182
 
7183
  this.busy = false;
7184
  },
assets/js/acf-input.min.js CHANGED
@@ -1,4 +1,4 @@
1
- !function(t,e){var i={};window.acf=i,i.data={},i.get=function(t){return this.data[t]||null},i.has=function(t){return null!==this.get(t)},i.set=function(t,e){return this.data[t]=e,this};var n=0;i.uniqueId=function(t){var e=++n+"";return t?t+e:e},i.uniqueArray=function(t){function e(t,e,i){return i.indexOf(t)===e}return t.filter(e)};var a="";i.uniqid=function(t,e){var i;void 0===t&&(t="");var n=function(t,e){return e<(t=parseInt(t,10).toString(16)).length?t.slice(t.length-e):e>t.length?Array(e-t.length+1).join("0")+t:t};return a||(a=Math.floor(123456789*Math.random())),a++,i=t,i+=n(parseInt((new Date).getTime()/1e3,10),8),i+=n(a,5),e&&(i+=(10*Math.random()).toFixed(8).toString()),i},i.strReplace=function(t,e,i){return i.split(t).join(e)},i.strCamelCase=function(t){return t=(t=t.replace(/[_-]/g," ")).replace(/(?:^\w|\b\w|\s+)/g,function(t,e){return 0==+t?"":0==e?t.toLowerCase():t.toUpperCase()})},i.strPascalCase=function(t){var e=i.strCamelCase(t);return e.charAt(0).toUpperCase()+e.slice(1)},i.strSlugify=function(t){return i.strReplace("_","-",t.toLowerCase())},i.strSanitize=function(t){var e={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Æ":"AE","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ý":"Y","ß":"s","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ù":"u","ú":"u","û":"u","ü":"u","ý":"y","ÿ":"y","Ā":"A","ā":"a","Ă":"A","ă":"a","Ą":"A","ą":"a","Ć":"C","ć":"c","Ĉ":"C","ĉ":"c","Ċ":"C","ċ":"c","Č":"C","č":"c","Ď":"D","ď":"d","Đ":"D","đ":"d","Ē":"E","ē":"e","Ĕ":"E","ĕ":"e","Ė":"E","ė":"e","Ę":"E","ę":"e","Ě":"E","ě":"e","Ĝ":"G","ĝ":"g","Ğ":"G","ğ":"g","Ġ":"G","ġ":"g","Ģ":"G","ģ":"g","Ĥ":"H","ĥ":"h","Ħ":"H","ħ":"h","Ĩ":"I","ĩ":"i","Ī":"I","ī":"i","Ĭ":"I","ĭ":"i","Į":"I","į":"i","İ":"I","ı":"i","IJ":"IJ","ij":"ij","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","Ĺ":"L","ĺ":"l","Ļ":"L","ļ":"l","Ľ":"L","ľ":"l","Ŀ":"L","ŀ":"l","Ł":"l","ł":"l","Ń":"N","ń":"n","Ņ":"N","ņ":"n","Ň":"N","ň":"n","ʼn":"n","Ō":"O","ō":"o","Ŏ":"O","ŏ":"o","Ő":"O","ő":"o","Œ":"OE","œ":"oe","Ŕ":"R","ŕ":"r","Ŗ":"R","ŗ":"r","Ř":"R","ř":"r","Ś":"S","ś":"s","Ŝ":"S","ŝ":"s","Ş":"S","ş":"s","Š":"S","š":"s","Ţ":"T","ţ":"t","Ť":"T","ť":"t","Ŧ":"T","ŧ":"t","Ũ":"U","ũ":"u","Ū":"U","ū":"u","Ŭ":"U","ŭ":"u","Ů":"U","ů":"u","Ű":"U","ű":"u","Ų":"U","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","ź":"z","Ż":"Z","ż":"z","Ž":"Z","ž":"z","ſ":"s","ƒ":"f","Ơ":"O","ơ":"o","Ư":"U","ư":"u","Ǎ":"A","ǎ":"a","Ǐ":"I","ǐ":"i","Ǒ":"O","ǒ":"o","Ǔ":"U","ǔ":"u","Ǖ":"U","ǖ":"u","Ǘ":"U","ǘ":"u","Ǚ":"U","ǚ":"u","Ǜ":"U","ǜ":"u","Ǻ":"A","ǻ":"a","Ǽ":"AE","ǽ":"ae","Ǿ":"O","ǿ":"o"," ":"_","'":"","?":"","/":"","\\":"",".":"",",":"","`":"",">":"","<":"",'"':"","[":"","]":"","|":"","{":"","}":"","(":"",")":""},i=/\W/g,n=function(t){return void 0!==e[t]?e[t]:t};return t=(t=t.replace(i,n)).toLowerCase()},i.strMatch=function(t,e){for(var i=0,n=Math.min(t.length,e.length),a=0;a<n&&t[a]===e[a];a++)i++;return i},i.decode=function(e){return t("<textarea/>").html(e).text()},i.strEscape=function(e){return t("<div>").text(e).html()},i.parseArgs=function(e,i){return"object"!=typeof e&&(e={}),"object"!=typeof i&&(i={}),t.extend({},i,e)},null==window.acfL10n&&(acfL10n={}),i.__=function(t){return acfL10n[t]||t},i._x=function(t,e){return acfL10n[t+"."+e]||acfL10n[t]||t},i._n=function(t,e,n){return 1==n?i.__(t):i.__(e)},i.isArray=function(t){return Array.isArray(t)},i.isObject=function(t){return"object"==typeof t};var r=function(t,e,n){var a=(e=e.replace("[]","[%%index%%]")).match(/([^\[\]])+/g);if(a)for(var r=a.length,o=t,s=0;s<r;s++){var c=String(a[s]);s==r-1?"%%index%%"===c?o.push(n):o[c]=n:("%%index%%"===a[s+1]?i.isArray(o[c])||(o[c]=[]):i.isObject(o[c])||(o[c]={}),o=o[c])}};i.serialize=function(t,e){var n={},a=i.serializeArray(t);void 0!==e&&(a=a.filter(function(t){return 0===t.name.indexOf(e)}).map(function(t){return t.name=t.name.slice(e.length),t}));for(var o=0;o<a.length;o++)r(n,a[o].name,a[o].value);return n},i.serializeArray=function(t){return t.find("select, textarea, input").serializeArray()},i.serializeForAjax=function(t){var e={},n;return i.serializeArray(t).map(function(t){"[]"===t.name.slice(-2)?(e[t.name]=e[t.name]||[],e[t.name].push(t.value)):e[t.name]=t.value}),e},i.addAction=function(t,e,n,a){return i.hooks.addAction.apply(this,arguments),this},i.removeAction=function(t,e){return i.hooks.removeAction.apply(this,arguments),this};var o={};i.doAction=function(t){return o[t]=1,i.hooks.doAction.apply(this,arguments),o[t]=0,this},i.doingAction=function(t){return 1===o[t]},i.didAction=function(t){return void 0!==o[t]},i.currentAction=function(){for(var t in o)if(o[t])return t;return!1},i.addFilter=function(t){return i.hooks.addFilter.apply(this,arguments),this},i.removeFilter=function(t){return i.hooks.removeFilter.apply(this,arguments),this},i.applyFilters=function(t){return i.hooks.applyFilters.apply(this,arguments)},i.arrayArgs=function(t){return Array.prototype.slice.call(t)};try{var s=JSON.parse(localStorage.getItem("acf"))||{}}catch(t){var s={}}var c=function(t){return"this."===t.substr(0,5)&&(t=t.substr(5)+"-"+i.get("post_id")),t};i.getPreference=function(t){return t=c(t),s[t]||null},i.setPreference=function(t,e){t=c(t),null===e?delete s[t]:s[t]=e,localStorage.setItem("acf",JSON.stringify(s))},i.removePreference=function(t){i.setPreference(t,null)},i.remove=function(t){t instanceof jQuery&&(t={target:t}),t=i.parseArgs(t,{target:!1,endHeight:0,complete:function(){}}),i.doAction("remove",t.target),t.target.is("tr")?u(t):l(t)};var l=function(t){var e=t.target,i=e.height(),n=e.width(),a=e.css("margin"),r=e.outerHeight(!0),o=e.attr("style")+"";e.wrap('<div class="acf-temp-remove" style="height:'+r+'px"></div>');var s=e.parent();e.css({height:i,width:n,margin:a,position:"absolute"}),setTimeout(function(){s.css({opacity:0,height:t.endHeight})},50),setTimeout(function(){e.attr("style",o),s.remove(),t.complete()},301)},u=function(e){var i=e.target,n=i.height(),a=i.children().length,r=t('<td class="acf-temp-remove" style="padding:0; height:'+n+'px" colspan="'+a+'"></td>');i.addClass("acf-remove-element"),setTimeout(function(){i.html(r)},251),setTimeout(function(){i.removeClass("acf-remove-element"),r.css({height:e.endHeight})},300),setTimeout(function(){i.remove(),e.complete()},451)};i.duplicate=function(t){t instanceof jQuery&&(t={target:t});var e=0;(t=i.parseArgs(t,{target:!1,search:"",replace:"",before:function(t){},after:function(t,e){},append:function(t,i){t.after(i),e=1}})).target=t.target||t.$el;var n=t.target;t.search=t.search||n.attr("data-id"),t.replace=t.replace||i.uniqid(),t.before(n),i.doAction("before_duplicate",n);var a=n.clone();return i.rename({target:a,search:t.search,replace:t.replace}),a.removeClass("acf-clone"),a.find(".ui-sortable").removeClass("ui-sortable"),t.after(n,a),i.doAction("after_duplicate",n,a),t.append(n,a),i.doAction("append",a),a},i.rename=function(t){t instanceof jQuery&&(t={target:t});var e=(t=i.parseArgs(t,{target:!1,destructive:!1,search:"",replace:""})).target,n=t.search||e.attr("data-id"),a=t.replace||i.uniqid("acf"),r=function(t,e){return e.replace(n,a)};if(t.destructive){var o=e.outerHTML();o=i.strReplace(n,a,o),e.replaceWith(o)}else e.attr("data-id",a),e.find('[id*="'+n+'"]').attr("id",r),e.find('[for*="'+n+'"]').attr("for",r),e.find('[name*="'+n+'"]').attr("name",r);return e},i.prepareForAjax=function(t){return t.nonce=i.get("nonce"),t.post_id=i.get("post_id"),i.has("language")&&(t.lang=i.get("language")),t=i.applyFilters("prepare_for_ajax",t)},i.startButtonLoading=function(t){t.prop("disabled",!0),t.after(' <i class="acf-loading"></i>')},i.stopButtonLoading=function(t){t.prop("disabled",!1),t.next(".acf-loading").remove()},i.showLoading=function(t){t.append('<div class="acf-loading-overlay"><i class="acf-loading"></i></div>')},i.hideLoading=function(t){t.children(".acf-loading-overlay").remove()},i.updateUserSetting=function(e,n){var a={action:"acf/ajax/user_setting",name:e,value:n};t.ajax({url:i.get("ajaxurl"),data:i.prepareForAjax(a),type:"post",dataType:"html"})},i.val=function(t,e,i){var n=t.val();return e!==n&&(t.val(e),t.is("select")&&null===t.val()?(t.val(n),!1):(!0!==i&&t.trigger("change"),!0))},i.show=function(t,e){return e&&i.unlock(t,"hidden",e),!i.isLocked(t,"hidden")&&(!!t.hasClass("acf-hidden")&&(t.removeClass("acf-hidden"),!0))},i.hide=function(t,e){return e&&i.lock(t,"hidden",e),!t.hasClass("acf-hidden")&&(t.addClass("acf-hidden"),!0)},i.isHidden=function(t){return t.hasClass("acf-hidden")},i.isVisible=function(t){return!i.isHidden(t)};var d=function(t,e){return!t.hasClass("acf-disabled")&&(e&&i.unlock(t,"disabled",e),!i.isLocked(t,"disabled")&&(!!t.prop("disabled")&&(t.prop("disabled",!1),!0)))};i.enable=function(e,i){if(e.attr("name"))return d(e,i);var n=!1;return e.find("[name]").each(function(){var e;d(t(this),i)&&(n=!0)}),n};var f=function(t,e){return e&&i.lock(t,"disabled",e),!t.prop("disabled")&&(t.prop("disabled",!0),!0)};i.disable=function(e,i){if(e.attr("name"))return f(e,i);var n=!1;return e.find("[name]").each(function(){var e;f(t(this),i)&&(n=!0)}),n},i.isset=function(t){for(var e=1;e<arguments.length;e++){if(!t||!t.hasOwnProperty(arguments[e]))return!1;t=t[arguments[e]]}return!0},i.isget=function(t){for(var e=1;e<arguments.length;e++){if(!t||!t.hasOwnProperty(arguments[e]))return null;t=t[arguments[e]]}return t},i.getFileInputData=function(t,e){var n=t.val();if(!n)return!1;var a={url:n},r=i.isget(t[0],"files",0);if(r)if(a.size=r.size,a.type=r.type,r.type.indexOf("image")>-1){var o=window.URL||window.webkitURL,s=new Image;s.onload=function(){a.width=this.width,a.height=this.height,e(a)},s.src=o.createObjectURL(r)}else e(a);else e(a)},i.isAjaxSuccess=function(t){return t&&t.success},i.getAjaxMessage=function(t){return i.isget(t,"data","message")},i.getAjaxError=function(t){return i.isget(t,"data","error")},i.renderSelect=function(t,e){var n=t.val(),a=[],r=function(t){var e="";return t.map(function(t){var n=t.text||t.label||"",o=t.id||t.value||"";a.push(o),t.children?e+='<optgroup label="'+i.strEscape(n)+'">'+r(t.children)+"</optgroup>":e+='<option value="'+o+'"'+(t.disabled?' disabled="disabled"':"")+">"+i.strEscape(n)+"</option>"}),e};return t.html(r(e)),a.indexOf(n)>-1&&t.val(n),t.val()};var h=function(t,e){return t.data("acf-lock-"+e)||[]},p=function(t,e,i){t.data("acf-lock-"+e,i)};i.lock=function(t,e,i){var n=h(t,e),a;n.indexOf(i)<0&&(n.push(i),p(t,e,n))},i.unlock=function(t,e,i){var n=h(t,e),a=n.indexOf(i);return a>-1&&(n.splice(a,1),p(t,e,n)),0===n.length},i.isLocked=function(t,e){return h(t,e).length>0},i.isGutenberg=function(){return window.wp&&wp.data&&wp.data.select&&wp.data.select("core/editor")},i.objectToArray=function(t){return Object.keys(t).map(function(e){return t[e]})},t.fn.exists=function(){return t(this).length>0},t.fn.outerHTML=function(){return t(this).get(0).outerHTML},Array.prototype.indexOf||(Array.prototype.indexOf=function(e){return t.inArray(e,this)}),t(document).ready(function(){i.doAction("ready")}),t(window).on("load",function(){i.doAction("load")}),t(window).on("beforeunload",function(){i.doAction("unload")}),t(window).on("resize",function(){i.doAction("resize")}),t(document).on("sortstart",function(t,e){i.doAction("sortstart",e.item,e.placeholder)}),t(document).on("sortstop",function(t,e){i.doAction("sortstop",e.item,e.placeholder)})}(jQuery),function(t,e){"use strict";var i=function(){function t(){return f}function e(t,e,i,n){return"string"==typeof t&&"function"==typeof e&&c("actions",t,e,i=parseInt(i||10,10),n),d}function i(){var t=Array.prototype.slice.call(arguments),e=t.shift();return"string"==typeof e&&u("actions",e,t),d}function n(t,e){return"string"==typeof t&&s("actions",t,e),d}function a(t,e,i,n){return"string"==typeof t&&"function"==typeof e&&c("filters",t,e,i=parseInt(i||10,10),n),d}function r(){var t=Array.prototype.slice.call(arguments),e=t.shift();return"string"==typeof e?u("filters",e,t):d}function o(t,e){return"string"==typeof t&&s("filters",t,e),d}function s(t,e,i,n){if(f[t][e])if(i){var a=f[t][e],r;if(n)for(r=a.length;r--;){var o=a[r];o.callback===i&&o.context===n&&a.splice(r,1)}else for(r=a.length;r--;)a[r].callback===i&&a.splice(r,1)}else f[t][e]=[]}function c(t,e,i,n,a){var r={callback:i,priority:n,context:a},o=f[t][e];o?(o.push(r),o=l(o)):o=[r],f[t][e]=o}function l(t){for(var e,i,n,a=1,r=t.length;a<r;a++){for(e=t[a],i=a;(n=t[i-1])&&n.priority>e.priority;)t[i]=t[i-1],--i;t[i]=e}return t}function u(t,e,i){var n=f[t][e];if(!n)return"filters"===t&&i[0];var a=0,r=n.length;if("filters"===t)for(;a<r;a++)i[0]=n[a].callback.apply(n[a].context,i);else for(;a<r;a++)n[a].callback.apply(n[a].context,i);return"filters"!==t||i[0]}var d={removeFilter:o,applyFilters:r,addFilter:a,removeAction:n,doAction:i,addAction:e,storage:t},f={actions:{},filters:{}};return d};acf.hooks=new i}(window),function(t,e){var i=/^(\S+)\s*(.*)$/,n=function(e){var i=this,n;return n=e&&e.hasOwnProperty("constructor")?e.constructor:function(){return i.apply(this,arguments)},t.extend(n,i),n.prototype=Object.create(i.prototype),t.extend(n.prototype,e),n.prototype.constructor=n,n},a=acf.Model=function(){this.cid=acf.uniqueId("acf"),this.data=t.extend(!0,{},this.data),this.setup.apply(this,arguments),this.$el&&!this.$el.data("acf")&&this.$el.data("acf",this);var e=function(){this.initialize(),this.addEvents(),this.addActions(),this.addFilters()};this.wait&&!acf.didAction(this.wait)?this.addAction(this.wait,e):e.apply(this)};t.extend(a.prototype,{id:"",cid:"",$el:null,data:{},busy:!1,changed:!1,events:{},actions:{},filters:{},eventScope:"",wait:!1,priority:10,get:function(t){return this.data[t]},has:function(t){return null!=this.get(t)},set:function(t,e,i){var n=this.get(t);return n==e?this:(this.data[t]=e,i||(this.changed=!0,this.trigger("changed:"+t,[e,n]),this.trigger("changed",[t,e,n])),this)},inherit:function(e){return e instanceof jQuery&&(e=e.data()),t.extend(this.data,e),this},prop:function(){return this.$el.prop.apply(this.$el,arguments)},setup:function(e){t.extend(this,e)},initialize:function(){},addElements:function(t){if(!(t=t||this.elements||null)||!Object.keys(t).length)return!1;for(var e in t)this.addElement(e,t[e])},addElement:function(t,e){this["$"+t]=this.$(e)},addEvents:function(t){if(!(t=t||this.events||null))return!1;for(var e in t){var n=e.match(i);this.on(n[1],n[2],t[e])}},removeEvents:function(t){if(!(t=t||this.events||null))return!1;for(var e in t){var n=e.match(i);this.off(n[1],n[2],t[e])}},getEventTarget:function(e,i){return e||this.$el||t(document)},validateEvent:function(e){return!this.eventScope||t(e.target).closest(this.eventScope).is(this.$el)},proxyEvent:function(e){return this.proxy(function(i){if(this.validateEvent(i)){var n,a=acf.arrayArgs(arguments).slice(1),r=[i,t(i.currentTarget)].concat(a);e.apply(this,r)}})},on:function(t,e,i,n){var a,r,o,s,c;t instanceof jQuery?n?(a=t,r=e,o=i,s=n):(a=t,r=e,s=i):i?(r=t,o=e,s=i):(r=t,s=e),a=this.getEventTarget(a),"string"==typeof s&&(s=this.proxyEvent(this[s])),r=r+"."+this.cid,c=o?[r,o,s]:[r,s],a.on.apply(a,c)},off:function(t,e,i){var n,a,r,o;t instanceof jQuery?i?(n=t,a=e,r=i):(n=t,a=e):e?(a=t,r=e):a=t,n=this.getEventTarget(n),a=a+"."+this.cid,o=r?[a,r]:[a],n.off.apply(n,o)},trigger:function(t,e,i){var n=this.getEventTarget();return i?n.trigger.apply(n,arguments):n.triggerHandler.apply(n,arguments),this},addActions:function(t){if(!(t=t||this.actions||null))return!1;for(var e in t)this.addAction(e,t[e])},removeActions:function(t){if(!(t=t||this.actions||null))return!1;for(var e in t)this.removeAction(e,t[e])},addAction:function(t,e,i){i=i||this.priority,"string"==typeof e&&(e=this[e]),acf.addAction(t,e,i,this)},removeAction:function(t,e){acf.removeAction(t,this[e])},addFilters:function(t){if(!(t=t||this.filters||null))return!1;for(var e in t)this.addFilter(e,t[e])},addFilter:function(t,e,i){i=i||this.priority,"string"==typeof e&&(e=this[e]),acf.addFilter(t,e,i,this)},removeFilters:function(t){if(!(t=t||this.filters||null))return!1;for(var e in t)this.removeFilter(e,t[e])},removeFilter:function(t,e){acf.removeFilter(t,this[e])},$:function(t){return this.$el.find(t)},remove:function(){this.removeEvents(),this.removeActions(),this.removeFilters(),this.$el.remove()},setTimeout:function(t,e){return setTimeout(this.proxy(t),e)},time:function(){console.time(this.id||this.cid)},timeEnd:function(){console.timeEnd(this.id||this.cid)},show:function(){acf.show(this.$el)},hide:function(){acf.hide(this.$el)},proxy:function(e){return t.proxy(e,this)}}),a.extend=n,acf.models={},acf.getInstance=function(t){return t.data("acf")},acf.getInstances=function(e){var i=[];return e.each(function(){i.push(acf.getInstance(t(this)))}),i}}(jQuery),function(t,e){acf.models.Popup=acf.Model.extend({data:{title:"",content:"",width:0,height:0,loading:!1},events:{'click [data-event="close"]':"onClickClose","click .acf-close-popup":"onClickClose"},setup:function(e){t.extend(this.data,e),this.$el=t(this.tmpl())},initialize:function(){this.render(),this.open()},tmpl:function(){return['<div id="acf-popup">','<div class="acf-popup-box acf-box">','<div class="title"><h3></h3><a href="#" class="acf-icon -cancel grey" data-event="close"></a></div>','<div class="inner"></div>','<div class="loading"><i class="acf-loading"></i></div>',"</div>",'<div class="bg" data-event="close"></div>',"</div>"].join("")},render:function(){var t=this.get("title"),e=this.get("content"),i=this.get("loading"),n=this.get("width"),a=this.get("height");this.title(t),this.content(e),n&&this.$(".acf-popup-box").css("width",n),a&&this.$(".acf-popup-box").css("min-height",a),this.loading(i),acf.doAction("append",this.$el)},update:function(t){this.data=acf.parseArgs(t,this.data),this.render()},title:function(t){this.$(".title:first h3").html(t)},content:function(t){this.$(".inner:first").html(t)},loading:function(t){var e=this.$(".loading:first");t?e.show():e.hide()},open:function(){t("body").append(this.$el)},close:function(){this.remove()},onClickClose:function(t,e){t.preventDefault(),this.close()}}),acf.newPopup=function(t){return new acf.models.Popup(t)}}(jQuery),function(t,e){acf.unload=new acf.Model({wait:"load",active:!0,changed:!1,actions:{validation_failure:"startListening",validation_success:"stopListening"},events:{"change form .acf-field":"startListening","submit form":"stopListening"},enable:function(){this.active=!0},disable:function(){this.active=!1},reset:function(){this.stopListening()},startListening:function(){!this.changed&&this.active&&(this.changed=!0,t(window).on("beforeunload",this.onUnload))},stopListening:function(){this.changed=!1,t(window).off("beforeunload",this.onUnload)},onUnload:function(){return acf.__("The changes you made will be lost if you navigate away from this page")}})}(jQuery),function(t,e){var i=new acf.Model({events:{"click .acf-panel-title":"onClick"},onClick:function(t,e){t.preventDefault(),this.toggle(e.parent())},isOpen:function(t){return t.hasClass("-open")},toggle:function(t){this.isOpen(t)?this.close(t):this.open(t)},open:function(t){t.addClass("-open"),t.find(".acf-panel-title i").attr("class","dashicons dashicons-arrow-down")},close:function(t){t.removeClass("-open"),t.find(".acf-panel-title i").attr("class","dashicons dashicons-arrow-right")}})}(jQuery),function(t,e){var i=acf.Model.extend({data:{text:"",type:"",timeout:0,dismiss:!0,target:!1,close:function(){}},events:{"click .acf-notice-dismiss":"onClickClose"},tmpl:function(){return'<div class="acf-notice"></div>'},setup:function(e){t.extend(this.data,e),this.$el=t(this.tmpl())},initialize:function(){this.render(),this.show()},render:function(){this.type(this.get("type")),this.html("<p>"+this.get("text")+"</p>"),this.get("dismiss")&&(this.$el.append('<a href="#" class="acf-notice-dismiss acf-icon -cancel small"></a>'),this.$el.addClass("-dismiss"));var t=this.get("timeout");t&&this.away(t)},update:function(e){t.extend(this.data,e),this.initialize(),this.removeEvents(),this.addEvents()},show:function(){var t=this.get("target");t&&t.prepend(this.$el)},hide:function(){this.$el.remove()},away:function(t){this.setTimeout(function(){acf.remove(this.$el)},t)},type:function(t){var e=this.get("type");e&&this.$el.removeClass("-"+e),this.$el.addClass("-"+t),"error"==t&&this.$el.addClass("acf-error-message")},html:function(t){this.$el.html(t)},text:function(t){this.$("p").html(t)},onClickClose:function(t,e){t.preventDefault(),this.get("close").apply(this,arguments),this.remove()}});acf.newNotice=function(t){return"object"!=typeof t&&(t={text:t}),new i(t)};var n=new acf.Model({wait:"prepare",priority:1,initialize:function(){var e=t(".acf-admin-notice");e.length&&t("h1:first").after(e)}})}(jQuery),function(t,e){var i=new acf.Model({wait:"prepare",priority:1,initialize:function(){(acf.get("postboxes")||[]).map(acf.newPostbox)}});acf.getPostbox=function(e){return"string"==typeof e&&(e=t("#"+e)),acf.getInstance(e)},acf.getPostboxes=function(){return acf.getInstances(t(".acf-postbox"))},acf.newPostbox=function(t){return new acf.models.Postbox(t)},acf.models.Postbox=acf.Model.extend({data:{id:"",key:"",style:"default",label:"top",edit:""},setup:function(e){e.editLink&&(e.edit=e.editLink),t.extend(this.data,e),this.$el=this.$postbox()},$postbox:function(){return t("#"+this.get("id"))},$hide:function(){return t("#"+this.get("id")+"-hide")},$hideLabel:function(){return this.$hide().parent()},$hndle:function(){return this.$("> .hndle")},$inside:function(){return this.$("> .inside")},isVisible:function(){return this.$el.hasClass("acf-hidden")},initialize:function(){if(this.$el.addClass("acf-postbox"),this.$el.removeClass("hide-if-js"),"block"!==acf.get("editor")){var t=this.get("style");"default"!==t&&this.$el.addClass(t)}this.$inside().addClass("acf-fields").addClass("-"+this.get("label"));var e=this.get("edit");e&&this.$hndle().append('<a href="'+e+'" class="dashicons dashicons-admin-generic acf-hndle-cog acf-js-tooltip" title="'+acf.__("Edit field group")+'"></a>'),this.show()},show:function(){this.$hideLabel().show(),this.$hide().prop("checked",!0),this.$el.show().removeClass("acf-hidden")},enable:function(){acf.enable(this.$el,"postbox")},showEnable:function(){this.show(),this.enable()},hide:function(){this.$hideLabel().hide(),this.$el.hide().addClass("acf-hidden")},disable:function(){acf.disable(this.$el,"postbox")},hideDisable:function(){this.hide(),this.disable()},html:function(t){this.$inside().html(t),acf.doAction("append",this.$el)}})}(jQuery),function(t,e){acf.newTooltip=function(t){return"object"!=typeof t&&(t={text:t}),void 0!==t.confirmRemove?(t.textConfirm=acf.__("Remove"),t.textCancel=acf.__("Cancel"),new n(t)):void 0!==t.confirm?new n(t):new i(t)};var i=acf.Model.extend({data:{text:"",timeout:0,target:null},tmpl:function(){return'<div class="acf-tooltip"></div>'},setup:function(e){t.extend(this.data,e),this.$el=t(this.tmpl())},initialize:function(){this.render(),this.show(),this.position();var e=this.get("timeout");e&&setTimeout(t.proxy(this.fade,this),e)},update:function(e){t.extend(this.data,e),this.initialize()},render:function(){this.html(this.get("text"))},show:function(){t("body").append(this.$el)},hide:function(){this.$el.remove()},fade:function(){this.$el.addClass("acf-fade-up"),this.setTimeout(function(){this.remove()},250)},html:function(t){this.$el.html(t)},position:function(){var e=this.$el,i=this.get("target");if(i){e.removeClass("right left bottom top").css({top:0,left:0});var n=10,a=i.outerWidth(),r=i.outerHeight(),o=i.offset().top,s=i.offset().left,c=e.outerWidth(),l=e.outerHeight(),u=e.offset().top,d=o-l-u,f=s+a/2-c/2;f<10?(e.addClass("right"),f=s+a,d=o+r/2-l/2-u):f+c+10>t(window).width()?(e.addClass("left"),f=s-c,d=o+r/2-l/2-u):d-t(window).scrollTop()<10?(e.addClass("bottom"),d=o+r-u):e.addClass("top"),e.css({top:d,left:f})}}}),n=i.extend({data:{text:"",textConfirm:"",textCancel:"",target:null,targetConfirm:!0,confirm:function(){},cancel:function(){},context:!1},events:{'click [data-event="cancel"]':"onCancel",'click [data-event="confirm"]':"onConfirm"},addEvents:function(){acf.Model.prototype.addEvents.apply(this);var e=t(document),i=this.get("target");this.setTimeout(function(){this.on(e,"click","onCancel")}),this.get("targetConfirm")&&this.on(i,"click","onConfirm")},removeEvents:function(){acf.Model.prototype.removeEvents.apply(this);var e=t(document),i=this.get("target");this.off(e,"click"),this.off(i,"click")},render:function(){var t,e,i,n=[this.get("text")||acf.__("Are you sure?"),'<a href="#" data-event="confirm">'+(this.get("textConfirm")||acf.__("Yes"))+"</a>",'<a href="#" data-event="cancel">'+(this.get("textCancel")||acf.__("No"))+"</a>"].join(" ");this.html(n),this.$el.addClass("-confirm")},onCancel:function(t,e){t.preventDefault(),t.stopImmediatePropagation();var i=this.get("cancel"),n=this.get("context")||this;i.apply(n,arguments),this.remove()},onConfirm:function(t,e){t.preventDefault(),t.stopImmediatePropagation();var i=this.get("confirm"),n=this.get("context")||this;i.apply(n,arguments),this.remove()}});acf.models.Tooltip=i,acf.models.TooltipConfirm=n;var a=new acf.Model({tooltip:!1,events:{"mouseenter .acf-js-tooltip":"showTitle","mouseup .acf-js-tooltip":"hideTitle","mouseleave .acf-js-tooltip":"hideTitle"},showTitle:function(t,e){var i=e.attr("title");i&&(e.attr("title",""),this.tooltip?this.tooltip.update({text:i,target:e}):this.tooltip=acf.newTooltip({text:i,target:e}))},hideTitle:function(t,e){this.tooltip.hide(),e.attr("title",this.tooltip.get("text"))}})}(jQuery),function(t,e){var i=[];acf.Field=acf.Model.extend({type:"",eventScope:".acf-field",wait:"ready",setup:function(t){this.$el=t,this.inherit(t),this.inherit(this.$control())},val:function(t){return void 0!==t?this.setValue(t):this.prop("disabled")?null:this.getValue()},getValue:function(){return this.$input().val()},setValue:function(t){return acf.val(this.$input(),t)},__:function(t){return acf._e(this.type,t)},$control:function(){return!1},$input:function(){return this.$("[name]:first")},$inputWrap:function(){return this.$(".acf-input:first")},$labelWrap:function(){return this.$(".acf-label:first")},getInputName:function(){return this.$input().attr("name")||""},parent:function(){var t=this.parents();return!!t.length&&t[0]},parents:function(){var t=this.$el.parents(".acf-field"),e;return acf.getFields(t)},show:function(t,e){var i=acf.show(this.$el,t);return i&&(this.prop("hidden",!1),acf.doAction("show_field",this,e)),i},hide:function(t,e){var i=acf.hide(this.$el,t);return i&&(this.prop("hidden",!0),acf.doAction("hide_field",this,e)),i},enable:function(t,e){var i=acf.enable(this.$el,t);return i&&(this.prop("disabled",!1),acf.doAction("enable_field",this,e)),i},disable:function(t,e){var i=acf.disable(this.$el,t);return i&&(this.prop("disabled",!0),acf.doAction("disable_field",this,e)),i},showEnable:function(t,e){return this.enable.apply(this,arguments),this.show.apply(this,arguments)},hideDisable:function(t,e){return this.disable.apply(this,arguments),this.hide.apply(this,arguments)},showNotice:function(t){"object"!=typeof t&&(t={text:t}),this.notice&&this.notice.remove(),t.target=this.$inputWrap(),this.notice=acf.newNotice(t)},removeNotice:function(t){this.notice&&(this.notice.away(t||0),this.notice=!1)},showError:function(e){this.$el.addClass("acf-error"),void 0!==e&&this.showNotice({text:e,type:"error",dismiss:!1}),acf.doAction("invalid_field",this),this.$el.one("focus change","input, select, textarea",t.proxy(this.removeError,this))},removeError:function(){this.$el.removeClass("acf-error"),this.removeNotice(250),acf.doAction("valid_field",this)},trigger:function(t,e,i){return"invalidField"==t&&(i=!0),acf.Model.prototype.trigger.apply(this,[t,e,i])}}),acf.newField=function(t){var e=t.data("type"),i=n(e),a,r=new(acf.models[i]||acf.Field)(t);return acf.doAction("new_field",r),r};var n=function(t){return acf.strPascalCase(t||"")+"Field"};acf.registerFieldType=function(t){var e,a=t.prototype.type,r=n(a);acf.models[r]=t,i.push(a)},acf.getFieldType=function(t){var e=n(t);return acf.models[e]||!1},acf.getFieldTypes=function(t){t=acf.parseArgs(t,{category:""});var e=[];return i.map(function(i){var n=acf.getFieldType(i),a=n.prototype;t.category&&a.category!==t.category||e.push(n)}),e}}(jQuery),function(t,e){acf.findFields=function(e){var i=".acf-field",n=!1;return(e=acf.parseArgs(e,{key:"",name:"",type:"",is:"",parent:!1,sibling:!1,limit:!1,visible:!1,suppressFilters:!1})).suppressFilters||(e=acf.applyFilters("find_fields_args",e)),e.key&&(i+='[data-key="'+e.key+'"]'),e.type&&(i+='[data-type="'+e.type+'"]'),e.name&&(i+='[data-name="'+e.name+'"]'),e.is&&(i+=e.is),e.visible&&(i+=":visible"),n=e.parent?e.parent.find(i):e.sibling?e.sibling.siblings(i):t(i),e.suppressFilters||(n=n.not(".acf-clone .acf-field"),n=acf.applyFilters("find_fields",n)),e.limit&&(n=n.slice(0,e.limit)),n},acf.findField=function(t,e){return acf.findFields({key:t,limit:1,parent:e,suppressFilters:!0})},acf.getField=function(t){t instanceof jQuery||(t=acf.findField(t));var e=t.data("acf");return e||(e=acf.newField(t)),e},acf.getFields=function(e){e instanceof jQuery||(e=acf.findFields(e));var i=[];return e.each(function(){var e=acf.getField(t(this));i.push(e)}),i},acf.findClosestField=function(t){return t.closest(".acf-field")},acf.getClosestField=function(t){var e=acf.findClosestField(t);return this.getField(e)};var i=function(t){var e=t,i=t+"_fields",a=t+"_field",r=function(t){var e,n=acf.arrayArgs(arguments).slice(1),a=acf.getFields({parent:t});if(a.length){var r=[i,a].concat(n);acf.doAction.apply(null,r)}},o=function(t){var e,i=acf.arrayArgs(arguments).slice(1);t.map(function(t,e){var n=[a,t].concat(i);acf.doAction.apply(null,n)})};acf.addAction(e,r),acf.addAction(i,o),n(t)},n=function(t){var e=t+"_field",i=t+"Field",n=function(n){var a=acf.arrayArgs(arguments),r=a.slice(1),s;["type","name","key"].map(function(t){var i="/"+t+"="+n.get(t);a=[e+i,n].concat(r),acf.doAction.apply(null,a)}),o.indexOf(t)>-1&&n.trigger(i,r)};acf.addAction(e,n)},a,r=["valid","invalid","enable","disable","new"],o=["remove","unmount","remount","sortstart","sortstop","show","hide","unload","valid","invalid","enable","disable"];["prepare","ready","load","append","remove","unmount","remount","sortstart","sortstop","show","hide","unload"].map(i),r.map(n);var s=new acf.Model({id:"fieldsEventManager",events:{'click .acf-field a[href="#"]':"onClick","change .acf-field":"onChange"},onClick:function(t){t.preventDefault()},onChange:function(){t("#_acf_changed").val(1)}})}(jQuery),function(t,e){var i=0,n=acf.Field.extend({type:"accordion",wait:"",$control:function(){return this.$(".acf-fields:first")},initialize:function(){if(!this.$el.is("td")){if(this.get("endpoint"))return this.remove();var e=this.$el,n=this.$labelWrap(),r=this.$inputWrap(),o=this.$control(),s=r.children(".description");if(s.length&&n.append(s),this.$el.is("tr")){var c=this.$el.closest("table"),l=t('<div class="acf-accordion-title"/>'),u=t('<div class="acf-accordion-content"/>'),d=t('<table class="'+c.attr("class")+'"/>'),f=t("<tbody/>");l.append(n.html()),d.append(f),u.append(d),r.append(l),r.append(u),n.remove(),o.remove(),r.attr("colspan",2),n=l,r=u,o=f}e.addClass("acf-accordion"),n.addClass("acf-accordion-title"),r.addClass("acf-accordion-content"),i++,this.get("multi_expand")&&e.attr("multi-expand",1);var h=acf.getPreference("this.accordions")||[];void 0!==h[i-1]&&this.set("open",h[i-1]),this.get("open")&&(e.addClass("-open"),r.css("display","block")),n.prepend(a.iconHtml({open:this.get("open")}));var p=e.parent();o.addClass(p.hasClass("-left")?"-left":""),o.addClass(p.hasClass("-clear")?"-clear":""),o.append(e.nextUntil(".acf-field-accordion",".acf-field")),o.removeAttr("data-open data-multi_expand data-endpoint")}}});acf.registerFieldType(n);var a=new acf.Model({actions:{unload:"onUnload"},events:{
2
- "click .acf-accordion-title":"onClick","invalidField .acf-accordion":"onInvalidField"},isOpen:function(t){return t.hasClass("-open")},toggle:function(t){this.isOpen(t)?this.close(t):this.open(t)},iconHtml:function(t){var e;return'<i class="acf-accordion-icon dashicons dashicons-'+(t.open?"arrow-down":"arrow-right")+'"></i>'},open:function(e){e.find(".acf-accordion-content:first").slideDown().css("display","block"),e.find(".acf-accordion-icon:first").replaceWith(this.iconHtml({open:!0})),e.addClass("-open"),acf.doAction("show",e),e.attr("multi-expand")||e.siblings(".acf-accordion.-open").each(function(){a.close(t(this))})},close:function(t){t.find(".acf-accordion-content:first").slideUp(),t.find(".acf-accordion-icon:first").replaceWith(this.iconHtml({open:!1})),t.removeClass("-open"),acf.doAction("hide",t)},onClick:function(t,e){t.preventDefault(),this.toggle(e.parent())},onInvalidField:function(t,e){this.busy||(this.busy=!0,this.setTimeout(function(){this.busy=!1},1e3),this.open(e))},onUnload:function(e){var i=[];t(".acf-accordion").each(function(){var e=t(this).hasClass("-open")?1:0;i.push(e)}),i.length&&acf.setPreference("this.accordions",i)}})}(jQuery),function(t,e){var i=acf.Field.extend({type:"button_group",events:{'click input[type="radio"]':"onClick"},$control:function(){return this.$(".acf-button-group")},$input:function(){return this.$("input:checked")},setValue:function(t){this.$('input[value="'+t+'"]').prop("checked",!0).trigger("change")},onClick:function(t,e){var i=e.parent("label"),n=i.hasClass("selected");this.$(".selected").removeClass("selected"),i.addClass("selected"),this.get("allow_null")&&n&&(i.removeClass("selected"),e.prop("checked",!1).trigger("change"))}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"checkbox",events:{"change input":"onChange","click .acf-add-checkbox":"onClickAdd","click .acf-checkbox-toggle":"onClickToggle","click .acf-checkbox-custom":"onClickCustom"},$control:function(){return this.$(".acf-checkbox-list")},$toggle:function(){return this.$(".acf-checkbox-toggle")},$input:function(){return this.$('input[type="hidden"]')},$inputs:function(){return this.$('input[type="checkbox"]').not(".acf-checkbox-toggle")},getValue:function(){var e=[];return this.$(":checked").each(function(){e.push(t(this).val())}),!!e.length&&e},onChange:function(t,e){var i=e.prop("checked"),n=this.$toggle(),a;(i?e.parent().addClass("selected"):e.parent().removeClass("selected"),n.length)&&(0==this.$inputs().not(":checked").length?n.prop("checked",!0):n.prop("checked",!1))},onClickAdd:function(t,e){var i='<li><input class="acf-checkbox-custom" type="checkbox" checked="checked" /><input type="text" name="'+this.getInputName()+'[]" /></li>';e.parent("li").before(i)},onClickToggle:function(t,e){var i=e.prop("checked"),n;this.$inputs().prop("checked",i)},onClickCustom:function(t,e){var i=e.prop("checked"),n=e.next('input[type="text"]');i?n.prop("disabled",!1):(n.prop("disabled",!0),""==n.val()&&e.parent("li").remove())}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"color_picker",wait:"load",$control:function(){return this.$(".acf-color-picker")},$input:function(){return this.$('input[type="hidden"]')},$inputText:function(){return this.$('input[type="text"]')},setValue:function(t){acf.val(this.$input(),t),this.$inputText().iris("color",t)},initialize:function(){var t=this.$input(),e=this.$inputText(),i=function(i){setTimeout(function(){acf.val(t,e.val())},1)},n={defaultColor:!1,palettes:!0,hide:!0,change:i,clear:i},n=acf.applyFilters("color_picker_args",n,this);e.wpColorPicker(n)}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"date_picker",events:{'blur input[type="text"]':"onBlur"},$control:function(){return this.$(".acf-date-picker")},$input:function(){return this.$('input[type="hidden"]')},$inputText:function(){return this.$('input[type="text"]')},initialize:function(){if(this.has("save_format"))return this.initializeCompatibility();var t=this.$input(),e=this.$inputText(),i={dateFormat:this.get("date_format"),altField:t,altFormat:"yymmdd",changeYear:!0,yearRange:"-100:+100",changeMonth:!0,showButtonPanel:!0,firstDay:this.get("first_day")};i=acf.applyFilters("date_picker_args",i,this),acf.newDatePicker(e,i),acf.doAction("date_picker_init",e,i,this)},initializeCompatibility:function(){var t=this.$input(),e=this.$inputText();e.val(t.val());var i={dateFormat:this.get("date_format"),altField:t,altFormat:this.get("save_format"),changeYear:!0,yearRange:"-100:+100",changeMonth:!0,showButtonPanel:!0,firstDay:this.get("first_day")},n=(i=acf.applyFilters("date_picker_args",i,this)).dateFormat;i.dateFormat=this.get("save_format"),acf.newDatePicker(e,i),e.datepicker("option","dateFormat",n),acf.doAction("date_picker_init",e,i,this)},onBlur:function(){this.$inputText().val()||acf.val(this.$input(),"")}});acf.registerFieldType(i);var n=new acf.Model({priority:5,wait:"ready",initialize:function(){var e=acf.get("locale"),i=acf.get("rtl"),n=acf.get("datePickerL10n");return!!n&&(void 0!==t.datepicker&&(n.isRTL=i,t.datepicker.regional[e]=n,void t.datepicker.setDefaults(n)))}});acf.newDatePicker=function(e,i){if(void 0===t.datepicker)return!1;i=i||{},e.datepicker(i),t("body > #ui-datepicker-div").exists()&&t("body > #ui-datepicker-div").wrap('<div class="acf-ui-datepicker" />')}}(jQuery),function(t,e){var i=acf.models.DatePickerField.extend({type:"date_time_picker",$control:function(){return this.$(".acf-date-time-picker")},initialize:function(){var t=this.$input(),e=this.$inputText(),i={dateFormat:this.get("date_format"),timeFormat:this.get("time_format"),altField:t,altFieldTimeOnly:!1,altFormat:"yy-mm-dd",altTimeFormat:"HH:mm:ss",changeYear:!0,yearRange:"-100:+100",changeMonth:!0,showButtonPanel:!0,firstDay:this.get("first_day"),controlType:"select",oneLine:!0};i=acf.applyFilters("date_time_picker_args",i,this),acf.newDateTimePicker(e,i),acf.doAction("date_time_picker_init",e,i,this)}});acf.registerFieldType(i);var n=new acf.Model({priority:5,wait:"ready",initialize:function(){var e=acf.get("locale"),i=acf.get("rtl"),n=acf.get("dateTimePickerL10n");return!!n&&(void 0!==t.timepicker&&(n.isRTL=i,t.timepicker.regional[e]=n,void t.timepicker.setDefaults(n)))}});acf.newDateTimePicker=function(e,i){if(void 0===t.timepicker)return!1;i=i||{},e.datetimepicker(i),t("body > #ui-datepicker-div").exists()&&t("body > #ui-datepicker-div").wrap('<div class="acf-ui-datepicker" />')}}(jQuery),function(t,e){function i(e){if(r)return e();if(acf.isset(window,"google","maps","Geocoder"))return r=new google.maps.Geocoder,e();if(acf.addAction("google_map_api_loaded",e),!a){var i=acf.get("google_map_api");i&&(a=!0,t.ajax({url:i,dataType:"script",cache:!0,success:function(){r=new google.maps.Geocoder,acf.doAction("google_map_api_loaded")}}))}}var n=acf.Field.extend({type:"google_map",map:!1,wait:"load",events:{'click a[data-name="clear"]':"onClickClear",'click a[data-name="locate"]':"onClickLocate",'click a[data-name="search"]':"onClickSearch","keydown .search":"onKeydownSearch","keyup .search":"onKeyupSearch","focus .search":"onFocusSearch","blur .search":"onBlurSearch",showField:"onShow"},$control:function(){return this.$(".acf-google-map")},$input:function(t){return this.$('input[data-name="'+(t||"address")+'"]')},$search:function(){return this.$(".search")},$canvas:function(){return this.$(".canvas")},addClass:function(t){this.$control().addClass(t)},removeClass:function(t){this.$control().removeClass(t)},getValue:function(){var e={lat:"",lng:"",address:""};return this.$('input[type="hidden"]').each(function(){e[t(this).data("name")]=t(this).val()}),e.lat&&e.lng||(e=!1),e},setValue:function(t){for(var e in t=acf.parseArgs(t,{lat:"",lng:"",address:""}))acf.val(this.$input(e),t[e]);t.lat&&t.lng||(t=!1),this.renderVal(t);var i=this.newLatLng(t.lat,t.lng);acf.doAction("google_map_change",i,this.map,this)},renderVal:function(t){t?(this.addClass("-value"),this.setPosition(t.lat,t.lng),this.map.marker.setVisible(!0)):(this.removeClass("-value"),this.map.marker.setVisible(!1)),this.$search().val(t.address)},setPosition:function(t,e){var i=this.newLatLng(t,e);return this.map.marker.setPosition(i),this.map.marker.setVisible(!0),this.center(),this},center:function(){var t=this.map.marker.getPosition(),e=this.get("lat"),i=this.get("lng");t&&(e=t.lat(),i=t.lng());var n=this.newLatLng(e,i);this.map.setCenter(n)},getSearchVal:function(){return this.$search().val()},initialize:function(){i(this.initializeMap.bind(this))},newLatLng:function(t,e){return new google.maps.LatLng(parseFloat(t),parseFloat(e))},initializeMap:function(){var t=this.get("zoom"),e=this.get("lat"),i=this.get("lng"),n={scrollwheel:!1,zoom:parseInt(t),center:this.newLatLng(e,i),mapTypeId:google.maps.MapTypeId.ROADMAP,marker:{draggable:!0,raiseOnDrag:!0},autocomplete:{}};n=acf.applyFilters("google_map_args",n,this);var a=new google.maps.Map(this.$canvas()[0],n),r=acf.parseArgs(n.marker,{draggable:!0,raiseOnDrag:!0,map:a});r=acf.applyFilters("google_map_marker_args",r,this);var o=new google.maps.Marker(r),s=!1;if(acf.isset(google,"maps","places","Autocomplete")){var c=n.autocomplete||{};c=acf.applyFilters("google_map_autocomplete_args",c,this),(s=new google.maps.places.Autocomplete(this.$search()[0],c)).bindTo("bounds",a)}this.addMapEvents(this,a,o,s),a.acf=this,a.marker=o,a.autocomplete=s,this.map=a,acf.doAction("google_map_init",a,o,this);var l=this.getValue();this.renderVal(l)},addMapEvents:function(t,e,i,n){google.maps.event.addListener(e,"click",function(e){var i=e.latLng.lat(),n=e.latLng.lng();t.searchPosition(i,n)}),google.maps.event.addListener(i,"dragend",function(){var e=this.getPosition(),i=e.lat(),n=e.lng();t.searchPosition(i,n)}),n&&google.maps.event.addListener(n,"place_changed",function(){var e=this.getPlace();e.address=t.getSearchVal(),t.setPlace(e)})},searchPosition:function(e,i){var n=this.newLatLng(e,i),a=this.$control();this.setPosition(e,i),a.addClass("-loading");var o=t.proxy(function(t,n){a.removeClass("-loading");var r="";n!=google.maps.GeocoderStatus.OK?console.log("Geocoder failed due to: "+n):t[0]?r=t[0].formatted_address:console.log("No results found"),this.val({lat:e,lng:i,address:r})},this);r.geocode({latLng:n},o)},setPlace:function(t){if(!t)return this;if(t.name&&!t.geometry)return this.searchAddress(t.name),this;var e=t.geometry.location.lat(),i=t.geometry.location.lng(),n=t.address||t.formatted_address;return this.setValue({lat:e,lng:i,address:n}),this},searchAddress:function(e){var i=e.split(",");if(2==i.length){var n=i[0],a=i[1];if(t.isNumeric(n)&&t.isNumeric(a))return this.searchPosition(n,a)}var o=this.$control();o.addClass("-loading");var s=this.proxy(function(t,i){o.removeClass("-loading");var n="",a="";i!=google.maps.GeocoderStatus.OK?console.log("Geocoder failed due to: "+i):t[0]?(n=t[0].geometry.location.lat(),a=t[0].geometry.location.lng()):console.log("No results found"),this.val({lat:n,lng:a,address:e})});r.geocode({address:e},s)},searchLocation:function(){if(!navigator.geolocation)return alert(acf.__("Sorry, this browser does not support geolocation"));var e=this.$control();e.addClass("-loading");var i=t.proxy(function(t,i){e.removeClass("-loading");var n=t.coords.latitude,a=t.coords.longitude;this.searchPosition(n,a)},this),n=function(t){e.removeClass("-loading")};navigator.geolocation.getCurrentPosition(i,n)},onClickClear:function(t,e){this.val(!1)},onClickLocate:function(t,e){this.searchLocation()},onClickSearch:function(t,e){this.searchAddress(this.$search().val())},onFocusSearch:function(t,e){this.removeClass("-value"),this.onKeyupSearch.apply(this,arguments)},onBlurSearch:function(t,e){this.setTimeout(function(){this.removeClass("-search"),e.val()&&this.addClass("-value")},100)},onKeyupSearch:function(t,e){e.val()?this.addClass("-search"):this.removeClass("-search")},onKeydownSearch:function(t,e){13==t.which&&t.preventDefault()},onMousedown:function(){},onShow:function(){if(!this.map)return!1;this.setTimeout(this.center,10)}});acf.registerFieldType(n);var a=!1,r=!1}(jQuery),function(t,e){var i=acf.Field.extend({type:"image",$control:function(){return this.$(".acf-image-uploader")},$input:function(){return this.$('input[type="hidden"]')},events:{'click a[data-name="add"]':"onClickAdd",'click a[data-name="edit"]':"onClickEdit",'click a[data-name="remove"]':"onClickRemove",'change input[type="file"]':"onChange"},initialize:function(){"basic"===this.get("uploader")&&this.$el.closest("form").attr("enctype","multipart/form-data")},validateAttachment:function(t){void 0!==(t=t||{}).id&&(t=t.attributes),t=acf.parseArgs(t,{url:"",alt:"",title:"",caption:"",description:"",width:0,height:0});var e=acf.isget(t,"sizes",this.get("preview_size"),"url");return null!==e&&(t.url=e),t},render:function(t){t=this.validateAttachment(t),this.$("img").attr({src:t.url,alt:t.alt,title:t.title});var e=t.id||"";this.val(e),e?this.$control().addClass("has-value"):this.$control().removeClass("has-value")},append:function(t,e){var i=function(t,e){for(var i=acf.getFields({key:t.get("key"),parent:e.$el}),n=0;n<i.length;n++)if(!i[n].val())return i[n];return!1},n=i(this,e);n||(e.$(".acf-button:last").trigger("click"),n=i(this,e)),n&&n.render(t)},selectAttachment:function(){var e=this.parent(),i=e&&"repeater"===e.get("type"),n=acf.newMediaPopup({mode:"select",type:"image",title:acf.__("Select Image"),field:this.get("key"),multiple:i,library:this.get("library"),allowedTypes:this.get("mime_types"),select:t.proxy(function(t,i){i>0?this.append(t,e):this.render(t)},this)})},editAttachment:function(){var e=this.val();if(e)var i=acf.newMediaPopup({mode:"edit",title:acf.__("Edit Image"),button:acf.__("Update Image"),attachment:e,field:this.get("key"),select:t.proxy(function(t,e){this.render(t)},this)})},removeAttachment:function(){this.render(!1)},onClickAdd:function(t,e){this.selectAttachment()},onClickEdit:function(t,e){this.editAttachment()},onClickRemove:function(t,e){this.removeAttachment()},onChange:function(e,i){var n=this.$input();acf.getFileInputData(i,function(e){n.val(t.param(e))})}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.models.ImageField.extend({type:"file",$control:function(){return this.$(".acf-file-uploader")},$input:function(){return this.$('input[type="hidden"]')},validateAttachment:function(t){return void 0!==(t=t||{}).id&&(t=t.attributes),t=acf.parseArgs(t,{url:"",alt:"",title:"",filename:"",filesizeHumanReadable:"",icon:"/wp-includes/images/media/default.png"})},render:function(t){t=this.validateAttachment(t),this.$("img").attr({src:t.icon,alt:t.alt,title:t.title}),this.$('[data-name="title"]').text(t.title),this.$('[data-name="filename"]').text(t.filename).attr("href",t.url),this.$('[data-name="filesize"]').text(t.filesizeHumanReadable);var e=t.id||"";acf.val(this.$input(),e),e?this.$control().addClass("has-value"):this.$control().removeClass("has-value")},selectAttachment:function(){var e=this.parent(),i=e&&"repeater"===e.get("type"),n=acf.newMediaPopup({mode:"select",title:acf.__("Select File"),field:this.get("key"),multiple:i,library:this.get("library"),allowedTypes:this.get("mime_types"),select:t.proxy(function(t,i){i>0?this.append(t,e):this.render(t)},this)})},editAttachment:function(){var e=this.val();if(!e)return!1;var i=acf.newMediaPopup({mode:"edit",title:acf.__("Edit File"),button:acf.__("Update File"),attachment:e,field:this.get("key"),select:t.proxy(function(t,e){this.render(t)},this)})}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"link",events:{'click a[data-name="add"]':"onClickEdit",'click a[data-name="edit"]':"onClickEdit",'click a[data-name="remove"]':"onClickRemove","change .link-node":"onChange"},$control:function(){return this.$(".acf-link")},$node:function(){return this.$(".link-node")},getValue:function(){var t=this.$node();return!!t.attr("href")&&{title:t.html(),url:t.attr("href"),target:t.attr("target")}},setValue:function(t){t=acf.parseArgs(t,{title:"",url:"",target:""});var e=this.$control(),i=this.$node();e.removeClass("-value -external"),t.url&&e.addClass("-value"),"_blank"===t.target&&e.addClass("-external"),this.$(".link-title").html(t.title),this.$(".link-url").attr("href",t.url).html(t.url),i.html(t.title),i.attr("href",t.url),i.attr("target",t.target),this.$(".input-title").val(t.title),this.$(".input-target").val(t.target),this.$(".input-url").val(t.url).trigger("change")},onClickEdit:function(t,e){acf.wpLink.open(this.$node())},onClickRemove:function(t,e){this.setValue(!1)},onChange:function(t,e){var i=this.getValue();this.setValue(i)}});acf.registerFieldType(i),acf.wpLink=new acf.Model({getNodeValue:function(){var t=this.get("node");return{title:t.html(),url:t.attr("href"),target:t.attr("target")}},setNodeValue:function(t){var e=this.get("node");e.html(t.title),e.attr("href",t.url),e.attr("target",t.target),e.trigger("change")},getInputValue:function(){return{title:t("#wp-link-text").val(),url:t("#wp-link-url").val(),target:t("#wp-link-target").prop("checked")?"_blank":""}},setInputValue:function(e){t("#wp-link-text").val(e.title),t("#wp-link-url").val(e.url),t("#wp-link-target").prop("checked","_blank"===e.target)},open:function(e){this.on("wplink-open","onOpen"),this.on("wplink-close","onClose"),this.set("node",e);var i=t('<textarea id="acf-link-textarea" style="display:none;"></textarea>');t("body").append(i);var n=this.getNodeValue();wpLink.open("acf-link-textarea",n.url,n.title,null)},onOpen:function(){t("#wp-link-wrap").addClass("has-text-field");var e=this.getNodeValue();this.setInputValue(e)},close:function(){wpLink.close()},onClose:function(){if(!this.has("node"))return!1;this.off("wplink-open"),this.off("wplink-close");var e=this.getInputValue();this.setNodeValue(e),t("#acf-link-textarea").remove(),this.set("node",null)}})}(jQuery),function(t,e){var i=acf.Field.extend({type:"oembed",events:{'click [data-name="clear-button"]':"onClickClear","keypress .input-search":"onKeypressSearch","keyup .input-search":"onKeyupSearch","change .input-search":"onChangeSearch"},$control:function(){return this.$(".acf-oembed")},$input:function(){return this.$(".input-value")},$search:function(){return this.$(".input-search")},getValue:function(){return this.$input().val()},getSearchVal:function(){return this.$search().val()},setValue:function(t){t?this.$control().addClass("has-value"):this.$control().removeClass("has-value"),acf.val(this.$input(),t)},showLoading:function(t){acf.showLoading(this.$(".canvas"))},hideLoading:function(){acf.hideLoading(this.$(".canvas"))},maybeSearch:function(){var e=this.val(),i=this.getSearchVal();if(!i)return this.clear();if("http"!=i.substr(0,4)&&(i="http://"+i),i!==e){var n=this.get("timeout");n&&clearTimeout(n);var a=t.proxy(this.search,this,i);this.set("timeout",setTimeout(a,300))}},search:function(e){var i={action:"acf/fields/oembed/search",s:e,field_key:this.get("key")},n;(n=this.get("xhr"))&&n.abort(),this.showLoading();var n=t.ajax({url:acf.get("ajaxurl"),data:acf.prepareForAjax(i),type:"post",dataType:"json",context:this,success:function(t){t&&t.html||(t={url:!1,html:""}),this.val(t.url),this.$(".canvas-media").html(t.html)},complete:function(){this.hideLoading()}});this.set("xhr",n)},clear:function(){this.val(""),this.$search().val(""),this.$(".canvas-media").html("")},onClickClear:function(t,e){this.clear()},onKeypressSearch:function(t,e){13==t.which&&(t.preventDefault(),this.maybeSearch())},onKeyupSearch:function(t,e){e.val()&&this.maybeSearch()},onChangeSearch:function(t,e){this.maybeSearch()}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"radio",events:{'click input[type="radio"]':"onClick"},$control:function(){return this.$(".acf-radio-list")},$input:function(){return this.$("input:checked")},$inputText:function(){return this.$('input[type="text"]')},getValue:function(){var t=this.$input().val();return"other"===t&&this.get("other_choice")&&(t=this.$inputText().val()),t},onClick:function(t,e){var i=e.parent("label"),n=i.hasClass("selected"),a=e.val();this.$(".selected").removeClass("selected"),i.addClass("selected"),this.get("allow_null")&&n&&(i.removeClass("selected"),e.prop("checked",!1).trigger("change"),a=!1),this.get("other_choice")&&("other"===a?this.$inputText().prop("disabled",!1):this.$inputText().prop("disabled",!0))}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"range",events:{'input input[type="range"]':"onChange","change input":"onChange"},$input:function(){return this.$('input[type="range"]')},$inputAlt:function(){return this.$('input[type="number"]')},setValue:function(t){this.busy=!0,acf.val(this.$input(),t),acf.val(this.$inputAlt(),t,!0),this.busy=!1},onChange:function(t,e){this.busy||this.setValue(e.val())}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"relationship",events:{"keypress [data-filter]":"onKeypressFilter","change [data-filter]":"onChangeFilter","keyup [data-filter]":"onChangeFilter","click .choices-list .acf-rel-item":"onClickAdd",'click [data-name="remove_item"]':"onClickRemove",mouseover:"onHover"},$control:function(){return this.$(".acf-relationship")},$list:function(t){return this.$("."+t+"-list")},$listItems:function(t){return this.$list(t).find(".acf-rel-item")},$listItem:function(t,e){return this.$list(t).find('.acf-rel-item[data-id="'+e+'"]')},getValue:function(){var e=[];return this.$listItems("values").each(function(){e.push(t(this).data("id"))}),!!e.length&&e},newChoice:function(t){return["<li>",'<span data-id="'+t.id+'" class="acf-rel-item">'+t.text+"</span>","</li>"].join("")},newValue:function(t){return["<li>",'<input type="hidden" name="'+this.getInputName()+'[]" value="'+t.id+'" />','<span data-id="'+t.id+'" class="acf-rel-item">'+t.text,'<a href="#" class="acf-icon -minus small dark" data-name="remove_item"></a>',"</span>","</li>"].join("")},addSortable:function(t){this.$list("values").sortable({items:"li",forceHelperSize:!0,forcePlaceholderSize:!0,scroll:!0,update:function(){t.$input().trigger("change")}})},initialize:function(){var t=this.proxy(function(t){if(!this.get("loading")&&this.get("more")){var e=this.$list("choices"),i=Math.ceil(e.scrollTop()),n=Math.ceil(e[0].scrollHeight),a=Math.ceil(e.innerHeight()),r=this.get("paged")||1;i+a>=n&&(this.set("paged",r+1),this.fetch())}});this.$list("choices").scrollTop(0).on("scroll",t),this.fetch()},onHover:function(e){t().off(e),this.addSortable(this)},onKeypressFilter:function(t,e){13==t.which&&t.preventDefault()},onChangeFilter:function(t,e){var i=e.val(),n=e.data("filter");this.get(n)!==i&&(this.set(n,i),this.set("paged",1),e.is("select")?this.fetch():this.maybeFetch())},onClickAdd:function(t,e){var i=this.val(),n=parseInt(this.get("max"));if(e.hasClass("disabled"))return!1;if(n>0&&i&&i.length>=n)return this.showNotice({text:acf.__("Maximum values reached ( {max} values )").replace("{max}",n),type:"warning"}),!1;e.addClass("disabled");var a=this.newValue({id:e.data("id"),text:e.html()});this.$list("values").append(a),this.$input().trigger("change")},onClickRemove:function(t,e){t.preventDefault();var i=e.parent(),n=i.parent(),a=i.data("id");n.remove(),this.$listItem("choices",a).removeClass("disabled"),this.$input().trigger("change")},maybeFetch:function(){var t=this.get("timeout");t&&clearTimeout(t),t=this.setTimeout(this.fetch,300),this.set("timeout",t)},getAjaxData:function(){var t=this.$control().data();for(var e in t)t[e]=this.get(e);return t.action="acf/fields/relationship/query",t.field_key=this.get("key"),t=acf.applyFilters("relationship_ajax_data",t,this)},fetch:function(){var e;(e=this.get("xhr"))&&e.abort();var i=this.getAjaxData(),n=this.$list("choices");1==i.paged&&n.html("");var a=t('<li><i class="acf-loading"></i> '+acf.__("Loading")+"</li>");n.append(a),this.set("loading",!0);var r=function(){this.set("loading",!1),a.remove()},o=function(e){if(!e||!e.results||!e.results.length)return this.set("more",!1),void(1==this.get("paged")&&this.$list("choices").append("<li>"+acf.__("No matches found")+"</li>"));this.set("more",e.more);var i=this.walkChoices(e.results),a=t(i),r=this.val();r&&r.length&&r.map(function(t){a.find('.acf-rel-item[data-id="'+t+'"]').addClass("disabled")}),n.append(a);var o=!1,s=!1;n.find(".acf-rel-label").each(function(){var e=t(this),i=e.siblings("ul");if(o&&o.text()==e.text())return s.append(i.children()),void t(this).parent().remove();o=e,s=i})},e=t.ajax({url:acf.get("ajaxurl"),dataType:"json",type:"post",data:acf.prepareForAjax(i),context:this,success:o,complete:r});this.set("xhr",e)},walkChoices:function(e){var i=function(e){var n="";return t.isArray(e)?e.map(function(t){n+=i(t)}):t.isPlainObject(e)&&(void 0!==e.children?(n+='<li><span class="acf-rel-label">'+e.text+'</span><ul class="acf-bl">',n+=i(e.children),n+="</ul></li>"):n+='<li><span class="acf-rel-item" data-id="'+e.id+'">'+e.text+"</span></li>"),n};return i(e)}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"select",select2:!1,wait:"load",events:{removeField:"onRemove"},$input:function(){return this.$("select")},initialize:function(){var t=this.$input();if(this.inherit(t),this.get("ui")){var e=this.get("ajax_action");e||(e="acf/fields/"+this.get("type")+"/query"),this.select2=acf.newSelect2(t,{field:this,ajax:this.get("ajax"),multiple:this.get("multiple"),placeholder:this.get("placeholder"),allowNull:this.get("allow_null"),ajaxAction:e})}},onRemove:function(){this.select2&&this.select2.destroy()}});acf.registerFieldType(i)}(jQuery),function(t,e){var i="tab",n=acf.Field.extend({type:"tab",wait:"",tabs:!1,tab:!1,findFields:function(){return this.$el.nextUntil(".acf-field-tab",".acf-field")},getFields:function(){return acf.getFields(this.findFields())},findTabs:function(){return this.$el.prevAll(".acf-tab-wrap:first")},findTab:function(){return this.$(".acf-tab-button")},initialize:function(){if(this.$el.is("td"))return this.events={},!1;var t=this.findTabs(),e=this.findTab(),i=acf.parseArgs(e.data(),{endpoint:!1,placement:"",before:this.$el});!t.length||i.endpoint?this.tabs=new r(i):this.tabs=t.data("acf"),this.tab=this.tabs.addTab(e,this)},isActive:function(){return this.tab.isActive()},showFields:function(){this.getFields().map(function(t){t.show(this.cid,"tab"),t.hiddenByTab=!1},this)},hideFields:function(){this.getFields().map(function(t){t.hide(this.cid,"tab"),t.hiddenByTab=this.tab},this)},show:function(t){var e=acf.Field.prototype.show.apply(this,arguments);return e&&(this.tab.show(),this.tabs.refresh()),e},hide:function(t){var e=acf.Field.prototype.hide.apply(this,arguments);return e&&(this.tab.hide(),this.isActive()&&this.tabs.reset()),e},enable:function(t){this.getFields().map(function(t){t.enable("tab")})},disable:function(t){this.getFields().map(function(t){t.disable("tab")})}});acf.registerFieldType(n);var a=0,r=acf.Model.extend({tabs:[],active:!1,actions:{refresh:"onRefresh"},data:{before:!1,placement:"top",index:0,initialized:!1},setup:function(e){t.extend(this.data,e),this.tabs=[],this.active=!1;var i=this.get("placement"),n=this.get("before"),r=n.parent();"left"==i&&r.hasClass("acf-fields")&&r.addClass("-sidebar"),n.is("tr")?this.$el=t('<tr class="acf-tab-wrap"><td colspan="2"><ul class="acf-hl acf-tab-group"></ul></td></tr>'):this.$el=t('<div class="acf-tab-wrap -'+i+'"><ul class="acf-hl acf-tab-group"></ul></div>'),n.before(this.$el),this.set("index",a,!0),a++},initializeTabs:function(){var t=this.getVisible().shift(),e,i,n=(acf.getPreference("this.tabs")||[])[this.get("index")];this.tabs[n]&&this.tabs[n].isVisible()&&(t=this.tabs[n]),t?this.selectTab(t):this.closeTabs(),this.set("initialized",!0)},getVisible:function(){return this.tabs.filter(function(t){return t.isVisible()})},getActive:function(){return this.active},setActive:function(t){return this.active=t},hasActive:function(){return!1!==this.active},isActive:function(t){var e=this.getActive();return e&&e.cid===t.cid},closeActive:function(){this.hasActive()&&this.closeTab(this.getActive())},openTab:function(t){this.closeActive(),t.open(),this.setActive(t)},closeTab:function(t){t.close(),this.setActive(!1)},closeTabs:function(){this.tabs.map(this.closeTab,this)},selectTab:function(t){this.tabs.map(function(e){t.cid!==e.cid&&this.closeTab(e)},this),this.openTab(t)},addTab:function(e,i){var n=t("<li></li>");n.append(e),this.$("ul").append(n);var a=new o({$el:n,field:i,group:this});return this.tabs.push(a),a},reset:function(){return this.closeActive(),this.refresh()},refresh:function(){if(this.hasActive())return!1;var t=this.getVisible().shift();return t&&this.openTab(t),t},onRefresh:function(){if("left"===this.get("placement")){var t=this.$el.parent(),e=this.$el.children("ul"),i=t.is("td")?"height":"min-height",n=e.position().top+e.outerHeight(!0)-1;t.css(i,n)}}}),o=acf.Model.extend({group:!1,field:!1,events:{"click a":"onClick"},index:function(){return this.$el.index()},isVisible:function(){return acf.isVisible(this.$el)},isActive:function(){return this.$el.hasClass("active")},open:function(){this.$el.addClass("active"),this.field.showFields()},close:function(){this.$el.removeClass("active"),this.field.hideFields()},onClick:function(t,e){t.preventDefault(),this.toggle()},toggle:function(){this.isActive()||this.group.openTab(this)}}),s=new acf.Model({priority:50,actions:{prepare:"render",append:"render",unload:"onUnload",invalid_field:"onInvalidField"},findTabs:function(){return t(".acf-tab-wrap")},getTabs:function(){return acf.getInstances(this.findTabs())},render:function(t){this.getTabs().map(function(t){t.get("initialized")||t.initializeTabs()})},onInvalidField:function(t){this.busy||t.hiddenByTab&&(t.hiddenByTab.toggle(),this.busy=!0,this.setTimeout(function(){this.busy=!1},100))},onUnload:function(){var t=[];this.getTabs().map(function(e){var i=e.hasActive()?e.getActive().index():0;t.push(i)}),t.length&&acf.setPreference("this.tabs",t)}})}(jQuery),function(t,e){var i=acf.models.SelectField.extend({type:"post_object"});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.models.SelectField.extend({type:"page_link"});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.models.SelectField.extend({type:"user"});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"taxonomy",data:{ftype:"select"},select2:!1,wait:"load",events:{'click a[data-name="add"]':"onClickAdd",'click input[type="radio"]':"onClickRadio"},$control:function(){return this.$(".acf-taxonomy-field")},$input:function(){return this.getRelatedPrototype().$input.apply(this,arguments)},getRelatedType:function(){var t=this.get("ftype");return"multi_select"==t&&(t="select"),t},getRelatedPrototype:function(){return acf.getFieldType(this.getRelatedType()).prototype},getValue:function(){return this.getRelatedPrototype().getValue.apply(this,arguments)},setValue:function(){return this.getRelatedPrototype().setValue.apply(this,arguments)},initialize:function(){this.getRelatedPrototype().initialize.apply(this,arguments)},onRemove:function(){this.select2&&this.select2.destroy()},onClickAdd:function(e,i){var n=this,a=!1,r=!1,o=!1,s=!1,c=!1,l=!1,u=!1,d=function(){a=acf.newPopup({title:i.attr("title"),loading:!0,width:"300px"});var e={action:"acf/fields/taxonomy/add_term",field_key:n.get("key")};t.ajax({url:acf.get("ajaxurl"),data:acf.prepareForAjax(e),type:"post",dataType:"html",success:f})},f=function(t){a.loading(!1),a.content(t),r=a.$("form"),o=a.$('input[name="term_name"]'),s=a.$('select[name="term_parent"]'),c=a.$(".acf-submit-button"),o.focus(),a.on("submit","form",h)},h=function(e,i){if(e.preventDefault(),e.stopImmediatePropagation(),""===o.val())return o.focus(),!1;acf.startButtonLoading(c);var a={action:"acf/fields/taxonomy/add_term",field_key:n.get("key"),term_name:o.val(),term_parent:s.length?s.val():0};t.ajax({url:acf.get("ajaxurl"),data:acf.prepareForAjax(a),type:"post",dataType:"json",success:p})},p=function(t){acf.stopButtonLoading(c),u&&u.remove(),acf.isAjaxSuccess(t)?(o.val(""),g(t.data),u=acf.newNotice({
3
- type:"success",text:acf.getAjaxMessage(t),target:r,timeout:2e3,dismiss:!1})):u=acf.newNotice({type:"error",text:acf.getAjaxError(t),target:r,timeout:2e3,dismiss:!1}),o.focus()},g=function(e){var i=t('<option value="'+e.term_id+'">'+e.term_label+"</option>"),a;e.term_parent?s.children('option[value="'+e.term_parent+'"]').after(i):s.append(i),acf.getFields({type:"taxonomy"}).map(function(t){t.get("taxonomy")==n.get("taxonomy")&&t.appendTerm(e)}),n.selectTerm(e.term_id)};d()},appendTerm:function(t){"select"==this.getRelatedType()?this.appendTermSelect(t):this.appendTermCheckbox(t)},appendTermSelect:function(t){this.select2.addOption({id:t.term_id,text:t.term_label})},appendTermCheckbox:function(e){var i=this.$("[name]:first").attr("name"),n=this.$("ul:first");"checkbox"==this.getRelatedType()&&(i+="[]");var a=t(['<li data-id="'+e.term_id+'">',"<label>",'<input type="'+this.get("ftype")+'" value="'+e.term_id+'" name="'+i+'" /> ',"<span>"+e.term_name+"</span>","</label>","</li>"].join(""));if(e.term_parent){var r=n.find('li[data-id="'+e.term_parent+'"]');(n=r.children("ul")).exists()||(n=t('<ul class="children acf-bl"></ul>'),r.append(n))}n.append(a)},selectTerm:function(t){var e;"select"==this.getRelatedType()?this.select2.selectOption(t):this.$('input[value="'+t+'"]').prop("checked",!0).trigger("change")},onClickRadio:function(t,e){var i=e.parent("label"),n=i.hasClass("selected");this.$(".selected").removeClass("selected"),i.addClass("selected"),this.get("allow_null")&&n&&(i.removeClass("selected"),e.prop("checked",!1).trigger("change"))}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.models.DatePickerField.extend({type:"time_picker",$control:function(){return this.$(".acf-time-picker")},initialize:function(){var t=this.$input(),e=this.$inputText(),i={timeFormat:this.get("time_format"),altField:t,altFieldTimeOnly:!1,altTimeFormat:"HH:mm:ss",showButtonPanel:!0,controlType:"select",oneLine:!0,closeText:acf.get("dateTimePickerL10n").selectText,timeOnly:!0,onClose:function(t,e,i){var n=e.dpDiv.find(".ui-datepicker-close");!t&&n.is(":hover")&&i._updateDateTime()}};i=acf.applyFilters("time_picker_args",i,this),acf.newTimePicker(e,i),acf.doAction("time_picker_init",e,i,this)}});acf.registerFieldType(i),acf.newTimePicker=function(e,i){if(void 0===t.timepicker)return!1;i=i||{},e.timepicker(i),t("body > #ui-datepicker-div").exists()&&t("body > #ui-datepicker-div").wrap('<div class="acf-ui-datepicker" />')}}(jQuery),function(t,e){var i=acf.Field.extend({type:"true_false",events:{"change .acf-switch-input":"onChange","focus .acf-switch-input":"onFocus","blur .acf-switch-input":"onBlur","keypress .acf-switch-input":"onKeypress"},$input:function(){return this.$('input[type="checkbox"]')},$switch:function(){return this.$(".acf-switch")},getValue:function(){return this.$input().prop("checked")?1:0},initialize:function(){this.render()},render:function(){var t=this.$switch();if(t.length){var e=t.children(".acf-switch-on"),i=t.children(".acf-switch-off"),n=Math.max(e.width(),i.width());n&&(e.css("min-width",n),i.css("min-width",n))}},switchOn:function(){this.$input().prop("checked",!0),this.$switch().addClass("-on")},switchOff:function(){this.$input().prop("checked",!1),this.$switch().removeClass("-on")},onChange:function(t,e){e.prop("checked")?this.switchOn():this.switchOff()},onFocus:function(t,e){this.$switch().addClass("-focus")},onBlur:function(t,e){this.$switch().removeClass("-focus")},onKeypress:function(t,e){return 37===t.keyCode?this.switchOff():39===t.keyCode?this.switchOn():void 0}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"url",events:{'keyup input[type="url"]':"onkeyup"},$control:function(){return this.$(".acf-input-wrap")},$input:function(){return this.$('input[type="url"]')},initialize:function(){this.render()},isValid:function(){var t=this.val();return!!t&&(-1!==t.indexOf("://")||0===t.indexOf("//"))},render:function(){this.isValid()?this.$control().addClass("-valid"):this.$control().removeClass("-valid")},onkeyup:function(t,e){this.render()}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"wysiwyg",wait:"load",events:{"mousedown .acf-editor-wrap.delay":"onMousedown",unmountField:"disableEditor",remountField:"enableEditor",removeField:"disableEditor"},$control:function(){return this.$(".acf-editor-wrap")},$input:function(){return this.$("textarea")},getMode:function(){return this.$control().hasClass("tmce-active")?"visual":"text"},initialize:function(){this.$control().hasClass("delay")||this.initializeEditor()},initializeEditor:function(){var t=this.$control(),e=this.$input(),i={tinymce:!0,quicktags:!0,toolbar:this.get("toolbar"),mode:this.getMode(),field:this},n=e.attr("id"),a=acf.uniqueId("acf-editor-"),r=e.data();acf.rename({target:t,search:n,replace:a,destructive:!0}),this.set("id",a,!0),acf.tinymce.initialize(a,i),this.$input().data(r)},onMousedown:function(t){t.preventDefault();var e=this.$control();e.removeClass("delay"),e.find(".acf-editor-toolbar").remove(),this.initializeEditor()},enableEditor:function(){"visual"==this.getMode()&&acf.tinymce.enable(this.get("id"))},disableEditor:function(){acf.tinymce.destroy(this.get("id"))}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=[];acf.Condition=acf.Model.extend({type:"",operator:"==",label:"",choiceType:"input",fieldTypes:[],data:{conditions:!1,field:!1,rule:{}},events:{change:"change",keyup:"change",enableField:"change",disableField:"change"},setup:function(e){t.extend(this.data,e)},getEventTarget:function(t,e){return t||this.get("field").$el},change:function(t,e){this.get("conditions").change(t)},match:function(t,e){return!1},calculate:function(){return this.match(this.get("rule"),this.get("field"))},choices:function(t){return'<input type="text" />'}}),acf.newCondition=function(t,e){var i=e.get("field"),n=i.getField(t.field);if(!i||!n)return!1;var a={rule:t,target:i,conditions:e,field:n},r=n.get("type"),o=t.operator,s,c,l;return new(acf.getConditionTypes({fieldType:r,operator:o})[0]||acf.Condition)(a)};var n=function(t){return acf.strPascalCase(t||"")+"Condition"};acf.registerConditionType=function(t){var e,a=t.prototype.type,r=n(a);acf.models[r]=t,i.push(a)},acf.getConditionType=function(t){var e=n(t);return acf.models[e]||!1},acf.registerConditionForFieldType=function(t,e){var i=acf.getConditionType(t);i&&i.prototype.fieldTypes.push(e)},acf.getConditionTypes=function(t){t=acf.parseArgs(t,{fieldType:"",operator:""});var e=[];return i.map(function(i){var n=acf.getConditionType(i),a=n.prototype.fieldTypes,r=n.prototype.operator;t.fieldType&&-1===a.indexOf(t.fieldType)||t.operator&&r!==t.operator||e.push(n)}),e}}(jQuery),function(t,e){var i="conditional_logic",n=new acf.Model({id:"conditionsManager",priority:20,actions:{new_field:"onNewField"},onNewField:function(t){t.has("conditions")&&t.getConditions().render()}}),a=function(t,e){var i=acf.getFields({key:e,sibling:t.$el,suppressFilters:!0});return i.length||(i=acf.getFields({key:e,parent:t.$el.parent(),suppressFilters:!0})),!!i.length&&i[0]};acf.Field.prototype.getField=function(t){var e=a(this,t);if(e)return e;for(var i=this.parents(),n=0;n<i.length;n++)if(e=a(i[n],t))return e;return!1},acf.Field.prototype.getConditions=function(){return this.conditions||(this.conditions=new o(this)),this.conditions};var r=!1,o=acf.Model.extend({id:"Conditions",data:{field:!1,timeStamp:!1,groups:[]},setup:function(t){this.data.field=t;var e=t.get("conditions");e instanceof Array?e[0]instanceof Array?e.map(function(t,e){this.addRules(t,e)},this):this.addRules(e):this.addRule(e)},change:function(t){if(this.get("timeStamp")===t.timeStamp)return!1;this.set("timeStamp",t.timeStamp,!0);var e=this.render()},render:function(){return this.calculate()?this.show():this.hide()},show:function(){return this.get("field").showEnable(this.cid,i)},hide:function(){return this.get("field").hideDisable(this.cid,i)},calculate:function(){var t=!1;return this.getGroups().map(function(e){var i;t||e.filter(function(t){return t.calculate()}).length==e.length&&(t=!0)}),t},hasGroups:function(){return null!=this.data.groups},getGroups:function(){return this.data.groups},addGroup:function(){var t=[];return this.data.groups.push(t),t},hasGroup:function(t){return null!=this.data.groups[t]},getGroup:function(t){return this.data.groups[t]},removeGroup:function(t){return this.data.groups[t].delete,this},addRules:function(t,e){t.map(function(t){this.addRule(t,e)},this)},addRule:function(t,e){var i;e=e||0,i=this.hasGroup(e)?this.getGroup(e):this.addGroup();var n=acf.newCondition(t,this);if(!n)return!1;i.push(n)},hasRule:function(){},getRule:function(t,e){return t=t||0,e=e||0,this.data.groups[e][t]},removeRule:function(){}})}(jQuery),function(t,e){var i=acf.__,n=function(t){return t?""+t:""},a=function(t,e){return n(t).toLowerCase()===n(e).toLowerCase()},r=function(t,e){return parseFloat(t)===parseFloat(e)},o=function(t,e){return parseFloat(t)>parseFloat(e)},s=function(t,e){return parseFloat(t)<parseFloat(e)},c=function(t,e){return(e=e.map(function(t){return n(t)})).indexOf(t)>-1},l=function(t,e){return n(t).indexOf(n(e))>-1},u=function(t,e){var i=new RegExp(n(e),"gi");return n(t).match(i)},d=acf.Condition.extend({type:"hasValue",operator:"!=empty",label:i("Has any value"),fieldTypes:["text","textarea","number","range","email","url","password","image","file","wysiwyg","oembed","select","checkbox","radio","button_group","link","post_object","page_link","relationship","taxonomy","user","google_map","date_picker","date_time_picker","time_picker","color_picker"],match:function(t,e){return!!e.val()},choices:function(t){return'<input type="text" disabled="" />'}});acf.registerConditionType(d);var f=d.extend({type:"hasNoValue",operator:"==empty",label:i("Has no value"),match:function(t,e){return!d.prototype.match.apply(this,arguments)}});acf.registerConditionType(f);var h=acf.Condition.extend({type:"equalTo",operator:"==",label:i("Value is equal to"),fieldTypes:["text","textarea","number","range","email","url","password"],match:function(e,i){return t.isNumeric(e.value)?r(e.value,i.val()):a(e.value,i.val())},choices:function(t){return'<input type="text" />'}});acf.registerConditionType(h);var p=h.extend({type:"notEqualTo",operator:"!=",label:i("Value is not equal to"),match:function(t,e){return!h.prototype.match.apply(this,arguments)}});acf.registerConditionType(p);var g=acf.Condition.extend({type:"patternMatch",operator:"==pattern",label:i("Value matches pattern"),fieldTypes:["text","textarea","email","url","password","wysiwyg"],match:function(t,e){return u(e.val(),t.value)},choices:function(t){return'<input type="text" placeholder="[a-z0-9]" />'}});acf.registerConditionType(g);var m=acf.Condition.extend({type:"contains",operator:"==contains",label:i("Value contains"),fieldTypes:["text","textarea","number","email","url","password","wysiwyg","oembed","select"],match:function(t,e){return l(e.val(),t.value)},choices:function(t){return'<input type="text" />'}});acf.registerConditionType(m);var v=h.extend({type:"trueFalseEqualTo",choiceType:"select",fieldTypes:["true_false"],choices:function(t){return[{id:1,text:i("Checked")}]}});acf.registerConditionType(v);var y=p.extend({type:"trueFalseNotEqualTo",choiceType:"select",fieldTypes:["true_false"],choices:function(t){return[{id:1,text:i("Checked")}]}});acf.registerConditionType(y);var b=acf.Condition.extend({type:"selectEqualTo",operator:"==",label:i("Value is equal to"),fieldTypes:["select","checkbox","radio","button_group"],match:function(t,e){var i=e.val();return i instanceof Array?c(t.value,i):a(t.value,i)},choices:function(e){var n=[],a=e.$setting("choices textarea").val().split("\n");return e.$input("allow_null").prop("checked")&&n.push({id:"",text:i("Null")}),a.map(function(e){(e=e.split(":"))[1]=e[1]||e[0],n.push({id:t.trim(e[0]),text:t.trim(e[1])})}),n}});acf.registerConditionType(b);var w=b.extend({type:"selectNotEqualTo",operator:"!=",label:i("Value is not equal to"),match:function(t,e){return!b.prototype.match.apply(this,arguments)}});acf.registerConditionType(w);var x=acf.Condition.extend({type:"greaterThan",operator:">",label:i("Value is greater than"),fieldTypes:["number","range"],match:function(t,e){var i=e.val();return i instanceof Array&&(i=i.length),o(i,t.value)},choices:function(t){return'<input type="number" />'}});acf.registerConditionType(x);var _=x.extend({type:"lessThan",operator:"<",label:i("Value is less than"),match:function(t,e){var i=e.val();return i instanceof Array&&(i=i.length),s(i,t.value)},choices:function(t){return'<input type="number" />'}});acf.registerConditionType(_);var $=x.extend({type:"selectionGreaterThan",label:i("Selection is greater than"),fieldTypes:["checkbox","select","post_object","page_link","relationship","taxonomy","user"]});acf.registerConditionType($);var k=_.extend({type:"selectionLessThan",label:i("Selection is less than"),fieldTypes:["checkbox","select","post_object","page_link","relationship","taxonomy","user"]});acf.registerConditionType(k)}(jQuery),function(t,e){acf.newMediaPopup=function(t){var e=null,t=acf.parseArgs(t,{mode:"select",title:"",button:"",type:"",field:!1,allowedTypes:"",library:"all",multiple:!1,attachment:0,autoOpen:!0,open:function(){},select:function(){},close:function(){}});return e="edit"==t.mode?new acf.models.EditMediaPopup(t):new acf.models.SelectMediaPopup(t),t.autoOpen&&setTimeout(function(){e.open()},1),acf.doAction("new_media_popup",e),e};var i=function(){var e=acf.get("post_id");return t.isNumeric(e)?e:0};acf.getMimeTypes=function(){return this.get("mimeTypes")},acf.getMimeType=function(t){var e=acf.getMimeTypes();if(void 0!==e[t])return e[t];for(var i in e)if(-1!==i.indexOf(t))return e[i];return!1};var n=acf.Model.extend({id:"MediaPopup",data:{},defaults:{},frame:!1,setup:function(e){t.extend(this.data,e)},initialize:function(){var t=this.getFrameOptions();this.addFrameStates(t);var e=wp.media(t);e.acf=this,this.addFrameEvents(e,t),this.frame=e},open:function(){this.frame.open()},close:function(){this.frame.close()},remove:function(){this.frame.detach(),this.frame.remove()},getFrameOptions:function(){var t={title:this.get("title"),multiple:this.get("multiple"),library:{},states:[]};return this.get("type")&&(t.library.type=this.get("type")),"uploadedTo"===this.get("library")&&(t.library.uploadedTo=i()),this.get("attachment")&&(t.library.post__in=[this.get("attachment")]),this.get("button")&&(t.button={text:this.get("button")}),t},addFrameStates:function(t){var e=wp.media.query(t.library);this.get("field")&&acf.isset(e,"mirroring","args")&&(e.mirroring.args._acfuploader=this.get("field")),t.states.push(new wp.media.controller.Library({library:e,multiple:this.get("multiple"),title:this.get("title"),priority:20,filterable:"all",editable:!0,allowLocalEdits:!0})),acf.isset(wp,"media","controller","EditImage")&&t.states.push(new wp.media.controller.EditImage)},addFrameEvents:function(t,e){t.on("open",function(){this.$el.closest(".media-modal").addClass("acf-media-modal -"+this.acf.get("mode"))},t),t.on("content:render:edit-image",function(){var t=this.state().get("image"),e=new wp.media.view.EditImage({model:t,controller:this}).render();this.content.set(e),e.loadEditor()},t),t.on("select",function(){var e=t.state().get("selection");e&&e.each(function(e,i){t.acf.get("select").apply(t.acf,[e,i])})}),t.on("close",function(){setTimeout(function(){t.acf.get("close").apply(t.acf),t.acf.remove()},1)})}});acf.models.SelectMediaPopup=n.extend({id:"SelectMediaPopup",setup:function(t){t.button||(t.button=acf._x("Select","verb")),n.prototype.setup.apply(this,arguments)},addFrameEvents:function(t,e){acf.isset(_wpPluploadSettings,"defaults","multipart_params")&&(_wpPluploadSettings.defaults.multipart_params._acfuploader=this.get("field"),t.on("open",function(){delete _wpPluploadSettings.defaults.multipart_params._acfuploader})),t.on("content:activate:browse",function(){var e=!1;try{e=t.content.get().toolbar}catch(t){return void console.log(t)}t.acf.customizeFilters.apply(t.acf,[e])}),n.prototype.addFrameEvents.apply(this,arguments)},customizeFilters:function(e){var i=e.get("filters"),n;("image"==this.get("type")&&(i.filters.all.text=acf.__("All images"),delete i.filters.audio,delete i.filters.video,delete i.filters.image,t.each(i.filters,function(t,e){e.props.type=e.props.type||"image"})),this.get("allowedTypes"))&&this.get("allowedTypes").split(" ").join("").split(".").join("").split(",").map(function(t){var e=acf.getMimeType(t);if(e){var n={text:e,props:{status:null,type:e,uploadedTo:null,orderby:"date",order:"DESC"},priority:20};i.filters[e]=n}});if("uploadedTo"===this.get("library")){var a=this.frame.options.library.uploadedTo;delete i.filters.unattached,delete i.filters.uploaded,t.each(i.filters,function(t,e){e.text+=" ("+acf.__("Uploaded to this post")+")",e.props.uploadedTo=a})}var r=this.get("field"),o;t.each(i.filters,function(t,e){e.props._acfuploader=r}),e.get("search").model.attributes._acfuploader=r,i.renderFilters&&i.renderFilters()}}),acf.models.EditMediaPopup=n.extend({id:"SelectMediaPopup",setup:function(t){t.button||(t.button=acf._x("Update","verb")),n.prototype.setup.apply(this,arguments)},addFrameEvents:function(t,e){t.on("open",function(){this.$el.closest(".media-modal").addClass("acf-expanded"),"browse"!=this.content.mode()&&this.content.mode("browse");var e,i=this.state().get("selection"),n=wp.media.attachment(t.acf.get("attachment"));i.add(n)},t),n.prototype.addFrameEvents.apply(this,arguments)}});var a=new acf.Model({id:"customizePrototypes",wait:"ready",initialize:function(){if(acf.isset(window,"wp","media","view")){var t=i();t&&acf.isset(wp,"media","view","settings","post")&&(wp.media.view.settings.post.id=t),this.customizeAttachmentsButton(),this.customizeAttachmentsRouter(),this.customizeAttachmentFilters(),this.customizeAttachmentCompat(),this.customizeAttachmentLibrary()}},customizeAttachmentsButton:function(){if(acf.isset(wp,"media","view","Button")){var t=wp.media.view.Button;wp.media.view.Button=t.extend({initialize:function(){var t=_.defaults(this.options,this.defaults);this.model=new Backbone.Model(t),this.listenTo(this.model,"change",this.render)}})}},customizeAttachmentsRouter:function(){if(acf.isset(wp,"media","view","Router")){var e=wp.media.view.Router;wp.media.view.Router=e.extend({addExpand:function(){var e=t(['<a href="#" class="acf-expand-details">','<span class="is-closed"><span class="acf-icon -left small grey"></span>'+acf.__("Expand Details")+"</span>",'<span class="is-open"><span class="acf-icon -right small grey"></span>'+acf.__("Collapse Details")+"</span>","</a>"].join(""));e.on("click",function(e){e.preventDefault();var i=t(this).closest(".media-modal");i.hasClass("acf-expanded")?i.removeClass("acf-expanded"):i.addClass("acf-expanded")}),this.$el.append(e)},initialize:function(){return e.prototype.initialize.apply(this,arguments),this.addExpand(),this}})}},customizeAttachmentFilters:function(){var e;acf.isset(wp,"media","view","AttachmentFilters","All")&&(wp.media.view.AttachmentFilters.All.prototype.renderFilters=function(){this.$el.html(_.chain(this.filters).map(function(e,i){return{el:t("<option></option>").val(i).html(e.text)[0],priority:e.priority||50}},this).sortBy("priority").pluck("el").value())})},customizeAttachmentCompat:function(){if(acf.isset(wp,"media","view","AttachmentCompat")){var e=wp.media.view.AttachmentCompat,i=!1;wp.media.view.AttachmentCompat=e.extend({render:function(){return this.rendered?this:(e.prototype.render.apply(this,arguments),this.$("#acf-form-data").length?(clearTimeout(i),i=setTimeout(t.proxy(function(){this.rendered=!0,acf.doAction("append",this.$el)},this),50),this):this)},save:function(t){var e={};t&&t.preventDefault(),e=acf.serializeForAjax(this.$el),this.controller.trigger("attachment:compat:waiting",["waiting"]),this.model.saveCompat(e).always(_.bind(this.postSave,this))}})}},customizeAttachmentLibrary:function(){if(acf.isset(wp,"media","view","Attachment","Library")){var t=wp.media.view.Attachment.Library;wp.media.view.Attachment.Library=t.extend({render:function(){var e=acf.isget(this,"controller","acf"),i=acf.isget(this,"model","attributes");if(e&&i){i.acf_errors&&this.$el.addClass("acf-disabled");var n=e.get("selected");n&&n.indexOf(i.id)>-1&&this.$el.addClass("acf-selected")}return t.prototype.render.apply(this,arguments)},toggleSelection:function(e){var i=this.collection,n=this.options.selection,a=this.model,r=n.single(),o=this.controller,s=acf.isget(this,"model","attributes","acf_errors"),c=o.$el.find(".media-frame-content .media-sidebar");if(c.children(".acf-selection-error").remove(),c.children().removeClass("acf-hidden"),o&&s){var l=acf.isget(this,"model","attributes","filename");return c.children().addClass("acf-hidden"),c.prepend(['<div class="acf-selection-error">','<span class="selection-error-label">'+acf.__("Restricted")+"</span>",'<span class="selection-error-filename">'+l+"</span>",'<span class="selection-error-message">'+s+"</span>","</div>"].join("")),n.reset(),void n.single(a)}return t.prototype.toggleSelection.apply(this,arguments)}})}}})}(jQuery),function(t,e){acf.screen=new acf.Model({active:!0,xhr:!1,timeout:!1,wait:"load",events:{"change #page_template":"onChange","change #parent_id":"onChange","change #post-formats-select":"onChange","change .categorychecklist":"onChange","change .tagsdiv":"onChange",'change .acf-taxonomy-field[data-save="1"]':"onChange","change #product-type":"onChange"},isPost:function(){return"post"===acf.get("screen")},isUser:function(){return"user"===acf.get("screen")},isTaxonomy:function(){return"taxonomy"===acf.get("screen")},isAttachment:function(){return"attachment"===acf.get("screen")},isNavMenu:function(){return"nav_menu"===acf.get("screen")},isWidget:function(){return"widget"===acf.get("screen")},isComment:function(){return"comment"===acf.get("screen")},getPageTemplate:function(){var e=t("#page_template");return e.length?e.val():null},getPageParent:function(e,i){var i;return(i=t("#parent_id")).length?i.val():null},getPageType:function(t,e){return this.getPageParent()?"child":"parent"},getPostType:function(){return t("#post_type").val()},getPostFormat:function(e,i){var i;if((i=t("#post-formats-select input:checked")).length){var n=i.val();return"0"==n?"standard":n}return null},getPostCoreTerms:function(){var e={},i=acf.serialize(t(".categorydiv, .tagsdiv"));for(var n in i.tax_input&&(e=i.tax_input),i.post_category&&(e.category=i.post_category),e)acf.isArray(e[n])||(e[n]=e[n].split(/,[\s]?/));return e},getPostTerms:function(){var t=this.getPostCoreTerms();for(var e in acf.getFields({type:"taxonomy"}).map(function(e){if(e.get("save")){var i=e.val(),n=e.get("taxonomy");i&&(t[n]=t[n]||[],i=acf.isArray(i)?i:[i],t[n]=t[n].concat(i))}}),null!==(productType=this.getProductType())&&(t.product_type=[productType]),t)t[e]=acf.uniqueArray(t[e]);return t},getProductType:function(){var e=t("#product-type");return e.length?e.val():null},check:function(){if("post"===acf.get("screen")){this.xhr&&this.xhr.abort();var e=acf.parseArgs(this.data,{action:"acf/ajax/check_screen",screen:acf.get("screen"),exists:[]});this.isPost()&&(e.post_id=acf.get("post_id")),null!==(postType=this.getPostType())&&(e.post_type=postType),null!==(pageTemplate=this.getPageTemplate())&&(e.page_template=pageTemplate),null!==(pageParent=this.getPageParent())&&(e.page_parent=pageParent),null!==(pageType=this.getPageType())&&(e.page_type=pageType),null!==(postFormat=this.getPostFormat())&&(e.post_format=postFormat),null!==(postTerms=this.getPostTerms())&&(e.post_terms=postTerms),acf.getPostboxes().map(function(t){e.exists.push(t.get("key"))}),e=acf.applyFilters("check_screen_args",e);var i=function(t){acf.isAjaxSuccess(t)&&("post"==acf.get("screen")?this.renderPostScreen(t.data):"user"==acf.get("screen")&&this.renderUserScreen(t.data)),acf.doAction("check_screen_complete",t.data,e)};this.xhr=t.ajax({url:acf.get("ajaxurl"),data:acf.prepareForAjax(e),type:"post",dataType:"json",context:this,success:i})}},onChange:function(t,e){this.setTimeout(this.check,1)},renderPostScreen:function(e){var i=[],n=function(e,i){var n=t._data(e[0]).events;for(var a in n)for(var r=0;r<n[a].length;r++)i.on(a,n[a][r].handler)},a=function(e,i){var n=i.indexOf(e);if(-1==n)return!1;for(var a=n-1;a>=0;a--)if(t("#"+i[a]).length)return t("#"+i[a]).after(t("#"+e));for(var a=n+1;a<i.length;a++)if(t("#"+i[a]).length)return t("#"+i[a]).before(t("#"+e));return!1};e.results.map(function(r,o){var s=acf.getPostbox(r.id);if(!s){var c=t(['<div id="'+r.id+'" class="postbox">','<button type="button" class="handlediv" aria-expanded="false">','<span class="screen-reader-text">Toggle panel: '+r.title+"</span>",'<span class="toggle-indicator" aria-hidden="true"></span>',"</button>",'<h2 class="hndle ui-sortable-handle">',"<span>"+r.title+"</span>","</h2>",'<div class="inside">',r.html,"</div>","</div>"].join(""));if(t("#adv-settings").length){var l=t("#adv-settings .metabox-prefs"),u=t(['<label for="'+r.id+'-hide">','<input class="hide-postbox-tog" name="'+r.id+'-hide" type="checkbox" id="'+r.id+'-hide" value="'+r.id+'" checked="checked">'," "+r.title,"</label>"].join(""));n(l.find("input").first(),u.find("input")),l.append(u)}"side"===r.position?t("#"+r.position+"-sortables").append(c):t("#"+r.position+"-sortables").prepend(c);var d=[];if(e.results.map(function(e){r.position===e.position&&t("#"+r.position+"-sortables #"+e.id).length&&d.push(e.id)}),a(r.id,d),e.sorted)for(var f in e.sorted){var d=e.sorted[f].split(",");if(a(r.id,d))break}var h=t("#submitdiv");t("#submitdiv").length&&(n(h.children(".handlediv"),c.children(".handlediv")),n(h.children(".hndle"),c.children(".hndle"))),s=acf.newPostbox(r),acf.doAction("append",c),acf.doAction("append_postbox",s)}s.showEnable(),acf.doAction("show_postbox",s),i.push(r.id)}),acf.getPostboxes().map(function(t){-1===i.indexOf(t.get("id"))&&(t.hideDisable(),acf.doAction("hide_postbox",t))}),t("#acf-style").html(e.style)},renderUserScreen:function(t){}});var i=new acf.Model({wait:"load",initialize:function(){acf.isGutenberg()&&(wp.data.subscribe(this.proxy(this.onChange)),acf.screen.getPageTemplate=this.getPageTemplate,acf.screen.getPageParent=this.getPageParent,acf.screen.getPostType=this.getPostType,acf.screen.getPostFormat=this.getPostFormat,acf.screen.getPostCoreTerms=this.getPostCoreTerms,acf.unload.disable())},onChange:function(){var t=wp.data.select("core/editor").getPostEdits(),e=["template","parent","format"],i;(wp.data.select("core").getTaxonomies()||[]).map(function(t){e.push(t.rest_base)}),(e=e.filter(this.proxy(function(e){return void 0!==t[e]&&t[e]!==this.get(e)}))).length&&this.triggerChange(t)},triggerChange:function(t){void 0!==t&&(this.data=t),acf.screen.check()},getPageTemplate:function(){return wp.data.select("core/editor").getEditedPostAttribute("template")},getPageParent:function(t,e){return wp.data.select("core/editor").getEditedPostAttribute("parent")},getPostType:function(){return wp.data.select("core/editor").getEditedPostAttribute("type")},getPostFormat:function(t,e){return wp.data.select("core/editor").getEditedPostAttribute("format")},getPostCoreTerms:function(){var t={},e;return(wp.data.select("core").getTaxonomies()||[]).map(function(e){var i=wp.data.select("core/editor").getEditedPostAttribute(e.rest_base);i&&(t[e.slug]=i)}),t}});acf.screen.refreshAvailableMetaBoxesPerLocation=function(){var t=wp.data.select("core/edit-post"),e=wp.data.dispatch("core/edit-post"),i={};t.getActiveMetaBoxLocations().map(function(e){i[e]=t.getMetaBoxesPerLocation(e)});var n=[];for(var a in i)n=n.concat(i[a].map(function(t){return t.id}));acf.getPostboxes().map(function(t){if(-1===n.indexOf(t.get("id"))){var e=t.$el.closest("form").attr("class").replace("metabox-location-","");i[e]=i[e]||[],i[e].push({id:t.get("id"),title:t.get("title")})}}),e.setAvailableMetaBoxesPerLocation(i)}}(jQuery),function(t,e){function i(){return acf.isset(window,"jQuery","fn","select2","amd")?4:!!acf.isset(window,"Select2")&&3}acf.newSelect2=function(t,e){if(e=acf.parseArgs(e,{allowNull:!1,placeholder:"",multiple:!1,field:!1,ajax:!1,ajaxAction:"",ajaxData:function(t){return t},ajaxResults:function(t){return t}}),4==i())var n=new a(t,e);else var n=new r(t,e);return acf.doAction("new_select2",n),n};var n=acf.Model.extend({setup:function(e,i){t.extend(this.data,i),this.$el=e},initialize:function(){},selectOption:function(t){var e=this.getOption(t);e.prop("selected")||e.prop("selected",!0).trigger("change")},unselectOption:function(t){var e=this.getOption(t);e.prop("selected")&&e.prop("selected",!1).trigger("change")},getOption:function(t){return this.$('option[value="'+t+'"]')},addOption:function(e){e=acf.parseArgs(e,{id:"",text:"",selected:!1});var i=this.getOption(e.id);return i.length||((i=t("<option></option>")).html(e.text),i.attr("value",e.id),i.prop("selected",e.selected),this.$el.append(i)),i},getValue:function(){var e=[],i=this.$el.find("option:selected");return i.exists()?((i=i.sort(function(t,e){return+t.getAttribute("data-i")-+e.getAttribute("data-i")})).each(function(){var i=t(this);e.push({$el:i,id:i.attr("value"),text:i.text()})}),e):e},mergeOptions:function(){},getChoices:function(){var e=function(i){var n=[];return i.children().each(function(){var i=t(this);i.is("optgroup")?n.push({text:i.attr("label"),children:e(i)}):n.push({id:i.attr("value"),text:i.text()})}),n};return e(this.$el)},decodeChoices:function(t){var e=function(t){return t.map(function(t){return t.text=acf.decode(t.text),t.children&&(t.children=e(t.children)),t}),t};return e(t)},getAjaxData:function(t){var e={action:this.get("ajaxAction"),s:t.term||"",paged:t.page||1},i=this.get("field");i&&(e.field_key=i.get("key"));var n=this.get("ajaxData");return n&&(e=n.apply(this,[e,t])),e=acf.applyFilters("select2_ajax_data",e,this.data,this.$el,i||!1,this),acf.prepareForAjax(e)},getAjaxResults:function(t,e){(t=acf.parseArgs(t,{results:!1,more:!1})).results&&(t.results=this.decodeChoices(t.results));var i=this.get("ajaxResults");return i&&(t=i.apply(this,[t,e])),t=acf.applyFilters("select2_ajax_results",t,e,this)},processAjaxResults:function(e,i){var e;return(e=this.getAjaxResults(e,i)).more&&(e.pagination={more:!0}),setTimeout(t.proxy(this.mergeOptions,this),1),e},destroy:function(){this.$el.data("select2")&&this.$el.select2("destroy"),this.$el.siblings(".select2-container").remove()}}),a=n.extend({initialize:function(){var e=this.$el,i={width:"100%",allowClear:this.get("allowNull"),placeholder:this.get("placeholder"),multiple:this.get("multiple"),data:[],escapeMarkup:function(t){return t}};i.multiple&&this.getValue().map(function(t){t.$el.detach().appendTo(e)}),e.removeData("ajax"),e.removeAttr("data-ajax"),this.get("ajax")&&(i.ajax={url:acf.get("ajaxurl"),delay:250,dataType:"json",type:"post",cache:!1,data:t.proxy(this.getAjaxData,this),processResults:t.proxy(this.processAjaxResults,this)});var n=this.get("field");i=acf.applyFilters("select2_args",i,e,this.data,n||!1,this),e.select2(i);var a=e.next(".select2-container");if(i.multiple){var r=a.find("ul");r.sortable({stop:function(i){r.find(".select2-selection__choice").each(function(){var i;t(t(this).data("data").element).detach().appendTo(e)}),e.trigger("change")}}),e.on("select2:select",this.proxy(function(t){this.getOption(t.params.data.id).detach().appendTo(this.$el)}))}a.addClass("-acf"),acf.doAction("select2_init",e,i,this.data,n||!1,this)},mergeOptions:function(){var e=!1,i=!1;t('.select2-results__option[role="group"]').each(function(){var n=t(this).children("ul"),a=t(this).children("strong");if(i&&i.text()===a.text())return e.append(n.children()),void t(this).remove();e=n,i=a})}}),r=n.extend({initialize:function(){var e=this.$el,i=this.getValue(),n=this.get("multiple"),a={width:"100%",allowClear:this.get("allowNull"),placeholder:this.get("placeholder"),separator:"||",multiple:this.get("multiple"),data:this.getChoices(),escapeMarkup:function(t){return t},dropdownCss:{"z-index":"999999999"},initSelection:function(t,e){
4
- e(n?i:i.shift())}},r=e.siblings("input");r.length||(r=t('<input type="hidden" />'),e.before(r)),inputValue=i.map(function(t){return t.id}).join("||"),r.val(inputValue),a.multiple&&i.map(function(t){t.$el.detach().appendTo(e)}),a.allowClear&&(a.data=a.data.filter(function(t){return""!==t.id})),e.removeData("ajax"),e.removeAttr("data-ajax"),this.get("ajax")&&(a.ajax={url:acf.get("ajaxurl"),quietMillis:250,dataType:"json",type:"post",cache:!1,data:t.proxy(this.getAjaxData,this),results:t.proxy(this.processAjaxResults,this)});var o=this.get("field");a=acf.applyFilters("select2_args",a,e,this.data,o||!1,this),r.select2(a);var s=r.select2("container"),c=t.proxy(this.getOption,this);if(a.multiple){var l=s.find("ul");l.sortable({stop:function(){l.find(".select2-search-choice").each(function(){var i=t(this).data("select2Data"),n;c(i.id).detach().appendTo(e)}),e.trigger("change")}})}r.on("select2-selecting",function(i){var n=i.choice,a=c(n.id);a.length||(a=t('<option value="'+n.id+'">'+n.text+"</option>")),a.detach().appendTo(e)}),s.addClass("-acf"),acf.doAction("select2_init",e,a,this.data,o||!1,this),r.on("change",function(){var t=r.val();t.indexOf("||")&&(t=t.split("||")),e.val(t).trigger("change")}),e.hide()},mergeOptions:function(){var e=!1,i=!1;t("#select2-drop .select2-result-with-children").each(function(){var n=t(this).children("ul"),a=t(this).children(".select2-result-label");if(i&&i.text()===a.text())return i.append(n.children()),void t(this).remove();e=n,i=a})},getAjaxData:function(t,e){var i={term:t,page:e};return n.prototype.getAjaxData.apply(this,[i])}}),o=new acf.Model({priority:5,wait:"prepare",initialize:function(){var t=acf.get("locale"),e=acf.get("rtl"),n=acf.get("select2L10n"),a=i();return!!n&&(0!==t.indexOf("en")&&void(4==a?this.addTranslations4():3==a&&this.addTranslations3()))},addTranslations4:function(){var t=acf.get("select2L10n"),e=acf.get("locale");e=e.replace("_","-");var i={errorLoading:function(){return t.load_fail},inputTooLong:function(e){var i=e.input.length-e.maximum;return i>1?t.input_too_long_n.replace("%d",i):t.input_too_long_1},inputTooShort:function(e){var i=e.minimum-e.input.length;return i>1?t.input_too_short_n.replace("%d",i):t.input_too_short_1},loadingMore:function(){return t.load_more},maximumSelected:function(e){var i=e.maximum;return i>1?t.selection_too_long_n.replace("%d",i):t.selection_too_long_1},noResults:function(){return t.matches_0},searching:function(){return t.searching}};jQuery.fn.select2.amd.define("select2/i18n/"+e,[],function(){return i})},addTranslations3:function(){var e=acf.get("select2L10n"),i=acf.get("locale");i=i.replace("_","-");var n={formatMatches:function(t){return t>1?e.matches_n.replace("%d",t):e.matches_1},formatNoMatches:function(){return e.matches_0},formatAjaxError:function(){return e.load_fail},formatInputTooShort:function(t,i){var n=i-t.length;return n>1?e.input_too_short_n.replace("%d",n):e.input_too_short_1},formatInputTooLong:function(t,i){var n=t.length-i;return n>1?e.input_too_long_n.replace("%d",n):e.input_too_long_1},formatSelectionTooBig:function(t){return t>1?e.selection_too_long_n.replace("%d",t):e.selection_too_long_1},formatLoadMore:function(){return e.load_more},formatSearching:function(){return e.searching}};t.fn.select2.locales=t.fn.select2.locales||{},t.fn.select2.locales[i]=n,t.extend(t.fn.select2.defaults,n)}})}(jQuery),function(t,e){acf.tinymce={defaults:function(){return"undefined"!=typeof tinyMCEPreInit&&{tinymce:tinyMCEPreInit.mceInit.acf_content,quicktags:tinyMCEPreInit.qtInit.acf_content};var t},initialize:function(t,e){(e=acf.parseArgs(e,{tinymce:!0,quicktags:!0,toolbar:"full",mode:"visual",field:!1})).tinymce&&this.initializeTinymce(t,e),e.quicktags&&this.initializeQuicktags(t,e)},initializeTinymce:function(e,i){var n=t("#"+e),a=this.defaults(),r=acf.get("toolbars"),o=i.field||!1,s=o.$el||!1;if("undefined"==typeof tinymce)return!1;if(!a)return!1;if(tinymce.get(e))return this.enable(e);var c=t.extend({},a.tinymce,i.tinymce);c.id=e,c.selector="#"+e;var l=i.toolbar;if(l&&r&&r[l])for(var u=1;u<=4;u++)c["toolbar"+u]=r[l][u]||"";if(c.setup=function(t){t.on("change",function(e){t.save(),n.trigger("change")}),t.on("mouseup",function(t){var e=new MouseEvent("mouseup");window.dispatchEvent(e)})},c.wp_autoresize_on=!1,c.tadv_noautop||(c.wpautop=!0),c=acf.applyFilters("wysiwyg_tinymce_settings",c,e,o),tinyMCEPreInit.mceInit[e]=c,"visual"==i.mode){var d=tinymce.init(c),f=tinymce.get(e);if(!f)return!1;f.acf=i.field,acf.doAction("wysiwyg_tinymce_init",f,f.id,c,o)}},initializeQuicktags:function(e,i){var n=this.defaults();if("undefined"==typeof quicktags)return!1;if(!n)return!1;var a=t.extend({},n.quicktags,i.quicktags);a.id=e;var r=i.field||!1,o=r.$el||!1;a=acf.applyFilters("wysiwyg_quicktags_settings",a,a.id,r),tinyMCEPreInit.qtInit[e]=a;var s=quicktags(a);if(!s)return!1;this.buildQuicktags(s),acf.doAction("wysiwyg_quicktags_init",s,s.id,a,r)},buildQuicktags:function(t){var e,i,n,a,r,t,o,s,c,l,u=",strong,em,link,block,del,ins,img,ul,ol,li,code,more,close,";for(s in e=t.canvas,i=t.name,n=t.settings,r="",a={},c="",l=t.id,n.buttons&&(c=","+n.buttons+","),edButtons)edButtons[s]&&(o=edButtons[s].id,c&&-1!==u.indexOf(","+o+",")&&-1===c.indexOf(","+o+",")||edButtons[s].instance&&edButtons[s].instance!==l||(a[o]=edButtons[s],edButtons[s].html&&(r+=edButtons[s].html(i+"_"))));c&&-1!==c.indexOf(",dfw,")&&(a.dfw=new QTags.DFWButton,r+=a.dfw.html(i+"_")),"rtl"===document.getElementsByTagName("html")[0].dir&&(a.textdirection=new QTags.TextDirectionButton,r+=a.textdirection.html(i+"_")),t.toolbar.innerHTML=r,t.theButtons=a,"undefined"!=typeof jQuery&&jQuery(document).triggerHandler("quicktags-init",[t])},disable:function(t){this.destroyTinymce(t)},remove:function(t){this.destroyTinymce(t)},destroy:function(t){this.destroyTinymce(t)},destroyTinymce:function(t){if("undefined"==typeof tinymce)return!1;var e=tinymce.get(t);return!!e&&(e.save(),e.destroy(),!0)},enable:function(t){this.enableTinymce(t)},enableTinymce:function(t){return"undefined"!=typeof switchEditors&&(void 0!==tinyMCEPreInit.mceInit[t]&&(switchEditors.go(t,"tmce"),!0))}};var i=new acf.Model({priority:5,actions:{prepare:"onPrepare",ready:"onReady"},onPrepare:function(){var e=t("#acf-hidden-wp-editor");e.exists()&&e.appendTo("body")},onReady:function(){acf.isset(window,"wp","oldEditor")&&(wp.editor.autop=wp.oldEditor.autop,wp.editor.removep=wp.oldEditor.removep),acf.isset(window,"tinymce","on")&&tinymce.on("AddEditor",function(t){var e=t.editor;"acf"===e.id.substr(0,3)&&(e=tinymce.editors.content||e,tinymce.activeEditor=e,wpActiveEditor=e.id)})}})}(jQuery),function(t,e){var i=acf.Model.extend({id:"Validator",data:{errors:[],notice:null,status:""},events:{"changed:status":"onChangeStatus"},addErrors:function(t){t.map(this.addError,this)},addError:function(t){this.data.errors.push(t)},hasErrors:function(){return this.data.errors.length},clearErrors:function(){return this.data.errors=[]},getErrors:function(){return this.data.errors},getFieldErrors:function(){var t=[],e=[];return this.getErrors().map(function(i){if(i.input){var n=e.indexOf(i.input);n>-1?t[n]=i:(t.push(i),e.push(i.input))}}),t},getGlobalErrors:function(){return this.getErrors().filter(function(t){return!t.input})},showErrors:function(){if(this.hasErrors()){var e=this.getFieldErrors(),i=this.getGlobalErrors(),n=0,a=!1;e.map(function(t){var e=this.$('[name="'+t.input+'"]').first();if(e.length||(e=this.$('[name^="'+t.input+'"]').first()),e.length){n++;var i=acf.getClosestField(e);i.showError(t.message),a||(a=i.$el)}},this);var r=acf.__("Validation failed");if(i.map(function(t){r+=". "+t.message}),1==n?r+=". "+acf.__("1 field requires attention"):n>1&&(r+=". "+acf.__("%d fields require attention").replace("%d",n)),this.has("notice"))this.get("notice").update({type:"error",text:r});else{var o=acf.newNotice({type:"error",text:r,target:this.$el});this.set("notice",o)}a||(a=this.get("notice").$el),setTimeout(function(){t("html, body").animate({scrollTop:a.offset().top-t(window).height()/2},500)},10)}},onChangeStatus:function(t,e,i,n){this.$el.removeClass("is-"+n).addClass("is-"+i)},validate:function(e){if(e=acf.parseArgs(e,{event:!1,reset:!1,loading:function(){},complete:function(){},failure:function(){},success:function(t){t.submit()}}),"valid"==this.get("status"))return!0;if("validating"==this.get("status"))return!1;if(!this.$(".acf-field").length)return!0;if(e.event){var i=t.Event(null,e.event);e.success=function(){acf.enableSubmit(t(i.target)).trigger(i)}}acf.doAction("validation_begin",this.$el),acf.lockForm(this.$el),e.loading(this.$el,this),this.set("status","validating");var n=function(t){if(acf.isAjaxSuccess(t)){var e=acf.applyFilters("validation_complete",t.data,this.$el,this);e.valid||this.addErrors(e.errors)}},a=function(){acf.unlockForm(this.$el),this.hasErrors()?(this.set("status","invalid"),acf.doAction("validation_failure",this.$el,this),this.showErrors(),e.failure(this.$el,this)):(this.set("status","valid"),this.has("notice")&&this.get("notice").update({type:"success",text:acf.__("Validation successful"),timeout:1e3}),acf.doAction("validation_success",this.$el,this),acf.doAction("submit",this.$el),e.success(this.$el,this),acf.lockForm(this.$el),e.reset&&this.reset()),e.complete(this.$el,this),this.clearErrors()},r=acf.serialize(this.$el);return r.action="acf/validate_save_post",t.ajax({url:acf.get("ajaxurl"),data:acf.prepareForAjax(r),type:"post",dataType:"json",context:this,success:n,complete:a}),!1},setup:function(t){this.$el=t},reset:function(){this.set("errors",[]),this.set("notice",null),this.set("status",""),acf.unlockForm(this.$el)}}),n=function(t){var e=t.data("acf");return e||(e=new i(t)),e};acf.validateForm=function(t){return n(t.form).validate(t)},acf.enableSubmit=function(t){return t.removeClass("disabled")},acf.disableSubmit=function(t){return t.addClass("disabled")},acf.showSpinner=function(t){return t.addClass("is-active"),t.css("display","inline-block"),t},acf.hideSpinner=function(t){return t.removeClass("is-active"),t.css("display","none"),t},acf.lockForm=function(t){var e=a(t),i=e.find('.button, [type="submit"]'),n=e.find(".spinner, .acf-spinner");return acf.hideSpinner(n),acf.disableSubmit(i),acf.showSpinner(n.last()),t},acf.unlockForm=function(t){var e=a(t),i=e.find('.button, [type="submit"]'),n=e.find(".spinner, .acf-spinner");return acf.enableSubmit(i),acf.hideSpinner(n),t};var a=function(t){var e,e,e,e;return(e=t.find("#submitdiv")).length?e:(e=t.find("#submitpost")).length?e:(e=t.find("p.submit").last()).length?e:(e=t.find(".acf-form-submit")).length?e:t};acf.validation=new acf.Model({id:"validation",active:!0,wait:"prepare",actions:{ready:"addInputEvents",append:"addInputEvents"},events:{'click input[type="submit"]':"onClickSubmit",'click button[type="submit"]':"onClickSubmit","click #save-post":"onClickSave","submit form#post":"onSubmitPost","submit form":"onSubmit"},initialize:function(){acf.get("validation")||(this.active=!1,this.actions={},this.events={})},enable:function(){this.active=!0},disable:function(){this.active=!1},reset:function(t){n(t).reset()},addInputEvents:function(e){var i=t(".acf-field [name]",e);i.length&&this.on(i,"invalid","onInvalid")},onInvalid:function(t,e){t.preventDefault();var i=e.closest("form");i.length&&(n(i).addError({input:e.attr("name"),message:t.target.validationMessage}),i.submit())},onClickSubmit:function(t,e){this.set("originalEvent",t)},onClickSave:function(t,e){this.set("ignore",!0)},onClickSubmitGutenberg:function(e,i){var n;acf.validateForm({form:t("#editor"),event:e,reset:!0,failure:function(t,e){var i=e.get("notice").$el;i.appendTo(".components-notice-list"),i.find(".acf-notice-dismiss").removeClass("small")}})||(e.preventDefault(),e.stopImmediatePropagation())},onSubmitPost:function(e,i){"dopreview"===t("input#wp-preview").val()&&(this.set("ignore",!0),acf.unlockForm(i))},onSubmit:function(t,e){if(!this.active||this.get("ignore")||t.isDefaultPrevented())return this.allowSubmit();var i;acf.validateForm({form:e,event:this.get("originalEvent")})||t.preventDefault()},allowSubmit:function(){return this.set("ignore",!1),this.set("originalEvent",!1),!0}})}(jQuery),function(t,e){var i=new acf.Model({priority:90,timeout:0,actions:{new_field:"refresh",show_field:"refresh",hide_field:"refresh",remove_field:"refresh"},refresh:function(){clearTimeout(this.timeout),this.timeout=setTimeout(function(){acf.doAction("refresh")},0)}}),n=new acf.Model({priority:1,actions:{sortstart:"onSortstart",sortstop:"onSortstop"},onSortstart:function(t){acf.doAction("unmount",t)},onSortstop:function(t){acf.doAction("remount",t)}}),a=new acf.Model({actions:{sortstart:"onSortstart"},onSortstart:function(e,i){e.is("tr")&&(i.html('<td style="padding:0;" colspan="'+i.children().length+'"></td>'),e.addClass("acf-sortable-tr-helper"),e.children().each(function(){t(this).width(t(this).width())}),i.height(e.height()+"px"),e.removeClass("acf-sortable-tr-helper"))}}),r=new acf.Model({actions:{after_duplicate:"onAfterDuplicate"},onAfterDuplicate:function(e,i){var n=[];e.find("select").each(function(e){n.push(t(this).val())}),i.find("select").each(function(e){t(this).val(n[e])})}}),o=new acf.Model({id:"tableHelper",priority:20,actions:{refresh:"renderTables"},renderTables:function(e){var i=this;t(".acf-table:visible").each(function(){i.renderTable(t(this))})},renderTable:function(e){var i=e.find("> thead > tr:visible > th[data-key]"),n=e.find("> tbody > tr:visible > td[data-key]");if(!i.length||!n.length)return!1;i.each(function(e){var i=t(this),a=i.data("key"),r=n.filter('[data-key="'+a+'"]'),o=r.filter(".acf-hidden");r.removeClass("acf-empty"),r.length===o.length?acf.hide(i):(acf.show(i),o.addClass("acf-empty"))}),i.css("width","auto"),i=i.not(".acf-hidden");var a=100,r=i.length,o;i.filter("[data-width]").each(function(){var e=t(this).data("width");t(this).css("width",e+"%"),a-=e});var s=i.not("[data-width]");if(s.length){var c=a/s.length;s.css("width",c+"%"),a=0}a>0&&i.last().css("width","auto"),n.filter(".-collapsed-target").each(function(){var e=t(this);e.parent().hasClass("-collapsed")?e.attr("colspan",i.length):e.removeAttr("colspan")})}}),s=new acf.Model({id:"fieldsHelper",priority:30,actions:{refresh:"renderGroups"},renderGroups:function(){var e=this;t(".acf-fields:visible").each(function(){e.renderGroup(t(this))})},renderGroup:function(e){var i=0,n=0,a=t(),r=e.children(".acf-field[data-width]:visible");return!!r.length&&(e.hasClass("-left")?(r.removeAttr("data-width"),r.css("width","auto"),!1):(r.removeClass("-r0 -c0").css({"min-height":0}),r.each(function(e){var r=t(this),o=r.position(),s=Math.ceil(o.top),c=Math.ceil(o.left);a.length&&s>i&&(a.css({"min-height":n+"px"}),o=r.position(),s=Math.ceil(o.top),c=Math.ceil(o.left),i=0,n=0,a=t()),acf.get("rtl")&&(c=Math.ceil(r.parent().width()-(o.left+r.outerWidth()))),0==s?r.addClass("-r0"):0==c&&r.addClass("-c0");var l=Math.ceil(r.outerHeight())+1;n=Math.max(n,l),i=Math.max(i,s),a=a.add(r)}),void(a.length&&a.css({"min-height":n+"px"}))))}})}(jQuery),function(t,e){acf.newCompatibility=function(t,e){return(e=e||{}).__proto__=t.__proto__,t.__proto__=e,t.compatibility=e,e},acf.getCompatibility=function(t){return t.compatibility||null};var i=acf.newCompatibility(acf,{l10n:{},o:{},fields:{},update:acf.set,add_action:acf.addAction,remove_action:acf.removeAction,do_action:acf.doAction,add_filter:acf.addFilter,remove_filter:acf.removeFilter,apply_filters:acf.applyFilters,parse_args:acf.parseArgs,disable_el:acf.disable,disable_form:acf.disable,enable_el:acf.enable,enable_form:acf.enable,update_user_setting:acf.updateUserSetting,prepare_for_ajax:acf.prepareForAjax,is_ajax_success:acf.isAjaxSuccess,remove_el:acf.remove,remove_tr:acf.remove,str_replace:acf.strReplace,render_select:acf.renderSelect,get_uniqid:acf.uniqid,serialize_form:acf.serialize,esc_html:acf.strEscape,str_sanitize:acf.strSanitize});i._e=function(t,e){t=t||"";var i=(e=e||"")?t+"."+e:t,n={"image.select":"Select Image","image.edit":"Edit Image","image.update":"Update Image"};if(n[i])return acf.__(n[i]);var a=this.l10n[t]||"";return e&&(a=a[e]||""),a},i.get_selector=function(e){var i=".acf-field";if(!e)return i;if(t.isPlainObject(e)){if(t.isEmptyObject(e))return i;for(var n in e){e=e[n];break}}return i+="-"+e,i=acf.strReplace("_","-",i),i=acf.strReplace("field-field-","field-",i)},i.get_fields=function(t,e,i){var n={is:t||"",parent:e||!1,suppressFilters:i||!1};return n.is&&(n.is=this.get_selector(n.is)),acf.findFields(n)},i.get_field=function(t,e){var i=this.get_fields.apply(this,arguments);return!!i.length&&i.first()},i.get_closest_field=function(t,e){return t.closest(this.get_selector(e))},i.get_field_wrap=function(t){return t.closest(this.get_selector())},i.get_field_key=function(t){return t.data("key")},i.get_field_type=function(t){return t.data("type")},i.get_data=function(t,e){return acf.parseArgs(t.data(),e)},i.maybe_get=function(t,e,i){void 0===i&&(i=null),keys=String(e).split(".");for(var n=0;n<keys.length;n++){if(!t.hasOwnProperty(keys[n]))return i;t=t[keys[n]]}return t};var n=function(t){return t instanceof acf.Field?t.$el:t},a=function(t){return acf.arrayArgs(t).map(n)},r=function(e){return function(){if(arguments.length)var i=a(arguments);else var i=[t(document)];return e.apply(this,i)}};i.add_action=function(t,e,n,a){var o=t.split(" "),s=o.length;if(s>1){for(var c=0;c<s;c++)t=o[c],i.add_action.apply(this,arguments);return this}var e=r(e);return acf.addAction.apply(this,arguments)},i.add_filter=function(t,e,i,n){var e=r(e);return acf.addFilter.apply(this,arguments)},i.model={actions:{},filters:{},events:{},extend:function(e){var i=t.extend({},this,e);return t.each(i.actions,function(t,e){i._add_action(t,e)}),t.each(i.filters,function(t,e){i._add_filter(t,e)}),t.each(i.events,function(t,e){i._add_event(t,e)}),i},_add_action:function(t,e){var i=this,n=t.split(" "),t=n[0]||"",a=n[1]||10;acf.add_action(t,this[e],a,this)},_add_filter:function(t,e){var i=this,n=t.split(" "),t=n[0]||"",a=n[1]||10;acf.add_filter(t,this[e],a,this)},_add_event:function(e,i){var n=this,a=e.indexOf(" "),r=a>0?e.substr(0,a):e,o=a>0?e.substr(a+1):"",s=function(e){e.$el=t(this),acf.field_group&&(e.$field=e.$el.closest(".acf-field-object")),"function"==typeof n.event&&(e=n.event(e)),n[i].apply(n,arguments)};o?t(document).on(r,o,s):t(document).on(r,s)},get:function(t,e){return e=e||null,void 0!==this[t]&&(e=this[t]),e},set:function(t,e){return this[t]=e,"function"==typeof this["_set_"+t]&&this["_set_"+t].apply(this),this}},i.field=acf.model.extend({type:"",o:{},$field:null,_add_action:function(t,e){var i=this;t=t+"_field/type="+i.type,acf.add_action(t,function(t){i.set("$field",t),i[e].apply(i,arguments)})},_add_filter:function(t,e){var i=this;t=t+"_field/type="+i.type,acf.add_filter(t,function(t){i.set("$field",t),i[e].apply(i,arguments)})},_add_event:function(e,i){var n=this,a=e.substr(0,e.indexOf(" ")),r=e.substr(e.indexOf(" ")+1),o=acf.get_selector(n.type);t(document).on(a,o+" "+r,function(e){var a=t(this),r=acf.get_closest_field(a,n.type);r.length&&(r.is(n.$field)||n.set("$field",r),e.$el=a,e.$field=r,n[i].apply(n,[e]))})},_set_$field:function(){"function"==typeof this.focus&&this.focus()},doFocus:function(t){return this.set("$field",t)}});var o=acf.newCompatibility(acf.validation,{remove_error:function(t){acf.getField(t).removeError()},add_warning:function(t,e){acf.getField(t).showNotice({text:e,type:"warning",timeout:1e3})},fetch:acf.validateForm,enableSubmit:acf.enableSubmit,disableSubmit:acf.disableSubmit,showSpinner:acf.showSpinner,hideSpinner:acf.hideSpinner,unlockForm:acf.unlockForm,lockForm:acf.lockForm});i.tooltip={tooltip:function(t,e){var i;return acf.newTooltip({text:t,target:e}).$el},temp:function(t,e){var i=acf.newTooltip({text:t,target:e,timeout:250})},confirm:function(t,e,i,n,a){var r=acf.newTooltip({confirm:!0,text:i,target:t,confirm:function(){e(!0)},cancel:function(){e(!1)}})},confirm_remove:function(t,e){var i=acf.newTooltip({confirmRemove:!0,target:t,confirm:function(){e(!0)},cancel:function(){e(!1)}})}},i.media=new acf.Model({activeFrame:!1,actions:{new_media_popup:"onNewMediaPopup"},frame:function(){return this.activeFrame},onNewMediaPopup:function(t){this.activeFrame=t.frame},popup:function(t){var e;return t.mime_types&&(t.allowedTypes=t.mime_types),t.id&&(t.attachment=t.id),acf.newMediaPopup(t).frame}}),i.select2={init:function(t,e,i){return e.allow_null&&(e.allowNull=e.allow_null),e.ajax_action&&(e.ajaxAction=e.ajax_action),i&&(e.field=acf.getField(i)),acf.newSelect2(t,e)},destroy:function(t){return acf.getInstance(t).destroy()}},i.postbox={render:function(t){return t.edit_url&&(t.editLink=t.edit_url),t.edit_title&&(t.editTitle=t.edit_title),acf.newPostbox(t)}},acf.newCompatibility(acf.screen,{update:function(){return this.set.apply(this,arguments)},fetch:acf.screen.check}),i.ajax=acf.screen}(jQuery);
1
+ !function(t,e){var i={};window.acf=i,i.data={},i.get=function(t){return this.data[t]||null},i.has=function(t){return null!==this.get(t)},i.set=function(t,e){return this.data[t]=e,this};var n=0;i.uniqueId=function(t){var e=++n+"";return t?t+e:e},i.uniqueArray=function(t){function e(t,e,i){return i.indexOf(t)===e}return t.filter(e)};var a="";i.uniqid=function(t,e){var i;void 0===t&&(t="");var n=function(t,e){return e<(t=parseInt(t,10).toString(16)).length?t.slice(t.length-e):e>t.length?Array(e-t.length+1).join("0")+t:t};return a||(a=Math.floor(123456789*Math.random())),a++,i=t,i+=n(parseInt((new Date).getTime()/1e3,10),8),i+=n(a,5),e&&(i+=(10*Math.random()).toFixed(8).toString()),i},i.strReplace=function(t,e,i){return i.split(t).join(e)},i.strCamelCase=function(t){return t=(t=t.replace(/[_-]/g," ")).replace(/(?:^\w|\b\w|\s+)/g,function(t,e){return 0==+t?"":0==e?t.toLowerCase():t.toUpperCase()})},i.strPascalCase=function(t){var e=i.strCamelCase(t);return e.charAt(0).toUpperCase()+e.slice(1)},i.strSlugify=function(t){return i.strReplace("_","-",t.toLowerCase())},i.strSanitize=function(t){var e={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Æ":"AE","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ý":"Y","ß":"s","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ù":"u","ú":"u","û":"u","ü":"u","ý":"y","ÿ":"y","Ā":"A","ā":"a","Ă":"A","ă":"a","Ą":"A","ą":"a","Ć":"C","ć":"c","Ĉ":"C","ĉ":"c","Ċ":"C","ċ":"c","Č":"C","č":"c","Ď":"D","ď":"d","Đ":"D","đ":"d","Ē":"E","ē":"e","Ĕ":"E","ĕ":"e","Ė":"E","ė":"e","Ę":"E","ę":"e","Ě":"E","ě":"e","Ĝ":"G","ĝ":"g","Ğ":"G","ğ":"g","Ġ":"G","ġ":"g","Ģ":"G","ģ":"g","Ĥ":"H","ĥ":"h","Ħ":"H","ħ":"h","Ĩ":"I","ĩ":"i","Ī":"I","ī":"i","Ĭ":"I","ĭ":"i","Į":"I","į":"i","İ":"I","ı":"i","IJ":"IJ","ij":"ij","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","Ĺ":"L","ĺ":"l","Ļ":"L","ļ":"l","Ľ":"L","ľ":"l","Ŀ":"L","ŀ":"l","Ł":"l","ł":"l","Ń":"N","ń":"n","Ņ":"N","ņ":"n","Ň":"N","ň":"n","ʼn":"n","Ō":"O","ō":"o","Ŏ":"O","ŏ":"o","Ő":"O","ő":"o","Œ":"OE","œ":"oe","Ŕ":"R","ŕ":"r","Ŗ":"R","ŗ":"r","Ř":"R","ř":"r","Ś":"S","ś":"s","Ŝ":"S","ŝ":"s","Ş":"S","ş":"s","Š":"S","š":"s","Ţ":"T","ţ":"t","Ť":"T","ť":"t","Ŧ":"T","ŧ":"t","Ũ":"U","ũ":"u","Ū":"U","ū":"u","Ŭ":"U","ŭ":"u","Ů":"U","ů":"u","Ű":"U","ű":"u","Ų":"U","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","ź":"z","Ż":"Z","ż":"z","Ž":"Z","ž":"z","ſ":"s","ƒ":"f","Ơ":"O","ơ":"o","Ư":"U","ư":"u","Ǎ":"A","ǎ":"a","Ǐ":"I","ǐ":"i","Ǒ":"O","ǒ":"o","Ǔ":"U","ǔ":"u","Ǖ":"U","ǖ":"u","Ǘ":"U","ǘ":"u","Ǚ":"U","ǚ":"u","Ǜ":"U","ǜ":"u","Ǻ":"A","ǻ":"a","Ǽ":"AE","ǽ":"ae","Ǿ":"O","ǿ":"o"," ":"_","'":"","?":"","/":"","\\":"",".":"",",":"","`":"",">":"","<":"",'"':"","[":"","]":"","|":"","{":"","}":"","(":"",")":""},i=/\W/g,n=function(t){return void 0!==e[t]?e[t]:t};return t=(t=t.replace(i,n)).toLowerCase()},i.strMatch=function(t,e){for(var i=0,n=Math.min(t.length,e.length),a=0;a<n&&t[a]===e[a];a++)i++;return i},i.decode=function(e){return t("<textarea/>").html(e).text()},i.strEscape=function(e){return t("<div>").text(e).html()},i.parseArgs=function(e,i){return"object"!=typeof e&&(e={}),"object"!=typeof i&&(i={}),t.extend({},i,e)},null==window.acfL10n&&(acfL10n={}),i.__=function(t){return acfL10n[t]||t},i._x=function(t,e){return acfL10n[t+"."+e]||acfL10n[t]||t},i._n=function(t,e,n){return 1==n?i.__(t):i.__(e)},i.isArray=function(t){return Array.isArray(t)},i.isObject=function(t){return"object"==typeof t};var r=function(t,e,n){var a=(e=e.replace("[]","[%%index%%]")).match(/([^\[\]])+/g);if(a)for(var r=a.length,o=t,s=0;s<r;s++){var c=String(a[s]);s==r-1?"%%index%%"===c?o.push(n):o[c]=n:("%%index%%"===a[s+1]?i.isArray(o[c])||(o[c]=[]):i.isObject(o[c])||(o[c]={}),o=o[c])}};i.serialize=function(t,e){var n={},a=i.serializeArray(t);void 0!==e&&(a=a.filter(function(t){return 0===t.name.indexOf(e)}).map(function(t){return t.name=t.name.slice(e.length),t}));for(var o=0;o<a.length;o++)r(n,a[o].name,a[o].value);return n},i.serializeArray=function(t){return t.find("select, textarea, input").serializeArray()},i.serializeForAjax=function(t){var e={},n;return i.serializeArray(t).map(function(t){"[]"===t.name.slice(-2)?(e[t.name]=e[t.name]||[],e[t.name].push(t.value)):e[t.name]=t.value}),e},i.addAction=function(t,e,n,a){return i.hooks.addAction.apply(this,arguments),this},i.removeAction=function(t,e){return i.hooks.removeAction.apply(this,arguments),this};var o={};i.doAction=function(t){return o[t]=1,i.hooks.doAction.apply(this,arguments),o[t]=0,this},i.doingAction=function(t){return 1===o[t]},i.didAction=function(t){return void 0!==o[t]},i.currentAction=function(){for(var t in o)if(o[t])return t;return!1},i.addFilter=function(t){return i.hooks.addFilter.apply(this,arguments),this},i.removeFilter=function(t){return i.hooks.removeFilter.apply(this,arguments),this},i.applyFilters=function(t){return i.hooks.applyFilters.apply(this,arguments)},i.arrayArgs=function(t){return Array.prototype.slice.call(t)};try{var s=JSON.parse(localStorage.getItem("acf"))||{}}catch(t){var s={}}var c=function(t){return"this."===t.substr(0,5)&&(t=t.substr(5)+"-"+i.get("post_id")),t};i.getPreference=function(t){return t=c(t),s[t]||null},i.setPreference=function(t,e){t=c(t),null===e?delete s[t]:s[t]=e,localStorage.setItem("acf",JSON.stringify(s))},i.removePreference=function(t){i.setPreference(t,null)},i.remove=function(t){t instanceof jQuery&&(t={target:t}),t=i.parseArgs(t,{target:!1,endHeight:0,complete:function(){}}),i.doAction("remove",t.target),t.target.is("tr")?u(t):l(t)};var l=function(t){var e=t.target,i=e.height(),n=e.width(),a=e.css("margin"),r=e.outerHeight(!0),o=e.attr("style")+"";e.wrap('<div class="acf-temp-remove" style="height:'+r+'px"></div>');var s=e.parent();e.css({height:i,width:n,margin:a,position:"absolute"}),setTimeout(function(){s.css({opacity:0,height:t.endHeight})},50),setTimeout(function(){e.attr("style",o),s.remove(),t.complete()},301)},u=function(e){var i=e.target,n=i.height(),a=i.children().length,r=t('<td class="acf-temp-remove" style="padding:0; height:'+n+'px" colspan="'+a+'"></td>');i.addClass("acf-remove-element"),setTimeout(function(){i.html(r)},251),setTimeout(function(){i.removeClass("acf-remove-element"),r.css({height:e.endHeight})},300),setTimeout(function(){i.remove(),e.complete()},451)};i.duplicate=function(t){t instanceof jQuery&&(t={target:t});var e=0;(t=i.parseArgs(t,{target:!1,search:"",replace:"",before:function(t){},after:function(t,e){},append:function(t,i){t.after(i),e=1}})).target=t.target||t.$el;var n=t.target;t.search=t.search||n.attr("data-id"),t.replace=t.replace||i.uniqid(),t.before(n),i.doAction("before_duplicate",n);var a=n.clone();return i.rename({target:a,search:t.search,replace:t.replace}),a.removeClass("acf-clone"),a.find(".ui-sortable").removeClass("ui-sortable"),t.after(n,a),i.doAction("after_duplicate",n,a),t.append(n,a),i.doAction("append",a),a},i.rename=function(t){t instanceof jQuery&&(t={target:t});var e=(t=i.parseArgs(t,{target:!1,destructive:!1,search:"",replace:""})).target,n=t.search||e.attr("data-id"),a=t.replace||i.uniqid("acf"),r=function(t,e){return e.replace(n,a)};if(t.destructive){var o=e.outerHTML();o=i.strReplace(n,a,o),e.replaceWith(o)}else e.attr("data-id",a),e.find('[id*="'+n+'"]').attr("id",r),e.find('[for*="'+n+'"]').attr("for",r),e.find('[name*="'+n+'"]').attr("name",r);return e},i.prepareForAjax=function(t){return t.nonce=i.get("nonce"),t.post_id=i.get("post_id"),i.has("language")&&(t.lang=i.get("language")),t=i.applyFilters("prepare_for_ajax",t)},i.startButtonLoading=function(t){t.prop("disabled",!0),t.after(' <i class="acf-loading"></i>')},i.stopButtonLoading=function(t){t.prop("disabled",!1),t.next(".acf-loading").remove()},i.showLoading=function(t){t.append('<div class="acf-loading-overlay"><i class="acf-loading"></i></div>')},i.hideLoading=function(t){t.children(".acf-loading-overlay").remove()},i.updateUserSetting=function(e,n){var a={action:"acf/ajax/user_setting",name:e,value:n};t.ajax({url:i.get("ajaxurl"),data:i.prepareForAjax(a),type:"post",dataType:"html"})},i.val=function(t,e,i){var n=t.val();return e!==n&&(t.val(e),t.is("select")&&null===t.val()?(t.val(n),!1):(!0!==i&&t.trigger("change"),!0))},i.show=function(t,e){return e&&i.unlock(t,"hidden",e),!i.isLocked(t,"hidden")&&(!!t.hasClass("acf-hidden")&&(t.removeClass("acf-hidden"),!0))},i.hide=function(t,e){return e&&i.lock(t,"hidden",e),!t.hasClass("acf-hidden")&&(t.addClass("acf-hidden"),!0)},i.isHidden=function(t){return t.hasClass("acf-hidden")},i.isVisible=function(t){return!i.isHidden(t)};var d=function(t,e){return!t.hasClass("acf-disabled")&&(e&&i.unlock(t,"disabled",e),!i.isLocked(t,"disabled")&&(!!t.prop("disabled")&&(t.prop("disabled",!1),!0)))};i.enable=function(e,i){if(e.attr("name"))return d(e,i);var n=!1;return e.find("[name]").each(function(){var e;d(t(this),i)&&(n=!0)}),n};var f=function(t,e){return e&&i.lock(t,"disabled",e),!t.prop("disabled")&&(t.prop("disabled",!0),!0)};i.disable=function(e,i){if(e.attr("name"))return f(e,i);var n=!1;return e.find("[name]").each(function(){var e;f(t(this),i)&&(n=!0)}),n},i.isset=function(t){for(var e=1;e<arguments.length;e++){if(!t||!t.hasOwnProperty(arguments[e]))return!1;t=t[arguments[e]]}return!0},i.isget=function(t){for(var e=1;e<arguments.length;e++){if(!t||!t.hasOwnProperty(arguments[e]))return null;t=t[arguments[e]]}return t},i.getFileInputData=function(t,e){var n=t.val();if(!n)return!1;var a={url:n},r=i.isget(t[0],"files",0);if(r)if(a.size=r.size,a.type=r.type,r.type.indexOf("image")>-1){var o=window.URL||window.webkitURL,s=new Image;s.onload=function(){a.width=this.width,a.height=this.height,e(a)},s.src=o.createObjectURL(r)}else e(a);else e(a)},i.isAjaxSuccess=function(t){return t&&t.success},i.getAjaxMessage=function(t){return i.isget(t,"data","message")},i.getAjaxError=function(t){return i.isget(t,"data","error")},i.renderSelect=function(t,e){var n=t.val(),a=[],r=function(t){var e="";return t.map(function(t){var n=t.text||t.label||"",o=t.id||t.value||"";a.push(o),t.children?e+='<optgroup label="'+i.strEscape(n)+'">'+r(t.children)+"</optgroup>":e+='<option value="'+o+'"'+(t.disabled?' disabled="disabled"':"")+">"+i.strEscape(n)+"</option>"}),e};return t.html(r(e)),a.indexOf(n)>-1&&t.val(n),t.val()};var h=function(t,e){return t.data("acf-lock-"+e)||[]},p=function(t,e,i){t.data("acf-lock-"+e,i)};i.lock=function(t,e,i){var n=h(t,e),a;n.indexOf(i)<0&&(n.push(i),p(t,e,n))},i.unlock=function(t,e,i){var n=h(t,e),a=n.indexOf(i);return a>-1&&(n.splice(a,1),p(t,e,n)),0===n.length},i.isLocked=function(t,e){return h(t,e).length>0},i.isGutenberg=function(){return window.wp&&wp.data&&wp.data.select&&wp.data.select("core/editor")},i.objectToArray=function(t){return Object.keys(t).map(function(e){return t[e]})},t.fn.exists=function(){return t(this).length>0},t.fn.outerHTML=function(){return t(this).get(0).outerHTML},Array.prototype.indexOf||(Array.prototype.indexOf=function(e){return t.inArray(e,this)}),t(document).ready(function(){i.doAction("ready")}),t(window).on("load",function(){i.doAction("load")}),t(window).on("beforeunload",function(){i.doAction("unload")}),t(window).on("resize",function(){i.doAction("resize")}),t(document).on("sortstart",function(t,e){i.doAction("sortstart",e.item,e.placeholder)}),t(document).on("sortstop",function(t,e){i.doAction("sortstop",e.item,e.placeholder)})}(jQuery),function(t,e){"use strict";var i=function(){function t(){return f}function e(t,e,i,n){return"string"==typeof t&&"function"==typeof e&&c("actions",t,e,i=parseInt(i||10,10),n),d}function i(){var t=Array.prototype.slice.call(arguments),e=t.shift();return"string"==typeof e&&u("actions",e,t),d}function n(t,e){return"string"==typeof t&&s("actions",t,e),d}function a(t,e,i,n){return"string"==typeof t&&"function"==typeof e&&c("filters",t,e,i=parseInt(i||10,10),n),d}function r(){var t=Array.prototype.slice.call(arguments),e=t.shift();return"string"==typeof e?u("filters",e,t):d}function o(t,e){return"string"==typeof t&&s("filters",t,e),d}function s(t,e,i,n){if(f[t][e])if(i){var a=f[t][e],r;if(n)for(r=a.length;r--;){var o=a[r];o.callback===i&&o.context===n&&a.splice(r,1)}else for(r=a.length;r--;)a[r].callback===i&&a.splice(r,1)}else f[t][e]=[]}function c(t,e,i,n,a){var r={callback:i,priority:n,context:a},o=f[t][e];o?(o.push(r),o=l(o)):o=[r],f[t][e]=o}function l(t){for(var e,i,n,a=1,r=t.length;a<r;a++){for(e=t[a],i=a;(n=t[i-1])&&n.priority>e.priority;)t[i]=t[i-1],--i;t[i]=e}return t}function u(t,e,i){var n=f[t][e];if(!n)return"filters"===t&&i[0];var a=0,r=n.length;if("filters"===t)for(;a<r;a++)i[0]=n[a].callback.apply(n[a].context,i);else for(;a<r;a++)n[a].callback.apply(n[a].context,i);return"filters"!==t||i[0]}var d={removeFilter:o,applyFilters:r,addFilter:a,removeAction:n,doAction:i,addAction:e,storage:t},f={actions:{},filters:{}};return d};acf.hooks=new i}(window),function(t,e){var i=/^(\S+)\s*(.*)$/,n=function(e){var i=this,n;return n=e&&e.hasOwnProperty("constructor")?e.constructor:function(){return i.apply(this,arguments)},t.extend(n,i),n.prototype=Object.create(i.prototype),t.extend(n.prototype,e),n.prototype.constructor=n,n},a=acf.Model=function(){this.cid=acf.uniqueId("acf"),this.data=t.extend(!0,{},this.data),this.setup.apply(this,arguments),this.$el&&!this.$el.data("acf")&&this.$el.data("acf",this);var e=function(){this.initialize(),this.addEvents(),this.addActions(),this.addFilters()};this.wait&&!acf.didAction(this.wait)?this.addAction(this.wait,e):e.apply(this)};t.extend(a.prototype,{id:"",cid:"",$el:null,data:{},busy:!1,changed:!1,events:{},actions:{},filters:{},eventScope:"",wait:!1,priority:10,get:function(t){return this.data[t]},has:function(t){return null!=this.get(t)},set:function(t,e,i){var n=this.get(t);return n==e?this:(this.data[t]=e,i||(this.changed=!0,this.trigger("changed:"+t,[e,n]),this.trigger("changed",[t,e,n])),this)},inherit:function(e){return e instanceof jQuery&&(e=e.data()),t.extend(this.data,e),this},prop:function(){return this.$el.prop.apply(this.$el,arguments)},setup:function(e){t.extend(this,e)},initialize:function(){},addElements:function(t){if(!(t=t||this.elements||null)||!Object.keys(t).length)return!1;for(var e in t)this.addElement(e,t[e])},addElement:function(t,e){this["$"+t]=this.$(e)},addEvents:function(t){if(!(t=t||this.events||null))return!1;for(var e in t){var n=e.match(i);this.on(n[1],n[2],t[e])}},removeEvents:function(t){if(!(t=t||this.events||null))return!1;for(var e in t){var n=e.match(i);this.off(n[1],n[2],t[e])}},getEventTarget:function(e,i){return e||this.$el||t(document)},validateEvent:function(e){return!this.eventScope||t(e.target).closest(this.eventScope).is(this.$el)},proxyEvent:function(e){return this.proxy(function(i){if(this.validateEvent(i)){var n=acf.arrayArgs(arguments),a=n.slice(1),r=[i,t(i.currentTarget)].concat(a);e.apply(this,r)}})},on:function(t,e,i,n){var a,r,o,s,c;t instanceof jQuery?n?(a=t,r=e,o=i,s=n):(a=t,r=e,s=i):i?(r=t,o=e,s=i):(r=t,s=e),a=this.getEventTarget(a),"string"==typeof s&&(s=this.proxyEvent(this[s])),r=r+"."+this.cid,c=o?[r,o,s]:[r,s],a.on.apply(a,c)},off:function(t,e,i){var n,a,r,o;t instanceof jQuery?i?(n=t,a=e,r=i):(n=t,a=e):e?(a=t,r=e):a=t,n=this.getEventTarget(n),a=a+"."+this.cid,o=r?[a,r]:[a],n.off.apply(n,o)},trigger:function(t,e,i){var n=this.getEventTarget();return i?n.trigger.apply(n,arguments):n.triggerHandler.apply(n,arguments),this},addActions:function(t){if(!(t=t||this.actions||null))return!1;for(var e in t)this.addAction(e,t[e])},removeActions:function(t){if(!(t=t||this.actions||null))return!1;for(var e in t)this.removeAction(e,t[e])},addAction:function(t,e,i){i=i||this.priority,"string"==typeof e&&(e=this[e]),acf.addAction(t,e,i,this)},removeAction:function(t,e){acf.removeAction(t,this[e])},addFilters:function(t){if(!(t=t||this.filters||null))return!1;for(var e in t)this.addFilter(e,t[e])},addFilter:function(t,e,i){i=i||this.priority,"string"==typeof e&&(e=this[e]),acf.addFilter(t,e,i,this)},removeFilters:function(t){if(!(t=t||this.filters||null))return!1;for(var e in t)this.removeFilter(e,t[e])},removeFilter:function(t,e){acf.removeFilter(t,this[e])},$:function(t){return this.$el.find(t)},remove:function(){this.removeEvents(),this.removeActions(),this.removeFilters(),this.$el.remove()},setTimeout:function(t,e){return setTimeout(this.proxy(t),e)},time:function(){console.time(this.id||this.cid)},timeEnd:function(){console.timeEnd(this.id||this.cid)},show:function(){acf.show(this.$el)},hide:function(){acf.hide(this.$el)},proxy:function(e){return t.proxy(e,this)}}),a.extend=n,acf.models={},acf.getInstance=function(t){return t.data("acf")},acf.getInstances=function(e){var i=[];return e.each(function(){i.push(acf.getInstance(t(this)))}),i}}(jQuery),function(t,e){acf.models.Popup=acf.Model.extend({data:{title:"",content:"",width:0,height:0,loading:!1},events:{'click [data-event="close"]':"onClickClose","click .acf-close-popup":"onClickClose"},setup:function(e){t.extend(this.data,e),this.$el=t(this.tmpl())},initialize:function(){this.render(),this.open()},tmpl:function(){return['<div id="acf-popup">','<div class="acf-popup-box acf-box">','<div class="title"><h3></h3><a href="#" class="acf-icon -cancel grey" data-event="close"></a></div>','<div class="inner"></div>','<div class="loading"><i class="acf-loading"></i></div>',"</div>",'<div class="bg" data-event="close"></div>',"</div>"].join("")},render:function(){var t=this.get("title"),e=this.get("content"),i=this.get("loading"),n=this.get("width"),a=this.get("height");this.title(t),this.content(e),n&&this.$(".acf-popup-box").css("width",n),a&&this.$(".acf-popup-box").css("min-height",a),this.loading(i),acf.doAction("append",this.$el)},update:function(t){this.data=acf.parseArgs(t,this.data),this.render()},title:function(t){this.$(".title:first h3").html(t)},content:function(t){this.$(".inner:first").html(t)},loading:function(t){var e=this.$(".loading:first");t?e.show():e.hide()},open:function(){t("body").append(this.$el)},close:function(){this.remove()},onClickClose:function(t,e){t.preventDefault(),this.close()}}),acf.newPopup=function(t){return new acf.models.Popup(t)}}(jQuery),function(t,e){acf.unload=new acf.Model({wait:"load",active:!0,changed:!1,actions:{validation_failure:"startListening",validation_success:"stopListening"},events:{"change form .acf-field":"startListening","submit form":"stopListening"},enable:function(){this.active=!0},disable:function(){this.active=!1},reset:function(){this.stopListening()},startListening:function(){!this.changed&&this.active&&(this.changed=!0,t(window).on("beforeunload",this.onUnload))},stopListening:function(){this.changed=!1,t(window).off("beforeunload",this.onUnload)},onUnload:function(){return acf.__("The changes you made will be lost if you navigate away from this page")}})}(jQuery),function(t,e){var i=new acf.Model({events:{"click .acf-panel-title":"onClick"},onClick:function(t,e){t.preventDefault(),this.toggle(e.parent())},isOpen:function(t){return t.hasClass("-open")},toggle:function(t){this.isOpen(t)?this.close(t):this.open(t)},open:function(t){t.addClass("-open"),t.find(".acf-panel-title i").attr("class","dashicons dashicons-arrow-down")},close:function(t){t.removeClass("-open"),t.find(".acf-panel-title i").attr("class","dashicons dashicons-arrow-right")}})}(jQuery),function(t,e){var i=acf.Model.extend({data:{text:"",type:"",timeout:0,dismiss:!0,target:!1,close:function(){}},events:{"click .acf-notice-dismiss":"onClickClose"},tmpl:function(){return'<div class="acf-notice"></div>'},setup:function(e){t.extend(this.data,e),this.$el=t(this.tmpl())},initialize:function(){this.render(),this.show()},render:function(){this.type(this.get("type")),this.html("<p>"+this.get("text")+"</p>"),this.get("dismiss")&&(this.$el.append('<a href="#" class="acf-notice-dismiss acf-icon -cancel small"></a>'),this.$el.addClass("-dismiss"));var t=this.get("timeout");t&&this.away(t)},update:function(e){t.extend(this.data,e),this.initialize(),this.removeEvents(),this.addEvents()},show:function(){var t=this.get("target");t&&t.prepend(this.$el)},hide:function(){this.$el.remove()},away:function(t){this.setTimeout(function(){acf.remove(this.$el)},t)},type:function(t){var e=this.get("type");e&&this.$el.removeClass("-"+e),this.$el.addClass("-"+t),"error"==t&&this.$el.addClass("acf-error-message")},html:function(t){this.$el.html(t)},text:function(t){this.$("p").html(t)},onClickClose:function(t,e){t.preventDefault(),this.get("close").apply(this,arguments),this.remove()}});acf.newNotice=function(t){return"object"!=typeof t&&(t={text:t}),new i(t)};var n=new acf.Model({wait:"prepare",priority:1,initialize:function(){var e=t(".acf-admin-notice");e.length&&t("h1:first").after(e)}})}(jQuery),function(t,e){var i=new acf.Model({wait:"prepare",priority:1,initialize:function(){(acf.get("postboxes")||[]).map(acf.newPostbox)}});acf.getPostbox=function(e){return"string"==typeof e&&(e=t("#"+e)),acf.getInstance(e)},acf.getPostboxes=function(){return acf.getInstances(t(".acf-postbox"))},acf.newPostbox=function(t){return new acf.models.Postbox(t)},acf.models.Postbox=acf.Model.extend({data:{id:"",key:"",style:"default",label:"top",edit:""},setup:function(e){e.editLink&&(e.edit=e.editLink),t.extend(this.data,e),this.$el=this.$postbox()},$postbox:function(){return t("#"+this.get("id"))},$hide:function(){return t("#"+this.get("id")+"-hide")},$hideLabel:function(){return this.$hide().parent()},$hndle:function(){return this.$("> .hndle")},$inside:function(){return this.$("> .inside")},isVisible:function(){return this.$el.hasClass("acf-hidden")},initialize:function(){if(this.$el.addClass("acf-postbox"),this.$el.removeClass("hide-if-js"),"block"!==acf.get("editor")){var t=this.get("style");"default"!==t&&this.$el.addClass(t)}this.$inside().addClass("acf-fields").addClass("-"+this.get("label"));var e=this.get("edit");e&&this.$hndle().append('<a href="'+e+'" class="dashicons dashicons-admin-generic acf-hndle-cog acf-js-tooltip" title="'+acf.__("Edit field group")+'"></a>'),this.show()},show:function(){this.$hideLabel().show(),this.$hide().prop("checked",!0),this.$el.show().removeClass("acf-hidden")},enable:function(){acf.enable(this.$el,"postbox")},showEnable:function(){this.show(),this.enable()},hide:function(){this.$hideLabel().hide(),this.$el.hide().addClass("acf-hidden")},disable:function(){acf.disable(this.$el,"postbox")},hideDisable:function(){this.hide(),this.disable()},html:function(t){this.$inside().html(t),acf.doAction("append",this.$el)}})}(jQuery),function(t,e){acf.newTooltip=function(t){return"object"!=typeof t&&(t={text:t}),void 0!==t.confirmRemove?(t.textConfirm=acf.__("Remove"),t.textCancel=acf.__("Cancel"),new n(t)):void 0!==t.confirm?new n(t):new i(t)};var i=acf.Model.extend({data:{text:"",timeout:0,target:null},tmpl:function(){return'<div class="acf-tooltip"></div>'},setup:function(e){t.extend(this.data,e),this.$el=t(this.tmpl())},initialize:function(){this.render(),this.show(),this.position();var e=this.get("timeout");e&&setTimeout(t.proxy(this.fade,this),e)},update:function(e){t.extend(this.data,e),this.initialize()},render:function(){this.html(this.get("text"))},show:function(){t("body").append(this.$el)},hide:function(){this.$el.remove()},fade:function(){this.$el.addClass("acf-fade-up"),this.setTimeout(function(){this.remove()},250)},html:function(t){this.$el.html(t)},position:function(){var e=this.$el,i=this.get("target");if(i){e.removeClass("right left bottom top").css({top:0,left:0});var n=10,a=i.outerWidth(),r=i.outerHeight(),o=i.offset().top,s=i.offset().left,c=e.outerWidth(),l=e.outerHeight(),u=e.offset().top,d=o-l-u,f=s+a/2-c/2;f<10?(e.addClass("right"),f=s+a,d=o+r/2-l/2-u):f+c+10>t(window).width()?(e.addClass("left"),f=s-c,d=o+r/2-l/2-u):d-t(window).scrollTop()<10?(e.addClass("bottom"),d=o+r-u):e.addClass("top"),e.css({top:d,left:f})}}}),n=i.extend({data:{text:"",textConfirm:"",textCancel:"",target:null,targetConfirm:!0,confirm:function(){},cancel:function(){},context:!1},events:{'click [data-event="cancel"]':"onCancel",'click [data-event="confirm"]':"onConfirm"},addEvents:function(){acf.Model.prototype.addEvents.apply(this);var e=t(document),i=this.get("target");this.setTimeout(function(){this.on(e,"click","onCancel")}),this.get("targetConfirm")&&this.on(i,"click","onConfirm")},removeEvents:function(){acf.Model.prototype.removeEvents.apply(this);var e=t(document),i=this.get("target");this.off(e,"click"),this.off(i,"click")},render:function(){var t,e,i,n=[this.get("text")||acf.__("Are you sure?"),'<a href="#" data-event="confirm">'+(this.get("textConfirm")||acf.__("Yes"))+"</a>",'<a href="#" data-event="cancel">'+(this.get("textCancel")||acf.__("No"))+"</a>"].join(" ");this.html(n),this.$el.addClass("-confirm")},onCancel:function(t,e){t.preventDefault(),t.stopImmediatePropagation();var i=this.get("cancel"),n=this.get("context")||this;i.apply(n,arguments),this.remove()},onConfirm:function(t,e){t.preventDefault(),t.stopImmediatePropagation();var i=this.get("confirm"),n=this.get("context")||this;i.apply(n,arguments),this.remove()}});acf.models.Tooltip=i,acf.models.TooltipConfirm=n;var a=new acf.Model({tooltip:!1,events:{"mouseenter .acf-js-tooltip":"showTitle","mouseup .acf-js-tooltip":"hideTitle","mouseleave .acf-js-tooltip":"hideTitle"},showTitle:function(t,e){var i=e.attr("title");i&&(e.attr("title",""),this.tooltip?this.tooltip.update({text:i,target:e}):this.tooltip=acf.newTooltip({text:i,target:e}))},hideTitle:function(t,e){this.tooltip.hide(),e.attr("title",this.tooltip.get("text"))}})}(jQuery),function(t,e){var i=[];acf.Field=acf.Model.extend({type:"",eventScope:".acf-field",wait:"ready",setup:function(t){this.$el=t,this.inherit(t),this.inherit(this.$control())},val:function(t){return void 0!==t?this.setValue(t):this.prop("disabled")?null:this.getValue()},getValue:function(){return this.$input().val()},setValue:function(t){return acf.val(this.$input(),t)},__:function(t){return acf._e(this.type,t)},$control:function(){return!1},$input:function(){return this.$("[name]:first")},$inputWrap:function(){return this.$(".acf-input:first")},$labelWrap:function(){return this.$(".acf-label:first")},getInputName:function(){return this.$input().attr("name")||""},parent:function(){var t=this.parents();return!!t.length&&t[0]},parents:function(){var t=this.$el.parents(".acf-field"),e;return acf.getFields(t)},show:function(t,e){var i=acf.show(this.$el,t);return i&&(this.prop("hidden",!1),acf.doAction("show_field",this,e)),i},hide:function(t,e){var i=acf.hide(this.$el,t);return i&&(this.prop("hidden",!0),acf.doAction("hide_field",this,e)),i},enable:function(t,e){var i=acf.enable(this.$el,t);return i&&(this.prop("disabled",!1),acf.doAction("enable_field",this,e)),i},disable:function(t,e){var i=acf.disable(this.$el,t);return i&&(this.prop("disabled",!0),acf.doAction("disable_field",this,e)),i},showEnable:function(t,e){return this.enable.apply(this,arguments),this.show.apply(this,arguments)},hideDisable:function(t,e){return this.disable.apply(this,arguments),this.hide.apply(this,arguments)},showNotice:function(t){"object"!=typeof t&&(t={text:t}),this.notice&&this.notice.remove(),t.target=this.$inputWrap(),this.notice=acf.newNotice(t)},removeNotice:function(t){this.notice&&(this.notice.away(t||0),this.notice=!1)},showError:function(e){this.$el.addClass("acf-error"),void 0!==e&&this.showNotice({text:e,type:"error",dismiss:!1}),acf.doAction("invalid_field",this),this.$el.one("focus change","input, select, textarea",t.proxy(this.removeError,this))},removeError:function(){this.$el.removeClass("acf-error"),this.removeNotice(250),acf.doAction("valid_field",this)},trigger:function(t,e,i){return"invalidField"==t&&(i=!0),acf.Model.prototype.trigger.apply(this,[t,e,i])}}),acf.newField=function(t){var e=t.data("type"),i=n(e),a,r=new(acf.models[i]||acf.Field)(t);return acf.doAction("new_field",r),r};var n=function(t){return acf.strPascalCase(t||"")+"Field"};acf.registerFieldType=function(t){var e,a=t.prototype.type,r=n(a);acf.models[r]=t,i.push(a)},acf.getFieldType=function(t){var e=n(t);return acf.models[e]||!1},acf.getFieldTypes=function(t){t=acf.parseArgs(t,{category:""});var e=[];return i.map(function(i){var n=acf.getFieldType(i),a=n.prototype;t.category&&a.category!==t.category||e.push(n)}),e}}(jQuery),function(t,e){acf.findFields=function(e){var i=".acf-field",n=!1;return(e=acf.parseArgs(e,{key:"",name:"",type:"",is:"",parent:!1,sibling:!1,limit:!1,visible:!1,suppressFilters:!1})).suppressFilters||(e=acf.applyFilters("find_fields_args",e)),e.key&&(i+='[data-key="'+e.key+'"]'),e.type&&(i+='[data-type="'+e.type+'"]'),e.name&&(i+='[data-name="'+e.name+'"]'),e.is&&(i+=e.is),e.visible&&(i+=":visible"),n=e.parent?e.parent.find(i):e.sibling?e.sibling.siblings(i):t(i),e.suppressFilters||(n=n.not(".acf-clone .acf-field"),n=acf.applyFilters("find_fields",n)),e.limit&&(n=n.slice(0,e.limit)),n},acf.findField=function(t,e){return acf.findFields({key:t,limit:1,parent:e,suppressFilters:!0})},acf.getField=function(t){t instanceof jQuery||(t=acf.findField(t));var e=t.data("acf");return e||(e=acf.newField(t)),e},acf.getFields=function(e){e instanceof jQuery||(e=acf.findFields(e));var i=[];return e.each(function(){var e=acf.getField(t(this));i.push(e)}),i},acf.findClosestField=function(t){return t.closest(".acf-field")},acf.getClosestField=function(t){var e=acf.findClosestField(t);return this.getField(e)};var i=function(t){var e=t,i=t+"_fields",a=t+"_field",r=function(t){var e=acf.arrayArgs(arguments),n=e.slice(1),a=acf.getFields({parent:t});if(a.length){var r=[i,a].concat(n);acf.doAction.apply(null,r)}},o=function(t){var e=acf.arrayArgs(arguments),i=e.slice(1);t.map(function(t,e){var n=[a,t].concat(i);acf.doAction.apply(null,n)})};acf.addAction(e,r),acf.addAction(i,o),n(t)},n=function(t){var e=t+"_field",i=t+"Field",n=function(n){var a=acf.arrayArgs(arguments),r=a.slice(1),s=["type","name","key"];s.map(function(t){var i="/"+t+"="+n.get(t);a=[e+i,n].concat(r),acf.doAction.apply(null,a)}),o.indexOf(t)>-1&&n.trigger(i,r)};acf.addAction(e,n)},a,r=["valid","invalid","enable","disable","new"],o=["remove","unmount","remount","sortstart","sortstop","show","hide","unload","valid","invalid","enable","disable"];["prepare","ready","load","append","remove","unmount","remount","sortstart","sortstop","show","hide","unload"].map(i),r.map(n);var s=new acf.Model({id:"fieldsEventManager",events:{'click .acf-field a[href="#"]':"onClick","change .acf-field":"onChange"},onClick:function(t){t.preventDefault()},onChange:function(){t("#_acf_changed").val(1)}})}(jQuery),function(t,e){var i=0,n=acf.Field.extend({type:"accordion",wait:"",$control:function(){return this.$(".acf-fields:first")},initialize:function(){if(!this.$el.is("td")){if(this.get("endpoint"))return this.remove();var e=this.$el,n=this.$labelWrap(),r=this.$inputWrap(),o=this.$control(),s=r.children(".description");if(s.length&&n.append(s),this.$el.is("tr")){var c=this.$el.closest("table"),l=t('<div class="acf-accordion-title"/>'),u=t('<div class="acf-accordion-content"/>'),d=t('<table class="'+c.attr("class")+'"/>'),f=t("<tbody/>");l.append(n.html()),d.append(f),u.append(d),r.append(l),r.append(u),n.remove(),o.remove(),r.attr("colspan",2),n=l,r=u,o=f}e.addClass("acf-accordion"),n.addClass("acf-accordion-title"),r.addClass("acf-accordion-content"),i++,this.get("multi_expand")&&e.attr("multi-expand",1);var h=acf.getPreference("this.accordions")||[];void 0!==h[i-1]&&this.set("open",h[i-1]),this.get("open")&&(e.addClass("-open"),r.css("display","block")),n.prepend(a.iconHtml({open:this.get("open")}));var p=e.parent();o.addClass(p.hasClass("-left")?"-left":""),o.addClass(p.hasClass("-clear")?"-clear":""),o.append(e.nextUntil(".acf-field-accordion",".acf-field")),o.removeAttr("data-open data-multi_expand data-endpoint")}}});acf.registerFieldType(n);var a=new acf.Model({actions:{unload:"onUnload"},events:{
2
+ "click .acf-accordion-title":"onClick","invalidField .acf-accordion":"onInvalidField"},isOpen:function(t){return t.hasClass("-open")},toggle:function(t){this.isOpen(t)?this.close(t):this.open(t)},iconHtml:function(t){var e;return'<i class="acf-accordion-icon dashicons dashicons-'+(t.open?"arrow-down":"arrow-right")+'"></i>'},open:function(e){e.find(".acf-accordion-content:first").slideDown().css("display","block"),e.find(".acf-accordion-icon:first").replaceWith(this.iconHtml({open:!0})),e.addClass("-open"),acf.doAction("show",e),e.attr("multi-expand")||e.siblings(".acf-accordion.-open").each(function(){a.close(t(this))})},close:function(t){t.find(".acf-accordion-content:first").slideUp(),t.find(".acf-accordion-icon:first").replaceWith(this.iconHtml({open:!1})),t.removeClass("-open"),acf.doAction("hide",t)},onClick:function(t,e){t.preventDefault(),this.toggle(e.parent())},onInvalidField:function(t,e){this.busy||(this.busy=!0,this.setTimeout(function(){this.busy=!1},1e3),this.open(e))},onUnload:function(e){var i=[];t(".acf-accordion").each(function(){var e=t(this).hasClass("-open")?1:0;i.push(e)}),i.length&&acf.setPreference("this.accordions",i)}})}(jQuery),function(t,e){var i=acf.Field.extend({type:"button_group",events:{'click input[type="radio"]':"onClick"},$control:function(){return this.$(".acf-button-group")},$input:function(){return this.$("input:checked")},setValue:function(t){this.$('input[value="'+t+'"]').prop("checked",!0).trigger("change")},onClick:function(t,e){var i=e.parent("label"),n=i.hasClass("selected");this.$(".selected").removeClass("selected"),i.addClass("selected"),this.get("allow_null")&&n&&(i.removeClass("selected"),e.prop("checked",!1).trigger("change"))}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"checkbox",events:{"change input":"onChange","click .acf-add-checkbox":"onClickAdd","click .acf-checkbox-toggle":"onClickToggle","click .acf-checkbox-custom":"onClickCustom"},$control:function(){return this.$(".acf-checkbox-list")},$toggle:function(){return this.$(".acf-checkbox-toggle")},$input:function(){return this.$('input[type="hidden"]')},$inputs:function(){return this.$('input[type="checkbox"]').not(".acf-checkbox-toggle")},getValue:function(){var e=[];return this.$(":checked").each(function(){e.push(t(this).val())}),!!e.length&&e},onChange:function(t,e){var i=e.prop("checked"),n=this.$toggle(),a;(i?e.parent().addClass("selected"):e.parent().removeClass("selected"),n.length)&&(0==this.$inputs().not(":checked").length?n.prop("checked",!0):n.prop("checked",!1))},onClickAdd:function(t,e){var i='<li><input class="acf-checkbox-custom" type="checkbox" checked="checked" /><input type="text" name="'+this.getInputName()+'[]" /></li>';e.parent("li").before(i)},onClickToggle:function(t,e){var i=e.prop("checked"),n;this.$inputs().prop("checked",i)},onClickCustom:function(t,e){var i=e.prop("checked"),n=e.next('input[type="text"]');i?n.prop("disabled",!1):(n.prop("disabled",!0),""==n.val()&&e.parent("li").remove())}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"color_picker",wait:"load",$control:function(){return this.$(".acf-color-picker")},$input:function(){return this.$('input[type="hidden"]')},$inputText:function(){return this.$('input[type="text"]')},setValue:function(t){acf.val(this.$input(),t),this.$inputText().iris("color",t)},initialize:function(){var t=this.$input(),e=this.$inputText(),i=function(i){setTimeout(function(){acf.val(t,e.val())},1)},n={defaultColor:!1,palettes:!0,hide:!0,change:i,clear:i},n=acf.applyFilters("color_picker_args",n,this);e.wpColorPicker(n)}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"date_picker",events:{'blur input[type="text"]':"onBlur"},$control:function(){return this.$(".acf-date-picker")},$input:function(){return this.$('input[type="hidden"]')},$inputText:function(){return this.$('input[type="text"]')},initialize:function(){if(this.has("save_format"))return this.initializeCompatibility();var t=this.$input(),e=this.$inputText(),i={dateFormat:this.get("date_format"),altField:t,altFormat:"yymmdd",changeYear:!0,yearRange:"-100:+100",changeMonth:!0,showButtonPanel:!0,firstDay:this.get("first_day")};i=acf.applyFilters("date_picker_args",i,this),acf.newDatePicker(e,i),acf.doAction("date_picker_init",e,i,this)},initializeCompatibility:function(){var t=this.$input(),e=this.$inputText();e.val(t.val());var i={dateFormat:this.get("date_format"),altField:t,altFormat:this.get("save_format"),changeYear:!0,yearRange:"-100:+100",changeMonth:!0,showButtonPanel:!0,firstDay:this.get("first_day")},n=(i=acf.applyFilters("date_picker_args",i,this)).dateFormat;i.dateFormat=this.get("save_format"),acf.newDatePicker(e,i),e.datepicker("option","dateFormat",n),acf.doAction("date_picker_init",e,i,this)},onBlur:function(){this.$inputText().val()||acf.val(this.$input(),"")}});acf.registerFieldType(i);var n=new acf.Model({priority:5,wait:"ready",initialize:function(){var e=acf.get("locale"),i=acf.get("rtl"),n=acf.get("datePickerL10n");return!!n&&(void 0!==t.datepicker&&(n.isRTL=i,t.datepicker.regional[e]=n,void t.datepicker.setDefaults(n)))}});acf.newDatePicker=function(e,i){if(void 0===t.datepicker)return!1;i=i||{},e.datepicker(i),t("body > #ui-datepicker-div").exists()&&t("body > #ui-datepicker-div").wrap('<div class="acf-ui-datepicker" />')}}(jQuery),function(t,e){var i=acf.models.DatePickerField.extend({type:"date_time_picker",$control:function(){return this.$(".acf-date-time-picker")},initialize:function(){var t=this.$input(),e=this.$inputText(),i={dateFormat:this.get("date_format"),timeFormat:this.get("time_format"),altField:t,altFieldTimeOnly:!1,altFormat:"yy-mm-dd",altTimeFormat:"HH:mm:ss",changeYear:!0,yearRange:"-100:+100",changeMonth:!0,showButtonPanel:!0,firstDay:this.get("first_day"),controlType:"select",oneLine:!0};i=acf.applyFilters("date_time_picker_args",i,this),acf.newDateTimePicker(e,i),acf.doAction("date_time_picker_init",e,i,this)}});acf.registerFieldType(i);var n=new acf.Model({priority:5,wait:"ready",initialize:function(){var e=acf.get("locale"),i=acf.get("rtl"),n=acf.get("dateTimePickerL10n");return!!n&&(void 0!==t.timepicker&&(n.isRTL=i,t.timepicker.regional[e]=n,void t.timepicker.setDefaults(n)))}});acf.newDateTimePicker=function(e,i){if(void 0===t.timepicker)return!1;i=i||{},e.datetimepicker(i),t("body > #ui-datepicker-div").exists()&&t("body > #ui-datepicker-div").wrap('<div class="acf-ui-datepicker" />')}}(jQuery),function(t,e){function i(e){if(r)return e();if(acf.isset(window,"google","maps","Geocoder"))return r=new google.maps.Geocoder,e();if(acf.addAction("google_map_api_loaded",e),!a){var i=acf.get("google_map_api");i&&(a=!0,t.ajax({url:i,dataType:"script",cache:!0,success:function(){r=new google.maps.Geocoder,acf.doAction("google_map_api_loaded")}}))}}var n=acf.Field.extend({type:"google_map",map:!1,wait:"load",events:{'click a[data-name="clear"]':"onClickClear",'click a[data-name="locate"]':"onClickLocate",'click a[data-name="search"]':"onClickSearch","keydown .search":"onKeydownSearch","keyup .search":"onKeyupSearch","focus .search":"onFocusSearch","blur .search":"onBlurSearch",showField:"onShow"},$control:function(){return this.$(".acf-google-map")},$input:function(t){return this.$('input[data-name="'+(t||"address")+'"]')},$search:function(){return this.$(".search")},$canvas:function(){return this.$(".canvas")},addClass:function(t){this.$control().addClass(t)},removeClass:function(t){this.$control().removeClass(t)},getValue:function(){var e={lat:"",lng:"",address:""};return this.$('input[type="hidden"]').each(function(){e[t(this).data("name")]=t(this).val()}),e.lat&&e.lng||(e=!1),e},setValue:function(t){for(var e in t=acf.parseArgs(t,{lat:"",lng:"",address:""}))acf.val(this.$input(e),t[e]);t.lat&&t.lng||(t=!1),this.renderVal(t);var i=this.newLatLng(t.lat,t.lng);acf.doAction("google_map_change",i,this.map,this)},renderVal:function(t){t?(this.addClass("-value"),this.setPosition(t.lat,t.lng),this.map.marker.setVisible(!0)):(this.removeClass("-value"),this.map.marker.setVisible(!1)),this.$search().val(t.address)},setPosition:function(t,e){var i=this.newLatLng(t,e);return this.map.marker.setPosition(i),this.map.marker.setVisible(!0),this.center(),this},center:function(){var t=this.map.marker.getPosition(),e=this.get("lat"),i=this.get("lng");t&&(e=t.lat(),i=t.lng());var n=this.newLatLng(e,i);this.map.setCenter(n)},getSearchVal:function(){return this.$search().val()},initialize:function(){i(this.initializeMap.bind(this))},newLatLng:function(t,e){return new google.maps.LatLng(parseFloat(t),parseFloat(e))},initializeMap:function(){var t=this.get("zoom"),e=this.get("lat"),i=this.get("lng"),n={scrollwheel:!1,zoom:parseInt(t),center:this.newLatLng(e,i),mapTypeId:google.maps.MapTypeId.ROADMAP,marker:{draggable:!0,raiseOnDrag:!0},autocomplete:{}};n=acf.applyFilters("google_map_args",n,this);var a=new google.maps.Map(this.$canvas()[0],n),r=acf.parseArgs(n.marker,{draggable:!0,raiseOnDrag:!0,map:a});r=acf.applyFilters("google_map_marker_args",r,this);var o=new google.maps.Marker(r),s=!1;if(acf.isset(google,"maps","places","Autocomplete")){var c=n.autocomplete||{};c=acf.applyFilters("google_map_autocomplete_args",c,this),(s=new google.maps.places.Autocomplete(this.$search()[0],c)).bindTo("bounds",a)}this.addMapEvents(this,a,o,s),a.acf=this,a.marker=o,a.autocomplete=s,this.map=a,acf.doAction("google_map_init",a,o,this);var l=this.getValue();this.renderVal(l)},addMapEvents:function(t,e,i,n){google.maps.event.addListener(e,"click",function(e){var i=e.latLng.lat(),n=e.latLng.lng();t.searchPosition(i,n)}),google.maps.event.addListener(i,"dragend",function(){var e=this.getPosition(),i=e.lat(),n=e.lng();t.searchPosition(i,n)}),n&&google.maps.event.addListener(n,"place_changed",function(){var e=this.getPlace();e.address=t.getSearchVal(),t.setPlace(e)})},searchPosition:function(e,i){var n=this.newLatLng(e,i),a=this.$control();this.setPosition(e,i),a.addClass("-loading");var o=t.proxy(function(t,n){a.removeClass("-loading");var r="";n!=google.maps.GeocoderStatus.OK?console.log("Geocoder failed due to: "+n):t[0]?r=t[0].formatted_address:console.log("No results found"),this.val({lat:e,lng:i,address:r})},this);r.geocode({latLng:n},o)},setPlace:function(t){if(!t)return this;if(t.name&&!t.geometry)return this.searchAddress(t.name),this;var e=t.geometry.location.lat(),i=t.geometry.location.lng(),n=t.address||t.formatted_address;return this.setValue({lat:e,lng:i,address:n}),this},searchAddress:function(e){var i=e.split(",");if(2==i.length){var n=i[0],a=i[1];if(t.isNumeric(n)&&t.isNumeric(a))return this.searchPosition(n,a)}var o=this.$control();o.addClass("-loading");var s=this.proxy(function(t,i){o.removeClass("-loading");var n="",a="";i!=google.maps.GeocoderStatus.OK?console.log("Geocoder failed due to: "+i):t[0]?(n=t[0].geometry.location.lat(),a=t[0].geometry.location.lng()):console.log("No results found"),this.val({lat:n,lng:a,address:e})});r.geocode({address:e},s)},searchLocation:function(){if(!navigator.geolocation)return alert(acf.__("Sorry, this browser does not support geolocation"));var e=this.$control();e.addClass("-loading");var i=t.proxy(function(t,i){e.removeClass("-loading");var n=t.coords.latitude,a=t.coords.longitude;this.searchPosition(n,a)},this),n=function(t){e.removeClass("-loading")};navigator.geolocation.getCurrentPosition(i,n)},onClickClear:function(t,e){this.val(!1)},onClickLocate:function(t,e){this.searchLocation()},onClickSearch:function(t,e){this.searchAddress(this.$search().val())},onFocusSearch:function(t,e){this.removeClass("-value"),this.onKeyupSearch.apply(this,arguments)},onBlurSearch:function(t,e){this.setTimeout(function(){this.removeClass("-search"),e.val()&&this.addClass("-value")},100)},onKeyupSearch:function(t,e){e.val()?this.addClass("-search"):this.removeClass("-search")},onKeydownSearch:function(t,e){13==t.which&&t.preventDefault()},onMousedown:function(){},onShow:function(){if(!this.map)return!1;this.setTimeout(this.center,10)}});acf.registerFieldType(n);var a=!1,r=!1}(jQuery),function(t,e){var i=acf.Field.extend({type:"image",$control:function(){return this.$(".acf-image-uploader")},$input:function(){return this.$('input[type="hidden"]')},events:{'click a[data-name="add"]':"onClickAdd",'click a[data-name="edit"]':"onClickEdit",'click a[data-name="remove"]':"onClickRemove",'change input[type="file"]':"onChange"},initialize:function(){"basic"===this.get("uploader")&&this.$el.closest("form").attr("enctype","multipart/form-data")},validateAttachment:function(t){void 0!==(t=t||{}).id&&(t=t.attributes),t=acf.parseArgs(t,{url:"",alt:"",title:"",caption:"",description:"",width:0,height:0});var e=acf.isget(t,"sizes",this.get("preview_size"),"url");return null!==e&&(t.url=e),t},render:function(t){t=this.validateAttachment(t),this.$("img").attr({src:t.url,alt:t.alt,title:t.title});var e=t.id||"";this.val(e),e?this.$control().addClass("has-value"):this.$control().removeClass("has-value")},append:function(t,e){var i=function(t,e){for(var i=acf.getFields({key:t.get("key"),parent:e.$el}),n=0;n<i.length;n++)if(!i[n].val())return i[n];return!1},n=i(this,e);n||(e.$(".acf-button:last").trigger("click"),n=i(this,e)),n&&n.render(t)},selectAttachment:function(){var e=this.parent(),i=e&&"repeater"===e.get("type"),n=acf.newMediaPopup({mode:"select",type:"image",title:acf.__("Select Image"),field:this.get("key"),multiple:i,library:this.get("library"),allowedTypes:this.get("mime_types"),select:t.proxy(function(t,i){i>0?this.append(t,e):this.render(t)},this)})},editAttachment:function(){var e=this.val();if(e)var i=acf.newMediaPopup({mode:"edit",title:acf.__("Edit Image"),button:acf.__("Update Image"),attachment:e,field:this.get("key"),select:t.proxy(function(t,e){this.render(t)},this)})},removeAttachment:function(){this.render(!1)},onClickAdd:function(t,e){this.selectAttachment()},onClickEdit:function(t,e){this.editAttachment()},onClickRemove:function(t,e){this.removeAttachment()},onChange:function(e,i){var n=this.$input();acf.getFileInputData(i,function(e){n.val(t.param(e))})}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.models.ImageField.extend({type:"file",$control:function(){return this.$(".acf-file-uploader")},$input:function(){return this.$('input[type="hidden"]')},validateAttachment:function(t){return void 0!==(t=t||{}).id&&(t=t.attributes),t=acf.parseArgs(t,{url:"",alt:"",title:"",filename:"",filesizeHumanReadable:"",icon:"/wp-includes/images/media/default.png"})},render:function(t){t=this.validateAttachment(t),this.$("img").attr({src:t.icon,alt:t.alt,title:t.title}),this.$('[data-name="title"]').text(t.title),this.$('[data-name="filename"]').text(t.filename).attr("href",t.url),this.$('[data-name="filesize"]').text(t.filesizeHumanReadable);var e=t.id||"";acf.val(this.$input(),e),e?this.$control().addClass("has-value"):this.$control().removeClass("has-value")},selectAttachment:function(){var e=this.parent(),i=e&&"repeater"===e.get("type"),n=acf.newMediaPopup({mode:"select",title:acf.__("Select File"),field:this.get("key"),multiple:i,library:this.get("library"),allowedTypes:this.get("mime_types"),select:t.proxy(function(t,i){i>0?this.append(t,e):this.render(t)},this)})},editAttachment:function(){var e=this.val();if(!e)return!1;var i=acf.newMediaPopup({mode:"edit",title:acf.__("Edit File"),button:acf.__("Update File"),attachment:e,field:this.get("key"),select:t.proxy(function(t,e){this.render(t)},this)})}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"link",events:{'click a[data-name="add"]':"onClickEdit",'click a[data-name="edit"]':"onClickEdit",'click a[data-name="remove"]':"onClickRemove","change .link-node":"onChange"},$control:function(){return this.$(".acf-link")},$node:function(){return this.$(".link-node")},getValue:function(){var t=this.$node();return!!t.attr("href")&&{title:t.html(),url:t.attr("href"),target:t.attr("target")}},setValue:function(t){t=acf.parseArgs(t,{title:"",url:"",target:""});var e=this.$control(),i=this.$node();e.removeClass("-value -external"),t.url&&e.addClass("-value"),"_blank"===t.target&&e.addClass("-external"),this.$(".link-title").html(t.title),this.$(".link-url").attr("href",t.url).html(t.url),i.html(t.title),i.attr("href",t.url),i.attr("target",t.target),this.$(".input-title").val(t.title),this.$(".input-target").val(t.target),this.$(".input-url").val(t.url).trigger("change")},onClickEdit:function(t,e){acf.wpLink.open(this.$node())},onClickRemove:function(t,e){this.setValue(!1)},onChange:function(t,e){var i=this.getValue();this.setValue(i)}});acf.registerFieldType(i),acf.wpLink=new acf.Model({getNodeValue:function(){var t=this.get("node");return{title:t.html(),url:t.attr("href"),target:t.attr("target")}},setNodeValue:function(t){var e=this.get("node");e.html(t.title),e.attr("href",t.url),e.attr("target",t.target),e.trigger("change")},getInputValue:function(){return{title:t("#wp-link-text").val(),url:t("#wp-link-url").val(),target:t("#wp-link-target").prop("checked")?"_blank":""}},setInputValue:function(e){t("#wp-link-text").val(e.title),t("#wp-link-url").val(e.url),t("#wp-link-target").prop("checked","_blank"===e.target)},open:function(e){this.on("wplink-open","onOpen"),this.on("wplink-close","onClose"),this.set("node",e);var i=t('<textarea id="acf-link-textarea" style="display:none;"></textarea>');t("body").append(i);var n=this.getNodeValue();wpLink.open("acf-link-textarea",n.url,n.title,null)},onOpen:function(){t("#wp-link-wrap").addClass("has-text-field");var e=this.getNodeValue();this.setInputValue(e)},close:function(){wpLink.close()},onClose:function(){if(!this.has("node"))return!1;this.off("wplink-open"),this.off("wplink-close");var e=this.getInputValue();this.setNodeValue(e),t("#acf-link-textarea").remove(),this.set("node",null)}})}(jQuery),function(t,e){var i=acf.Field.extend({type:"oembed",events:{'click [data-name="clear-button"]':"onClickClear","keypress .input-search":"onKeypressSearch","keyup .input-search":"onKeyupSearch","change .input-search":"onChangeSearch"},$control:function(){return this.$(".acf-oembed")},$input:function(){return this.$(".input-value")},$search:function(){return this.$(".input-search")},getValue:function(){return this.$input().val()},getSearchVal:function(){return this.$search().val()},setValue:function(t){t?this.$control().addClass("has-value"):this.$control().removeClass("has-value"),acf.val(this.$input(),t)},showLoading:function(t){acf.showLoading(this.$(".canvas"))},hideLoading:function(){acf.hideLoading(this.$(".canvas"))},maybeSearch:function(){var e=this.val(),i=this.getSearchVal();if(!i)return this.clear();if("http"!=i.substr(0,4)&&(i="http://"+i),i!==e){var n=this.get("timeout");n&&clearTimeout(n);var a=t.proxy(this.search,this,i);this.set("timeout",setTimeout(a,300))}},search:function(e){var i={action:"acf/fields/oembed/search",s:e,field_key:this.get("key")},n;(n=this.get("xhr"))&&n.abort(),this.showLoading();var n=t.ajax({url:acf.get("ajaxurl"),data:acf.prepareForAjax(i),type:"post",dataType:"json",context:this,success:function(t){t&&t.html||(t={url:!1,html:""}),this.val(t.url),this.$(".canvas-media").html(t.html)},complete:function(){this.hideLoading()}});this.set("xhr",n)},clear:function(){this.val(""),this.$search().val(""),this.$(".canvas-media").html("")},onClickClear:function(t,e){this.clear()},onKeypressSearch:function(t,e){13==t.which&&(t.preventDefault(),this.maybeSearch())},onKeyupSearch:function(t,e){e.val()&&this.maybeSearch()},onChangeSearch:function(t,e){this.maybeSearch()}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"radio",events:{'click input[type="radio"]':"onClick"},$control:function(){return this.$(".acf-radio-list")},$input:function(){return this.$("input:checked")},$inputText:function(){return this.$('input[type="text"]')},getValue:function(){var t=this.$input().val();return"other"===t&&this.get("other_choice")&&(t=this.$inputText().val()),t},onClick:function(t,e){var i=e.parent("label"),n=i.hasClass("selected"),a=e.val();this.$(".selected").removeClass("selected"),i.addClass("selected"),this.get("allow_null")&&n&&(i.removeClass("selected"),e.prop("checked",!1).trigger("change"),a=!1),this.get("other_choice")&&("other"===a?this.$inputText().prop("disabled",!1):this.$inputText().prop("disabled",!0))}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"range",events:{'input input[type="range"]':"onChange","change input":"onChange"},$input:function(){return this.$('input[type="range"]')},$inputAlt:function(){return this.$('input[type="number"]')},setValue:function(t){this.busy=!0,acf.val(this.$input(),t),acf.val(this.$inputAlt(),this.$input().val(),!0),this.busy=!1},onChange:function(t,e){this.busy||this.setValue(e.val())}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"relationship",events:{"keypress [data-filter]":"onKeypressFilter","change [data-filter]":"onChangeFilter","keyup [data-filter]":"onChangeFilter","click .choices-list .acf-rel-item":"onClickAdd",'click [data-name="remove_item"]':"onClickRemove",mouseover:"onHover"},$control:function(){return this.$(".acf-relationship")},$list:function(t){return this.$("."+t+"-list")},$listItems:function(t){return this.$list(t).find(".acf-rel-item")},$listItem:function(t,e){return this.$list(t).find('.acf-rel-item[data-id="'+e+'"]')},getValue:function(){var e=[];return this.$listItems("values").each(function(){e.push(t(this).data("id"))}),!!e.length&&e},newChoice:function(t){return["<li>",'<span data-id="'+t.id+'" class="acf-rel-item">'+t.text+"</span>","</li>"].join("")},newValue:function(t){return["<li>",'<input type="hidden" name="'+this.getInputName()+'[]" value="'+t.id+'" />','<span data-id="'+t.id+'" class="acf-rel-item">'+t.text,'<a href="#" class="acf-icon -minus small dark" data-name="remove_item"></a>',"</span>","</li>"].join("")},addSortable:function(t){this.$list("values").sortable({items:"li",forceHelperSize:!0,forcePlaceholderSize:!0,scroll:!0,update:function(){t.$input().trigger("change")}})},initialize:function(){var t=this.proxy(function(t){if(!this.get("loading")&&this.get("more")){var e=this.$list("choices"),i=Math.ceil(e.scrollTop()),n=Math.ceil(e[0].scrollHeight),a=Math.ceil(e.innerHeight()),r=this.get("paged")||1;i+a>=n&&(this.set("paged",r+1),this.fetch())}});this.$list("choices").scrollTop(0).on("scroll",t),this.fetch()},onHover:function(e){t().off(e),this.addSortable(this)},onKeypressFilter:function(t,e){13==t.which&&t.preventDefault()},onChangeFilter:function(t,e){var i=e.val(),n=e.data("filter");this.get(n)!==i&&(this.set(n,i),this.set("paged",1),e.is("select")?this.fetch():this.maybeFetch())},onClickAdd:function(t,e){var i=this.val(),n=parseInt(this.get("max"));if(e.hasClass("disabled"))return!1;if(n>0&&i&&i.length>=n)return this.showNotice({text:acf.__("Maximum values reached ( {max} values )").replace("{max}",n),type:"warning"}),!1;e.addClass("disabled");var a=this.newValue({id:e.data("id"),text:e.html()});this.$list("values").append(a),this.$input().trigger("change")},onClickRemove:function(t,e){t.preventDefault();var i=e.parent(),n=i.parent(),a=i.data("id");n.remove(),this.$listItem("choices",a).removeClass("disabled"),this.$input().trigger("change")},maybeFetch:function(){var t=this.get("timeout");t&&clearTimeout(t),t=this.setTimeout(this.fetch,300),this.set("timeout",t)},getAjaxData:function(){var t=this.$control().data();for(var e in t)t[e]=this.get(e);return t.action="acf/fields/relationship/query",t.field_key=this.get("key"),t=acf.applyFilters("relationship_ajax_data",t,this)},fetch:function(){var e;(e=this.get("xhr"))&&e.abort();var i=this.getAjaxData(),n=this.$list("choices");1==i.paged&&n.html("");var a=t('<li><i class="acf-loading"></i> '+acf.__("Loading")+"</li>");n.append(a),this.set("loading",!0);var r=function(){this.set("loading",!1),a.remove()},o=function(e){if(!e||!e.results||!e.results.length)return this.set("more",!1),void(1==this.get("paged")&&this.$list("choices").append("<li>"+acf.__("No matches found")+"</li>"));this.set("more",e.more);var i=this.walkChoices(e.results),a=t(i),r=this.val();r&&r.length&&r.map(function(t){a.find('.acf-rel-item[data-id="'+t+'"]').addClass("disabled")}),n.append(a);var o=!1,s=!1;n.find(".acf-rel-label").each(function(){var e=t(this),i=e.siblings("ul");if(o&&o.text()==e.text())return s.append(i.children()),void t(this).parent().remove();o=e,s=i})},e=t.ajax({url:acf.get("ajaxurl"),dataType:"json",type:"post",data:acf.prepareForAjax(i),context:this,success:o,complete:r});this.set("xhr",e)},walkChoices:function(e){var i=function(e){var n="";return t.isArray(e)?e.map(function(t){n+=i(t)}):t.isPlainObject(e)&&(void 0!==e.children?(n+='<li><span class="acf-rel-label">'+e.text+'</span><ul class="acf-bl">',n+=i(e.children),n+="</ul></li>"):n+='<li><span class="acf-rel-item" data-id="'+e.id+'">'+e.text+"</span></li>"),n};return i(e)}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"select",select2:!1,wait:"load",events:{removeField:"onRemove"},$input:function(){return this.$("select")},initialize:function(){var t=this.$input();if(this.inherit(t),this.get("ui")){var e=this.get("ajax_action");e||(e="acf/fields/"+this.get("type")+"/query"),this.select2=acf.newSelect2(t,{field:this,ajax:this.get("ajax"),multiple:this.get("multiple"),placeholder:this.get("placeholder"),allowNull:this.get("allow_null"),ajaxAction:e})}},onRemove:function(){this.select2&&this.select2.destroy()}});acf.registerFieldType(i)}(jQuery),function(t,e){var i="tab",n=acf.Field.extend({type:"tab",wait:"",tabs:!1,tab:!1,findFields:function(){return this.$el.nextUntil(".acf-field-tab",".acf-field")},getFields:function(){return acf.getFields(this.findFields())},findTabs:function(){return this.$el.prevAll(".acf-tab-wrap:first")},findTab:function(){return this.$(".acf-tab-button")},initialize:function(){if(this.$el.is("td"))return this.events={},!1;var t=this.findTabs(),e=this.findTab(),i=acf.parseArgs(e.data(),{endpoint:!1,placement:"",before:this.$el});!t.length||i.endpoint?this.tabs=new r(i):this.tabs=t.data("acf"),this.tab=this.tabs.addTab(e,this)},isActive:function(){return this.tab.isActive()},showFields:function(){this.getFields().map(function(t){t.show(this.cid,"tab"),t.hiddenByTab=!1},this)},hideFields:function(){this.getFields().map(function(t){t.hide(this.cid,"tab"),t.hiddenByTab=this.tab},this)},show:function(t){var e=acf.Field.prototype.show.apply(this,arguments);return e&&(this.tab.show(),this.tabs.refresh()),e},hide:function(t){var e=acf.Field.prototype.hide.apply(this,arguments);return e&&(this.tab.hide(),this.isActive()&&this.tabs.reset()),e},enable:function(t){this.getFields().map(function(t){t.enable("tab")})},disable:function(t){this.getFields().map(function(t){t.disable("tab")})}});acf.registerFieldType(n);var a=0,r=acf.Model.extend({tabs:[],active:!1,actions:{refresh:"onRefresh"},data:{before:!1,placement:"top",index:0,initialized:!1},setup:function(e){t.extend(this.data,e),this.tabs=[],this.active=!1;var i=this.get("placement"),n=this.get("before"),r=n.parent();"left"==i&&r.hasClass("acf-fields")&&r.addClass("-sidebar"),n.is("tr")?this.$el=t('<tr class="acf-tab-wrap"><td colspan="2"><ul class="acf-hl acf-tab-group"></ul></td></tr>'):this.$el=t('<div class="acf-tab-wrap -'+i+'"><ul class="acf-hl acf-tab-group"></ul></div>'),n.before(this.$el),this.set("index",a,!0),a++},initializeTabs:function(){var t=this.getVisible().shift(),e,i,n=(acf.getPreference("this.tabs")||[])[this.get("index")];this.tabs[n]&&this.tabs[n].isVisible()&&(t=this.tabs[n]),t?this.selectTab(t):this.closeTabs(),this.set("initialized",!0)},getVisible:function(){return this.tabs.filter(function(t){return t.isVisible()})},getActive:function(){return this.active},setActive:function(t){return this.active=t},hasActive:function(){return!1!==this.active},isActive:function(t){var e=this.getActive();return e&&e.cid===t.cid},closeActive:function(){this.hasActive()&&this.closeTab(this.getActive())},openTab:function(t){this.closeActive(),t.open(),this.setActive(t)},closeTab:function(t){t.close(),this.setActive(!1)},closeTabs:function(){this.tabs.map(this.closeTab,this)},selectTab:function(t){this.tabs.map(function(e){t.cid!==e.cid&&this.closeTab(e)},this),this.openTab(t)},addTab:function(e,i){var n=t("<li></li>");n.append(e),this.$("ul").append(n);var a=new o({$el:n,field:i,group:this});return this.tabs.push(a),a},reset:function(){return this.closeActive(),this.refresh()},refresh:function(){if(this.hasActive())return!1;var t=this.getVisible().shift();return t&&this.openTab(t),t},onRefresh:function(){if("left"===this.get("placement")){var t=this.$el.parent(),e=this.$el.children("ul"),i=t.is("td")?"height":"min-height",n=e.position().top+e.outerHeight(!0)-1;t.css(i,n)}}}),o=acf.Model.extend({group:!1,field:!1,events:{"click a":"onClick"},index:function(){return this.$el.index()},isVisible:function(){return acf.isVisible(this.$el)},isActive:function(){return this.$el.hasClass("active")},open:function(){this.$el.addClass("active"),this.field.showFields()},close:function(){this.$el.removeClass("active"),this.field.hideFields()},onClick:function(t,e){t.preventDefault(),this.toggle()},toggle:function(){this.isActive()||this.group.openTab(this)}}),s=new acf.Model({priority:50,actions:{prepare:"render",append:"render",unload:"onUnload",invalid_field:"onInvalidField"},findTabs:function(){return t(".acf-tab-wrap")},getTabs:function(){return acf.getInstances(this.findTabs())},render:function(t){this.getTabs().map(function(t){t.get("initialized")||t.initializeTabs()})},onInvalidField:function(t){this.busy||t.hiddenByTab&&(t.hiddenByTab.toggle(),this.busy=!0,this.setTimeout(function(){this.busy=!1},100))},onUnload:function(){var t=[];this.getTabs().map(function(e){var i=e.hasActive()?e.getActive().index():0;t.push(i)}),t.length&&acf.setPreference("this.tabs",t)}})}(jQuery),function(t,e){var i=acf.models.SelectField.extend({type:"post_object"});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.models.SelectField.extend({type:"page_link"});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.models.SelectField.extend({type:"user"});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"taxonomy",data:{ftype:"select"},select2:!1,wait:"load",events:{'click a[data-name="add"]':"onClickAdd",'click input[type="radio"]':"onClickRadio"},$control:function(){return this.$(".acf-taxonomy-field")},$input:function(){return this.getRelatedPrototype().$input.apply(this,arguments)},getRelatedType:function(){var t=this.get("ftype");return"multi_select"==t&&(t="select"),t},getRelatedPrototype:function(){return acf.getFieldType(this.getRelatedType()).prototype},getValue:function(){return this.getRelatedPrototype().getValue.apply(this,arguments)},setValue:function(){return this.getRelatedPrototype().setValue.apply(this,arguments)},initialize:function(){this.getRelatedPrototype().initialize.apply(this,arguments)},onRemove:function(){this.select2&&this.select2.destroy()},onClickAdd:function(e,i){var n=this,a=!1,r=!1,o=!1,s=!1,c=!1,l=!1,u=!1,d=function(){a=acf.newPopup({title:i.attr("title"),loading:!0,width:"300px"});var e={action:"acf/fields/taxonomy/add_term",field_key:n.get("key")};t.ajax({url:acf.get("ajaxurl"),data:acf.prepareForAjax(e),type:"post",dataType:"html",success:f})},f=function(t){a.loading(!1),a.content(t),r=a.$("form"),o=a.$('input[name="term_name"]'),s=a.$('select[name="term_parent"]'),c=a.$(".acf-submit-button"),o.focus(),a.on("submit","form",h)},h=function(e,i){if(e.preventDefault(),e.stopImmediatePropagation(),""===o.val())return o.focus(),!1;acf.startButtonLoading(c);var a={action:"acf/fields/taxonomy/add_term",field_key:n.get("key"),term_name:o.val(),term_parent:s.length?s.val():0};t.ajax({url:acf.get("ajaxurl"),data:acf.prepareForAjax(a),type:"post",dataType:"json",success:p})},p=function(t){acf.stopButtonLoading(c),u&&u.remove(),acf.isAjaxSuccess(t)?(o.val(""),g(t.data),
3
+ u=acf.newNotice({type:"success",text:acf.getAjaxMessage(t),target:r,timeout:2e3,dismiss:!1})):u=acf.newNotice({type:"error",text:acf.getAjaxError(t),target:r,timeout:2e3,dismiss:!1}),o.focus()},g=function(e){var i=t('<option value="'+e.term_id+'">'+e.term_label+"</option>"),a;e.term_parent?s.children('option[value="'+e.term_parent+'"]').after(i):s.append(i),acf.getFields({type:"taxonomy"}).map(function(t){t.get("taxonomy")==n.get("taxonomy")&&t.appendTerm(e)}),n.selectTerm(e.term_id)};d()},appendTerm:function(t){"select"==this.getRelatedType()?this.appendTermSelect(t):this.appendTermCheckbox(t)},appendTermSelect:function(t){this.select2.addOption({id:t.term_id,text:t.term_label})},appendTermCheckbox:function(e){var i=this.$("[name]:first").attr("name"),n=this.$("ul:first");"checkbox"==this.getRelatedType()&&(i+="[]");var a=t(['<li data-id="'+e.term_id+'">',"<label>",'<input type="'+this.get("ftype")+'" value="'+e.term_id+'" name="'+i+'" /> ',"<span>"+e.term_name+"</span>","</label>","</li>"].join(""));if(e.term_parent){var r=n.find('li[data-id="'+e.term_parent+'"]');(n=r.children("ul")).exists()||(n=t('<ul class="children acf-bl"></ul>'),r.append(n))}n.append(a)},selectTerm:function(t){var e;"select"==this.getRelatedType()?this.select2.selectOption(t):this.$('input[value="'+t+'"]').prop("checked",!0).trigger("change")},onClickRadio:function(t,e){var i=e.parent("label"),n=i.hasClass("selected");this.$(".selected").removeClass("selected"),i.addClass("selected"),this.get("allow_null")&&n&&(i.removeClass("selected"),e.prop("checked",!1).trigger("change"))}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.models.DatePickerField.extend({type:"time_picker",$control:function(){return this.$(".acf-time-picker")},initialize:function(){var t=this.$input(),e=this.$inputText(),i={timeFormat:this.get("time_format"),altField:t,altFieldTimeOnly:!1,altTimeFormat:"HH:mm:ss",showButtonPanel:!0,controlType:"select",oneLine:!0,closeText:acf.get("dateTimePickerL10n").selectText,timeOnly:!0,onClose:function(t,e,i){var n=e.dpDiv.find(".ui-datepicker-close");!t&&n.is(":hover")&&i._updateDateTime()}};i=acf.applyFilters("time_picker_args",i,this),acf.newTimePicker(e,i),acf.doAction("time_picker_init",e,i,this)}});acf.registerFieldType(i),acf.newTimePicker=function(e,i){if(void 0===t.timepicker)return!1;i=i||{},e.timepicker(i),t("body > #ui-datepicker-div").exists()&&t("body > #ui-datepicker-div").wrap('<div class="acf-ui-datepicker" />')}}(jQuery),function(t,e){var i=acf.Field.extend({type:"true_false",events:{"change .acf-switch-input":"onChange","focus .acf-switch-input":"onFocus","blur .acf-switch-input":"onBlur","keypress .acf-switch-input":"onKeypress"},$input:function(){return this.$('input[type="checkbox"]')},$switch:function(){return this.$(".acf-switch")},getValue:function(){return this.$input().prop("checked")?1:0},initialize:function(){this.render()},render:function(){var t=this.$switch();if(t.length){var e=t.children(".acf-switch-on"),i=t.children(".acf-switch-off"),n=Math.max(e.width(),i.width());n&&(e.css("min-width",n),i.css("min-width",n))}},switchOn:function(){this.$input().prop("checked",!0),this.$switch().addClass("-on")},switchOff:function(){this.$input().prop("checked",!1),this.$switch().removeClass("-on")},onChange:function(t,e){e.prop("checked")?this.switchOn():this.switchOff()},onFocus:function(t,e){this.$switch().addClass("-focus")},onBlur:function(t,e){this.$switch().removeClass("-focus")},onKeypress:function(t,e){return 37===t.keyCode?this.switchOff():39===t.keyCode?this.switchOn():void 0}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"url",events:{'keyup input[type="url"]':"onkeyup"},$control:function(){return this.$(".acf-input-wrap")},$input:function(){return this.$('input[type="url"]')},initialize:function(){this.render()},isValid:function(){var t=this.val();return!!t&&(-1!==t.indexOf("://")||0===t.indexOf("//"))},render:function(){this.isValid()?this.$control().addClass("-valid"):this.$control().removeClass("-valid")},onkeyup:function(t,e){this.render()}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=acf.Field.extend({type:"wysiwyg",wait:"load",events:{"mousedown .acf-editor-wrap.delay":"onMousedown",unmountField:"disableEditor",remountField:"enableEditor",removeField:"disableEditor"},$control:function(){return this.$(".acf-editor-wrap")},$input:function(){return this.$("textarea")},getMode:function(){return this.$control().hasClass("tmce-active")?"visual":"text"},initialize:function(){this.$control().hasClass("delay")||this.initializeEditor()},initializeEditor:function(){var t=this.$control(),e=this.$input(),i={tinymce:!0,quicktags:!0,toolbar:this.get("toolbar"),mode:this.getMode(),field:this},n=e.attr("id"),a=acf.uniqueId("acf-editor-"),r=e.data();acf.rename({target:t,search:n,replace:a,destructive:!0}),this.set("id",a,!0),acf.tinymce.initialize(a,i),this.$input().data(r)},onMousedown:function(t){t.preventDefault();var e=this.$control();e.removeClass("delay"),e.find(".acf-editor-toolbar").remove(),this.initializeEditor()},enableEditor:function(){"visual"==this.getMode()&&acf.tinymce.enable(this.get("id"))},disableEditor:function(){acf.tinymce.destroy(this.get("id"))}});acf.registerFieldType(i)}(jQuery),function(t,e){var i=[];acf.Condition=acf.Model.extend({type:"",operator:"==",label:"",choiceType:"input",fieldTypes:[],data:{conditions:!1,field:!1,rule:{}},events:{change:"change",keyup:"change",enableField:"change",disableField:"change"},setup:function(e){t.extend(this.data,e)},getEventTarget:function(t,e){return t||this.get("field").$el},change:function(t,e){this.get("conditions").change(t)},match:function(t,e){return!1},calculate:function(){return this.match(this.get("rule"),this.get("field"))},choices:function(t){return'<input type="text" />'}}),acf.newCondition=function(t,e){var i=e.get("field"),n=i.getField(t.field);if(!i||!n)return!1;var a={rule:t,target:i,conditions:e,field:n},r=n.get("type"),o=t.operator,s,c,l;return new(acf.getConditionTypes({fieldType:r,operator:o})[0]||acf.Condition)(a)};var n=function(t){return acf.strPascalCase(t||"")+"Condition"};acf.registerConditionType=function(t){var e,a=t.prototype.type,r=n(a);acf.models[r]=t,i.push(a)},acf.getConditionType=function(t){var e=n(t);return acf.models[e]||!1},acf.registerConditionForFieldType=function(t,e){var i=acf.getConditionType(t);i&&i.prototype.fieldTypes.push(e)},acf.getConditionTypes=function(t){t=acf.parseArgs(t,{fieldType:"",operator:""});var e=[];return i.map(function(i){var n=acf.getConditionType(i),a=n.prototype.fieldTypes,r=n.prototype.operator;t.fieldType&&-1===a.indexOf(t.fieldType)||t.operator&&r!==t.operator||e.push(n)}),e}}(jQuery),function(t,e){var i="conditional_logic",n=new acf.Model({id:"conditionsManager",priority:20,actions:{new_field:"onNewField"},onNewField:function(t){t.has("conditions")&&t.getConditions().render()}}),a=function(t,e){var i=acf.getFields({key:e,sibling:t.$el,suppressFilters:!0});return i.length||(i=acf.getFields({key:e,parent:t.$el.parent(),suppressFilters:!0})),!!i.length&&i[0]};acf.Field.prototype.getField=function(t){var e=a(this,t);if(e)return e;for(var i=this.parents(),n=0;n<i.length;n++)if(e=a(i[n],t))return e;return!1},acf.Field.prototype.getConditions=function(){return this.conditions||(this.conditions=new o(this)),this.conditions};var r=!1,o=acf.Model.extend({id:"Conditions",data:{field:!1,timeStamp:!1,groups:[]},setup:function(t){this.data.field=t;var e=t.get("conditions");e instanceof Array?e[0]instanceof Array?e.map(function(t,e){this.addRules(t,e)},this):this.addRules(e):this.addRule(e)},change:function(t){if(this.get("timeStamp")===t.timeStamp)return!1;this.set("timeStamp",t.timeStamp,!0);var e=this.render()},render:function(){return this.calculate()?this.show():this.hide()},show:function(){return this.get("field").showEnable(this.cid,i)},hide:function(){return this.get("field").hideDisable(this.cid,i)},calculate:function(){var t=!1;return this.getGroups().map(function(e){var i;t||e.filter(function(t){return t.calculate()}).length==e.length&&(t=!0)}),t},hasGroups:function(){return null!=this.data.groups},getGroups:function(){return this.data.groups},addGroup:function(){var t=[];return this.data.groups.push(t),t},hasGroup:function(t){return null!=this.data.groups[t]},getGroup:function(t){return this.data.groups[t]},removeGroup:function(t){return this.data.groups[t].delete,this},addRules:function(t,e){t.map(function(t){this.addRule(t,e)},this)},addRule:function(t,e){var i;e=e||0,i=this.hasGroup(e)?this.getGroup(e):this.addGroup();var n=acf.newCondition(t,this);if(!n)return!1;i.push(n)},hasRule:function(){},getRule:function(t,e){return t=t||0,e=e||0,this.data.groups[e][t]},removeRule:function(){}})}(jQuery),function(t,e){var i=acf.__,n=function(t){return t?""+t:""},a=function(t,e){return n(t).toLowerCase()===n(e).toLowerCase()},r=function(t,e){return parseFloat(t)===parseFloat(e)},o=function(t,e){return parseFloat(t)>parseFloat(e)},s=function(t,e){return parseFloat(t)<parseFloat(e)},c=function(t,e){return(e=e.map(function(t){return n(t)})).indexOf(t)>-1},l=function(t,e){return n(t).indexOf(n(e))>-1},u=function(t,e){var i=new RegExp(n(e),"gi");return n(t).match(i)},d=acf.Condition.extend({type:"hasValue",operator:"!=empty",label:i("Has any value"),fieldTypes:["text","textarea","number","range","email","url","password","image","file","wysiwyg","oembed","select","checkbox","radio","button_group","link","post_object","page_link","relationship","taxonomy","user","google_map","date_picker","date_time_picker","time_picker","color_picker"],match:function(t,e){return!!e.val()},choices:function(t){return'<input type="text" disabled="" />'}});acf.registerConditionType(d);var f=d.extend({type:"hasNoValue",operator:"==empty",label:i("Has no value"),match:function(t,e){return!d.prototype.match.apply(this,arguments)}});acf.registerConditionType(f);var h=acf.Condition.extend({type:"equalTo",operator:"==",label:i("Value is equal to"),fieldTypes:["text","textarea","number","range","email","url","password"],match:function(e,i){return t.isNumeric(e.value)?r(e.value,i.val()):a(e.value,i.val())},choices:function(t){return'<input type="text" />'}});acf.registerConditionType(h);var p=h.extend({type:"notEqualTo",operator:"!=",label:i("Value is not equal to"),match:function(t,e){return!h.prototype.match.apply(this,arguments)}});acf.registerConditionType(p);var g=acf.Condition.extend({type:"patternMatch",operator:"==pattern",label:i("Value matches pattern"),fieldTypes:["text","textarea","email","url","password","wysiwyg"],match:function(t,e){return u(e.val(),t.value)},choices:function(t){return'<input type="text" placeholder="[a-z0-9]" />'}});acf.registerConditionType(g);var m=acf.Condition.extend({type:"contains",operator:"==contains",label:i("Value contains"),fieldTypes:["text","textarea","number","email","url","password","wysiwyg","oembed","select"],match:function(t,e){return l(e.val(),t.value)},choices:function(t){return'<input type="text" />'}});acf.registerConditionType(m);var v=h.extend({type:"trueFalseEqualTo",choiceType:"select",fieldTypes:["true_false"],choices:function(t){return[{id:1,text:i("Checked")}]}});acf.registerConditionType(v);var y=p.extend({type:"trueFalseNotEqualTo",choiceType:"select",fieldTypes:["true_false"],choices:function(t){return[{id:1,text:i("Checked")}]}});acf.registerConditionType(y);var b=acf.Condition.extend({type:"selectEqualTo",operator:"==",label:i("Value is equal to"),fieldTypes:["select","checkbox","radio","button_group"],match:function(t,e){var i=e.val();return i instanceof Array?c(t.value,i):a(t.value,i)},choices:function(e){var n=[],a=e.$setting("choices textarea").val().split("\n");return e.$input("allow_null").prop("checked")&&n.push({id:"",text:i("Null")}),a.map(function(e){(e=e.split(":"))[1]=e[1]||e[0],n.push({id:t.trim(e[0]),text:t.trim(e[1])})}),n}});acf.registerConditionType(b);var w=b.extend({type:"selectNotEqualTo",operator:"!=",label:i("Value is not equal to"),match:function(t,e){return!b.prototype.match.apply(this,arguments)}});acf.registerConditionType(w);var x=acf.Condition.extend({type:"greaterThan",operator:">",label:i("Value is greater than"),fieldTypes:["number","range"],match:function(t,e){var i=e.val();return i instanceof Array&&(i=i.length),o(i,t.value)},choices:function(t){return'<input type="number" />'}});acf.registerConditionType(x);var _=x.extend({type:"lessThan",operator:"<",label:i("Value is less than"),match:function(t,e){var i=e.val();return i instanceof Array&&(i=i.length),s(i,t.value)},choices:function(t){return'<input type="number" />'}});acf.registerConditionType(_);var $=x.extend({type:"selectionGreaterThan",label:i("Selection is greater than"),fieldTypes:["checkbox","select","post_object","page_link","relationship","taxonomy","user"]});acf.registerConditionType($);var k=_.extend({type:"selectionLessThan",label:i("Selection is less than"),fieldTypes:["checkbox","select","post_object","page_link","relationship","taxonomy","user"]});acf.registerConditionType(k)}(jQuery),function(t,e){acf.newMediaPopup=function(t){var e=null,t=acf.parseArgs(t,{mode:"select",title:"",button:"",type:"",field:!1,allowedTypes:"",library:"all",multiple:!1,attachment:0,autoOpen:!0,open:function(){},select:function(){},close:function(){}});return e="edit"==t.mode?new acf.models.EditMediaPopup(t):new acf.models.SelectMediaPopup(t),t.autoOpen&&setTimeout(function(){e.open()},1),acf.doAction("new_media_popup",e),e};var i=function(){var e=acf.get("post_id");return t.isNumeric(e)?e:0};acf.getMimeTypes=function(){return this.get("mimeTypes")},acf.getMimeType=function(t){var e=acf.getMimeTypes();if(void 0!==e[t])return e[t];for(var i in e)if(-1!==i.indexOf(t))return e[i];return!1};var n=acf.Model.extend({id:"MediaPopup",data:{},defaults:{},frame:!1,setup:function(e){t.extend(this.data,e)},initialize:function(){var t=this.getFrameOptions();this.addFrameStates(t);var e=wp.media(t);e.acf=this,this.addFrameEvents(e,t),this.frame=e},open:function(){this.frame.open()},close:function(){this.frame.close()},remove:function(){this.frame.detach(),this.frame.remove()},getFrameOptions:function(){var t={title:this.get("title"),multiple:this.get("multiple"),library:{},states:[]};return this.get("type")&&(t.library.type=this.get("type")),"uploadedTo"===this.get("library")&&(t.library.uploadedTo=i()),this.get("attachment")&&(t.library.post__in=[this.get("attachment")]),this.get("button")&&(t.button={text:this.get("button")}),t},addFrameStates:function(t){var e=wp.media.query(t.library);this.get("field")&&acf.isset(e,"mirroring","args")&&(e.mirroring.args._acfuploader=this.get("field")),t.states.push(new wp.media.controller.Library({library:e,multiple:this.get("multiple"),title:this.get("title"),priority:20,filterable:"all",editable:!0,allowLocalEdits:!0})),acf.isset(wp,"media","controller","EditImage")&&t.states.push(new wp.media.controller.EditImage)},addFrameEvents:function(t,e){t.on("open",function(){this.$el.closest(".media-modal").addClass("acf-media-modal -"+this.acf.get("mode"))},t),t.on("content:render:edit-image",function(){var t=this.state().get("image"),e=new wp.media.view.EditImage({model:t,controller:this}).render();this.content.set(e),e.loadEditor()},t),t.on("select",function(){var e=t.state().get("selection");e&&e.each(function(e,i){t.acf.get("select").apply(t.acf,[e,i])})}),t.on("close",function(){setTimeout(function(){t.acf.get("close").apply(t.acf),t.acf.remove()},1)})}});acf.models.SelectMediaPopup=n.extend({id:"SelectMediaPopup",setup:function(t){t.button||(t.button=acf._x("Select","verb")),n.prototype.setup.apply(this,arguments)},addFrameEvents:function(t,e){acf.isset(_wpPluploadSettings,"defaults","multipart_params")&&(_wpPluploadSettings.defaults.multipart_params._acfuploader=this.get("field"),t.on("open",function(){delete _wpPluploadSettings.defaults.multipart_params._acfuploader})),t.on("content:activate:browse",function(){var e=!1;try{e=t.content.get().toolbar}catch(t){return void console.log(t)}t.acf.customizeFilters.apply(t.acf,[e])}),n.prototype.addFrameEvents.apply(this,arguments)},customizeFilters:function(e){var i=e.get("filters"),n;("image"==this.get("type")&&(i.filters.all.text=acf.__("All images"),delete i.filters.audio,delete i.filters.video,delete i.filters.image,t.each(i.filters,function(t,e){e.props.type=e.props.type||"image"})),this.get("allowedTypes"))&&this.get("allowedTypes").split(" ").join("").split(".").join("").split(",").map(function(t){var e=acf.getMimeType(t);if(e){var n={text:e,props:{status:null,type:e,uploadedTo:null,orderby:"date",order:"DESC"},priority:20};i.filters[e]=n}});if("uploadedTo"===this.get("library")){var a=this.frame.options.library.uploadedTo;delete i.filters.unattached,delete i.filters.uploaded,t.each(i.filters,function(t,e){e.text+=" ("+acf.__("Uploaded to this post")+")",e.props.uploadedTo=a})}var r=this.get("field"),o;t.each(i.filters,function(t,e){e.props._acfuploader=r}),e.get("search").model.attributes._acfuploader=r,i.renderFilters&&i.renderFilters()}}),acf.models.EditMediaPopup=n.extend({id:"SelectMediaPopup",setup:function(t){t.button||(t.button=acf._x("Update","verb")),n.prototype.setup.apply(this,arguments)},addFrameEvents:function(t,e){t.on("open",function(){this.$el.closest(".media-modal").addClass("acf-expanded"),"browse"!=this.content.mode()&&this.content.mode("browse");var e,i=this.state().get("selection"),n=wp.media.attachment(t.acf.get("attachment"));i.add(n)},t),n.prototype.addFrameEvents.apply(this,arguments)}});var a=new acf.Model({id:"customizePrototypes",wait:"ready",initialize:function(){if(acf.isset(window,"wp","media","view")){var t=i();t&&acf.isset(wp,"media","view","settings","post")&&(wp.media.view.settings.post.id=t),this.customizeAttachmentsButton(),this.customizeAttachmentsRouter(),this.customizeAttachmentFilters(),this.customizeAttachmentCompat(),this.customizeAttachmentLibrary()}},customizeAttachmentsButton:function(){if(acf.isset(wp,"media","view","Button")){var t=wp.media.view.Button;wp.media.view.Button=t.extend({initialize:function(){var t=_.defaults(this.options,this.defaults);this.model=new Backbone.Model(t),this.listenTo(this.model,"change",this.render)}})}},customizeAttachmentsRouter:function(){if(acf.isset(wp,"media","view","Router")){var e=wp.media.view.Router;wp.media.view.Router=e.extend({addExpand:function(){var e=t(['<a href="#" class="acf-expand-details">','<span class="is-closed"><span class="acf-icon -left small grey"></span>'+acf.__("Expand Details")+"</span>",'<span class="is-open"><span class="acf-icon -right small grey"></span>'+acf.__("Collapse Details")+"</span>","</a>"].join(""));e.on("click",function(e){e.preventDefault();var i=t(this).closest(".media-modal");i.hasClass("acf-expanded")?i.removeClass("acf-expanded"):i.addClass("acf-expanded")}),this.$el.append(e)},initialize:function(){return e.prototype.initialize.apply(this,arguments),this.addExpand(),this}})}},customizeAttachmentFilters:function(){var e;acf.isset(wp,"media","view","AttachmentFilters","All")&&(wp.media.view.AttachmentFilters.All.prototype.renderFilters=function(){this.$el.html(_.chain(this.filters).map(function(e,i){return{el:t("<option></option>").val(i).html(e.text)[0],priority:e.priority||50}},this).sortBy("priority").pluck("el").value())})},customizeAttachmentCompat:function(){if(acf.isset(wp,"media","view","AttachmentCompat")){var e=wp.media.view.AttachmentCompat,i=!1;wp.media.view.AttachmentCompat=e.extend({render:function(){return this.rendered?this:(e.prototype.render.apply(this,arguments),this.$("#acf-form-data").length?(clearTimeout(i),i=setTimeout(t.proxy(function(){this.rendered=!0,acf.doAction("append",this.$el)},this),50),this):this)},save:function(t){var e={};t&&t.preventDefault(),e=acf.serializeForAjax(this.$el),this.controller.trigger("attachment:compat:waiting",["waiting"]),this.model.saveCompat(e).always(_.bind(this.postSave,this))}})}},customizeAttachmentLibrary:function(){if(acf.isset(wp,"media","view","Attachment","Library")){var t=wp.media.view.Attachment.Library;wp.media.view.Attachment.Library=t.extend({render:function(){var e=acf.isget(this,"controller","acf"),i=acf.isget(this,"model","attributes");if(e&&i){i.acf_errors&&this.$el.addClass("acf-disabled");var n=e.get("selected");n&&n.indexOf(i.id)>-1&&this.$el.addClass("acf-selected")}return t.prototype.render.apply(this,arguments)},toggleSelection:function(e){var i=this.collection,n=this.options.selection,a=this.model,r=n.single(),o=this.controller,s=acf.isget(this,"model","attributes","acf_errors"),c=o.$el.find(".media-frame-content .media-sidebar");if(c.children(".acf-selection-error").remove(),c.children().removeClass("acf-hidden"),o&&s){var l=acf.isget(this,"model","attributes","filename");return c.children().addClass("acf-hidden"),c.prepend(['<div class="acf-selection-error">','<span class="selection-error-label">'+acf.__("Restricted")+"</span>",'<span class="selection-error-filename">'+l+"</span>",'<span class="selection-error-message">'+s+"</span>","</div>"].join("")),n.reset(),void n.single(a)}return t.prototype.toggleSelection.apply(this,arguments)}})}}})}(jQuery),function(t,e){acf.screen=new acf.Model({active:!0,xhr:!1,timeout:!1,wait:"load",events:{"change #page_template":"onChange","change #parent_id":"onChange","change #post-formats-select":"onChange","change .categorychecklist":"onChange","change .tagsdiv":"onChange",'change .acf-taxonomy-field[data-save="1"]':"onChange","change #product-type":"onChange"},isPost:function(){return"post"===acf.get("screen")},isUser:function(){return"user"===acf.get("screen")},isTaxonomy:function(){return"taxonomy"===acf.get("screen")},isAttachment:function(){return"attachment"===acf.get("screen")},isNavMenu:function(){return"nav_menu"===acf.get("screen")},isWidget:function(){return"widget"===acf.get("screen")},isComment:function(){return"comment"===acf.get("screen")},getPageTemplate:function(){var e=t("#page_template");return e.length?e.val():null},getPageParent:function(e,i){var i;return(i=t("#parent_id")).length?i.val():null},getPageType:function(t,e){return this.getPageParent()?"child":"parent"},getPostType:function(){return t("#post_type").val()},getPostFormat:function(e,i){var i;if((i=t("#post-formats-select input:checked")).length){var n=i.val();return"0"==n?"standard":n}return null},getPostCoreTerms:function(){var e={},i=acf.serialize(t(".categorydiv, .tagsdiv"));for(var n in i.tax_input&&(e=i.tax_input),i.post_category&&(e.category=i.post_category),e)acf.isArray(e[n])||(e[n]=e[n].split(/,[\s]?/));return e},getPostTerms:function(){var t=this.getPostCoreTerms();for(var e in acf.getFields({type:"taxonomy"}).map(function(e){if(e.get("save")){var i=e.val(),n=e.get("taxonomy");i&&(t[n]=t[n]||[],i=acf.isArray(i)?i:[i],t[n]=t[n].concat(i))}}),null!==(productType=this.getProductType())&&(t.product_type=[productType]),t)t[e]=acf.uniqueArray(t[e]);return t},getProductType:function(){var e=t("#product-type");return e.length?e.val():null},check:function(){if("post"===acf.get("screen")){this.xhr&&this.xhr.abort();var e=acf.parseArgs(this.data,{action:"acf/ajax/check_screen",screen:acf.get("screen"),exists:[]});this.isPost()&&(e.post_id=acf.get("post_id")),null!==(postType=this.getPostType())&&(e.post_type=postType),null!==(pageTemplate=this.getPageTemplate())&&(e.page_template=pageTemplate),null!==(pageParent=this.getPageParent())&&(e.page_parent=pageParent),null!==(pageType=this.getPageType())&&(e.page_type=pageType),null!==(postFormat=this.getPostFormat())&&(e.post_format=postFormat),null!==(postTerms=this.getPostTerms())&&(e.post_terms=postTerms),acf.getPostboxes().map(function(t){e.exists.push(t.get("key"))}),e=acf.applyFilters("check_screen_args",e);var i=function(t){acf.isAjaxSuccess(t)&&("post"==acf.get("screen")?this.renderPostScreen(t.data):"user"==acf.get("screen")&&this.renderUserScreen(t.data)),acf.doAction("check_screen_complete",t.data,e)};this.xhr=t.ajax({url:acf.get("ajaxurl"),data:acf.prepareForAjax(e),type:"post",dataType:"json",context:this,success:i})}},onChange:function(t,e){this.setTimeout(this.check,1)},renderPostScreen:function(e){var i=[],n=function(e,i){var n=t._data(e[0]).events;for(var a in n)for(var r=0;r<n[a].length;r++)i.on(a,n[a][r].handler)},a=function(e,i){var n=i.indexOf(e);if(-1==n)return!1;for(var a=n-1;a>=0;a--)if(t("#"+i[a]).length)return t("#"+i[a]).after(t("#"+e));for(var a=n+1;a<i.length;a++)if(t("#"+i[a]).length)return t("#"+i[a]).before(t("#"+e));return!1};e.results.map(function(r,o){var s=acf.getPostbox(r.id);if(!s){var c=t(['<div id="'+r.id+'" class="postbox">','<button type="button" class="handlediv" aria-expanded="false">','<span class="screen-reader-text">Toggle panel: '+r.title+"</span>",'<span class="toggle-indicator" aria-hidden="true"></span>',"</button>",'<h2 class="hndle ui-sortable-handle">',"<span>"+r.title+"</span>","</h2>",'<div class="inside">',r.html,"</div>","</div>"].join(""));if(t("#adv-settings").length){var l=t("#adv-settings .metabox-prefs"),u=t(['<label for="'+r.id+'-hide">','<input class="hide-postbox-tog" name="'+r.id+'-hide" type="checkbox" id="'+r.id+'-hide" value="'+r.id+'" checked="checked">'," "+r.title,"</label>"].join(""));n(l.find("input").first(),u.find("input")),l.append(u)}"side"===r.position?t("#"+r.position+"-sortables").append(c):t("#"+r.position+"-sortables").prepend(c);var d=[];if(e.results.map(function(e){r.position===e.position&&t("#"+r.position+"-sortables #"+e.id).length&&d.push(e.id)}),a(r.id,d),e.sorted)for(var f in e.sorted){var d=e.sorted[f].split(",");if(a(r.id,d))break}var h=t("#submitdiv");t("#submitdiv").length&&(n(h.children(".handlediv"),c.children(".handlediv")),n(h.children(".hndle"),c.children(".hndle"))),s=acf.newPostbox(r),acf.doAction("append",c),acf.doAction("append_postbox",s)}s.showEnable(),acf.doAction("show_postbox",s),i.push(r.id)}),acf.getPostboxes().map(function(t){-1===i.indexOf(t.get("id"))&&(t.hideDisable(),acf.doAction("hide_postbox",t))}),t("#acf-style").html(e.style)},renderUserScreen:function(t){}});var i=new acf.Model({wait:"load",initialize:function(){acf.isGutenberg()&&(wp.data.subscribe(this.proxy(this.onChange)),acf.screen.getPageTemplate=this.getPageTemplate,acf.screen.getPageParent=this.getPageParent,acf.screen.getPostType=this.getPostType,acf.screen.getPostFormat=this.getPostFormat,acf.screen.getPostCoreTerms=this.getPostCoreTerms,acf.unload.disable())},onChange:function(){var t=wp.data.select("core/editor").getPostEdits(),e=["template","parent","format"],i;(wp.data.select("core").getTaxonomies()||[]).map(function(t){e.push(t.rest_base)}),(e=e.filter(this.proxy(function(e){return void 0!==t[e]&&t[e]!==this.get(e)}))).length&&this.triggerChange(t)},triggerChange:function(t){void 0!==t&&(this.data=t),acf.screen.check()},getPageTemplate:function(){return wp.data.select("core/editor").getEditedPostAttribute("template")},getPageParent:function(t,e){return wp.data.select("core/editor").getEditedPostAttribute("parent")},getPostType:function(){return wp.data.select("core/editor").getEditedPostAttribute("type")},getPostFormat:function(t,e){return wp.data.select("core/editor").getEditedPostAttribute("format")},getPostCoreTerms:function(){var t={},e;return(wp.data.select("core").getTaxonomies()||[]).map(function(e){var i=wp.data.select("core/editor").getEditedPostAttribute(e.rest_base);i&&(t[e.slug]=i)}),t}});acf.screen.refreshAvailableMetaBoxesPerLocation=function(){var t=wp.data.select("core/edit-post"),e=wp.data.dispatch("core/edit-post"),i={};t.getActiveMetaBoxLocations().map(function(e){i[e]=t.getMetaBoxesPerLocation(e)});var n=[];for(var a in i)n=n.concat(i[a].map(function(t){return t.id}));acf.getPostboxes().map(function(t){if(-1===n.indexOf(t.get("id"))){var e=t.$el.closest("form").attr("class").replace("metabox-location-","");i[e]=i[e]||[],i[e].push({id:t.get("id"),title:t.get("title")})}}),e.setAvailableMetaBoxesPerLocation(i)}}(jQuery),function(t,e){function i(){return acf.isset(window,"jQuery","fn","select2","amd")?4:!!acf.isset(window,"Select2")&&3}acf.newSelect2=function(t,e){if(e=acf.parseArgs(e,{allowNull:!1,placeholder:"",multiple:!1,field:!1,ajax:!1,ajaxAction:"",ajaxData:function(t){return t},ajaxResults:function(t){return t}}),4==i())var n=new a(t,e);else var n=new r(t,e);return acf.doAction("new_select2",n),n};var n=acf.Model.extend({setup:function(e,i){t.extend(this.data,i),this.$el=e},initialize:function(){},selectOption:function(t){var e=this.getOption(t);e.prop("selected")||e.prop("selected",!0).trigger("change")},unselectOption:function(t){var e=this.getOption(t);e.prop("selected")&&e.prop("selected",!1).trigger("change")},getOption:function(t){return this.$('option[value="'+t+'"]')},addOption:function(e){e=acf.parseArgs(e,{id:"",text:"",selected:!1});var i=this.getOption(e.id);return i.length||((i=t("<option></option>")).html(e.text),i.attr("value",e.id),i.prop("selected",e.selected),this.$el.append(i)),i},getValue:function(){var e=[],i=this.$el.find("option:selected");return i.exists()?((i=i.sort(function(t,e){return+t.getAttribute("data-i")-+e.getAttribute("data-i")})).each(function(){var i=t(this);e.push({$el:i,id:i.attr("value"),text:i.text()})}),e):e},mergeOptions:function(){},getChoices:function(){var e=function(i){var n=[];return i.children().each(function(){var i=t(this);i.is("optgroup")?n.push({text:i.attr("label"),children:e(i)}):n.push({id:i.attr("value"),text:i.text()})}),n};return e(this.$el)},decodeChoices:function(t){var e=function(t){return t.map(function(t){return t.text=acf.decode(t.text),t.children&&(t.children=e(t.children)),t}),t};return e(t)},getAjaxData:function(t){var e={action:this.get("ajaxAction"),s:t.term||"",paged:t.page||1},i=this.get("field");i&&(e.field_key=i.get("key"));var n=this.get("ajaxData");return n&&(e=n.apply(this,[e,t])),e=acf.applyFilters("select2_ajax_data",e,this.data,this.$el,i||!1,this),acf.prepareForAjax(e)},getAjaxResults:function(t,e){(t=acf.parseArgs(t,{results:!1,more:!1})).results&&(t.results=this.decodeChoices(t.results));var i=this.get("ajaxResults");return i&&(t=i.apply(this,[t,e])),t=acf.applyFilters("select2_ajax_results",t,e,this)},processAjaxResults:function(e,i){var e;return(e=this.getAjaxResults(e,i)).more&&(e.pagination={more:!0}),setTimeout(t.proxy(this.mergeOptions,this),1),e},destroy:function(){this.$el.data("select2")&&this.$el.select2("destroy"),this.$el.siblings(".select2-container").remove()}}),a=n.extend({initialize:function(){var e=this.$el,i={width:"100%",allowClear:this.get("allowNull"),placeholder:this.get("placeholder"),multiple:this.get("multiple"),data:[],escapeMarkup:function(t){return t}};i.multiple&&this.getValue().map(function(t){t.$el.detach().appendTo(e)}),e.removeData("ajax"),e.removeAttr("data-ajax"),this.get("ajax")&&(i.ajax={url:acf.get("ajaxurl"),delay:250,dataType:"json",type:"post",cache:!1,data:t.proxy(this.getAjaxData,this),processResults:t.proxy(this.processAjaxResults,this)});var n=this.get("field");i=acf.applyFilters("select2_args",i,e,this.data,n||!1,this),e.select2(i);var a=e.next(".select2-container");if(i.multiple){var r=a.find("ul");r.sortable({stop:function(i){r.find(".select2-selection__choice").each(function(){var i;t(t(this).data("data").element).detach().appendTo(e)}),e.trigger("change")}}),e.on("select2:select",this.proxy(function(t){this.getOption(t.params.data.id).detach().appendTo(this.$el)}))}a.addClass("-acf"),acf.doAction("select2_init",e,i,this.data,n||!1,this)},mergeOptions:function(){var e=!1,i=!1;t('.select2-results__option[role="group"]').each(function(){var n=t(this).children("ul"),a=t(this).children("strong");if(i&&i.text()===a.text())return e.append(n.children()),void t(this).remove();e=n,i=a})}}),r=n.extend({initialize:function(){var e=this.$el,i=this.getValue(),n=this.get("multiple"),a={width:"100%",allowClear:this.get("allowNull"),placeholder:this.get("placeholder"),separator:"||",multiple:this.get("multiple"),data:this.getChoices(),escapeMarkup:function(t){return t},dropdownCss:{"z-index":"999999999"},
4
+ initSelection:function(t,e){e(n?i:i.shift())}},r=e.siblings("input");r.length||(r=t('<input type="hidden" />'),e.before(r)),inputValue=i.map(function(t){return t.id}).join("||"),r.val(inputValue),a.multiple&&i.map(function(t){t.$el.detach().appendTo(e)}),a.allowClear&&(a.data=a.data.filter(function(t){return""!==t.id})),e.removeData("ajax"),e.removeAttr("data-ajax"),this.get("ajax")&&(a.ajax={url:acf.get("ajaxurl"),quietMillis:250,dataType:"json",type:"post",cache:!1,data:t.proxy(this.getAjaxData,this),results:t.proxy(this.processAjaxResults,this)});var o=this.get("field");a=acf.applyFilters("select2_args",a,e,this.data,o||!1,this),r.select2(a);var s=r.select2("container"),c=t.proxy(this.getOption,this);if(a.multiple){var l=s.find("ul");l.sortable({stop:function(){l.find(".select2-search-choice").each(function(){var i=t(this).data("select2Data"),n;c(i.id).detach().appendTo(e)}),e.trigger("change")}})}r.on("select2-selecting",function(i){var n=i.choice,a=c(n.id);a.length||(a=t('<option value="'+n.id+'">'+n.text+"</option>")),a.detach().appendTo(e)}),s.addClass("-acf"),acf.doAction("select2_init",e,a,this.data,o||!1,this),r.on("change",function(){var t=r.val();t.indexOf("||")&&(t=t.split("||")),e.val(t).trigger("change")}),e.hide()},mergeOptions:function(){var e=!1,i=!1;t("#select2-drop .select2-result-with-children").each(function(){var n=t(this).children("ul"),a=t(this).children(".select2-result-label");if(i&&i.text()===a.text())return i.append(n.children()),void t(this).remove();e=n,i=a})},getAjaxData:function(t,e){var i={term:t,page:e};return n.prototype.getAjaxData.apply(this,[i])}}),o=new acf.Model({priority:5,wait:"prepare",initialize:function(){var t=acf.get("locale"),e=acf.get("rtl"),n=acf.get("select2L10n"),a=i();return!!n&&(0!==t.indexOf("en")&&void(4==a?this.addTranslations4():3==a&&this.addTranslations3()))},addTranslations4:function(){var t=acf.get("select2L10n"),e=acf.get("locale");e=e.replace("_","-");var i={errorLoading:function(){return t.load_fail},inputTooLong:function(e){var i=e.input.length-e.maximum;return i>1?t.input_too_long_n.replace("%d",i):t.input_too_long_1},inputTooShort:function(e){var i=e.minimum-e.input.length;return i>1?t.input_too_short_n.replace("%d",i):t.input_too_short_1},loadingMore:function(){return t.load_more},maximumSelected:function(e){var i=e.maximum;return i>1?t.selection_too_long_n.replace("%d",i):t.selection_too_long_1},noResults:function(){return t.matches_0},searching:function(){return t.searching}};jQuery.fn.select2.amd.define("select2/i18n/"+e,[],function(){return i})},addTranslations3:function(){var e=acf.get("select2L10n"),i=acf.get("locale");i=i.replace("_","-");var n={formatMatches:function(t){return t>1?e.matches_n.replace("%d",t):e.matches_1},formatNoMatches:function(){return e.matches_0},formatAjaxError:function(){return e.load_fail},formatInputTooShort:function(t,i){var n=i-t.length;return n>1?e.input_too_short_n.replace("%d",n):e.input_too_short_1},formatInputTooLong:function(t,i){var n=t.length-i;return n>1?e.input_too_long_n.replace("%d",n):e.input_too_long_1},formatSelectionTooBig:function(t){return t>1?e.selection_too_long_n.replace("%d",t):e.selection_too_long_1},formatLoadMore:function(){return e.load_more},formatSearching:function(){return e.searching}};t.fn.select2.locales=t.fn.select2.locales||{},t.fn.select2.locales[i]=n,t.extend(t.fn.select2.defaults,n)}})}(jQuery),function(t,e){acf.tinymce={defaults:function(){return"undefined"!=typeof tinyMCEPreInit&&{tinymce:tinyMCEPreInit.mceInit.acf_content,quicktags:tinyMCEPreInit.qtInit.acf_content};var t},initialize:function(t,e){(e=acf.parseArgs(e,{tinymce:!0,quicktags:!0,toolbar:"full",mode:"visual",field:!1})).tinymce&&this.initializeTinymce(t,e),e.quicktags&&this.initializeQuicktags(t,e)},initializeTinymce:function(e,i){var n=t("#"+e),a=this.defaults(),r=acf.get("toolbars"),o=i.field||!1,s=o.$el||!1;if("undefined"==typeof tinymce)return!1;if(!a)return!1;if(tinymce.get(e))return this.enable(e);var c=t.extend({},a.tinymce,i.tinymce);c.id=e,c.selector="#"+e;var l=i.toolbar;if(l&&r&&r[l])for(var u=1;u<=4;u++)c["toolbar"+u]=r[l][u]||"";if(c.setup=function(t){t.on("change",function(e){t.save(),n.trigger("change")}),t.on("mouseup",function(t){var e=new MouseEvent("mouseup");window.dispatchEvent(e)})},c.wp_autoresize_on=!1,c.tadv_noautop||(c.wpautop=!0),c=acf.applyFilters("wysiwyg_tinymce_settings",c,e,o),tinyMCEPreInit.mceInit[e]=c,"visual"==i.mode){var d=tinymce.init(c),f=tinymce.get(e);if(!f)return!1;f.acf=i.field,acf.doAction("wysiwyg_tinymce_init",f,f.id,c,o)}},initializeQuicktags:function(e,i){var n=this.defaults();if("undefined"==typeof quicktags)return!1;if(!n)return!1;var a=t.extend({},n.quicktags,i.quicktags);a.id=e;var r=i.field||!1,o=r.$el||!1;a=acf.applyFilters("wysiwyg_quicktags_settings",a,a.id,r),tinyMCEPreInit.qtInit[e]=a;var s=quicktags(a);if(!s)return!1;this.buildQuicktags(s),acf.doAction("wysiwyg_quicktags_init",s,s.id,a,r)},buildQuicktags:function(t){var e,i,n,a,r,t,o,s,c,l,u=",strong,em,link,block,del,ins,img,ul,ol,li,code,more,close,";for(s in e=t.canvas,i=t.name,n=t.settings,r="",a={},c="",l=t.id,n.buttons&&(c=","+n.buttons+","),edButtons)edButtons[s]&&(o=edButtons[s].id,c&&-1!==u.indexOf(","+o+",")&&-1===c.indexOf(","+o+",")||edButtons[s].instance&&edButtons[s].instance!==l||(a[o]=edButtons[s],edButtons[s].html&&(r+=edButtons[s].html(i+"_"))));c&&-1!==c.indexOf(",dfw,")&&(a.dfw=new QTags.DFWButton,r+=a.dfw.html(i+"_")),"rtl"===document.getElementsByTagName("html")[0].dir&&(a.textdirection=new QTags.TextDirectionButton,r+=a.textdirection.html(i+"_")),t.toolbar.innerHTML=r,t.theButtons=a,"undefined"!=typeof jQuery&&jQuery(document).triggerHandler("quicktags-init",[t])},disable:function(t){this.destroyTinymce(t)},remove:function(t){this.destroyTinymce(t)},destroy:function(t){this.destroyTinymce(t)},destroyTinymce:function(t){if("undefined"==typeof tinymce)return!1;var e=tinymce.get(t);return!!e&&(e.save(),e.destroy(),!0)},enable:function(t){this.enableTinymce(t)},enableTinymce:function(t){return"undefined"!=typeof switchEditors&&(void 0!==tinyMCEPreInit.mceInit[t]&&(switchEditors.go(t,"tmce"),!0))}};var i=new acf.Model({priority:5,actions:{prepare:"onPrepare",ready:"onReady"},onPrepare:function(){var e=t("#acf-hidden-wp-editor");e.exists()&&e.appendTo("body")},onReady:function(){acf.isset(window,"wp","oldEditor")&&(wp.editor.autop=wp.oldEditor.autop,wp.editor.removep=wp.oldEditor.removep),acf.isset(window,"tinymce","on")&&tinymce.on("AddEditor",function(t){var e=t.editor;"acf"===e.id.substr(0,3)&&(e=tinymce.editors.content||e,tinymce.activeEditor=e,wpActiveEditor=e.id)})}})}(jQuery),function(t,e){var i=acf.Model.extend({id:"Validator",data:{errors:[],notice:null,status:""},events:{"changed:status":"onChangeStatus"},addErrors:function(t){t.map(this.addError,this)},addError:function(t){this.data.errors.push(t)},hasErrors:function(){return this.data.errors.length},clearErrors:function(){return this.data.errors=[]},getErrors:function(){return this.data.errors},getFieldErrors:function(){var t=[],e=[];return this.getErrors().map(function(i){if(i.input){var n=e.indexOf(i.input);n>-1?t[n]=i:(t.push(i),e.push(i.input))}}),t},getGlobalErrors:function(){return this.getErrors().filter(function(t){return!t.input})},showErrors:function(){if(this.hasErrors()){var e=this.getFieldErrors(),i=this.getGlobalErrors(),n=0,a=!1;e.map(function(t){var e=this.$('[name="'+t.input+'"]').first();if(e.length||(e=this.$('[name^="'+t.input+'"]').first()),e.length){n++;var i=acf.getClosestField(e);i.showError(t.message),a||(a=i.$el)}},this);var r=acf.__("Validation failed");if(i.map(function(t){r+=". "+t.message}),1==n?r+=". "+acf.__("1 field requires attention"):n>1&&(r+=". "+acf.__("%d fields require attention").replace("%d",n)),this.has("notice"))this.get("notice").update({type:"error",text:r});else{var o=acf.newNotice({type:"error",text:r,target:this.$el});this.set("notice",o)}a||(a=this.get("notice").$el),setTimeout(function(){t("html, body").animate({scrollTop:a.offset().top-t(window).height()/2},500)},10)}},onChangeStatus:function(t,e,i,n){this.$el.removeClass("is-"+n).addClass("is-"+i)},validate:function(e){if(e=acf.parseArgs(e,{event:!1,reset:!1,loading:function(){},complete:function(){},failure:function(){},success:function(t){t.submit()}}),"valid"==this.get("status"))return!0;if("validating"==this.get("status"))return!1;if(!this.$(".acf-field").length)return!0;if(e.event){var i=t.Event(null,e.event);e.success=function(){acf.enableSubmit(t(i.target)).trigger(i)}}acf.doAction("validation_begin",this.$el),acf.lockForm(this.$el),e.loading(this.$el,this),this.set("status","validating");var n=function(t){if(acf.isAjaxSuccess(t)){var e=acf.applyFilters("validation_complete",t.data,this.$el,this);e.valid||this.addErrors(e.errors)}},a=function(){acf.unlockForm(this.$el),this.hasErrors()?(this.set("status","invalid"),acf.doAction("validation_failure",this.$el,this),this.showErrors(),e.failure(this.$el,this)):(this.set("status","valid"),this.has("notice")&&this.get("notice").update({type:"success",text:acf.__("Validation successful"),timeout:1e3}),acf.doAction("validation_success",this.$el,this),acf.doAction("submit",this.$el),e.success(this.$el,this),acf.lockForm(this.$el),e.reset&&this.reset()),e.complete(this.$el,this),this.clearErrors()},r=acf.serialize(this.$el);return r.action="acf/validate_save_post",t.ajax({url:acf.get("ajaxurl"),data:acf.prepareForAjax(r),type:"post",dataType:"json",context:this,success:n,complete:a}),!1},setup:function(t){this.$el=t},reset:function(){this.set("errors",[]),this.set("notice",null),this.set("status",""),acf.unlockForm(this.$el)}}),n=function(t){var e=t.data("acf");return e||(e=new i(t)),e};acf.validateForm=function(t){return n(t.form).validate(t)},acf.enableSubmit=function(t){return t.removeClass("disabled")},acf.disableSubmit=function(t){return t.addClass("disabled")},acf.showSpinner=function(t){return t.addClass("is-active"),t.css("display","inline-block"),t},acf.hideSpinner=function(t){return t.removeClass("is-active"),t.css("display","none"),t},acf.lockForm=function(t){var e=a(t),i=e.find('.button, [type="submit"]'),n=e.find(".spinner, .acf-spinner");return acf.hideSpinner(n),acf.disableSubmit(i),acf.showSpinner(n.last()),t},acf.unlockForm=function(t){var e=a(t),i=e.find('.button, [type="submit"]'),n=e.find(".spinner, .acf-spinner");return acf.enableSubmit(i),acf.hideSpinner(n),t};var a=function(t){var e,e,e,e;return(e=t.find("#submitdiv")).length?e:(e=t.find("#submitpost")).length?e:(e=t.find("p.submit").last()).length?e:(e=t.find(".acf-form-submit")).length?e:t};acf.validation=new acf.Model({id:"validation",active:!0,wait:"prepare",actions:{ready:"addInputEvents",append:"addInputEvents"},events:{'click input[type="submit"]':"onClickSubmit",'click button[type="submit"]':"onClickSubmit","click #save-post":"onClickSave","submit form#post":"onSubmitPost","submit form":"onSubmit"},initialize:function(){acf.get("validation")||(this.active=!1,this.actions={},this.events={})},enable:function(){this.active=!0},disable:function(){this.active=!1},reset:function(t){n(t).reset()},addInputEvents:function(e){var i=t(".acf-field [name]",e);i.length&&this.on(i,"invalid","onInvalid")},onInvalid:function(t,e){t.preventDefault();var i=e.closest("form");i.length&&(n(i).addError({input:e.attr("name"),message:t.target.validationMessage}),i.submit())},onClickSubmit:function(t,e){this.set("originalEvent",t)},onClickSave:function(t,e){this.set("ignore",!0)},onClickSubmitGutenberg:function(e,i){var n;acf.validateForm({form:t("#editor"),event:e,reset:!0,failure:function(t,e){var i=e.get("notice").$el;i.appendTo(".components-notice-list"),i.find(".acf-notice-dismiss").removeClass("small")}})||(e.preventDefault(),e.stopImmediatePropagation())},onSubmitPost:function(e,i){"dopreview"===t("input#wp-preview").val()&&(this.set("ignore",!0),acf.unlockForm(i))},onSubmit:function(t,e){if(!this.active||this.get("ignore")||t.isDefaultPrevented())return this.allowSubmit();var i;acf.validateForm({form:e,event:this.get("originalEvent")})||t.preventDefault()},allowSubmit:function(){return this.set("ignore",!1),this.set("originalEvent",!1),!0}})}(jQuery),function(t,e){var i=new acf.Model({priority:90,timeout:0,actions:{new_field:"refresh",show_field:"refresh",hide_field:"refresh",remove_field:"refresh"},refresh:function(){clearTimeout(this.timeout),this.timeout=setTimeout(function(){acf.doAction("refresh")},0)}}),n=new acf.Model({priority:1,actions:{sortstart:"onSortstart",sortstop:"onSortstop"},onSortstart:function(t){acf.doAction("unmount",t)},onSortstop:function(t){acf.doAction("remount",t)}}),a=new acf.Model({actions:{sortstart:"onSortstart"},onSortstart:function(e,i){e.is("tr")&&(i.html('<td style="padding:0;" colspan="'+i.children().length+'"></td>'),e.addClass("acf-sortable-tr-helper"),e.children().each(function(){t(this).width(t(this).width())}),i.height(e.height()+"px"),e.removeClass("acf-sortable-tr-helper"))}}),r=new acf.Model({actions:{after_duplicate:"onAfterDuplicate"},onAfterDuplicate:function(e,i){var n=[];e.find("select").each(function(e){n.push(t(this).val())}),i.find("select").each(function(e){t(this).val(n[e])})}}),o=new acf.Model({id:"tableHelper",priority:20,actions:{refresh:"renderTables"},renderTables:function(e){var i=this;t(".acf-table:visible").each(function(){i.renderTable(t(this))})},renderTable:function(e){var i=e.find("> thead > tr:visible > th[data-key]"),n=e.find("> tbody > tr:visible > td[data-key]");if(!i.length||!n.length)return!1;i.each(function(e){var i=t(this),a=i.data("key"),r=n.filter('[data-key="'+a+'"]'),o=r.filter(".acf-hidden");r.removeClass("acf-empty"),r.length===o.length?acf.hide(i):(acf.show(i),o.addClass("acf-empty"))}),i.css("width","auto"),i=i.not(".acf-hidden");var a=100,r=i.length,o;i.filter("[data-width]").each(function(){var e=t(this).data("width");t(this).css("width",e+"%"),a-=e});var s=i.not("[data-width]");if(s.length){var c=a/s.length;s.css("width",c+"%"),a=0}a>0&&i.last().css("width","auto"),n.filter(".-collapsed-target").each(function(){var e=t(this);e.parent().hasClass("-collapsed")?e.attr("colspan",i.length):e.removeAttr("colspan")})}}),s=new acf.Model({id:"fieldsHelper",priority:30,actions:{refresh:"renderGroups"},renderGroups:function(){var e=this;t(".acf-fields:visible").each(function(){e.renderGroup(t(this))})},renderGroup:function(e){var i=0,n=0,a=t(),r=e.children(".acf-field[data-width]:visible");return!!r.length&&(e.hasClass("-left")?(r.removeAttr("data-width"),r.css("width","auto"),!1):(r.removeClass("-r0 -c0").css({"min-height":0}),r.each(function(e){var r=t(this),o=r.position(),s=Math.ceil(o.top),c=Math.ceil(o.left);a.length&&s>i&&(a.css({"min-height":n+"px"}),o=r.position(),s=Math.ceil(o.top),c=Math.ceil(o.left),i=0,n=0,a=t()),acf.get("rtl")&&(c=Math.ceil(r.parent().width()-(o.left+r.outerWidth()))),0==s?r.addClass("-r0"):0==c&&r.addClass("-c0");var l=Math.ceil(r.outerHeight())+1;n=Math.max(n,l),i=Math.max(i,s),a=a.add(r)}),void(a.length&&a.css({"min-height":n+"px"}))))}})}(jQuery),function(t,e){acf.newCompatibility=function(t,e){return(e=e||{}).__proto__=t.__proto__,t.__proto__=e,t.compatibility=e,e},acf.getCompatibility=function(t){return t.compatibility||null};var i=acf.newCompatibility(acf,{l10n:{},o:{},fields:{},update:acf.set,add_action:acf.addAction,remove_action:acf.removeAction,do_action:acf.doAction,add_filter:acf.addFilter,remove_filter:acf.removeFilter,apply_filters:acf.applyFilters,parse_args:acf.parseArgs,disable_el:acf.disable,disable_form:acf.disable,enable_el:acf.enable,enable_form:acf.enable,update_user_setting:acf.updateUserSetting,prepare_for_ajax:acf.prepareForAjax,is_ajax_success:acf.isAjaxSuccess,remove_el:acf.remove,remove_tr:acf.remove,str_replace:acf.strReplace,render_select:acf.renderSelect,get_uniqid:acf.uniqid,serialize_form:acf.serialize,esc_html:acf.strEscape,str_sanitize:acf.strSanitize});i._e=function(t,e){t=t||"";var i=(e=e||"")?t+"."+e:t,n={"image.select":"Select Image","image.edit":"Edit Image","image.update":"Update Image"};if(n[i])return acf.__(n[i]);var a=this.l10n[t]||"";return e&&(a=a[e]||""),a},i.get_selector=function(e){var i=".acf-field";if(!e)return i;if(t.isPlainObject(e)){if(t.isEmptyObject(e))return i;for(var n in e){e=e[n];break}}return i+="-"+e,i=acf.strReplace("_","-",i),i=acf.strReplace("field-field-","field-",i)},i.get_fields=function(t,e,i){var n={is:t||"",parent:e||!1,suppressFilters:i||!1};return n.is&&(n.is=this.get_selector(n.is)),acf.findFields(n)},i.get_field=function(t,e){var i=this.get_fields.apply(this,arguments);return!!i.length&&i.first()},i.get_closest_field=function(t,e){return t.closest(this.get_selector(e))},i.get_field_wrap=function(t){return t.closest(this.get_selector())},i.get_field_key=function(t){return t.data("key")},i.get_field_type=function(t){return t.data("type")},i.get_data=function(t,e){return acf.parseArgs(t.data(),e)},i.maybe_get=function(t,e,i){void 0===i&&(i=null),keys=String(e).split(".");for(var n=0;n<keys.length;n++){if(!t.hasOwnProperty(keys[n]))return i;t=t[keys[n]]}return t};var n=function(t){return t instanceof acf.Field?t.$el:t},a=function(t){return acf.arrayArgs(t).map(n)},r=function(e){return function(){if(arguments.length)var i=a(arguments);else var i=[t(document)];return e.apply(this,i)}};i.add_action=function(t,e,n,a){var o=t.split(" "),s=o.length;if(s>1){for(var c=0;c<s;c++)t=o[c],i.add_action.apply(this,arguments);return this}var e=r(e);return acf.addAction.apply(this,arguments)},i.add_filter=function(t,e,i,n){var e=r(e);return acf.addFilter.apply(this,arguments)},i.model={actions:{},filters:{},events:{},extend:function(e){var i=t.extend({},this,e);return t.each(i.actions,function(t,e){i._add_action(t,e)}),t.each(i.filters,function(t,e){i._add_filter(t,e)}),t.each(i.events,function(t,e){i._add_event(t,e)}),i},_add_action:function(t,e){var i=this,n=t.split(" "),t=n[0]||"",a=n[1]||10;acf.add_action(t,this[e],a,this)},_add_filter:function(t,e){var i=this,n=t.split(" "),t=n[0]||"",a=n[1]||10;acf.add_filter(t,this[e],a,this)},_add_event:function(e,i){var n=this,a=e.indexOf(" "),r=a>0?e.substr(0,a):e,o=a>0?e.substr(a+1):"",s=function(e){e.$el=t(this),acf.field_group&&(e.$field=e.$el.closest(".acf-field-object")),"function"==typeof n.event&&(e=n.event(e)),n[i].apply(n,arguments)};o?t(document).on(r,o,s):t(document).on(r,s)},get:function(t,e){return e=e||null,void 0!==this[t]&&(e=this[t]),e},set:function(t,e){return this[t]=e,"function"==typeof this["_set_"+t]&&this["_set_"+t].apply(this),this}},i.field=acf.model.extend({type:"",o:{},$field:null,_add_action:function(t,e){var i=this;t=t+"_field/type="+i.type,acf.add_action(t,function(t){i.set("$field",t),i[e].apply(i,arguments)})},_add_filter:function(t,e){var i=this;t=t+"_field/type="+i.type,acf.add_filter(t,function(t){i.set("$field",t),i[e].apply(i,arguments)})},_add_event:function(e,i){var n=this,a=e.substr(0,e.indexOf(" ")),r=e.substr(e.indexOf(" ")+1),o=acf.get_selector(n.type);t(document).on(a,o+" "+r,function(e){var a=t(this),r=acf.get_closest_field(a,n.type);r.length&&(r.is(n.$field)||n.set("$field",r),e.$el=a,e.$field=r,n[i].apply(n,[e]))})},_set_$field:function(){"function"==typeof this.focus&&this.focus()},doFocus:function(t){return this.set("$field",t)}});var o=acf.newCompatibility(acf.validation,{remove_error:function(t){acf.getField(t).removeError()},add_warning:function(t,e){acf.getField(t).showNotice({text:e,type:"warning",timeout:1e3})},fetch:acf.validateForm,enableSubmit:acf.enableSubmit,disableSubmit:acf.disableSubmit,showSpinner:acf.showSpinner,hideSpinner:acf.hideSpinner,unlockForm:acf.unlockForm,lockForm:acf.lockForm});i.tooltip={tooltip:function(t,e){var i;return acf.newTooltip({text:t,target:e}).$el},temp:function(t,e){var i=acf.newTooltip({text:t,target:e,timeout:250})},confirm:function(t,e,i,n,a){var r=acf.newTooltip({confirm:!0,text:i,target:t,confirm:function(){e(!0)},cancel:function(){e(!1)}})},confirm_remove:function(t,e){var i=acf.newTooltip({confirmRemove:!0,target:t,confirm:function(){e(!0)},cancel:function(){e(!1)}})}},i.media=new acf.Model({activeFrame:!1,actions:{new_media_popup:"onNewMediaPopup"},frame:function(){return this.activeFrame},onNewMediaPopup:function(t){this.activeFrame=t.frame},popup:function(t){var e;return t.mime_types&&(t.allowedTypes=t.mime_types),t.id&&(t.attachment=t.id),acf.newMediaPopup(t).frame}}),i.select2={init:function(t,e,i){return e.allow_null&&(e.allowNull=e.allow_null),e.ajax_action&&(e.ajaxAction=e.ajax_action),i&&(e.field=acf.getField(i)),acf.newSelect2(t,e)},destroy:function(t){return acf.getInstance(t).destroy()}},i.postbox={render:function(t){return t.edit_url&&(t.editLink=t.edit_url),t.edit_title&&(t.editTitle=t.edit_title),acf.newPostbox(t)}},acf.newCompatibility(acf.screen,{update:function(){return this.set.apply(this,arguments)},fetch:acf.screen.check}),i.ajax=acf.screen}(jQuery);
includes/acf-helper-functions.php CHANGED
@@ -1,5 +1,35 @@
1
  <?php
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  /**
4
  * acf_uniqid
5
  *
@@ -47,7 +77,7 @@ function acf_merge_attributes( $array1, $array2 ) {
47
  }
48
  }
49
 
50
- // Return
51
  return $array3;
52
  }
53
 
@@ -285,4 +315,51 @@ function acf_maybe_idval( $value ) {
285
  */
286
  function acf_numval( $value ) {
287
  return ( intval($value) == floatval($value) ) ? intval($value) : floatval($value);
288
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
 
3
+ /*
4
+ * acf_is_empty
5
+ *
6
+ * Returns true if the value provided is considered "empty". Allows numbers such as 0.
7
+ *
8
+ * @date 6/7/16
9
+ * @since 5.4.0
10
+ *
11
+ * @param mixed $var The value to check.
12
+ * @return bool
13
+ */
14
+ function acf_is_empty( $var ) {
15
+ return ( !$var && !is_numeric($var) );
16
+ }
17
+
18
+ /**
19
+ * acf_not_empty
20
+ *
21
+ * Returns true if the value provided is considered "not empty". Allows numbers such as 0.
22
+ *
23
+ * @date 15/7/19
24
+ * @since 5.8.1
25
+ *
26
+ * @param mixed $var The value to check.
27
+ * @return bool
28
+ */
29
+ function acf_not_empty( $var ) {
30
+ return ( $var || is_numeric($var) );
31
+ }
32
+
33
  /**
34
  * acf_uniqid
35
  *
77
  }
78
  }
79
 
80
+ // Return.
81
  return $array3;
82
  }
83
 
315
  */
316
  function acf_numval( $value ) {
317
  return ( intval($value) == floatval($value) ) ? intval($value) : floatval($value);
318
+ }
319
+
320
+ /**
321
+ * acf_idify
322
+ *
323
+ * Returns an id attribute friendly string.
324
+ *
325
+ * @date 24/12/17
326
+ * @since 5.6.5
327
+ *
328
+ * @param string $str The string to convert.
329
+ * @return string
330
+ */
331
+ function acf_idify( $str = '' ) {
332
+ return str_replace(array('][', '[', ']'), array('-', '-', ''), strtolower($str));
333
+ }
334
+
335
+ /**
336
+ * acf_slugify
337
+ *
338
+ * Returns a slug friendly string.
339
+ *
340
+ * @date 24/12/17
341
+ * @since 5.6.5
342
+ *
343
+ * @param string $str The string to convert.
344
+ * @return string
345
+ */
346
+ function acf_slugify( $str = '' ) {
347
+ return str_replace(array('_', '/', ' '), '-', strtolower($str));
348
+ }
349
+
350
+ /**
351
+ * acf_punctify
352
+ *
353
+ * Returns a string with correct full stop puctuation.
354
+ *
355
+ * @date 12/7/19
356
+ * @since 5.8.2
357
+ *
358
+ * @param string $str The string to format.
359
+ * @return string
360
+ */
361
+ function acf_punctify( $str = '' ) {
362
+ return trim($str, '.') . '.';
363
+ }
364
+
365
+
includes/acf-utility-functions.php ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Globals.
4
+ global $acf_stores, $acf_instances;
5
+
6
+ // Initialize plaeholders.
7
+ $acf_stores = array();
8
+ $acf_instances = array();
9
+
10
+ /**
11
+ * acf_new_instance
12
+ *
13
+ * Creates a new instance of the given class and stores it in the instances data store.
14
+ *
15
+ * @date 9/1/19
16
+ * @since 5.7.10
17
+ *
18
+ * @param string $class The class name.
19
+ * @return object The instance.
20
+ */
21
+ function acf_new_instance( $class = '' ) {
22
+ global $acf_instances;
23
+ return $acf_instances[ $class ] = new $class();
24
+ }
25
+
26
+ /**
27
+ * acf_get_instance
28
+ *
29
+ * Returns an instance for the given class.
30
+ *
31
+ * @date 9/1/19
32
+ * @since 5.7.10
33
+ *
34
+ * @param string $class The class name.
35
+ * @return object The instance.
36
+ */
37
+ function acf_get_instance( $class = '' ) {
38
+ global $acf_instances;
39
+ if( !isset($acf_instances[ $class ]) ) {
40
+ $acf_instances[ $class ] = new $class();
41
+ }
42
+ return $acf_instances[ $class ];
43
+ }
44
+
45
+ /**
46
+ * acf_register_store
47
+ *
48
+ * Registers a data store.
49
+ *
50
+ * @date 9/1/19
51
+ * @since 5.7.10
52
+ *
53
+ * @param string $name The store name.
54
+ * @param array $data Array of data to start the store with.
55
+ * @return ACF_Data
56
+ */
57
+ function acf_register_store( $name = '', $data = false ) {
58
+
59
+ // Create store.
60
+ $store = new ACF_Data( $data );
61
+
62
+ // Register store.
63
+ global $acf_stores;
64
+ $acf_stores[ $name ] = $store;
65
+
66
+ // Return store.
67
+ return $store;
68
+ }
69
+
70
+ /**
71
+ * acf_get_store
72
+ *
73
+ * Returns a data store.
74
+ *
75
+ * @date 9/1/19
76
+ * @since 5.7.10
77
+ *
78
+ * @param string $name The store name.
79
+ * @return ACF_Data
80
+ */
81
+ function acf_get_store( $name = '' ) {
82
+ global $acf_stores;
83
+ return isset( $acf_stores[ $name ] ) ? $acf_stores[ $name ] : false;
84
+ }
85
+
86
+ /**
87
+ * acf_switch_stores
88
+ *
89
+ * Triggered when switching between sites on a multisite installation.
90
+ *
91
+ * @date 13/2/19
92
+ * @since 5.7.11
93
+ *
94
+ * @param int $site_id New blog ID.
95
+ * @param int prev_blog_id Prev blog ID.
96
+ * @return void
97
+ */
98
+ function acf_switch_stores( $site_id, $prev_site_id ) {
99
+
100
+ // Loop over stores and call switch_site().
101
+ global $acf_stores;
102
+ foreach( $acf_stores as $store ) {
103
+ $store->switch_site( $site_id, $prev_site_id );
104
+ }
105
+ }
106
+ add_action( 'switch_blog', 'acf_switch_stores', 10, 2 );
107
+
108
+ /**
109
+ * acf_get_path
110
+ *
111
+ * Returns the plugin path to a specified file.
112
+ *
113
+ * @date 28/9/13
114
+ * @since 5.0.0
115
+ *
116
+ * @param string $filename The specified file.
117
+ * @return string
118
+ */
119
+ function acf_get_path( $filename = '' ) {
120
+ return ACF_PATH . ltrim($filename, '/');
121
+ }
122
+
123
+ /**
124
+ * acf_get_url
125
+ *
126
+ * Returns the plugin url to a specified file.
127
+ * This function also defines the ACF_URL constant.
128
+ *
129
+ * @date 12/12/17
130
+ * @since 5.6.8
131
+ *
132
+ * @param string $filename The specified file.
133
+ * @return string
134
+ */
135
+ function acf_get_url( $filename = '' ) {
136
+ if( !defined('ACF_URL') ) {
137
+ define( 'ACF_URL', acf_get_setting('url') );
138
+ }
139
+ return ACF_URL . ltrim($filename, '/');
140
+ }
141
+
142
+ /*
143
+ * acf_include
144
+ *
145
+ * Includes a file within the ACF plugin.
146
+ *
147
+ * @date 10/3/14
148
+ * @since 5.0.0
149
+ *
150
+ * @param string $filename The specified file.
151
+ * @return void
152
+ */
153
+ function acf_include( $filename = '' ) {
154
+ $file_path = acf_get_path($filename);
155
+ if( file_exists($file_path) ) {
156
+ include_once($file_path);
157
+ }
158
+ }
includes/api/api-helpers.php CHANGED
@@ -19,104 +19,6 @@ function acf_is_array( $array ) {
19
 
20
  }
21
 
22
-
23
- /*
24
- * acf_is_empty
25
- *
26
- * This function will return true for an empty var (allows 0 as true)
27
- *
28
- * @type function
29
- * @date 6/07/2016
30
- * @since 5.4.0
31
- *
32
- * @param $value (mixed)
33
- * @return (boolean)
34
- */
35
-
36
- function acf_is_empty( $value ) {
37
-
38
- return ( empty($value) && !is_numeric($value) );
39
-
40
- }
41
-
42
- /**
43
- * acf_not_empty
44
- *
45
- * Returns true if the value provided is considered "not empty". Allows numbers such as 0.
46
- *
47
- * @date 15/7/19
48
- * @since 5.8.1
49
- *
50
- * @param mixed $var The value to check.
51
- * @return bool
52
- */
53
- function acf_not_empty( $var ) {
54
- return ( $var || is_numeric($var) );
55
- }
56
-
57
- /**
58
- * acf_idify
59
- *
60
- * Returns an id friendly string
61
- *
62
- * @date 24/12/17
63
- * @since 5.6.5
64
- *
65
- * @param type $var Description. Default.
66
- * @return type Description.
67
- */
68
-
69
- function acf_idify( $str = '' ) {
70
- return str_replace(array('][', '[', ']'), array('-', '-', ''), strtolower($str));
71
- }
72
-
73
- /**
74
- * acf_slugify
75
- *
76
- * Returns a slug friendly string
77
- *
78
- * @date 24/12/17
79
- * @since 5.6.5
80
- *
81
- * @param type $var Description. Default.
82
- * @return type Description.
83
- */
84
-
85
- function acf_slugify( $str = '' ) {
86
- return str_replace(array('_', '/', ' '), '-', strtolower($str));
87
- }
88
-
89
- /**
90
- * acf_punctify
91
- *
92
- * Returns a string with correct full stop puctuation.
93
- *
94
- * @date 12/7/19
95
- * @since 5.8.2
96
- *
97
- * @param string $str The string to format.
98
- * @return string
99
- */
100
- function acf_punctify( $str = '' ) {
101
- return trim($str, '.') . '.';
102
- }
103
-
104
- /**
105
- * acf_multi_explode
106
- *
107
- * Returns an array of strings created by splitting the $string by the given $delimiters.
108
- *
109
- * @date 12/7/19
110
- * @since 5.8.2
111
- *
112
- * @param array $delimiters An array of delimiters.
113
- * @return string $string The string to explode.
114
- */
115
- function acf_multi_explode( $delimiters, $string ) {
116
- $string = str_replace( $delimiters, $delimiters[0], $string );
117
- return explode( $delimiters[0], $string );
118
- }
119
-
120
  /**
121
  * acf_has_setting
122
  *
@@ -309,26 +211,6 @@ function acf_init() {
309
  }
310
 
311
 
312
- /*
313
- * acf_get_compatibility
314
- *
315
- * This function will return true or false for a given compatibility setting
316
- *
317
- * @type function
318
- * @date 20/01/2015
319
- * @since 5.1.5
320
- *
321
- * @param $name (string)
322
- * @return (boolean)
323
- */
324
-
325
- function acf_get_compatibility( $name ) {
326
-
327
- return apply_filters( "acf/compatibility/{$name}", false );
328
-
329
- }
330
-
331
-
332
  /*
333
  * acf_has_done
334
  *
@@ -355,111 +237,7 @@ function acf_has_done( $name ) {
355
  }
356
 
357
 
358
- /*
359
- * acf_get_path
360
- *
361
- * This function will return the path to a file within the ACF plugin folder
362
- *
363
- * @type function
364
- * @date 28/09/13
365
- * @since 5.0.0
366
- *
367
- * @param $path (string) the relative path from the root of the ACF plugin folder
368
- * @return (string)
369
- */
370
-
371
- function acf_get_path( $path = '' ) {
372
-
373
- return ACF_PATH . $path;
374
-
375
- }
376
-
377
-
378
- /**
379
- * acf_get_url
380
- *
381
- * This function will return the url to a file within the ACF plugin folder
382
- *
383
- * @date 12/12/17
384
- * @since 5.6.8
385
- *
386
- * @param string $path The relative path from the root of the ACF plugin folder
387
- * @return string
388
- */
389
-
390
- function acf_get_url( $path = '' ) {
391
-
392
- // define ACF_URL to optimise performance
393
- if( !defined('ACF_URL') ) {
394
- define( 'ACF_URL', acf_get_setting('url') );
395
- }
396
-
397
- // return
398
- return ACF_URL . $path;
399
-
400
- }
401
-
402
-
403
- /*
404
- * acf_get_dir
405
- *
406
- * Deprecated in 5.6.8. Use acf_get_url() instead.
407
- *
408
- * @date 28/09/13
409
- * @since 5.0.0
410
- *
411
- * @param string
412
- * @return string
413
- */
414
-
415
- function acf_get_dir( $path = '' ) {
416
- return acf_get_url( $path );
417
- }
418
-
419
-
420
- /*
421
- * acf_include
422
- *
423
- * This function will include a file
424
- *
425
- * @type function
426
- * @date 10/03/2014
427
- * @since 5.0.0
428
- *
429
- * @param $post_id (int)
430
- * @return $post_id (int)
431
- */
432
 
433
- function acf_include( $file ) {
434
-
435
- $path = acf_get_path( $file );
436
-
437
- if( file_exists($path) ) {
438
-
439
- include_once( $path );
440
-
441
- }
442
-
443
- }
444
-
445
- /**
446
- * acf_include_once
447
- *
448
- * Includes a file one time only.
449
- *
450
- * @date 24/8/18
451
- * @since 5.7.4
452
- *
453
- * @param string $file The relative file path.
454
- * @return void
455
- */
456
-
457
- function acf_include_once( $file = '' ) {
458
- $path = acf_get_path( $file );
459
- if( file_exists($path) ) {
460
- include_once( $path );
461
- }
462
- }
463
 
464
  /*
465
  * acf_get_external_path
19
 
20
  }
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  /**
23
  * acf_has_setting
24
  *
211
  }
212
 
213
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
  /*
215
  * acf_has_done
216
  *
237
  }
238
 
239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
 
242
  /*
243
  * acf_get_external_path
includes/compatibility.php CHANGED
@@ -468,4 +468,17 @@ acf_new_instance('ACF_Compatibility');
468
 
469
  endif; // class_exists check
470
 
471
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
468
 
469
  endif; // class_exists check
470
 
471
+ /*
472
+ * acf_get_compatibility
473
+ *
474
+ * Returns true if compatibility is enabled for the given component.
475
+ *
476
+ * @date 20/1/15
477
+ * @since 5.1.5
478
+ *
479
+ * @param string $name The name of the component to check.
480
+ * @return bool
481
+ */
482
+ function acf_get_compatibility( $name ) {
483
+ return apply_filters( "acf/compatibility/{$name}", false );
484
+ }
includes/deprecated.php CHANGED
@@ -126,3 +126,24 @@ function acf_get_field_reference( $field_name, $post_id ) {
126
  // Return reference.
127
  return acf_get_reference( $field_name, $post_id );
128
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
  // Return reference.
127
  return acf_get_reference( $field_name, $post_id );
128
  }
129
+
130
+ /**
131
+ * acf_get_dir
132
+ *
133
+ * Returns the plugin url to a specified file.
134
+ *
135
+ * @date 28/09/13
136
+ * @since 5.0.0
137
+ * @deprecated 5.6.8
138
+ *
139
+ * @param string $filename The specified file.
140
+ * @return string
141
+ */
142
+ function acf_get_dir( $filename = '' ) {
143
+
144
+ // Warning.
145
+ _deprecated_function( __FUNCTION__, '5.6.8', 'acf_get_url()' );
146
+
147
+ // Return.
148
+ return acf_get_url( $filename );
149
+ }
includes/fields/class-acf-field-image.php CHANGED
@@ -39,7 +39,6 @@ class acf_field_image extends acf_field {
39
 
40
  // filters
41
  add_filter('get_media_item_args', array($this, 'get_media_item_args'));
42
- add_filter('wp_prepare_attachment_for_js', array($this, 'wp_prepare_attachment_for_js'), 10, 3);
43
 
44
  }
45
 
@@ -375,65 +374,6 @@ class acf_field_image extends acf_field {
375
  return($vars);
376
 
377
  }
378
-
379
-
380
- /*
381
- * wp_prepare_attachment_for_js
382
- *
383
- * this filter allows ACF to add in extra data to an attachment JS object
384
- * This sneaky hook adds the missing sizes to each attachment in the 3.5 uploader.
385
- * It would be a lot easier to add all the sizes to the 'image_size_names_choose' filter but
386
- * then it will show up on the normal the_content editor
387
- *
388
- * @type function
389
- * @since: 3.5.7
390
- * @date 13/01/13
391
- *
392
- * @param {int} $post_id
393
- * @return {int} $post_id
394
- */
395
-
396
- function wp_prepare_attachment_for_js( $response, $attachment, $meta ) {
397
-
398
- // only for image
399
- if( $response['type'] != 'image' ) {
400
-
401
- return $response;
402
-
403
- }
404
-
405
-
406
- // make sure sizes exist. Perhaps they dont?
407
- if( !isset($meta['sizes']) ) {
408
-
409
- return $response;
410
-
411
- }
412
-
413
-
414
- $attachment_url = $response['url'];
415
- $base_url = str_replace( wp_basename( $attachment_url ), '', $attachment_url );
416
-
417
- if( isset($meta['sizes']) && is_array($meta['sizes']) ) {
418
-
419
- foreach( $meta['sizes'] as $k => $v ) {
420
-
421
- if( !isset($response['sizes'][ $k ]) ) {
422
-
423
- $response['sizes'][ $k ] = array(
424
- 'height' => $v['height'],
425
- 'width' => $v['width'],
426
- 'url' => $base_url . $v['file'],
427
- 'orientation' => $v['height'] > $v['width'] ? 'portrait' : 'landscape',
428
- );
429
- }
430
-
431
- }
432
-
433
- }
434
-
435
- return $response;
436
- }
437
 
438
 
439
  /*
39
 
40
  // filters
41
  add_filter('get_media_item_args', array($this, 'get_media_item_args'));
 
42
 
43
  }
44
 
374
  return($vars);
375
 
376
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
377
 
378
 
379
  /*
includes/fields/class-acf-field-post_object.php CHANGED
@@ -504,7 +504,7 @@ class acf_field_post_object extends acf_field {
504
 
505
 
506
  // convert back from array if neccessary
507
- if( !$field['multiple'] && acf_is_array($value) ) {
508
 
509
  $value = current($value);
510
 
504
 
505
 
506
  // convert back from array if neccessary
507
+ if( !$field['multiple'] && is_array($value) ) {
508
 
509
  $value = current($value);
510
 
includes/fields/class-acf-field-range.php CHANGED
@@ -108,7 +108,7 @@ class acf_field_range extends acf_field_number {
108
  // input
109
  $html .= acf_get_text_input(array(
110
  'type' => 'number',
111
- 'id' => $atts['id'] . '-alt',
112
  'value' => $atts['value'],
113
  'step' => $atts['step'],
114
  //'min' => $atts['min'], // removed to avoid browser validation errors
108
  // input
109
  $html .= acf_get_text_input(array(
110
  'type' => 'number',
111
+ 'id' => $atts['id'] . '-alt',
112
  'value' => $atts['value'],
113
  'step' => $atts['step'],
114
  //'min' => $atts['min'], // removed to avoid browser validation errors
includes/fields/class-acf-field-textarea.php CHANGED
@@ -208,8 +208,10 @@ class acf_field_textarea extends acf_field {
208
  */
209
  function validate_value( $valid, $value, $field, $input ){
210
 
211
- // Check maxlength
212
- if( $field['maxlength'] && mb_strlen(wp_unslash($value)) > $field['maxlength'] ) {
 
 
213
  return sprintf( __('Value must not exceed %d characters', 'acf'), $field['maxlength'] );
214
  }
215
 
208
  */
209
  function validate_value( $valid, $value, $field, $input ){
210
 
211
+ // Check maxlength.
212
+ // Note: Due to the way strlen (and mb_strlen) work, line breaks count as two characters in PHP, but not in Javascript (or HTML).
213
+ // To avoid incorrectly calculating the length, replace double line breaks.
214
+ if( $field['maxlength'] && mb_strlen(str_replace("\r\n", "\n", wp_unslash($value))) > $field['maxlength'] ) {
215
  return sprintf( __('Value must not exceed %d characters', 'acf'), $field['maxlength'] );
216
  }
217
 
includes/l10n.php CHANGED
@@ -24,9 +24,9 @@ function determine_locale() {
24
  if ( ! empty( $determined_locale ) && is_string( $determined_locale ) ) {
25
  return $determined_locale;
26
  }
27
-
28
  $determined_locale = get_locale();
29
-
30
  if ( function_exists('get_user_locale') && is_admin() ) {
31
  $determined_locale = get_user_locale();
32
  }
@@ -34,11 +34,11 @@ function determine_locale() {
34
  if ( function_exists('get_user_locale') && isset( $_GET['_locale'] ) && 'user' === $_GET['_locale'] ) {
35
  $determined_locale = get_user_locale();
36
  }
37
-
38
  if ( ! empty( $_GET['wp_lang'] ) && ! empty( $GLOBALS['pagenow'] ) && 'wp-login.php' === $GLOBALS['pagenow'] ) {
39
  $determined_locale = sanitize_text_field( $_GET['wp_lang'] );
40
  }
41
-
42
  /**
43
  * Filters the locale for the current request.
44
  *
@@ -71,10 +71,8 @@ function acf_get_locale() {
71
  $langs = array(
72
  'az_TR' => 'az', // Azerbaijani (Turkey)
73
  'zh_HK' => 'zh_CN', // Chinese (Hong Kong)
74
- //'zh_TW' => 'zh_CN', // Chinese (Taiwan)
75
  'nl_BE' => 'nl_NL', // Dutch (Belgium)
76
  'fr_BE' => 'fr_FR', // French (Belgium)
77
- 'fr_CA' => 'fr_FR', // French (Canadian)
78
  'nn_NO' => 'nb_NO', // Norwegian (Nynorsk)
79
  'fa_AF' => 'fa_IR', // Persian (Afghanistan)
80
  'ru_UA' => 'ru_RU', // Russian (Ukraine)
@@ -153,6 +151,3 @@ function _acf_apply_language_cache_key( $key ) {
153
 
154
  // Hook into filter.
155
  add_filter( 'acf/get_cache_key', '_acf_apply_language_cache_key' );
156
-
157
-
158
-
24
  if ( ! empty( $determined_locale ) && is_string( $determined_locale ) ) {
25
  return $determined_locale;
26
  }
27
+
28
  $determined_locale = get_locale();
29
+
30
  if ( function_exists('get_user_locale') && is_admin() ) {
31
  $determined_locale = get_user_locale();
32
  }
34
  if ( function_exists('get_user_locale') && isset( $_GET['_locale'] ) && 'user' === $_GET['_locale'] ) {
35
  $determined_locale = get_user_locale();
36
  }
37
+
38
  if ( ! empty( $_GET['wp_lang'] ) && ! empty( $GLOBALS['pagenow'] ) && 'wp-login.php' === $GLOBALS['pagenow'] ) {
39
  $determined_locale = sanitize_text_field( $_GET['wp_lang'] );
40
  }
41
+
42
  /**
43
  * Filters the locale for the current request.
44
  *
71
  $langs = array(
72
  'az_TR' => 'az', // Azerbaijani (Turkey)
73
  'zh_HK' => 'zh_CN', // Chinese (Hong Kong)
 
74
  'nl_BE' => 'nl_NL', // Dutch (Belgium)
75
  'fr_BE' => 'fr_FR', // French (Belgium)
 
76
  'nn_NO' => 'nb_NO', // Norwegian (Nynorsk)
77
  'fa_AF' => 'fa_IR', // Persian (Afghanistan)
78
  'ru_UA' => 'ru_RU', // Russian (Ukraine)
151
 
152
  // Hook into filter.
153
  add_filter( 'acf/get_cache_key', '_acf_apply_language_cache_key' );
 
 
 
lang/acf-fr_CA.mo ADDED
Binary file
lang/acf-fr_CA.po ADDED
@@ -0,0 +1,3571 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Advanced Custom Fields Pro v5.8.2\n"
4
+ "Report-Msgid-Bugs-To: http://support.advancedcustomfields.com\n"
5
+ "POT-Creation-Date: 2019-08-02 20:54-0400\n"
6
+ "PO-Revision-Date: 2019-08-02 21:08-0400\n"
7
+ "Last-Translator: Berenger Zyla <hello@berengerzyla.com>\n"
8
+ "Language-Team: Bérenger Zyla <hello@berengerzyla.com>\n"
9
+ "Language: fr_CA\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=(n > 1);\n"
14
+ "X-Generator: Poedit 2.2.3\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
17
+ "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
18
+ "_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
19
+ "X-Poedit-Basepath: ..\n"
20
+ "X-Poedit-WPHeader: acf.php\n"
21
+ "X-Textdomain-Support: yes\n"
22
+ "X-Poedit-SearchPath-0: .\n"
23
+ "X-Poedit-SearchPathExcluded-0: *.js\n"
24
+
25
+ # @ acf
26
+ #: acf.php:79
27
+ msgid "Advanced Custom Fields"
28
+ msgstr "Advanced Custom Fields"
29
+
30
+ # @ acf
31
+ #: acf.php:359 includes/admin/admin.php:58
32
+ msgid "Field Groups"
33
+ msgstr "Groupes de champs"
34
+
35
+ # @ acf
36
+ #: acf.php:360
37
+ msgid "Field Group"
38
+ msgstr "Groupe de champs"
39
+
40
+ # @ acf
41
+ #: acf.php:361 acf.php:393 includes/admin/admin.php:59
42
+ #: pro/fields/class-acf-field-flexible-content.php:558
43
+ msgid "Add New"
44
+ msgstr "Ajouter"
45
+
46
+ # @ acf
47
+ #: acf.php:362
48
+ msgid "Add New Field Group"
49
+ msgstr "Ajouter un nouveau groupe de champs"
50
+
51
+ # @ acf
52
+ #: acf.php:363
53
+ msgid "Edit Field Group"
54
+ msgstr "Modifier le groupe de champs"
55
+
56
+ # @ acf
57
+ #: acf.php:364
58
+ msgid "New Field Group"
59
+ msgstr "Nouveau groupe de champs"
60
+
61
+ # @ default
62
+ #: acf.php:365
63
+ msgid "View Field Group"
64
+ msgstr "Voir le groupe de champs"
65
+
66
+ # @ default
67
+ #: acf.php:366
68
+ msgid "Search Field Groups"
69
+ msgstr "Rechercher des groupes de champs"
70
+
71
+ # @ default
72
+ #: acf.php:367
73
+ msgid "No Field Groups found"
74
+ msgstr "Aucun groupe de champs trouvé"
75
+
76
+ # @ default
77
+ #: acf.php:368
78
+ msgid "No Field Groups found in Trash"
79
+ msgstr "Aucun groupe de champs trouvé dans la corbeille"
80
+
81
+ # @ acf
82
+ #: acf.php:391 includes/admin/admin-field-group.php:220
83
+ #: includes/admin/admin-field-groups.php:530
84
+ #: pro/fields/class-acf-field-clone.php:811
85
+ msgid "Fields"
86
+ msgstr "Champs"
87
+
88
+ # @ acf
89
+ #: acf.php:392
90
+ msgid "Field"
91
+ msgstr "Champ"
92
+
93
+ # @ acf
94
+ #: acf.php:394
95
+ msgid "Add New Field"
96
+ msgstr "Ajouter un champ"
97
+
98
+ # @ acf
99
+ #: acf.php:395
100
+ msgid "Edit Field"
101
+ msgstr "Modifier le champ"
102
+
103
+ # @ acf
104
+ #: acf.php:396 includes/admin/views/field-group-fields.php:41
105
+ msgid "New Field"
106
+ msgstr "Nouveau champ"
107
+
108
+ # @ acf
109
+ #: acf.php:397
110
+ msgid "View Field"
111
+ msgstr "Voir le champ"
112
+
113
+ # @ default
114
+ #: acf.php:398
115
+ msgid "Search Fields"
116
+ msgstr "Rechercher des champs"
117
+
118
+ # @ default
119
+ #: acf.php:399
120
+ msgid "No Fields found"
121
+ msgstr "Aucun champ trouvé"
122
+
123
+ # @ default
124
+ #: acf.php:400
125
+ msgid "No Fields found in Trash"
126
+ msgstr "Aucun champ trouvé dans la corbeille"
127
+
128
+ #: acf.php:439 includes/admin/admin-field-group.php:402
129
+ #: includes/admin/admin-field-groups.php:587
130
+ msgid "Inactive"
131
+ msgstr "Inactif"
132
+
133
+ #: acf.php:444
134
+ #, php-format
135
+ msgid "Inactive <span class=\"count\">(%s)</span>"
136
+ msgid_plural "Inactive <span class=\"count\">(%s)</span>"
137
+ msgstr[0] "Inactif <span class=\"count\">(%s)</span>"
138
+ msgstr[1] "Inactifs <span class=\"count\">(%s)</span>"
139
+
140
+ #: includes/acf-field-functions.php:827
141
+ #: includes/admin/admin-field-group.php:178
142
+ msgid "(no label)"
143
+ msgstr "(aucun label)"
144
+
145
+ #: includes/acf-field-group-functions.php:813
146
+ #: includes/admin/admin-field-group.php:180
147
+ msgid "copy"
148
+ msgstr "copie"
149
+
150
+ # @ default
151
+ #: includes/admin/admin-field-group.php:86
152
+ #: includes/admin/admin-field-group.php:87
153
+ #: includes/admin/admin-field-group.php:89
154
+ msgid "Field group updated."
155
+ msgstr "Groupe de champs mis à jour."
156
+
157
+ # @ default
158
+ #: includes/admin/admin-field-group.php:88
159
+ msgid "Field group deleted."
160
+ msgstr "Groupe de champs supprimé."
161
+
162
+ # @ default
163
+ #: includes/admin/admin-field-group.php:91
164
+ msgid "Field group published."
165
+ msgstr "Groupe de champ publié."
166
+
167
+ # @ default
168
+ #: includes/admin/admin-field-group.php:92
169
+ msgid "Field group saved."
170
+ msgstr "Groupe de champ enregistré."
171
+
172
+ # @ default
173
+ #: includes/admin/admin-field-group.php:93
174
+ msgid "Field group submitted."
175
+ msgstr "Groupe de champ enregistré."
176
+
177
+ #: includes/admin/admin-field-group.php:94
178
+ msgid "Field group scheduled for."
179
+ msgstr "Groupe de champs programmé pour."
180
+
181
+ #: includes/admin/admin-field-group.php:95
182
+ msgid "Field group draft updated."
183
+ msgstr "Brouillon du groupe de champs mis à jour."
184
+
185
+ #: includes/admin/admin-field-group.php:171
186
+ msgid "The string \"field_\" may not be used at the start of a field name"
187
+ msgstr "Le nom d’un champ ne peut pas commencer par « field_ »"
188
+
189
+ #: includes/admin/admin-field-group.php:172
190
+ msgid "This field cannot be moved until its changes have been saved"
191
+ msgstr ""
192
+ "Ce champ ne peut pas être déplacé tant que ses modifications n'ont pas été "
193
+ "enregistrées"
194
+
195
+ # @ default
196
+ #: includes/admin/admin-field-group.php:173
197
+ msgid "Field group title is required"
198
+ msgstr "Veuillez indiquer un titre pour le groupe de champs"
199
+
200
+ # @ acf
201
+ #: includes/admin/admin-field-group.php:174
202
+ msgid "Move to trash. Are you sure?"
203
+ msgstr "Mettre à la corbeille. Êtes-vous sûr?"
204
+
205
+ #: includes/admin/admin-field-group.php:175
206
+ msgid "No toggle fields available"
207
+ msgstr "Aucun champ de sélection disponible"
208
+
209
+ # @ acf
210
+ #: includes/admin/admin-field-group.php:176
211
+ msgid "Move Custom Field"
212
+ msgstr "Déplacer le champ personnalisé"
213
+
214
+ #: includes/admin/admin-field-group.php:177
215
+ msgid "Checked"
216
+ msgstr "Coché"
217
+
218
+ #: includes/admin/admin-field-group.php:179
219
+ msgid "(this field)"
220
+ msgstr "(ce champ)"
221
+
222
+ #: includes/admin/admin-field-group.php:181
223
+ #: includes/admin/views/field-group-field-conditional-logic.php:51
224
+ #: includes/admin/views/field-group-field-conditional-logic.php:151
225
+ #: includes/admin/views/field-group-locations.php:29
226
+ #: includes/admin/views/html-location-group.php:3
227
+ #: includes/api/api-helpers.php:3871
228
+ msgid "or"
229
+ msgstr "ou"
230
+
231
+ #: includes/admin/admin-field-group.php:182
232
+ msgid "Null"
233
+ msgstr "Vide"
234
+
235
+ # @ acf
236
+ #: includes/admin/admin-field-group.php:221
237
+ msgid "Location"
238
+ msgstr "Emplacement"
239
+
240
+ #: includes/admin/admin-field-group.php:222
241
+ #: includes/admin/tools/class-acf-admin-tool-export.php:295
242
+ msgid "Settings"
243
+ msgstr "Réglages"
244
+
245
+ #: includes/admin/admin-field-group.php:372
246
+ msgid "Field Keys"
247
+ msgstr "Identifiants des champs"
248
+
249
+ #: includes/admin/admin-field-group.php:402
250
+ #: includes/admin/views/field-group-options.php:9
251
+ msgid "Active"
252
+ msgstr "Actif"
253
+
254
+ #: includes/admin/admin-field-group.php:771
255
+ msgid "Move Complete."
256
+ msgstr "Déplacement effectué."
257
+
258
+ #: includes/admin/admin-field-group.php:772
259
+ #, php-format
260
+ msgid "The %s field can now be found in the %s field group"
261
+ msgstr "Le champ %s a été déplacé dans le groupe %s"
262
+
263
+ # @ acf
264
+ #: includes/admin/admin-field-group.php:773
265
+ msgid "Close Window"
266
+ msgstr "Fermer la fenêtre"
267
+
268
+ # @ acf
269
+ #: includes/admin/admin-field-group.php:814
270
+ msgid "Please select the destination for this field"
271
+ msgstr "Choisissez la destination de ce champ"
272
+
273
+ # @ acf
274
+ #: includes/admin/admin-field-group.php:821
275
+ msgid "Move Field"
276
+ msgstr "Déplacer le champ"
277
+
278
+ #: includes/admin/admin-field-groups.php:89
279
+ #, php-format
280
+ msgid "Active <span class=\"count\">(%s)</span>"
281
+ msgid_plural "Active <span class=\"count\">(%s)</span>"
282
+ msgstr[0] "Actif <span class=\"count\">(%s)</span>"
283
+ msgstr[1] "Actifs <span class=\"count\">(%s)</span>"
284
+
285
+ # @ default
286
+ #: includes/admin/admin-field-groups.php:156
287
+ #, php-format
288
+ msgid "Field group duplicated."
289
+ msgid_plural "%s field groups duplicated."
290
+ msgstr[0] "Groupe de champs dupliqué."
291
+ msgstr[1] "%s groupes de champs dupliqués."
292
+
293
+ # @ default
294
+ #: includes/admin/admin-field-groups.php:243
295
+ #, php-format
296
+ msgid "Field group synchronised."
297
+ msgid_plural "%s field groups synchronised."
298
+ msgstr[0] "Groupe de champs synchronisé."
299
+ msgstr[1] "%s groupes de champs synchronisés."
300
+
301
+ # @ acf
302
+ #: includes/admin/admin-field-groups.php:414
303
+ #: includes/admin/admin-field-groups.php:577
304
+ msgid "Sync available"
305
+ msgstr "Synchronisation disponible"
306
+
307
+ #: includes/admin/admin-field-groups.php:527 includes/forms/form-front.php:38
308
+ #: pro/fields/class-acf-field-gallery.php:374
309
+ msgid "Title"
310
+ msgstr "Titre"
311
+
312
+ # @ acf
313
+ #: includes/admin/admin-field-groups.php:528
314
+ #: includes/admin/views/field-group-options.php:96
315
+ #: includes/admin/views/html-admin-page-upgrade-network.php:38
316
+ #: includes/admin/views/html-admin-page-upgrade-network.php:49
317
+ #: pro/fields/class-acf-field-gallery.php:401
318
+ msgid "Description"
319
+ msgstr "Description"
320
+
321
+ #: includes/admin/admin-field-groups.php:529
322
+ msgid "Status"
323
+ msgstr "Statut"
324
+
325
+ #. Description of the plugin/theme
326
+ #: includes/admin/admin-field-groups.php:626
327
+ msgid "Customize WordPress with powerful, professional and intuitive fields."
328
+ msgstr ""
329
+ "Personnalisez WordPress avec des champs intuitifs, puissants et "
330
+ "professionnels."
331
+
332
+ # @ acf
333
+ #: includes/admin/admin-field-groups.php:628
334
+ #: includes/admin/settings-info.php:76
335
+ #: pro/admin/views/html-settings-updates.php:107
336
+ msgid "Changelog"
337
+ msgstr "Liste des modifications"
338
+
339
+ #: includes/admin/admin-field-groups.php:633
340
+ #, php-format
341
+ msgid "See what's new in <a href=\"%s\">version %s</a>."
342
+ msgstr "Découvrez les nouveautés de la <a href=\"%s\">version %s</a>."
343
+
344
+ # @ acf
345
+ #: includes/admin/admin-field-groups.php:636
346
+ msgid "Resources"
347
+ msgstr "Ressources"
348
+
349
+ #: includes/admin/admin-field-groups.php:638
350
+ msgid "Website"
351
+ msgstr "Site web"
352
+
353
+ #: includes/admin/admin-field-groups.php:639
354
+ msgid "Documentation"
355
+ msgstr "Documentation"
356
+
357
+ #: includes/admin/admin-field-groups.php:640
358
+ msgid "Support"
359
+ msgstr "Support"
360
+
361
+ #: includes/admin/admin-field-groups.php:642
362
+ #: includes/admin/views/settings-info.php:84
363
+ msgid "Pro"
364
+ msgstr "Pro"
365
+
366
+ #: includes/admin/admin-field-groups.php:647
367
+ #, php-format
368
+ msgid "Thank you for creating with <a href=\"%s\">ACF</a>."
369
+ msgstr "Merci de créer avec <a href=\"%s\">ACF</a>."
370
+
371
+ # @ acf
372
+ #: includes/admin/admin-field-groups.php:686
373
+ msgid "Duplicate this item"
374
+ msgstr "Dupliquer cet élément"
375
+
376
+ #: includes/admin/admin-field-groups.php:686
377
+ #: includes/admin/admin-field-groups.php:702
378
+ #: includes/admin/views/field-group-field.php:46
379
+ #: pro/fields/class-acf-field-flexible-content.php:557
380
+ msgid "Duplicate"
381
+ msgstr "Dupliquer"
382
+
383
+ #: includes/admin/admin-field-groups.php:719
384
+ #: includes/fields/class-acf-field-google-map.php:165
385
+ #: includes/fields/class-acf-field-relationship.php:593
386
+ msgid "Search"
387
+ msgstr "Rechercher"
388
+
389
+ # @ acf
390
+ #: includes/admin/admin-field-groups.php:778
391
+ #, php-format
392
+ msgid "Select %s"
393
+ msgstr "Choisir %s"
394
+
395
+ #: includes/admin/admin-field-groups.php:786
396
+ msgid "Synchronise field group"
397
+ msgstr "Synchroniser le groupe de champs"
398
+
399
+ #: includes/admin/admin-field-groups.php:786
400
+ #: includes/admin/admin-field-groups.php:816
401
+ msgid "Sync"
402
+ msgstr "Synchroniser"
403
+
404
+ #: includes/admin/admin-field-groups.php:798
405
+ msgid "Apply"
406
+ msgstr "Appliquer"
407
+
408
+ # @ acf
409
+ #: includes/admin/admin-field-groups.php:816
410
+ msgid "Bulk Actions"
411
+ msgstr "Actions groupées"
412
+
413
+ #: includes/admin/admin-tools.php:116
414
+ #: includes/admin/views/html-admin-tools.php:21
415
+ msgid "Tools"
416
+ msgstr "Outils"
417
+
418
+ # @ acf
419
+ #: includes/admin/admin-upgrade.php:47 includes/admin/admin-upgrade.php:94
420
+ #: includes/admin/admin-upgrade.php:156
421
+ #: includes/admin/views/html-admin-page-upgrade-network.php:24
422
+ #: includes/admin/views/html-admin-page-upgrade.php:26
423
+ msgid "Upgrade Database"
424
+ msgstr "Mise à niveau de la base de données"
425
+
426
+ #: includes/admin/admin-upgrade.php:180
427
+ msgid "Review sites & upgrade"
428
+ msgstr "Examiner les sites et mettre à niveau"
429
+
430
+ # @ acf
431
+ #: includes/admin/admin.php:54 includes/admin/views/field-group-options.php:110
432
+ msgid "Custom Fields"
433
+ msgstr "ACF"
434
+
435
+ #: includes/admin/settings-info.php:50
436
+ msgid "Info"
437
+ msgstr "Informations"
438
+
439
+ #: includes/admin/settings-info.php:75
440
+ msgid "What's New"
441
+ msgstr "Nouveautés"
442
+
443
+ # @ acf
444
+ #: includes/admin/tools/class-acf-admin-tool-export.php:33
445
+ msgid "Export Field Groups"
446
+ msgstr "Exporter les groupes de champs"
447
+
448
+ #: includes/admin/tools/class-acf-admin-tool-export.php:38
449
+ #: includes/admin/tools/class-acf-admin-tool-export.php:342
450
+ #: includes/admin/tools/class-acf-admin-tool-export.php:371
451
+ msgid "Generate PHP"
452
+ msgstr "Générer le PHP"
453
+
454
+ # @ acf
455
+ #: includes/admin/tools/class-acf-admin-tool-export.php:97
456
+ #: includes/admin/tools/class-acf-admin-tool-export.php:135
457
+ msgid "No field groups selected"
458
+ msgstr "Aucun groupe de champs sélectionné"
459
+
460
+ #: includes/admin/tools/class-acf-admin-tool-export.php:174
461
+ #, php-format
462
+ msgid "Exported 1 field group."
463
+ msgid_plural "Exported %s field groups."
464
+ msgstr[0] "Un groupe de champ a été exporté."
465
+ msgstr[1] "%s groupes de champs ont été exportés."
466
+
467
+ # @ default
468
+ #: includes/admin/tools/class-acf-admin-tool-export.php:241
469
+ #: includes/admin/tools/class-acf-admin-tool-export.php:269
470
+ msgid "Select Field Groups"
471
+ msgstr "Sélectionnez les groupes de champs"
472
+
473
+ #: includes/admin/tools/class-acf-admin-tool-export.php:336
474
+ msgid ""
475
+ "Select the field groups you would like to export and then select your export "
476
+ "method. Use the download button to export to a .json file which you can then "
477
+ "import to another ACF installation. Use the generate button to export to PHP "
478
+ "code which you can place in your theme."
479
+ msgstr ""
480
+ "Sélectionnez les groupes de champs que vous souhaitez exporter puis "
481
+ "choisissez la méthode d'export. Utilisez le bouton « télécharger » pour "
482
+ "exporter un fichier JSON que vous pourrez importer dans une autre "
483
+ "installation ACF. Utilisez le « générer » pour exporter le code PHP que vous "
484
+ "pourrez ajouter à votre thème."
485
+
486
+ #: includes/admin/tools/class-acf-admin-tool-export.php:341
487
+ msgid "Export File"
488
+ msgstr "Exporter le fichier"
489
+
490
+ #: includes/admin/tools/class-acf-admin-tool-export.php:414
491
+ msgid ""
492
+ "The following code can be used to register a local version of the selected "
493
+ "field group(s). A local field group can provide many benefits such as faster "
494
+ "load times, version control & dynamic fields/settings. Simply copy and paste "
495
+ "the following code to your theme's functions.php file or include it within "
496
+ "an external file."
497
+ msgstr ""
498
+ "Le code suivant peut être utilisé pour enregistrer une version locale du/des "
499
+ "groupe(s) de champs sélectionné(s). Un groupe de champ local apporte de "
500
+ "nombreux bénéfices comme des temps de chargement plus rapide, la gestion de "
501
+ "versions, ou des champs/paramètres dynamiques. Copiez-collez le code suivant "
502
+ "dans le fichier functions.php de votre thème ou incluez-le depuis un autre "
503
+ "fichier."
504
+
505
+ #: includes/admin/tools/class-acf-admin-tool-export.php:446
506
+ msgid "Copy to clipboard"
507
+ msgstr "Copier dans le presse-papiers"
508
+
509
+ #: includes/admin/tools/class-acf-admin-tool-export.php:483
510
+ msgid "Copied"
511
+ msgstr "Copié"
512
+
513
+ # @ acf
514
+ #: includes/admin/tools/class-acf-admin-tool-import.php:26
515
+ msgid "Import Field Groups"
516
+ msgstr "Importer les groupes de champs"
517
+
518
+ #: includes/admin/tools/class-acf-admin-tool-import.php:47
519
+ msgid ""
520
+ "Select the Advanced Custom Fields JSON file you would like to import. When "
521
+ "you click the import button below, ACF will import the field groups."
522
+ msgstr ""
523
+ "Sélectionnez le fichier JSON ACF que vous souhaitez importer et cliquez sur "
524
+ "Importer. ACF importera les groupes de champs."
525
+
526
+ # @ acf
527
+ #: includes/admin/tools/class-acf-admin-tool-import.php:52
528
+ #: includes/fields/class-acf-field-file.php:57
529
+ msgid "Select File"
530
+ msgstr "Sélectionner un fichier"
531
+
532
+ #: includes/admin/tools/class-acf-admin-tool-import.php:62
533
+ msgid "Import File"
534
+ msgstr "Importer le fichier"
535
+
536
+ # @ acf
537
+ #: includes/admin/tools/class-acf-admin-tool-import.php:85
538
+ #: includes/fields/class-acf-field-file.php:170
539
+ msgid "No file selected"
540
+ msgstr "Aucun fichier sélectionné"
541
+
542
+ #: includes/admin/tools/class-acf-admin-tool-import.php:93
543
+ msgid "Error uploading file. Please try again"
544
+ msgstr "Échec de l'import du fichier. Merci d’essayer à nouveau"
545
+
546
+ #: includes/admin/tools/class-acf-admin-tool-import.php:98
547
+ msgid "Incorrect file type"
548
+ msgstr "Type de fichier incorrect"
549
+
550
+ #: includes/admin/tools/class-acf-admin-tool-import.php:107
551
+ msgid "Import file empty"
552
+ msgstr "Le fichier à importer est vide"
553
+
554
+ #: includes/admin/tools/class-acf-admin-tool-import.php:138
555
+ #, php-format
556
+ msgid "Imported 1 field group"
557
+ msgid_plural "Imported %s field groups"
558
+ msgstr[0] "Un groupe de champs importé"
559
+ msgstr[1] "%s groupes de champs importés"
560
+
561
+ #: includes/admin/views/field-group-field-conditional-logic.php:25
562
+ msgid "Conditional Logic"
563
+ msgstr "Logique conditionnelle"
564
+
565
+ #: includes/admin/views/field-group-field-conditional-logic.php:51
566
+ msgid "Show this field if"
567
+ msgstr "Montrer ce champ si"
568
+
569
+ #: includes/admin/views/field-group-field-conditional-logic.php:138
570
+ #: includes/admin/views/html-location-rule.php:86
571
+ msgid "and"
572
+ msgstr "et"
573
+
574
+ # @ acf
575
+ #: includes/admin/views/field-group-field-conditional-logic.php:153
576
+ #: includes/admin/views/field-group-locations.php:31
577
+ msgid "Add rule group"
578
+ msgstr "Ajouter une règle"
579
+
580
+ #: includes/admin/views/field-group-field.php:38
581
+ #: pro/fields/class-acf-field-flexible-content.php:410
582
+ #: pro/fields/class-acf-field-repeater.php:299
583
+ msgid "Drag to reorder"
584
+ msgstr "Faites glisser pour réorganiser"
585
+
586
+ # @ acf
587
+ #: includes/admin/views/field-group-field.php:42
588
+ #: includes/admin/views/field-group-field.php:45
589
+ msgid "Edit field"
590
+ msgstr "Modifier ce champ"
591
+
592
+ # @ acf
593
+ #: includes/admin/views/field-group-field.php:45
594
+ #: includes/fields/class-acf-field-file.php:152
595
+ #: includes/fields/class-acf-field-image.php:138
596
+ #: includes/fields/class-acf-field-link.php:139
597
+ #: pro/fields/class-acf-field-gallery.php:361
598
+ msgid "Edit"
599
+ msgstr "Modifier"
600
+
601
+ # @ acf
602
+ #: includes/admin/views/field-group-field.php:46
603
+ msgid "Duplicate field"
604
+ msgstr "Dupliquer ce champ"
605
+
606
+ #: includes/admin/views/field-group-field.php:47
607
+ msgid "Move field to another group"
608
+ msgstr "Déplacer le champ dans un autre groupe"
609
+
610
+ #: includes/admin/views/field-group-field.php:47
611
+ msgid "Move"
612
+ msgstr "Déplacer"
613
+
614
+ # @ acf
615
+ #: includes/admin/views/field-group-field.php:48
616
+ msgid "Delete field"
617
+ msgstr "Supprimer ce champ"
618
+
619
+ # @ acf
620
+ #: includes/admin/views/field-group-field.php:48
621
+ #: pro/fields/class-acf-field-flexible-content.php:556
622
+ msgid "Delete"
623
+ msgstr "Supprimer"
624
+
625
+ # @ acf
626
+ #: includes/admin/views/field-group-field.php:65
627
+ msgid "Field Label"
628
+ msgstr "Titre du champ"
629
+
630
+ # @ acf
631
+ #: includes/admin/views/field-group-field.php:66
632
+ msgid "This is the name which will appear on the EDIT page"
633
+ msgstr "Ce nom apparaîtra sur la page d‘édition"
634
+
635
+ # @ acf
636
+ #: includes/admin/views/field-group-field.php:75
637
+ msgid "Field Name"
638
+ msgstr "Nom du champ"
639
+
640
+ # @ acf
641
+ #: includes/admin/views/field-group-field.php:76
642
+ msgid "Single word, no spaces. Underscores and dashes allowed"
643
+ msgstr "Un seul mot, sans espace. Les « _ » et « - » sont autorisés"
644
+
645
+ # @ acf
646
+ #: includes/admin/views/field-group-field.php:85
647
+ msgid "Field Type"
648
+ msgstr "Type de champ"
649
+
650
+ # @ acf
651
+ #: includes/admin/views/field-group-field.php:96
652
+ msgid "Instructions"
653
+ msgstr "Instructions"
654
+
655
+ # @ acf
656
+ #: includes/admin/views/field-group-field.php:97
657
+ msgid "Instructions for authors. Shown when submitting data"
658
+ msgstr "Instructions pour les auteurs. Affichées lors de la saisie du contenu"
659
+
660
+ # @ acf
661
+ #: includes/admin/views/field-group-field.php:106
662
+ msgid "Required?"
663
+ msgstr "Requis?"
664
+
665
+ #: includes/admin/views/field-group-field.php:129
666
+ msgid "Wrapper Attributes"
667
+ msgstr "Attributs du conteneur"
668
+
669
+ #: includes/admin/views/field-group-field.php:135
670
+ msgid "width"
671
+ msgstr "largeur"
672
+
673
+ #: includes/admin/views/field-group-field.php:150
674
+ msgid "class"
675
+ msgstr "classe"
676
+
677
+ #: includes/admin/views/field-group-field.php:163
678
+ msgid "id"
679
+ msgstr "id"
680
+
681
+ # @ acf
682
+ #: includes/admin/views/field-group-field.php:175
683
+ msgid "Close Field"
684
+ msgstr "Fermer le champ"
685
+
686
+ # @ acf
687
+ #: includes/admin/views/field-group-fields.php:4
688
+ msgid "Order"
689
+ msgstr "Ordre"
690
+
691
+ # @ acf
692
+ #: includes/admin/views/field-group-fields.php:5
693
+ #: includes/fields/class-acf-field-button-group.php:198
694
+ #: includes/fields/class-acf-field-checkbox.php:420
695
+ #: includes/fields/class-acf-field-radio.php:311
696
+ #: includes/fields/class-acf-field-select.php:433
697
+ #: pro/fields/class-acf-field-flexible-content.php:582
698
+ msgid "Label"
699
+ msgstr "Intitulé"
700
+
701
+ # @ acf
702
+ #: includes/admin/views/field-group-fields.php:6
703
+ #: includes/fields/class-acf-field-taxonomy.php:939
704
+ #: pro/fields/class-acf-field-flexible-content.php:596
705
+ msgid "Name"
706
+ msgstr "Nom"
707
+
708
+ #: includes/admin/views/field-group-fields.php:7
709
+ msgid "Key"
710
+ msgstr "Identifiant"
711
+
712
+ # @ acf
713
+ #: includes/admin/views/field-group-fields.php:8
714
+ msgid "Type"
715
+ msgstr "Type"
716
+
717
+ # @ acf
718
+ #: includes/admin/views/field-group-fields.php:14
719
+ msgid ""
720
+ "No fields. Click the <strong>+ Add Field</strong> button to create your "
721
+ "first field."
722
+ msgstr ""
723
+ "Aucun champ. Cliquez sur le bouton <strong>+ Ajouter un champ</strong> pour "
724
+ "créer votre premier champ."
725
+
726
+ # @ acf
727
+ #: includes/admin/views/field-group-fields.php:31
728
+ msgid "+ Add Field"
729
+ msgstr "+ Ajouter un champ"
730
+
731
+ # @ acf
732
+ #: includes/admin/views/field-group-locations.php:9
733
+ msgid "Rules"
734
+ msgstr "Règles"
735
+
736
+ # @ acf
737
+ #: includes/admin/views/field-group-locations.php:10
738
+ msgid ""
739
+ "Create a set of rules to determine which edit screens will use these "
740
+ "advanced custom fields"
741
+ msgstr ""
742
+ "Créez une série de règles pour déterminer les écrans sur lesquels ce groupe "
743
+ "de champs sera utilisé"
744
+
745
+ # @ acf
746
+ #: includes/admin/views/field-group-options.php:23
747
+ msgid "Style"
748
+ msgstr "Style"
749
+
750
+ #: includes/admin/views/field-group-options.php:30
751
+ msgid "Standard (WP metabox)"
752
+ msgstr "Standard (boîte WP)"
753
+
754
+ #: includes/admin/views/field-group-options.php:31
755
+ msgid "Seamless (no metabox)"
756
+ msgstr "Sans contour (directement dans la page)"
757
+
758
+ # @ acf
759
+ #: includes/admin/views/field-group-options.php:38
760
+ msgid "Position"
761
+ msgstr "Position"
762
+
763
+ #: includes/admin/views/field-group-options.php:45
764
+ msgid "High (after title)"
765
+ msgstr "Haute (après le titre)"
766
+
767
+ #: includes/admin/views/field-group-options.php:46
768
+ msgid "Normal (after content)"
769
+ msgstr "Normal (après le contenu)"
770
+
771
+ #: includes/admin/views/field-group-options.php:47
772
+ msgid "Side"
773
+ msgstr "Sur le côté"
774
+
775
+ #: includes/admin/views/field-group-options.php:55
776
+ msgid "Label placement"
777
+ msgstr "Emplacement de l'intitulé"
778
+
779
+ #: includes/admin/views/field-group-options.php:62
780
+ #: includes/fields/class-acf-field-tab.php:106
781
+ msgid "Top aligned"
782
+ msgstr "Aligné en haut"
783
+
784
+ #: includes/admin/views/field-group-options.php:63
785
+ #: includes/fields/class-acf-field-tab.php:107
786
+ msgid "Left aligned"
787
+ msgstr "Aligné à gauche"
788
+
789
+ # @ acf
790
+ #: includes/admin/views/field-group-options.php:70
791
+ msgid "Instruction placement"
792
+ msgstr "Emplacement des instructions"
793
+
794
+ # @ acf
795
+ #: includes/admin/views/field-group-options.php:77
796
+ msgid "Below labels"
797
+ msgstr "Sous les intitulés"
798
+
799
+ # @ acf
800
+ #: includes/admin/views/field-group-options.php:78
801
+ msgid "Below fields"
802
+ msgstr "Sous les champs"
803
+
804
+ # @ acf
805
+ #: includes/admin/views/field-group-options.php:85
806
+ msgid "Order No."
807
+ msgstr "Ordre"
808
+
809
+ #: includes/admin/views/field-group-options.php:86
810
+ msgid "Field groups with a lower order will appear first"
811
+ msgstr ""
812
+ "Le groupe de champs qui a l’ordre le plus petit sera affiché en premier"
813
+
814
+ #: includes/admin/views/field-group-options.php:97
815
+ msgid "Shown in field group list"
816
+ msgstr "Affiché dans la liste des groupes de champs"
817
+
818
+ #: includes/admin/views/field-group-options.php:107
819
+ msgid "Permalink"
820
+ msgstr "Permalien"
821
+
822
+ #: includes/admin/views/field-group-options.php:108
823
+ msgid "Content Editor"
824
+ msgstr "Éditeur de contenu"
825
+
826
+ #: includes/admin/views/field-group-options.php:109
827
+ msgid "Excerpt"
828
+ msgstr "Extrait"
829
+
830
+ #: includes/admin/views/field-group-options.php:111
831
+ msgid "Discussion"
832
+ msgstr "Discussion"
833
+
834
+ #: includes/admin/views/field-group-options.php:112
835
+ msgid "Comments"
836
+ msgstr "Commentaires"
837
+
838
+ #: includes/admin/views/field-group-options.php:113
839
+ msgid "Revisions"
840
+ msgstr "Révisions"
841
+
842
+ #: includes/admin/views/field-group-options.php:114
843
+ msgid "Slug"
844
+ msgstr "Identifiant (slug)"
845
+
846
+ #: includes/admin/views/field-group-options.php:115
847
+ msgid "Author"
848
+ msgstr "Auteur"
849
+
850
+ # @ acf
851
+ #: includes/admin/views/field-group-options.php:116
852
+ msgid "Format"
853
+ msgstr "Format"
854
+
855
+ #: includes/admin/views/field-group-options.php:117
856
+ msgid "Page Attributes"
857
+ msgstr "Attributs de page"
858
+
859
+ # @ acf
860
+ #: includes/admin/views/field-group-options.php:118
861
+ #: includes/fields/class-acf-field-relationship.php:607
862
+ msgid "Featured Image"
863
+ msgstr "Image à la Une"
864
+
865
+ #: includes/admin/views/field-group-options.php:119
866
+ msgid "Categories"
867
+ msgstr "Catégories"
868
+
869
+ #: includes/admin/views/field-group-options.php:120
870
+ msgid "Tags"
871
+ msgstr "Mots-clés"
872
+
873
+ #: includes/admin/views/field-group-options.php:121
874
+ msgid "Send Trackbacks"
875
+ msgstr "Envoyer des rétroliens"
876
+
877
+ #: includes/admin/views/field-group-options.php:128
878
+ msgid "Hide on screen"
879
+ msgstr "Masquer"
880
+
881
+ # @ acf
882
+ #: includes/admin/views/field-group-options.php:129
883
+ msgid "<b>Select</b> items to <b>hide</b> them from the edit screen."
884
+ msgstr ""
885
+ "<b>Sélectionnez</b> les champs que vous souhaitez <b>masquer</b> sur la page "
886
+ "d‘édition."
887
+
888
+ # @ acf
889
+ #: includes/admin/views/field-group-options.php:129
890
+ msgid ""
891
+ "If multiple field groups appear on an edit screen, the first field group's "
892
+ "options will be used (the one with the lowest order number)"
893
+ msgstr ""
894
+ "Si plusieurs groupes ACF sont présents sur une page d‘édition, le groupe "
895
+ "portant le numéro le plus bas sera affiché en premier"
896
+
897
+ #: includes/admin/views/html-admin-page-upgrade-network.php:26
898
+ #, php-format
899
+ msgid ""
900
+ "The following sites require a DB upgrade. Check the ones you want to update "
901
+ "and then click %s."
902
+ msgstr ""
903
+ "Les sites suivants nécessites une mise à niveau de la base de données. "
904
+ "Sélectionnez ceux que vous voulez mettre à jour et cliquez sur %s."
905
+
906
+ #: includes/admin/views/html-admin-page-upgrade-network.php:26
907
+ #: includes/admin/views/html-admin-page-upgrade-network.php:27
908
+ #: includes/admin/views/html-admin-page-upgrade-network.php:92
909
+ msgid "Upgrade Sites"
910
+ msgstr "Mettre à niveau les sites"
911
+
912
+ #: includes/admin/views/html-admin-page-upgrade-network.php:36
913
+ #: includes/admin/views/html-admin-page-upgrade-network.php:47
914
+ msgid "Site"
915
+ msgstr "Site"
916
+
917
+ #: includes/admin/views/html-admin-page-upgrade-network.php:74
918
+ #, php-format
919
+ msgid "Site requires database upgrade from %s to %s"
920
+ msgstr "Le site requiert une mise à niveau de la base données de %s à %s"
921
+
922
+ #: includes/admin/views/html-admin-page-upgrade-network.php:76
923
+ msgid "Site is up to date"
924
+ msgstr "Le site est à jour"
925
+
926
+ #: includes/admin/views/html-admin-page-upgrade-network.php:93
927
+ #, php-format
928
+ msgid ""
929
+ "Database Upgrade complete. <a href=\"%s\">Return to network dashboard</a>"
930
+ msgstr ""
931
+ "Mise à niveau de la base de données effectuée. <a href=\"%s\">Retourner au "
932
+ "panneau d'administration du réseau</a>"
933
+
934
+ #: includes/admin/views/html-admin-page-upgrade-network.php:113
935
+ msgid "Please select at least one site to upgrade."
936
+ msgstr "Merci de sélectionner au moins un site à mettre à niveau."
937
+
938
+ #: includes/admin/views/html-admin-page-upgrade-network.php:117
939
+ #: includes/admin/views/html-notice-upgrade.php:38
940
+ msgid ""
941
+ "It is strongly recommended that you backup your database before proceeding. "
942
+ "Are you sure you wish to run the updater now?"
943
+ msgstr ""
944
+ "Il est fortement recommandé de faire une sauvegarde de votre base de données "
945
+ "avant de continuer. Êtes-vous sûr de vouloir lancer la mise à niveau "
946
+ "maintenant?"
947
+
948
+ #: includes/admin/views/html-admin-page-upgrade-network.php:144
949
+ #: includes/admin/views/html-admin-page-upgrade.php:31
950
+ #, php-format
951
+ msgid "Upgrading data to version %s"
952
+ msgstr "Migration des données vers la version %s"
953
+
954
+ #: includes/admin/views/html-admin-page-upgrade-network.php:167
955
+ msgid "Upgrade complete."
956
+ msgstr "Mise à niveau terminée."
957
+
958
+ #: includes/admin/views/html-admin-page-upgrade-network.php:176
959
+ #: includes/admin/views/html-admin-page-upgrade-network.php:185
960
+ #: includes/admin/views/html-admin-page-upgrade.php:78
961
+ #: includes/admin/views/html-admin-page-upgrade.php:87
962
+ msgid "Upgrade failed."
963
+ msgstr "Mise à niveau échouée."
964
+
965
+ #: includes/admin/views/html-admin-page-upgrade.php:30
966
+ msgid "Reading upgrade tasks..."
967
+ msgstr "Lecture des instructions de mise à niveau…"
968
+
969
+ #: includes/admin/views/html-admin-page-upgrade.php:33
970
+ #, php-format
971
+ msgid "Database upgrade complete. <a href=\"%s\">See what's new</a>"
972
+ msgstr ""
973
+ "Mise à niveau de la base de données terminée. <a href=\"%s\">Consulter les "
974
+ "nouveautés</a>"
975
+
976
+ # @ acf
977
+ #: includes/admin/views/html-admin-page-upgrade.php:116
978
+ #: includes/ajax/class-acf-ajax-upgrade.php:32
979
+ msgid "No updates available."
980
+ msgstr "Aucune mise-à-jour disponible."
981
+
982
+ #: includes/admin/views/html-admin-tools.php:21
983
+ msgid "Back to all tools"
984
+ msgstr "Retour aux outils"
985
+
986
+ #: includes/admin/views/html-location-group.php:3
987
+ msgid "Show this field group if"
988
+ msgstr "Montrer ce groupe si"
989
+
990
+ # @ acf
991
+ #: includes/admin/views/html-notice-upgrade.php:8
992
+ #: pro/fields/class-acf-field-repeater.php:25
993
+ msgid "Repeater"
994
+ msgstr "Répéteur"
995
+
996
+ # @ acf
997
+ #: includes/admin/views/html-notice-upgrade.php:9
998
+ #: pro/fields/class-acf-field-flexible-content.php:25
999
+ msgid "Flexible Content"
1000
+ msgstr "Contenu flexible"
1001
+
1002
+ # @ acf
1003
+ #: includes/admin/views/html-notice-upgrade.php:10
1004
+ #: pro/fields/class-acf-field-gallery.php:25
1005
+ msgid "Gallery"
1006
+ msgstr "Galerie"
1007
+
1008
+ # @ acf
1009
+ #: includes/admin/views/html-notice-upgrade.php:11
1010
+ #: pro/locations/class-acf-location-options-page.php:26
1011
+ msgid "Options Page"
1012
+ msgstr "Page d‘options"
1013
+
1014
+ #: includes/admin/views/html-notice-upgrade.php:21
1015
+ msgid "Database Upgrade Required"
1016
+ msgstr "Mise-à-jour de la base de données nécessaire"
1017
+
1018
+ #: includes/admin/views/html-notice-upgrade.php:22
1019
+ #, php-format
1020
+ msgid "Thank you for updating to %s v%s!"
1021
+ msgstr "Merci d'avoir mis-à-jour %s v%s!"
1022
+
1023
+ #: includes/admin/views/html-notice-upgrade.php:22
1024
+ msgid ""
1025
+ "This version contains improvements to your database and requires an upgrade."
1026
+ msgstr ""
1027
+ "Cette version contient des améliorations de la base de données et nécessite "
1028
+ "une mise à niveau."
1029
+
1030
+ #: includes/admin/views/html-notice-upgrade.php:24
1031
+ #, php-format
1032
+ msgid ""
1033
+ "Please also check all premium add-ons (%s) are updated to the latest version."
1034
+ msgstr ""
1035
+ "Veuillez également vérifier que tous les modules d’extension premium (%s) "
1036
+ "soient à jour à leur dernière version disponible."
1037
+
1038
+ # @ acf
1039
+ #: includes/admin/views/settings-addons.php:3
1040
+ msgid "Add-ons"
1041
+ msgstr "Modules d’extension"
1042
+
1043
+ # @ acf
1044
+ #: includes/admin/views/settings-addons.php:17
1045
+ msgid "Download & Install"
1046
+ msgstr "Télécharger & installer"
1047
+
1048
+ #: includes/admin/views/settings-addons.php:36
1049
+ msgid "Installed"
1050
+ msgstr "Installé"
1051
+
1052
+ # @ acf
1053
+ #: includes/admin/views/settings-info.php:3
1054
+ msgid "Welcome to Advanced Custom Fields"
1055
+ msgstr "Bienvenue sur Advanced Custom Fields"
1056
+
1057
+ #: includes/admin/views/settings-info.php:4
1058
+ #, php-format
1059
+ msgid ""
1060
+ "Thank you for updating! ACF %s is bigger and better than ever before. We "
1061
+ "hope you like it."
1062
+ msgstr ""
1063
+ "Merci d'avoir mis à jour! ACF %s est plus performant que jamais. Nous "
1064
+ "espérons que vous l'apprécierez."
1065
+
1066
+ #: includes/admin/views/settings-info.php:15
1067
+ msgid "A Smoother Experience"
1068
+ msgstr "Une expérience plus fluide"
1069
+
1070
+ #: includes/admin/views/settings-info.php:19
1071
+ msgid "Improved Usability"
1072
+ msgstr "Convivialité améliorée"
1073
+
1074
+ #: includes/admin/views/settings-info.php:20
1075
+ msgid ""
1076
+ "Including the popular Select2 library has improved both usability and speed "
1077
+ "across a number of field types including post object, page link, taxonomy "
1078
+ "and select."
1079
+ msgstr ""
1080
+ "ACF inclue désormais la librairie populaire Select2, qui améliore "
1081
+ "l'ergonomie et la vitesse sur plusieurs types de champs dont l'objet "
1082
+ "article, lien vers page, taxonomie, et sélection."
1083
+
1084
+ #: includes/admin/views/settings-info.php:24
1085
+ msgid "Improved Design"
1086
+ msgstr "Design amélioré"
1087
+
1088
+ #: includes/admin/views/settings-info.php:25
1089
+ msgid ""
1090
+ "Many fields have undergone a visual refresh to make ACF look better than "
1091
+ "ever! Noticeable changes are seen on the gallery, relationship and oEmbed "
1092
+ "(new) fields!"
1093
+ msgstr ""
1094
+ "Plusieurs champs ont reçu une refonte graphique pour qu'ACF apparaisse sous "
1095
+ "son plus beau jour! Les améliorations sont notamment visibles sur la "
1096
+ "galerie, le champ relationnel et le petit nouveau : oEmbed (champ de contenu "
1097
+ "embarqué)!"
1098
+
1099
+ #: includes/admin/views/settings-info.php:29
1100
+ msgid "Improved Data"
1101
+ msgstr "Données améliorées"
1102
+
1103
+ #: includes/admin/views/settings-info.php:30
1104
+ msgid ""
1105
+ "Redesigning the data architecture has allowed sub fields to live "
1106
+ "independently from their parents. This allows you to drag and drop fields in "
1107
+ "and out of parent fields!"
1108
+ msgstr ""
1109
+ "L'architecture des données a été complètement revue et permet dorénavant aux "
1110
+ "sous-champs de vivre indépendamment de leurs parents. Cela permet de "
1111
+ "déplacer les champs en dehors de leurs parents!"
1112
+
1113
+ #: includes/admin/views/settings-info.php:38
1114
+ msgid "Goodbye Add-ons. Hello PRO"
1115
+ msgstr "Au revoir modules d’extension. Bonjour ACF Pro"
1116
+
1117
+ #: includes/admin/views/settings-info.php:41
1118
+ msgid "Introducing ACF PRO"
1119
+ msgstr "Découvrez ACF PRO"
1120
+
1121
+ #: includes/admin/views/settings-info.php:42
1122
+ msgid ""
1123
+ "We're changing the way premium functionality is delivered in an exciting way!"
1124
+ msgstr ""
1125
+ "Nous avons changé la façon dont les fonctionnalités premium sont délivrées!"
1126
+
1127
+ #: includes/admin/views/settings-info.php:43
1128
+ #, php-format
1129
+ msgid ""
1130
+ "All 4 premium add-ons have been combined into a new <a href=\"%s\">Pro "
1131
+ "version of ACF</a>. With both personal and developer licenses available, "
1132
+ "premium functionality is more affordable and accessible than ever before!"
1133
+ msgstr ""
1134
+ "Les 4 modules d’extension premium (répéteur, galerie, contenu flexible et "
1135
+ "pages d'options) ont été combinés en une toute nouvelle <a href=\"%s"
1136
+ "\">version PRO d'ACF</a>. Avec des licences personnelles et développeur "
1137
+ "disponibles, les fonctionnalités premium sont encore plus accessibles que "
1138
+ "jamais!"
1139
+
1140
+ #: includes/admin/views/settings-info.php:47
1141
+ msgid "Powerful Features"
1142
+ msgstr "Nouvelles fonctionnalités surpuissantes"
1143
+
1144
+ #: includes/admin/views/settings-info.php:48
1145
+ msgid ""
1146
+ "ACF PRO contains powerful features such as repeatable data, flexible content "
1147
+ "layouts, a beautiful gallery field and the ability to create extra admin "
1148
+ "options pages!"
1149
+ msgstr ""
1150
+ "ACF PRO contient de nouvelles super fonctionnalités telles que les champs "
1151
+ "répéteurs, les dispositions flexibles, une superbe galerie et la possibilité "
1152
+ "de créer des pages d'options!"
1153
+
1154
+ #: includes/admin/views/settings-info.php:49
1155
+ #, php-format
1156
+ msgid "Read more about <a href=\"%s\">ACF PRO features</a>."
1157
+ msgstr ""
1158
+ "En savoir plus à propos des <a href=\"%s\">fonctionnalités d’ACF PRO</a>."
1159
+
1160
+ # @ wp3i
1161
+ #: includes/admin/views/settings-info.php:53
1162
+ msgid "Easy Upgrading"
1163
+ msgstr "Mise à niveau facile"
1164
+
1165
+ #: includes/admin/views/settings-info.php:54
1166
+ msgid ""
1167
+ "Upgrading to ACF PRO is easy. Simply purchase a license online and download "
1168
+ "the plugin!"
1169
+ msgstr ""
1170
+ "La mise à niveau vers ACF PRO est facile. Achetez simplement une licence en "
1171
+ "ligne et téléchargez l'extension!"
1172
+
1173
+ #: includes/admin/views/settings-info.php:55
1174
+ #, php-format
1175
+ msgid ""
1176
+ "We also wrote an <a href=\"%s\">upgrade guide</a> to answer any questions, "
1177
+ "but if you do have one, please contact our support team via the <a href=\"%s"
1178
+ "\">help desk</a>."
1179
+ msgstr ""
1180
+ "Nous avons également écrit un <a href=\"%s\">guide de mise à niveau</a> pour "
1181
+ "répondre aux questions habituelles, mais si vous avez une question "
1182
+ "spécifique, veuillez contacter notre équipe de support via le <a href=\"%s"
1183
+ "\">support technique</a>."
1184
+
1185
+ #: includes/admin/views/settings-info.php:64
1186
+ msgid "New Features"
1187
+ msgstr "Nouvelles Fonctionnalités"
1188
+
1189
+ #: includes/admin/views/settings-info.php:69
1190
+ msgid "Link Field"
1191
+ msgstr "Champ Lien"
1192
+
1193
+ #: includes/admin/views/settings-info.php:70
1194
+ msgid ""
1195
+ "The Link field provides a simple way to select or define a link (url, title, "
1196
+ "target)."
1197
+ msgstr ""
1198
+ "Le champ Lien permet de sélectionner ou définir un lien en toute simplicité "
1199
+ "(URL, titre, cible)."
1200
+
1201
+ #: includes/admin/views/settings-info.php:74
1202
+ msgid "Group Field"
1203
+ msgstr "Champ Groupe"
1204
+
1205
+ #: includes/admin/views/settings-info.php:75
1206
+ msgid "The Group field provides a simple way to create a group of fields."
1207
+ msgstr ""
1208
+ "Le champ Groupe permet de créer un groupe de champs en toute simplicité."
1209
+
1210
+ #: includes/admin/views/settings-info.php:79
1211
+ msgid "oEmbed Field"
1212
+ msgstr "Champ de Contenu Embarqué (oEmbed)"
1213
+
1214
+ #: includes/admin/views/settings-info.php:80
1215
+ msgid ""
1216
+ "The oEmbed field allows an easy way to embed videos, images, tweets, audio, "
1217
+ "and other content."
1218
+ msgstr ""
1219
+ "Le champ oEmbed vous permet d'embarquer des vidéos, des images, des tweets, "
1220
+ "de l'audio ou encore d'autres médias en toute simplicité."
1221
+
1222
+ #: includes/admin/views/settings-info.php:84
1223
+ msgid "Clone Field"
1224
+ msgstr "Champ Clone"
1225
+
1226
+ #: includes/admin/views/settings-info.php:85
1227
+ msgid "The clone field allows you to select and display existing fields."
1228
+ msgstr ""
1229
+ "Le champ Clone vous permet de sélectionner et afficher des champs existants."
1230
+
1231
+ #: includes/admin/views/settings-info.php:89
1232
+ msgid "More AJAX"
1233
+ msgstr "Plus d'AJAX"
1234
+
1235
+ #: includes/admin/views/settings-info.php:90
1236
+ msgid "More fields use AJAX powered search to speed up page loading."
1237
+ msgstr ""
1238
+ "Plus de champs utilisent maintenant la recherche via AJAX afin d'améliorer "
1239
+ "le temps de chargement des pages."
1240
+
1241
+ #: includes/admin/views/settings-info.php:94
1242
+ msgid "Local JSON"
1243
+ msgstr "JSON Local"
1244
+
1245
+ #: includes/admin/views/settings-info.php:95
1246
+ msgid ""
1247
+ "New auto export to JSON feature improves speed and allows for syncronisation."
1248
+ msgstr ""
1249
+ "La nouvelle fonctionnalité d'export automatique en JSON améliore la rapidité "
1250
+ "et simplifie la synchronisation."
1251
+
1252
+ #: includes/admin/views/settings-info.php:99
1253
+ msgid "Easy Import / Export"
1254
+ msgstr "Import / Export Facile"
1255
+
1256
+ #: includes/admin/views/settings-info.php:100
1257
+ msgid "Both import and export can easily be done through a new tools page."
1258
+ msgstr ""
1259
+ "Les imports et exports de données d'ACF sont encore plus simples à réaliser "
1260
+ "via notre nouvelle page d'outils."
1261
+
1262
+ #: includes/admin/views/settings-info.php:104
1263
+ msgid "New Form Locations"
1264
+ msgstr "Nouveaux Emplacements de Champs"
1265
+
1266
+ #: includes/admin/views/settings-info.php:105
1267
+ msgid ""
1268
+ "Fields can now be mapped to menus, menu items, comments, widgets and all "
1269
+ "user forms!"
1270
+ msgstr ""
1271
+ "Les champs peuvent désormais être intégrés dans les menus, éléments de menu, "
1272
+ "commentaires, widgets et tous les formulaires utilisateurs!"
1273
+
1274
+ #: includes/admin/views/settings-info.php:109
1275
+ msgid "More Customization"
1276
+ msgstr "Encore plus de Personnalisation"
1277
+
1278
+ #: includes/admin/views/settings-info.php:110
1279
+ msgid ""
1280
+ "New PHP (and JS) actions and filters have been added to allow for more "
1281
+ "customization."
1282
+ msgstr ""
1283
+ "De nouveaux filtres et actions PHP (et JS) ont été ajoutés afin de vous "
1284
+ "permettre plus de personnalisation."
1285
+
1286
+ #: includes/admin/views/settings-info.php:114
1287
+ msgid "Fresh UI"
1288
+ msgstr "Interface Améliorée"
1289
+
1290
+ #: includes/admin/views/settings-info.php:115
1291
+ msgid ""
1292
+ "The entire plugin has had a design refresh including new field types, "
1293
+ "settings and design!"
1294
+ msgstr ""
1295
+ "Toute l'extension a été améliorée et inclut de nouveaux types de champs, "
1296
+ "réglages ainsi qu'un nouveau design!"
1297
+
1298
+ #: includes/admin/views/settings-info.php:119
1299
+ msgid "New Settings"
1300
+ msgstr "Nouveaux Paramètres"
1301
+
1302
+ #: includes/admin/views/settings-info.php:120
1303
+ msgid ""
1304
+ "Field group settings have been added for Active, Label Placement, "
1305
+ "Instructions Placement and Description."
1306
+ msgstr ""
1307
+ "De nouveaux réglages font leur apparition pour Actif, Emplacement du Label, "
1308
+ "Emplacement des Instructions et Description."
1309
+
1310
+ #: includes/admin/views/settings-info.php:124
1311
+ msgid "Better Front End Forms"
1312
+ msgstr "De meilleurs formulaires côté public"
1313
+
1314
+ #: includes/admin/views/settings-info.php:125
1315
+ msgid ""
1316
+ "acf_form() can now create a new post on submission with lots of new settings."
1317
+ msgstr ""
1318
+ "acf_form() peut maintenant créer un nouvel article lors de la soumission et "
1319
+ "propose de nombreux réglages."
1320
+
1321
+ #: includes/admin/views/settings-info.php:129
1322
+ msgid "Better Validation"
1323
+ msgstr "Meilleure validation"
1324
+
1325
+ #: includes/admin/views/settings-info.php:130
1326
+ msgid "Form validation is now done via PHP + AJAX in favour of only JS."
1327
+ msgstr ""
1328
+ "La validation des formulaires est maintenant faite via PHP + AJAX au lieu "
1329
+ "d'être seulement faite en JS."
1330
+
1331
+ # @ acf
1332
+ #: includes/admin/views/settings-info.php:134
1333
+ msgid "Moving Fields"
1334
+ msgstr "Champs amovibles"
1335
+
1336
+ #: includes/admin/views/settings-info.php:135
1337
+ msgid ""
1338
+ "New field group functionality allows you to move a field between groups & "
1339
+ "parents."
1340
+ msgstr ""
1341
+ "La nouvelle fonctionnalité de Groupe de Champ vous permet de déplacer un "
1342
+ "champ entre différents groupes et parents."
1343
+
1344
+ #: includes/admin/views/settings-info.php:146
1345
+ #, php-format
1346
+ msgid "We think you'll love the changes in %s."
1347
+ msgstr "Nous pensons que vous allez adorer les nouveautés de la version %s."
1348
+
1349
+ #: includes/api/api-helpers.php:1049
1350
+ msgid "Thumbnail"
1351
+ msgstr "Miniature"
1352
+
1353
+ #: includes/api/api-helpers.php:1050
1354
+ msgid "Medium"
1355
+ msgstr "Moyen"
1356
+
1357
+ #: includes/api/api-helpers.php:1051
1358
+ msgid "Large"
1359
+ msgstr "Grande"
1360
+
1361
+ #: includes/api/api-helpers.php:1100
1362
+ msgid "Full Size"
1363
+ msgstr "Taille originale"
1364
+
1365
+ # @ acf
1366
+ #: includes/api/api-helpers.php:1821 includes/api/api-term.php:147
1367
+ #: pro/fields/class-acf-field-clone.php:996
1368
+ msgid "(no title)"
1369
+ msgstr "(sans titre)"
1370
+
1371
+ #: includes/api/api-helpers.php:3792
1372
+ #, php-format
1373
+ msgid "Image width must be at least %dpx."
1374
+ msgstr "L'image doit mesurer au moins %dpx de largeur."
1375
+
1376
+ #: includes/api/api-helpers.php:3797
1377
+ #, php-format
1378
+ msgid "Image width must not exceed %dpx."
1379
+ msgstr "L'image ne doit pas dépasser %dpx de largeur."
1380
+
1381
+ #: includes/api/api-helpers.php:3813
1382
+ #, php-format
1383
+ msgid "Image height must be at least %dpx."
1384
+ msgstr "L'image doit mesurer au moins %dpx de hauteur."
1385
+
1386
+ #: includes/api/api-helpers.php:3818
1387
+ #, php-format
1388
+ msgid "Image height must not exceed %dpx."
1389
+ msgstr "L'image ne doit pas dépasser %dpx de hauteur."
1390
+
1391
+ #: includes/api/api-helpers.php:3836
1392
+ #, php-format
1393
+ msgid "File size must be at least %s."
1394
+ msgstr "Le poids de l'image doit être d'au moins %s."
1395
+
1396
+ #: includes/api/api-helpers.php:3841
1397
+ #, php-format
1398
+ msgid "File size must must not exceed %s."
1399
+ msgstr "Le poids de l'image ne doit pas dépasser %s."
1400
+
1401
+ # @ acf
1402
+ #: includes/api/api-helpers.php:3875
1403
+ #, php-format
1404
+ msgid "File type must be %s."
1405
+ msgstr "Le type de fichier doit être %s."
1406
+
1407
+ #: includes/assets.php:168
1408
+ msgid "The changes you made will be lost if you navigate away from this page"
1409
+ msgstr "Les modifications seront perdues si vous quittez cette page"
1410
+
1411
+ #: includes/assets.php:171 includes/fields/class-acf-field-select.php:259
1412
+ msgctxt "verb"
1413
+ msgid "Select"
1414
+ msgstr "Choisir"
1415
+
1416
+ #: includes/assets.php:172
1417
+ msgctxt "verb"
1418
+ msgid "Edit"
1419
+ msgstr "Modifier"
1420
+
1421
+ #: includes/assets.php:173
1422
+ msgctxt "verb"
1423
+ msgid "Update"
1424
+ msgstr "Mettre à jour"
1425
+
1426
+ #: includes/assets.php:174
1427
+ msgid "Uploaded to this post"
1428
+ msgstr "Lié(s) à cet article"
1429
+
1430
+ #: includes/assets.php:175
1431
+ msgid "Expand Details"
1432
+ msgstr "Afficher les détails"
1433
+
1434
+ #: includes/assets.php:176
1435
+ msgid "Collapse Details"
1436
+ msgstr "Masquer les détails"
1437
+
1438
+ #: includes/assets.php:177
1439
+ msgid "Restricted"
1440
+ msgstr "Limité"
1441
+
1442
+ # @ acf
1443
+ #: includes/assets.php:178 includes/fields/class-acf-field-image.php:66
1444
+ msgid "All images"
1445
+ msgstr "Toutes les images"
1446
+
1447
+ #: includes/assets.php:181
1448
+ msgid "Validation successful"
1449
+ msgstr "Validé avec succès"
1450
+
1451
+ #: includes/assets.php:182 includes/validation.php:285
1452
+ #: includes/validation.php:296
1453
+ msgid "Validation failed"
1454
+ msgstr "Échec de la validation"
1455
+
1456
+ #: includes/assets.php:183
1457
+ msgid "1 field requires attention"
1458
+ msgstr "1 champ requiert votre attention"
1459
+
1460
+ #: includes/assets.php:184
1461
+ #, php-format
1462
+ msgid "%d fields require attention"
1463
+ msgstr "%d champs requièrent votre attention"
1464
+
1465
+ # @ acf
1466
+ #: includes/assets.php:187
1467
+ msgid "Are you sure?"
1468
+ msgstr "Êtes-vous sûr(e)?"
1469
+
1470
+ #: includes/assets.php:188 includes/fields/class-acf-field-true_false.php:79
1471
+ #: includes/fields/class-acf-field-true_false.php:159
1472
+ #: pro/admin/views/html-settings-updates.php:89
1473
+ msgid "Yes"
1474
+ msgstr "Oui"
1475
+
1476
+ #: includes/assets.php:189 includes/fields/class-acf-field-true_false.php:80
1477
+ #: includes/fields/class-acf-field-true_false.php:174
1478
+ #: pro/admin/views/html-settings-updates.php:99
1479
+ msgid "No"
1480
+ msgstr "Non"
1481
+
1482
+ # @ acf
1483
+ #: includes/assets.php:190 includes/fields/class-acf-field-file.php:154
1484
+ #: includes/fields/class-acf-field-image.php:140
1485
+ #: includes/fields/class-acf-field-link.php:140
1486
+ #: pro/fields/class-acf-field-gallery.php:362
1487
+ #: pro/fields/class-acf-field-gallery.php:499
1488
+ msgid "Remove"
1489
+ msgstr "Enlever"
1490
+
1491
+ #: includes/assets.php:191
1492
+ msgid "Cancel"
1493
+ msgstr "Annuler"
1494
+
1495
+ #: includes/assets.php:194
1496
+ msgid "Has any value"
1497
+ msgstr "A n'importe quelle valeur"
1498
+
1499
+ #: includes/assets.php:195
1500
+ msgid "Has no value"
1501
+ msgstr "N'a pas de valeur"
1502
+
1503
+ #: includes/assets.php:196
1504
+ msgid "Value is equal to"
1505
+ msgstr "La valeur est égale à"
1506
+
1507
+ #: includes/assets.php:197
1508
+ msgid "Value is not equal to"
1509
+ msgstr "La valeur est différente de"
1510
+
1511
+ #: includes/assets.php:198
1512
+ msgid "Value matches pattern"
1513
+ msgstr "La valeur correspond au modèle"
1514
+
1515
+ #: includes/assets.php:199
1516
+ msgid "Value contains"
1517
+ msgstr "La valeur contient"
1518
+
1519
+ #: includes/assets.php:200
1520
+ msgid "Value is greater than"
1521
+ msgstr "La valeur est supérieure à"
1522
+
1523
+ #: includes/assets.php:201
1524
+ msgid "Value is less than"
1525
+ msgstr "La valeur est inférieure à"
1526
+
1527
+ #: includes/assets.php:202
1528
+ msgid "Selection is greater than"
1529
+ msgstr "La sélection est supérieure à"
1530
+
1531
+ #: includes/assets.php:203
1532
+ msgid "Selection is less than"
1533
+ msgstr "La sélection est inférieure à"
1534
+
1535
+ # @ acf
1536
+ #: includes/assets.php:206 includes/forms/form-comment.php:166
1537
+ #: pro/admin/admin-options-page.php:325
1538
+ msgid "Edit field group"
1539
+ msgstr "Modifier le groupe de champs"
1540
+
1541
+ # @ acf
1542
+ #: includes/fields.php:308
1543
+ msgid "Field type does not exist"
1544
+ msgstr "Ce type de champ n‘existe pas"
1545
+
1546
+ #: includes/fields.php:308
1547
+ msgid "Unknown"
1548
+ msgstr "Inconnu"
1549
+
1550
+ #: includes/fields.php:349
1551
+ msgid "Basic"
1552
+ msgstr "Commun"
1553
+
1554
+ #: includes/fields.php:350 includes/forms/form-front.php:47
1555
+ msgid "Content"
1556
+ msgstr "Contenu"
1557
+
1558
+ # @ acf
1559
+ #: includes/fields.php:351
1560
+ msgid "Choice"
1561
+ msgstr "Choix"
1562
+
1563
+ # @ acf
1564
+ #: includes/fields.php:352
1565
+ msgid "Relational"
1566
+ msgstr "Relationnel"
1567
+
1568
+ #: includes/fields.php:353
1569
+ msgid "jQuery"
1570
+ msgstr "jQuery"
1571
+
1572
+ # @ acf
1573
+ #: includes/fields.php:354 includes/fields/class-acf-field-button-group.php:177
1574
+ #: includes/fields/class-acf-field-checkbox.php:389
1575
+ #: includes/fields/class-acf-field-group.php:474
1576
+ #: includes/fields/class-acf-field-radio.php:290
1577
+ #: pro/fields/class-acf-field-clone.php:843
1578
+ #: pro/fields/class-acf-field-flexible-content.php:553
1579
+ #: pro/fields/class-acf-field-flexible-content.php:602
1580
+ #: pro/fields/class-acf-field-repeater.php:448
1581
+ msgid "Layout"
1582
+ msgstr "Mise en page"
1583
+
1584
+ #: includes/fields/class-acf-field-accordion.php:24
1585
+ msgid "Accordion"
1586
+ msgstr "Accordéon"
1587
+
1588
+ #: includes/fields/class-acf-field-accordion.php:99
1589
+ msgid "Open"
1590
+ msgstr "Ouvert"
1591
+
1592
+ #: includes/fields/class-acf-field-accordion.php:100
1593
+ msgid "Display this accordion as open on page load."
1594
+ msgstr "Ouvrir l'accordéon au chargement de la page."
1595
+
1596
+ #: includes/fields/class-acf-field-accordion.php:109
1597
+ msgid "Multi-expand"
1598
+ msgstr "Ouverture multiple"
1599
+
1600
+ #: includes/fields/class-acf-field-accordion.php:110
1601
+ msgid "Allow this accordion to open without closing others."
1602
+ msgstr "Permettre à cet accordéon de s'ouvrir sans refermer les autres."
1603
+
1604
+ #: includes/fields/class-acf-field-accordion.php:119
1605
+ #: includes/fields/class-acf-field-tab.php:114
1606
+ msgid "Endpoint"
1607
+ msgstr "Extrémité"
1608
+
1609
+ #: includes/fields/class-acf-field-accordion.php:120
1610
+ msgid ""
1611
+ "Define an endpoint for the previous accordion to stop. This accordion will "
1612
+ "not be visible."
1613
+ msgstr ""
1614
+ "Définir comme extrémité de l’accordéon précédent. Cet accordéon ne sera pas "
1615
+ "visible."
1616
+
1617
+ #: includes/fields/class-acf-field-button-group.php:24
1618
+ msgid "Button Group"
1619
+ msgstr "Groupe de boutons"
1620
+
1621
+ # @ acf
1622
+ #: includes/fields/class-acf-field-button-group.php:149
1623
+ #: includes/fields/class-acf-field-checkbox.php:344
1624
+ #: includes/fields/class-acf-field-radio.php:235
1625
+ #: includes/fields/class-acf-field-select.php:364
1626
+ msgid "Choices"
1627
+ msgstr "Choix"
1628
+
1629
+ #: includes/fields/class-acf-field-button-group.php:150
1630
+ #: includes/fields/class-acf-field-checkbox.php:345
1631
+ #: includes/fields/class-acf-field-radio.php:236
1632
+ #: includes/fields/class-acf-field-select.php:365
1633
+ msgid "Enter each choice on a new line."
1634
+ msgstr "Indiquez une valeur par ligne."
1635
+
1636
+ #: includes/fields/class-acf-field-button-group.php:150
1637
+ #: includes/fields/class-acf-field-checkbox.php:345
1638
+ #: includes/fields/class-acf-field-radio.php:236
1639
+ #: includes/fields/class-acf-field-select.php:365
1640
+ msgid "For more control, you may specify both a value and label like this:"
1641
+ msgstr ""
1642
+ "Pour plus de contrôle, vous pouvez spécifier la valeur et le label de cette "
1643
+ "manière :"
1644
+
1645
+ #: includes/fields/class-acf-field-button-group.php:150
1646
+ #: includes/fields/class-acf-field-checkbox.php:345
1647
+ #: includes/fields/class-acf-field-radio.php:236
1648
+ #: includes/fields/class-acf-field-select.php:365
1649
+ msgid "red : Red"
1650
+ msgstr "rouge : Rouge"
1651
+
1652
+ # @ acf
1653
+ #: includes/fields/class-acf-field-button-group.php:158
1654
+ #: includes/fields/class-acf-field-page_link.php:513
1655
+ #: includes/fields/class-acf-field-post_object.php:411
1656
+ #: includes/fields/class-acf-field-radio.php:244
1657
+ #: includes/fields/class-acf-field-select.php:382
1658
+ #: includes/fields/class-acf-field-taxonomy.php:784
1659
+ #: includes/fields/class-acf-field-user.php:393
1660
+ msgid "Allow Null?"
1661
+ msgstr "Autoriser une valeur vide?"
1662
+
1663
+ # @ acf
1664
+ #: includes/fields/class-acf-field-button-group.php:168
1665
+ #: includes/fields/class-acf-field-checkbox.php:380
1666
+ #: includes/fields/class-acf-field-color_picker.php:131
1667
+ #: includes/fields/class-acf-field-email.php:118
1668
+ #: includes/fields/class-acf-field-number.php:127
1669
+ #: includes/fields/class-acf-field-radio.php:281
1670
+ #: includes/fields/class-acf-field-range.php:149
1671
+ #: includes/fields/class-acf-field-select.php:373
1672
+ #: includes/fields/class-acf-field-text.php:95
1673
+ #: includes/fields/class-acf-field-textarea.php:102
1674
+ #: includes/fields/class-acf-field-true_false.php:135
1675
+ #: includes/fields/class-acf-field-url.php:100
1676
+ #: includes/fields/class-acf-field-wysiwyg.php:381
1677
+ msgid "Default Value"
1678
+ msgstr "Valeur par défaut"
1679
+
1680
+ #: includes/fields/class-acf-field-button-group.php:169
1681
+ #: includes/fields/class-acf-field-email.php:119
1682
+ #: includes/fields/class-acf-field-number.php:128
1683
+ #: includes/fields/class-acf-field-radio.php:282
1684
+ #: includes/fields/class-acf-field-range.php:150
1685
+ #: includes/fields/class-acf-field-text.php:96
1686
+ #: includes/fields/class-acf-field-textarea.php:103
1687
+ #: includes/fields/class-acf-field-url.php:101
1688
+ #: includes/fields/class-acf-field-wysiwyg.php:382
1689
+ msgid "Appears when creating a new post"
1690
+ msgstr "Valeur donnée lors de la création d’un nouvel article"
1691
+
1692
+ #: includes/fields/class-acf-field-button-group.php:183
1693
+ #: includes/fields/class-acf-field-checkbox.php:396
1694
+ #: includes/fields/class-acf-field-radio.php:297
1695
+ msgid "Horizontal"
1696
+ msgstr "Horizontal"
1697
+
1698
+ #: includes/fields/class-acf-field-button-group.php:184
1699
+ #: includes/fields/class-acf-field-checkbox.php:395
1700
+ #: includes/fields/class-acf-field-radio.php:296
1701
+ msgid "Vertical"
1702
+ msgstr "Vertical"
1703
+
1704
+ # @ acf
1705
+ #: includes/fields/class-acf-field-button-group.php:191
1706
+ #: includes/fields/class-acf-field-checkbox.php:413
1707
+ #: includes/fields/class-acf-field-file.php:215
1708
+ #: includes/fields/class-acf-field-link.php:166
1709
+ #: includes/fields/class-acf-field-radio.php:304
1710
+ #: includes/fields/class-acf-field-taxonomy.php:829
1711
+ msgid "Return Value"
1712
+ msgstr "Valeur renvoyée"
1713
+
1714
+ #: includes/fields/class-acf-field-button-group.php:192
1715
+ #: includes/fields/class-acf-field-checkbox.php:414
1716
+ #: includes/fields/class-acf-field-file.php:216
1717
+ #: includes/fields/class-acf-field-link.php:167
1718
+ #: includes/fields/class-acf-field-radio.php:305
1719
+ msgid "Specify the returned value on front end"
1720
+ msgstr "Spécifier la valeur retournée dans le code"
1721
+
1722
+ #: includes/fields/class-acf-field-button-group.php:197
1723
+ #: includes/fields/class-acf-field-checkbox.php:419
1724
+ #: includes/fields/class-acf-field-radio.php:310
1725
+ #: includes/fields/class-acf-field-select.php:432
1726
+ msgid "Value"
1727
+ msgstr "Valeur"
1728
+
1729
+ #: includes/fields/class-acf-field-button-group.php:199
1730
+ #: includes/fields/class-acf-field-checkbox.php:421
1731
+ #: includes/fields/class-acf-field-radio.php:312
1732
+ #: includes/fields/class-acf-field-select.php:434
1733
+ msgid "Both (Array)"
1734
+ msgstr "Les deux (tableau)"
1735
+
1736
+ # @ acf
1737
+ #: includes/fields/class-acf-field-checkbox.php:25
1738
+ #: includes/fields/class-acf-field-taxonomy.php:771
1739
+ msgid "Checkbox"
1740
+ msgstr "Case à cocher"
1741
+
1742
+ #: includes/fields/class-acf-field-checkbox.php:154
1743
+ msgid "Toggle All"
1744
+ msgstr "Tout (dé)sélectionner"
1745
+
1746
+ #: includes/fields/class-acf-field-checkbox.php:221
1747
+ msgid "Add new choice"
1748
+ msgstr "Ajouter un choix"
1749
+
1750
+ #: includes/fields/class-acf-field-checkbox.php:353
1751
+ msgid "Allow Custom"
1752
+ msgstr "Autoriser une valeur personnalisée"
1753
+
1754
+ #: includes/fields/class-acf-field-checkbox.php:358
1755
+ msgid "Allow 'custom' values to be added"
1756
+ msgstr "Permettre l’ajout de valeurs personnalisées"
1757
+
1758
+ #: includes/fields/class-acf-field-checkbox.php:364
1759
+ msgid "Save Custom"
1760
+ msgstr "Enregistrer les valeurs personnalisées"
1761
+
1762
+ #: includes/fields/class-acf-field-checkbox.php:369
1763
+ msgid "Save 'custom' values to the field's choices"
1764
+ msgstr "Enregistrer les valeurs personnalisées dans les choix du champs"
1765
+
1766
+ #: includes/fields/class-acf-field-checkbox.php:381
1767
+ #: includes/fields/class-acf-field-select.php:374
1768
+ msgid "Enter each default value on a new line"
1769
+ msgstr "Entrez chaque valeur par défaut sur une nouvelle ligne"
1770
+
1771
+ #: includes/fields/class-acf-field-checkbox.php:403
1772
+ msgid "Toggle"
1773
+ msgstr "Tout (dé)sélectionner"
1774
+
1775
+ #: includes/fields/class-acf-field-checkbox.php:404
1776
+ msgid "Prepend an extra checkbox to toggle all choices"
1777
+ msgstr ""
1778
+ "Ajouter une case à cocher au début pour tout sélectionner/désélectionner"
1779
+
1780
+ # @ acf
1781
+ #: includes/fields/class-acf-field-color_picker.php:25
1782
+ msgid "Color Picker"
1783
+ msgstr "Sélecteur de couleur"
1784
+
1785
+ #: includes/fields/class-acf-field-color_picker.php:68
1786
+ msgid "Clear"
1787
+ msgstr "Effacer"
1788
+
1789
+ # @ acf
1790
+ #: includes/fields/class-acf-field-color_picker.php:69
1791
+ msgid "Default"
1792
+ msgstr "Valeur par défaut"
1793
+
1794
+ # @ acf
1795
+ #: includes/fields/class-acf-field-color_picker.php:70
1796
+ msgid "Select Color"
1797
+ msgstr "Choisir une couleur"
1798
+
1799
+ #: includes/fields/class-acf-field-color_picker.php:71
1800
+ msgid "Current Color"
1801
+ msgstr "Couleur actuelle"
1802
+
1803
+ # @ acf
1804
+ #: includes/fields/class-acf-field-date_picker.php:25
1805
+ msgid "Date Picker"
1806
+ msgstr "Sélecteur de date"
1807
+
1808
+ #: includes/fields/class-acf-field-date_picker.php:59
1809
+ msgctxt "Date Picker JS closeText"
1810
+ msgid "Done"
1811
+ msgstr "Valider"
1812
+
1813
+ #: includes/fields/class-acf-field-date_picker.php:60
1814
+ msgctxt "Date Picker JS currentText"
1815
+ msgid "Today"
1816
+ msgstr "Aujourd’hui"
1817
+
1818
+ #: includes/fields/class-acf-field-date_picker.php:61
1819
+ msgctxt "Date Picker JS nextText"
1820
+ msgid "Next"
1821
+ msgstr "Suiv."
1822
+
1823
+ #: includes/fields/class-acf-field-date_picker.php:62
1824
+ msgctxt "Date Picker JS prevText"
1825
+ msgid "Prev"
1826
+ msgstr "Préc."
1827
+
1828
+ #: includes/fields/class-acf-field-date_picker.php:63
1829
+ msgctxt "Date Picker JS weekHeader"
1830
+ msgid "Wk"
1831
+ msgstr "Sem."
1832
+
1833
+ # @ acf
1834
+ #: includes/fields/class-acf-field-date_picker.php:178
1835
+ #: includes/fields/class-acf-field-date_time_picker.php:183
1836
+ #: includes/fields/class-acf-field-time_picker.php:109
1837
+ msgid "Display Format"
1838
+ msgstr "Format d’affichage"
1839
+
1840
+ #: includes/fields/class-acf-field-date_picker.php:179
1841
+ #: includes/fields/class-acf-field-date_time_picker.php:184
1842
+ #: includes/fields/class-acf-field-time_picker.php:110
1843
+ msgid "The format displayed when editing a post"
1844
+ msgstr "Format affiché lors de l’édition d’un article"
1845
+
1846
+ #: includes/fields/class-acf-field-date_picker.php:187
1847
+ #: includes/fields/class-acf-field-date_picker.php:218
1848
+ #: includes/fields/class-acf-field-date_time_picker.php:193
1849
+ #: includes/fields/class-acf-field-date_time_picker.php:210
1850
+ #: includes/fields/class-acf-field-time_picker.php:117
1851
+ #: includes/fields/class-acf-field-time_picker.php:132
1852
+ msgid "Custom:"
1853
+ msgstr "Personnalisé :"
1854
+
1855
+ #: includes/fields/class-acf-field-date_picker.php:197
1856
+ msgid "Save Format"
1857
+ msgstr "Enregistrer le format"
1858
+
1859
+ #: includes/fields/class-acf-field-date_picker.php:198
1860
+ msgid "The format used when saving a value"
1861
+ msgstr "Le format enregistré"
1862
+
1863
+ # @ acf
1864
+ #: includes/fields/class-acf-field-date_picker.php:208
1865
+ #: includes/fields/class-acf-field-date_time_picker.php:200
1866
+ #: includes/fields/class-acf-field-image.php:204
1867
+ #: includes/fields/class-acf-field-post_object.php:431
1868
+ #: includes/fields/class-acf-field-relationship.php:634
1869
+ #: includes/fields/class-acf-field-select.php:427
1870
+ #: includes/fields/class-acf-field-time_picker.php:124
1871
+ #: includes/fields/class-acf-field-user.php:412
1872
+ #: pro/fields/class-acf-field-gallery.php:578
1873
+ msgid "Return Format"
1874
+ msgstr "Format de retour"
1875
+
1876
+ #: includes/fields/class-acf-field-date_picker.php:209
1877
+ #: includes/fields/class-acf-field-date_time_picker.php:201
1878
+ #: includes/fields/class-acf-field-time_picker.php:125
1879
+ msgid "The format returned via template functions"
1880
+ msgstr "Valeur retournée dans le code"
1881
+
1882
+ #: includes/fields/class-acf-field-date_picker.php:227
1883
+ #: includes/fields/class-acf-field-date_time_picker.php:217
1884
+ msgid "Week Starts On"
1885
+ msgstr "La semaine commencent le"
1886
+
1887
+ #: includes/fields/class-acf-field-date_time_picker.php:25
1888
+ msgid "Date Time Picker"
1889
+ msgstr "Sélecteur de date et heure"
1890
+
1891
+ #: includes/fields/class-acf-field-date_time_picker.php:68
1892
+ msgctxt "Date Time Picker JS timeOnlyTitle"
1893
+ msgid "Choose Time"
1894
+ msgstr "Choisir l’heure"
1895
+
1896
+ #: includes/fields/class-acf-field-date_time_picker.php:69
1897
+ msgctxt "Date Time Picker JS timeText"
1898
+ msgid "Time"
1899
+ msgstr "Heure"
1900
+
1901
+ #: includes/fields/class-acf-field-date_time_picker.php:70
1902
+ msgctxt "Date Time Picker JS hourText"
1903
+ msgid "Hour"
1904
+ msgstr "Heure"
1905
+
1906
+ #: includes/fields/class-acf-field-date_time_picker.php:71
1907
+ msgctxt "Date Time Picker JS minuteText"
1908
+ msgid "Minute"
1909
+ msgstr "Minute"
1910
+
1911
+ #: includes/fields/class-acf-field-date_time_picker.php:72
1912
+ msgctxt "Date Time Picker JS secondText"
1913
+ msgid "Second"
1914
+ msgstr "Seconde"
1915
+
1916
+ #: includes/fields/class-acf-field-date_time_picker.php:73
1917
+ msgctxt "Date Time Picker JS millisecText"
1918
+ msgid "Millisecond"
1919
+ msgstr "Milliseconde"
1920
+
1921
+ #: includes/fields/class-acf-field-date_time_picker.php:74
1922
+ msgctxt "Date Time Picker JS microsecText"
1923
+ msgid "Microsecond"
1924
+ msgstr "Microseconde"
1925
+
1926
+ #: includes/fields/class-acf-field-date_time_picker.php:75
1927
+ msgctxt "Date Time Picker JS timezoneText"
1928
+ msgid "Time Zone"
1929
+ msgstr "Fuseau horaire"
1930
+
1931
+ #: includes/fields/class-acf-field-date_time_picker.php:76
1932
+ msgctxt "Date Time Picker JS currentText"
1933
+ msgid "Now"
1934
+ msgstr "Maintenant"
1935
+
1936
+ #: includes/fields/class-acf-field-date_time_picker.php:77
1937
+ msgctxt "Date Time Picker JS closeText"
1938
+ msgid "Done"
1939
+ msgstr "Valider"
1940
+
1941
+ #: includes/fields/class-acf-field-date_time_picker.php:78
1942
+ msgctxt "Date Time Picker JS selectText"
1943
+ msgid "Select"
1944
+ msgstr "Sélectionner"
1945
+
1946
+ #: includes/fields/class-acf-field-date_time_picker.php:80
1947
+ msgctxt "Date Time Picker JS amText"
1948
+ msgid "AM"
1949
+ msgstr "AM"
1950
+
1951
+ #: includes/fields/class-acf-field-date_time_picker.php:81
1952
+ msgctxt "Date Time Picker JS amTextShort"
1953
+ msgid "A"
1954
+ msgstr "A"
1955
+
1956
+ #: includes/fields/class-acf-field-date_time_picker.php:84
1957
+ msgctxt "Date Time Picker JS pmText"
1958
+ msgid "PM"
1959
+ msgstr "PM"
1960
+
1961
+ #: includes/fields/class-acf-field-date_time_picker.php:85
1962
+ msgctxt "Date Time Picker JS pmTextShort"
1963
+ msgid "P"
1964
+ msgstr "P"
1965
+
1966
+ #: includes/fields/class-acf-field-email.php:25
1967
+ msgid "Email"
1968
+ msgstr "Adresse courriel"
1969
+
1970
+ #: includes/fields/class-acf-field-email.php:127
1971
+ #: includes/fields/class-acf-field-number.php:136
1972
+ #: includes/fields/class-acf-field-password.php:71
1973
+ #: includes/fields/class-acf-field-text.php:104
1974
+ #: includes/fields/class-acf-field-textarea.php:111
1975
+ #: includes/fields/class-acf-field-url.php:109
1976
+ msgid "Placeholder Text"
1977
+ msgstr "Texte indicatif"
1978
+
1979
+ #: includes/fields/class-acf-field-email.php:128
1980
+ #: includes/fields/class-acf-field-number.php:137
1981
+ #: includes/fields/class-acf-field-password.php:72
1982
+ #: includes/fields/class-acf-field-text.php:105
1983
+ #: includes/fields/class-acf-field-textarea.php:112
1984
+ #: includes/fields/class-acf-field-url.php:110
1985
+ msgid "Appears within the input"
1986
+ msgstr "Apparait dans le champ"
1987
+
1988
+ #: includes/fields/class-acf-field-email.php:136
1989
+ #: includes/fields/class-acf-field-number.php:145
1990
+ #: includes/fields/class-acf-field-password.php:80
1991
+ #: includes/fields/class-acf-field-range.php:188
1992
+ #: includes/fields/class-acf-field-text.php:113
1993
+ msgid "Prepend"
1994
+ msgstr "Préfixe"
1995
+
1996
+ #: includes/fields/class-acf-field-email.php:137
1997
+ #: includes/fields/class-acf-field-number.php:146
1998
+ #: includes/fields/class-acf-field-password.php:81
1999
+ #: includes/fields/class-acf-field-range.php:189
2000
+ #: includes/fields/class-acf-field-text.php:114
2001
+ msgid "Appears before the input"
2002
+ msgstr "Apparait avant le champ"
2003
+
2004
+ #: includes/fields/class-acf-field-email.php:145
2005
+ #: includes/fields/class-acf-field-number.php:154
2006
+ #: includes/fields/class-acf-field-password.php:89
2007
+ #: includes/fields/class-acf-field-range.php:197
2008
+ #: includes/fields/class-acf-field-text.php:122
2009
+ msgid "Append"
2010
+ msgstr "Suffixe"
2011
+
2012
+ #: includes/fields/class-acf-field-email.php:146
2013
+ #: includes/fields/class-acf-field-number.php:155
2014
+ #: includes/fields/class-acf-field-password.php:90
2015
+ #: includes/fields/class-acf-field-range.php:198
2016
+ #: includes/fields/class-acf-field-text.php:123
2017
+ msgid "Appears after the input"
2018
+ msgstr "Apparait après le champ"
2019
+
2020
+ # @ acf
2021
+ #: includes/fields/class-acf-field-file.php:25
2022
+ msgid "File"
2023
+ msgstr "Fichier"
2024
+
2025
+ # @ acf
2026
+ #: includes/fields/class-acf-field-file.php:58
2027
+ msgid "Edit File"
2028
+ msgstr "Modifier le fichier"
2029
+
2030
+ # @ acf
2031
+ #: includes/fields/class-acf-field-file.php:59
2032
+ msgid "Update File"
2033
+ msgstr "Mettre à jour le fichier"
2034
+
2035
+ # @ acf
2036
+ #: includes/fields/class-acf-field-file.php:141
2037
+ msgid "File name"
2038
+ msgstr "Nom du fichier"
2039
+
2040
+ # @ acf
2041
+ #: includes/fields/class-acf-field-file.php:145
2042
+ #: includes/fields/class-acf-field-file.php:248
2043
+ #: includes/fields/class-acf-field-file.php:259
2044
+ #: includes/fields/class-acf-field-image.php:264
2045
+ #: includes/fields/class-acf-field-image.php:293
2046
+ #: pro/fields/class-acf-field-gallery.php:663
2047
+ #: pro/fields/class-acf-field-gallery.php:692
2048
+ msgid "File size"
2049
+ msgstr "Taille du fichier"
2050
+
2051
+ # @ acf
2052
+ #: includes/fields/class-acf-field-file.php:170
2053
+ msgid "Add File"
2054
+ msgstr "Ajouter un fichier"
2055
+
2056
+ #: includes/fields/class-acf-field-file.php:221
2057
+ msgid "File Array"
2058
+ msgstr "Données du fichier (tableau)"
2059
+
2060
+ # @ acf
2061
+ #: includes/fields/class-acf-field-file.php:222
2062
+ msgid "File URL"
2063
+ msgstr "URL du fichier"
2064
+
2065
+ # @ acf
2066
+ #: includes/fields/class-acf-field-file.php:223
2067
+ msgid "File ID"
2068
+ msgstr "ID du Fichier"
2069
+
2070
+ #: includes/fields/class-acf-field-file.php:230
2071
+ #: includes/fields/class-acf-field-image.php:229
2072
+ #: pro/fields/class-acf-field-gallery.php:613
2073
+ msgid "Library"
2074
+ msgstr "Médias"
2075
+
2076
+ #: includes/fields/class-acf-field-file.php:231
2077
+ #: includes/fields/class-acf-field-image.php:230
2078
+ #: pro/fields/class-acf-field-gallery.php:614
2079
+ msgid "Limit the media library choice"
2080
+ msgstr "Limiter le choix dans la médiathèque"
2081
+
2082
+ #: includes/fields/class-acf-field-file.php:236
2083
+ #: includes/fields/class-acf-field-image.php:235
2084
+ #: includes/locations/class-acf-location-attachment.php:101
2085
+ #: includes/locations/class-acf-location-comment.php:79
2086
+ #: includes/locations/class-acf-location-nav-menu.php:102
2087
+ #: includes/locations/class-acf-location-taxonomy.php:79
2088
+ #: includes/locations/class-acf-location-user-form.php:87
2089
+ #: includes/locations/class-acf-location-user-role.php:111
2090
+ #: includes/locations/class-acf-location-widget.php:83
2091
+ #: pro/fields/class-acf-field-gallery.php:619
2092
+ #: pro/locations/class-acf-location-block.php:79
2093
+ msgid "All"
2094
+ msgstr "Tous"
2095
+
2096
+ #: includes/fields/class-acf-field-file.php:237
2097
+ #: includes/fields/class-acf-field-image.php:236
2098
+ #: pro/fields/class-acf-field-gallery.php:620
2099
+ msgid "Uploaded to post"
2100
+ msgstr "Liés à cet article"
2101
+
2102
+ # @ acf
2103
+ #: includes/fields/class-acf-field-file.php:244
2104
+ #: includes/fields/class-acf-field-image.php:243
2105
+ #: pro/fields/class-acf-field-gallery.php:642
2106
+ msgid "Minimum"
2107
+ msgstr "Minimum"
2108
+
2109
+ #: includes/fields/class-acf-field-file.php:245
2110
+ #: includes/fields/class-acf-field-file.php:256
2111
+ msgid "Restrict which files can be uploaded"
2112
+ msgstr "Restreindre l'import de fichiers"
2113
+
2114
+ # @ acf
2115
+ #: includes/fields/class-acf-field-file.php:255
2116
+ #: includes/fields/class-acf-field-image.php:272
2117
+ #: pro/fields/class-acf-field-gallery.php:671
2118
+ msgid "Maximum"
2119
+ msgstr "Maximum"
2120
+
2121
+ #: includes/fields/class-acf-field-file.php:266
2122
+ #: includes/fields/class-acf-field-image.php:301
2123
+ #: pro/fields/class-acf-field-gallery.php:699
2124
+ msgid "Allowed file types"
2125
+ msgstr "Types de fichiers autorisés"
2126
+
2127
+ #: includes/fields/class-acf-field-file.php:267
2128
+ #: includes/fields/class-acf-field-image.php:302
2129
+ #: pro/fields/class-acf-field-gallery.php:700
2130
+ msgid "Comma separated list. Leave blank for all types"
2131
+ msgstr ""
2132
+ "Extensions autorisées séparées par une virgule. Laissez vide pour autoriser "
2133
+ "toutes les extensions"
2134
+
2135
+ #: includes/fields/class-acf-field-google-map.php:25
2136
+ msgid "Google Map"
2137
+ msgstr "Google Map"
2138
+
2139
+ #: includes/fields/class-acf-field-google-map.php:59
2140
+ msgid "Sorry, this browser does not support geolocation"
2141
+ msgstr "Désolé, ce navigateur ne prend pas en charge la géolocalisation"
2142
+
2143
+ # @ acf
2144
+ #: includes/fields/class-acf-field-google-map.php:166
2145
+ msgid "Clear location"
2146
+ msgstr "Effacer la position"
2147
+
2148
+ #: includes/fields/class-acf-field-google-map.php:167
2149
+ msgid "Find current location"
2150
+ msgstr "Trouver l'emplacement actuel"
2151
+
2152
+ #: includes/fields/class-acf-field-google-map.php:170
2153
+ msgid "Search for address..."
2154
+ msgstr "Chercher une adresse…"
2155
+
2156
+ #: includes/fields/class-acf-field-google-map.php:200
2157
+ #: includes/fields/class-acf-field-google-map.php:211
2158
+ msgid "Center"
2159
+ msgstr "Centre"
2160
+
2161
+ #: includes/fields/class-acf-field-google-map.php:201
2162
+ #: includes/fields/class-acf-field-google-map.php:212
2163
+ msgid "Center the initial map"
2164
+ msgstr "Position initiale du centre de la carte"
2165
+
2166
+ #: includes/fields/class-acf-field-google-map.php:223
2167
+ msgid "Zoom"
2168
+ msgstr "Zoom"
2169
+
2170
+ #: includes/fields/class-acf-field-google-map.php:224
2171
+ msgid "Set the initial zoom level"
2172
+ msgstr "Niveau de zoom initial"
2173
+
2174
+ #: includes/fields/class-acf-field-google-map.php:233
2175
+ #: includes/fields/class-acf-field-image.php:255
2176
+ #: includes/fields/class-acf-field-image.php:284
2177
+ #: includes/fields/class-acf-field-oembed.php:268
2178
+ #: pro/fields/class-acf-field-gallery.php:654
2179
+ #: pro/fields/class-acf-field-gallery.php:683
2180
+ msgid "Height"
2181
+ msgstr "Hauteur"
2182
+
2183
+ #: includes/fields/class-acf-field-google-map.php:234
2184
+ msgid "Customize the map height"
2185
+ msgstr "Hauteur de la carte"
2186
+
2187
+ # @ acf
2188
+ #: includes/fields/class-acf-field-group.php:25
2189
+ msgid "Group"
2190
+ msgstr "Groupe"
2191
+
2192
+ # @ acf
2193
+ #: includes/fields/class-acf-field-group.php:459
2194
+ #: pro/fields/class-acf-field-repeater.php:384
2195
+ msgid "Sub Fields"
2196
+ msgstr "Sous-champs"
2197
+
2198
+ #: includes/fields/class-acf-field-group.php:475
2199
+ #: pro/fields/class-acf-field-clone.php:844
2200
+ msgid "Specify the style used to render the selected fields"
2201
+ msgstr "Style utilisé pour générer les champs sélectionnés"
2202
+
2203
+ #: includes/fields/class-acf-field-group.php:480
2204
+ #: pro/fields/class-acf-field-clone.php:849
2205
+ #: pro/fields/class-acf-field-flexible-content.php:613
2206
+ #: pro/fields/class-acf-field-repeater.php:456
2207
+ #: pro/locations/class-acf-location-block.php:27
2208
+ msgid "Block"
2209
+ msgstr "Bloc"
2210
+
2211
+ #: includes/fields/class-acf-field-group.php:481
2212
+ #: pro/fields/class-acf-field-clone.php:850
2213
+ #: pro/fields/class-acf-field-flexible-content.php:612
2214
+ #: pro/fields/class-acf-field-repeater.php:455
2215
+ msgid "Table"
2216
+ msgstr "Tableau"
2217
+
2218
+ #: includes/fields/class-acf-field-group.php:482
2219
+ #: pro/fields/class-acf-field-clone.php:851
2220
+ #: pro/fields/class-acf-field-flexible-content.php:614
2221
+ #: pro/fields/class-acf-field-repeater.php:457
2222
+ msgid "Row"
2223
+ msgstr "Rangée"
2224
+
2225
+ # @ acf
2226
+ #: includes/fields/class-acf-field-image.php:25
2227
+ msgid "Image"
2228
+ msgstr "Image"
2229
+
2230
+ # acf
2231
+ #: includes/fields/class-acf-field-image.php:63
2232
+ msgid "Select Image"
2233
+ msgstr "Sélectionner une image"
2234
+
2235
+ # @ acf
2236
+ #: includes/fields/class-acf-field-image.php:64
2237
+ msgid "Edit Image"
2238
+ msgstr "Modifier l'image"
2239
+
2240
+ # @ acf
2241
+ #: includes/fields/class-acf-field-image.php:65
2242
+ msgid "Update Image"
2243
+ msgstr "Mettre à jour"
2244
+
2245
+ # @ acf
2246
+ #: includes/fields/class-acf-field-image.php:156
2247
+ msgid "No image selected"
2248
+ msgstr "Aucune image sélectionnée"
2249
+
2250
+ # @ acf
2251
+ #: includes/fields/class-acf-field-image.php:156
2252
+ msgid "Add Image"
2253
+ msgstr "Ajouter une image"
2254
+
2255
+ # @ acf
2256
+ #: includes/fields/class-acf-field-image.php:210
2257
+ #: pro/fields/class-acf-field-gallery.php:584
2258
+ msgid "Image Array"
2259
+ msgstr "Données de l'image (tableau)"
2260
+
2261
+ # @ acf
2262
+ #: includes/fields/class-acf-field-image.php:211
2263
+ #: pro/fields/class-acf-field-gallery.php:585
2264
+ msgid "Image URL"
2265
+ msgstr "URL de l‘image"
2266
+
2267
+ # @ acf
2268
+ #: includes/fields/class-acf-field-image.php:212
2269
+ #: pro/fields/class-acf-field-gallery.php:586
2270
+ msgid "Image ID"
2271
+ msgstr "ID de l‘image"
2272
+
2273
+ # @ acf
2274
+ #: includes/fields/class-acf-field-image.php:219
2275
+ #: pro/fields/class-acf-field-gallery.php:592
2276
+ msgid "Preview Size"
2277
+ msgstr "Taille de prévisualisation"
2278
+
2279
+ #: includes/fields/class-acf-field-image.php:244
2280
+ #: includes/fields/class-acf-field-image.php:273
2281
+ #: pro/fields/class-acf-field-gallery.php:643
2282
+ #: pro/fields/class-acf-field-gallery.php:672
2283
+ msgid "Restrict which images can be uploaded"
2284
+ msgstr "Restreindre les images envoyées"
2285
+
2286
+ #: includes/fields/class-acf-field-image.php:247
2287
+ #: includes/fields/class-acf-field-image.php:276
2288
+ #: includes/fields/class-acf-field-oembed.php:257
2289
+ #: pro/fields/class-acf-field-gallery.php:646
2290
+ #: pro/fields/class-acf-field-gallery.php:675
2291
+ msgid "Width"
2292
+ msgstr "Largeur"
2293
+
2294
+ # @ acf
2295
+ #: includes/fields/class-acf-field-link.php:25
2296
+ msgid "Link"
2297
+ msgstr "Lien"
2298
+
2299
+ # @ acf
2300
+ #: includes/fields/class-acf-field-link.php:133
2301
+ msgid "Select Link"
2302
+ msgstr "Sélectionner un lien"
2303
+
2304
+ #: includes/fields/class-acf-field-link.php:138
2305
+ msgid "Opens in a new window/tab"
2306
+ msgstr "Ouvrir dans un nouvel onglet/fenêtre"
2307
+
2308
+ #: includes/fields/class-acf-field-link.php:172
2309
+ msgid "Link Array"
2310
+ msgstr "Tableau de données"
2311
+
2312
+ # @ acf
2313
+ #: includes/fields/class-acf-field-link.php:173
2314
+ msgid "Link URL"
2315
+ msgstr "URL du Lien"
2316
+
2317
+ # @ acf
2318
+ #: includes/fields/class-acf-field-message.php:25
2319
+ #: includes/fields/class-acf-field-message.php:101
2320
+ #: includes/fields/class-acf-field-true_false.php:126
2321
+ msgid "Message"
2322
+ msgstr "Message"
2323
+
2324
+ # @ acf
2325
+ #: includes/fields/class-acf-field-message.php:110
2326
+ #: includes/fields/class-acf-field-textarea.php:139
2327
+ msgid "New Lines"
2328
+ msgstr "Nouvelles lignes"
2329
+
2330
+ #: includes/fields/class-acf-field-message.php:111
2331
+ #: includes/fields/class-acf-field-textarea.php:140
2332
+ msgid "Controls how new lines are rendered"
2333
+ msgstr "Comment sont interprétés les sauts de lignes"
2334
+
2335
+ #: includes/fields/class-acf-field-message.php:115
2336
+ #: includes/fields/class-acf-field-textarea.php:144
2337
+ msgid "Automatically add paragraphs"
2338
+ msgstr "Ajouter des paragraphes automatiquement"
2339
+
2340
+ #: includes/fields/class-acf-field-message.php:116
2341
+ #: includes/fields/class-acf-field-textarea.php:145
2342
+ msgid "Automatically add &lt;br&gt;"
2343
+ msgstr "Ajouter &lt;br&gt; automatiquement"
2344
+
2345
+ # @ acf
2346
+ #: includes/fields/class-acf-field-message.php:117
2347
+ #: includes/fields/class-acf-field-textarea.php:146
2348
+ msgid "No Formatting"
2349
+ msgstr "Pas de formatage"
2350
+
2351
+ #: includes/fields/class-acf-field-message.php:124
2352
+ msgid "Escape HTML"
2353
+ msgstr "Afficher le code HTML"
2354
+
2355
+ #: includes/fields/class-acf-field-message.php:125
2356
+ msgid "Allow HTML markup to display as visible text instead of rendering"
2357
+ msgstr "Permettre l'affichage du code HTML à l'écran au lieu de l'interpréter"
2358
+
2359
+ #: includes/fields/class-acf-field-number.php:25
2360
+ msgid "Number"
2361
+ msgstr "Nombre"
2362
+
2363
+ #: includes/fields/class-acf-field-number.php:163
2364
+ #: includes/fields/class-acf-field-range.php:158
2365
+ msgid "Minimum Value"
2366
+ msgstr "Valeur minimale"
2367
+
2368
+ # @ acf
2369
+ #: includes/fields/class-acf-field-number.php:172
2370
+ #: includes/fields/class-acf-field-range.php:168
2371
+ msgid "Maximum Value"
2372
+ msgstr "Valeur maximale"
2373
+
2374
+ #: includes/fields/class-acf-field-number.php:181
2375
+ #: includes/fields/class-acf-field-range.php:178
2376
+ msgid "Step Size"
2377
+ msgstr "Pas"
2378
+
2379
+ #: includes/fields/class-acf-field-number.php:219
2380
+ msgid "Value must be a number"
2381
+ msgstr "La valeur doit être un nombre"
2382
+
2383
+ #: includes/fields/class-acf-field-number.php:237
2384
+ #, php-format
2385
+ msgid "Value must be equal to or higher than %d"
2386
+ msgstr "La valeur doit être être supérieure ou égale à %d"
2387
+
2388
+ #: includes/fields/class-acf-field-number.php:245
2389
+ #, php-format
2390
+ msgid "Value must be equal to or lower than %d"
2391
+ msgstr "La valeur doit être inférieure ou égale à %d"
2392
+
2393
+ #: includes/fields/class-acf-field-oembed.php:25
2394
+ msgid "oEmbed"
2395
+ msgstr "oEmbed"
2396
+
2397
+ #: includes/fields/class-acf-field-oembed.php:216
2398
+ msgid "Enter URL"
2399
+ msgstr "Entrez l'URL"
2400
+
2401
+ #: includes/fields/class-acf-field-oembed.php:254
2402
+ #: includes/fields/class-acf-field-oembed.php:265
2403
+ msgid "Embed Size"
2404
+ msgstr "Dimensions"
2405
+
2406
+ # @ acf
2407
+ #: includes/fields/class-acf-field-page_link.php:25
2408
+ msgid "Page Link"
2409
+ msgstr "Lien vers page ou article"
2410
+
2411
+ #: includes/fields/class-acf-field-page_link.php:177
2412
+ msgid "Archives"
2413
+ msgstr "Archives"
2414
+
2415
+ #: includes/fields/class-acf-field-page_link.php:269
2416
+ #: includes/fields/class-acf-field-post_object.php:267
2417
+ #: includes/fields/class-acf-field-taxonomy.php:961
2418
+ msgid "Parent"
2419
+ msgstr "Parent"
2420
+
2421
+ #: includes/fields/class-acf-field-page_link.php:485
2422
+ #: includes/fields/class-acf-field-post_object.php:383
2423
+ #: includes/fields/class-acf-field-relationship.php:560
2424
+ msgid "Filter by Post Type"
2425
+ msgstr "Filtrer par type de publication"
2426
+
2427
+ #: includes/fields/class-acf-field-page_link.php:493
2428
+ #: includes/fields/class-acf-field-post_object.php:391
2429
+ #: includes/fields/class-acf-field-relationship.php:568
2430
+ msgid "All post types"
2431
+ msgstr "Tous les types de publication"
2432
+
2433
+ # @ acf
2434
+ #: includes/fields/class-acf-field-page_link.php:499
2435
+ #: includes/fields/class-acf-field-post_object.php:397
2436
+ #: includes/fields/class-acf-field-relationship.php:574
2437
+ msgid "Filter by Taxonomy"
2438
+ msgstr "Filtrer par taxonomie"
2439
+
2440
+ #: includes/fields/class-acf-field-page_link.php:507
2441
+ #: includes/fields/class-acf-field-post_object.php:405
2442
+ #: includes/fields/class-acf-field-relationship.php:582
2443
+ msgid "All taxonomies"
2444
+ msgstr "Toutes les taxonomies"
2445
+
2446
+ #: includes/fields/class-acf-field-page_link.php:523
2447
+ msgid "Allow Archives URLs"
2448
+ msgstr "Afficher les pages d’archives"
2449
+
2450
+ # @ acf
2451
+ #: includes/fields/class-acf-field-page_link.php:533
2452
+ #: includes/fields/class-acf-field-post_object.php:421
2453
+ #: includes/fields/class-acf-field-select.php:392
2454
+ #: includes/fields/class-acf-field-user.php:403
2455
+ msgid "Select multiple values?"
2456
+ msgstr "Autoriser la sélection multiple?"
2457
+
2458
+ #: includes/fields/class-acf-field-password.php:25
2459
+ msgid "Password"
2460
+ msgstr "Mot de passe"
2461
+
2462
+ # @ acf
2463
+ #: includes/fields/class-acf-field-post_object.php:25
2464
+ #: includes/fields/class-acf-field-post_object.php:436
2465
+ #: includes/fields/class-acf-field-relationship.php:639
2466
+ msgid "Post Object"
2467
+ msgstr "Objet Article"
2468
+
2469
+ # @ acf
2470
+ #: includes/fields/class-acf-field-post_object.php:437
2471
+ #: includes/fields/class-acf-field-relationship.php:640
2472
+ msgid "Post ID"
2473
+ msgstr "ID de l'article"
2474
+
2475
+ # @ acf
2476
+ #: includes/fields/class-acf-field-radio.php:25
2477
+ msgid "Radio Button"
2478
+ msgstr "Bouton radio"
2479
+
2480
+ #: includes/fields/class-acf-field-radio.php:254
2481
+ msgid "Other"
2482
+ msgstr "Autre"
2483
+
2484
+ #: includes/fields/class-acf-field-radio.php:259
2485
+ msgid "Add 'other' choice to allow for custom values"
2486
+ msgstr "Ajouter un choix « autre » pour autoriser une valeur personnalisée"
2487
+
2488
+ #: includes/fields/class-acf-field-radio.php:265
2489
+ msgid "Save Other"
2490
+ msgstr "Enregistrer la valeur personnalisée"
2491
+
2492
+ #: includes/fields/class-acf-field-radio.php:270
2493
+ msgid "Save 'other' values to the field's choices"
2494
+ msgstr "Enregistrer les valeurs personnalisées « autre » en tant que choix"
2495
+
2496
+ #: includes/fields/class-acf-field-range.php:25
2497
+ msgid "Range"
2498
+ msgstr "Plage de valeurs"
2499
+
2500
+ # @ acf
2501
+ #: includes/fields/class-acf-field-relationship.php:25
2502
+ msgid "Relationship"
2503
+ msgstr "Relation"
2504
+
2505
+ #: includes/fields/class-acf-field-relationship.php:62
2506
+ msgid "Maximum values reached ( {max} values )"
2507
+ msgstr "Nombre maximal de valeurs atteint ({max} valeurs)"
2508
+
2509
+ #: includes/fields/class-acf-field-relationship.php:63
2510
+ msgid "Loading"
2511
+ msgstr "Chargement en cours"
2512
+
2513
+ #: includes/fields/class-acf-field-relationship.php:64
2514
+ msgid "No matches found"
2515
+ msgstr "Aucun résultat"
2516
+
2517
+ #: includes/fields/class-acf-field-relationship.php:411
2518
+ msgid "Select post type"
2519
+ msgstr "Choisissez le type de publication"
2520
+
2521
+ # @ acf
2522
+ #: includes/fields/class-acf-field-relationship.php:420
2523
+ msgid "Select taxonomy"
2524
+ msgstr "Choisissez la taxonomie"
2525
+
2526
+ #: includes/fields/class-acf-field-relationship.php:477
2527
+ msgid "Search..."
2528
+ msgstr "Rechercher…"
2529
+
2530
+ #: includes/fields/class-acf-field-relationship.php:588
2531
+ msgid "Filters"
2532
+ msgstr "Filtres"
2533
+
2534
+ # @ acf
2535
+ #: includes/fields/class-acf-field-relationship.php:594
2536
+ #: includes/locations/class-acf-location-post-type.php:27
2537
+ msgid "Post Type"
2538
+ msgstr "Type de publication"
2539
+
2540
+ # @ acf
2541
+ #: includes/fields/class-acf-field-relationship.php:595
2542
+ #: includes/fields/class-acf-field-taxonomy.php:28
2543
+ #: includes/fields/class-acf-field-taxonomy.php:754
2544
+ #: includes/locations/class-acf-location-taxonomy.php:27
2545
+ msgid "Taxonomy"
2546
+ msgstr "Taxonomie"
2547
+
2548
+ #: includes/fields/class-acf-field-relationship.php:602
2549
+ msgid "Elements"
2550
+ msgstr "Éléments"
2551
+
2552
+ #: includes/fields/class-acf-field-relationship.php:603
2553
+ msgid "Selected elements will be displayed in each result"
2554
+ msgstr "Les éléments sélectionnés seront affichés dans chaque résultat"
2555
+
2556
+ # @ acf
2557
+ #: includes/fields/class-acf-field-relationship.php:614
2558
+ msgid "Minimum posts"
2559
+ msgstr "Minimum d'articles sélectionnables"
2560
+
2561
+ # @ acf
2562
+ #: includes/fields/class-acf-field-relationship.php:623
2563
+ msgid "Maximum posts"
2564
+ msgstr "Maximum d'articles sélectionnables"
2565
+
2566
+ #: includes/fields/class-acf-field-relationship.php:727
2567
+ #: pro/fields/class-acf-field-gallery.php:800
2568
+ #, php-format
2569
+ msgid "%s requires at least %s selection"
2570
+ msgid_plural "%s requires at least %s selections"
2571
+ msgstr[0] "%s requiert au moins %s sélection"
2572
+ msgstr[1] "%s requiert au moins %s sélections"
2573
+
2574
+ #: includes/fields/class-acf-field-select.php:25
2575
+ #: includes/fields/class-acf-field-taxonomy.php:776
2576
+ msgctxt "noun"
2577
+ msgid "Select"
2578
+ msgstr "Sélection"
2579
+
2580
+ #: includes/fields/class-acf-field-select.php:111
2581
+ msgctxt "Select2 JS matches_1"
2582
+ msgid "One result is available, press enter to select it."
2583
+ msgstr "Un résultat est disponible, appuyez sur Entrée pour le sélectionner."
2584
+
2585
+ #: includes/fields/class-acf-field-select.php:112
2586
+ #, php-format
2587
+ msgctxt "Select2 JS matches_n"
2588
+ msgid "%d results are available, use up and down arrow keys to navigate."
2589
+ msgstr ""
2590
+ "%d résultats sont disponibles, utilisez les flèches haut et bas pour "
2591
+ "naviguer parmi les résultats."
2592
+
2593
+ #: includes/fields/class-acf-field-select.php:113
2594
+ msgctxt "Select2 JS matches_0"
2595
+ msgid "No matches found"
2596
+ msgstr "Aucun résultat trouvé"
2597
+
2598
+ #: includes/fields/class-acf-field-select.php:114
2599
+ msgctxt "Select2 JS input_too_short_1"
2600
+ msgid "Please enter 1 or more characters"
2601
+ msgstr "Veuillez saisir au minimum 1 caractère"
2602
+
2603
+ #: includes/fields/class-acf-field-select.php:115
2604
+ #, php-format
2605
+ msgctxt "Select2 JS input_too_short_n"
2606
+ msgid "Please enter %d or more characters"
2607
+ msgstr "Veuillez saisir au minimum %d caractères"
2608
+
2609
+ #: includes/fields/class-acf-field-select.php:116
2610
+ msgctxt "Select2 JS input_too_long_1"
2611
+ msgid "Please delete 1 character"
2612
+ msgstr "Veuillez retirer 1 caractère"
2613
+
2614
+ #: includes/fields/class-acf-field-select.php:117
2615
+ #, php-format
2616
+ msgctxt "Select2 JS input_too_long_n"
2617
+ msgid "Please delete %d characters"
2618
+ msgstr "Veuillez retirer %d caractères"
2619
+
2620
+ #: includes/fields/class-acf-field-select.php:118
2621
+ msgctxt "Select2 JS selection_too_long_1"
2622
+ msgid "You can only select 1 item"
2623
+ msgstr "Vous ne pouvez sélectionner qu’un seul élément"
2624
+
2625
+ #: includes/fields/class-acf-field-select.php:119
2626
+ #, php-format
2627
+ msgctxt "Select2 JS selection_too_long_n"
2628
+ msgid "You can only select %d items"
2629
+ msgstr "Vous ne pouvez sélectionner que %d éléments"
2630
+
2631
+ #: includes/fields/class-acf-field-select.php:120
2632
+ msgctxt "Select2 JS load_more"
2633
+ msgid "Loading more results&hellip;"
2634
+ msgstr "Chargement de résultats supplémentaires&hellip;"
2635
+
2636
+ #: includes/fields/class-acf-field-select.php:121
2637
+ msgctxt "Select2 JS searching"
2638
+ msgid "Searching&hellip;"
2639
+ msgstr "Recherche en cours&hellip;"
2640
+
2641
+ #: includes/fields/class-acf-field-select.php:122
2642
+ msgctxt "Select2 JS load_fail"
2643
+ msgid "Loading failed"
2644
+ msgstr "Échec du chargement"
2645
+
2646
+ # @ acf
2647
+ #: includes/fields/class-acf-field-select.php:402
2648
+ #: includes/fields/class-acf-field-true_false.php:144
2649
+ msgid "Stylised UI"
2650
+ msgstr "Interface stylisée"
2651
+
2652
+ #: includes/fields/class-acf-field-select.php:412
2653
+ msgid "Use AJAX to lazy load choices?"
2654
+ msgstr "Utiliser AJAX pour charger les choix dynamiquement?"
2655
+
2656
+ #: includes/fields/class-acf-field-select.php:428
2657
+ msgid "Specify the value returned"
2658
+ msgstr "Définit la valeur retournée"
2659
+
2660
+ #: includes/fields/class-acf-field-separator.php:25
2661
+ msgid "Separator"
2662
+ msgstr "Séparateur"
2663
+
2664
+ #: includes/fields/class-acf-field-tab.php:25
2665
+ msgid "Tab"
2666
+ msgstr "Onglet"
2667
+
2668
+ #: includes/fields/class-acf-field-tab.php:102
2669
+ msgid "Placement"
2670
+ msgstr "Emplacement"
2671
+
2672
+ #: includes/fields/class-acf-field-tab.php:115
2673
+ msgid ""
2674
+ "Define an endpoint for the previous tabs to stop. This will start a new "
2675
+ "group of tabs."
2676
+ msgstr ""
2677
+ "Définit une extrémité pour fermer les précédents onglets. Cela va commencer "
2678
+ "un nouveau groupe d'onglets."
2679
+
2680
+ #: includes/fields/class-acf-field-taxonomy.php:714
2681
+ #, php-format
2682
+ msgctxt "No terms"
2683
+ msgid "No %s"
2684
+ msgstr "Pas de %s"
2685
+
2686
+ # @ acf
2687
+ #: includes/fields/class-acf-field-taxonomy.php:755
2688
+ msgid "Select the taxonomy to be displayed"
2689
+ msgstr "Choisissez la taxonomie à afficher"
2690
+
2691
+ #: includes/fields/class-acf-field-taxonomy.php:764
2692
+ msgid "Appearance"
2693
+ msgstr "Apparence"
2694
+
2695
+ # @ acf
2696
+ #: includes/fields/class-acf-field-taxonomy.php:765
2697
+ msgid "Select the appearance of this field"
2698
+ msgstr "Apparence de ce champ"
2699
+
2700
+ # @ acf
2701
+ #: includes/fields/class-acf-field-taxonomy.php:770
2702
+ msgid "Multiple Values"
2703
+ msgstr "Valeurs multiples"
2704
+
2705
+ # @ acf
2706
+ #: includes/fields/class-acf-field-taxonomy.php:772
2707
+ msgid "Multi Select"
2708
+ msgstr "Sélecteur multiple"
2709
+
2710
+ #: includes/fields/class-acf-field-taxonomy.php:774
2711
+ msgid "Single Value"
2712
+ msgstr "Valeur unique"
2713
+
2714
+ # @ acf
2715
+ #: includes/fields/class-acf-field-taxonomy.php:775
2716
+ msgid "Radio Buttons"
2717
+ msgstr "Boutons radio"
2718
+
2719
+ # @ acf
2720
+ #: includes/fields/class-acf-field-taxonomy.php:799
2721
+ msgid "Create Terms"
2722
+ msgstr "Créer des termes"
2723
+
2724
+ #: includes/fields/class-acf-field-taxonomy.php:800
2725
+ msgid "Allow new terms to be created whilst editing"
2726
+ msgstr "Autoriser la création de nouveaux termes pendant l'édition"
2727
+
2728
+ #: includes/fields/class-acf-field-taxonomy.php:809
2729
+ msgid "Save Terms"
2730
+ msgstr "Enregistrer les termes"
2731
+
2732
+ #: includes/fields/class-acf-field-taxonomy.php:810
2733
+ msgid "Connect selected terms to the post"
2734
+ msgstr "Lier les termes sélectionnés à l'article"
2735
+
2736
+ #: includes/fields/class-acf-field-taxonomy.php:819
2737
+ msgid "Load Terms"
2738
+ msgstr "Charger les termes"
2739
+
2740
+ #: includes/fields/class-acf-field-taxonomy.php:820
2741
+ msgid "Load value from posts terms"
2742
+ msgstr "Charger une valeur depuis les termes de l’article"
2743
+
2744
+ # @ acf
2745
+ #: includes/fields/class-acf-field-taxonomy.php:834
2746
+ msgid "Term Object"
2747
+ msgstr "Objet Terme"
2748
+
2749
+ #: includes/fields/class-acf-field-taxonomy.php:835
2750
+ msgid "Term ID"
2751
+ msgstr "ID du terme"
2752
+
2753
+ #: includes/fields/class-acf-field-taxonomy.php:885
2754
+ #, php-format
2755
+ msgid "User unable to add new %s"
2756
+ msgstr "Utilisateur incapable d'ajouter un nouveau %s"
2757
+
2758
+ #: includes/fields/class-acf-field-taxonomy.php:895
2759
+ #, php-format
2760
+ msgid "%s already exists"
2761
+ msgstr "%s existe déjà"
2762
+
2763
+ #: includes/fields/class-acf-field-taxonomy.php:927
2764
+ #, php-format
2765
+ msgid "%s added"
2766
+ msgstr "%s ajouté"
2767
+
2768
+ # @ acf
2769
+ #: includes/fields/class-acf-field-taxonomy.php:973
2770
+ msgid "Add"
2771
+ msgstr "Ajouter"
2772
+
2773
+ # @ acf
2774
+ #: includes/fields/class-acf-field-text.php:25
2775
+ msgid "Text"
2776
+ msgstr "Texte"
2777
+
2778
+ #: includes/fields/class-acf-field-text.php:131
2779
+ #: includes/fields/class-acf-field-textarea.php:120
2780
+ msgid "Character Limit"
2781
+ msgstr "Limite de caractères"
2782
+
2783
+ #: includes/fields/class-acf-field-text.php:132
2784
+ #: includes/fields/class-acf-field-textarea.php:121
2785
+ msgid "Leave blank for no limit"
2786
+ msgstr "Laisser vide ne pas donner de limite"
2787
+
2788
+ #: includes/fields/class-acf-field-text.php:157
2789
+ #: includes/fields/class-acf-field-textarea.php:215
2790
+ #, php-format
2791
+ msgid "Value must not exceed %d characters"
2792
+ msgstr "La valeur ne doit pas dépasser %d caractères"
2793
+
2794
+ # @ acf
2795
+ #: includes/fields/class-acf-field-textarea.php:25
2796
+ msgid "Text Area"
2797
+ msgstr "Zone de texte"
2798
+
2799
+ #: includes/fields/class-acf-field-textarea.php:129
2800
+ msgid "Rows"
2801
+ msgstr "Lignes"
2802
+
2803
+ #: includes/fields/class-acf-field-textarea.php:130
2804
+ msgid "Sets the textarea height"
2805
+ msgstr "Hauteur du champ"
2806
+
2807
+ #: includes/fields/class-acf-field-time_picker.php:25
2808
+ msgid "Time Picker"
2809
+ msgstr "Sélecteur d’heure"
2810
+
2811
+ # @ acf
2812
+ #: includes/fields/class-acf-field-true_false.php:25
2813
+ msgid "True / False"
2814
+ msgstr "Oui / Non"
2815
+
2816
+ #: includes/fields/class-acf-field-true_false.php:127
2817
+ msgid "Displays text alongside the checkbox"
2818
+ msgstr "Affiche le texte à côté de la case à cocher"
2819
+
2820
+ #: includes/fields/class-acf-field-true_false.php:155
2821
+ msgid "On Text"
2822
+ msgstr "Texte côté « Actif »"
2823
+
2824
+ #: includes/fields/class-acf-field-true_false.php:156
2825
+ msgid "Text shown when active"
2826
+ msgstr "Text affiché lorsque le bouton est actif"
2827
+
2828
+ #: includes/fields/class-acf-field-true_false.php:170
2829
+ msgid "Off Text"
2830
+ msgstr "Texte côté « Inactif »"
2831
+
2832
+ #: includes/fields/class-acf-field-true_false.php:171
2833
+ msgid "Text shown when inactive"
2834
+ msgstr "Texte affiché lorsque le bouton est désactivé"
2835
+
2836
+ #: includes/fields/class-acf-field-url.php:25
2837
+ msgid "Url"
2838
+ msgstr "URL"
2839
+
2840
+ #: includes/fields/class-acf-field-url.php:151
2841
+ msgid "Value must be a valid URL"
2842
+ msgstr "La valeur doit être une URL valide"
2843
+
2844
+ #: includes/fields/class-acf-field-user.php:25 includes/locations.php:95
2845
+ msgid "User"
2846
+ msgstr "Utilisateur"
2847
+
2848
+ #: includes/fields/class-acf-field-user.php:378
2849
+ msgid "Filter by role"
2850
+ msgstr "Filtrer par rôle"
2851
+
2852
+ #: includes/fields/class-acf-field-user.php:386
2853
+ msgid "All user roles"
2854
+ msgstr "Tous les rôles utilisateurs"
2855
+
2856
+ #: includes/fields/class-acf-field-user.php:417
2857
+ msgid "User Array"
2858
+ msgstr "Tableau"
2859
+
2860
+ #: includes/fields/class-acf-field-user.php:418
2861
+ msgid "User Object"
2862
+ msgstr "Objet"
2863
+
2864
+ #: includes/fields/class-acf-field-user.php:419
2865
+ msgid "User ID"
2866
+ msgstr "ID de l'utilisateur"
2867
+
2868
+ # @ acf
2869
+ #: includes/fields/class-acf-field-wysiwyg.php:25
2870
+ msgid "Wysiwyg Editor"
2871
+ msgstr "Éditeur WYSIWYG"
2872
+
2873
+ #: includes/fields/class-acf-field-wysiwyg.php:330
2874
+ msgid "Visual"
2875
+ msgstr "Visuel"
2876
+
2877
+ # @ acf
2878
+ #: includes/fields/class-acf-field-wysiwyg.php:331
2879
+ msgctxt "Name for the Text editor tab (formerly HTML)"
2880
+ msgid "Text"
2881
+ msgstr "Texte"
2882
+
2883
+ #: includes/fields/class-acf-field-wysiwyg.php:337
2884
+ msgid "Click to initialize TinyMCE"
2885
+ msgstr "Cliquez pour initialiser TinyMCE"
2886
+
2887
+ #: includes/fields/class-acf-field-wysiwyg.php:390
2888
+ msgid "Tabs"
2889
+ msgstr "Onglets"
2890
+
2891
+ #: includes/fields/class-acf-field-wysiwyg.php:395
2892
+ msgid "Visual & Text"
2893
+ msgstr "Visuel & Texte brut"
2894
+
2895
+ #: includes/fields/class-acf-field-wysiwyg.php:396
2896
+ msgid "Visual Only"
2897
+ msgstr "Visuel seulement"
2898
+
2899
+ # @ acf
2900
+ #: includes/fields/class-acf-field-wysiwyg.php:397
2901
+ msgid "Text Only"
2902
+ msgstr "Texte brut seulement"
2903
+
2904
+ # @ acf
2905
+ #: includes/fields/class-acf-field-wysiwyg.php:404
2906
+ msgid "Toolbar"
2907
+ msgstr "Barre d‘outils"
2908
+
2909
+ # @ acf
2910
+ #: includes/fields/class-acf-field-wysiwyg.php:419
2911
+ msgid "Show Media Upload Buttons?"
2912
+ msgstr "Afficher les boutons d‘ajout de médias?"
2913
+
2914
+ #: includes/fields/class-acf-field-wysiwyg.php:429
2915
+ msgid "Delay initialization?"
2916
+ msgstr "Retarder l’initialisation?"
2917
+
2918
+ #: includes/fields/class-acf-field-wysiwyg.php:430
2919
+ msgid "TinyMCE will not be initalized until field is clicked"
2920
+ msgstr ""
2921
+ "TinyMCE ne sera pas initialisé avant que l’utilisateur clique sur le champ"
2922
+
2923
+ #: includes/forms/form-front.php:55
2924
+ msgid "Validate Email"
2925
+ msgstr "Valider l’adresse courriel"
2926
+
2927
+ # @ acf
2928
+ #: includes/forms/form-front.php:103 pro/fields/class-acf-field-gallery.php:531
2929
+ #: pro/options-page.php:81
2930
+ msgid "Update"
2931
+ msgstr "Mise à jour"
2932
+
2933
+ # @ acf
2934
+ #: includes/forms/form-front.php:104
2935
+ msgid "Post updated"
2936
+ msgstr "Article mis à jour"
2937
+
2938
+ #: includes/forms/form-front.php:230
2939
+ msgid "Spam Detected"
2940
+ msgstr "Pourriel repéré"
2941
+
2942
+ #: includes/forms/form-user.php:336
2943
+ #, php-format
2944
+ msgid "<strong>ERROR</strong>: %s"
2945
+ msgstr "<strong>ERREUR</strong> : %s"
2946
+
2947
+ # @ acf
2948
+ #: includes/locations.php:93 includes/locations/class-acf-location-post.php:27
2949
+ msgid "Post"
2950
+ msgstr "Article"
2951
+
2952
+ # @ acf
2953
+ #: includes/locations.php:94 includes/locations/class-acf-location-page.php:27
2954
+ msgid "Page"
2955
+ msgstr "Page"
2956
+
2957
+ # @ acf
2958
+ #: includes/locations.php:96
2959
+ msgid "Forms"
2960
+ msgstr "Formulaires"
2961
+
2962
+ #: includes/locations.php:243
2963
+ msgid "is equal to"
2964
+ msgstr "est égal à"
2965
+
2966
+ #: includes/locations.php:244
2967
+ msgid "is not equal to"
2968
+ msgstr "n‘est pas égal à"
2969
+
2970
+ #: includes/locations/class-acf-location-attachment.php:27
2971
+ msgid "Attachment"
2972
+ msgstr "Fichier attaché"
2973
+
2974
+ #: includes/locations/class-acf-location-attachment.php:109
2975
+ #, php-format
2976
+ msgid "All %s formats"
2977
+ msgstr "Tous les formats %s"
2978
+
2979
+ #: includes/locations/class-acf-location-comment.php:27
2980
+ msgid "Comment"
2981
+ msgstr "Commentaire"
2982
+
2983
+ # @ acf
2984
+ #: includes/locations/class-acf-location-current-user-role.php:27
2985
+ msgid "Current User Role"
2986
+ msgstr "Rôle de l’utilisateur courant"
2987
+
2988
+ #: includes/locations/class-acf-location-current-user-role.php:110
2989
+ msgid "Super Admin"
2990
+ msgstr "Super Administrateur"
2991
+
2992
+ #: includes/locations/class-acf-location-current-user.php:27
2993
+ msgid "Current User"
2994
+ msgstr "Utilisateur courant"
2995
+
2996
+ #: includes/locations/class-acf-location-current-user.php:97
2997
+ msgid "Logged in"
2998
+ msgstr "Connecté"
2999
+
3000
+ #: includes/locations/class-acf-location-current-user.php:98
3001
+ msgid "Viewing front end"
3002
+ msgstr "Est dans le site"
3003
+
3004
+ #: includes/locations/class-acf-location-current-user.php:99
3005
+ msgid "Viewing back end"
3006
+ msgstr "Est dans l’interface d’administration"
3007
+
3008
+ #: includes/locations/class-acf-location-nav-menu-item.php:27
3009
+ msgid "Menu Item"
3010
+ msgstr "Élément de menu"
3011
+
3012
+ #: includes/locations/class-acf-location-nav-menu.php:27
3013
+ msgid "Menu"
3014
+ msgstr "Menu"
3015
+
3016
+ # @ acf
3017
+ #: includes/locations/class-acf-location-nav-menu.php:109
3018
+ msgid "Menu Locations"
3019
+ msgstr "Emplacement de menu"
3020
+
3021
+ #: includes/locations/class-acf-location-nav-menu.php:119
3022
+ msgid "Menus"
3023
+ msgstr "Menus"
3024
+
3025
+ # @ acf
3026
+ #: includes/locations/class-acf-location-page-parent.php:27
3027
+ msgid "Page Parent"
3028
+ msgstr "Page parente"
3029
+
3030
+ #: includes/locations/class-acf-location-page-template.php:27
3031
+ msgid "Page Template"
3032
+ msgstr "Modèle de page"
3033
+
3034
+ # @ acf
3035
+ #: includes/locations/class-acf-location-page-template.php:87
3036
+ #: includes/locations/class-acf-location-post-template.php:134
3037
+ msgid "Default Template"
3038
+ msgstr "Modèle de base"
3039
+
3040
+ # @ acf
3041
+ #: includes/locations/class-acf-location-page-type.php:27
3042
+ msgid "Page Type"
3043
+ msgstr "Type de page"
3044
+
3045
+ #: includes/locations/class-acf-location-page-type.php:146
3046
+ msgid "Front Page"
3047
+ msgstr "Page d’accueil"
3048
+
3049
+ #: includes/locations/class-acf-location-page-type.php:147
3050
+ msgid "Posts Page"
3051
+ msgstr "Page des articles"
3052
+
3053
+ #: includes/locations/class-acf-location-page-type.php:148
3054
+ msgid "Top Level Page (no parent)"
3055
+ msgstr "Page de haut niveau (sans parent)"
3056
+
3057
+ #: includes/locations/class-acf-location-page-type.php:149
3058
+ msgid "Parent Page (has children)"
3059
+ msgstr "Page parente (avec page(s) enfant)"
3060
+
3061
+ #: includes/locations/class-acf-location-page-type.php:150
3062
+ msgid "Child Page (has parent)"
3063
+ msgstr "Page enfant (avec parent)"
3064
+
3065
+ #: includes/locations/class-acf-location-post-category.php:27
3066
+ msgid "Post Category"
3067
+ msgstr "Catégorie"
3068
+
3069
+ # @ acf
3070
+ #: includes/locations/class-acf-location-post-format.php:27
3071
+ msgid "Post Format"
3072
+ msgstr "Format d‘article"
3073
+
3074
+ # @ acf
3075
+ #: includes/locations/class-acf-location-post-status.php:27
3076
+ msgid "Post Status"
3077
+ msgstr "Statut de l’article"
3078
+
3079
+ # @ acf
3080
+ #: includes/locations/class-acf-location-post-taxonomy.php:27
3081
+ msgid "Post Taxonomy"
3082
+ msgstr "Taxonomie"
3083
+
3084
+ #: includes/locations/class-acf-location-post-template.php:27
3085
+ msgid "Post Template"
3086
+ msgstr "Modèle d’article"
3087
+
3088
+ # @ acf
3089
+ #: includes/locations/class-acf-location-user-form.php:27
3090
+ msgid "User Form"
3091
+ msgstr "Formulaire utilisateur"
3092
+
3093
+ #: includes/locations/class-acf-location-user-form.php:88
3094
+ msgid "Add / Edit"
3095
+ msgstr "Ajouter / Modifier"
3096
+
3097
+ #: includes/locations/class-acf-location-user-form.php:89
3098
+ msgid "Register"
3099
+ msgstr "Inscription"
3100
+
3101
+ # @ acf
3102
+ #: includes/locations/class-acf-location-user-role.php:27
3103
+ msgid "User Role"
3104
+ msgstr "Rôle utilisateur"
3105
+
3106
+ #: includes/locations/class-acf-location-widget.php:27
3107
+ msgid "Widget"
3108
+ msgstr "Widget"
3109
+
3110
+ # @ default
3111
+ #: includes/validation.php:364
3112
+ #, php-format
3113
+ msgid "%s value is required"
3114
+ msgstr "La valeur %s est requise"
3115
+
3116
+ # @ acf
3117
+ #. Plugin Name of the plugin/theme
3118
+ #: pro/acf-pro.php:28
3119
+ msgid "Advanced Custom Fields PRO"
3120
+ msgstr "Advanced Custom Fields PRO"
3121
+
3122
+ #: pro/admin/admin-options-page.php:198
3123
+ msgid "Publish"
3124
+ msgstr "Publier"
3125
+
3126
+ # @ default
3127
+ #: pro/admin/admin-options-page.php:204
3128
+ #, php-format
3129
+ msgid ""
3130
+ "No Custom Field Groups found for this options page. <a href=\"%s\">Create a "
3131
+ "Custom Field Group</a>"
3132
+ msgstr ""
3133
+ "Aucun groupe de champs trouvé pour cette page d’options. <a href=\"%s"
3134
+ "\">Créer un groupe de champs</a>"
3135
+
3136
+ #: pro/admin/admin-updates.php:49
3137
+ msgid "<b>Error</b>. Could not connect to update server"
3138
+ msgstr "<b>Erreur</b>. Impossible de joindre le serveur"
3139
+
3140
+ # @ acf
3141
+ #: pro/admin/admin-updates.php:118 pro/admin/views/html-settings-updates.php:13
3142
+ msgid "Updates"
3143
+ msgstr "Mises-à-jour"
3144
+
3145
+ #: pro/admin/admin-updates.php:191
3146
+ msgid ""
3147
+ "<b>Error</b>. Could not authenticate update package. Please check again or "
3148
+ "deactivate and reactivate your ACF PRO license."
3149
+ msgstr ""
3150
+ "<b>Erreur</b>. Impossible d'authentifier la mise-à-jour. Merci d'essayer à "
3151
+ "nouveau et si le problème persiste, désactivez et réactivez votre licence "
3152
+ "ACF PRO."
3153
+
3154
+ #: pro/admin/views/html-settings-updates.php:7
3155
+ msgid "Deactivate License"
3156
+ msgstr "Désactiver la licence"
3157
+
3158
+ # @ acf
3159
+ #: pro/admin/views/html-settings-updates.php:7
3160
+ msgid "Activate License"
3161
+ msgstr "Activer votre licence"
3162
+
3163
+ # @ acf
3164
+ #: pro/admin/views/html-settings-updates.php:17
3165
+ msgid "License Information"
3166
+ msgstr "Informations sur la licence"
3167
+
3168
+ #: pro/admin/views/html-settings-updates.php:20
3169
+ #, php-format
3170
+ msgid ""
3171
+ "To unlock updates, please enter your license key below. If you don't have a "
3172
+ "licence key, please see <a href=\"%s\" target=\"_blank\">details & pricing</"
3173
+ "a>."
3174
+ msgstr ""
3175
+ "Pour débloquer les mises-à-jour, veuillez entrer votre clé de licence ci-"
3176
+ "dessous. Si vous n’en avez pas, rendez-vous sur nos <a href=\"%s\" target="
3177
+ "\"_blank\">détails & tarifs</a>."
3178
+
3179
+ # @ acf
3180
+ #: pro/admin/views/html-settings-updates.php:29
3181
+ msgid "License Key"
3182
+ msgstr "Code de licence"
3183
+
3184
+ # @ acf
3185
+ #: pro/admin/views/html-settings-updates.php:61
3186
+ msgid "Update Information"
3187
+ msgstr "Informations concernant les mises-à-jour"
3188
+
3189
+ #: pro/admin/views/html-settings-updates.php:68
3190
+ msgid "Current Version"
3191
+ msgstr "Version installée"
3192
+
3193
+ #: pro/admin/views/html-settings-updates.php:76
3194
+ msgid "Latest Version"
3195
+ msgstr "Version disponible"
3196
+
3197
+ # @ acf
3198
+ #: pro/admin/views/html-settings-updates.php:84
3199
+ msgid "Update Available"
3200
+ msgstr "Mise-à-jour disponible"
3201
+
3202
+ # @ acf
3203
+ #: pro/admin/views/html-settings-updates.php:92
3204
+ msgid "Update Plugin"
3205
+ msgstr "Mettre-à-jour l’extension"
3206
+
3207
+ #: pro/admin/views/html-settings-updates.php:94
3208
+ msgid "Please enter your license key above to unlock updates"
3209
+ msgstr "Entrez votre clé de licence ci-dessus pour activer les mises-à-jour"
3210
+
3211
+ #: pro/admin/views/html-settings-updates.php:100
3212
+ msgid "Check Again"
3213
+ msgstr "Vérifier à nouveau"
3214
+
3215
+ # @ wp3i
3216
+ #: pro/admin/views/html-settings-updates.php:117
3217
+ msgid "Upgrade Notice"
3218
+ msgstr "Informations de mise-à-niveau"
3219
+
3220
+ #: pro/blocks.php:371
3221
+ msgid "Switch to Edit"
3222
+ msgstr "Passer en Édition"
3223
+
3224
+ #: pro/blocks.php:372
3225
+ msgid "Switch to Preview"
3226
+ msgstr "Passer en Prévisualisation"
3227
+
3228
+ #: pro/fields/class-acf-field-clone.php:25
3229
+ msgctxt "noun"
3230
+ msgid "Clone"
3231
+ msgstr "Clone"
3232
+
3233
+ #: pro/fields/class-acf-field-clone.php:812
3234
+ msgid "Select one or more fields you wish to clone"
3235
+ msgstr "Sélectionnez un ou plusieurs champs à cloner"
3236
+
3237
+ # @ acf
3238
+ #: pro/fields/class-acf-field-clone.php:829
3239
+ msgid "Display"
3240
+ msgstr "Format d'affichage"
3241
+
3242
+ #: pro/fields/class-acf-field-clone.php:830
3243
+ msgid "Specify the style used to render the clone field"
3244
+ msgstr "Définit le style utilisé pour générer le champ dupliqué"
3245
+
3246
+ #: pro/fields/class-acf-field-clone.php:835
3247
+ msgid "Group (displays selected fields in a group within this field)"
3248
+ msgstr ""
3249
+ "Groupe (affiche les champs sélectionnés dans un groupe à l’intérieur de ce "
3250
+ "champ)"
3251
+
3252
+ #: pro/fields/class-acf-field-clone.php:836
3253
+ msgid "Seamless (replaces this field with selected fields)"
3254
+ msgstr "Remplace ce champ par les champs sélectionnés"
3255
+
3256
+ #: pro/fields/class-acf-field-clone.php:857
3257
+ #, php-format
3258
+ msgid "Labels will be displayed as %s"
3259
+ msgstr "Les labels seront affichés en tant que %s"
3260
+
3261
+ #: pro/fields/class-acf-field-clone.php:860
3262
+ msgid "Prefix Field Labels"
3263
+ msgstr "Préfixer les labels de champs"
3264
+
3265
+ #: pro/fields/class-acf-field-clone.php:871
3266
+ #, php-format
3267
+ msgid "Values will be saved as %s"
3268
+ msgstr "Les valeurs seront enregistrées en tant que %s"
3269
+
3270
+ #: pro/fields/class-acf-field-clone.php:874
3271
+ msgid "Prefix Field Names"
3272
+ msgstr "Préfixer les noms de champs"
3273
+
3274
+ #: pro/fields/class-acf-field-clone.php:992
3275
+ msgid "Unknown field"
3276
+ msgstr "Champ inconnu"
3277
+
3278
+ #: pro/fields/class-acf-field-clone.php:1031
3279
+ msgid "Unknown field group"
3280
+ msgstr "Groupe de champ inconnu"
3281
+
3282
+ #: pro/fields/class-acf-field-clone.php:1035
3283
+ #, php-format
3284
+ msgid "All fields from %s field group"
3285
+ msgstr "Tous les champs du groupe %s"
3286
+
3287
+ # @ acf
3288
+ #: pro/fields/class-acf-field-flexible-content.php:31
3289
+ #: pro/fields/class-acf-field-repeater.php:193
3290
+ #: pro/fields/class-acf-field-repeater.php:468
3291
+ msgid "Add Row"
3292
+ msgstr "Ajouter un élément"
3293
+
3294
+ # @ acf
3295
+ #: pro/fields/class-acf-field-flexible-content.php:73
3296
+ #: pro/fields/class-acf-field-flexible-content.php:924
3297
+ #: pro/fields/class-acf-field-flexible-content.php:1006
3298
+ msgid "layout"
3299
+ msgid_plural "layouts"
3300
+ msgstr[0] "mise-en-forme"
3301
+ msgstr[1] "mises-en-forme"
3302
+
3303
+ # @ acf
3304
+ #: pro/fields/class-acf-field-flexible-content.php:74
3305
+ msgid "layouts"
3306
+ msgstr "mises-en-forme"
3307
+
3308
+ #: pro/fields/class-acf-field-flexible-content.php:77
3309
+ #: pro/fields/class-acf-field-flexible-content.php:923
3310
+ #: pro/fields/class-acf-field-flexible-content.php:1005
3311
+ msgid "This field requires at least {min} {label} {identifier}"
3312
+ msgstr "Ce champ requiert au moins {min} {label} {identifier}"
3313
+
3314
+ #: pro/fields/class-acf-field-flexible-content.php:78
3315
+ msgid "This field has a limit of {max} {label} {identifier}"
3316
+ msgstr "Ce champ a une limite de {max} {label} {identifier}"
3317
+
3318
+ #: pro/fields/class-acf-field-flexible-content.php:81
3319
+ msgid "{available} {label} {identifier} available (max {max})"
3320
+ msgstr "{available} {label} {identifier} disponible (max {max})"
3321
+
3322
+ #: pro/fields/class-acf-field-flexible-content.php:82
3323
+ msgid "{required} {label} {identifier} required (min {min})"
3324
+ msgstr "{required} {label} {identifier} requis (min {min})"
3325
+
3326
+ # @ acf
3327
+ #: pro/fields/class-acf-field-flexible-content.php:85
3328
+ msgid "Flexible Content requires at least 1 layout"
3329
+ msgstr "Le contenu flexible nécessite au moins une mise-en-forme"
3330
+
3331
+ #: pro/fields/class-acf-field-flexible-content.php:287
3332
+ #, php-format
3333
+ msgid "Click the \"%s\" button below to start creating your layout"
3334
+ msgstr ""
3335
+ "Cliquez sur le bouton « %s » ci-dessous pour créer votre première mise-en-"
3336
+ "forme"
3337
+
3338
+ # @ acf
3339
+ #: pro/fields/class-acf-field-flexible-content.php:413
3340
+ msgid "Add layout"
3341
+ msgstr "Ajouter une mise-en-forme"
3342
+
3343
+ # @ acf
3344
+ #: pro/fields/class-acf-field-flexible-content.php:414
3345
+ msgid "Remove layout"
3346
+ msgstr "Retirer la mise-en-forme"
3347
+
3348
+ #: pro/fields/class-acf-field-flexible-content.php:415
3349
+ #: pro/fields/class-acf-field-repeater.php:301
3350
+ msgid "Click to toggle"
3351
+ msgstr "Cliquer pour intervertir"
3352
+
3353
+ # @ acf
3354
+ #: pro/fields/class-acf-field-flexible-content.php:555
3355
+ msgid "Reorder Layout"
3356
+ msgstr "Réorganiser la mise-en-forme"
3357
+
3358
+ #: pro/fields/class-acf-field-flexible-content.php:555
3359
+ msgid "Reorder"
3360
+ msgstr "Réorganiser"
3361
+
3362
+ # @ acf
3363
+ #: pro/fields/class-acf-field-flexible-content.php:556
3364
+ msgid "Delete Layout"
3365
+ msgstr "Supprimer la mise-en-forme"
3366
+
3367
+ #: pro/fields/class-acf-field-flexible-content.php:557
3368
+ msgid "Duplicate Layout"
3369
+ msgstr "Dupliquer la mise-en-forme"
3370
+
3371
+ # @ acf
3372
+ #: pro/fields/class-acf-field-flexible-content.php:558
3373
+ msgid "Add New Layout"
3374
+ msgstr "Ajouter une nouvelle mise-en-forme"
3375
+
3376
+ #: pro/fields/class-acf-field-flexible-content.php:629
3377
+ msgid "Min"
3378
+ msgstr "Min"
3379
+
3380
+ #: pro/fields/class-acf-field-flexible-content.php:642
3381
+ msgid "Max"
3382
+ msgstr "Max"
3383
+
3384
+ #: pro/fields/class-acf-field-flexible-content.php:669
3385
+ #: pro/fields/class-acf-field-repeater.php:464
3386
+ msgid "Button Label"
3387
+ msgstr "Intitulé du bouton"
3388
+
3389
+ # @ acf
3390
+ #: pro/fields/class-acf-field-flexible-content.php:678
3391
+ msgid "Minimum Layouts"
3392
+ msgstr "Nombre minimum de mises-en-forme"
3393
+
3394
+ # @ acf
3395
+ #: pro/fields/class-acf-field-flexible-content.php:687
3396
+ msgid "Maximum Layouts"
3397
+ msgstr "Nombre maximum de mises-en-forme"
3398
+
3399
+ # @ acf
3400
+ #: pro/fields/class-acf-field-gallery.php:73
3401
+ msgid "Add Image to Gallery"
3402
+ msgstr "Ajouter l'image à la galerie"
3403
+
3404
+ #: pro/fields/class-acf-field-gallery.php:74
3405
+ msgid "Maximum selection reached"
3406
+ msgstr "Nombre de sélections maximales atteint"
3407
+
3408
+ #: pro/fields/class-acf-field-gallery.php:340
3409
+ msgid "Length"
3410
+ msgstr "Longueur"
3411
+
3412
+ #: pro/fields/class-acf-field-gallery.php:383
3413
+ msgid "Caption"
3414
+ msgstr "Légende"
3415
+
3416
+ #: pro/fields/class-acf-field-gallery.php:392
3417
+ msgid "Alt Text"
3418
+ msgstr "Texte alternatif"
3419
+
3420
+ #: pro/fields/class-acf-field-gallery.php:508
3421
+ msgid "Add to gallery"
3422
+ msgstr "Ajouter à la galerie"
3423
+
3424
+ # @ acf
3425
+ #: pro/fields/class-acf-field-gallery.php:512
3426
+ msgid "Bulk actions"
3427
+ msgstr "Actions de groupe"
3428
+
3429
+ #: pro/fields/class-acf-field-gallery.php:513
3430
+ msgid "Sort by date uploaded"
3431
+ msgstr "Ranger par date d'import"
3432
+
3433
+ #: pro/fields/class-acf-field-gallery.php:514
3434
+ msgid "Sort by date modified"
3435
+ msgstr "Ranger par date de modification"
3436
+
3437
+ # @ acf
3438
+ #: pro/fields/class-acf-field-gallery.php:515
3439
+ msgid "Sort by title"
3440
+ msgstr "Ranger par titre"
3441
+
3442
+ #: pro/fields/class-acf-field-gallery.php:516
3443
+ msgid "Reverse current order"
3444
+ msgstr "Inverser l'ordre actuel"
3445
+
3446
+ # @ acf
3447
+ #: pro/fields/class-acf-field-gallery.php:528
3448
+ msgid "Close"
3449
+ msgstr "Fermer"
3450
+
3451
+ #: pro/fields/class-acf-field-gallery.php:601
3452
+ msgid "Insert"
3453
+ msgstr "Insérer"
3454
+
3455
+ #: pro/fields/class-acf-field-gallery.php:602
3456
+ msgid "Specify where new attachments are added"
3457
+ msgstr "Définir où les nouveaux fichiers attachés sont ajoutés"
3458
+
3459
+ #: pro/fields/class-acf-field-gallery.php:606
3460
+ msgid "Append to the end"
3461
+ msgstr "Ajouter à la fin"
3462
+
3463
+ #: pro/fields/class-acf-field-gallery.php:607
3464
+ msgid "Prepend to the beginning"
3465
+ msgstr "Insérer au début"
3466
+
3467
+ # @ acf
3468
+ #: pro/fields/class-acf-field-gallery.php:626
3469
+ msgid "Minimum Selection"
3470
+ msgstr "Nombre minimum"
3471
+
3472
+ # @ acf
3473
+ #: pro/fields/class-acf-field-gallery.php:634
3474
+ msgid "Maximum Selection"
3475
+ msgstr "Nombre maximum"
3476
+
3477
+ #: pro/fields/class-acf-field-repeater.php:65
3478
+ #: pro/fields/class-acf-field-repeater.php:661
3479
+ msgid "Minimum rows reached ({min} rows)"
3480
+ msgstr "Nombre minimal d'éléments atteint ({min} éléments)"
3481
+
3482
+ #: pro/fields/class-acf-field-repeater.php:66
3483
+ msgid "Maximum rows reached ({max} rows)"
3484
+ msgstr "Nombre maximal d'éléments atteint ({max} éléments)"
3485
+
3486
+ # @ acf
3487
+ #: pro/fields/class-acf-field-repeater.php:338
3488
+ msgid "Add row"
3489
+ msgstr "Ajouter un élément"
3490
+
3491
+ # @ acf
3492
+ #: pro/fields/class-acf-field-repeater.php:339
3493
+ msgid "Remove row"
3494
+ msgstr "Retirer l'élément"
3495
+
3496
+ #: pro/fields/class-acf-field-repeater.php:417
3497
+ msgid "Collapsed"
3498
+ msgstr "Replié"
3499
+
3500
+ #: pro/fields/class-acf-field-repeater.php:418
3501
+ msgid "Select a sub field to show when row is collapsed"
3502
+ msgstr "Choisir un sous champ à afficher lorsque l’élément est replié"
3503
+
3504
+ # @ acf
3505
+ #: pro/fields/class-acf-field-repeater.php:428
3506
+ msgid "Minimum Rows"
3507
+ msgstr "Nombre minimal d'éléments"
3508
+
3509
+ # @ acf
3510
+ #: pro/fields/class-acf-field-repeater.php:438
3511
+ msgid "Maximum Rows"
3512
+ msgstr "Nombre maximal d'éléments"
3513
+
3514
+ #: pro/locations/class-acf-location-options-page.php:79
3515
+ msgid "No options pages exist"
3516
+ msgstr "Aucune page d'option n’existe"
3517
+
3518
+ # @ acf
3519
+ #: pro/options-page.php:51
3520
+ msgid "Options"
3521
+ msgstr "Options"
3522
+
3523
+ # @ acf
3524
+ #: pro/options-page.php:82
3525
+ msgid "Options Updated"
3526
+ msgstr "Options mises à jours"
3527
+
3528
+ #: pro/updates.php:97
3529
+ #, php-format
3530
+ msgid ""
3531
+ "To enable updates, please enter your license key on the <a href=\"%s"
3532
+ "\">Updates</a> page. If you don't have a licence key, please see <a href=\"%s"
3533
+ "\">details & pricing</a>."
3534
+ msgstr ""
3535
+ "Pour activer les mises-à-jour, veuillez entrer votre clé de licence sur la "
3536
+ "page <a href=\"%s\">Mises-à-jour</a>. Si vous n’en avez pas, rendez-vous sur "
3537
+ "nos <a href=\"%s\">détails & tarifs</a>."
3538
+
3539
+ #: tests/basic/test-blocks.php:116
3540
+ msgid "My Test Block"
3541
+ msgstr "Mon bloc de test"
3542
+
3543
+ #: tests/basic/test-blocks.php:117
3544
+ msgid "A block for entering a link name and a custom URL."
3545
+ msgstr "Un bloc pour saisir un nom de lien et une URL."
3546
+
3547
+ # @ acf
3548
+ #: tests/basic/test-blocks.php:125
3549
+ msgid "Normal"
3550
+ msgstr "Normal"
3551
+
3552
+ #: tests/basic/test-blocks.php:126
3553
+ msgid "Fancy"
3554
+ msgstr "Élaboré"
3555
+
3556
+ #: tests/basic/test-blocks.php:135
3557
+ msgid "Block :: My Test Block"
3558
+ msgstr "Bloc :: Mon bloc de test"
3559
+
3560
+ #: tests/basic/test-blocks.php:155
3561
+ msgid "URL"
3562
+ msgstr "URL"
3563
+
3564
+ #. Plugin URI of the plugin/theme
3565
+ #. Author URI of the plugin/theme
3566
+ msgid "https://www.advancedcustomfields.com"
3567
+ msgstr "https://www.advancedcustomfields.com"
3568
+
3569
+ #. Author of the plugin/theme
3570
+ msgid "Elliot Condon"
3571
+ msgstr "Elliot Condon"
lang/acf-fr_FR.mo CHANGED
Binary file
lang/acf-fr_FR.po CHANGED
@@ -1,17 +1,17 @@
1
  msgid ""
2
  msgstr ""
3
- "Project-Id-Version: Advanced Custom Fields Pro v5.2.9\n"
4
  "Report-Msgid-Bugs-To: http://support.advancedcustomfields.com\n"
5
- "POT-Creation-Date: 2019-01-02 17:39+0100\n"
6
- "PO-Revision-Date: 2019-01-03 09:13+0100\n"
7
- "Last-Translator: Maxime BERNARD-JACQUET <maxime@dysign.fr>\n"
8
- "Language-Team: Dysign <maxime@dysign.fr>\n"
9
  "Language: fr_FR\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
  "Plural-Forms: nplurals=2; plural=(n > 1);\n"
14
- "X-Generator: Poedit 2.0.4\n"
15
  "X-Poedit-SourceCharset: UTF-8\n"
16
  "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
17
  "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
@@ -23,119 +23,129 @@ msgstr ""
23
  "X-Poedit-SearchPathExcluded-0: *.js\n"
24
 
25
  # @ acf
26
- #: acf.php:80
27
  msgid "Advanced Custom Fields"
28
  msgstr "Advanced Custom Fields"
29
 
30
  # @ acf
31
- #: acf.php:381 includes/admin/admin.php:117
32
  msgid "Field Groups"
33
  msgstr "Groupes de champs"
34
 
35
  # @ acf
36
- #: acf.php:382
37
  msgid "Field Group"
38
  msgstr "Groupe de champs"
39
 
40
  # @ acf
41
- #: acf.php:383 acf.php:415 includes/admin/admin.php:118
42
- #: pro/fields/class-acf-field-flexible-content.php:572
43
  msgid "Add New"
44
  msgstr "Ajouter"
45
 
46
  # @ acf
47
- #: acf.php:384
48
  msgid "Add New Field Group"
49
- msgstr "Nouveau groupe de champs"
50
 
51
  # @ acf
52
- #: acf.php:385
53
  msgid "Edit Field Group"
54
  msgstr "Modifier le groupe de champs"
55
 
56
  # @ acf
57
- #: acf.php:386
58
  msgid "New Field Group"
59
  msgstr "Nouveau groupe de champs"
60
 
61
  # @ default
62
- #: acf.php:387
63
  msgid "View Field Group"
64
  msgstr "Voir le groupe de champs"
65
 
66
  # @ default
67
- #: acf.php:388
68
  msgid "Search Field Groups"
69
- msgstr "Rechercher un groupe de champs"
70
 
71
  # @ default
72
- #: acf.php:389
73
  msgid "No Field Groups found"
74
  msgstr "Aucun groupe de champs trouvé"
75
 
76
  # @ default
77
- #: acf.php:390
78
  msgid "No Field Groups found in Trash"
79
  msgstr "Aucun groupe de champs trouvé dans la corbeille"
80
 
81
  # @ acf
82
- #: acf.php:413 includes/admin/admin-field-group.php:220
83
- #: includes/admin/admin-field-groups.php:525
84
  #: pro/fields/class-acf-field-clone.php:811
85
  msgid "Fields"
86
  msgstr "Champs"
87
 
88
  # @ acf
89
- #: acf.php:414
90
  msgid "Field"
91
  msgstr "Champ"
92
 
93
  # @ acf
94
- #: acf.php:416
95
  msgid "Add New Field"
96
  msgstr "Ajouter un champ"
97
 
98
  # @ acf
99
- #: acf.php:417
100
  msgid "Edit Field"
101
  msgstr "Modifier le champ"
102
 
103
  # @ acf
104
- #: acf.php:418 includes/admin/views/field-group-fields.php:41
105
  msgid "New Field"
106
  msgstr "Nouveau champ"
107
 
108
  # @ acf
109
- #: acf.php:419
110
  msgid "View Field"
111
  msgstr "Voir le champ"
112
 
113
  # @ default
114
- #: acf.php:420
115
  msgid "Search Fields"
116
  msgstr "Rechercher des champs"
117
 
118
  # @ default
119
- #: acf.php:421
120
  msgid "No Fields found"
121
  msgstr "Aucun champ trouvé"
122
 
123
  # @ default
124
- #: acf.php:422
125
  msgid "No Fields found in Trash"
126
  msgstr "Aucun champ trouvé dans la corbeille"
127
 
128
- #: acf.php:461 includes/admin/admin-field-group.php:402
129
- #: includes/admin/admin-field-groups.php:582
130
  msgid "Inactive"
131
  msgstr "Inactif"
132
 
133
- #: acf.php:466
134
  #, php-format
135
  msgid "Inactive <span class=\"count\">(%s)</span>"
136
  msgid_plural "Inactive <span class=\"count\">(%s)</span>"
137
  msgstr[0] "Inactif <span class=\"count\">(%s)</span>"
138
- msgstr[1] "Inactif <span class=\"count\">(%s)</span>"
 
 
 
 
 
 
 
 
 
 
139
 
140
  # @ default
141
  #: includes/admin/admin-field-group.php:86
@@ -174,7 +184,7 @@ msgstr "Brouillon du groupe de champs mis à jour."
174
 
175
  #: includes/admin/admin-field-group.php:171
176
  msgid "The string \"field_\" may not be used at the start of a field name"
177
- msgstr "Un champ ne peut pas commencer par \"field_\""
178
 
179
  #: includes/admin/admin-field-group.php:172
180
  msgid "This field cannot be moved until its changes have been saved"
@@ -194,7 +204,7 @@ msgstr "Mettre à la corbeille. Êtes-vous sûr ?"
194
 
195
  #: includes/admin/admin-field-group.php:175
196
  msgid "No toggle fields available"
197
- msgstr "Ajoutez d'abord une case à cocher ou un champ sélection"
198
 
199
  # @ acf
200
  #: includes/admin/admin-field-group.php:176
@@ -205,25 +215,16 @@ msgstr "Déplacer le champ personnalisé"
205
  msgid "Checked"
206
  msgstr "Coché"
207
 
208
- #: includes/admin/admin-field-group.php:178 includes/api/api-field.php:320
209
- msgid "(no label)"
210
- msgstr "(aucun libellé)"
211
-
212
  #: includes/admin/admin-field-group.php:179
213
  msgid "(this field)"
214
  msgstr "(ce champ)"
215
 
216
- #: includes/admin/admin-field-group.php:180
217
- #: includes/api/api-field-group.php:751
218
- msgid "copy"
219
- msgstr "copie"
220
-
221
  #: includes/admin/admin-field-group.php:181
222
  #: includes/admin/views/field-group-field-conditional-logic.php:51
223
  #: includes/admin/views/field-group-field-conditional-logic.php:151
224
  #: includes/admin/views/field-group-locations.php:29
225
  #: includes/admin/views/html-location-group.php:3
226
- #: includes/api/api-helpers.php:4039
227
  msgid "or"
228
  msgstr "ou"
229
 
@@ -234,7 +235,7 @@ msgstr "Vide"
234
  # @ acf
235
  #: includes/admin/admin-field-group.php:221
236
  msgid "Location"
237
- msgstr "Assigner ce groupe de champs"
238
 
239
  #: includes/admin/admin-field-group.php:222
240
  #: includes/admin/tools/class-acf-admin-tool-export.php:295
@@ -282,144 +283,132 @@ msgstr[0] "Actif <span class=\"count\">(%s)</span>"
282
  msgstr[1] "Actifs <span class=\"count\">(%s)</span>"
283
 
284
  # @ default
285
- #: includes/admin/admin-field-groups.php:157
286
- #, php-format
287
- msgid "Field group duplicated. %s"
288
- msgstr "Groupe de champs dupliqué. %s"
289
-
290
- # @ default
291
- #: includes/admin/admin-field-groups.php:161
292
  #, php-format
293
- msgid "%s field group duplicated."
294
  msgid_plural "%s field groups duplicated."
295
- msgstr[0] "%s groupe dupliqué."
296
  msgstr[1] "%s groupes de champs dupliqués."
297
 
298
  # @ default
299
- #: includes/admin/admin-field-groups.php:242
300
  #, php-format
301
- msgid "Field group synchronised. %s"
302
- msgstr "Groupe de champs synchronisé. %s"
303
-
304
- # @ acf
305
- #: includes/admin/admin-field-groups.php:246
306
- #, php-format
307
- msgid "%s field group synchronised."
308
  msgid_plural "%s field groups synchronised."
309
- msgstr[0] "%s groupe de champs synchronisé."
310
  msgstr[1] "%s groupes de champs synchronisés."
311
 
312
  # @ acf
313
- #: includes/admin/admin-field-groups.php:409
314
- #: includes/admin/admin-field-groups.php:572
315
  msgid "Sync available"
316
  msgstr "Synchronisation disponible"
317
 
318
- #: includes/admin/admin-field-groups.php:522 includes/forms/form-front.php:38
319
- #: pro/fields/class-acf-field-gallery.php:372
320
  msgid "Title"
321
  msgstr "Titre"
322
 
323
  # @ acf
324
- #: includes/admin/admin-field-groups.php:523
325
  #: includes/admin/views/field-group-options.php:96
326
  #: includes/admin/views/html-admin-page-upgrade-network.php:38
327
  #: includes/admin/views/html-admin-page-upgrade-network.php:49
328
- #: pro/fields/class-acf-field-gallery.php:399
329
  msgid "Description"
330
  msgstr "Description"
331
 
332
- #: includes/admin/admin-field-groups.php:524
333
  msgid "Status"
334
  msgstr "Statut"
335
 
336
  #. Description of the plugin/theme
337
- #: includes/admin/admin-field-groups.php:622
338
  msgid "Customize WordPress with powerful, professional and intuitive fields."
339
  msgstr ""
340
  "Personnalisez WordPress avec des champs intuitifs, puissants et "
341
  "professionnels."
342
 
343
  # @ acf
344
- #: includes/admin/admin-field-groups.php:624
345
  #: includes/admin/settings-info.php:76
346
  #: pro/admin/views/html-settings-updates.php:107
347
  msgid "Changelog"
348
- msgstr "Améliorations"
349
 
350
- #: includes/admin/admin-field-groups.php:629
351
  #, php-format
352
  msgid "See what's new in <a href=\"%s\">version %s</a>."
353
  msgstr "Découvrez les nouveautés de la <a href=\"%s\">version %s</a>."
354
 
355
  # @ acf
356
- #: includes/admin/admin-field-groups.php:632
357
  msgid "Resources"
358
  msgstr "Ressources"
359
 
360
- #: includes/admin/admin-field-groups.php:634
361
  msgid "Website"
362
  msgstr "Site web"
363
 
364
- #: includes/admin/admin-field-groups.php:635
365
  msgid "Documentation"
366
  msgstr "Documentation"
367
 
368
- #: includes/admin/admin-field-groups.php:636
369
  msgid "Support"
370
  msgstr "Support"
371
 
372
- #: includes/admin/admin-field-groups.php:638
373
  #: includes/admin/views/settings-info.php:84
374
  msgid "Pro"
375
  msgstr "Pro"
376
 
377
- #: includes/admin/admin-field-groups.php:643
378
  #, php-format
379
  msgid "Thank you for creating with <a href=\"%s\">ACF</a>."
380
- msgstr "Merci d’utiliser <a href=\"%s\">ACF</a>."
381
 
382
  # @ acf
383
- #: includes/admin/admin-field-groups.php:682
384
  msgid "Duplicate this item"
385
  msgstr "Dupliquer cet élément"
386
 
387
- #: includes/admin/admin-field-groups.php:682
388
- #: includes/admin/admin-field-groups.php:698
389
  #: includes/admin/views/field-group-field.php:46
390
- #: pro/fields/class-acf-field-flexible-content.php:571
391
  msgid "Duplicate"
392
  msgstr "Dupliquer"
393
 
394
- #: includes/admin/admin-field-groups.php:715
395
  #: includes/fields/class-acf-field-google-map.php:165
396
  #: includes/fields/class-acf-field-relationship.php:593
397
  msgid "Search"
398
  msgstr "Rechercher"
399
 
400
  # @ acf
401
- #: includes/admin/admin-field-groups.php:774
402
  #, php-format
403
  msgid "Select %s"
404
  msgstr "Choisir %s"
405
 
406
- #: includes/admin/admin-field-groups.php:782
407
  msgid "Synchronise field group"
408
  msgstr "Synchroniser le groupe de champs"
409
 
410
- #: includes/admin/admin-field-groups.php:782
411
- #: includes/admin/admin-field-groups.php:812
412
  msgid "Sync"
413
- msgstr "Synchronisation"
414
 
415
- #: includes/admin/admin-field-groups.php:794
416
  msgid "Apply"
417
  msgstr "Appliquer"
418
 
419
  # @ acf
420
- #: includes/admin/admin-field-groups.php:812
421
  msgid "Bulk Actions"
422
- msgstr "Actions en vrac"
423
 
424
  #: includes/admin/admin-tools.php:116
425
  #: includes/admin/views/html-admin-tools.php:21
@@ -439,24 +428,13 @@ msgid "Review sites & upgrade"
439
  msgstr "Examiner les sites et mettre à niveau"
440
 
441
  # @ acf
442
- #: includes/admin/admin.php:113
443
- #: includes/admin/views/field-group-options.php:110
444
  msgid "Custom Fields"
445
  msgstr "ACF"
446
 
447
- # @ acf
448
- #: includes/admin/settings-addons.php:51
449
- #: includes/admin/views/settings-addons.php:3
450
- msgid "Add-ons"
451
- msgstr "Add-ons"
452
-
453
- #: includes/admin/settings-addons.php:87
454
- msgid "<b>Error</b>. Could not load add-ons list"
455
- msgstr "<b>Erreur</b>. Impossible de charger la liste d'add-ons"
456
-
457
  #: includes/admin/settings-info.php:50
458
  msgid "Info"
459
- msgstr "Information"
460
 
461
  #: includes/admin/settings-info.php:75
462
  msgid "What's New"
@@ -477,20 +455,20 @@ msgstr "Générer le PHP"
477
  #: includes/admin/tools/class-acf-admin-tool-export.php:97
478
  #: includes/admin/tools/class-acf-admin-tool-export.php:135
479
  msgid "No field groups selected"
480
- msgstr "Aucun groupe de champs n'est sélectionné"
481
 
482
  #: includes/admin/tools/class-acf-admin-tool-export.php:174
483
  #, php-format
484
  msgid "Exported 1 field group."
485
  msgid_plural "Exported %s field groups."
486
- msgstr[0] "1 groupe de champ a été exporté."
487
  msgstr[1] "%s groupes de champs ont été exportés."
488
 
489
  # @ default
490
  #: includes/admin/tools/class-acf-admin-tool-export.php:241
491
  #: includes/admin/tools/class-acf-admin-tool-export.php:269
492
  msgid "Select Field Groups"
493
- msgstr "Sélectionnez le groupe de champs"
494
 
495
  #: includes/admin/tools/class-acf-admin-tool-export.php:336
496
  msgid ""
@@ -499,11 +477,11 @@ msgid ""
499
  "import to another ACF installation. Use the generate button to export to PHP "
500
  "code which you can place in your theme."
501
  msgstr ""
502
- "Sélectionnez le groupe de champs que vous souhaitez exporter et choisissez "
503
- "ensuite la méthode d'export : le bouton télécharger vous permettra "
504
- "d'exporter un fichier JSON que vous pourrez importer dans une autre "
505
- "installation ACF. Le bouton générer exportera le code PHP que vous pourrez "
506
- "placer dans votre thème."
507
 
508
  #: includes/admin/tools/class-acf-admin-tool-export.php:341
509
  msgid "Export File"
@@ -517,11 +495,11 @@ msgid ""
517
  "the following code to your theme's functions.php file or include it within "
518
  "an external file."
519
  msgstr ""
520
- "Le code suivant peut être utilisé pour enregistrer une version locale du "
521
- "groupe de champs sélectionné. Un groupe de champ local apporte pas mal de "
522
- "bénéfices tels qu'un temps de chargement plus rapide, le contrôle de version "
523
- "et les champs/paramètres dynamiques. Copiez/collez simplement le code "
524
- "suivant dans le functions.php de votre thème ou incluez-le depuis un autre "
525
  "fichier."
526
 
527
  #: includes/admin/tools/class-acf-admin-tool-export.php:446
@@ -537,47 +515,47 @@ msgstr "Copié"
537
  msgid "Import Field Groups"
538
  msgstr "Importer les groupes de champs"
539
 
540
- #: includes/admin/tools/class-acf-admin-tool-import.php:61
541
  msgid ""
542
  "Select the Advanced Custom Fields JSON file you would like to import. When "
543
  "you click the import button below, ACF will import the field groups."
544
  msgstr ""
545
- "Sélectionnez le fichier JSON que vous souhaitez importer et cliquez sur "
546
- "Importer. ACF s'occupe du reste."
547
 
548
  # @ acf
549
- #: includes/admin/tools/class-acf-admin-tool-import.php:66
550
  #: includes/fields/class-acf-field-file.php:57
551
  msgid "Select File"
552
  msgstr "Sélectionner un fichier"
553
 
554
- #: includes/admin/tools/class-acf-admin-tool-import.php:76
555
  msgid "Import File"
556
  msgstr "Importer le fichier"
557
 
558
  # @ acf
559
- #: includes/admin/tools/class-acf-admin-tool-import.php:100
560
  #: includes/fields/class-acf-field-file.php:170
561
  msgid "No file selected"
562
  msgstr "Aucun fichier sélectionné"
563
 
564
- #: includes/admin/tools/class-acf-admin-tool-import.php:113
565
  msgid "Error uploading file. Please try again"
566
- msgstr "Échec de l'import du fichier. Merci de réessayer"
567
 
568
- #: includes/admin/tools/class-acf-admin-tool-import.php:122
569
  msgid "Incorrect file type"
570
  msgstr "Type de fichier incorrect"
571
 
572
- #: includes/admin/tools/class-acf-admin-tool-import.php:139
573
  msgid "Import file empty"
574
- msgstr "Aucun fichier à importer"
575
 
576
- #: includes/admin/tools/class-acf-admin-tool-import.php:247
577
  #, php-format
578
  msgid "Imported 1 field group"
579
  msgid_plural "Imported %s field groups"
580
- msgstr[0] "1 groupe de champs importé"
581
  msgstr[1] "%s groupes de champs importés"
582
 
583
  #: includes/admin/views/field-group-field-conditional-logic.php:25
@@ -600,8 +578,8 @@ msgid "Add rule group"
600
  msgstr "Ajouter une règle"
601
 
602
  #: includes/admin/views/field-group-field.php:38
603
- #: pro/fields/class-acf-field-flexible-content.php:424
604
- #: pro/fields/class-acf-field-repeater.php:294
605
  msgid "Drag to reorder"
606
  msgstr "Faites glisser pour réorganiser"
607
 
@@ -614,9 +592,9 @@ msgstr "Modifier ce champ"
614
  # @ acf
615
  #: includes/admin/views/field-group-field.php:45
616
  #: includes/fields/class-acf-field-file.php:152
617
- #: includes/fields/class-acf-field-image.php:139
618
  #: includes/fields/class-acf-field-link.php:139
619
- #: pro/fields/class-acf-field-gallery.php:359
620
  msgid "Edit"
621
  msgstr "Modifier"
622
 
@@ -627,7 +605,7 @@ msgstr "Dupliquer ce champ"
627
 
628
  #: includes/admin/views/field-group-field.php:47
629
  msgid "Move field to another group"
630
- msgstr "Déplacer les champs dans un autre groupe"
631
 
632
  #: includes/admin/views/field-group-field.php:47
633
  msgid "Move"
@@ -640,7 +618,7 @@ msgstr "Supprimer ce champ"
640
 
641
  # @ acf
642
  #: includes/admin/views/field-group-field.php:48
643
- #: pro/fields/class-acf-field-flexible-content.php:570
644
  msgid "Delete"
645
  msgstr "Supprimer"
646
 
@@ -662,7 +640,7 @@ msgstr "Nom du champ"
662
  # @ acf
663
  #: includes/admin/views/field-group-field.php:76
664
  msgid "Single word, no spaces. Underscores and dashes allowed"
665
- msgstr "Un seul mot sans espace.<br />Les '_' et '-' sont autorisés"
666
 
667
  # @ acf
668
  #: includes/admin/views/field-group-field.php:85
@@ -686,7 +664,7 @@ msgstr "Requis ?"
686
 
687
  #: includes/admin/views/field-group-field.php:129
688
  msgid "Wrapper Attributes"
689
- msgstr "Attributs"
690
 
691
  #: includes/admin/views/field-group-field.php:135
692
  msgid "width"
@@ -716,20 +694,20 @@ msgstr "Ordre"
716
  #: includes/fields/class-acf-field-checkbox.php:420
717
  #: includes/fields/class-acf-field-radio.php:311
718
  #: includes/fields/class-acf-field-select.php:433
719
- #: pro/fields/class-acf-field-flexible-content.php:596
720
  msgid "Label"
721
  msgstr "Intitulé"
722
 
723
  # @ acf
724
  #: includes/admin/views/field-group-fields.php:6
725
  #: includes/fields/class-acf-field-taxonomy.php:939
726
- #: pro/fields/class-acf-field-flexible-content.php:610
727
  msgid "Name"
728
  msgstr "Nom"
729
 
730
  #: includes/admin/views/field-group-fields.php:7
731
  msgid "Key"
732
- msgstr "Identificateur"
733
 
734
  # @ acf
735
  #: includes/admin/views/field-group-fields.php:8
@@ -742,13 +720,13 @@ msgid ""
742
  "No fields. Click the <strong>+ Add Field</strong> button to create your "
743
  "first field."
744
  msgstr ""
745
- "Aucun champ. Cliquez sur le bouton <strong>+ Ajouter</strong> pour créer "
746
- "votre premier champ."
747
 
748
  # @ acf
749
  #: includes/admin/views/field-group-fields.php:31
750
  msgid "+ Add Field"
751
- msgstr "+ Ajouter"
752
 
753
  # @ acf
754
  #: includes/admin/views/field-group-locations.php:9
@@ -771,11 +749,11 @@ msgstr "Style"
771
 
772
  #: includes/admin/views/field-group-options.php:30
773
  msgid "Standard (WP metabox)"
774
- msgstr "Dans un bloc"
775
 
776
  #: includes/admin/views/field-group-options.php:31
777
  msgid "Seamless (no metabox)"
778
- msgstr "Sans contour"
779
 
780
  # @ acf
781
  #: includes/admin/views/field-group-options.php:38
@@ -826,7 +804,7 @@ msgstr "Sous les champs"
826
  # @ acf
827
  #: includes/admin/views/field-group-options.php:85
828
  msgid "Order No."
829
- msgstr "Numéro d’ordre"
830
 
831
  #: includes/admin/views/field-group-options.php:86
832
  msgid "Field groups with a lower order will appear first"
@@ -835,7 +813,7 @@ msgstr ""
835
 
836
  #: includes/admin/views/field-group-options.php:97
837
  msgid "Shown in field group list"
838
- msgstr "Affiché dans la page des groupes de champs ACF"
839
 
840
  #: includes/admin/views/field-group-options.php:107
841
  msgid "Permalink"
@@ -843,11 +821,11 @@ msgstr "Permalien"
843
 
844
  #: includes/admin/views/field-group-options.php:108
845
  msgid "Content Editor"
846
- msgstr "L'éditeur visuel (WYSIWYG)"
847
 
848
  #: includes/admin/views/field-group-options.php:109
849
  msgid "Excerpt"
850
- msgstr "Le résumé (excerpt)"
851
 
852
  #: includes/admin/views/field-group-options.php:111
853
  msgid "Discussion"
@@ -855,7 +833,7 @@ msgstr "Discussion"
855
 
856
  #: includes/admin/views/field-group-options.php:112
857
  msgid "Comments"
858
- msgstr "Les commentaires"
859
 
860
  #: includes/admin/views/field-group-options.php:113
861
  msgid "Revisions"
@@ -876,7 +854,7 @@ msgstr "Format"
876
 
877
  #: includes/admin/views/field-group-options.php:117
878
  msgid "Page Attributes"
879
- msgstr "Attributs de la page"
880
 
881
  # @ acf
882
  #: includes/admin/views/field-group-options.php:118
@@ -894,7 +872,7 @@ msgstr "Mots-clés"
894
 
895
  #: includes/admin/views/field-group-options.php:121
896
  msgid "Send Trackbacks"
897
- msgstr "Envoyer des Trackbacks"
898
 
899
  #: includes/admin/views/field-group-options.php:128
900
  msgid "Hide on screen"
@@ -904,7 +882,7 @@ msgstr "Masquer"
904
  #: includes/admin/views/field-group-options.php:129
905
  msgid "<b>Select</b> items to <b>hide</b> them from the edit screen."
906
  msgstr ""
907
- "<b>Cochez</b> les champs que vous souhaitez <b>masquer</b> sur la page "
908
  "d‘édition."
909
 
910
  # @ acf
@@ -914,7 +892,7 @@ msgid ""
914
  "options will be used (the one with the lowest order number)"
915
  msgstr ""
916
  "Si plusieurs groupes ACF sont présents sur une page d‘édition, le groupe "
917
- "portant le numéro le plus bas sera affiché en premier."
918
 
919
  #: includes/admin/views/html-admin-page-upgrade-network.php:26
920
  #, php-format
@@ -929,7 +907,7 @@ msgstr ""
929
  #: includes/admin/views/html-admin-page-upgrade-network.php:27
930
  #: includes/admin/views/html-admin-page-upgrade-network.php:92
931
  msgid "Upgrade Sites"
932
- msgstr "Mise à niveau des sites"
933
 
934
  #: includes/admin/views/html-admin-page-upgrade-network.php:36
935
  #: includes/admin/views/html-admin-page-upgrade-network.php:47
@@ -939,11 +917,11 @@ msgstr "Site"
939
  #: includes/admin/views/html-admin-page-upgrade-network.php:74
940
  #, php-format
941
  msgid "Site requires database upgrade from %s to %s"
942
- msgstr "Le site requiert la mise à niveau de la base de %s à %s"
943
 
944
  #: includes/admin/views/html-admin-page-upgrade-network.php:76
945
  msgid "Site is up to date"
946
- msgstr "Site à jour"
947
 
948
  #: includes/admin/views/html-admin-page-upgrade-network.php:93
949
  #, php-format
@@ -964,7 +942,8 @@ msgid ""
964
  "Are you sure you wish to run the updater now?"
965
  msgstr ""
966
  "Il est fortement recommandé de faire une sauvegarde de votre base de données "
967
- "avant de continuer. Êtes-vous sûr de vouloir lancer la migration maintenant ?"
 
968
 
969
  #: includes/admin/views/html-admin-page-upgrade-network.php:144
970
  #: includes/admin/views/html-admin-page-upgrade.php:31
@@ -985,7 +964,7 @@ msgstr "Mise à niveau échouée."
985
 
986
  #: includes/admin/views/html-admin-page-upgrade.php:30
987
  msgid "Reading upgrade tasks..."
988
- msgstr "Lecture des instructions de mise à jour..."
989
 
990
  #: includes/admin/views/html-admin-page-upgrade.php:33
991
  #, php-format
@@ -996,9 +975,9 @@ msgstr ""
996
 
997
  # @ acf
998
  #: includes/admin/views/html-admin-page-upgrade.php:116
999
- #: includes/ajax/class-acf-ajax-upgrade.php:33
1000
  msgid "No updates available."
1001
- msgstr "Aucune mise à jour disponible."
1002
 
1003
  #: includes/admin/views/html-admin-tools.php:21
1004
  msgid "Back to all tools"
@@ -1006,7 +985,7 @@ msgstr "Retour aux outils"
1006
 
1007
  #: includes/admin/views/html-location-group.php:3
1008
  msgid "Show this field group if"
1009
- msgstr "Montrer ce groupe quand"
1010
 
1011
  # @ acf
1012
  #: includes/admin/views/html-notice-upgrade.php:8
@@ -1034,12 +1013,12 @@ msgstr "Page d‘options"
1034
 
1035
  #: includes/admin/views/html-notice-upgrade.php:21
1036
  msgid "Database Upgrade Required"
1037
- msgstr "Mise à jour de la base de données nécessaire"
1038
 
1039
  #: includes/admin/views/html-notice-upgrade.php:22
1040
  #, php-format
1041
  msgid "Thank you for updating to %s v%s!"
1042
- msgstr "Merci d'avoir mis à jour %s v%s !"
1043
 
1044
  #: includes/admin/views/html-notice-upgrade.php:22
1045
  msgid ""
@@ -1053,8 +1032,13 @@ msgstr ""
1053
  msgid ""
1054
  "Please also check all premium add-ons (%s) are updated to the latest version."
1055
  msgstr ""
1056
- "Veuillez également vérifier que tous les add-ons premiums (%s) soient à jour "
1057
- "avec la dernière version."
 
 
 
 
 
1058
 
1059
  # @ acf
1060
  #: includes/admin/views/settings-addons.php:17
@@ -1107,9 +1091,10 @@ msgid ""
1107
  "ever! Noticeable changes are seen on the gallery, relationship and oEmbed "
1108
  "(new) fields!"
1109
  msgstr ""
1110
- "La plupart des champs se sont faits une beauté afin qu'ACF apparaisse sous "
1111
- "son plus beau jour ! Vous apercevrez des améliorations sur la galerie, le "
1112
- "champ relationnel et le petit nouveau : oembed !"
 
1113
 
1114
  #: includes/admin/views/settings-info.php:29
1115
  msgid "Improved Data"
@@ -1122,16 +1107,16 @@ msgid ""
1122
  "and out of parent fields!"
1123
  msgstr ""
1124
  "L'architecture des données a été complètement revue et permet dorénavant aux "
1125
- "sous champs de vivre indépendamment de leurs parents. Cela permet de "
1126
  "déplacer les champs en dehors de leurs parents !"
1127
 
1128
  #: includes/admin/views/settings-info.php:38
1129
  msgid "Goodbye Add-ons. Hello PRO"
1130
- msgstr "Au revoir Add-ons. Bonjour ACF Pro"
1131
 
1132
  #: includes/admin/views/settings-info.php:41
1133
  msgid "Introducing ACF PRO"
1134
- msgstr "Nous vous présentons ACF PRO"
1135
 
1136
  #: includes/admin/views/settings-info.php:42
1137
  msgid ""
@@ -1146,10 +1131,11 @@ msgid ""
1146
  "version of ACF</a>. With both personal and developer licenses available, "
1147
  "premium functionality is more affordable and accessible than ever before!"
1148
  msgstr ""
1149
- "Les 4 add-ons premiums (Répéteur, galerie, contenu flexible et pages "
1150
- "d'options) ont été combinés en une toute nouvelle <a href=\"%s\">version PRO "
1151
- "d'ACF</a>. Avec les licences personnelles et développeur disponibles, les "
1152
- "fonctionnalités premium sont encore plus accessibles que jamais auparavant !"
 
1153
 
1154
  #: includes/admin/views/settings-info.php:47
1155
  msgid "Powerful Features"
@@ -1169,7 +1155,7 @@ msgstr ""
1169
  #, php-format
1170
  msgid "Read more about <a href=\"%s\">ACF PRO features</a>."
1171
  msgstr ""
1172
- "En savoir plus à propos des <a href=\"%s\">fonctionnalités ACF PRO</a>."
1173
 
1174
  # @ wp3i
1175
  #: includes/admin/views/settings-info.php:53
@@ -1191,10 +1177,10 @@ msgid ""
1191
  "but if you do have one, please contact our support team via the <a href=\"%s"
1192
  "\">help desk</a>."
1193
  msgstr ""
1194
- "Nous avons également rédigé un <a href=\"%s\">guide de mise à niveau</a> "
1195
- "pour répondre aux questions habituelles, mais si vous une question "
1196
  "spécifique, veuillez contacter notre équipe de support via le <a href=\"%s"
1197
- "\">help desk</a>"
1198
 
1199
  #: includes/admin/views/settings-info.php:64
1200
  msgid "New Features"
@@ -1223,7 +1209,7 @@ msgstr ""
1223
 
1224
  #: includes/admin/views/settings-info.php:79
1225
  msgid "oEmbed Field"
1226
- msgstr "Champ Contenu Embarqué (oEmbed)"
1227
 
1228
  #: includes/admin/views/settings-info.php:80
1229
  msgid ""
@@ -1249,8 +1235,8 @@ msgstr "Plus d'AJAX"
1249
  #: includes/admin/views/settings-info.php:90
1250
  msgid "More fields use AJAX powered search to speed up page loading."
1251
  msgstr ""
1252
- "Encore plus de champs utilisent la recherche via AJAX afin d'améliorer le "
1253
- "temps de chargement des pages."
1254
 
1255
  #: includes/admin/views/settings-info.php:94
1256
  msgid "Local JSON"
@@ -1260,8 +1246,8 @@ msgstr "JSON Local"
1260
  msgid ""
1261
  "New auto export to JSON feature improves speed and allows for syncronisation."
1262
  msgstr ""
1263
- "Nouvelle fonctionnalité d'export automatique en JSON qui améliore la "
1264
- "rapidité et simplifie la synchronisation. "
1265
 
1266
  #: includes/admin/views/settings-info.php:99
1267
  msgid "Easy Import / Export"
@@ -1282,8 +1268,8 @@ msgid ""
1282
  "Fields can now be mapped to menus, menu items, comments, widgets and all "
1283
  "user forms!"
1284
  msgstr ""
1285
- "Les champs peuvent désormais être intégrés dans les pages de menus, éléments "
1286
- "de menus, commentaires, widgets et tous les formulaires utilisateurs ! "
1287
 
1288
  #: includes/admin/views/settings-info.php:109
1289
  msgid "More Customization"
@@ -1311,16 +1297,15 @@ msgstr ""
1311
 
1312
  #: includes/admin/views/settings-info.php:119
1313
  msgid "New Settings"
1314
- msgstr "Nouveaux paramètres"
1315
 
1316
  #: includes/admin/views/settings-info.php:120
1317
  msgid ""
1318
  "Field group settings have been added for Active, Label Placement, "
1319
  "Instructions Placement and Description."
1320
  msgstr ""
1321
- "De nouveaux réglages font leur apparition dans les groupes de champs avec "
1322
- "notamment les options : Actif, emplacement du libellé, emplacement des "
1323
- "instructions et de la description."
1324
 
1325
  #: includes/admin/views/settings-info.php:124
1326
  msgid "Better Front End Forms"
@@ -1330,8 +1315,8 @@ msgstr "De meilleurs formulaires côté public"
1330
  msgid ""
1331
  "acf_form() can now create a new post on submission with lots of new settings."
1332
  msgstr ""
1333
- "acf_form() peut maintenant créer une nouvelle publication lors de la "
1334
- "soumission et propose de nombreux réglages."
1335
 
1336
  #: includes/admin/views/settings-info.php:129
1337
  msgid "Better Validation"
@@ -1353,70 +1338,68 @@ msgid ""
1353
  "New field group functionality allows you to move a field between groups & "
1354
  "parents."
1355
  msgstr ""
1356
- "La nouvelle fonctionnalité Groupe de Champ vous permet de déplacer un champ "
1357
- "entre différents groupes et parents."
1358
 
1359
  #: includes/admin/views/settings-info.php:146
1360
  #, php-format
1361
  msgid "We think you'll love the changes in %s."
1362
- msgstr ""
1363
- "Nous pensons que vous allez adorer les nouveautés présentées dans la version "
1364
- "%s."
1365
 
1366
- #: includes/api/api-helpers.php:1046
1367
  msgid "Thumbnail"
1368
  msgstr "Miniature"
1369
 
1370
- #: includes/api/api-helpers.php:1047
1371
  msgid "Medium"
1372
  msgstr "Moyen"
1373
 
1374
- #: includes/api/api-helpers.php:1048
1375
  msgid "Large"
1376
  msgstr "Grande"
1377
 
1378
- #: includes/api/api-helpers.php:1097
1379
  msgid "Full Size"
1380
  msgstr "Taille originale"
1381
 
1382
  # @ acf
1383
- #: includes/api/api-helpers.php:1872 includes/api/api-term.php:147
1384
  #: pro/fields/class-acf-field-clone.php:996
1385
  msgid "(no title)"
1386
- msgstr "(aucun titre)"
1387
 
1388
- #: includes/api/api-helpers.php:3960
1389
  #, php-format
1390
  msgid "Image width must be at least %dpx."
1391
  msgstr "L'image doit mesurer au moins %dpx de largeur."
1392
 
1393
- #: includes/api/api-helpers.php:3965
1394
  #, php-format
1395
  msgid "Image width must not exceed %dpx."
1396
  msgstr "L'image ne doit pas dépasser %dpx de largeur."
1397
 
1398
- #: includes/api/api-helpers.php:3981
1399
  #, php-format
1400
  msgid "Image height must be at least %dpx."
1401
  msgstr "L'image doit mesurer au moins %dpx de hauteur."
1402
 
1403
- #: includes/api/api-helpers.php:3986
1404
  #, php-format
1405
  msgid "Image height must not exceed %dpx."
1406
  msgstr "L'image ne doit pas dépasser %dpx de hauteur."
1407
 
1408
- #: includes/api/api-helpers.php:4004
1409
  #, php-format
1410
  msgid "File size must be at least %s."
1411
  msgstr "Le poids de l'image doit être d'au moins %s."
1412
 
1413
- #: includes/api/api-helpers.php:4009
1414
  #, php-format
1415
  msgid "File size must must not exceed %s."
1416
- msgstr "Le poids de l'image ne peut pas dépasser %s."
1417
 
1418
  # @ acf
1419
- #: includes/api/api-helpers.php:4043
1420
  #, php-format
1421
  msgid "File type must be %s."
1422
  msgstr "Le type de fichier doit être %s."
@@ -1433,7 +1416,7 @@ msgstr "Choisir"
1433
  #: includes/assets.php:172
1434
  msgctxt "verb"
1435
  msgid "Edit"
1436
- msgstr "Éditer"
1437
 
1438
  #: includes/assets.php:173
1439
  msgctxt "verb"
@@ -1442,7 +1425,7 @@ msgstr "Mettre à jour"
1442
 
1443
  #: includes/assets.php:174
1444
  msgid "Uploaded to this post"
1445
- msgstr "Liés à cette publication"
1446
 
1447
  #: includes/assets.php:175
1448
  msgid "Expand Details"
@@ -1457,7 +1440,7 @@ msgid "Restricted"
1457
  msgstr "Limité"
1458
 
1459
  # @ acf
1460
- #: includes/assets.php:178 includes/fields/class-acf-field-image.php:67
1461
  msgid "All images"
1462
  msgstr "Toutes les images"
1463
 
@@ -1482,7 +1465,7 @@ msgstr "%d champs requièrent votre attention"
1482
  # @ acf
1483
  #: includes/assets.php:187
1484
  msgid "Are you sure?"
1485
- msgstr "Êtes-vous sûr ?"
1486
 
1487
  #: includes/assets.php:188 includes/fields/class-acf-field-true_false.php:79
1488
  #: includes/fields/class-acf-field-true_false.php:159
@@ -1498,10 +1481,10 @@ msgstr "Non"
1498
 
1499
  # @ acf
1500
  #: includes/assets.php:190 includes/fields/class-acf-field-file.php:154
1501
- #: includes/fields/class-acf-field-image.php:141
1502
  #: includes/fields/class-acf-field-link.php:140
1503
- #: pro/fields/class-acf-field-gallery.php:360
1504
- #: pro/fields/class-acf-field-gallery.php:549
1505
  msgid "Remove"
1506
  msgstr "Enlever"
1507
 
@@ -1551,7 +1534,7 @@ msgstr "La sélection est inférieure à"
1551
 
1552
  # @ acf
1553
  #: includes/assets.php:206 includes/forms/form-comment.php:166
1554
- #: pro/admin/admin-options-page.php:327
1555
  msgid "Edit field group"
1556
  msgstr "Modifier le groupe de champs"
1557
 
@@ -1566,7 +1549,7 @@ msgstr "Inconnu"
1566
 
1567
  #: includes/fields.php:349
1568
  msgid "Basic"
1569
- msgstr "Champs basiques"
1570
 
1571
  #: includes/fields.php:350 includes/forms/form-front.php:47
1572
  msgid "Content"
@@ -1592,11 +1575,11 @@ msgstr "jQuery"
1592
  #: includes/fields/class-acf-field-group.php:474
1593
  #: includes/fields/class-acf-field-radio.php:290
1594
  #: pro/fields/class-acf-field-clone.php:843
1595
- #: pro/fields/class-acf-field-flexible-content.php:567
1596
- #: pro/fields/class-acf-field-flexible-content.php:616
1597
- #: pro/fields/class-acf-field-repeater.php:443
1598
  msgid "Layout"
1599
- msgstr "Disposition"
1600
 
1601
  #: includes/fields/class-acf-field-accordion.php:24
1602
  msgid "Accordion"
@@ -1621,15 +1604,15 @@ msgstr "Permettre à cet accordéon de s'ouvrir sans refermer les autres."
1621
  #: includes/fields/class-acf-field-accordion.php:119
1622
  #: includes/fields/class-acf-field-tab.php:114
1623
  msgid "Endpoint"
1624
- msgstr "Point de terminaison"
1625
 
1626
  #: includes/fields/class-acf-field-accordion.php:120
1627
  msgid ""
1628
  "Define an endpoint for the previous accordion to stop. This accordion will "
1629
  "not be visible."
1630
  msgstr ""
1631
- "Définir un point de terminaison pour arrêter l'accordéon. Cet accordéon ne "
1632
- "sera pas visible."
1633
 
1634
  #: includes/fields/class-acf-field-button-group.php:24
1635
  msgid "Button Group"
@@ -1656,8 +1639,8 @@ msgstr "Indiquez une valeur par ligne."
1656
  #: includes/fields/class-acf-field-select.php:365
1657
  msgid "For more control, you may specify both a value and label like this:"
1658
  msgstr ""
1659
- "Pour un contrôle plus poussé, vous pouvez spécifier la valeur et le libellé "
1660
- "de cette manière :"
1661
 
1662
  #: includes/fields/class-acf-field-button-group.php:150
1663
  #: includes/fields/class-acf-field-checkbox.php:345
@@ -1673,7 +1656,7 @@ msgstr "rouge : Rouge"
1673
  #: includes/fields/class-acf-field-radio.php:244
1674
  #: includes/fields/class-acf-field-select.php:382
1675
  #: includes/fields/class-acf-field-taxonomy.php:784
1676
- #: includes/fields/class-acf-field-user.php:405
1677
  msgid "Allow Null?"
1678
  msgstr "Autoriser une valeur vide ?"
1679
 
@@ -1686,7 +1669,7 @@ msgstr "Autoriser une valeur vide ?"
1686
  #: includes/fields/class-acf-field-radio.php:281
1687
  #: includes/fields/class-acf-field-range.php:149
1688
  #: includes/fields/class-acf-field-select.php:373
1689
- #: includes/fields/class-acf-field-text.php:119
1690
  #: includes/fields/class-acf-field-textarea.php:102
1691
  #: includes/fields/class-acf-field-true_false.php:135
1692
  #: includes/fields/class-acf-field-url.php:100
@@ -1699,12 +1682,12 @@ msgstr "Valeur par défaut"
1699
  #: includes/fields/class-acf-field-number.php:128
1700
  #: includes/fields/class-acf-field-radio.php:282
1701
  #: includes/fields/class-acf-field-range.php:150
1702
- #: includes/fields/class-acf-field-text.php:120
1703
  #: includes/fields/class-acf-field-textarea.php:103
1704
  #: includes/fields/class-acf-field-url.php:101
1705
  #: includes/fields/class-acf-field-wysiwyg.php:382
1706
  msgid "Appears when creating a new post"
1707
- msgstr "Valeur affichée à la création d'un article"
1708
 
1709
  #: includes/fields/class-acf-field-button-group.php:183
1710
  #: includes/fields/class-acf-field-checkbox.php:396
@@ -1722,21 +1705,19 @@ msgstr "Vertical"
1722
  #: includes/fields/class-acf-field-button-group.php:191
1723
  #: includes/fields/class-acf-field-checkbox.php:413
1724
  #: includes/fields/class-acf-field-file.php:215
1725
- #: includes/fields/class-acf-field-image.php:205
1726
  #: includes/fields/class-acf-field-link.php:166
1727
  #: includes/fields/class-acf-field-radio.php:304
1728
  #: includes/fields/class-acf-field-taxonomy.php:829
1729
  msgid "Return Value"
1730
- msgstr "Valeur affichée dans le template"
1731
 
1732
  #: includes/fields/class-acf-field-button-group.php:192
1733
  #: includes/fields/class-acf-field-checkbox.php:414
1734
  #: includes/fields/class-acf-field-file.php:216
1735
- #: includes/fields/class-acf-field-image.php:206
1736
  #: includes/fields/class-acf-field-link.php:167
1737
  #: includes/fields/class-acf-field-radio.php:305
1738
  msgid "Specify the returned value on front end"
1739
- msgstr "Spécifier la valeur retournée sur le site"
1740
 
1741
  #: includes/fields/class-acf-field-button-group.php:197
1742
  #: includes/fields/class-acf-field-checkbox.php:419
@@ -1760,7 +1741,7 @@ msgstr "Case à cocher"
1760
 
1761
  #: includes/fields/class-acf-field-checkbox.php:154
1762
  msgid "Toggle All"
1763
- msgstr "Tout masquer/afficher"
1764
 
1765
  #: includes/fields/class-acf-field-checkbox.php:221
1766
  msgid "Add new choice"
@@ -1768,19 +1749,19 @@ msgstr "Ajouter un choix"
1768
 
1769
  #: includes/fields/class-acf-field-checkbox.php:353
1770
  msgid "Allow Custom"
1771
- msgstr "Permettra une valeur personnalisée"
1772
 
1773
  #: includes/fields/class-acf-field-checkbox.php:358
1774
  msgid "Allow 'custom' values to be added"
1775
- msgstr "Permet l’ajout d’une valeur personnalisée"
1776
 
1777
  #: includes/fields/class-acf-field-checkbox.php:364
1778
  msgid "Save Custom"
1779
- msgstr "Enregistrer la valeur personnalisée"
1780
 
1781
  #: includes/fields/class-acf-field-checkbox.php:369
1782
  msgid "Save 'custom' values to the field's choices"
1783
- msgstr "Enregistre la valeur personnalisée dans les choix du champs"
1784
 
1785
  #: includes/fields/class-acf-field-checkbox.php:381
1786
  #: includes/fields/class-acf-field-select.php:374
@@ -1789,16 +1770,17 @@ msgstr "Entrez chaque valeur par défaut sur une nouvelle ligne"
1789
 
1790
  #: includes/fields/class-acf-field-checkbox.php:403
1791
  msgid "Toggle"
1792
- msgstr "Masquer/afficher"
1793
 
1794
  #: includes/fields/class-acf-field-checkbox.php:404
1795
  msgid "Prepend an extra checkbox to toggle all choices"
1796
- msgstr "Ajouter une case à cocher au début pour intervertir tous les choix"
 
1797
 
1798
  # @ acf
1799
  #: includes/fields/class-acf-field-color_picker.php:25
1800
  msgid "Color Picker"
1801
- msgstr "Couleur"
1802
 
1803
  #: includes/fields/class-acf-field-color_picker.php:68
1804
  msgid "Clear"
@@ -1812,7 +1794,7 @@ msgstr "Valeur par défaut"
1812
  # @ acf
1813
  #: includes/fields/class-acf-field-color_picker.php:70
1814
  msgid "Select Color"
1815
- msgstr "Couleur"
1816
 
1817
  #: includes/fields/class-acf-field-color_picker.php:71
1818
  msgid "Current Color"
@@ -1821,7 +1803,7 @@ msgstr "Couleur actuelle"
1821
  # @ acf
1822
  #: includes/fields/class-acf-field-date_picker.php:25
1823
  msgid "Date Picker"
1824
- msgstr "Date"
1825
 
1826
  #: includes/fields/class-acf-field-date_picker.php:59
1827
  msgctxt "Date Picker JS closeText"
@@ -1836,32 +1818,30 @@ msgstr "Aujourd’hui"
1836
  #: includes/fields/class-acf-field-date_picker.php:61
1837
  msgctxt "Date Picker JS nextText"
1838
  msgid "Next"
1839
- msgstr "Suivant"
1840
 
1841
  #: includes/fields/class-acf-field-date_picker.php:62
1842
  msgctxt "Date Picker JS prevText"
1843
  msgid "Prev"
1844
- msgstr "Précédent"
1845
 
1846
  #: includes/fields/class-acf-field-date_picker.php:63
1847
  msgctxt "Date Picker JS weekHeader"
1848
  msgid "Wk"
1849
- msgstr "Sem"
1850
 
1851
  # @ acf
1852
  #: includes/fields/class-acf-field-date_picker.php:178
1853
  #: includes/fields/class-acf-field-date_time_picker.php:183
1854
  #: includes/fields/class-acf-field-time_picker.php:109
1855
  msgid "Display Format"
1856
- msgstr "Format dans ladministration"
1857
 
1858
  #: includes/fields/class-acf-field-date_picker.php:179
1859
  #: includes/fields/class-acf-field-date_time_picker.php:184
1860
  #: includes/fields/class-acf-field-time_picker.php:110
1861
  msgid "The format displayed when editing a post"
1862
- msgstr ""
1863
- "Format affiché lors de l’édition d’un article depuis l’interface "
1864
- "d’administration"
1865
 
1866
  #: includes/fields/class-acf-field-date_picker.php:187
1867
  #: includes/fields/class-acf-field-date_picker.php:218
@@ -1883,33 +1863,35 @@ msgstr "Le format enregistré"
1883
  # @ acf
1884
  #: includes/fields/class-acf-field-date_picker.php:208
1885
  #: includes/fields/class-acf-field-date_time_picker.php:200
 
1886
  #: includes/fields/class-acf-field-post_object.php:431
1887
  #: includes/fields/class-acf-field-relationship.php:634
1888
  #: includes/fields/class-acf-field-select.php:427
1889
  #: includes/fields/class-acf-field-time_picker.php:124
1890
- #: includes/fields/class-acf-field-user.php:424
 
1891
  msgid "Return Format"
1892
- msgstr "Format dans le modèle"
1893
 
1894
  #: includes/fields/class-acf-field-date_picker.php:209
1895
  #: includes/fields/class-acf-field-date_time_picker.php:201
1896
  #: includes/fields/class-acf-field-time_picker.php:125
1897
  msgid "The format returned via template functions"
1898
- msgstr "Valeur retournée dans le modèle sur le site"
1899
 
1900
  #: includes/fields/class-acf-field-date_picker.php:227
1901
  #: includes/fields/class-acf-field-date_time_picker.php:217
1902
  msgid "Week Starts On"
1903
- msgstr "Les semaines commencent le"
1904
 
1905
  #: includes/fields/class-acf-field-date_time_picker.php:25
1906
  msgid "Date Time Picker"
1907
- msgstr "Date et Heure"
1908
 
1909
  #: includes/fields/class-acf-field-date_time_picker.php:68
1910
  msgctxt "Date Time Picker JS timeOnlyTitle"
1911
  msgid "Choose Time"
1912
- msgstr "Choix de l’heure"
1913
 
1914
  #: includes/fields/class-acf-field-date_time_picker.php:69
1915
  msgctxt "Date Time Picker JS timeText"
@@ -1959,7 +1941,7 @@ msgstr "Valider"
1959
  #: includes/fields/class-acf-field-date_time_picker.php:78
1960
  msgctxt "Date Time Picker JS selectText"
1961
  msgid "Select"
1962
- msgstr "Valider"
1963
 
1964
  #: includes/fields/class-acf-field-date_time_picker.php:80
1965
  msgctxt "Date Time Picker JS amText"
@@ -1983,31 +1965,31 @@ msgstr "P"
1983
 
1984
  #: includes/fields/class-acf-field-email.php:25
1985
  msgid "Email"
1986
- msgstr "Mail"
1987
 
1988
  #: includes/fields/class-acf-field-email.php:127
1989
  #: includes/fields/class-acf-field-number.php:136
1990
  #: includes/fields/class-acf-field-password.php:71
1991
- #: includes/fields/class-acf-field-text.php:128
1992
  #: includes/fields/class-acf-field-textarea.php:111
1993
  #: includes/fields/class-acf-field-url.php:109
1994
  msgid "Placeholder Text"
1995
- msgstr "Texte de substitution"
1996
 
1997
  #: includes/fields/class-acf-field-email.php:128
1998
  #: includes/fields/class-acf-field-number.php:137
1999
  #: includes/fields/class-acf-field-password.php:72
2000
- #: includes/fields/class-acf-field-text.php:129
2001
  #: includes/fields/class-acf-field-textarea.php:112
2002
  #: includes/fields/class-acf-field-url.php:110
2003
  msgid "Appears within the input"
2004
- msgstr "Apparait dans le champ (placeholder)"
2005
 
2006
  #: includes/fields/class-acf-field-email.php:136
2007
  #: includes/fields/class-acf-field-number.php:145
2008
  #: includes/fields/class-acf-field-password.php:80
2009
  #: includes/fields/class-acf-field-range.php:188
2010
- #: includes/fields/class-acf-field-text.php:137
2011
  msgid "Prepend"
2012
  msgstr "Préfixe"
2013
 
@@ -2015,7 +1997,7 @@ msgstr "Préfixe"
2015
  #: includes/fields/class-acf-field-number.php:146
2016
  #: includes/fields/class-acf-field-password.php:81
2017
  #: includes/fields/class-acf-field-range.php:189
2018
- #: includes/fields/class-acf-field-text.php:138
2019
  msgid "Appears before the input"
2020
  msgstr "Apparait avant le champ"
2021
 
@@ -2023,7 +2005,7 @@ msgstr "Apparait avant le champ"
2023
  #: includes/fields/class-acf-field-number.php:154
2024
  #: includes/fields/class-acf-field-password.php:89
2025
  #: includes/fields/class-acf-field-range.php:197
2026
- #: includes/fields/class-acf-field-text.php:146
2027
  msgid "Append"
2028
  msgstr "Suffixe"
2029
 
@@ -2031,7 +2013,7 @@ msgstr "Suffixe"
2031
  #: includes/fields/class-acf-field-number.php:155
2032
  #: includes/fields/class-acf-field-password.php:90
2033
  #: includes/fields/class-acf-field-range.php:198
2034
- #: includes/fields/class-acf-field-text.php:147
2035
  msgid "Appears after the input"
2036
  msgstr "Apparait après le champ"
2037
 
@@ -2059,10 +2041,10 @@ msgstr "Nom du fichier"
2059
  #: includes/fields/class-acf-field-file.php:145
2060
  #: includes/fields/class-acf-field-file.php:248
2061
  #: includes/fields/class-acf-field-file.php:259
2062
- #: includes/fields/class-acf-field-image.php:265
2063
- #: includes/fields/class-acf-field-image.php:294
2064
- #: pro/fields/class-acf-field-gallery.php:708
2065
- #: pro/fields/class-acf-field-gallery.php:737
2066
  msgid "File size"
2067
  msgstr "Taille du fichier"
2068
 
@@ -2073,7 +2055,7 @@ msgstr "Ajouter un fichier"
2073
 
2074
  #: includes/fields/class-acf-field-file.php:221
2075
  msgid "File Array"
2076
- msgstr "Données du fichier (array)"
2077
 
2078
  # @ acf
2079
  #: includes/fields/class-acf-field-file.php:222
@@ -2086,19 +2068,19 @@ msgid "File ID"
2086
  msgstr "ID du Fichier"
2087
 
2088
  #: includes/fields/class-acf-field-file.php:230
2089
- #: includes/fields/class-acf-field-image.php:230
2090
- #: pro/fields/class-acf-field-gallery.php:673
2091
  msgid "Library"
2092
  msgstr "Médias"
2093
 
2094
  #: includes/fields/class-acf-field-file.php:231
2095
- #: includes/fields/class-acf-field-image.php:231
2096
- #: pro/fields/class-acf-field-gallery.php:674
2097
  msgid "Limit the media library choice"
2098
- msgstr "Limiter le choix de la médiathèque"
2099
 
2100
  #: includes/fields/class-acf-field-file.php:236
2101
- #: includes/fields/class-acf-field-image.php:236
2102
  #: includes/locations/class-acf-location-attachment.php:101
2103
  #: includes/locations/class-acf-location-comment.php:79
2104
  #: includes/locations/class-acf-location-nav-menu.php:102
@@ -2106,20 +2088,21 @@ msgstr "Limiter le choix de la médiathèque"
2106
  #: includes/locations/class-acf-location-user-form.php:87
2107
  #: includes/locations/class-acf-location-user-role.php:111
2108
  #: includes/locations/class-acf-location-widget.php:83
2109
- #: pro/fields/class-acf-field-gallery.php:679
 
2110
  msgid "All"
2111
  msgstr "Tous"
2112
 
2113
  #: includes/fields/class-acf-field-file.php:237
2114
- #: includes/fields/class-acf-field-image.php:237
2115
- #: pro/fields/class-acf-field-gallery.php:680
2116
  msgid "Uploaded to post"
2117
  msgstr "Liés à cet article"
2118
 
2119
  # @ acf
2120
  #: includes/fields/class-acf-field-file.php:244
2121
- #: includes/fields/class-acf-field-image.php:244
2122
- #: pro/fields/class-acf-field-gallery.php:687
2123
  msgid "Minimum"
2124
  msgstr "Minimum"
2125
 
@@ -2130,24 +2113,24 @@ msgstr "Restreindre l'import de fichiers"
2130
 
2131
  # @ acf
2132
  #: includes/fields/class-acf-field-file.php:255
2133
- #: includes/fields/class-acf-field-image.php:273
2134
- #: pro/fields/class-acf-field-gallery.php:716
2135
  msgid "Maximum"
2136
  msgstr "Maximum"
2137
 
2138
  #: includes/fields/class-acf-field-file.php:266
2139
- #: includes/fields/class-acf-field-image.php:302
2140
- #: pro/fields/class-acf-field-gallery.php:745
2141
  msgid "Allowed file types"
2142
  msgstr "Types de fichiers autorisés"
2143
 
2144
  #: includes/fields/class-acf-field-file.php:267
2145
- #: includes/fields/class-acf-field-image.php:303
2146
- #: pro/fields/class-acf-field-gallery.php:746
2147
  msgid "Comma separated list. Leave blank for all types"
2148
  msgstr ""
2149
- "Listez les extensions autorisées en les séparant par une virgule. Laissez "
2150
- "vide pour autoriser toutes les extensions"
2151
 
2152
  #: includes/fields/class-acf-field-google-map.php:25
2153
  msgid "Google Map"
@@ -2168,7 +2151,7 @@ msgstr "Trouver l'emplacement actuel"
2168
 
2169
  #: includes/fields/class-acf-field-google-map.php:170
2170
  msgid "Search for address..."
2171
- msgstr "Rechercher une adresse..."
2172
 
2173
  #: includes/fields/class-acf-field-google-map.php:200
2174
  #: includes/fields/class-acf-field-google-map.php:211
@@ -2178,7 +2161,7 @@ msgstr "Centre"
2178
  #: includes/fields/class-acf-field-google-map.php:201
2179
  #: includes/fields/class-acf-field-google-map.php:212
2180
  msgid "Center the initial map"
2181
- msgstr "Position géographique du centre de la carte"
2182
 
2183
  #: includes/fields/class-acf-field-google-map.php:223
2184
  msgid "Zoom"
@@ -2186,20 +2169,20 @@ msgstr "Zoom"
2186
 
2187
  #: includes/fields/class-acf-field-google-map.php:224
2188
  msgid "Set the initial zoom level"
2189
- msgstr "Définir le niveau de zoom (0 : monde ; 14 : ville ; 21 : rue)"
2190
 
2191
  #: includes/fields/class-acf-field-google-map.php:233
2192
- #: includes/fields/class-acf-field-image.php:256
2193
- #: includes/fields/class-acf-field-image.php:285
2194
  #: includes/fields/class-acf-field-oembed.php:268
2195
- #: pro/fields/class-acf-field-gallery.php:699
2196
- #: pro/fields/class-acf-field-gallery.php:728
2197
  msgid "Height"
2198
  msgstr "Hauteur"
2199
 
2200
  #: includes/fields/class-acf-field-google-map.php:234
2201
  msgid "Customize the map height"
2202
- msgstr "Personnaliser la hauteur de la carte"
2203
 
2204
  # @ acf
2205
  #: includes/fields/class-acf-field-group.php:25
@@ -2208,33 +2191,34 @@ msgstr "Groupe"
2208
 
2209
  # @ acf
2210
  #: includes/fields/class-acf-field-group.php:459
2211
- #: pro/fields/class-acf-field-repeater.php:379
2212
  msgid "Sub Fields"
2213
- msgstr "Sous champs"
2214
 
2215
  #: includes/fields/class-acf-field-group.php:475
2216
  #: pro/fields/class-acf-field-clone.php:844
2217
  msgid "Specify the style used to render the selected fields"
2218
- msgstr "Définit le style utilisé pour générer les champs sélectionnés"
2219
 
2220
  #: includes/fields/class-acf-field-group.php:480
2221
  #: pro/fields/class-acf-field-clone.php:849
2222
- #: pro/fields/class-acf-field-flexible-content.php:627
2223
- #: pro/fields/class-acf-field-repeater.php:451
 
2224
  msgid "Block"
2225
  msgstr "Bloc"
2226
 
2227
  #: includes/fields/class-acf-field-group.php:481
2228
  #: pro/fields/class-acf-field-clone.php:850
2229
- #: pro/fields/class-acf-field-flexible-content.php:626
2230
- #: pro/fields/class-acf-field-repeater.php:450
2231
  msgid "Table"
2232
  msgstr "Tableau"
2233
 
2234
  #: includes/fields/class-acf-field-group.php:482
2235
  #: pro/fields/class-acf-field-clone.php:851
2236
- #: pro/fields/class-acf-field-flexible-content.php:628
2237
- #: pro/fields/class-acf-field-repeater.php:452
2238
  msgid "Row"
2239
  msgstr "Rangée"
2240
 
@@ -2244,66 +2228,66 @@ msgid "Image"
2244
  msgstr "Image"
2245
 
2246
  # acf
2247
- #: includes/fields/class-acf-field-image.php:64
2248
  msgid "Select Image"
2249
- msgstr "Sélectionner l‘image"
2250
 
2251
  # @ acf
2252
- #: includes/fields/class-acf-field-image.php:65
2253
  msgid "Edit Image"
2254
  msgstr "Modifier l'image"
2255
 
2256
  # @ acf
2257
- #: includes/fields/class-acf-field-image.php:66
2258
  msgid "Update Image"
2259
  msgstr "Mettre à jour"
2260
 
2261
  # @ acf
2262
- #: includes/fields/class-acf-field-image.php:157
2263
  msgid "No image selected"
2264
  msgstr "Aucune image sélectionnée"
2265
 
2266
  # @ acf
2267
- #: includes/fields/class-acf-field-image.php:157
2268
  msgid "Add Image"
2269
  msgstr "Ajouter une image"
2270
 
2271
  # @ acf
2272
- #: includes/fields/class-acf-field-image.php:211
 
2273
  msgid "Image Array"
2274
- msgstr "Données de l'image (array)"
2275
 
2276
  # @ acf
2277
- #: includes/fields/class-acf-field-image.php:212
 
2278
  msgid "Image URL"
2279
  msgstr "URL de l‘image"
2280
 
2281
  # @ acf
2282
- #: includes/fields/class-acf-field-image.php:213
 
2283
  msgid "Image ID"
2284
  msgstr "ID de l‘image"
2285
 
2286
  # @ acf
2287
- #: includes/fields/class-acf-field-image.php:220
 
2288
  msgid "Preview Size"
2289
  msgstr "Taille de prévisualisation"
2290
 
2291
- #: includes/fields/class-acf-field-image.php:221
2292
- msgid "Shown when entering data"
2293
- msgstr "Côté interface d'administration"
2294
-
2295
- #: includes/fields/class-acf-field-image.php:245
2296
- #: includes/fields/class-acf-field-image.php:274
2297
- #: pro/fields/class-acf-field-gallery.php:688
2298
- #: pro/fields/class-acf-field-gallery.php:717
2299
  msgid "Restrict which images can be uploaded"
2300
- msgstr "Restreindre les images téléversées"
2301
 
2302
- #: includes/fields/class-acf-field-image.php:248
2303
- #: includes/fields/class-acf-field-image.php:277
2304
  #: includes/fields/class-acf-field-oembed.php:257
2305
- #: pro/fields/class-acf-field-gallery.php:691
2306
- #: pro/fields/class-acf-field-gallery.php:720
2307
  msgid "Width"
2308
  msgstr "Largeur"
2309
 
@@ -2319,7 +2303,7 @@ msgstr "Sélectionner un lien"
2319
 
2320
  #: includes/fields/class-acf-field-link.php:138
2321
  msgid "Opens in a new window/tab"
2322
- msgstr "Ouvrir dans un nouvel onglet"
2323
 
2324
  #: includes/fields/class-acf-field-link.php:172
2325
  msgid "Link Array"
@@ -2366,7 +2350,7 @@ msgstr "Pas de formatage"
2366
 
2367
  #: includes/fields/class-acf-field-message.php:124
2368
  msgid "Escape HTML"
2369
- msgstr "Autoriser le code HTML"
2370
 
2371
  #: includes/fields/class-acf-field-message.php:125
2372
  msgid "Allow HTML markup to display as visible text instead of rendering"
@@ -2467,9 +2451,9 @@ msgstr "Afficher les pages d’archives"
2467
  #: includes/fields/class-acf-field-page_link.php:533
2468
  #: includes/fields/class-acf-field-post_object.php:421
2469
  #: includes/fields/class-acf-field-select.php:392
2470
- #: includes/fields/class-acf-field-user.php:415
2471
  msgid "Select multiple values?"
2472
- msgstr "Plusieurs valeurs possibles ?"
2473
 
2474
  #: includes/fields/class-acf-field-password.php:25
2475
  msgid "Password"
@@ -2499,15 +2483,15 @@ msgstr "Autre"
2499
 
2500
  #: includes/fields/class-acf-field-radio.php:259
2501
  msgid "Add 'other' choice to allow for custom values"
2502
- msgstr "Ajouter 'autre' pour autoriser une valeur personnalisée"
2503
 
2504
  #: includes/fields/class-acf-field-radio.php:265
2505
  msgid "Save Other"
2506
- msgstr "Enregistrer"
2507
 
2508
  #: includes/fields/class-acf-field-radio.php:270
2509
  msgid "Save 'other' values to the field's choices"
2510
- msgstr "Enregistrer 'autre' en tant que choix"
2511
 
2512
  #: includes/fields/class-acf-field-range.php:25
2513
  msgid "Range"
@@ -2524,7 +2508,7 @@ msgstr "Nombre maximal de valeurs atteint ({max} valeurs)"
2524
 
2525
  #: includes/fields/class-acf-field-relationship.php:63
2526
  msgid "Loading"
2527
- msgstr "Chargement"
2528
 
2529
  #: includes/fields/class-acf-field-relationship.php:64
2530
  msgid "No matches found"
@@ -2541,7 +2525,7 @@ msgstr "Choisissez la taxonomie"
2541
 
2542
  #: includes/fields/class-acf-field-relationship.php:477
2543
  msgid "Search..."
2544
- msgstr "Rechercher..."
2545
 
2546
  #: includes/fields/class-acf-field-relationship.php:588
2547
  msgid "Filters"
@@ -2580,7 +2564,7 @@ msgid "Maximum posts"
2580
  msgstr "Maximum d'articles sélectionnables"
2581
 
2582
  #: includes/fields/class-acf-field-relationship.php:727
2583
- #: pro/fields/class-acf-field-gallery.php:818
2584
  #, php-format
2585
  msgid "%s requires at least %s selection"
2586
  msgid_plural "%s requires at least %s selections"
@@ -2596,7 +2580,7 @@ msgstr "Sélection"
2596
  #: includes/fields/class-acf-field-select.php:111
2597
  msgctxt "Select2 JS matches_1"
2598
  msgid "One result is available, press enter to select it."
2599
- msgstr "Un résultat disponible, appuyez sur Entrée pour le sélectionner."
2600
 
2601
  #: includes/fields/class-acf-field-select.php:112
2602
  #, php-format
@@ -2663,15 +2647,15 @@ msgstr "Échec du chargement"
2663
  #: includes/fields/class-acf-field-select.php:402
2664
  #: includes/fields/class-acf-field-true_false.php:144
2665
  msgid "Stylised UI"
2666
- msgstr "Interface avancée"
2667
 
2668
  #: includes/fields/class-acf-field-select.php:412
2669
  msgid "Use AJAX to lazy load choices?"
2670
- msgstr "Utiliser AJAX pour charger les choix (lazy load) ?"
2671
 
2672
  #: includes/fields/class-acf-field-select.php:428
2673
  msgid "Specify the value returned"
2674
- msgstr "Définie la valeur retournée"
2675
 
2676
  #: includes/fields/class-acf-field-separator.php:25
2677
  msgid "Separator"
@@ -2690,8 +2674,8 @@ msgid ""
2690
  "Define an endpoint for the previous tabs to stop. This will start a new "
2691
  "group of tabs."
2692
  msgstr ""
2693
- "Définir un point de terminaison pour arrêter les précédents onglets. Cela va "
2694
- "commencer un nouveau groupe d'onglets."
2695
 
2696
  #: includes/fields/class-acf-field-taxonomy.php:714
2697
  #, php-format
@@ -2711,7 +2695,7 @@ msgstr "Apparence"
2711
  # @ acf
2712
  #: includes/fields/class-acf-field-taxonomy.php:765
2713
  msgid "Select the appearance of this field"
2714
- msgstr "Personnaliser l'apparence de champ"
2715
 
2716
  # @ acf
2717
  #: includes/fields/class-acf-field-taxonomy.php:770
@@ -2725,7 +2709,7 @@ msgstr "Sélecteur multiple"
2725
 
2726
  #: includes/fields/class-acf-field-taxonomy.php:774
2727
  msgid "Single Value"
2728
- msgstr "Valeur seule"
2729
 
2730
  # @ acf
2731
  #: includes/fields/class-acf-field-taxonomy.php:775
@@ -2755,7 +2739,7 @@ msgstr "Charger les termes"
2755
 
2756
  #: includes/fields/class-acf-field-taxonomy.php:820
2757
  msgid "Load value from posts terms"
2758
- msgstr "Charger une valeur depuis les termes"
2759
 
2760
  # @ acf
2761
  #: includes/fields/class-acf-field-taxonomy.php:834
@@ -2779,7 +2763,7 @@ msgstr "%s existe déjà"
2779
  #: includes/fields/class-acf-field-taxonomy.php:927
2780
  #, php-format
2781
  msgid "%s added"
2782
- msgstr "%s Ajouté"
2783
 
2784
  # @ acf
2785
  #: includes/fields/class-acf-field-taxonomy.php:973
@@ -2791,15 +2775,21 @@ msgstr "Ajouter"
2791
  msgid "Text"
2792
  msgstr "Texte"
2793
 
2794
- #: includes/fields/class-acf-field-text.php:155
2795
  #: includes/fields/class-acf-field-textarea.php:120
2796
  msgid "Character Limit"
2797
  msgstr "Limite de caractères"
2798
 
2799
- #: includes/fields/class-acf-field-text.php:156
2800
  #: includes/fields/class-acf-field-textarea.php:121
2801
  msgid "Leave blank for no limit"
2802
- msgstr "Laisser vide pour illimité"
 
 
 
 
 
 
2803
 
2804
  # @ acf
2805
  #: includes/fields/class-acf-field-textarea.php:25
@@ -2816,16 +2806,16 @@ msgstr "Hauteur du champ"
2816
 
2817
  #: includes/fields/class-acf-field-time_picker.php:25
2818
  msgid "Time Picker"
2819
- msgstr "Heure"
2820
 
2821
  # @ acf
2822
  #: includes/fields/class-acf-field-true_false.php:25
2823
  msgid "True / False"
2824
- msgstr "Vrai / Faux"
2825
 
2826
  #: includes/fields/class-acf-field-true_false.php:127
2827
  msgid "Displays text alongside the checkbox"
2828
- msgstr "Affiche le texte aux côtés de la case à cocher"
2829
 
2830
  #: includes/fields/class-acf-field-true_false.php:155
2831
  msgid "On Text"
@@ -2833,7 +2823,7 @@ msgstr "Texte côté « Actif »"
2833
 
2834
  #: includes/fields/class-acf-field-true_false.php:156
2835
  msgid "Text shown when active"
2836
- msgstr "Text affiché lorsqu’il est actif"
2837
 
2838
  #: includes/fields/class-acf-field-true_false.php:170
2839
  msgid "Off Text"
@@ -2841,7 +2831,7 @@ msgstr "Texte côté « Inactif »"
2841
 
2842
  #: includes/fields/class-acf-field-true_false.php:171
2843
  msgid "Text shown when inactive"
2844
- msgstr "Texte affiché lorsqu’il est désactivé"
2845
 
2846
  #: includes/fields/class-acf-field-url.php:25
2847
  msgid "Url"
@@ -2855,23 +2845,23 @@ msgstr "La valeur doit être une URL valide"
2855
  msgid "User"
2856
  msgstr "Utilisateur"
2857
 
2858
- #: includes/fields/class-acf-field-user.php:390
2859
  msgid "Filter by role"
2860
  msgstr "Filtrer par rôle"
2861
 
2862
- #: includes/fields/class-acf-field-user.php:398
2863
  msgid "All user roles"
2864
  msgstr "Tous les rôles utilisateurs"
2865
 
2866
- #: includes/fields/class-acf-field-user.php:429
2867
  msgid "User Array"
2868
- msgstr "Tableau d'utilisateurs"
2869
 
2870
- #: includes/fields/class-acf-field-user.php:430
2871
  msgid "User Object"
2872
- msgstr "Objet d'utilisateurs"
2873
 
2874
- #: includes/fields/class-acf-field-user.php:431
2875
  msgid "User ID"
2876
  msgstr "ID de l'utilisateur"
2877
 
@@ -2904,7 +2894,7 @@ msgstr "Visuel & Texte brut"
2904
 
2905
  #: includes/fields/class-acf-field-wysiwyg.php:396
2906
  msgid "Visual Only"
2907
- msgstr "Éditeur visuel seulement"
2908
 
2909
  # @ acf
2910
  #: includes/fields/class-acf-field-wysiwyg.php:397
@@ -2928,14 +2918,14 @@ msgstr "Retarder l’initialisation ?"
2928
  #: includes/fields/class-acf-field-wysiwyg.php:430
2929
  msgid "TinyMCE will not be initalized until field is clicked"
2930
  msgstr ""
2931
- "TinyMCE ne sera pas automatiquement initialisé si cette option est activée"
2932
 
2933
  #: includes/forms/form-front.php:55
2934
  msgid "Validate Email"
2935
- msgstr "Valider l’email"
2936
 
2937
  # @ acf
2938
- #: includes/forms/form-front.php:103 pro/fields/class-acf-field-gallery.php:591
2939
  #: pro/options-page.php:81
2940
  msgid "Update"
2941
  msgstr "Mise à jour"
@@ -2949,6 +2939,11 @@ msgstr "Article mis à jour"
2949
  msgid "Spam Detected"
2950
  msgstr "Spam repéré"
2951
 
 
 
 
 
 
2952
  # @ acf
2953
  #: includes/locations.php:93 includes/locations/class-acf-location-post.php:27
2954
  msgid "Post"
@@ -2974,7 +2969,7 @@ msgstr "n‘est pas égal à"
2974
 
2975
  #: includes/locations/class-acf-location-attachment.php:27
2976
  msgid "Attachment"
2977
- msgstr "Média (photo, fichier…)"
2978
 
2979
  #: includes/locations/class-acf-location-attachment.php:109
2980
  #, php-format
@@ -2983,12 +2978,12 @@ msgstr "Tous les formats %s"
2983
 
2984
  #: includes/locations/class-acf-location-comment.php:27
2985
  msgid "Comment"
2986
- msgstr "Commentaires"
2987
 
2988
  # @ acf
2989
  #: includes/locations/class-acf-location-current-user-role.php:27
2990
  msgid "Current User Role"
2991
- msgstr "Rôle utilisateur actuel"
2992
 
2993
  #: includes/locations/class-acf-location-current-user-role.php:110
2994
  msgid "Super Admin"
@@ -2996,7 +2991,7 @@ msgstr "Super Administrateur"
2996
 
2997
  #: includes/locations/class-acf-location-current-user.php:27
2998
  msgid "Current User"
2999
- msgstr "Utilisateur actuel"
3000
 
3001
  #: includes/locations/class-acf-location-current-user.php:97
3002
  msgid "Logged in"
@@ -3004,11 +2999,11 @@ msgstr "Connecté"
3004
 
3005
  #: includes/locations/class-acf-location-current-user.php:98
3006
  msgid "Viewing front end"
3007
- msgstr "Depuis le site"
3008
 
3009
  #: includes/locations/class-acf-location-current-user.php:99
3010
  msgid "Viewing back end"
3011
- msgstr "Depuis l'interface d'administration"
3012
 
3013
  #: includes/locations/class-acf-location-nav-menu-item.php:27
3014
  msgid "Menu Item"
@@ -3037,8 +3032,8 @@ msgid "Page Template"
3037
  msgstr "Modèle de page"
3038
 
3039
  # @ acf
3040
- #: includes/locations/class-acf-location-page-template.php:98
3041
- #: includes/locations/class-acf-location-post-template.php:151
3042
  msgid "Default Template"
3043
  msgstr "Modèle de base"
3044
 
@@ -3049,7 +3044,7 @@ msgstr "Type de page"
3049
 
3050
  #: includes/locations/class-acf-location-page-type.php:146
3051
  msgid "Front Page"
3052
- msgstr "Page d'accueil"
3053
 
3054
  #: includes/locations/class-acf-location-page-type.php:147
3055
  msgid "Posts Page"
@@ -3057,11 +3052,11 @@ msgstr "Page des articles"
3057
 
3058
  #: includes/locations/class-acf-location-page-type.php:148
3059
  msgid "Top Level Page (no parent)"
3060
- msgstr "Page de haut niveau (sans descendant)"
3061
 
3062
  #: includes/locations/class-acf-location-page-type.php:149
3063
  msgid "Parent Page (has children)"
3064
- msgstr "Page parente (avec page enfant)"
3065
 
3066
  #: includes/locations/class-acf-location-page-type.php:150
3067
  msgid "Child Page (has parent)"
@@ -3079,7 +3074,7 @@ msgstr "Format d‘article"
3079
  # @ acf
3080
  #: includes/locations/class-acf-location-post-status.php:27
3081
  msgid "Post Status"
3082
- msgstr "Statut de l'article"
3083
 
3084
  # @ acf
3085
  #: includes/locations/class-acf-location-post-taxonomy.php:27
@@ -3088,7 +3083,7 @@ msgstr "Taxonomie"
3088
 
3089
  #: includes/locations/class-acf-location-post-template.php:27
3090
  msgid "Post Template"
3091
- msgstr "Modèle d'article"
3092
 
3093
  # @ acf
3094
  #: includes/locations/class-acf-location-user-form.php:27
@@ -3124,36 +3119,35 @@ msgstr "La valeur %s est requise"
3124
  msgid "Advanced Custom Fields PRO"
3125
  msgstr "Advanced Custom Fields PRO"
3126
 
3127
- #: pro/admin/admin-options-page.php:200
3128
  msgid "Publish"
3129
  msgstr "Publier"
3130
 
3131
  # @ default
3132
- #: pro/admin/admin-options-page.php:206
3133
  #, php-format
3134
  msgid ""
3135
  "No Custom Field Groups found for this options page. <a href=\"%s\">Create a "
3136
  "Custom Field Group</a>"
3137
  msgstr ""
3138
- "Aucun groupe de champs trouvé pour cette page options. <a href=\"%s\">Créer "
3139
- "un groupe de champs</a>"
3140
 
3141
- #: pro/admin/admin-settings-updates.php:78
3142
  msgid "<b>Error</b>. Could not connect to update server"
3143
  msgstr "<b>Erreur</b>. Impossible de joindre le serveur"
3144
 
3145
  # @ acf
3146
- #: pro/admin/admin-settings-updates.php:162
3147
- #: pro/admin/views/html-settings-updates.php:13
3148
  msgid "Updates"
3149
- msgstr "Mises à jour"
3150
 
3151
- #: pro/admin/admin-settings-updates.php:238
3152
  msgid ""
3153
  "<b>Error</b>. Could not authenticate update package. Please check again or "
3154
  "deactivate and reactivate your ACF PRO license."
3155
  msgstr ""
3156
- "<b>Erreur</b>. Impossible d'authentifier la mise à jour. Merci d'essayer à "
3157
  "nouveau et si le problème persiste, désactivez et réactivez votre licence "
3158
  "ACF PRO."
3159
 
@@ -3178,9 +3172,9 @@ msgid ""
3178
  "licence key, please see <a href=\"%s\" target=\"_blank\">details & pricing</"
3179
  "a>."
3180
  msgstr ""
3181
- "Pour débloquer les mises à jour, veuillez entrer votre clé de licence ci-"
3182
- "dessous. Si vous n’en possédez pas encore une, jetez un oeil à nos <a href="
3183
- "\"%s\" target=\"_blank\">détails & tarifs</a>."
3184
 
3185
  # @ acf
3186
  #: pro/admin/views/html-settings-updates.php:29
@@ -3190,29 +3184,29 @@ msgstr "Code de licence"
3190
  # @ acf
3191
  #: pro/admin/views/html-settings-updates.php:61
3192
  msgid "Update Information"
3193
- msgstr "Informations de mise à jour"
3194
 
3195
  #: pro/admin/views/html-settings-updates.php:68
3196
  msgid "Current Version"
3197
- msgstr "Version actuelle"
3198
 
3199
  #: pro/admin/views/html-settings-updates.php:76
3200
  msgid "Latest Version"
3201
- msgstr "Dernière version"
3202
 
3203
  # @ acf
3204
  #: pro/admin/views/html-settings-updates.php:84
3205
  msgid "Update Available"
3206
- msgstr "Mise à jour disponible"
3207
 
3208
  # @ acf
3209
  #: pro/admin/views/html-settings-updates.php:92
3210
  msgid "Update Plugin"
3211
- msgstr "Mettre à jour le plugin"
3212
 
3213
  #: pro/admin/views/html-settings-updates.php:94
3214
  msgid "Please enter your license key above to unlock updates"
3215
- msgstr "Entrez votre clé de licence ci-dessous pour activer les mises à jour"
3216
 
3217
  #: pro/admin/views/html-settings-updates.php:100
3218
  msgid "Check Again"
@@ -3221,7 +3215,15 @@ msgstr "Vérifier à nouveau"
3221
  # @ wp3i
3222
  #: pro/admin/views/html-settings-updates.php:117
3223
  msgid "Upgrade Notice"
3224
- msgstr "Améliorations"
 
 
 
 
 
 
 
 
3225
 
3226
  #: pro/fields/class-acf-field-clone.php:25
3227
  msgctxt "noun"
@@ -3254,11 +3256,11 @@ msgstr "Remplace ce champ par les champs sélectionnés"
3254
  #: pro/fields/class-acf-field-clone.php:857
3255
  #, php-format
3256
  msgid "Labels will be displayed as %s"
3257
- msgstr "Les libellés seront affichés en tant que %s"
3258
 
3259
  #: pro/fields/class-acf-field-clone.php:860
3260
  msgid "Prefix Field Labels"
3261
- msgstr "Préfixer les libellés de champs"
3262
 
3263
  #: pro/fields/class-acf-field-clone.php:871
3264
  #, php-format
@@ -3285,27 +3287,27 @@ msgstr "Tous les champs du groupe %s"
3285
  # @ acf
3286
  #: pro/fields/class-acf-field-flexible-content.php:31
3287
  #: pro/fields/class-acf-field-repeater.php:193
3288
- #: pro/fields/class-acf-field-repeater.php:463
3289
  msgid "Add Row"
3290
  msgstr "Ajouter un élément"
3291
 
3292
  # @ acf
3293
  #: pro/fields/class-acf-field-flexible-content.php:73
3294
- #: pro/fields/class-acf-field-flexible-content.php:938
3295
- #: pro/fields/class-acf-field-flexible-content.php:1020
3296
  msgid "layout"
3297
  msgid_plural "layouts"
3298
- msgstr[0] "disposition"
3299
- msgstr[1] "dispositions"
3300
 
3301
  # @ acf
3302
  #: pro/fields/class-acf-field-flexible-content.php:74
3303
  msgid "layouts"
3304
- msgstr "dispositions"
3305
 
3306
  #: pro/fields/class-acf-field-flexible-content.php:77
3307
- #: pro/fields/class-acf-field-flexible-content.php:937
3308
- #: pro/fields/class-acf-field-flexible-content.php:1019
3309
  msgid "This field requires at least {min} {label} {identifier}"
3310
  msgstr "Ce champ requiert au moins {min} {label} {identifier}"
3311
 
@@ -3319,160 +3321,161 @@ msgstr "{available} {label} {identifier} disponible (max {max})"
3319
 
3320
  #: pro/fields/class-acf-field-flexible-content.php:82
3321
  msgid "{required} {label} {identifier} required (min {min})"
3322
- msgstr "{required} {label} {identifier} required (min {min})"
3323
 
3324
  # @ acf
3325
  #: pro/fields/class-acf-field-flexible-content.php:85
3326
  msgid "Flexible Content requires at least 1 layout"
3327
- msgstr "Le contenu flexible nécessite au moins une disposition"
3328
 
3329
- #: pro/fields/class-acf-field-flexible-content.php:302
3330
  #, php-format
3331
  msgid "Click the \"%s\" button below to start creating your layout"
3332
  msgstr ""
3333
- "Cliquez sur le bouton \"%s\" ci-dessous pour créer votre première disposition"
 
3334
 
3335
  # @ acf
3336
- #: pro/fields/class-acf-field-flexible-content.php:427
3337
  msgid "Add layout"
3338
- msgstr "Disposition"
3339
 
3340
  # @ acf
3341
- #: pro/fields/class-acf-field-flexible-content.php:428
3342
  msgid "Remove layout"
3343
- msgstr "Retirer la disposition"
3344
 
3345
- #: pro/fields/class-acf-field-flexible-content.php:429
3346
- #: pro/fields/class-acf-field-repeater.php:296
3347
  msgid "Click to toggle"
3348
  msgstr "Cliquer pour intervertir"
3349
 
3350
  # @ acf
3351
- #: pro/fields/class-acf-field-flexible-content.php:569
3352
  msgid "Reorder Layout"
3353
- msgstr "Réorganiser la disposition"
3354
 
3355
- #: pro/fields/class-acf-field-flexible-content.php:569
3356
  msgid "Reorder"
3357
  msgstr "Réorganiser"
3358
 
3359
  # @ acf
3360
- #: pro/fields/class-acf-field-flexible-content.php:570
3361
  msgid "Delete Layout"
3362
- msgstr "Supprimer la disposition"
3363
 
3364
- #: pro/fields/class-acf-field-flexible-content.php:571
3365
  msgid "Duplicate Layout"
3366
- msgstr "Dupliquer la disposition"
3367
 
3368
  # @ acf
3369
- #: pro/fields/class-acf-field-flexible-content.php:572
3370
  msgid "Add New Layout"
3371
- msgstr "Ajouter une disposition"
3372
 
3373
- #: pro/fields/class-acf-field-flexible-content.php:643
3374
  msgid "Min"
3375
  msgstr "Min"
3376
 
3377
- #: pro/fields/class-acf-field-flexible-content.php:656
3378
  msgid "Max"
3379
  msgstr "Max"
3380
 
3381
- #: pro/fields/class-acf-field-flexible-content.php:683
3382
- #: pro/fields/class-acf-field-repeater.php:459
3383
  msgid "Button Label"
3384
  msgstr "Intitulé du bouton"
3385
 
3386
  # @ acf
3387
- #: pro/fields/class-acf-field-flexible-content.php:692
3388
  msgid "Minimum Layouts"
3389
- msgstr "Nombre minimum de dispositions"
3390
 
3391
  # @ acf
3392
- #: pro/fields/class-acf-field-flexible-content.php:701
3393
  msgid "Maximum Layouts"
3394
- msgstr "Nombre maximum de dispositions"
3395
 
3396
  # @ acf
3397
- #: pro/fields/class-acf-field-gallery.php:71
3398
  msgid "Add Image to Gallery"
3399
  msgstr "Ajouter l'image à la galerie"
3400
 
3401
- #: pro/fields/class-acf-field-gallery.php:72
3402
  msgid "Maximum selection reached"
3403
  msgstr "Nombre de sélections maximales atteint"
3404
 
3405
- #: pro/fields/class-acf-field-gallery.php:338
3406
  msgid "Length"
3407
  msgstr "Longueur"
3408
 
3409
- #: pro/fields/class-acf-field-gallery.php:381
3410
  msgid "Caption"
3411
  msgstr "Légende"
3412
 
3413
- #: pro/fields/class-acf-field-gallery.php:390
3414
  msgid "Alt Text"
3415
  msgstr "Texte alternatif"
3416
 
3417
- #: pro/fields/class-acf-field-gallery.php:562
3418
  msgid "Add to gallery"
3419
  msgstr "Ajouter à la galerie"
3420
 
3421
  # @ acf
3422
- #: pro/fields/class-acf-field-gallery.php:566
3423
  msgid "Bulk actions"
3424
  msgstr "Actions de groupe"
3425
 
3426
- #: pro/fields/class-acf-field-gallery.php:567
3427
  msgid "Sort by date uploaded"
3428
  msgstr "Ranger par date d'import"
3429
 
3430
- #: pro/fields/class-acf-field-gallery.php:568
3431
  msgid "Sort by date modified"
3432
  msgstr "Ranger par date de modification"
3433
 
3434
  # @ acf
3435
- #: pro/fields/class-acf-field-gallery.php:569
3436
  msgid "Sort by title"
3437
  msgstr "Ranger par titre"
3438
 
3439
- #: pro/fields/class-acf-field-gallery.php:570
3440
  msgid "Reverse current order"
3441
  msgstr "Inverser l'ordre actuel"
3442
 
3443
  # @ acf
3444
- #: pro/fields/class-acf-field-gallery.php:588
3445
  msgid "Close"
3446
- msgstr "Appliquer"
3447
 
3448
- # @ acf
3449
- #: pro/fields/class-acf-field-gallery.php:642
3450
- msgid "Minimum Selection"
3451
- msgstr "Minimum d'images"
3452
-
3453
- # @ acf
3454
- #: pro/fields/class-acf-field-gallery.php:651
3455
- msgid "Maximum Selection"
3456
- msgstr "Maximum d'images"
3457
-
3458
- #: pro/fields/class-acf-field-gallery.php:660
3459
  msgid "Insert"
3460
  msgstr "Insérer"
3461
 
3462
- #: pro/fields/class-acf-field-gallery.php:661
3463
  msgid "Specify where new attachments are added"
3464
- msgstr "Définir comment les images sont insérées"
3465
 
3466
- #: pro/fields/class-acf-field-gallery.php:665
3467
  msgid "Append to the end"
3468
- msgstr "Insérer à la fin"
3469
 
3470
- #: pro/fields/class-acf-field-gallery.php:666
3471
  msgid "Prepend to the beginning"
3472
  msgstr "Insérer au début"
3473
 
 
 
 
 
 
 
 
 
 
 
3474
  #: pro/fields/class-acf-field-repeater.php:65
3475
- #: pro/fields/class-acf-field-repeater.php:656
3476
  msgid "Minimum rows reached ({min} rows)"
3477
  msgstr "Nombre minimal d'éléments atteint ({min} éléments)"
3478
 
@@ -3481,36 +3484,36 @@ msgid "Maximum rows reached ({max} rows)"
3481
  msgstr "Nombre maximal d'éléments atteint ({max} éléments)"
3482
 
3483
  # @ acf
3484
- #: pro/fields/class-acf-field-repeater.php:333
3485
  msgid "Add row"
3486
  msgstr "Ajouter un élément"
3487
 
3488
  # @ acf
3489
- #: pro/fields/class-acf-field-repeater.php:334
3490
  msgid "Remove row"
3491
  msgstr "Retirer l'élément"
3492
 
3493
- #: pro/fields/class-acf-field-repeater.php:412
3494
  msgid "Collapsed"
3495
- msgstr "Refermé"
3496
 
3497
- #: pro/fields/class-acf-field-repeater.php:413
3498
  msgid "Select a sub field to show when row is collapsed"
3499
- msgstr "Choisir un sous champ à montrer lorsque la ligne est refermée"
3500
 
3501
  # @ acf
3502
- #: pro/fields/class-acf-field-repeater.php:423
3503
  msgid "Minimum Rows"
3504
- msgstr "Nombre minimum d'éléments"
3505
 
3506
  # @ acf
3507
- #: pro/fields/class-acf-field-repeater.php:433
3508
  msgid "Maximum Rows"
3509
- msgstr "Nombre maximum d'éléments"
3510
 
3511
  #: pro/locations/class-acf-location-options-page.php:79
3512
  msgid "No options pages exist"
3513
- msgstr "Aucune page d'option créée"
3514
 
3515
  # @ acf
3516
  #: pro/options-page.php:51
@@ -3520,7 +3523,7 @@ msgstr "Options"
3520
  # @ acf
3521
  #: pro/options-page.php:82
3522
  msgid "Options Updated"
3523
- msgstr "Options mises à jour"
3524
 
3525
  #: pro/updates.php:97
3526
  #, php-format
@@ -3529,631 +3532,40 @@ msgid ""
3529
  "\">Updates</a> page. If you don't have a licence key, please see <a href=\"%s"
3530
  "\">details & pricing</a>."
3531
  msgstr ""
3532
- "Pour activer les mises à jour, veuillez entrer votre clé de licence sur la "
3533
- "page <a href=\"%s\">Mises à jour</a>. Si vous n’en possédez pas encore une, "
3534
- "jetez un oeil à nos <a href=\"%s\" target=\"_blank\">détails & tarifs</a>."
3535
-
3536
- #. Plugin URI of the plugin/theme
3537
- msgid "https://www.advancedcustomfields.com/"
3538
- msgstr "https://www.advancedcustomfields.com/"
3539
-
3540
- #. Author of the plugin/theme
3541
- msgid "Elliot Condon"
3542
- msgstr "Elliot Condon"
3543
-
3544
- #. Author URI of the plugin/theme
3545
- msgid "http://www.elliotcondon.com/"
3546
- msgstr "http://www.elliotcondon.com/"
3547
-
3548
- #~ msgid "checked"
3549
- #~ msgstr "sélectionné"
3550
-
3551
- #~ msgid "Parent fields"
3552
- #~ msgstr "Champs parents"
3553
-
3554
- #~ msgid "Sibling fields"
3555
- #~ msgstr "Champs voisins"
3556
-
3557
- #~ msgid ""
3558
- #~ "Customise WordPress with powerful, professional and intuitive fields."
3559
- #~ msgstr ""
3560
- #~ "Personnalisez WordPress en ajoutant des champs intuitifs, puissants et "
3561
- #~ "professionnels."
3562
-
3563
- #~ msgid "Error validating request"
3564
- #~ msgstr "Erreur : la requête n’a pas pu être validée"
3565
 
3566
- # @ acf
3567
- #~ msgid "Advanced Custom Fields Database Upgrade"
3568
- #~ msgstr "Mise à niveau de la base de données Advanced Custom Fields"
3569
-
3570
- # @ wp3i
3571
- #~ msgid "Upgrade complete"
3572
- #~ msgstr "Mise à niveau terminée"
3573
-
3574
- #~ msgid ""
3575
- #~ "Before you start using the new awesome features, please update your "
3576
- #~ "database to the newest version."
3577
- #~ msgstr ""
3578
- #~ "Avant d'utiliser ces nouvelles fonctionnalités, il faut mettre à jour la "
3579
- #~ "base de données."
3580
-
3581
- #~ msgid ""
3582
- #~ "Please also ensure any premium add-ons (%s) have first been updated to "
3583
- #~ "the latest version."
3584
- #~ msgstr ""
3585
- #~ "Merci de vérifier également que tous les add-ons premium (%s) ont bien "
3586
- #~ "été mis à jour vers la dernière version."
3587
-
3588
- #~ msgid "Database Upgrade complete. <a href=\"%s\">See what's new</a>"
3589
- #~ msgstr ""
3590
- #~ "Mise à niveau de la base de données terminée. <a href=\"%s\">Quoi de "
3591
- #~ "neuf</a>"
3592
-
3593
- #~ msgid "A smoother custom field experience"
3594
- #~ msgstr "Une expérience des champs personnalisés plus aboutie"
3595
-
3596
- #~ msgid ""
3597
- #~ "To help make upgrading easy, <a href=\"%s\">login to your store account</"
3598
- #~ "a> and claim a free copy of ACF PRO!"
3599
- #~ msgstr ""
3600
- #~ "Afin de mettre à niveau facilement, <a href=\"%s\">Connectez-vous à votre "
3601
- #~ "compte ACF en ligne</a> et obtenez une licence gratuite d'ACF PRO !"
3602
-
3603
- #~ msgid ""
3604
- #~ "We also wrote an <a href=\"%s\">upgrade guide</a> to answer any "
3605
- #~ "questions, but if you do have one, please contact our support team via "
3606
- #~ "the <a href=\"%s\">help desk</a>"
3607
- #~ msgstr ""
3608
- #~ "Nous avons également rédigé un <a href=\"%s\">guide de mise à jour</a> "
3609
- #~ "pour répondre aux questions fréquentes. Si vous avez une question "
3610
- #~ "spécifique, merci de contacter notre équipe <a href=\"%s\">le support</a>"
3611
-
3612
- #~ msgid "Under the Hood"
3613
- #~ msgstr "Changements techniques sous le capot"
3614
-
3615
- #~ msgid "Smarter field settings"
3616
- #~ msgstr "Paramètres de champs plus intelligents"
3617
-
3618
- #~ msgid "ACF now saves its field settings as individual post objects"
3619
- #~ msgstr ""
3620
- #~ "ACF enregistre désormais les paramètres des champs en tant qu'objets "
3621
- #~ "individuels"
3622
-
3623
- #~ msgid "More fields use AJAX powered search to speed up page loading"
3624
- #~ msgstr ""
3625
- #~ "Plus de champs utilisent la recherche via AJAX pour améliorer le temps de "
3626
- #~ "chargement des pages"
3627
-
3628
- #~ msgid "New auto export to JSON feature improves speed"
3629
- #~ msgstr "Nouvelles fonctionnalité d'export JSON améliorant la vitesse"
3630
-
3631
- #~ msgid "Better version control"
3632
- #~ msgstr "Meilleur contrôle de version"
3633
-
3634
- #~ msgid ""
3635
- #~ "New auto export to JSON feature allows field settings to be version "
3636
- #~ "controlled"
3637
- #~ msgstr ""
3638
- #~ "Nouvelle fonctionnalité d'export JSON permettant un contrôle de version "
3639
- #~ "des champs"
3640
-
3641
- #~ msgid "Swapped XML for JSON"
3642
- #~ msgstr "Abandon de XML au profit de JSON"
3643
-
3644
- #~ msgid "Import / Export now uses JSON in favour of XML"
3645
- #~ msgstr "L'import / export utilise désormais JSON à la place de XML"
3646
-
3647
- #~ msgid "New Forms"
3648
- #~ msgstr "Nouveaux formulaires"
3649
-
3650
- #~ msgid "Fields can now be mapped to comments, widgets and all user forms!"
3651
- #~ msgstr ""
3652
- #~ "Vous pouvez désormais assigner des champs aux commentaires, widgets et "
3653
- #~ "tous les formulaires utilisateurs !"
3654
-
3655
- #~ msgid "A new field for embedding content has been added"
3656
- #~ msgstr "Un nouveau champ pour embarquer du contenu a été ajouté"
3657
-
3658
- #~ msgid "New Gallery"
3659
- #~ msgstr "Nouvelle galerie"
3660
-
3661
- #~ msgid "The gallery field has undergone a much needed facelift"
3662
- #~ msgstr ""
3663
- #~ "La galerie d'images a subi un lifting qui la rend encore plus agréable à "
3664
- #~ "utiliser"
3665
-
3666
- #~ msgid ""
3667
- #~ "Field group settings have been added for label placement and instruction "
3668
- #~ "placement"
3669
- #~ msgstr ""
3670
- #~ "De nouveaux paramètres permettent de choisir la position de l'intitulé et "
3671
- #~ "des instructions"
3672
-
3673
- #~ msgid "acf_form() can now create a new post on submission"
3674
- #~ msgstr ""
3675
- #~ "acf_form() peut désormais créer un nouvel article lors de l'enregistrement"
3676
-
3677
- #~ msgid "Form validation is now done via PHP + AJAX in favour of only JS"
3678
- #~ msgstr ""
3679
- #~ "La validation des formulaires est désormais effectuée via PHP + AJAX au "
3680
- #~ "lieu d'être simplement faite en JS"
3681
-
3682
- # @ acf
3683
- #~ msgid "Relationship Field"
3684
- #~ msgstr "Champ relationnel"
3685
-
3686
- #~ msgid ""
3687
- #~ "New Relationship field setting for 'Filters' (Search, Post Type, Taxonomy)"
3688
- #~ msgstr ""
3689
- #~ "Nouveau paramètre de filtres (recherche, type de publication, taxonomie) "
3690
- #~ "pour le champ relationnel"
3691
-
3692
- #~ msgid ""
3693
- #~ "New field group functionality allows you to move a field between groups & "
3694
- #~ "parents"
3695
- #~ msgstr ""
3696
- #~ "Nouvelle fonctionnalité dans les groupes de champs permettant de déplacer "
3697
- #~ "un champ dans un autre groupe ou vers les parents"
3698
 
3699
- #~ msgid "New archives group in page_link field selection"
3700
- #~ msgstr ""
3701
- #~ "Il est désormais possible de faire un lien vers les archives du blog ou "
3702
- #~ "d'un type de publication avec le champ Lien vers une page ou un article"
3703
 
3704
  # @ acf
3705
- #~ msgid "Better Options Pages"
3706
- #~ msgstr "Des pages d'options encore plus abouties"
3707
-
3708
- #~ msgid ""
3709
- #~ "New functions for options page allow creation of both parent and child "
3710
- #~ "menu pages"
3711
- #~ msgstr ""
3712
- #~ "Nouvelles fonctions pour les pages d'options vous permettant la création "
3713
- #~ "de pages parents/enfants"
3714
-
3715
- # @ acf
3716
- #~ msgid "Locating"
3717
- #~ msgstr "Localiser"
3718
-
3719
- #~ msgid "Customise the map height"
3720
- #~ msgstr "Personnaliser la hauteur de la carte"
3721
-
3722
- #~ msgid "Error."
3723
- #~ msgstr "Erreur."
3724
-
3725
- #~ msgid "No embed found for the given URL."
3726
- #~ msgstr "Aucune instruction d'intégration trouvée à cette adresse."
3727
-
3728
- #~ msgid "Minimum values reached ( {min} values )"
3729
- #~ msgstr "Nombre minimum de valeurs atteint ({min} valeurs)"
3730
-
3731
- #~ msgid "None"
3732
- #~ msgstr "Aucun"
3733
-
3734
- # @ acf
3735
- #~ msgid "Taxonomy Term"
3736
- #~ msgstr "Termes de taxonomie"
3737
-
3738
- #~ msgid "remove {layout}?"
3739
- #~ msgstr "retirer {layout} ?"
3740
-
3741
- #~ msgid "This field requires at least {min} {identifier}"
3742
- #~ msgstr "Ce champ requiert au moins {min} {identifier}"
3743
-
3744
- #~ msgid "This field has a limit of {max} {identifier}"
3745
- #~ msgstr "Ce champ a une limite de {max} {identifier}"
3746
-
3747
- #~ msgid "Maximum {label} limit reached ({max} {identifier})"
3748
- #~ msgstr "Nombre maximal de {label} atteint ({max} {identifier})"
3749
-
3750
- # @ acf
3751
- #~ msgid "Export Field Groups to PHP"
3752
- #~ msgstr "Exportez des groupes de champs en PHP"
3753
-
3754
- #~ msgid "Download export file"
3755
- #~ msgstr "Télécharger le fichier d'export"
3756
 
3757
- #~ msgid "Generate export code"
3758
- #~ msgstr "Générer le code d'export"
 
3759
 
3760
- #~ msgid "Import"
3761
- #~ msgstr "Importer"
 
3762
 
3763
- #~ msgid ""
3764
- #~ "The tab field will display incorrectly when added to a Table style "
3765
- #~ "repeater field or flexible content field layout"
3766
- #~ msgstr ""
3767
- #~ "Le champ onglet ne s'affichera pas correctement quand il est ajouté à un "
3768
- #~ "champ répéteur en disposition table ou dans un champ à disposition "
3769
- #~ "flexible"
3770
-
3771
- #~ msgid ""
3772
- #~ "Use \"Tab Fields\" to better organize your edit screen by grouping fields "
3773
- #~ "together."
3774
- #~ msgstr ""
3775
- #~ "Utilisez les \"Onglets\" pour mieux organiser votre écran d'édition de "
3776
- #~ "contenu en groupant ensemble les champs."
3777
-
3778
- #~ msgid ""
3779
- #~ "All fields following this \"tab field\" (or until another \"tab field\" "
3780
- #~ "is defined) will be grouped together using this field's label as the tab "
3781
- #~ "heading."
3782
- #~ msgstr ""
3783
- #~ "Tous les champs listés sous cet \"onglet\" (ou jusqu'au prochain \"onglet"
3784
- #~ "\") apparaitront regroupés sur la page d'édition."
3785
-
3786
- #~ msgid "End-point"
3787
- #~ msgstr "Fin de série"
3788
-
3789
- #~ msgid "Use this field as an end-point and start a new group of tabs"
3790
- #~ msgstr "Le prochain onglet sera disposé à la ligne"
3791
-
3792
- #~ msgid "Getting Started"
3793
- #~ msgstr "Guide de démarrage"
3794
-
3795
- # @ acf
3796
- #~ msgid "Field Types"
3797
- #~ msgstr "Types de champ"
3798
-
3799
- # @ acf
3800
- #~ msgid "Functions"
3801
- #~ msgstr "Fonctions"
3802
-
3803
- # @ acf
3804
- #~ msgid "Actions"
3805
- #~ msgstr "Actions"
3806
-
3807
- #~ msgid "Features"
3808
- #~ msgstr "Fonctionnalités"
3809
-
3810
- #~ msgid "How to"
3811
- #~ msgstr "Guide"
3812
-
3813
- #~ msgid "Tutorials"
3814
- #~ msgstr "Tutoriels"
3815
-
3816
- #~ msgid "FAQ"
3817
- #~ msgstr "FAQ"
3818
-
3819
- #~ msgid "Term meta upgrade not possible (termmeta table does not exist)"
3820
- #~ msgstr ""
3821
- #~ "Impossible de mettre à niveau les termes (la table termmeta n’existe pas)"
3822
-
3823
- #~ msgid "Error"
3824
- #~ msgstr "Erreur"
3825
-
3826
- #~ msgid "1 field requires attention."
3827
- #~ msgid_plural "%d fields require attention."
3828
- #~ msgstr[0] "1 champ requiert votre attention"
3829
- #~ msgstr[1] "%d champs requièrent votre attention"
3830
-
3831
- #~ msgid ""
3832
- #~ "Error validating ACF PRO license URL (website does not match). Please re-"
3833
- #~ "activate your license"
3834
- #~ msgstr ""
3835
- #~ "Erreur lors de la validation de l’URL ACF PRO (le site ne correspond "
3836
- #~ "pas). Veuillez réactiver votre licence."
3837
-
3838
- #~ msgid "Disabled"
3839
- #~ msgstr "Désactivé"
3840
-
3841
- #~ msgid "Disabled <span class=\"count\">(%s)</span>"
3842
- #~ msgid_plural "Disabled <span class=\"count\">(%s)</span>"
3843
- #~ msgstr[0] "Désactivé <span class=\"count\">(%s)</span>"
3844
- #~ msgstr[1] "Désactivés <span class=\"count\">(%s)</span>"
3845
-
3846
- #~ msgid "'How to' guides"
3847
- #~ msgstr "Guides"
3848
-
3849
- # @ acf
3850
- #~ msgid "Created by"
3851
- #~ msgstr "Créé par"
3852
-
3853
- #~ msgid "Error loading update"
3854
- #~ msgstr "Erreur pendant le chargement de la mise à jour"
3855
-
3856
- # @ acf
3857
- #~ msgid "See what's new"
3858
- #~ msgstr "Découvrir les nouveautés"
3859
-
3860
- # @ acf
3861
- #~ msgid "Select"
3862
- #~ msgstr "Sélectionner"
3863
-
3864
- #~ msgid "Clone"
3865
- #~ msgstr "Clone"
3866
-
3867
- # @ acf
3868
- #~ msgid "eg. Show extra content"
3869
- #~ msgstr "ex : Montrer du contenu supplémentaire"
3870
-
3871
- #~ msgid "<b>Connection Error</b>. Sorry, please try again"
3872
- #~ msgstr "<b>Erreur de connexion</b>. Merci de réessayer"
3873
-
3874
- # @ acf
3875
- #~ msgid "See what's new in"
3876
- #~ msgstr "Voir les nouveautés de la"
3877
-
3878
- #~ msgid "version"
3879
- #~ msgstr "version"
3880
-
3881
- #~ msgid "<b>Success</b>. Import tool added %s field groups: %s"
3882
- #~ msgstr ""
3883
- #~ "<b>Succès</b>. L'utilitaire d'import a ajouté %s groupes de champs : %s"
3884
-
3885
- #~ msgid ""
3886
- #~ "<b>Warning</b>. Import tool detected %s field groups already exist and "
3887
- #~ "have been ignored: %s"
3888
- #~ msgstr ""
3889
- #~ "<b>Attention</b>. L'utilitaire d'importe a détécté %s groupes de champs "
3890
- #~ "existants qui ont été ignorés : %s"
3891
-
3892
- # @ wp3i
3893
- #~ msgid "Upgrade ACF"
3894
- #~ msgstr "Mettre à niveau ACF"
3895
-
3896
- # @ wp3i
3897
- #~ msgid "Upgrade"
3898
- #~ msgstr "Mettre à jour"
3899
-
3900
- #~ msgid ""
3901
- #~ "The following sites require a DB upgrade. Check the ones you want to "
3902
- #~ "update and then click “Upgrade Database”."
3903
- #~ msgstr ""
3904
- #~ "Les sites suivants nécessitent une mise à niveau de la base de données. "
3905
- #~ "Sélectionnez ceux que vous souhaitez mettre à jour et cliquez sur \"Mise "
3906
- #~ "à niveau de la base\"."
3907
-
3908
- #~ msgid "Upgrading data to"
3909
- #~ msgstr "Mise à niveau vers"
3910
-
3911
- #~ msgid "Done"
3912
- #~ msgstr "Effectué"
3913
-
3914
- #~ msgid "Today"
3915
- #~ msgstr "Aujourd'hui"
3916
-
3917
- #~ msgid "Show a different month"
3918
- #~ msgstr "Montrer un mois différent"
3919
-
3920
- #~ msgid ""
3921
- #~ "To unlock updates, please enter your license key below. If you don't have "
3922
- #~ "a licence key, please see"
3923
- #~ msgstr ""
3924
- #~ "Afin de débloquer les mises à jour, merci d'indiquer votre code de "
3925
- #~ "licence ci-dessous"
3926
-
3927
- #~ msgid "details & pricing"
3928
- #~ msgstr "Détails & tarifs"
3929
-
3930
- #~ msgid ""
3931
- #~ "To enable updates, please enter your license key on the <a href=\"%s"
3932
- #~ "\">Updates</a> page. If you don't have a licence key, please see <a href="
3933
- #~ "\"%s\">details & pricing</a>"
3934
- #~ msgstr ""
3935
- #~ "Pour activer les mises à jour, merci d'indiquer votre code de licence sur "
3936
- #~ "la page <a href=\"%s\">Mises à jour</a>. Si vous n'en possédez pas, "
3937
- #~ "consultez la page <a href=\"%s\">détails & tarifs</a>"
3938
-
3939
- #~ msgid "http://www.advancedcustomfields.com/"
3940
- #~ msgstr "http://www.advancedcustomfields.com/"
3941
-
3942
- # @ acf
3943
- #~ msgid "Return format"
3944
- #~ msgstr "Format sur le site"
3945
-
3946
- #~ msgid "uploaded to this post"
3947
- #~ msgstr "Liés à l'article"
3948
-
3949
- # @ acf
3950
- #~ msgid "File Size"
3951
- #~ msgstr "Taille du fichier"
3952
-
3953
- # @ acf
3954
- #~ msgid "No File selected"
3955
- #~ msgstr "Aucun fichier sélectionné"
3956
-
3957
- #~ msgid "License"
3958
- #~ msgstr "Licence"
3959
-
3960
- #~ msgid "Advanced Custom Fields Pro"
3961
- #~ msgstr "Advanced Custom Fields Pro"
3962
-
3963
- #~ msgid "Drag and drop to reorder"
3964
- #~ msgstr "Faites glisser pour réorganiser"
3965
-
3966
- #~ msgid ""
3967
- #~ "Please note that all text will first be passed through the wp function "
3968
- #~ msgstr "Le texte sera traité par la fonction "
3969
-
3970
- #~ msgid "Warning"
3971
- #~ msgstr "Attention"
3972
-
3973
- # @ acf
3974
- #~ msgid "Add new %s "
3975
- #~ msgstr "Nouveau %s"
3976
-
3977
- # @ acf
3978
- #~ msgid "Save Options"
3979
- #~ msgstr "Enregistrer les options"
3980
-
3981
- #~ msgid "Hide / Show All"
3982
- #~ msgstr "Afficher / Cacher tout"
3983
-
3984
- # @ acf
3985
- #~ msgid "Show Field Keys"
3986
- #~ msgstr "Montrer l'identifiant des champs"
3987
-
3988
- #~ msgid "Import / Export"
3989
- #~ msgstr "Importer / Exporter"
3990
-
3991
- # @ acf
3992
- #~ msgid "Field groups are created in order from lowest to highest"
3993
- #~ msgstr ""
3994
- #~ "Les groupes de champs sont créés dans l'ordre du plus bas vers le plus "
3995
- #~ "haut"
3996
-
3997
- #~ msgid "Upgrading data to "
3998
- #~ msgstr "Migration des données vers"
3999
-
4000
- #~ msgid "Sync Terms"
4001
- #~ msgstr "Synchronisation des termes"
4002
-
4003
- # @ default
4004
- #~ msgid "title_is_required"
4005
- #~ msgstr "title_is_required"
4006
-
4007
- #~ msgid "move_to_trash"
4008
- #~ msgstr "move_to_trash"
4009
-
4010
- # @ acf
4011
- #~ msgid "move_field_warning"
4012
- #~ msgstr "move_field_warning"
4013
-
4014
- # @ acf
4015
- #~ msgid "move_field"
4016
- #~ msgstr "move_field"
4017
-
4018
- #~ msgid "field_name_start"
4019
- #~ msgstr "field_name_start"
4020
-
4021
- #~ msgid "null"
4022
- #~ msgstr "null"
4023
-
4024
- #~ msgid "hide_show_all"
4025
- #~ msgstr "hide_show_all"
4026
-
4027
- #~ msgid "unload"
4028
- #~ msgstr "unload"
4029
-
4030
- #~ msgid "file"
4031
- #~ msgstr "file"
4032
-
4033
- # @ acf
4034
- #~ msgid "image"
4035
- #~ msgstr "image"
4036
-
4037
- #~ msgid "expand_details"
4038
- #~ msgstr "expand_details"
4039
-
4040
- #~ msgid "collapse_details"
4041
- #~ msgstr "collapse_details"
4042
-
4043
- # @ acf
4044
- #~ msgid "relationship"
4045
- #~ msgstr "Relationrelationship"
4046
-
4047
- #~ msgid "validation_successful"
4048
- #~ msgstr "validation_successful"
4049
-
4050
- #~ msgid "validation_failed"
4051
- #~ msgstr "validation_failed"
4052
-
4053
- #~ msgid "validation_failed_1"
4054
- #~ msgstr "validation_failed_1"
4055
-
4056
- #~ msgid "validation_failed_2"
4057
- #~ msgstr "validation_failed_2"
4058
-
4059
- # @ acf
4060
- #~ msgid "flexible_content"
4061
- #~ msgstr "flexible_content"
4062
-
4063
- # @ acf
4064
- #~ msgid "repeater"
4065
- #~ msgstr "repeater"
4066
-
4067
- # @ acf
4068
- #~ msgid "gallery"
4069
- #~ msgstr "gallery"
4070
-
4071
- #~ msgid "Pending Review"
4072
- #~ msgstr "En attente de relecture"
4073
-
4074
- #~ msgid "Draft"
4075
- #~ msgstr "Brouillon"
4076
-
4077
- #~ msgid "Future"
4078
- #~ msgstr "A paraitre"
4079
-
4080
- #~ msgid "Private"
4081
- #~ msgstr "Privé"
4082
-
4083
- #~ msgid "Revision"
4084
- #~ msgstr "Révisions"
4085
-
4086
- #~ msgid "Trash"
4087
- #~ msgstr "Corbeille"
4088
-
4089
- # @ acf
4090
- #~ msgid "ACF PRO Required"
4091
- #~ msgstr "ACF PRO est nécessaire"
4092
-
4093
- #~ msgid ""
4094
- #~ "We have detected an issue which requires your attention: This website "
4095
- #~ "makes use of premium add-ons (%s) which are no longer compatible with ACF."
4096
- #~ msgstr ""
4097
- #~ "Votre attention s'il vous plait : Ce site utilise les add-ons premium "
4098
- #~ "(%s) qui ne sont plus compatibles avec ACF."
4099
-
4100
- #~ msgid ""
4101
- #~ "Don't panic, you can simply roll back the plugin and continue using ACF "
4102
- #~ "as you know it!"
4103
- #~ msgstr ""
4104
- #~ "Pas de panique ! Vous pouvez simplement revenir à la version antérieure "
4105
- #~ "et continuer à utiliser ACF comme d'habitude !"
4106
-
4107
- #~ msgid "Roll back to ACF v%s"
4108
- #~ msgstr "Revenir à la version v%s d'ACF"
4109
-
4110
- #~ msgid "Learn why ACF PRO is required for my site"
4111
- #~ msgstr "Pourquoi ACF PRO est nécessaire pour mon site ?"
4112
-
4113
- # @ wp3i
4114
- #~ msgid "Data Upgrade"
4115
- #~ msgstr "Migration des données"
4116
-
4117
- #~ msgid "Data upgraded successfully."
4118
- #~ msgstr "Les données ont été mises à jour !"
4119
-
4120
- #~ msgid "Data is at the latest version."
4121
- #~ msgstr "Les données "
4122
-
4123
- #~ msgid "1 required field below is empty"
4124
- #~ msgid_plural "%s required fields below are empty"
4125
- #~ msgstr[0] "Il reste un champ à remplir ci-dessous"
4126
- #~ msgstr[1] "Il reste %s champs à remplir ci-dessous"
4127
-
4128
- #~ msgid "Load & Save Terms to Post"
4129
- #~ msgstr "Charger & enregistrer les termes"
4130
-
4131
- #~ msgid ""
4132
- #~ "Load value based on the post's terms and update the post's terms on save"
4133
- #~ msgstr ""
4134
- #~ "Charge la valeur basée sur les termes de l'article et met à jour ces "
4135
- #~ "termes lors de l'enregistrement"
4136
-
4137
- #, fuzzy
4138
- #~ msgid "Controls how HTML tags are rendered"
4139
- #~ msgstr "Définis comment les sauts de lignes sont interprétés"
4140
-
4141
- # @ acf
4142
- #~ msgid "Custom field updated."
4143
- #~ msgstr "Champ mis à jour"
4144
-
4145
- # @ acf
4146
- #~ msgid "Custom field deleted."
4147
- #~ msgstr "Champ supprimé"
4148
-
4149
- #~ msgid "Field group duplicated! Edit the new \"%s\" field group."
4150
- #~ msgstr "Groupe de champ dupliqué ! Editer le nouveau groupe \"%s\""
4151
-
4152
- #~ msgid "Import/Export"
4153
- #~ msgstr "Import/Export"
4154
 
4155
- #~ msgid "Column Width"
4156
- #~ msgstr "Largeur de colonne"
 
 
4157
 
4158
- #~ msgid "Attachment Details"
4159
- #~ msgstr "Détails"
 
1
  msgid ""
2
  msgstr ""
3
+ "Project-Id-Version: Advanced Custom Fields Pro v5.8.2\n"
4
  "Report-Msgid-Bugs-To: http://support.advancedcustomfields.com\n"
5
+ "POT-Creation-Date: 2019-08-02 20:50-0400\n"
6
+ "PO-Revision-Date: 2019-08-02 21:08-0400\n"
7
+ "Last-Translator: Berenger Zyla <hello@berengerzyla.com>\n"
8
+ "Language-Team: Bérenger Zyla <hello@berengerzyla.com>\n"
9
  "Language: fr_FR\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
  "Plural-Forms: nplurals=2; plural=(n > 1);\n"
14
+ "X-Generator: Poedit 2.2.3\n"
15
  "X-Poedit-SourceCharset: UTF-8\n"
16
  "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
17
  "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
23
  "X-Poedit-SearchPathExcluded-0: *.js\n"
24
 
25
  # @ acf
26
+ #: acf.php:79
27
  msgid "Advanced Custom Fields"
28
  msgstr "Advanced Custom Fields"
29
 
30
  # @ acf
31
+ #: acf.php:359 includes/admin/admin.php:58
32
  msgid "Field Groups"
33
  msgstr "Groupes de champs"
34
 
35
  # @ acf
36
+ #: acf.php:360
37
  msgid "Field Group"
38
  msgstr "Groupe de champs"
39
 
40
  # @ acf
41
+ #: acf.php:361 acf.php:393 includes/admin/admin.php:59
42
+ #: pro/fields/class-acf-field-flexible-content.php:558
43
  msgid "Add New"
44
  msgstr "Ajouter"
45
 
46
  # @ acf
47
+ #: acf.php:362
48
  msgid "Add New Field Group"
49
+ msgstr "Ajouter un nouveau groupe de champs"
50
 
51
  # @ acf
52
+ #: acf.php:363
53
  msgid "Edit Field Group"
54
  msgstr "Modifier le groupe de champs"
55
 
56
  # @ acf
57
+ #: acf.php:364
58
  msgid "New Field Group"
59
  msgstr "Nouveau groupe de champs"
60
 
61
  # @ default
62
+ #: acf.php:365
63
  msgid "View Field Group"
64
  msgstr "Voir le groupe de champs"
65
 
66
  # @ default
67
+ #: acf.php:366
68
  msgid "Search Field Groups"
69
+ msgstr "Rechercher des groupes de champs"
70
 
71
  # @ default
72
+ #: acf.php:367
73
  msgid "No Field Groups found"
74
  msgstr "Aucun groupe de champs trouvé"
75
 
76
  # @ default
77
+ #: acf.php:368
78
  msgid "No Field Groups found in Trash"
79
  msgstr "Aucun groupe de champs trouvé dans la corbeille"
80
 
81
  # @ acf
82
+ #: acf.php:391 includes/admin/admin-field-group.php:220
83
+ #: includes/admin/admin-field-groups.php:530
84
  #: pro/fields/class-acf-field-clone.php:811
85
  msgid "Fields"
86
  msgstr "Champs"
87
 
88
  # @ acf
89
+ #: acf.php:392
90
  msgid "Field"
91
  msgstr "Champ"
92
 
93
  # @ acf
94
+ #: acf.php:394
95
  msgid "Add New Field"
96
  msgstr "Ajouter un champ"
97
 
98
  # @ acf
99
+ #: acf.php:395
100
  msgid "Edit Field"
101
  msgstr "Modifier le champ"
102
 
103
  # @ acf
104
+ #: acf.php:396 includes/admin/views/field-group-fields.php:41
105
  msgid "New Field"
106
  msgstr "Nouveau champ"
107
 
108
  # @ acf
109
+ #: acf.php:397
110
  msgid "View Field"
111
  msgstr "Voir le champ"
112
 
113
  # @ default
114
+ #: acf.php:398
115
  msgid "Search Fields"
116
  msgstr "Rechercher des champs"
117
 
118
  # @ default
119
+ #: acf.php:399
120
  msgid "No Fields found"
121
  msgstr "Aucun champ trouvé"
122
 
123
  # @ default
124
+ #: acf.php:400
125
  msgid "No Fields found in Trash"
126
  msgstr "Aucun champ trouvé dans la corbeille"
127
 
128
+ #: acf.php:439 includes/admin/admin-field-group.php:402
129
+ #: includes/admin/admin-field-groups.php:587
130
  msgid "Inactive"
131
  msgstr "Inactif"
132
 
133
+ #: acf.php:444
134
  #, php-format
135
  msgid "Inactive <span class=\"count\">(%s)</span>"
136
  msgid_plural "Inactive <span class=\"count\">(%s)</span>"
137
  msgstr[0] "Inactif <span class=\"count\">(%s)</span>"
138
+ msgstr[1] "Inactifs <span class=\"count\">(%s)</span>"
139
+
140
+ #: includes/acf-field-functions.php:827
141
+ #: includes/admin/admin-field-group.php:178
142
+ msgid "(no label)"
143
+ msgstr "(aucun label)"
144
+
145
+ #: includes/acf-field-group-functions.php:813
146
+ #: includes/admin/admin-field-group.php:180
147
+ msgid "copy"
148
+ msgstr "copie"
149
 
150
  # @ default
151
  #: includes/admin/admin-field-group.php:86
184
 
185
  #: includes/admin/admin-field-group.php:171
186
  msgid "The string \"field_\" may not be used at the start of a field name"
187
+ msgstr "Le nom d’un champ ne peut pas commencer par « field_ »"
188
 
189
  #: includes/admin/admin-field-group.php:172
190
  msgid "This field cannot be moved until its changes have been saved"
204
 
205
  #: includes/admin/admin-field-group.php:175
206
  msgid "No toggle fields available"
207
+ msgstr "Aucun champ de sélection disponible"
208
 
209
  # @ acf
210
  #: includes/admin/admin-field-group.php:176
215
  msgid "Checked"
216
  msgstr "Coché"
217
 
 
 
 
 
218
  #: includes/admin/admin-field-group.php:179
219
  msgid "(this field)"
220
  msgstr "(ce champ)"
221
 
 
 
 
 
 
222
  #: includes/admin/admin-field-group.php:181
223
  #: includes/admin/views/field-group-field-conditional-logic.php:51
224
  #: includes/admin/views/field-group-field-conditional-logic.php:151
225
  #: includes/admin/views/field-group-locations.php:29
226
  #: includes/admin/views/html-location-group.php:3
227
+ #: includes/api/api-helpers.php:3871
228
  msgid "or"
229
  msgstr "ou"
230
 
235
  # @ acf
236
  #: includes/admin/admin-field-group.php:221
237
  msgid "Location"
238
+ msgstr "Emplacement"
239
 
240
  #: includes/admin/admin-field-group.php:222
241
  #: includes/admin/tools/class-acf-admin-tool-export.php:295
283
  msgstr[1] "Actifs <span class=\"count\">(%s)</span>"
284
 
285
  # @ default
286
+ #: includes/admin/admin-field-groups.php:156
 
 
 
 
 
 
287
  #, php-format
288
+ msgid "Field group duplicated."
289
  msgid_plural "%s field groups duplicated."
290
+ msgstr[0] "Groupe de champs dupliqué."
291
  msgstr[1] "%s groupes de champs dupliqués."
292
 
293
  # @ default
294
+ #: includes/admin/admin-field-groups.php:243
295
  #, php-format
296
+ msgid "Field group synchronised."
 
 
 
 
 
 
297
  msgid_plural "%s field groups synchronised."
298
+ msgstr[0] "Groupe de champs synchronisé."
299
  msgstr[1] "%s groupes de champs synchronisés."
300
 
301
  # @ acf
302
+ #: includes/admin/admin-field-groups.php:414
303
+ #: includes/admin/admin-field-groups.php:577
304
  msgid "Sync available"
305
  msgstr "Synchronisation disponible"
306
 
307
+ #: includes/admin/admin-field-groups.php:527 includes/forms/form-front.php:38
308
+ #: pro/fields/class-acf-field-gallery.php:374
309
  msgid "Title"
310
  msgstr "Titre"
311
 
312
  # @ acf
313
+ #: includes/admin/admin-field-groups.php:528
314
  #: includes/admin/views/field-group-options.php:96
315
  #: includes/admin/views/html-admin-page-upgrade-network.php:38
316
  #: includes/admin/views/html-admin-page-upgrade-network.php:49
317
+ #: pro/fields/class-acf-field-gallery.php:401
318
  msgid "Description"
319
  msgstr "Description"
320
 
321
+ #: includes/admin/admin-field-groups.php:529
322
  msgid "Status"
323
  msgstr "Statut"
324
 
325
  #. Description of the plugin/theme
326
+ #: includes/admin/admin-field-groups.php:626
327
  msgid "Customize WordPress with powerful, professional and intuitive fields."
328
  msgstr ""
329
  "Personnalisez WordPress avec des champs intuitifs, puissants et "
330
  "professionnels."
331
 
332
  # @ acf
333
+ #: includes/admin/admin-field-groups.php:628
334
  #: includes/admin/settings-info.php:76
335
  #: pro/admin/views/html-settings-updates.php:107
336
  msgid "Changelog"
337
+ msgstr "Liste des modifications"
338
 
339
+ #: includes/admin/admin-field-groups.php:633
340
  #, php-format
341
  msgid "See what's new in <a href=\"%s\">version %s</a>."
342
  msgstr "Découvrez les nouveautés de la <a href=\"%s\">version %s</a>."
343
 
344
  # @ acf
345
+ #: includes/admin/admin-field-groups.php:636
346
  msgid "Resources"
347
  msgstr "Ressources"
348
 
349
+ #: includes/admin/admin-field-groups.php:638
350
  msgid "Website"
351
  msgstr "Site web"
352
 
353
+ #: includes/admin/admin-field-groups.php:639
354
  msgid "Documentation"
355
  msgstr "Documentation"
356
 
357
+ #: includes/admin/admin-field-groups.php:640
358
  msgid "Support"
359
  msgstr "Support"
360
 
361
+ #: includes/admin/admin-field-groups.php:642
362
  #: includes/admin/views/settings-info.php:84
363
  msgid "Pro"
364
  msgstr "Pro"
365
 
366
+ #: includes/admin/admin-field-groups.php:647
367
  #, php-format
368
  msgid "Thank you for creating with <a href=\"%s\">ACF</a>."
369
+ msgstr "Merci de créer avec <a href=\"%s\">ACF</a>."
370
 
371
  # @ acf
372
+ #: includes/admin/admin-field-groups.php:686
373
  msgid "Duplicate this item"
374
  msgstr "Dupliquer cet élément"
375
 
376
+ #: includes/admin/admin-field-groups.php:686
377
+ #: includes/admin/admin-field-groups.php:702
378
  #: includes/admin/views/field-group-field.php:46
379
+ #: pro/fields/class-acf-field-flexible-content.php:557
380
  msgid "Duplicate"
381
  msgstr "Dupliquer"
382
 
383
+ #: includes/admin/admin-field-groups.php:719
384
  #: includes/fields/class-acf-field-google-map.php:165
385
  #: includes/fields/class-acf-field-relationship.php:593
386
  msgid "Search"
387
  msgstr "Rechercher"
388
 
389
  # @ acf
390
+ #: includes/admin/admin-field-groups.php:778
391
  #, php-format
392
  msgid "Select %s"
393
  msgstr "Choisir %s"
394
 
395
+ #: includes/admin/admin-field-groups.php:786
396
  msgid "Synchronise field group"
397
  msgstr "Synchroniser le groupe de champs"
398
 
399
+ #: includes/admin/admin-field-groups.php:786
400
+ #: includes/admin/admin-field-groups.php:816
401
  msgid "Sync"
402
+ msgstr "Synchroniser"
403
 
404
+ #: includes/admin/admin-field-groups.php:798
405
  msgid "Apply"
406
  msgstr "Appliquer"
407
 
408
  # @ acf
409
+ #: includes/admin/admin-field-groups.php:816
410
  msgid "Bulk Actions"
411
+ msgstr "Actions groupées"
412
 
413
  #: includes/admin/admin-tools.php:116
414
  #: includes/admin/views/html-admin-tools.php:21
428
  msgstr "Examiner les sites et mettre à niveau"
429
 
430
  # @ acf
431
+ #: includes/admin/admin.php:54 includes/admin/views/field-group-options.php:110
 
432
  msgid "Custom Fields"
433
  msgstr "ACF"
434
 
 
 
 
 
 
 
 
 
 
 
435
  #: includes/admin/settings-info.php:50
436
  msgid "Info"
437
+ msgstr "Informations"
438
 
439
  #: includes/admin/settings-info.php:75
440
  msgid "What's New"
455
  #: includes/admin/tools/class-acf-admin-tool-export.php:97
456
  #: includes/admin/tools/class-acf-admin-tool-export.php:135
457
  msgid "No field groups selected"
458
+ msgstr "Aucun groupe de champs sélectionné"
459
 
460
  #: includes/admin/tools/class-acf-admin-tool-export.php:174
461
  #, php-format
462
  msgid "Exported 1 field group."
463
  msgid_plural "Exported %s field groups."
464
+ msgstr[0] "Un groupe de champ a été exporté."
465
  msgstr[1] "%s groupes de champs ont été exportés."
466
 
467
  # @ default
468
  #: includes/admin/tools/class-acf-admin-tool-export.php:241
469
  #: includes/admin/tools/class-acf-admin-tool-export.php:269
470
  msgid "Select Field Groups"
471
+ msgstr "Sélectionnez les groupes de champs"
472
 
473
  #: includes/admin/tools/class-acf-admin-tool-export.php:336
474
  msgid ""
477
  "import to another ACF installation. Use the generate button to export to PHP "
478
  "code which you can place in your theme."
479
  msgstr ""
480
+ "Sélectionnez les groupes de champs que vous souhaitez exporter puis "
481
+ "choisissez la méthode d'export. Utilisez le bouton « télécharger » pour "
482
+ "exporter un fichier JSON que vous pourrez importer dans une autre "
483
+ "installation ACF. Utilisez le « générer » pour exporter le code PHP que vous "
484
+ "pourrez ajouter à votre thème."
485
 
486
  #: includes/admin/tools/class-acf-admin-tool-export.php:341
487
  msgid "Export File"
495
  "the following code to your theme's functions.php file or include it within "
496
  "an external file."
497
  msgstr ""
498
+ "Le code suivant peut être utilisé pour enregistrer une version locale du/des "
499
+ "groupe(s) de champs sélectionné(s). Un groupe de champ local apporte de "
500
+ "nombreux bénéfices comme des temps de chargement plus rapide, la gestion de "
501
+ "versions, ou des champs/paramètres dynamiques. Copiez-collez le code suivant "
502
+ "dans le fichier functions.php de votre thème ou incluez-le depuis un autre "
503
  "fichier."
504
 
505
  #: includes/admin/tools/class-acf-admin-tool-export.php:446
515
  msgid "Import Field Groups"
516
  msgstr "Importer les groupes de champs"
517
 
518
+ #: includes/admin/tools/class-acf-admin-tool-import.php:47
519
  msgid ""
520
  "Select the Advanced Custom Fields JSON file you would like to import. When "
521
  "you click the import button below, ACF will import the field groups."
522
  msgstr ""
523
+ "Sélectionnez le fichier JSON ACF que vous souhaitez importer et cliquez sur "
524
+ "« Importer ». ACF importera les groupes de champs."
525
 
526
  # @ acf
527
+ #: includes/admin/tools/class-acf-admin-tool-import.php:52
528
  #: includes/fields/class-acf-field-file.php:57
529
  msgid "Select File"
530
  msgstr "Sélectionner un fichier"
531
 
532
+ #: includes/admin/tools/class-acf-admin-tool-import.php:62
533
  msgid "Import File"
534
  msgstr "Importer le fichier"
535
 
536
  # @ acf
537
+ #: includes/admin/tools/class-acf-admin-tool-import.php:85
538
  #: includes/fields/class-acf-field-file.php:170
539
  msgid "No file selected"
540
  msgstr "Aucun fichier sélectionné"
541
 
542
+ #: includes/admin/tools/class-acf-admin-tool-import.php:93
543
  msgid "Error uploading file. Please try again"
544
+ msgstr "Échec de l'import du fichier. Merci d’essayer à nouveau"
545
 
546
+ #: includes/admin/tools/class-acf-admin-tool-import.php:98
547
  msgid "Incorrect file type"
548
  msgstr "Type de fichier incorrect"
549
 
550
+ #: includes/admin/tools/class-acf-admin-tool-import.php:107
551
  msgid "Import file empty"
552
+ msgstr "Le fichier à importer est vide"
553
 
554
+ #: includes/admin/tools/class-acf-admin-tool-import.php:138
555
  #, php-format
556
  msgid "Imported 1 field group"
557
  msgid_plural "Imported %s field groups"
558
+ msgstr[0] "Un groupe de champs importé"
559
  msgstr[1] "%s groupes de champs importés"
560
 
561
  #: includes/admin/views/field-group-field-conditional-logic.php:25
578
  msgstr "Ajouter une règle"
579
 
580
  #: includes/admin/views/field-group-field.php:38
581
+ #: pro/fields/class-acf-field-flexible-content.php:410
582
+ #: pro/fields/class-acf-field-repeater.php:299
583
  msgid "Drag to reorder"
584
  msgstr "Faites glisser pour réorganiser"
585
 
592
  # @ acf
593
  #: includes/admin/views/field-group-field.php:45
594
  #: includes/fields/class-acf-field-file.php:152
595
+ #: includes/fields/class-acf-field-image.php:138
596
  #: includes/fields/class-acf-field-link.php:139
597
+ #: pro/fields/class-acf-field-gallery.php:361
598
  msgid "Edit"
599
  msgstr "Modifier"
600
 
605
 
606
  #: includes/admin/views/field-group-field.php:47
607
  msgid "Move field to another group"
608
+ msgstr "Déplacer le champ dans un autre groupe"
609
 
610
  #: includes/admin/views/field-group-field.php:47
611
  msgid "Move"
618
 
619
  # @ acf
620
  #: includes/admin/views/field-group-field.php:48
621
+ #: pro/fields/class-acf-field-flexible-content.php:556
622
  msgid "Delete"
623
  msgstr "Supprimer"
624
 
640
  # @ acf
641
  #: includes/admin/views/field-group-field.php:76
642
  msgid "Single word, no spaces. Underscores and dashes allowed"
643
+ msgstr "Un seul mot, sans espace. Les « _ » et « - » sont autorisés"
644
 
645
  # @ acf
646
  #: includes/admin/views/field-group-field.php:85
664
 
665
  #: includes/admin/views/field-group-field.php:129
666
  msgid "Wrapper Attributes"
667
+ msgstr "Attributs du conteneur"
668
 
669
  #: includes/admin/views/field-group-field.php:135
670
  msgid "width"
694
  #: includes/fields/class-acf-field-checkbox.php:420
695
  #: includes/fields/class-acf-field-radio.php:311
696
  #: includes/fields/class-acf-field-select.php:433
697
+ #: pro/fields/class-acf-field-flexible-content.php:582
698
  msgid "Label"
699
  msgstr "Intitulé"
700
 
701
  # @ acf
702
  #: includes/admin/views/field-group-fields.php:6
703
  #: includes/fields/class-acf-field-taxonomy.php:939
704
+ #: pro/fields/class-acf-field-flexible-content.php:596
705
  msgid "Name"
706
  msgstr "Nom"
707
 
708
  #: includes/admin/views/field-group-fields.php:7
709
  msgid "Key"
710
+ msgstr "Identifiant"
711
 
712
  # @ acf
713
  #: includes/admin/views/field-group-fields.php:8
720
  "No fields. Click the <strong>+ Add Field</strong> button to create your "
721
  "first field."
722
  msgstr ""
723
+ "Aucun champ. Cliquez sur le bouton <strong>+ Ajouter un champ</strong> pour "
724
+ "créer votre premier champ."
725
 
726
  # @ acf
727
  #: includes/admin/views/field-group-fields.php:31
728
  msgid "+ Add Field"
729
+ msgstr "+ Ajouter un champ"
730
 
731
  # @ acf
732
  #: includes/admin/views/field-group-locations.php:9
749
 
750
  #: includes/admin/views/field-group-options.php:30
751
  msgid "Standard (WP metabox)"
752
+ msgstr "Standard (boîte WP)"
753
 
754
  #: includes/admin/views/field-group-options.php:31
755
  msgid "Seamless (no metabox)"
756
+ msgstr "Sans contour (directement dans la page)"
757
 
758
  # @ acf
759
  #: includes/admin/views/field-group-options.php:38
804
  # @ acf
805
  #: includes/admin/views/field-group-options.php:85
806
  msgid "Order No."
807
+ msgstr "Ordre"
808
 
809
  #: includes/admin/views/field-group-options.php:86
810
  msgid "Field groups with a lower order will appear first"
813
 
814
  #: includes/admin/views/field-group-options.php:97
815
  msgid "Shown in field group list"
816
+ msgstr "Affiché dans la liste des groupes de champs"
817
 
818
  #: includes/admin/views/field-group-options.php:107
819
  msgid "Permalink"
821
 
822
  #: includes/admin/views/field-group-options.php:108
823
  msgid "Content Editor"
824
+ msgstr "Éditeur de contenu"
825
 
826
  #: includes/admin/views/field-group-options.php:109
827
  msgid "Excerpt"
828
+ msgstr "Extrait"
829
 
830
  #: includes/admin/views/field-group-options.php:111
831
  msgid "Discussion"
833
 
834
  #: includes/admin/views/field-group-options.php:112
835
  msgid "Comments"
836
+ msgstr "Commentaires"
837
 
838
  #: includes/admin/views/field-group-options.php:113
839
  msgid "Revisions"
854
 
855
  #: includes/admin/views/field-group-options.php:117
856
  msgid "Page Attributes"
857
+ msgstr "Attributs de page"
858
 
859
  # @ acf
860
  #: includes/admin/views/field-group-options.php:118
872
 
873
  #: includes/admin/views/field-group-options.php:121
874
  msgid "Send Trackbacks"
875
+ msgstr "Envoyer des rétroliens"
876
 
877
  #: includes/admin/views/field-group-options.php:128
878
  msgid "Hide on screen"
882
  #: includes/admin/views/field-group-options.php:129
883
  msgid "<b>Select</b> items to <b>hide</b> them from the edit screen."
884
  msgstr ""
885
+ "<b>Sélectionnez</b> les champs que vous souhaitez <b>masquer</b> sur la page "
886
  "d‘édition."
887
 
888
  # @ acf
892
  "options will be used (the one with the lowest order number)"
893
  msgstr ""
894
  "Si plusieurs groupes ACF sont présents sur une page d‘édition, le groupe "
895
+ "portant le numéro le plus bas sera affiché en premier"
896
 
897
  #: includes/admin/views/html-admin-page-upgrade-network.php:26
898
  #, php-format
907
  #: includes/admin/views/html-admin-page-upgrade-network.php:27
908
  #: includes/admin/views/html-admin-page-upgrade-network.php:92
909
  msgid "Upgrade Sites"
910
+ msgstr "Mettre à niveau les sites"
911
 
912
  #: includes/admin/views/html-admin-page-upgrade-network.php:36
913
  #: includes/admin/views/html-admin-page-upgrade-network.php:47
917
  #: includes/admin/views/html-admin-page-upgrade-network.php:74
918
  #, php-format
919
  msgid "Site requires database upgrade from %s to %s"
920
+ msgstr "Le site requiert une mise à niveau de la base données de %s à %s"
921
 
922
  #: includes/admin/views/html-admin-page-upgrade-network.php:76
923
  msgid "Site is up to date"
924
+ msgstr "Le site est à jour"
925
 
926
  #: includes/admin/views/html-admin-page-upgrade-network.php:93
927
  #, php-format
942
  "Are you sure you wish to run the updater now?"
943
  msgstr ""
944
  "Il est fortement recommandé de faire une sauvegarde de votre base de données "
945
+ "avant de continuer. Êtes-vous sûr de vouloir lancer la mise à niveau "
946
+ "maintenant ?"
947
 
948
  #: includes/admin/views/html-admin-page-upgrade-network.php:144
949
  #: includes/admin/views/html-admin-page-upgrade.php:31
964
 
965
  #: includes/admin/views/html-admin-page-upgrade.php:30
966
  msgid "Reading upgrade tasks..."
967
+ msgstr "Lecture des instructions de mise à niveau…"
968
 
969
  #: includes/admin/views/html-admin-page-upgrade.php:33
970
  #, php-format
975
 
976
  # @ acf
977
  #: includes/admin/views/html-admin-page-upgrade.php:116
978
+ #: includes/ajax/class-acf-ajax-upgrade.php:32
979
  msgid "No updates available."
980
+ msgstr "Aucune mise-à-jour disponible."
981
 
982
  #: includes/admin/views/html-admin-tools.php:21
983
  msgid "Back to all tools"
985
 
986
  #: includes/admin/views/html-location-group.php:3
987
  msgid "Show this field group if"
988
+ msgstr "Montrer ce groupe si"
989
 
990
  # @ acf
991
  #: includes/admin/views/html-notice-upgrade.php:8
1013
 
1014
  #: includes/admin/views/html-notice-upgrade.php:21
1015
  msgid "Database Upgrade Required"
1016
+ msgstr "Mise-à-jour de la base de données nécessaire"
1017
 
1018
  #: includes/admin/views/html-notice-upgrade.php:22
1019
  #, php-format
1020
  msgid "Thank you for updating to %s v%s!"
1021
+ msgstr "Merci d'avoir mis-à-jour %s v%s !"
1022
 
1023
  #: includes/admin/views/html-notice-upgrade.php:22
1024
  msgid ""
1032
  msgid ""
1033
  "Please also check all premium add-ons (%s) are updated to the latest version."
1034
  msgstr ""
1035
+ "Veuillez également vérifier que tous les modules d’extension premium (%s) "
1036
+ "soient à jour à leur dernière version disponible."
1037
+
1038
+ # @ acf
1039
+ #: includes/admin/views/settings-addons.php:3
1040
+ msgid "Add-ons"
1041
+ msgstr "Modules d’extension"
1042
 
1043
  # @ acf
1044
  #: includes/admin/views/settings-addons.php:17
1091
  "ever! Noticeable changes are seen on the gallery, relationship and oEmbed "
1092
  "(new) fields!"
1093
  msgstr ""
1094
+ "Plusieurs champs ont reçu une refonte graphique pour qu'ACF apparaisse sous "
1095
+ "son plus beau jour ! Les améliorations sont notamment visibles sur la "
1096
+ "galerie, le champ relationnel et le petit nouveau : oEmbed (champ de contenu "
1097
+ "embarqué) !"
1098
 
1099
  #: includes/admin/views/settings-info.php:29
1100
  msgid "Improved Data"
1107
  "and out of parent fields!"
1108
  msgstr ""
1109
  "L'architecture des données a été complètement revue et permet dorénavant aux "
1110
+ "sous-champs de vivre indépendamment de leurs parents. Cela permet de "
1111
  "déplacer les champs en dehors de leurs parents !"
1112
 
1113
  #: includes/admin/views/settings-info.php:38
1114
  msgid "Goodbye Add-ons. Hello PRO"
1115
+ msgstr "Au revoir modules d’extension. Bonjour ACF Pro"
1116
 
1117
  #: includes/admin/views/settings-info.php:41
1118
  msgid "Introducing ACF PRO"
1119
+ msgstr "Découvrez ACF PRO"
1120
 
1121
  #: includes/admin/views/settings-info.php:42
1122
  msgid ""
1131
  "version of ACF</a>. With both personal and developer licenses available, "
1132
  "premium functionality is more affordable and accessible than ever before!"
1133
  msgstr ""
1134
+ "Les 4 modules d’extension premium (répéteur, galerie, contenu flexible et "
1135
+ "pages d'options) ont été combinés en une toute nouvelle <a href=\"%s"
1136
+ "\">version PRO d'ACF</a>. Avec des licences personnelles et développeur "
1137
+ "disponibles, les fonctionnalités premium sont encore plus accessibles que "
1138
+ "jamais !"
1139
 
1140
  #: includes/admin/views/settings-info.php:47
1141
  msgid "Powerful Features"
1155
  #, php-format
1156
  msgid "Read more about <a href=\"%s\">ACF PRO features</a>."
1157
  msgstr ""
1158
+ "En savoir plus à propos des <a href=\"%s\">fonctionnalités d’ACF PRO</a>."
1159
 
1160
  # @ wp3i
1161
  #: includes/admin/views/settings-info.php:53
1177
  "but if you do have one, please contact our support team via the <a href=\"%s"
1178
  "\">help desk</a>."
1179
  msgstr ""
1180
+ "Nous avons également écrit un <a href=\"%s\">guide de mise à niveau</a> pour "
1181
+ "répondre aux questions habituelles, mais si vous avez une question "
1182
  "spécifique, veuillez contacter notre équipe de support via le <a href=\"%s"
1183
+ "\">support technique</a>."
1184
 
1185
  #: includes/admin/views/settings-info.php:64
1186
  msgid "New Features"
1209
 
1210
  #: includes/admin/views/settings-info.php:79
1211
  msgid "oEmbed Field"
1212
+ msgstr "Champ de Contenu Embarqué (oEmbed)"
1213
 
1214
  #: includes/admin/views/settings-info.php:80
1215
  msgid ""
1235
  #: includes/admin/views/settings-info.php:90
1236
  msgid "More fields use AJAX powered search to speed up page loading."
1237
  msgstr ""
1238
+ "Plus de champs utilisent maintenant la recherche via AJAX afin d'améliorer "
1239
+ "le temps de chargement des pages."
1240
 
1241
  #: includes/admin/views/settings-info.php:94
1242
  msgid "Local JSON"
1246
  msgid ""
1247
  "New auto export to JSON feature improves speed and allows for syncronisation."
1248
  msgstr ""
1249
+ "La nouvelle fonctionnalité d'export automatique en JSON améliore la rapidité "
1250
+ "et simplifie la synchronisation."
1251
 
1252
  #: includes/admin/views/settings-info.php:99
1253
  msgid "Easy Import / Export"
1268
  "Fields can now be mapped to menus, menu items, comments, widgets and all "
1269
  "user forms!"
1270
  msgstr ""
1271
+ "Les champs peuvent désormais être intégrés dans les menus, éléments de menu, "
1272
+ "commentaires, widgets et tous les formulaires utilisateurs !"
1273
 
1274
  #: includes/admin/views/settings-info.php:109
1275
  msgid "More Customization"
1297
 
1298
  #: includes/admin/views/settings-info.php:119
1299
  msgid "New Settings"
1300
+ msgstr "Nouveaux Paramètres"
1301
 
1302
  #: includes/admin/views/settings-info.php:120
1303
  msgid ""
1304
  "Field group settings have been added for Active, Label Placement, "
1305
  "Instructions Placement and Description."
1306
  msgstr ""
1307
+ "De nouveaux réglages font leur apparition pour Actif, Emplacement du Label, "
1308
+ "Emplacement des Instructions et Description."
 
1309
 
1310
  #: includes/admin/views/settings-info.php:124
1311
  msgid "Better Front End Forms"
1315
  msgid ""
1316
  "acf_form() can now create a new post on submission with lots of new settings."
1317
  msgstr ""
1318
+ "acf_form() peut maintenant créer un nouvel article lors de la soumission et "
1319
+ "propose de nombreux réglages."
1320
 
1321
  #: includes/admin/views/settings-info.php:129
1322
  msgid "Better Validation"
1338
  "New field group functionality allows you to move a field between groups & "
1339
  "parents."
1340
  msgstr ""
1341
+ "La nouvelle fonctionnalité de Groupe de Champ vous permet de déplacer un "
1342
+ "champ entre différents groupes et parents."
1343
 
1344
  #: includes/admin/views/settings-info.php:146
1345
  #, php-format
1346
  msgid "We think you'll love the changes in %s."
1347
+ msgstr "Nous pensons que vous allez adorer les nouveautés de la version %s."
 
 
1348
 
1349
+ #: includes/api/api-helpers.php:1049
1350
  msgid "Thumbnail"
1351
  msgstr "Miniature"
1352
 
1353
+ #: includes/api/api-helpers.php:1050
1354
  msgid "Medium"
1355
  msgstr "Moyen"
1356
 
1357
+ #: includes/api/api-helpers.php:1051
1358
  msgid "Large"
1359
  msgstr "Grande"
1360
 
1361
+ #: includes/api/api-helpers.php:1100
1362
  msgid "Full Size"
1363
  msgstr "Taille originale"
1364
 
1365
  # @ acf
1366
+ #: includes/api/api-helpers.php:1821 includes/api/api-term.php:147
1367
  #: pro/fields/class-acf-field-clone.php:996
1368
  msgid "(no title)"
1369
+ msgstr "(sans titre)"
1370
 
1371
+ #: includes/api/api-helpers.php:3792
1372
  #, php-format
1373
  msgid "Image width must be at least %dpx."
1374
  msgstr "L'image doit mesurer au moins %dpx de largeur."
1375
 
1376
+ #: includes/api/api-helpers.php:3797
1377
  #, php-format
1378
  msgid "Image width must not exceed %dpx."
1379
  msgstr "L'image ne doit pas dépasser %dpx de largeur."
1380
 
1381
+ #: includes/api/api-helpers.php:3813
1382
  #, php-format
1383
  msgid "Image height must be at least %dpx."
1384
  msgstr "L'image doit mesurer au moins %dpx de hauteur."
1385
 
1386
+ #: includes/api/api-helpers.php:3818
1387
  #, php-format
1388
  msgid "Image height must not exceed %dpx."
1389
  msgstr "L'image ne doit pas dépasser %dpx de hauteur."
1390
 
1391
+ #: includes/api/api-helpers.php:3836
1392
  #, php-format
1393
  msgid "File size must be at least %s."
1394
  msgstr "Le poids de l'image doit être d'au moins %s."
1395
 
1396
+ #: includes/api/api-helpers.php:3841
1397
  #, php-format
1398
  msgid "File size must must not exceed %s."
1399
+ msgstr "Le poids de l'image ne doit pas dépasser %s."
1400
 
1401
  # @ acf
1402
+ #: includes/api/api-helpers.php:3875
1403
  #, php-format
1404
  msgid "File type must be %s."
1405
  msgstr "Le type de fichier doit être %s."
1416
  #: includes/assets.php:172
1417
  msgctxt "verb"
1418
  msgid "Edit"
1419
+ msgstr "Modifier"
1420
 
1421
  #: includes/assets.php:173
1422
  msgctxt "verb"
1425
 
1426
  #: includes/assets.php:174
1427
  msgid "Uploaded to this post"
1428
+ msgstr "Lié(s) à cet article"
1429
 
1430
  #: includes/assets.php:175
1431
  msgid "Expand Details"
1440
  msgstr "Limité"
1441
 
1442
  # @ acf
1443
+ #: includes/assets.php:178 includes/fields/class-acf-field-image.php:66
1444
  msgid "All images"
1445
  msgstr "Toutes les images"
1446
 
1465
  # @ acf
1466
  #: includes/assets.php:187
1467
  msgid "Are you sure?"
1468
+ msgstr "Êtes-vous sûr(e) ?"
1469
 
1470
  #: includes/assets.php:188 includes/fields/class-acf-field-true_false.php:79
1471
  #: includes/fields/class-acf-field-true_false.php:159
1481
 
1482
  # @ acf
1483
  #: includes/assets.php:190 includes/fields/class-acf-field-file.php:154
1484
+ #: includes/fields/class-acf-field-image.php:140
1485
  #: includes/fields/class-acf-field-link.php:140
1486
+ #: pro/fields/class-acf-field-gallery.php:362
1487
+ #: pro/fields/class-acf-field-gallery.php:499
1488
  msgid "Remove"
1489
  msgstr "Enlever"
1490
 
1534
 
1535
  # @ acf
1536
  #: includes/assets.php:206 includes/forms/form-comment.php:166
1537
+ #: pro/admin/admin-options-page.php:325
1538
  msgid "Edit field group"
1539
  msgstr "Modifier le groupe de champs"
1540
 
1549
 
1550
  #: includes/fields.php:349
1551
  msgid "Basic"
1552
+ msgstr "Commun"
1553
 
1554
  #: includes/fields.php:350 includes/forms/form-front.php:47
1555
  msgid "Content"
1575
  #: includes/fields/class-acf-field-group.php:474
1576
  #: includes/fields/class-acf-field-radio.php:290
1577
  #: pro/fields/class-acf-field-clone.php:843
1578
+ #: pro/fields/class-acf-field-flexible-content.php:553
1579
+ #: pro/fields/class-acf-field-flexible-content.php:602
1580
+ #: pro/fields/class-acf-field-repeater.php:448
1581
  msgid "Layout"
1582
+ msgstr "Mise en page"
1583
 
1584
  #: includes/fields/class-acf-field-accordion.php:24
1585
  msgid "Accordion"
1604
  #: includes/fields/class-acf-field-accordion.php:119
1605
  #: includes/fields/class-acf-field-tab.php:114
1606
  msgid "Endpoint"
1607
+ msgstr "Extrémité"
1608
 
1609
  #: includes/fields/class-acf-field-accordion.php:120
1610
  msgid ""
1611
  "Define an endpoint for the previous accordion to stop. This accordion will "
1612
  "not be visible."
1613
  msgstr ""
1614
+ "Définir comme extrémité de laccordéon précédent. Cet accordéon ne sera pas "
1615
+ "visible."
1616
 
1617
  #: includes/fields/class-acf-field-button-group.php:24
1618
  msgid "Button Group"
1639
  #: includes/fields/class-acf-field-select.php:365
1640
  msgid "For more control, you may specify both a value and label like this:"
1641
  msgstr ""
1642
+ "Pour plus de contrôle, vous pouvez spécifier la valeur et le label de cette "
1643
+ "manière :"
1644
 
1645
  #: includes/fields/class-acf-field-button-group.php:150
1646
  #: includes/fields/class-acf-field-checkbox.php:345
1656
  #: includes/fields/class-acf-field-radio.php:244
1657
  #: includes/fields/class-acf-field-select.php:382
1658
  #: includes/fields/class-acf-field-taxonomy.php:784
1659
+ #: includes/fields/class-acf-field-user.php:393
1660
  msgid "Allow Null?"
1661
  msgstr "Autoriser une valeur vide ?"
1662
 
1669
  #: includes/fields/class-acf-field-radio.php:281
1670
  #: includes/fields/class-acf-field-range.php:149
1671
  #: includes/fields/class-acf-field-select.php:373
1672
+ #: includes/fields/class-acf-field-text.php:95
1673
  #: includes/fields/class-acf-field-textarea.php:102
1674
  #: includes/fields/class-acf-field-true_false.php:135
1675
  #: includes/fields/class-acf-field-url.php:100
1682
  #: includes/fields/class-acf-field-number.php:128
1683
  #: includes/fields/class-acf-field-radio.php:282
1684
  #: includes/fields/class-acf-field-range.php:150
1685
+ #: includes/fields/class-acf-field-text.php:96
1686
  #: includes/fields/class-acf-field-textarea.php:103
1687
  #: includes/fields/class-acf-field-url.php:101
1688
  #: includes/fields/class-acf-field-wysiwyg.php:382
1689
  msgid "Appears when creating a new post"
1690
+ msgstr "Valeur donnée lors de la création dun nouvel article"
1691
 
1692
  #: includes/fields/class-acf-field-button-group.php:183
1693
  #: includes/fields/class-acf-field-checkbox.php:396
1705
  #: includes/fields/class-acf-field-button-group.php:191
1706
  #: includes/fields/class-acf-field-checkbox.php:413
1707
  #: includes/fields/class-acf-field-file.php:215
 
1708
  #: includes/fields/class-acf-field-link.php:166
1709
  #: includes/fields/class-acf-field-radio.php:304
1710
  #: includes/fields/class-acf-field-taxonomy.php:829
1711
  msgid "Return Value"
1712
+ msgstr "Valeur renvoyée"
1713
 
1714
  #: includes/fields/class-acf-field-button-group.php:192
1715
  #: includes/fields/class-acf-field-checkbox.php:414
1716
  #: includes/fields/class-acf-field-file.php:216
 
1717
  #: includes/fields/class-acf-field-link.php:167
1718
  #: includes/fields/class-acf-field-radio.php:305
1719
  msgid "Specify the returned value on front end"
1720
+ msgstr "Spécifier la valeur retournée dans le code"
1721
 
1722
  #: includes/fields/class-acf-field-button-group.php:197
1723
  #: includes/fields/class-acf-field-checkbox.php:419
1741
 
1742
  #: includes/fields/class-acf-field-checkbox.php:154
1743
  msgid "Toggle All"
1744
+ msgstr "Tout (dé)sélectionner"
1745
 
1746
  #: includes/fields/class-acf-field-checkbox.php:221
1747
  msgid "Add new choice"
1749
 
1750
  #: includes/fields/class-acf-field-checkbox.php:353
1751
  msgid "Allow Custom"
1752
+ msgstr "Autoriser une valeur personnalisée"
1753
 
1754
  #: includes/fields/class-acf-field-checkbox.php:358
1755
  msgid "Allow 'custom' values to be added"
1756
+ msgstr "Permettre l’ajout de valeurs personnalisées"
1757
 
1758
  #: includes/fields/class-acf-field-checkbox.php:364
1759
  msgid "Save Custom"
1760
+ msgstr "Enregistrer les valeurs personnalisées"
1761
 
1762
  #: includes/fields/class-acf-field-checkbox.php:369
1763
  msgid "Save 'custom' values to the field's choices"
1764
+ msgstr "Enregistrer les valeurs personnalisées dans les choix du champs"
1765
 
1766
  #: includes/fields/class-acf-field-checkbox.php:381
1767
  #: includes/fields/class-acf-field-select.php:374
1770
 
1771
  #: includes/fields/class-acf-field-checkbox.php:403
1772
  msgid "Toggle"
1773
+ msgstr "Tout (dé)sélectionner"
1774
 
1775
  #: includes/fields/class-acf-field-checkbox.php:404
1776
  msgid "Prepend an extra checkbox to toggle all choices"
1777
+ msgstr ""
1778
+ "Ajouter une case à cocher au début pour tout sélectionner/désélectionner"
1779
 
1780
  # @ acf
1781
  #: includes/fields/class-acf-field-color_picker.php:25
1782
  msgid "Color Picker"
1783
+ msgstr "Sélecteur de couleur"
1784
 
1785
  #: includes/fields/class-acf-field-color_picker.php:68
1786
  msgid "Clear"
1794
  # @ acf
1795
  #: includes/fields/class-acf-field-color_picker.php:70
1796
  msgid "Select Color"
1797
+ msgstr "Choisir une couleur"
1798
 
1799
  #: includes/fields/class-acf-field-color_picker.php:71
1800
  msgid "Current Color"
1803
  # @ acf
1804
  #: includes/fields/class-acf-field-date_picker.php:25
1805
  msgid "Date Picker"
1806
+ msgstr "Sélecteur de date"
1807
 
1808
  #: includes/fields/class-acf-field-date_picker.php:59
1809
  msgctxt "Date Picker JS closeText"
1818
  #: includes/fields/class-acf-field-date_picker.php:61
1819
  msgctxt "Date Picker JS nextText"
1820
  msgid "Next"
1821
+ msgstr "Suiv."
1822
 
1823
  #: includes/fields/class-acf-field-date_picker.php:62
1824
  msgctxt "Date Picker JS prevText"
1825
  msgid "Prev"
1826
+ msgstr "Préc."
1827
 
1828
  #: includes/fields/class-acf-field-date_picker.php:63
1829
  msgctxt "Date Picker JS weekHeader"
1830
  msgid "Wk"
1831
+ msgstr "Sem."
1832
 
1833
  # @ acf
1834
  #: includes/fields/class-acf-field-date_picker.php:178
1835
  #: includes/fields/class-acf-field-date_time_picker.php:183
1836
  #: includes/fields/class-acf-field-time_picker.php:109
1837
  msgid "Display Format"
1838
+ msgstr "Format daffichage"
1839
 
1840
  #: includes/fields/class-acf-field-date_picker.php:179
1841
  #: includes/fields/class-acf-field-date_time_picker.php:184
1842
  #: includes/fields/class-acf-field-time_picker.php:110
1843
  msgid "The format displayed when editing a post"
1844
+ msgstr "Format affiché lors de l’édition d’un article"
 
 
1845
 
1846
  #: includes/fields/class-acf-field-date_picker.php:187
1847
  #: includes/fields/class-acf-field-date_picker.php:218
1863
  # @ acf
1864
  #: includes/fields/class-acf-field-date_picker.php:208
1865
  #: includes/fields/class-acf-field-date_time_picker.php:200
1866
+ #: includes/fields/class-acf-field-image.php:204
1867
  #: includes/fields/class-acf-field-post_object.php:431
1868
  #: includes/fields/class-acf-field-relationship.php:634
1869
  #: includes/fields/class-acf-field-select.php:427
1870
  #: includes/fields/class-acf-field-time_picker.php:124
1871
+ #: includes/fields/class-acf-field-user.php:412
1872
+ #: pro/fields/class-acf-field-gallery.php:578
1873
  msgid "Return Format"
1874
+ msgstr "Format de retour"
1875
 
1876
  #: includes/fields/class-acf-field-date_picker.php:209
1877
  #: includes/fields/class-acf-field-date_time_picker.php:201
1878
  #: includes/fields/class-acf-field-time_picker.php:125
1879
  msgid "The format returned via template functions"
1880
+ msgstr "Valeur retournée dans le code"
1881
 
1882
  #: includes/fields/class-acf-field-date_picker.php:227
1883
  #: includes/fields/class-acf-field-date_time_picker.php:217
1884
  msgid "Week Starts On"
1885
+ msgstr "La semaine commencent le"
1886
 
1887
  #: includes/fields/class-acf-field-date_time_picker.php:25
1888
  msgid "Date Time Picker"
1889
+ msgstr "Sélecteur de date et heure"
1890
 
1891
  #: includes/fields/class-acf-field-date_time_picker.php:68
1892
  msgctxt "Date Time Picker JS timeOnlyTitle"
1893
  msgid "Choose Time"
1894
+ msgstr "Choisir l’heure"
1895
 
1896
  #: includes/fields/class-acf-field-date_time_picker.php:69
1897
  msgctxt "Date Time Picker JS timeText"
1941
  #: includes/fields/class-acf-field-date_time_picker.php:78
1942
  msgctxt "Date Time Picker JS selectText"
1943
  msgid "Select"
1944
+ msgstr "Sélectionner"
1945
 
1946
  #: includes/fields/class-acf-field-date_time_picker.php:80
1947
  msgctxt "Date Time Picker JS amText"
1965
 
1966
  #: includes/fields/class-acf-field-email.php:25
1967
  msgid "Email"
1968
+ msgstr "e-mail"
1969
 
1970
  #: includes/fields/class-acf-field-email.php:127
1971
  #: includes/fields/class-acf-field-number.php:136
1972
  #: includes/fields/class-acf-field-password.php:71
1973
+ #: includes/fields/class-acf-field-text.php:104
1974
  #: includes/fields/class-acf-field-textarea.php:111
1975
  #: includes/fields/class-acf-field-url.php:109
1976
  msgid "Placeholder Text"
1977
+ msgstr "Texte indicatif"
1978
 
1979
  #: includes/fields/class-acf-field-email.php:128
1980
  #: includes/fields/class-acf-field-number.php:137
1981
  #: includes/fields/class-acf-field-password.php:72
1982
+ #: includes/fields/class-acf-field-text.php:105
1983
  #: includes/fields/class-acf-field-textarea.php:112
1984
  #: includes/fields/class-acf-field-url.php:110
1985
  msgid "Appears within the input"
1986
+ msgstr "Apparait dans le champ"
1987
 
1988
  #: includes/fields/class-acf-field-email.php:136
1989
  #: includes/fields/class-acf-field-number.php:145
1990
  #: includes/fields/class-acf-field-password.php:80
1991
  #: includes/fields/class-acf-field-range.php:188
1992
+ #: includes/fields/class-acf-field-text.php:113
1993
  msgid "Prepend"
1994
  msgstr "Préfixe"
1995
 
1997
  #: includes/fields/class-acf-field-number.php:146
1998
  #: includes/fields/class-acf-field-password.php:81
1999
  #: includes/fields/class-acf-field-range.php:189
2000
+ #: includes/fields/class-acf-field-text.php:114
2001
  msgid "Appears before the input"
2002
  msgstr "Apparait avant le champ"
2003
 
2005
  #: includes/fields/class-acf-field-number.php:154
2006
  #: includes/fields/class-acf-field-password.php:89
2007
  #: includes/fields/class-acf-field-range.php:197
2008
+ #: includes/fields/class-acf-field-text.php:122
2009
  msgid "Append"
2010
  msgstr "Suffixe"
2011
 
2013
  #: includes/fields/class-acf-field-number.php:155
2014
  #: includes/fields/class-acf-field-password.php:90
2015
  #: includes/fields/class-acf-field-range.php:198
2016
+ #: includes/fields/class-acf-field-text.php:123
2017
  msgid "Appears after the input"
2018
  msgstr "Apparait après le champ"
2019
 
2041
  #: includes/fields/class-acf-field-file.php:145
2042
  #: includes/fields/class-acf-field-file.php:248
2043
  #: includes/fields/class-acf-field-file.php:259
2044
+ #: includes/fields/class-acf-field-image.php:264
2045
+ #: includes/fields/class-acf-field-image.php:293
2046
+ #: pro/fields/class-acf-field-gallery.php:663
2047
+ #: pro/fields/class-acf-field-gallery.php:692
2048
  msgid "File size"
2049
  msgstr "Taille du fichier"
2050
 
2055
 
2056
  #: includes/fields/class-acf-field-file.php:221
2057
  msgid "File Array"
2058
+ msgstr "Données du fichier (tableau)"
2059
 
2060
  # @ acf
2061
  #: includes/fields/class-acf-field-file.php:222
2068
  msgstr "ID du Fichier"
2069
 
2070
  #: includes/fields/class-acf-field-file.php:230
2071
+ #: includes/fields/class-acf-field-image.php:229
2072
+ #: pro/fields/class-acf-field-gallery.php:613
2073
  msgid "Library"
2074
  msgstr "Médias"
2075
 
2076
  #: includes/fields/class-acf-field-file.php:231
2077
+ #: includes/fields/class-acf-field-image.php:230
2078
+ #: pro/fields/class-acf-field-gallery.php:614
2079
  msgid "Limit the media library choice"
2080
+ msgstr "Limiter le choix dans la médiathèque"
2081
 
2082
  #: includes/fields/class-acf-field-file.php:236
2083
+ #: includes/fields/class-acf-field-image.php:235
2084
  #: includes/locations/class-acf-location-attachment.php:101
2085
  #: includes/locations/class-acf-location-comment.php:79
2086
  #: includes/locations/class-acf-location-nav-menu.php:102
2088
  #: includes/locations/class-acf-location-user-form.php:87
2089
  #: includes/locations/class-acf-location-user-role.php:111
2090
  #: includes/locations/class-acf-location-widget.php:83
2091
+ #: pro/fields/class-acf-field-gallery.php:619
2092
+ #: pro/locations/class-acf-location-block.php:79
2093
  msgid "All"
2094
  msgstr "Tous"
2095
 
2096
  #: includes/fields/class-acf-field-file.php:237
2097
+ #: includes/fields/class-acf-field-image.php:236
2098
+ #: pro/fields/class-acf-field-gallery.php:620
2099
  msgid "Uploaded to post"
2100
  msgstr "Liés à cet article"
2101
 
2102
  # @ acf
2103
  #: includes/fields/class-acf-field-file.php:244
2104
+ #: includes/fields/class-acf-field-image.php:243
2105
+ #: pro/fields/class-acf-field-gallery.php:642
2106
  msgid "Minimum"
2107
  msgstr "Minimum"
2108
 
2113
 
2114
  # @ acf
2115
  #: includes/fields/class-acf-field-file.php:255
2116
+ #: includes/fields/class-acf-field-image.php:272
2117
+ #: pro/fields/class-acf-field-gallery.php:671
2118
  msgid "Maximum"
2119
  msgstr "Maximum"
2120
 
2121
  #: includes/fields/class-acf-field-file.php:266
2122
+ #: includes/fields/class-acf-field-image.php:301
2123
+ #: pro/fields/class-acf-field-gallery.php:699
2124
  msgid "Allowed file types"
2125
  msgstr "Types de fichiers autorisés"
2126
 
2127
  #: includes/fields/class-acf-field-file.php:267
2128
+ #: includes/fields/class-acf-field-image.php:302
2129
+ #: pro/fields/class-acf-field-gallery.php:700
2130
  msgid "Comma separated list. Leave blank for all types"
2131
  msgstr ""
2132
+ "Extensions autorisées séparées par une virgule. Laissez vide pour autoriser "
2133
+ "toutes les extensions"
2134
 
2135
  #: includes/fields/class-acf-field-google-map.php:25
2136
  msgid "Google Map"
2151
 
2152
  #: includes/fields/class-acf-field-google-map.php:170
2153
  msgid "Search for address..."
2154
+ msgstr "Chercher une adresse"
2155
 
2156
  #: includes/fields/class-acf-field-google-map.php:200
2157
  #: includes/fields/class-acf-field-google-map.php:211
2161
  #: includes/fields/class-acf-field-google-map.php:201
2162
  #: includes/fields/class-acf-field-google-map.php:212
2163
  msgid "Center the initial map"
2164
+ msgstr "Position initiale du centre de la carte"
2165
 
2166
  #: includes/fields/class-acf-field-google-map.php:223
2167
  msgid "Zoom"
2169
 
2170
  #: includes/fields/class-acf-field-google-map.php:224
2171
  msgid "Set the initial zoom level"
2172
+ msgstr "Niveau de zoom initial"
2173
 
2174
  #: includes/fields/class-acf-field-google-map.php:233
2175
+ #: includes/fields/class-acf-field-image.php:255
2176
+ #: includes/fields/class-acf-field-image.php:284
2177
  #: includes/fields/class-acf-field-oembed.php:268
2178
+ #: pro/fields/class-acf-field-gallery.php:654
2179
+ #: pro/fields/class-acf-field-gallery.php:683
2180
  msgid "Height"
2181
  msgstr "Hauteur"
2182
 
2183
  #: includes/fields/class-acf-field-google-map.php:234
2184
  msgid "Customize the map height"
2185
+ msgstr "Hauteur de la carte"
2186
 
2187
  # @ acf
2188
  #: includes/fields/class-acf-field-group.php:25
2191
 
2192
  # @ acf
2193
  #: includes/fields/class-acf-field-group.php:459
2194
+ #: pro/fields/class-acf-field-repeater.php:384
2195
  msgid "Sub Fields"
2196
+ msgstr "Sous-champs"
2197
 
2198
  #: includes/fields/class-acf-field-group.php:475
2199
  #: pro/fields/class-acf-field-clone.php:844
2200
  msgid "Specify the style used to render the selected fields"
2201
+ msgstr "Style utilisé pour générer les champs sélectionnés"
2202
 
2203
  #: includes/fields/class-acf-field-group.php:480
2204
  #: pro/fields/class-acf-field-clone.php:849
2205
+ #: pro/fields/class-acf-field-flexible-content.php:613
2206
+ #: pro/fields/class-acf-field-repeater.php:456
2207
+ #: pro/locations/class-acf-location-block.php:27
2208
  msgid "Block"
2209
  msgstr "Bloc"
2210
 
2211
  #: includes/fields/class-acf-field-group.php:481
2212
  #: pro/fields/class-acf-field-clone.php:850
2213
+ #: pro/fields/class-acf-field-flexible-content.php:612
2214
+ #: pro/fields/class-acf-field-repeater.php:455
2215
  msgid "Table"
2216
  msgstr "Tableau"
2217
 
2218
  #: includes/fields/class-acf-field-group.php:482
2219
  #: pro/fields/class-acf-field-clone.php:851
2220
+ #: pro/fields/class-acf-field-flexible-content.php:614
2221
+ #: pro/fields/class-acf-field-repeater.php:457
2222
  msgid "Row"
2223
  msgstr "Rangée"
2224
 
2228
  msgstr "Image"
2229
 
2230
  # acf
2231
+ #: includes/fields/class-acf-field-image.php:63
2232
  msgid "Select Image"
2233
+ msgstr "Sélectionner une image"
2234
 
2235
  # @ acf
2236
+ #: includes/fields/class-acf-field-image.php:64
2237
  msgid "Edit Image"
2238
  msgstr "Modifier l'image"
2239
 
2240
  # @ acf
2241
+ #: includes/fields/class-acf-field-image.php:65
2242
  msgid "Update Image"
2243
  msgstr "Mettre à jour"
2244
 
2245
  # @ acf
2246
+ #: includes/fields/class-acf-field-image.php:156
2247
  msgid "No image selected"
2248
  msgstr "Aucune image sélectionnée"
2249
 
2250
  # @ acf
2251
+ #: includes/fields/class-acf-field-image.php:156
2252
  msgid "Add Image"
2253
  msgstr "Ajouter une image"
2254
 
2255
  # @ acf
2256
+ #: includes/fields/class-acf-field-image.php:210
2257
+ #: pro/fields/class-acf-field-gallery.php:584
2258
  msgid "Image Array"
2259
+ msgstr "Données de l'image (tableau)"
2260
 
2261
  # @ acf
2262
+ #: includes/fields/class-acf-field-image.php:211
2263
+ #: pro/fields/class-acf-field-gallery.php:585
2264
  msgid "Image URL"
2265
  msgstr "URL de l‘image"
2266
 
2267
  # @ acf
2268
+ #: includes/fields/class-acf-field-image.php:212
2269
+ #: pro/fields/class-acf-field-gallery.php:586
2270
  msgid "Image ID"
2271
  msgstr "ID de l‘image"
2272
 
2273
  # @ acf
2274
+ #: includes/fields/class-acf-field-image.php:219
2275
+ #: pro/fields/class-acf-field-gallery.php:592
2276
  msgid "Preview Size"
2277
  msgstr "Taille de prévisualisation"
2278
 
2279
+ #: includes/fields/class-acf-field-image.php:244
2280
+ #: includes/fields/class-acf-field-image.php:273
2281
+ #: pro/fields/class-acf-field-gallery.php:643
2282
+ #: pro/fields/class-acf-field-gallery.php:672
 
 
 
 
2283
  msgid "Restrict which images can be uploaded"
2284
+ msgstr "Restreindre les images envoyées"
2285
 
2286
+ #: includes/fields/class-acf-field-image.php:247
2287
+ #: includes/fields/class-acf-field-image.php:276
2288
  #: includes/fields/class-acf-field-oembed.php:257
2289
+ #: pro/fields/class-acf-field-gallery.php:646
2290
+ #: pro/fields/class-acf-field-gallery.php:675
2291
  msgid "Width"
2292
  msgstr "Largeur"
2293
 
2303
 
2304
  #: includes/fields/class-acf-field-link.php:138
2305
  msgid "Opens in a new window/tab"
2306
+ msgstr "Ouvrir dans un nouvel onglet/fenêtre"
2307
 
2308
  #: includes/fields/class-acf-field-link.php:172
2309
  msgid "Link Array"
2350
 
2351
  #: includes/fields/class-acf-field-message.php:124
2352
  msgid "Escape HTML"
2353
+ msgstr "Afficher le code HTML"
2354
 
2355
  #: includes/fields/class-acf-field-message.php:125
2356
  msgid "Allow HTML markup to display as visible text instead of rendering"
2451
  #: includes/fields/class-acf-field-page_link.php:533
2452
  #: includes/fields/class-acf-field-post_object.php:421
2453
  #: includes/fields/class-acf-field-select.php:392
2454
+ #: includes/fields/class-acf-field-user.php:403
2455
  msgid "Select multiple values?"
2456
+ msgstr "Autoriser la sélection multiple ?"
2457
 
2458
  #: includes/fields/class-acf-field-password.php:25
2459
  msgid "Password"
2483
 
2484
  #: includes/fields/class-acf-field-radio.php:259
2485
  msgid "Add 'other' choice to allow for custom values"
2486
+ msgstr "Ajouter un choix « autre » pour autoriser une valeur personnalisée"
2487
 
2488
  #: includes/fields/class-acf-field-radio.php:265
2489
  msgid "Save Other"
2490
+ msgstr "Enregistrer la valeur personnalisée"
2491
 
2492
  #: includes/fields/class-acf-field-radio.php:270
2493
  msgid "Save 'other' values to the field's choices"
2494
+ msgstr "Enregistrer les valeurs personnalisées « autre » en tant que choix"
2495
 
2496
  #: includes/fields/class-acf-field-range.php:25
2497
  msgid "Range"
2508
 
2509
  #: includes/fields/class-acf-field-relationship.php:63
2510
  msgid "Loading"
2511
+ msgstr "Chargement en cours"
2512
 
2513
  #: includes/fields/class-acf-field-relationship.php:64
2514
  msgid "No matches found"
2525
 
2526
  #: includes/fields/class-acf-field-relationship.php:477
2527
  msgid "Search..."
2528
+ msgstr "Rechercher"
2529
 
2530
  #: includes/fields/class-acf-field-relationship.php:588
2531
  msgid "Filters"
2564
  msgstr "Maximum d'articles sélectionnables"
2565
 
2566
  #: includes/fields/class-acf-field-relationship.php:727
2567
+ #: pro/fields/class-acf-field-gallery.php:800
2568
  #, php-format
2569
  msgid "%s requires at least %s selection"
2570
  msgid_plural "%s requires at least %s selections"
2580
  #: includes/fields/class-acf-field-select.php:111
2581
  msgctxt "Select2 JS matches_1"
2582
  msgid "One result is available, press enter to select it."
2583
+ msgstr "Un résultat est disponible, appuyez sur Entrée pour le sélectionner."
2584
 
2585
  #: includes/fields/class-acf-field-select.php:112
2586
  #, php-format
2647
  #: includes/fields/class-acf-field-select.php:402
2648
  #: includes/fields/class-acf-field-true_false.php:144
2649
  msgid "Stylised UI"
2650
+ msgstr "Interface stylisée"
2651
 
2652
  #: includes/fields/class-acf-field-select.php:412
2653
  msgid "Use AJAX to lazy load choices?"
2654
+ msgstr "Utiliser AJAX pour charger les choix dynamiquement ?"
2655
 
2656
  #: includes/fields/class-acf-field-select.php:428
2657
  msgid "Specify the value returned"
2658
+ msgstr "Définit la valeur retournée"
2659
 
2660
  #: includes/fields/class-acf-field-separator.php:25
2661
  msgid "Separator"
2674
  "Define an endpoint for the previous tabs to stop. This will start a new "
2675
  "group of tabs."
2676
  msgstr ""
2677
+ "Définit une extrémité pour fermer les précédents onglets. Cela va commencer "
2678
+ "un nouveau groupe d'onglets."
2679
 
2680
  #: includes/fields/class-acf-field-taxonomy.php:714
2681
  #, php-format
2695
  # @ acf
2696
  #: includes/fields/class-acf-field-taxonomy.php:765
2697
  msgid "Select the appearance of this field"
2698
+ msgstr "Apparence de ce champ"
2699
 
2700
  # @ acf
2701
  #: includes/fields/class-acf-field-taxonomy.php:770
2709
 
2710
  #: includes/fields/class-acf-field-taxonomy.php:774
2711
  msgid "Single Value"
2712
+ msgstr "Valeur unique"
2713
 
2714
  # @ acf
2715
  #: includes/fields/class-acf-field-taxonomy.php:775
2739
 
2740
  #: includes/fields/class-acf-field-taxonomy.php:820
2741
  msgid "Load value from posts terms"
2742
+ msgstr "Charger une valeur depuis les termes de l’article"
2743
 
2744
  # @ acf
2745
  #: includes/fields/class-acf-field-taxonomy.php:834
2763
  #: includes/fields/class-acf-field-taxonomy.php:927
2764
  #, php-format
2765
  msgid "%s added"
2766
+ msgstr "%s ajouté"
2767
 
2768
  # @ acf
2769
  #: includes/fields/class-acf-field-taxonomy.php:973
2775
  msgid "Text"
2776
  msgstr "Texte"
2777
 
2778
+ #: includes/fields/class-acf-field-text.php:131
2779
  #: includes/fields/class-acf-field-textarea.php:120
2780
  msgid "Character Limit"
2781
  msgstr "Limite de caractères"
2782
 
2783
+ #: includes/fields/class-acf-field-text.php:132
2784
  #: includes/fields/class-acf-field-textarea.php:121
2785
  msgid "Leave blank for no limit"
2786
+ msgstr "Laisser vide ne pas donner de limite"
2787
+
2788
+ #: includes/fields/class-acf-field-text.php:157
2789
+ #: includes/fields/class-acf-field-textarea.php:215
2790
+ #, php-format
2791
+ msgid "Value must not exceed %d characters"
2792
+ msgstr "La valeur ne doit pas dépasser %d caractères"
2793
 
2794
  # @ acf
2795
  #: includes/fields/class-acf-field-textarea.php:25
2806
 
2807
  #: includes/fields/class-acf-field-time_picker.php:25
2808
  msgid "Time Picker"
2809
+ msgstr "Sélecteur d’heure"
2810
 
2811
  # @ acf
2812
  #: includes/fields/class-acf-field-true_false.php:25
2813
  msgid "True / False"
2814
+ msgstr "Oui / Non"
2815
 
2816
  #: includes/fields/class-acf-field-true_false.php:127
2817
  msgid "Displays text alongside the checkbox"
2818
+ msgstr "Affiche le texte à côté de la case à cocher"
2819
 
2820
  #: includes/fields/class-acf-field-true_false.php:155
2821
  msgid "On Text"
2823
 
2824
  #: includes/fields/class-acf-field-true_false.php:156
2825
  msgid "Text shown when active"
2826
+ msgstr "Text affiché lorsque le bouton est actif"
2827
 
2828
  #: includes/fields/class-acf-field-true_false.php:170
2829
  msgid "Off Text"
2831
 
2832
  #: includes/fields/class-acf-field-true_false.php:171
2833
  msgid "Text shown when inactive"
2834
+ msgstr "Texte affiché lorsque le bouton est désactivé"
2835
 
2836
  #: includes/fields/class-acf-field-url.php:25
2837
  msgid "Url"
2845
  msgid "User"
2846
  msgstr "Utilisateur"
2847
 
2848
+ #: includes/fields/class-acf-field-user.php:378
2849
  msgid "Filter by role"
2850
  msgstr "Filtrer par rôle"
2851
 
2852
+ #: includes/fields/class-acf-field-user.php:386
2853
  msgid "All user roles"
2854
  msgstr "Tous les rôles utilisateurs"
2855
 
2856
+ #: includes/fields/class-acf-field-user.php:417
2857
  msgid "User Array"
2858
+ msgstr "Tableau"
2859
 
2860
+ #: includes/fields/class-acf-field-user.php:418
2861
  msgid "User Object"
2862
+ msgstr "Objet"
2863
 
2864
+ #: includes/fields/class-acf-field-user.php:419
2865
  msgid "User ID"
2866
  msgstr "ID de l'utilisateur"
2867
 
2894
 
2895
  #: includes/fields/class-acf-field-wysiwyg.php:396
2896
  msgid "Visual Only"
2897
+ msgstr "Visuel seulement"
2898
 
2899
  # @ acf
2900
  #: includes/fields/class-acf-field-wysiwyg.php:397
2918
  #: includes/fields/class-acf-field-wysiwyg.php:430
2919
  msgid "TinyMCE will not be initalized until field is clicked"
2920
  msgstr ""
2921
+ "TinyMCE ne sera pas initialisé avant que l’utilisateur clique sur le champ"
2922
 
2923
  #: includes/forms/form-front.php:55
2924
  msgid "Validate Email"
2925
+ msgstr "Valider l’e-mail"
2926
 
2927
  # @ acf
2928
+ #: includes/forms/form-front.php:103 pro/fields/class-acf-field-gallery.php:531
2929
  #: pro/options-page.php:81
2930
  msgid "Update"
2931
  msgstr "Mise à jour"
2939
  msgid "Spam Detected"
2940
  msgstr "Spam repéré"
2941
 
2942
+ #: includes/forms/form-user.php:336
2943
+ #, php-format
2944
+ msgid "<strong>ERROR</strong>: %s"
2945
+ msgstr "<strong>ERREUR</strong> : %s"
2946
+
2947
  # @ acf
2948
  #: includes/locations.php:93 includes/locations/class-acf-location-post.php:27
2949
  msgid "Post"
2969
 
2970
  #: includes/locations/class-acf-location-attachment.php:27
2971
  msgid "Attachment"
2972
+ msgstr "Fichier attaché"
2973
 
2974
  #: includes/locations/class-acf-location-attachment.php:109
2975
  #, php-format
2978
 
2979
  #: includes/locations/class-acf-location-comment.php:27
2980
  msgid "Comment"
2981
+ msgstr "Commentaire"
2982
 
2983
  # @ acf
2984
  #: includes/locations/class-acf-location-current-user-role.php:27
2985
  msgid "Current User Role"
2986
+ msgstr "Rôle de l’utilisateur courant"
2987
 
2988
  #: includes/locations/class-acf-location-current-user-role.php:110
2989
  msgid "Super Admin"
2991
 
2992
  #: includes/locations/class-acf-location-current-user.php:27
2993
  msgid "Current User"
2994
+ msgstr "Utilisateur courant"
2995
 
2996
  #: includes/locations/class-acf-location-current-user.php:97
2997
  msgid "Logged in"
2999
 
3000
  #: includes/locations/class-acf-location-current-user.php:98
3001
  msgid "Viewing front end"
3002
+ msgstr "Est dans le site"
3003
 
3004
  #: includes/locations/class-acf-location-current-user.php:99
3005
  msgid "Viewing back end"
3006
+ msgstr "Est dans linterface dadministration"
3007
 
3008
  #: includes/locations/class-acf-location-nav-menu-item.php:27
3009
  msgid "Menu Item"
3032
  msgstr "Modèle de page"
3033
 
3034
  # @ acf
3035
+ #: includes/locations/class-acf-location-page-template.php:87
3036
+ #: includes/locations/class-acf-location-post-template.php:134
3037
  msgid "Default Template"
3038
  msgstr "Modèle de base"
3039
 
3044
 
3045
  #: includes/locations/class-acf-location-page-type.php:146
3046
  msgid "Front Page"
3047
+ msgstr "Page daccueil"
3048
 
3049
  #: includes/locations/class-acf-location-page-type.php:147
3050
  msgid "Posts Page"
3052
 
3053
  #: includes/locations/class-acf-location-page-type.php:148
3054
  msgid "Top Level Page (no parent)"
3055
+ msgstr "Page de haut niveau (sans parent)"
3056
 
3057
  #: includes/locations/class-acf-location-page-type.php:149
3058
  msgid "Parent Page (has children)"
3059
+ msgstr "Page parente (avec page(s) enfant)"
3060
 
3061
  #: includes/locations/class-acf-location-page-type.php:150
3062
  msgid "Child Page (has parent)"
3074
  # @ acf
3075
  #: includes/locations/class-acf-location-post-status.php:27
3076
  msgid "Post Status"
3077
+ msgstr "Statut de larticle"
3078
 
3079
  # @ acf
3080
  #: includes/locations/class-acf-location-post-taxonomy.php:27
3083
 
3084
  #: includes/locations/class-acf-location-post-template.php:27
3085
  msgid "Post Template"
3086
+ msgstr "Modèle darticle"
3087
 
3088
  # @ acf
3089
  #: includes/locations/class-acf-location-user-form.php:27
3119
  msgid "Advanced Custom Fields PRO"
3120
  msgstr "Advanced Custom Fields PRO"
3121
 
3122
+ #: pro/admin/admin-options-page.php:198
3123
  msgid "Publish"
3124
  msgstr "Publier"
3125
 
3126
  # @ default
3127
+ #: pro/admin/admin-options-page.php:204
3128
  #, php-format
3129
  msgid ""
3130
  "No Custom Field Groups found for this options page. <a href=\"%s\">Create a "
3131
  "Custom Field Group</a>"
3132
  msgstr ""
3133
+ "Aucun groupe de champs trouvé pour cette page d’options. <a href=\"%s"
3134
+ "\">Créer un groupe de champs</a>"
3135
 
3136
+ #: pro/admin/admin-updates.php:49
3137
  msgid "<b>Error</b>. Could not connect to update server"
3138
  msgstr "<b>Erreur</b>. Impossible de joindre le serveur"
3139
 
3140
  # @ acf
3141
+ #: pro/admin/admin-updates.php:118 pro/admin/views/html-settings-updates.php:13
 
3142
  msgid "Updates"
3143
+ msgstr "Mises-à-jour"
3144
 
3145
+ #: pro/admin/admin-updates.php:191
3146
  msgid ""
3147
  "<b>Error</b>. Could not authenticate update package. Please check again or "
3148
  "deactivate and reactivate your ACF PRO license."
3149
  msgstr ""
3150
+ "<b>Erreur</b>. Impossible d'authentifier la mise-à-jour. Merci d'essayer à "
3151
  "nouveau et si le problème persiste, désactivez et réactivez votre licence "
3152
  "ACF PRO."
3153
 
3172
  "licence key, please see <a href=\"%s\" target=\"_blank\">details & pricing</"
3173
  "a>."
3174
  msgstr ""
3175
+ "Pour débloquer les mises-à-jour, veuillez entrer votre clé de licence ci-"
3176
+ "dessous. Si vous n’en avez pas, rendez-vous sur nos <a href=\"%s\" target="
3177
+ "\"_blank\">détails & tarifs</a>."
3178
 
3179
  # @ acf
3180
  #: pro/admin/views/html-settings-updates.php:29
3184
  # @ acf
3185
  #: pro/admin/views/html-settings-updates.php:61
3186
  msgid "Update Information"
3187
+ msgstr "Informations concernant les mises-à-jour"
3188
 
3189
  #: pro/admin/views/html-settings-updates.php:68
3190
  msgid "Current Version"
3191
+ msgstr "Version installée"
3192
 
3193
  #: pro/admin/views/html-settings-updates.php:76
3194
  msgid "Latest Version"
3195
+ msgstr "Version disponible"
3196
 
3197
  # @ acf
3198
  #: pro/admin/views/html-settings-updates.php:84
3199
  msgid "Update Available"
3200
+ msgstr "Mise-à-jour disponible"
3201
 
3202
  # @ acf
3203
  #: pro/admin/views/html-settings-updates.php:92
3204
  msgid "Update Plugin"
3205
+ msgstr "Mettre-à-jour l’extension"
3206
 
3207
  #: pro/admin/views/html-settings-updates.php:94
3208
  msgid "Please enter your license key above to unlock updates"
3209
+ msgstr "Entrez votre clé de licence ci-dessus pour activer les mises-à-jour"
3210
 
3211
  #: pro/admin/views/html-settings-updates.php:100
3212
  msgid "Check Again"
3215
  # @ wp3i
3216
  #: pro/admin/views/html-settings-updates.php:117
3217
  msgid "Upgrade Notice"
3218
+ msgstr "Informations de mise-à-niveau"
3219
+
3220
+ #: pro/blocks.php:371
3221
+ msgid "Switch to Edit"
3222
+ msgstr "Passer en Édition"
3223
+
3224
+ #: pro/blocks.php:372
3225
+ msgid "Switch to Preview"
3226
+ msgstr "Passer en Prévisualisation"
3227
 
3228
  #: pro/fields/class-acf-field-clone.php:25
3229
  msgctxt "noun"
3256
  #: pro/fields/class-acf-field-clone.php:857
3257
  #, php-format
3258
  msgid "Labels will be displayed as %s"
3259
+ msgstr "Les labels seront affichés en tant que %s"
3260
 
3261
  #: pro/fields/class-acf-field-clone.php:860
3262
  msgid "Prefix Field Labels"
3263
+ msgstr "Préfixer les labels de champs"
3264
 
3265
  #: pro/fields/class-acf-field-clone.php:871
3266
  #, php-format
3287
  # @ acf
3288
  #: pro/fields/class-acf-field-flexible-content.php:31
3289
  #: pro/fields/class-acf-field-repeater.php:193
3290
+ #: pro/fields/class-acf-field-repeater.php:468
3291
  msgid "Add Row"
3292
  msgstr "Ajouter un élément"
3293
 
3294
  # @ acf
3295
  #: pro/fields/class-acf-field-flexible-content.php:73
3296
+ #: pro/fields/class-acf-field-flexible-content.php:924
3297
+ #: pro/fields/class-acf-field-flexible-content.php:1006
3298
  msgid "layout"
3299
  msgid_plural "layouts"
3300
+ msgstr[0] "mise-en-forme"
3301
+ msgstr[1] "mises-en-forme"
3302
 
3303
  # @ acf
3304
  #: pro/fields/class-acf-field-flexible-content.php:74
3305
  msgid "layouts"
3306
+ msgstr "mises-en-forme"
3307
 
3308
  #: pro/fields/class-acf-field-flexible-content.php:77
3309
+ #: pro/fields/class-acf-field-flexible-content.php:923
3310
+ #: pro/fields/class-acf-field-flexible-content.php:1005
3311
  msgid "This field requires at least {min} {label} {identifier}"
3312
  msgstr "Ce champ requiert au moins {min} {label} {identifier}"
3313
 
3321
 
3322
  #: pro/fields/class-acf-field-flexible-content.php:82
3323
  msgid "{required} {label} {identifier} required (min {min})"
3324
+ msgstr "{required} {label} {identifier} requis (min {min})"
3325
 
3326
  # @ acf
3327
  #: pro/fields/class-acf-field-flexible-content.php:85
3328
  msgid "Flexible Content requires at least 1 layout"
3329
+ msgstr "Le contenu flexible nécessite au moins une mise-en-forme"
3330
 
3331
+ #: pro/fields/class-acf-field-flexible-content.php:287
3332
  #, php-format
3333
  msgid "Click the \"%s\" button below to start creating your layout"
3334
  msgstr ""
3335
+ "Cliquez sur le bouton « %s » ci-dessous pour créer votre première mise-en-"
3336
+ "forme"
3337
 
3338
  # @ acf
3339
+ #: pro/fields/class-acf-field-flexible-content.php:413
3340
  msgid "Add layout"
3341
+ msgstr "Ajouter une mise-en-forme"
3342
 
3343
  # @ acf
3344
+ #: pro/fields/class-acf-field-flexible-content.php:414
3345
  msgid "Remove layout"
3346
+ msgstr "Retirer la mise-en-forme"
3347
 
3348
+ #: pro/fields/class-acf-field-flexible-content.php:415
3349
+ #: pro/fields/class-acf-field-repeater.php:301
3350
  msgid "Click to toggle"
3351
  msgstr "Cliquer pour intervertir"
3352
 
3353
  # @ acf
3354
+ #: pro/fields/class-acf-field-flexible-content.php:555
3355
  msgid "Reorder Layout"
3356
+ msgstr "Réorganiser la mise-en-forme"
3357
 
3358
+ #: pro/fields/class-acf-field-flexible-content.php:555
3359
  msgid "Reorder"
3360
  msgstr "Réorganiser"
3361
 
3362
  # @ acf
3363
+ #: pro/fields/class-acf-field-flexible-content.php:556
3364
  msgid "Delete Layout"
3365
+ msgstr "Supprimer la mise-en-forme"
3366
 
3367
+ #: pro/fields/class-acf-field-flexible-content.php:557
3368
  msgid "Duplicate Layout"
3369
+ msgstr "Dupliquer la mise-en-forme"
3370
 
3371
  # @ acf
3372
+ #: pro/fields/class-acf-field-flexible-content.php:558
3373
  msgid "Add New Layout"
3374
+ msgstr "Ajouter une nouvelle mise-en-forme"
3375
 
3376
+ #: pro/fields/class-acf-field-flexible-content.php:629
3377
  msgid "Min"
3378
  msgstr "Min"
3379
 
3380
+ #: pro/fields/class-acf-field-flexible-content.php:642
3381
  msgid "Max"
3382
  msgstr "Max"
3383
 
3384
+ #: pro/fields/class-acf-field-flexible-content.php:669
3385
+ #: pro/fields/class-acf-field-repeater.php:464
3386
  msgid "Button Label"
3387
  msgstr "Intitulé du bouton"
3388
 
3389
  # @ acf
3390
+ #: pro/fields/class-acf-field-flexible-content.php:678
3391
  msgid "Minimum Layouts"
3392
+ msgstr "Nombre minimum de mises-en-forme"
3393
 
3394
  # @ acf
3395
+ #: pro/fields/class-acf-field-flexible-content.php:687
3396
  msgid "Maximum Layouts"
3397
+ msgstr "Nombre maximum de mises-en-forme"
3398
 
3399
  # @ acf
3400
+ #: pro/fields/class-acf-field-gallery.php:73
3401
  msgid "Add Image to Gallery"
3402
  msgstr "Ajouter l'image à la galerie"
3403
 
3404
+ #: pro/fields/class-acf-field-gallery.php:74
3405
  msgid "Maximum selection reached"
3406
  msgstr "Nombre de sélections maximales atteint"
3407
 
3408
+ #: pro/fields/class-acf-field-gallery.php:340
3409
  msgid "Length"
3410
  msgstr "Longueur"
3411
 
3412
+ #: pro/fields/class-acf-field-gallery.php:383
3413
  msgid "Caption"
3414
  msgstr "Légende"
3415
 
3416
+ #: pro/fields/class-acf-field-gallery.php:392
3417
  msgid "Alt Text"
3418
  msgstr "Texte alternatif"
3419
 
3420
+ #: pro/fields/class-acf-field-gallery.php:508
3421
  msgid "Add to gallery"
3422
  msgstr "Ajouter à la galerie"
3423
 
3424
  # @ acf
3425
+ #: pro/fields/class-acf-field-gallery.php:512
3426
  msgid "Bulk actions"
3427
  msgstr "Actions de groupe"
3428
 
3429
+ #: pro/fields/class-acf-field-gallery.php:513
3430
  msgid "Sort by date uploaded"
3431
  msgstr "Ranger par date d'import"
3432
 
3433
+ #: pro/fields/class-acf-field-gallery.php:514
3434
  msgid "Sort by date modified"
3435
  msgstr "Ranger par date de modification"
3436
 
3437
  # @ acf
3438
+ #: pro/fields/class-acf-field-gallery.php:515
3439
  msgid "Sort by title"
3440
  msgstr "Ranger par titre"
3441
 
3442
+ #: pro/fields/class-acf-field-gallery.php:516
3443
  msgid "Reverse current order"
3444
  msgstr "Inverser l'ordre actuel"
3445
 
3446
  # @ acf
3447
+ #: pro/fields/class-acf-field-gallery.php:528
3448
  msgid "Close"
3449
+ msgstr "Fermer"
3450
 
3451
+ #: pro/fields/class-acf-field-gallery.php:601
 
 
 
 
 
 
 
 
 
 
3452
  msgid "Insert"
3453
  msgstr "Insérer"
3454
 
3455
+ #: pro/fields/class-acf-field-gallery.php:602
3456
  msgid "Specify where new attachments are added"
3457
+ msgstr "Définir les nouveaux fichiers attachés sont ajoutés"
3458
 
3459
+ #: pro/fields/class-acf-field-gallery.php:606
3460
  msgid "Append to the end"
3461
+ msgstr "Ajouter à la fin"
3462
 
3463
+ #: pro/fields/class-acf-field-gallery.php:607
3464
  msgid "Prepend to the beginning"
3465
  msgstr "Insérer au début"
3466
 
3467
+ # @ acf
3468
+ #: pro/fields/class-acf-field-gallery.php:626
3469
+ msgid "Minimum Selection"
3470
+ msgstr "Nombre minimum"
3471
+
3472
+ # @ acf
3473
+ #: pro/fields/class-acf-field-gallery.php:634
3474
+ msgid "Maximum Selection"
3475
+ msgstr "Nombre maximum"
3476
+
3477
  #: pro/fields/class-acf-field-repeater.php:65
3478
+ #: pro/fields/class-acf-field-repeater.php:661
3479
  msgid "Minimum rows reached ({min} rows)"
3480
  msgstr "Nombre minimal d'éléments atteint ({min} éléments)"
3481
 
3484
  msgstr "Nombre maximal d'éléments atteint ({max} éléments)"
3485
 
3486
  # @ acf
3487
+ #: pro/fields/class-acf-field-repeater.php:338
3488
  msgid "Add row"
3489
  msgstr "Ajouter un élément"
3490
 
3491
  # @ acf
3492
+ #: pro/fields/class-acf-field-repeater.php:339
3493
  msgid "Remove row"
3494
  msgstr "Retirer l'élément"
3495
 
3496
+ #: pro/fields/class-acf-field-repeater.php:417
3497
  msgid "Collapsed"
3498
+ msgstr "Replié"
3499
 
3500
+ #: pro/fields/class-acf-field-repeater.php:418
3501
  msgid "Select a sub field to show when row is collapsed"
3502
+ msgstr "Choisir un sous champ à afficher lorsque l’élément est replié"
3503
 
3504
  # @ acf
3505
+ #: pro/fields/class-acf-field-repeater.php:428
3506
  msgid "Minimum Rows"
3507
+ msgstr "Nombre minimal d'éléments"
3508
 
3509
  # @ acf
3510
+ #: pro/fields/class-acf-field-repeater.php:438
3511
  msgid "Maximum Rows"
3512
+ msgstr "Nombre maximal d'éléments"
3513
 
3514
  #: pro/locations/class-acf-location-options-page.php:79
3515
  msgid "No options pages exist"
3516
+ msgstr "Aucune page d'option n’existe"
3517
 
3518
  # @ acf
3519
  #: pro/options-page.php:51
3523
  # @ acf
3524
  #: pro/options-page.php:82
3525
  msgid "Options Updated"
3526
+ msgstr "Options mises à jours"
3527
 
3528
  #: pro/updates.php:97
3529
  #, php-format
3532
  "\">Updates</a> page. If you don't have a licence key, please see <a href=\"%s"
3533
  "\">details & pricing</a>."
3534
  msgstr ""
3535
+ "Pour activer les mises-à-jour, veuillez entrer votre clé de licence sur la "
3536
+ "page <a href=\"%s\">Mises-à-jour</a>. Si vous n’en avez pas, rendez-vous sur "
3537
+ "nos <a href=\"%s\">détails & tarifs</a>."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3538
 
3539
+ #: tests/basic/test-blocks.php:116
3540
+ msgid "My Test Block"
3541
+ msgstr "Mon bloc de test"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3542
 
3543
+ #: tests/basic/test-blocks.php:117
3544
+ msgid "A block for entering a link name and a custom URL."
3545
+ msgstr "Un bloc pour saisir un nom de lien et une URL."
 
3546
 
3547
  # @ acf
3548
+ #: tests/basic/test-blocks.php:125
3549
+ msgid "Normal"
3550
+ msgstr "Normal"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3551
 
3552
+ #: tests/basic/test-blocks.php:126
3553
+ msgid "Fancy"
3554
+ msgstr "Fantaisie"
3555
 
3556
+ #: tests/basic/test-blocks.php:135
3557
+ msgid "Block :: My Test Block"
3558
+ msgstr "Block :: Mon bloc de test"
3559
 
3560
+ #: tests/basic/test-blocks.php:155
3561
+ msgid "URL"
3562
+ msgstr "URL"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3563
 
3564
+ #. Plugin URI of the plugin/theme
3565
+ #. Author URI of the plugin/theme
3566
+ msgid "https://www.advancedcustomfields.com"
3567
+ msgstr "https://www.advancedcustomfields.com"
3568
 
3569
+ #. Author of the plugin/theme
3570
+ msgid "Elliot Condon"
3571
+ msgstr "Elliot Condon"
lang/acf-pl_PL.mo CHANGED
Binary file
lang/acf-pl_PL.po CHANGED
@@ -3,14 +3,14 @@ msgstr ""
3
  "Project-Id-Version: Advanced Custom Fields Pro v5.2.9\n"
4
  "Report-Msgid-Bugs-To: http://support.advancedcustomfields.com\n"
5
  "POT-Creation-Date: 2018-09-06 12:21+1000\n"
6
- "PO-Revision-Date: 2018-10-01 21:47+0200\n"
7
  "Last-Translator: Elliot Condon <e@elliotcondon.com>\n"
8
  "Language-Team: Dariusz Zielonka <dariusz@zielonka.pro>\n"
9
  "Language: pl_PL\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
- "X-Generator: Poedit 2.0.3\n"
14
  "X-Poedit-SourceCharset: UTF-8\n"
15
  "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
16
  "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
@@ -1459,7 +1459,8 @@ msgstr "Relacyjne"
1459
  msgid "jQuery"
1460
  msgstr "jQuery"
1461
 
1462
- #: includes/fields.php:354 includes/fields/class-acf-field-button-group.php:177
 
1463
  #: includes/fields/class-acf-field-checkbox.php:389
1464
  #: includes/fields/class-acf-field-group.php:474
1465
  #: includes/fields/class-acf-field-radio.php:290
@@ -2738,8 +2739,8 @@ msgstr "Edytuj grupę pól"
2738
  msgid "Validate Email"
2739
  msgstr "Waliduj E-mail"
2740
 
2741
- #: includes/forms/form-front.php:103 pro/fields/class-acf-field-gallery.php:588
2742
- #: pro/options-page.php:81
2743
  msgid "Update"
2744
  msgstr "Aktualizuj"
2745
 
@@ -3253,7 +3254,7 @@ msgstr "Minimalna liczba wierszy"
3253
 
3254
  #: pro/fields/class-acf-field-repeater.php:433
3255
  msgid "Maximum Rows"
3256
- msgstr "Minimalna liczba wierszy"
3257
 
3258
  #: pro/locations/class-acf-location-options-page.php:79
3259
  msgid "No options pages exist"
3
  "Project-Id-Version: Advanced Custom Fields Pro v5.2.9\n"
4
  "Report-Msgid-Bugs-To: http://support.advancedcustomfields.com\n"
5
  "POT-Creation-Date: 2018-09-06 12:21+1000\n"
6
+ "PO-Revision-Date: 2019-07-29 14:31+1000\n"
7
  "Last-Translator: Elliot Condon <e@elliotcondon.com>\n"
8
  "Language-Team: Dariusz Zielonka <dariusz@zielonka.pro>\n"
9
  "Language: pl_PL\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 1.8.1\n"
14
  "X-Poedit-SourceCharset: UTF-8\n"
15
  "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
16
  "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
1459
  msgid "jQuery"
1460
  msgstr "jQuery"
1461
 
1462
+ #: includes/fields.php:354
1463
+ #: includes/fields/class-acf-field-button-group.php:177
1464
  #: includes/fields/class-acf-field-checkbox.php:389
1465
  #: includes/fields/class-acf-field-group.php:474
1466
  #: includes/fields/class-acf-field-radio.php:290
2739
  msgid "Validate Email"
2740
  msgstr "Waliduj E-mail"
2741
 
2742
+ #: includes/forms/form-front.php:103
2743
+ #: pro/fields/class-acf-field-gallery.php:588 pro/options-page.php:81
2744
  msgid "Update"
2745
  msgstr "Aktualizuj"
2746
 
3254
 
3255
  #: pro/fields/class-acf-field-repeater.php:433
3256
  msgid "Maximum Rows"
3257
+ msgstr "Maksymalna liczba wierszy"
3258
 
3259
  #: pro/locations/class-acf-location-options-page.php:79
3260
  msgid "No options pages exist"
readme.txt CHANGED
@@ -67,6 +67,17 @@ From your WordPress dashboard
67
 
68
  == Changelog ==
69
 
 
 
 
 
 
 
 
 
 
 
 
70
  = 5.8.2 =
71
  *Release Date - 15 July 2019*
72
 
67
 
68
  == Changelog ==
69
 
70
+ = 5.8.3 =
71
+ *Release Date - 7 August 2019*
72
+
73
+ * Tweak - Changed Options Page location rules to show "page_title" instead of "menu_title".
74
+ * Fix - Fixed bug causing Textarea field to incorrectly validate maxlength.
75
+ * Fix - Fixed bug allowing Range field values outside of the min and max settings.
76
+ * Fix - Fixed bug in block RegExp causing some blocks to miss the "acf/pre_save_block" filter.
77
+ * Dev - Added `$block_type` parameter to block settings "enqueue_assets" callback.
78
+ * i18n - Added French Canadian language thanks to Bérenger Zyla.
79
+ * i18n - Updated French language thanks to Bérenger Zyla.
80
+
81
  = 5.8.2 =
82
  *Release Date - 15 July 2019*
83