WordPress Page Builder – Beaver Builder - Version 1.9.1

Version Description

Download this release

Release Info

Developer justinbusa
Plugin Icon 128x128 WordPress Page Builder – Beaver Builder
Version 1.9.1
Comparing to
See all releases

Code changes from version 1.8.8 to 1.9.1

Files changed (83) hide show
  1. changelog.txt +48 -0
  2. classes/class-fl-builder-ajax-layout.php +12 -7
  3. classes/class-fl-builder-ajax.php +3 -1
  4. classes/class-fl-builder-fonts.php +3073 -2671
  5. classes/class-fl-builder-icons.php +67 -63
  6. classes/class-fl-builder-loader.php +1 -1
  7. classes/class-fl-builder-model.php +552 -81
  8. classes/class-fl-builder.php +297 -166
  9. css/fl-builder-layout-auto-spacing.css +16 -16
  10. css/fl-builder-layout.css +5 -3
  11. css/fl-builder-rtl.css +1 -1
  12. css/fl-builder.css +475 -135
  13. css/fl-builder.min.css +1 -1
  14. css/fl-color-picker.css +87 -1
  15. css/fl-lightbox.css +4 -0
  16. fl-builder.php +1 -1
  17. includes/admin-settings-welcome.php +8 -8
  18. includes/column-css.php +2 -5
  19. includes/column-settings.php +149 -149
  20. includes/field-color.php +1 -1
  21. includes/field-text.php +1 -1
  22. includes/field-unit.php +6 -0
  23. includes/field.php +64 -34
  24. includes/global-settings.php +10 -10
  25. includes/module-settings.php +54 -42
  26. includes/row-css.php +2 -5
  27. includes/row-settings.php +161 -120
  28. includes/settings.php +4 -0
  29. includes/ui-fields.php +2 -0
  30. includes/ui-js-config.php +3 -0
  31. includes/ui-js-templates.php +55 -21
  32. includes/ui-panel.php +2 -2
  33. includes/updater-config.php +1 -1
  34. js/fl-builder-ajax-layout.js +5 -3
  35. js/fl-builder-forced-media-queries.js +492 -0
  36. js/fl-builder-layout.js +43 -2
  37. js/fl-builder-preview.js +322 -278
  38. js/fl-builder-responsive-editing.js +549 -0
  39. js/fl-builder.js +1338 -382
  40. js/fl-builder.min.js +6 -5
  41. js/fl-color-picker.js +199 -9
  42. js/fl-lightbox.js +1 -0
  43. js/fl-stylesheet.js +49 -13
  44. languages/af.mo +0 -0
  45. languages/ar.mo +0 -0
  46. languages/cs_CZ.mo +0 -0
  47. languages/da_DK.mo +0 -0
  48. languages/de_DE.mo +0 -0
  49. languages/el.mo +0 -0
  50. languages/es_ES.mo +0 -0
  51. languages/es_MX.mo +0 -0
  52. languages/fa_IR.mo +0 -0
  53. languages/fi.mo +0 -0
  54. languages/fr_CA.mo +0 -0
  55. languages/fr_FR.mo +0 -0
  56. languages/he_IL.mo +0 -0
  57. languages/hi.mo +0 -0
  58. languages/hr.mo +0 -0
  59. languages/hu_HU.mo +0 -0
  60. languages/id_ID.mo +0 -0
  61. languages/it_IT.mo +0 -0
  62. languages/ja.mo +0 -0
  63. languages/ko_KR.mo +0 -0
  64. languages/mr.mo +0 -0
  65. languages/ms_MY.mo +0 -0
  66. languages/nb.mo +0 -0
  67. languages/nl_NL.mo +0 -0
  68. languages/no_NO.mo +0 -0
  69. languages/pl_PL.mo +0 -0
  70. languages/pt_BR.mo +0 -0
  71. languages/pt_PT.mo +0 -0
  72. languages/ru_RU.mo +0 -0
  73. languages/sk_SK.mo +0 -0
  74. languages/sl_SL.mo +0 -0
  75. languages/sv_SE.mo +0 -0
  76. languages/th.mo +0 -0
  77. languages/tl.mo +0 -0
  78. languages/tr_TR.mo +0 -0
  79. languages/uk.mo +0 -0
  80. languages/vi.mo +0 -0
  81. languages/zh_CN.mo +0 -0
  82. languages/zh_TW.mo +0 -0
  83. readme.txt +1 -1
changelog.txt CHANGED
@@ -1,3 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <h4>1.8.8 - 11/08/2016</h4>
2
  <p><strong>Enhancements</strong></p>
3
  <ul>
1
+ <h4>1.9.1 - 12/12/2016</h4>
2
+ <p><strong>Enhancements</strong></p>
3
+ <ul>
4
+ <li>Updated Google fonts.</li>
5
+ <li>Updated translations.</li>
6
+ </ul>
7
+ <p><strong>Bug Fixes</strong></p>
8
+ <ul>
9
+ <li>Fixed rows and modules not appearing when first added to the page.</li>
10
+ <li>Fixed column settings dropdown disappearing when the column has a background overlay color.</li>
11
+ <li>Fixed the button module lightbox opening all lightboxes on the page.</li>
12
+ <li>Fixed multiple RTL language CSS issues.</li>
13
+ <li>Fixed row and column text colors affecting select inputs.</li>
14
+ <li>Fixed CSS conflicts with third party themes and the builder UI.</li>
15
+ <li>Fixed parallax backgrounds being applied to child rows when inserting layouts via a shortcode.</li>
16
+ </ul>
17
+
18
+ <h4>1.9 - 12/06/2016</h4>
19
+ <p>This update adds a number of new features. Be sure to check out <a href="https://www.wpbeaverbuilder.com/beaver-builder-1-9-shasta/">the blog post</a> for detailed info on what was added.</p>
20
+ <p><strong>Enhancements</strong></p>
21
+ <ul>
22
+ <li>Added the ability to drop columns into columns.</li>
23
+ <li>Added the ability to drag and drop existing columns.</li>
24
+ <li>Made multiple improvements for more accurate dragging and dropping.</li>
25
+ <li>Added responsive settings for margins, padding and borders.</li>
26
+ <li>Added new content page templates.</li>
27
+ <li>Template images are now loaded via HTTPS.</li>
28
+ <li>Added the ability to open a lightbox via a button.</li>
29
+ <li>Added the ability to add an alpha slider to color fields.</li>
30
+ </ul>
31
+ <p><strong>Bug Fixes</strong></p>
32
+ <ul>
33
+ <li>Fixed responsive spacing not working when defaults are zeroed out in the global settings.</li>
34
+ <li>Fixed format select not showing in text editor fields.</li>
35
+ <li>Fixed incorrect color picker width in third party themes.</li>
36
+ <li>Fixed incorrect column group positions when dropping an existing module into a row.</li>
37
+ <li>Fixed multiple issues with responsive margins/padding not working.</li>
38
+ <li>Fixed a fatal error caused by modules that are no longer registered.</li>
39
+ <li>Fixed broken modules that have nested forms such as the Accordion module.</li>
40
+ <li>Fixed live preview issues for nested columns when editing the parent column.</li>
41
+ <li>Fixed issues with live preview not working correctly for responsive fields.</li>
42
+ <li>Fixed issues with global responsive margins and padding not working.</li>
43
+ <li>Fixed issues with equal height columns and nested columns.</li>
44
+ <li>Fixed Button module lightbox close button jump when placing the mouse over it.</li>
45
+ <li>Fixed Button module lightbox close button positioning.</li>
46
+ <li>Fixed drag and drop placeholder animation lag.</li>
47
+ </ul>
48
+
49
  <h4>1.8.8 - 11/08/2016</h4>
50
  <p><strong>Enhancements</strong></p>
51
  <ul>
classes/class-fl-builder-ajax-layout.php CHANGED
@@ -155,20 +155,22 @@ final class FLBuilderAJAXLayout {
155
  }
156
 
157
  /**
158
- * Renders the layout data for a new column.
159
  *
160
  * @since 1.7
161
  * @param string $node_id Node ID of the column to insert before or after.
162
  * @param string $insert Either before or after.
 
 
163
  * @return array
164
  */
165
- static public function render_new_column( $node_id, $insert )
166
  {
167
- // Add the column.
168
- $col = FLBuilderModel::add_col( $node_id, $insert );
169
 
170
  // Return the response.
171
- return self::render( $col->parent );
172
  }
173
 
174
  /**
@@ -215,8 +217,11 @@ final class FLBuilderAJAXLayout {
215
  $render_id = $row->node;
216
  }
217
  else if ( $parent->type == 'row' ) {
218
- $col = FLBuilderModel::get_module_parent( 'column-group', $module );
219
- $render_id = $col->node;
 
 
 
220
  }
221
  else {
222
  $render_id = $module->node;
155
  }
156
 
157
  /**
158
+ * Renders the layout data for a new column or columns.
159
  *
160
  * @since 1.7
161
  * @param string $node_id Node ID of the column to insert before or after.
162
  * @param string $insert Either before or after.
163
+ * @param string $type The type of column(s) to insert.
164
+ * @param boolean $nested Whether these columns are nested or not.
165
  * @return array
166
  */
167
+ static public function render_new_columns( $node_id, $insert, $type, $nested )
168
  {
169
+ // Add the column(s).
170
+ $group = FLBuilderModel::add_cols( $node_id, $insert, $type, $nested );
171
 
172
  // Return the response.
173
+ return self::render( $group->node );
174
  }
175
 
176
  /**
217
  $render_id = $row->node;
218
  }
219
  else if ( $parent->type == 'row' ) {
220
+ $group = FLBuilderModel::get_module_parent( 'column-group', $module );
221
+ $render_id = $group->node;
222
+ }
223
+ else if ( $parent->type == 'column-group' ) {
224
+ $render_id = $parent->node;
225
  }
226
  else {
227
  $render_id = $module->node;
classes/class-fl-builder-ajax.php CHANGED
@@ -99,7 +99,9 @@ final class FLBuilderAJAX {
99
  self::add_action( 'delete_node', 'FLBuilderModel::delete_node', array( 'node_id' ) );
100
  self::add_action( 'delete_col', 'FLBuilderModel::delete_col', array( 'node_id', 'new_width' ) );
101
  self::add_action( 'reorder_node', 'FLBuilderModel::reorder_node', array( 'node_id', 'position' ) );
 
102
  self::add_action( 'move_node', 'FLBuilderModel::move_node', array( 'node_id', 'new_parent', 'position' ) );
 
103
  self::add_action( 'resize_cols', 'FLBuilderModel::resize_cols', array( 'col_id', 'col_width', 'sibling_id', 'sibling_width' ) );
104
  self::add_action( 'reset_col_widths', 'FLBuilderModel::reset_col_widths', array( 'group_id' ) );
105
  self::add_action( 'save_settings', 'FLBuilderModel::save_settings', array( 'node_id', 'settings' ) );
@@ -120,7 +122,7 @@ final class FLBuilderAJAX {
120
  self::add_action( 'render_new_row', 'FLBuilderAJAXLayout::render_new_row', array( 'cols', 'position', 'template_id', 'template_type' ) );
121
  self::add_action( 'copy_row', 'FLBuilderAJAXLayout::copy_row', array( 'node_id' ) );
122
  self::add_action( 'render_new_column_group', 'FLBuilderAJAXLayout::render_new_column_group', array( 'node_id', 'cols', 'position' ) );
123
- self::add_action( 'render_new_column', 'FLBuilderAJAXLayout::render_new_column', array( 'node_id', 'insert' ) );
124
  self::add_action( 'render_new_module', 'FLBuilderAJAXLayout::render_new_module', array( 'parent_id', 'position', 'type', 'template_id', 'template_type' ) );
125
  self::add_action( 'copy_module', 'FLBuilderAJAXLayout::copy_module', array( 'node_id' ) );
126
 
99
  self::add_action( 'delete_node', 'FLBuilderModel::delete_node', array( 'node_id' ) );
100
  self::add_action( 'delete_col', 'FLBuilderModel::delete_col', array( 'node_id', 'new_width' ) );
101
  self::add_action( 'reorder_node', 'FLBuilderModel::reorder_node', array( 'node_id', 'position' ) );
102
+ self::add_action( 'reorder_col', 'FLBuilderModel::reorder_col', array( 'node_id', 'position' ) );
103
  self::add_action( 'move_node', 'FLBuilderModel::move_node', array( 'node_id', 'new_parent', 'position' ) );
104
+ self::add_action( 'move_col', 'FLBuilderModel::move_col', array( 'node_id', 'new_parent', 'position', 'resize' ) );
105
  self::add_action( 'resize_cols', 'FLBuilderModel::resize_cols', array( 'col_id', 'col_width', 'sibling_id', 'sibling_width' ) );
106
  self::add_action( 'reset_col_widths', 'FLBuilderModel::reset_col_widths', array( 'group_id' ) );
107
  self::add_action( 'save_settings', 'FLBuilderModel::save_settings', array( 'node_id', 'settings' ) );
122
  self::add_action( 'render_new_row', 'FLBuilderAJAXLayout::render_new_row', array( 'cols', 'position', 'template_id', 'template_type' ) );
123
  self::add_action( 'copy_row', 'FLBuilderAJAXLayout::copy_row', array( 'node_id' ) );
124
  self::add_action( 'render_new_column_group', 'FLBuilderAJAXLayout::render_new_column_group', array( 'node_id', 'cols', 'position' ) );
125
+ self::add_action( 'render_new_columns', 'FLBuilderAJAXLayout::render_new_columns', array( 'node_id', 'insert', 'type', 'nested' ) );
126
  self::add_action( 'render_new_module', 'FLBuilderAJAXLayout::render_new_module', array( 'parent_id', 'position', 'type', 'template_id', 'template_type' ) );
127
  self::add_action( 'copy_module', 'FLBuilderAJAXLayout::copy_module', array( 'node_id' ) );
128
 
classes/class-fl-builder-fonts.php CHANGED
@@ -22,10 +22,10 @@ final class FLBuilderFonts {
22
  */
23
  static public function js()
24
  {
25
- $default = json_encode(FLBuilderFontFamilies::$default);
26
- $system = json_encode(FLBuilderFontFamilies::$system);
27
- $google = json_encode(FLBuilderFontFamilies::$google);
28
-
29
  echo 'var FLBuilderFontFamilies = { default: '. $default .', system: '. $system .', google: '. $google .' };';
30
  }
31
 
@@ -38,16 +38,19 @@ final class FLBuilderFonts {
38
  */
39
  static public function display_select_font($font)
40
  {
 
 
 
41
  echo '<option value="Default" '. selected('Default', $font) .'>'. __( 'Default', 'fl-builder' ) .'</option>';
42
  echo '<optgroup label="System">';
43
-
44
- foreach(FLBuilderFontFamilies::$system as $name => $variants) {
45
  echo '<option value="'. $name .'" '. selected($name, $font) .'>'. $name .'</option>';
46
  }
47
-
48
  echo '<optgroup label="Google">';
49
-
50
- foreach(FLBuilderFontFamilies::$google as $name => $variants) {
51
  echo '<option value="'. $name .'" '. selected($name, $font) .'>'. $name .'</option>';
52
  }
53
  }
@@ -61,27 +64,28 @@ final class FLBuilderFonts {
61
  * @return void
62
  */
63
  static public function display_select_weight( $font, $weight )
64
- {
65
  if( $font == 'Default' ){
66
- echo '<option value="default">'. __( 'Default', 'fl-builder' ) .'</option>';
67
  } else {
 
 
68
 
69
- if( array_key_exists( $font, FLBuilderFontFamilies::$system ) ){
70
-
71
- foreach( FLBuilderFontFamilies::$system[ $font ]['weights'] as $variant ) {
72
  echo '<option value="'. $variant .'" '. selected($variant, $weight) .'>'. FLBuilderFonts::get_weight_string( $variant ) .'</option>';
73
  }
74
 
75
  } else {
76
- foreach(FLBuilderFontFamilies::$google[ $font ] as $variant) {
77
 
78
  echo '<option value="'. $variant .'" '. selected($variant, $weight) .'>'. FLBuilderFonts::get_weight_string( $variant ) .'</option>';
79
  }
80
 
81
  }
82
-
83
  }
84
-
85
  }
86
 
87
  /**
@@ -106,7 +110,7 @@ final class FLBuilderFonts {
106
  '800' => 'Extra-Bold 800',
107
  '900' => 'Ultra-Bold 900'
108
  );
109
-
110
  return $weight_string[ $weight ];
111
  }
112
 
@@ -119,15 +123,17 @@ final class FLBuilderFonts {
119
  */
120
  static public function font_css( $font ){
121
 
 
 
122
  $css = '';
123
 
124
- if( array_key_exists( $font['family'], FLBuilderFontFamilies::$system ) ){
125
-
126
- $css .= 'font-family: '. $font['family'] .','. FLBuilderFontFamilies::$system[ $font['family'] ]['fallback'] .';';
127
 
128
  } else {
129
  $css .= 'font-family: '. $font['family'] .';';
130
- }
131
 
132
  if ( 'regular' == $font['weight'] ) {
133
  $css .= 'font-weight: normal;';
@@ -173,7 +179,7 @@ final class FLBuilderFonts {
173
  static private function add_fonts_for_nested_module_form( $module, $form, $setting )
174
  {
175
  $fields = FLBuilderModel::get_settings_form_fields( $form );
176
-
177
  foreach ( $fields as $name => $field ) {
178
  if ( $field['type'] == 'font' && isset( $module->settings->$setting ) ) {
179
  foreach ( $module->settings->$setting as $key => $val ) {
@@ -205,11 +211,11 @@ final class FLBuilderFonts {
205
  }
206
 
207
  $google_url = substr( $google_url, 0, -1 );
208
-
209
  wp_enqueue_style( 'fl-builder-google-fonts-' . md5( $google_url ), $google_url, array() );
210
-
211
  self::$fonts = array();
212
- }
213
  }
214
 
215
  /**
@@ -223,8 +229,10 @@ final class FLBuilderFonts {
223
 
224
  if( $font['family'] != 'Default' ){
225
 
 
 
226
  // check if is a Google Font
227
- if( !array_key_exists( $font['family'], FLBuilderFontFamilies::$system ) ){
228
 
229
  // check if font family is already added
230
  if( array_key_exists( $font['family'], self::$fonts ) ){
@@ -314,7 +322,7 @@ final class FLBuilderFontFamilies {
314
  )
315
  ),
316
  );
317
-
318
  /**
319
  * Array with Google Fonts.
320
  * @var array
@@ -323,2648 +331,3042 @@ final class FLBuilderFontFamilies {
323
  "ABeeZee" => array(
324
  "regular",
325
  ),
326
- "Abel" => array(
327
- "regular",
328
- ),
329
- "Abril Fatface" => array(
330
- "regular",
331
- ),
332
- "Aclonica" => array(
333
- "regular",
334
- ),
335
- "Acme" => array(
336
- "regular",
337
- ),
338
- "Actor" => array(
339
- "regular",
340
- ),
341
- "Adamina" => array(
342
- "regular",
343
- ),
344
- "Advent Pro" => array(
345
- "100",
346
- "200",
347
- "300",
348
- "regular",
349
- "500",
350
- "600",
351
- "700",
352
- ),
353
- "Aguafina Script" => array(
354
- "regular",
355
- ),
356
- "Akronim" => array(
357
- "regular",
358
- ),
359
- "Aladin" => array(
360
- "regular",
361
- ),
362
- "Aldrich" => array(
363
- "regular",
364
- ),
365
- "Alef" => array(
366
- "regular",
367
- "700",
368
- ),
369
- "Alegreya" => array(
370
- "regular",
371
- "700",
372
- "900",
373
- ),
374
- "Alegreya SC" => array(
375
- "regular",
376
- "700",
377
- "900",
378
- ),
379
- "Alegreya Sans" => array(
380
- "100",
381
- "300",
382
- "regular",
383
- "500",
384
- "700",
385
- "800",
386
- "900",
387
- ),
388
- "Alegreya Sans SC" => array(
389
- "100",
390
- "300",
391
- "regular",
392
- "500",
393
- "700",
394
- "800",
395
- "900",
396
- ),
397
- "Alex Brush" => array(
398
- "regular",
399
- ),
400
- "Alfa Slab One" => array(
401
- "regular",
402
- ),
403
- "Alice" => array(
404
- "regular",
405
- ),
406
- "Alike" => array(
407
- "regular",
408
- ),
409
- "Alike Angular" => array(
410
- "regular",
411
- ),
412
- "Allan" => array(
413
- "regular",
414
- "700",
415
- ),
416
- "Allerta" => array(
417
- "regular",
418
- ),
419
- "Allerta Stencil" => array(
420
- "regular",
421
- ),
422
- "Allura" => array(
423
- "regular",
424
- ),
425
- "Almendra" => array(
426
- "regular",
427
- "700",
428
- ),
429
- "Almendra Display" => array(
430
- "regular",
431
- ),
432
- "Almendra SC" => array(
433
- "regular",
434
- ),
435
- "Amarante" => array(
436
- "regular",
437
- ),
438
- "Amaranth" => array(
439
- "regular",
440
- "700",
441
- ),
442
- "Amatic SC" => array(
443
- "regular",
444
- "700",
445
- ),
446
- "Amethysta" => array(
447
- "regular",
448
- ),
449
- "Amiri" => array(
450
- "regular",
451
- "700",
452
- ),
453
- "Amita" => array(
454
- "regular",
455
- "700",
456
- ),
457
- "Anaheim" => array(
458
- "regular",
459
- ),
460
- "Andada" => array(
461
- "regular",
462
- ),
463
- "Andika" => array(
464
- "regular",
465
- ),
466
- "Angkor" => array(
467
- "regular",
468
- ),
469
- "Annie Use Your Telescope" => array(
470
- "regular",
471
- ),
472
- "Anonymous Pro" => array(
473
- "regular",
474
- "700",
475
- ),
476
- "Antic" => array(
477
- "regular",
478
- ),
479
- "Antic Didone" => array(
480
- "regular",
481
- ),
482
- "Antic Slab" => array(
483
- "regular",
484
- ),
485
- "Anton" => array(
486
- "regular",
487
- ),
488
- "Arapey" => array(
489
- "regular",
490
- ),
491
- "Arbutus" => array(
492
- "regular",
493
- ),
494
- "Arbutus Slab" => array(
495
- "regular",
496
- ),
497
- "Architects Daughter" => array(
498
- "regular",
499
- ),
500
- "Archivo Black" => array(
501
- "regular",
502
- ),
503
- "Archivo Narrow" => array(
504
- "regular",
505
- "700",
506
- ),
507
- "Arimo" => array(
508
- "regular",
509
- "700",
510
- ),
511
- "Arizonia" => array(
512
- "regular",
513
- ),
514
- "Armata" => array(
515
- "regular",
516
- ),
517
- "Artifika" => array(
518
- "regular",
519
- ),
520
- "Arvo" => array(
521
- "regular",
522
- "700",
523
- ),
524
- "Arya" => array(
525
- "regular",
526
- "700",
527
- ),
528
- "Asap" => array(
529
- "regular",
530
- "700",
531
- ),
532
- "Asar" => array(
533
- "regular",
534
- ),
535
- "Asset" => array(
536
- "regular",
537
- ),
538
- "Astloch" => array(
539
- "regular",
540
- "700",
541
- ),
542
- "Asul" => array(
543
- "regular",
544
- "700",
545
- ),
546
- "Atomic Age" => array(
547
- "regular",
548
- ),
549
- "Aubrey" => array(
550
- "regular",
551
- ),
552
- "Audiowide" => array(
553
- "regular",
554
- ),
555
- "Autour One" => array(
556
- "regular",
557
- ),
558
- "Average" => array(
559
- "regular",
560
- ),
561
- "Average Sans" => array(
562
- "regular",
563
- ),
564
- "Averia Gruesa Libre" => array(
565
- "regular",
566
- ),
567
- "Averia Libre" => array(
568
- "300",
569
- "regular",
570
- "700",
571
- ),
572
- "Averia Sans Libre" => array(
573
- "300",
574
- "regular",
575
- "700",
576
- ),
577
- "Averia Serif Libre" => array(
578
- "300",
579
- "regular",
580
- "700",
581
- ),
582
- "Bad Script" => array(
583
- "regular",
584
- ),
585
- "Balthazar" => array(
586
- "regular",
587
- ),
588
- "Bangers" => array(
589
- "regular",
590
- ),
591
- "Basic" => array(
592
- "regular",
593
- ),
594
- "Battambang" => array(
595
- "regular",
596
- "700",
597
- ),
598
- "Baumans" => array(
599
- "regular",
600
- ),
601
- "Bayon" => array(
602
- "regular",
603
- ),
604
- "Belgrano" => array(
605
- "regular",
606
- ),
607
- "Belleza" => array(
608
- "regular",
609
- ),
610
- "BenchNine" => array(
611
- "300",
612
- "regular",
613
- "700",
614
- ),
615
- "Bentham" => array(
616
- "regular",
617
- ),
618
- "Berkshire Swash" => array(
619
- "regular",
620
- ),
621
- "Bevan" => array(
622
- "regular",
623
- ),
624
- "Bigelow Rules" => array(
625
- "regular",
626
- ),
627
- "Bigshot One" => array(
628
- "regular",
629
- ),
630
- "Bilbo" => array(
631
- "regular",
632
- ),
633
- "Bilbo Swash Caps" => array(
634
- "regular",
635
- ),
636
- "Biryani" => array(
637
- "200",
638
- "300",
639
- "regular",
640
- "600",
641
- "700",
642
- "800",
643
- "900",
644
- ),
645
- "Bitter" => array(
646
- "regular",
647
- "700",
648
- ),
649
- "Black Ops One" => array(
650
- "regular",
651
- ),
652
- "Bokor" => array(
653
- "regular",
654
- ),
655
- "Bonbon" => array(
656
- "regular",
657
- ),
658
- "Boogaloo" => array(
659
- "regular",
660
- ),
661
- "Bowlby One" => array(
662
- "regular",
663
- ),
664
- "Bowlby One SC" => array(
665
- "regular",
666
- ),
667
- "Brawler" => array(
668
- "regular",
669
- ),
670
- "Bree Serif" => array(
671
- "regular",
672
- ),
673
- "Bubblegum Sans" => array(
674
- "regular",
675
- ),
676
- "Bubbler One" => array(
677
- "regular",
678
- ),
679
- "Buda" => array(
680
- "300",
681
- ),
682
- "Buenard" => array(
683
- "regular",
684
- "700",
685
- ),
686
- "Butcherman" => array(
687
- "regular",
688
- ),
689
- "Butterfly Kids" => array(
690
- "regular",
691
- ),
692
- "Cabin" => array(
693
- "regular",
694
- "500",
695
- "600",
696
- "700",
697
- ),
698
- "Cabin Condensed" => array(
699
- "regular",
700
- "500",
701
- "600",
702
- "700",
703
- ),
704
- "Cabin Sketch" => array(
705
- "regular",
706
- "700",
707
- ),
708
- "Caesar Dressing" => array(
709
- "regular",
710
- ),
711
- "Cagliostro" => array(
712
- "regular",
713
- ),
714
- "Calligraffitti" => array(
715
- "regular",
716
- ),
717
- "Cambay" => array(
718
- "regular",
719
- "700",
720
- ),
721
- "Cambo" => array(
722
- "regular",
723
- ),
724
- "Candal" => array(
725
- "regular",
726
- ),
727
- "Cantarell" => array(
728
- "regular",
729
- "700",
730
- ),
731
- "Cantata One" => array(
732
- "regular",
733
- ),
734
- "Cantora One" => array(
735
- "regular",
736
- ),
737
- "Capriola" => array(
738
- "regular",
739
- ),
740
- "Cardo" => array(
741
- "regular",
742
- "700",
743
- ),
744
- "Carme" => array(
745
- "regular",
746
- ),
747
- "Carrois Gothic" => array(
748
- "regular",
749
- ),
750
- "Carrois Gothic SC" => array(
751
- "regular",
752
- ),
753
- "Carter One" => array(
754
- "regular",
755
- ),
756
- "Catamaran" => array(
757
- "100",
758
- "200",
759
- "300",
760
- "regular",
761
- "500",
762
- "600",
763
- "700",
764
- "800",
765
- "900",
766
- ),
767
- "Caudex" => array(
768
- "regular",
769
- "700",
770
- ),
771
- "Caveat" => array(
772
- "regular",
773
- "700",
774
- ),
775
- "Caveat Brush" => array(
776
- "regular",
777
- ),
778
- "Cedarville Cursive" => array(
779
- "regular",
780
- ),
781
- "Ceviche One" => array(
782
- "regular",
783
- ),
784
- "Changa One" => array(
785
- "regular",
786
- ),
787
- "Chango" => array(
788
- "regular",
789
- ),
790
- "Chau Philomene One" => array(
791
- "regular",
792
- ),
793
- "Chela One" => array(
794
- "regular",
795
- ),
796
- "Chelsea Market" => array(
797
- "regular",
798
- ),
799
- "Chenla" => array(
800
- "regular",
801
- ),
802
- "Cherry Cream Soda" => array(
803
- "regular",
804
- ),
805
- "Cherry Swash" => array(
806
- "regular",
807
- "700",
808
- ),
809
- "Chewy" => array(
810
- "regular",
811
- ),
812
- "Chicle" => array(
813
- "regular",
814
- ),
815
- "Chivo" => array(
816
- "regular",
817
- "900",
818
- ),
819
- "Chonburi" => array(
820
- "regular",
821
- ),
822
- "Cinzel" => array(
823
- "regular",
824
- "700",
825
- "900",
826
- ),
827
- "Cinzel Decorative" => array(
828
- "regular",
829
- "700",
830
- "900",
831
- ),
832
- "Clicker Script" => array(
833
- "regular",
834
- ),
835
- "Coda" => array(
836
- "regular",
837
- "800",
838
- ),
839
- "Coda Caption" => array(
840
- "800",
841
- ),
842
- "Codystar" => array(
843
- "300",
844
- "regular",
845
- ),
846
- "Combo" => array(
847
- "regular",
848
- ),
849
- "Comfortaa" => array(
850
- "300",
851
- "regular",
852
- "700",
853
- ),
854
- "Coming Soon" => array(
855
- "regular",
856
- ),
857
- "Concert One" => array(
858
- "regular",
859
- ),
860
- "Condiment" => array(
861
- "regular",
862
- ),
863
- "Content" => array(
864
- "regular",
865
- "700",
866
- ),
867
- "Contrail One" => array(
868
- "regular",
869
- ),
870
- "Convergence" => array(
871
- "regular",
872
- ),
873
- "Cookie" => array(
874
- "regular",
875
- ),
876
- "Copse" => array(
877
- "regular",
878
- ),
879
- "Corben" => array(
880
- "regular",
881
- "700",
882
- ),
883
- "Courgette" => array(
884
- "regular",
885
- ),
886
- "Cousine" => array(
887
- "regular",
888
- "700",
889
- ),
890
- "Coustard" => array(
891
- "regular",
892
- "900",
893
- ),
894
- "Covered By Your Grace" => array(
895
- "regular",
896
- ),
897
- "Crafty Girls" => array(
898
- "regular",
899
- ),
900
- "Creepster" => array(
901
- "regular",
902
- ),
903
- "Crete Round" => array(
904
- "regular",
905
- ),
906
- "Crimson Text" => array(
907
- "regular",
908
- "600",
909
- "700",
910
- ),
911
- "Croissant One" => array(
912
- "regular",
913
- ),
914
- "Crushed" => array(
915
- "regular",
916
- ),
917
- "Cuprum" => array(
918
- "regular",
919
- "700",
920
- ),
921
- "Cutive" => array(
922
- "regular",
923
- ),
924
- "Cutive Mono" => array(
925
- "regular",
926
- ),
927
- "Damion" => array(
928
- "regular",
929
- ),
930
- "Dancing Script" => array(
931
- "regular",
932
- "700",
933
- ),
934
- "Dangrek" => array(
935
- "regular",
936
- ),
937
- "Dawning of a New Day" => array(
938
- "regular",
939
- ),
940
- "Days One" => array(
941
- "regular",
942
- ),
943
- "Dekko" => array(
944
- "regular",
945
- ),
946
- "Delius" => array(
947
- "regular",
948
- ),
949
- "Delius Swash Caps" => array(
950
- "regular",
951
- ),
952
- "Delius Unicase" => array(
953
- "regular",
954
- "700",
955
- ),
956
- "Della Respira" => array(
957
- "regular",
958
- ),
959
- "Denk One" => array(
960
- "regular",
961
- ),
962
- "Devonshire" => array(
963
- "regular",
964
- ),
965
- "Dhurjati" => array(
966
- "regular",
967
- ),
968
- "Didact Gothic" => array(
969
- "regular",
970
- ),
971
- "Diplomata" => array(
972
- "regular",
973
- ),
974
- "Diplomata SC" => array(
975
- "regular",
976
- ),
977
- "Domine" => array(
978
- "regular",
979
- "700",
980
- ),
981
- "Donegal One" => array(
982
- "regular",
983
- ),
984
- "Doppio One" => array(
985
- "regular",
986
- ),
987
- "Dorsa" => array(
988
- "regular",
989
- ),
990
- "Dosis" => array(
991
- "200",
992
- "300",
993
- "regular",
994
- "500",
995
- "600",
996
- "700",
997
- "800",
998
- ),
999
- "Dr Sugiyama" => array(
1000
- "regular",
1001
- ),
1002
- "Droid Sans" => array(
1003
- "regular",
1004
- "700",
1005
- ),
1006
- "Droid Sans Mono" => array(
1007
- "regular",
1008
- ),
1009
- "Droid Serif" => array(
1010
- "regular",
1011
- "700",
1012
- ),
1013
- "Duru Sans" => array(
1014
- "regular",
1015
- ),
1016
- "Dynalight" => array(
1017
- "regular",
1018
- ),
1019
- "EB Garamond" => array(
1020
- "regular",
1021
- ),
1022
- "Eagle Lake" => array(
1023
- "regular",
1024
- ),
1025
- "Eater" => array(
1026
- "regular",
1027
- ),
1028
- "Economica" => array(
1029
- "regular",
1030
- "700",
1031
- ),
1032
- "Eczar" => array(
1033
- "regular",
1034
- "500",
1035
- "600",
1036
- "700",
1037
- "800",
1038
- ),
1039
- "Ek Mukta" => array(
1040
- "200",
1041
- "300",
1042
- "regular",
1043
- "500",
1044
- "600",
1045
- "700",
1046
- "800",
1047
- ),
1048
- "Electrolize" => array(
1049
- "regular",
1050
- ),
1051
- "Elsie" => array(
1052
- "regular",
1053
- "900",
1054
- ),
1055
- "Elsie Swash Caps" => array(
1056
- "regular",
1057
- "900",
1058
- ),
1059
- "Emblema One" => array(
1060
- "regular",
1061
- ),
1062
- "Emilys Candy" => array(
1063
- "regular",
1064
- ),
1065
- "Engagement" => array(
1066
- "regular",
1067
- ),
1068
- "Englebert" => array(
1069
- "regular",
1070
- ),
1071
- "Enriqueta" => array(
1072
- "regular",
1073
- "700",
1074
- ),
1075
- "Erica One" => array(
1076
- "regular",
1077
- ),
1078
- "Esteban" => array(
1079
- "regular",
1080
- ),
1081
- "Euphoria Script" => array(
1082
- "regular",
1083
- ),
1084
- "Ewert" => array(
1085
- "regular",
1086
- ),
1087
- "Exo" => array(
1088
- "100",
1089
- "200",
1090
- "300",
1091
- "regular",
1092
- "500",
1093
- "600",
1094
- "700",
1095
- "800",
1096
- "900",
1097
- ),
1098
- "Exo 2" => array(
1099
- "100",
1100
- "200",
1101
- "300",
1102
- "regular",
1103
- "500",
1104
- "600",
1105
- "700",
1106
- "800",
1107
- "900",
1108
- ),
1109
- "Expletus Sans" => array(
1110
- "regular",
1111
- "500",
1112
- "600",
1113
- "700",
1114
- ),
1115
- "Fanwood Text" => array(
1116
- "regular",
1117
- ),
1118
- "Fascinate" => array(
1119
- "regular",
1120
- ),
1121
- "Fascinate Inline" => array(
1122
- "regular",
1123
- ),
1124
- "Faster One" => array(
1125
- "regular",
1126
- ),
1127
- "Fasthand" => array(
1128
- "regular",
1129
- ),
1130
- "Fauna One" => array(
1131
- "regular",
1132
- ),
1133
- "Federant" => array(
1134
- "regular",
1135
- ),
1136
- "Federo" => array(
1137
- "regular",
1138
- ),
1139
- "Felipa" => array(
1140
- "regular",
1141
- ),
1142
- "Fenix" => array(
1143
- "regular",
1144
- ),
1145
- "Finger Paint" => array(
1146
- "regular",
1147
- ),
1148
- "Fira Mono" => array(
1149
- "regular",
1150
- "700",
1151
- ),
1152
- "Fira Sans" => array(
1153
- "300",
1154
- "regular",
1155
- "500",
1156
- "700",
1157
- ),
1158
- "Fjalla One" => array(
1159
- "regular",
1160
- ),
1161
- "Fjord One" => array(
1162
- "regular",
1163
- ),
1164
- "Flamenco" => array(
1165
- "300",
1166
- "regular",
1167
- ),
1168
- "Flavors" => array(
1169
- "regular",
1170
- ),
1171
- "Fondamento" => array(
1172
- "regular",
1173
- ),
1174
- "Fontdiner Swanky" => array(
1175
- "regular",
1176
- ),
1177
- "Forum" => array(
1178
- "regular",
1179
- ),
1180
- "Francois One" => array(
1181
- "regular",
1182
- ),
1183
- "Freckle Face" => array(
1184
- "regular",
1185
- ),
1186
- "Fredericka the Great" => array(
1187
- "regular",
1188
- ),
1189
- "Fredoka One" => array(
1190
- "regular",
1191
- ),
1192
- "Freehand" => array(
1193
- "regular",
1194
- ),
1195
- "Fresca" => array(
1196
- "regular",
1197
- ),
1198
- "Frijole" => array(
1199
- "regular",
1200
- ),
1201
- "Fruktur" => array(
1202
- "regular",
1203
- ),
1204
- "Fugaz One" => array(
1205
- "regular",
1206
- ),
1207
- "GFS Didot" => array(
1208
- "regular",
1209
- ),
1210
- "GFS Neohellenic" => array(
1211
- "regular",
1212
- "700",
1213
- ),
1214
- "Gabriela" => array(
1215
- "regular",
1216
- ),
1217
- "Gafata" => array(
1218
- "regular",
1219
- ),
1220
- "Galdeano" => array(
1221
- "regular",
1222
- ),
1223
- "Galindo" => array(
1224
- "regular",
1225
- ),
1226
- "Gentium Basic" => array(
1227
- "regular",
1228
- "700",
1229
- ),
1230
- "Gentium Book Basic" => array(
1231
- "regular",
1232
- "700",
1233
- ),
1234
- "Geo" => array(
1235
- "regular",
1236
- ),
1237
- "Geostar" => array(
1238
- "regular",
1239
- ),
1240
- "Geostar Fill" => array(
1241
- "regular",
1242
- ),
1243
- "Germania One" => array(
1244
- "regular",
1245
- ),
1246
- "Gidugu" => array(
1247
- "regular",
1248
- ),
1249
- "Gilda Display" => array(
1250
- "regular",
1251
- ),
1252
- "Give You Glory" => array(
1253
- "regular",
1254
- ),
1255
- "Glass Antiqua" => array(
1256
- "regular",
1257
- ),
1258
- "Glegoo" => array(
1259
- "regular",
1260
- "700",
1261
- ),
1262
- "Gloria Hallelujah" => array(
1263
- "regular",
1264
- ),
1265
- "Goblin One" => array(
1266
- "regular",
1267
- ),
1268
- "Gochi Hand" => array(
1269
- "regular",
1270
- ),
1271
- "Gorditas" => array(
1272
- "regular",
1273
- "700",
1274
- ),
1275
- "Goudy Bookletter 1911" => array(
1276
- "regular",
1277
- ),
1278
- "Graduate" => array(
1279
- "regular",
1280
- ),
1281
- "Grand Hotel" => array(
1282
- "regular",
1283
- ),
1284
- "Gravitas One" => array(
1285
- "regular",
1286
- ),
1287
- "Great Vibes" => array(
1288
- "regular",
1289
- ),
1290
- "Griffy" => array(
1291
- "regular",
1292
- ),
1293
- "Gruppo" => array(
1294
- "regular",
1295
- ),
1296
- "Gudea" => array(
1297
- "regular",
1298
- "700",
1299
- ),
1300
- "Gurajada" => array(
1301
- "regular",
1302
- ),
1303
- "Habibi" => array(
1304
- "regular",
1305
- ),
1306
- "Halant" => array(
1307
- "300",
1308
- "regular",
1309
- "500",
1310
- "600",
1311
- "700",
1312
- ),
1313
- "Hammersmith One" => array(
1314
- "regular",
1315
- ),
1316
- "Hanalei" => array(
1317
- "regular",
1318
- ),
1319
- "Hanalei Fill" => array(
1320
- "regular",
1321
- ),
1322
- "Handlee" => array(
1323
- "regular",
1324
- ),
1325
- "Hanuman" => array(
1326
- "regular",
1327
- "700",
1328
- ),
1329
- "Happy Monkey" => array(
1330
- "regular",
1331
- ),
1332
- "Headland One" => array(
1333
- "regular",
1334
- ),
1335
- "Henny Penny" => array(
1336
- "regular",
1337
- ),
1338
- "Heebo" => array(
1339
- "100",
1340
- "300",
1341
- "regular",
1342
- "500",
1343
- "700",
1344
- "800",
1345
- "900"
1346
- ),
1347
- "Herr Von Muellerhoff" => array(
1348
- "regular",
1349
- ),
1350
- "Hind" => array(
1351
- "300",
1352
- "regular",
1353
- "500",
1354
- "600",
1355
- "700",
1356
- ),
1357
- "Hind Siliguri" => array(
1358
- "300",
1359
- "regular",
1360
- "500",
1361
- "600",
1362
- "700",
1363
- ),
1364
- "Hind Vadodara" => array(
1365
- "300",
1366
- "regular",
1367
- "500",
1368
- "600",
1369
- "700",
1370
- ),
1371
- "Holtwood One SC" => array(
1372
- "regular",
1373
- ),
1374
- "Homemade Apple" => array(
1375
- "regular",
1376
- ),
1377
- "Homenaje" => array(
1378
- "regular",
1379
- ),
1380
- "IM Fell DW Pica" => array(
1381
- "regular",
1382
- ),
1383
- "IM Fell DW Pica SC" => array(
1384
- "regular",
1385
- ),
1386
- "IM Fell Double Pica" => array(
1387
- "regular",
1388
- ),
1389
- "IM Fell Double Pica SC" => array(
1390
- "regular",
1391
- ),
1392
- "IM Fell English" => array(
1393
- "regular",
1394
- ),
1395
- "IM Fell English SC" => array(
1396
- "regular",
1397
- ),
1398
- "IM Fell French Canon" => array(
1399
- "regular",
1400
- ),
1401
- "IM Fell French Canon SC" => array(
1402
- "regular",
1403
- ),
1404
- "IM Fell Great Primer" => array(
1405
- "regular",
1406
- ),
1407
- "IM Fell Great Primer SC" => array(
1408
- "regular",
1409
- ),
1410
- "Iceberg" => array(
1411
- "regular",
1412
- ),
1413
- "Iceland" => array(
1414
- "regular",
1415
- ),
1416
- "Imprima" => array(
1417
- "regular",
1418
- ),
1419
- "Inconsolata" => array(
1420
- "regular",
1421
- "700",
1422
- ),
1423
- "Inder" => array(
1424
- "regular",
1425
- ),
1426
- "Indie Flower" => array(
1427
- "regular",
1428
- ),
1429
- "Inika" => array(
1430
- "regular",
1431
- "700",
1432
- ),
1433
- "Inknut Antiqua" => array(
1434
- "300",
1435
- "regular",
1436
- "500",
1437
- "600",
1438
- "700",
1439
- "800",
1440
- "900",
1441
- ),
1442
- "Irish Grover" => array(
1443
- "regular",
1444
- ),
1445
- "Istok Web" => array(
1446
- "regular",
1447
- "700",
1448
- ),
1449
- "Italiana" => array(
1450
- "regular",
1451
- ),
1452
- "Italianno" => array(
1453
- "regular",
1454
- ),
1455
- "Itim" => array(
1456
- "regular",
1457
- ),
1458
- "Jacques Francois" => array(
1459
- "regular",
1460
- ),
1461
- "Jacques Francois Shadow" => array(
1462
- "regular",
1463
- ),
1464
- "Jaldi" => array(
1465
- "regular",
1466
- "700",
1467
- ),
1468
- "Jim Nightshade" => array(
1469
- "regular",
1470
- ),
1471
- "Jockey One" => array(
1472
- "regular",
1473
- ),
1474
- "Jolly Lodger" => array(
1475
- "regular",
1476
- ),
1477
- "Josefin Sans" => array(
1478
- "100",
1479
- "300",
1480
- "regular",
1481
- "600",
1482
- "700",
1483
- ),
1484
- "Josefin Slab" => array(
1485
- "100",
1486
- "300",
1487
- "regular",
1488
- "600",
1489
- "700",
1490
- ),
1491
- "Joti One" => array(
1492
- "regular",
1493
- ),
1494
- "Judson" => array(
1495
- "regular",
1496
- "700",
1497
- ),
1498
- "Julee" => array(
1499
- "regular",
1500
- ),
1501
- "Julius Sans One" => array(
1502
- "regular",
1503
- ),
1504
- "Junge" => array(
1505
- "regular",
1506
- ),
1507
- "Jura" => array(
1508
- "300",
1509
- "regular",
1510
- "500",
1511
- "600",
1512
- ),
1513
- "Just Another Hand" => array(
1514
- "regular",
1515
- ),
1516
- "Just Me Again Down Here" => array(
1517
- "regular",
1518
- ),
1519
- "Kadwa" => array(
1520
- "regular",
1521
- "700",
1522
- ),
1523
- "Kalam" => array(
1524
- "300",
1525
- "regular",
1526
- "700",
1527
- ),
1528
- "Kameron" => array(
1529
- "regular",
1530
- "700",
1531
- ),
1532
- "Kanit" => array(
1533
- "100",
1534
- "200",
1535
- "300",
1536
- "regular",
1537
- "500",
1538
- "600",
1539
- "700",
1540
- "800",
1541
- "900",
1542
- ),
1543
- "Kantumruy" => array(
1544
- "300",
1545
- "regular",
1546
- "700",
1547
- ),
1548
- "Karla" => array(
1549
- "regular",
1550
- "700",
1551
- ),
1552
- "Karma" => array(
1553
- "300",
1554
- "regular",
1555
- "500",
1556
- "600",
1557
- "700",
1558
- ),
1559
- "Kaushan Script" => array(
1560
- "regular",
1561
- ),
1562
- "Kavoon" => array(
1563
- "regular",
1564
- ),
1565
- "Kdam Thmor" => array(
1566
- "regular",
1567
- ),
1568
- "Keania One" => array(
1569
- "regular",
1570
- ),
1571
- "Kelly Slab" => array(
1572
- "regular",
1573
- ),
1574
- "Kenia" => array(
1575
- "regular",
1576
- ),
1577
- "Khand" => array(
1578
- "300",
1579
- "regular",
1580
- "500",
1581
- "600",
1582
- "700",
1583
- ),
1584
- "Khmer" => array(
1585
- "regular",
1586
- ),
1587
- "Khula" => array(
1588
- "300",
1589
- "regular",
1590
- "600",
1591
- "700",
1592
- "800",
1593
- ),
1594
- "Kite One" => array(
1595
- "regular",
1596
- ),
1597
- "Knewave" => array(
1598
- "regular",
1599
- ),
1600
- "Kotta One" => array(
1601
- "regular",
1602
- ),
1603
- "Koulen" => array(
1604
- "regular",
1605
- ),
1606
- "Kranky" => array(
1607
- "regular",
1608
- ),
1609
- "Kreon" => array(
1610
- "300",
1611
- "regular",
1612
- "700",
1613
- ),
1614
- "Kristi" => array(
1615
- "regular",
1616
- ),
1617
- "Krona One" => array(
1618
- "regular",
1619
- ),
1620
- "Kurale" => array(
1621
- "regular",
1622
- ),
1623
- "La Belle Aurore" => array(
1624
- "regular",
1625
- ),
1626
- "Laila" => array(
1627
- "300",
1628
- "regular",
1629
- "500",
1630
- "600",
1631
- "700",
1632
- ),
1633
- "Lakki Reddy" => array(
1634
- "regular",
1635
- ),
1636
- "Lancelot" => array(
1637
- "regular",
1638
- ),
1639
- "Lateef" => array(
1640
- "regular",
1641
- ),
1642
- "Lato" => array(
1643
- "100",
1644
- "300",
1645
- "regular",
1646
- "700",
1647
- "900",
1648
- ),
1649
- "League Script" => array(
1650
- "regular",
1651
- ),
1652
- "Leckerli One" => array(
1653
- "regular",
1654
- ),
1655
- "Ledger" => array(
1656
- "regular",
1657
- ),
1658
- "Lekton" => array(
1659
- "regular",
1660
- "700",
1661
- ),
1662
- "Lemon" => array(
1663
- "regular",
1664
- ),
1665
- "Libre Baskerville" => array(
1666
- "regular",
1667
- "700",
1668
- ),
1669
- "Life Savers" => array(
1670
- "regular",
1671
- "700",
1672
- ),
1673
- "Lilita One" => array(
1674
- "regular",
1675
- ),
1676
- "Lily Script One" => array(
1677
- "regular",
1678
- ),
1679
- "Limelight" => array(
1680
- "regular",
1681
- ),
1682
- "Linden Hill" => array(
1683
- "regular",
1684
- ),
1685
- "Lobster" => array(
1686
- "regular",
1687
- ),
1688
- "Lobster Two" => array(
1689
- "regular",
1690
- "700",
1691
- ),
1692
- "Londrina Outline" => array(
1693
- "regular",
1694
- ),
1695
- "Londrina Shadow" => array(
1696
- "regular",
1697
- ),
1698
- "Londrina Sketch" => array(
1699
- "regular",
1700
- ),
1701
- "Londrina Solid" => array(
1702
- "regular",
1703
- ),
1704
- "Lora" => array(
1705
- "regular",
1706
- "700",
1707
- ),
1708
- "Love Ya Like A Sister" => array(
1709
- "regular",
1710
- ),
1711
- "Loved by the King" => array(
1712
- "regular",
1713
- ),
1714
- "Lovers Quarrel" => array(
1715
- "regular",
1716
- ),
1717
- "Luckiest Guy" => array(
1718
- "regular",
1719
- ),
1720
- "Lusitana" => array(
1721
- "regular",
1722
- "700",
1723
- ),
1724
- "Lustria" => array(
1725
- "regular",
1726
- ),
1727
- "Macondo" => array(
1728
- "regular",
1729
- ),
1730
- "Macondo Swash Caps" => array(
1731
- "regular",
1732
- ),
1733
- "Magra" => array(
1734
- "regular",
1735
- "700",
1736
- ),
1737
- "Maiden Orange" => array(
1738
- "regular",
1739
- ),
1740
- "Mako" => array(
1741
- "regular",
1742
- ),
1743
- "Mallanna" => array(
1744
- "regular",
1745
- ),
1746
- "Mandali" => array(
1747
- "regular",
1748
- ),
1749
- "Marcellus" => array(
1750
- "regular",
1751
- ),
1752
- "Marcellus SC" => array(
1753
- "regular",
1754
- ),
1755
- "Marck Script" => array(
1756
- "regular",
1757
- ),
1758
- "Margarine" => array(
1759
- "regular",
1760
- ),
1761
- "Marko One" => array(
1762
- "regular",
1763
- ),
1764
- "Marmelad" => array(
1765
- "regular",
1766
- ),
1767
- "Martel" => array(
1768
- "200",
1769
- "300",
1770
- "regular",
1771
- "600",
1772
- "700",
1773
- "800",
1774
- "900",
1775
- ),
1776
- "Martel Sans" => array(
1777
- "200",
1778
- "300",
1779
- "regular",
1780
- "600",
1781
- "700",
1782
- "800",
1783
- "900",
1784
- ),
1785
- "Marvel" => array(
1786
- "regular",
1787
- "700",
1788
- ),
1789
- "Mate" => array(
1790
- "regular",
1791
- ),
1792
- "Mate SC" => array(
1793
- "regular",
1794
- ),
1795
- "Maven Pro" => array(
1796
- "regular",
1797
- "500",
1798
- "700",
1799
- "900",
1800
- ),
1801
- "McLaren" => array(
1802
- "regular",
1803
- ),
1804
- "Meddon" => array(
1805
- "regular",
1806
- ),
1807
- "MedievalSharp" => array(
1808
- "regular",
1809
- ),
1810
- "Medula One" => array(
1811
- "regular",
1812
- ),
1813
- "Megrim" => array(
1814
- "regular",
1815
- ),
1816
- "Meie Script" => array(
1817
- "regular",
1818
- ),
1819
- "Merienda" => array(
1820
- "regular",
1821
- "700",
1822
- ),
1823
- "Merienda One" => array(
1824
- "regular",
1825
- ),
1826
- "Merriweather" => array(
1827
- "300",
1828
- "regular",
1829
- "700",
1830
- "900",
1831
- ),
1832
- "Merriweather Sans" => array(
1833
- "300",
1834
- "regular",
1835
- "700",
1836
- "800",
1837
- ),
1838
- "Metal" => array(
1839
- "regular",
1840
- ),
1841
- "Metal Mania" => array(
1842
- "regular",
1843
- ),
1844
- "Metamorphous" => array(
1845
- "regular",
1846
- ),
1847
- "Metrophobic" => array(
1848
- "regular",
1849
- ),
1850
- "Michroma" => array(
1851
- "regular",
1852
- ),
1853
- "Milonga" => array(
1854
- "regular",
1855
- ),
1856
- "Miltonian" => array(
1857
- "regular",
1858
- ),
1859
- "Miltonian Tattoo" => array(
1860
- "regular",
1861
- ),
1862
- "Miniver" => array(
1863
- "regular",
1864
- ),
1865
- "Miss Fajardose" => array(
1866
- "regular",
1867
- ),
1868
- "Modak" => array(
1869
- "regular",
1870
- ),
1871
- "Modern Antiqua" => array(
1872
- "regular",
1873
- ),
1874
- "Molengo" => array(
1875
- "regular",
1876
- ),
1877
- "Molle" => array(
1878
- ),
1879
- "Monda" => array(
1880
- "regular",
1881
- "700",
1882
- ),
1883
- "Monofett" => array(
1884
- "regular",
1885
- ),
1886
- "Monoton" => array(
1887
- "regular",
1888
- ),
1889
- "Monsieur La Doulaise" => array(
1890
- "regular",
1891
- ),
1892
- "Montaga" => array(
1893
- "regular",
1894
- ),
1895
- "Montez" => array(
1896
- "regular",
1897
- ),
1898
- "Montserrat" => array(
1899
- "regular",
1900
- "700",
1901
- ),
1902
- "Montserrat Alternates" => array(
1903
- "regular",
1904
- "700",
1905
- ),
1906
- "Montserrat Subrayada" => array(
1907
- "regular",
1908
- "700",
1909
- ),
1910
- "Moul" => array(
1911
- "regular",
1912
- ),
1913
- "Moulpali" => array(
1914
- "regular",
1915
- ),
1916
- "Mountains of Christmas" => array(
1917
- "regular",
1918
- "700",
1919
- ),
1920
- "Mouse Memoirs" => array(
1921
- "regular",
1922
- ),
1923
- "Mr Bedfort" => array(
1924
- "regular",
1925
- ),
1926
- "Mr Dafoe" => array(
1927
- "regular",
1928
- ),
1929
- "Mr De Haviland" => array(
1930
- "regular",
1931
- ),
1932
- "Mrs Saint Delafield" => array(
1933
- "regular",
1934
- ),
1935
- "Mrs Sheppards" => array(
1936
- "regular",
1937
- ),
1938
- "Muli" => array(
1939
- "300",
1940
- "regular",
1941
- ),
1942
- "Mystery Quest" => array(
1943
- "regular",
1944
- ),
1945
- "NTR" => array(
1946
- "regular",
1947
- ),
1948
- "Neucha" => array(
1949
- "regular",
1950
- ),
1951
- "Neuton" => array(
1952
- "200",
1953
- "300",
1954
- "regular",
1955
- "700",
1956
- "800",
1957
- ),
1958
- "New Rocker" => array(
1959
- "regular",
1960
- ),
1961
- "News Cycle" => array(
1962
- "regular",
1963
- "700",
1964
- ),
1965
- "Niconne" => array(
1966
- "regular",
1967
- ),
1968
- "Nixie One" => array(
1969
- "regular",
1970
- ),
1971
- "Nobile" => array(
1972
- "regular",
1973
- "700",
1974
- ),
1975
- "Nokora" => array(
1976
- "regular",
1977
- "700",
1978
- ),
1979
- "Norican" => array(
1980
- "regular",
1981
- ),
1982
- "Nosifer" => array(
1983
- "regular",
1984
- ),
1985
- "Nothing You Could Do" => array(
1986
- "regular",
1987
- ),
1988
- "Noticia Text" => array(
1989
- "regular",
1990
- "700",
1991
- ),
1992
- "Noto Sans" => array(
1993
- "regular",
1994
- "700",
1995
- ),
1996
- "Noto Serif" => array(
1997
- "regular",
1998
- "700",
1999
- ),
2000
- "Nova Cut" => array(
2001
- "regular",
2002
- ),
2003
- "Nova Flat" => array(
2004
- "regular",
2005
- ),
2006
- "Nova Mono" => array(
2007
- "regular",
2008
- ),
2009
- "Nova Oval" => array(
2010
- "regular",
2011
- ),
2012
- "Nova Round" => array(
2013
- "regular",
2014
- ),
2015
- "Nova Script" => array(
2016
- "regular",
2017
- ),
2018
- "Nova Slim" => array(
2019
- "regular",
2020
- ),
2021
- "Nova Square" => array(
2022
- "regular",
2023
- ),
2024
- "Numans" => array(
2025
- "regular",
2026
- ),
2027
- "Nunito" => array(
2028
- "300",
2029
- "regular",
2030
- "700",
2031
- ),
2032
- "Odor Mean Chey" => array(
2033
- "regular",
2034
- ),
2035
- "Offside" => array(
2036
- "regular",
2037
- ),
2038
- "Old Standard TT" => array(
2039
- "regular",
2040
- "700",
2041
- ),
2042
- "Oldenburg" => array(
2043
- "regular",
2044
- ),
2045
- "Oleo Script" => array(
2046
- "regular",
2047
- "700",
2048
- ),
2049
- "Oleo Script Swash Caps" => array(
2050
- "regular",
2051
- "700",
2052
- ),
2053
- "Open Sans" => array(
2054
- "300",
2055
- "regular",
2056
- "600",
2057
- "700",
2058
- "800",
2059
- ),
2060
- "Open Sans Condensed" => array(
2061
- "300",
2062
- "700",
2063
- ),
2064
- "Oranienbaum" => array(
2065
- "regular",
2066
- ),
2067
- "Orbitron" => array(
2068
- "regular",
2069
- "500",
2070
- "700",
2071
- "900",
2072
- ),
2073
- "Oregano" => array(
2074
- "regular",
2075
- ),
2076
- "Orienta" => array(
2077
- "regular",
2078
- ),
2079
- "Original Surfer" => array(
2080
- "regular",
2081
- ),
2082
- "Oswald" => array(
2083
- "300",
2084
- "regular",
2085
- "700",
2086
- ),
2087
- "Over the Rainbow" => array(
2088
- "regular",
2089
- ),
2090
- "Overlock" => array(
2091
- "regular",
2092
- "700",
2093
- "900",
2094
- ),
2095
- "Overlock SC" => array(
2096
- "regular",
2097
- ),
2098
- "Ovo" => array(
2099
- "regular",
2100
- ),
2101
- "Oxygen" => array(
2102
- "300",
2103
- "regular",
2104
- "700",
2105
- ),
2106
- "Oxygen Mono" => array(
2107
- "regular",
2108
- ),
2109
- "PT Mono" => array(
2110
- "regular",
2111
- ),
2112
- "PT Sans" => array(
2113
- "regular",
2114
- "700",
2115
- ),
2116
- "PT Sans Caption" => array(
2117
- "regular",
2118
- "700",
2119
- ),
2120
- "PT Sans Narrow" => array(
2121
- "regular",
2122
- "700",
2123
- ),
2124
- "PT Serif" => array(
2125
- "regular",
2126
- "700",
2127
- ),
2128
- "PT Serif Caption" => array(
2129
- "regular",
2130
- ),
2131
- "Pacifico" => array(
2132
- "regular",
2133
- ),
2134
- "Palanquin" => array(
2135
- "100",
2136
- "200",
2137
- "300",
2138
- "regular",
2139
- "500",
2140
- "600",
2141
- "700",
2142
- ),
2143
- "Palanquin Dark" => array(
2144
- "regular",
2145
- "500",
2146
- "600",
2147
- "700",
2148
- ),
2149
- "Paprika" => array(
2150
- "regular",
2151
- ),
2152
- "Parisienne" => array(
2153
- "regular",
2154
- ),
2155
- "Passero One" => array(
2156
- "regular",
2157
- ),
2158
- "Passion One" => array(
2159
- "regular",
2160
- "700",
2161
- "900",
2162
- ),
2163
- "Pathway Gothic One" => array(
2164
- "regular",
2165
- ),
2166
- "Patrick Hand" => array(
2167
- "regular",
2168
- ),
2169
- "Patrick Hand SC" => array(
2170
- "regular",
2171
- ),
2172
- "Patua One" => array(
2173
- "regular",
2174
- ),
2175
- "Paytone One" => array(
2176
- "regular",
2177
- ),
2178
- "Peddana" => array(
2179
- "regular",
2180
- ),
2181
- "Peralta" => array(
2182
- "regular",
2183
- ),
2184
- "Permanent Marker" => array(
2185
- "regular",
2186
- ),
2187
- "Petit Formal Script" => array(
2188
- "regular",
2189
- ),
2190
- "Petrona" => array(
2191
- "regular",
2192
- ),
2193
- "Philosopher" => array(
2194
- "regular",
2195
- "700",
2196
- ),
2197
- "Piedra" => array(
2198
- "regular",
2199
- ),
2200
- "Pinyon Script" => array(
2201
- "regular",
2202
- ),
2203
- "Pirata One" => array(
2204
- "regular",
2205
- ),
2206
- "Plaster" => array(
2207
- "regular",
2208
- ),
2209
- "Play" => array(
2210
- "regular",
2211
- "700",
2212
- ),
2213
- "Playball" => array(
2214
- "regular",
2215
- ),
2216
- "Playfair Display" => array(
2217
- "regular",
2218
- "700",
2219
- "900",
2220
- ),
2221
- "Playfair Display SC" => array(
2222
- "regular",
2223
- "700",
2224
- "900",
2225
- ),
2226
- "Podkova" => array(
2227
- "regular",
2228
- "700",
2229
- ),
2230
- "Poiret One" => array(
2231
- "regular",
2232
- ),
2233
- "Poller One" => array(
2234
- "regular",
2235
- ),
2236
- "Poly" => array(
2237
- "regular",
2238
- ),
2239
- "Pompiere" => array(
2240
- "regular",
2241
- ),
2242
- "Pontano Sans" => array(
2243
- "regular",
2244
- ),
2245
- "Poppins" => array(
2246
- "300",
2247
- "regular",
2248
- "500",
2249
- "600",
2250
- "700",
2251
- ),
2252
- "Port Lligat Sans" => array(
2253
- "regular",
2254
- ),
2255
- "Port Lligat Slab" => array(
2256
- "regular",
2257
- ),
2258
- "Pragati Narrow" => array(
2259
- "regular",
2260
- "700",
2261
- ),
2262
- "Prata" => array(
2263
- "regular",
2264
- ),
2265
- "Preahvihear" => array(
2266
- "regular",
2267
- ),
2268
- "Press Start 2P" => array(
2269
- "regular",
2270
- ),
2271
- "Princess Sofia" => array(
2272
- "regular",
2273
- ),
2274
- "Prociono" => array(
2275
- "regular",
2276
- ),
2277
- "Prosto One" => array(
2278
- "regular",
2279
- ),
2280
- "Puritan" => array(
2281
- "regular",
2282
- "700",
2283
- ),
2284
- "Purple Purse" => array(
2285
- "regular",
2286
- ),
2287
- "Quando" => array(
2288
- "regular",
2289
- ),
2290
- "Quantico" => array(
2291
- "regular",
2292
- "700",
2293
- ),
2294
- "Quattrocento" => array(
2295
- "regular",
2296
- "700",
2297
- ),
2298
- "Quattrocento Sans" => array(
2299
- "regular",
2300
- "700",
2301
- ),
2302
- "Questrial" => array(
2303
- "regular",
2304
- ),
2305
- "Quicksand" => array(
2306
- "300",
2307
- "regular",
2308
- "700",
2309
- ),
2310
- "Quintessential" => array(
2311
- "regular",
2312
- ),
2313
- "Qwigley" => array(
2314
- "regular",
2315
- ),
2316
- "Racing Sans One" => array(
2317
- "regular",
2318
- ),
2319
- "Radley" => array(
2320
- "regular",
2321
- ),
2322
- "Rajdhani" => array(
2323
- "300",
2324
- "regular",
2325
- "500",
2326
- "600",
2327
- "700",
2328
- ),
2329
- "Raleway" => array(
2330
- "100",
2331
- "200",
2332
- "300",
2333
- "regular",
2334
- "500",
2335
- "600",
2336
- "700",
2337
- "800",
2338
- "900",
2339
- ),
2340
- "Raleway Dots" => array(
2341
- "regular",
2342
- ),
2343
- "Ramabhadra" => array(
2344
- "regular",
2345
- ),
2346
- "Ramaraja" => array(
2347
- "regular",
2348
- ),
2349
- "Rambla" => array(
2350
- "regular",
2351
- "700",
2352
- ),
2353
- "Rammetto One" => array(
2354
- "regular",
2355
- ),
2356
- "Ranchers" => array(
2357
- "regular",
2358
- ),
2359
- "Rancho" => array(
2360
- "regular",
2361
- ),
2362
- "Ranga" => array(
2363
- "regular",
2364
- "700",
2365
- ),
2366
- "Rationale" => array(
2367
- "regular",
2368
- ),
2369
- "Ravi Prakash" => array(
2370
- "regular",
2371
- ),
2372
- "Redressed" => array(
2373
- "regular",
2374
- ),
2375
- "Reenie Beanie" => array(
2376
- "regular",
2377
- ),
2378
- "Revalia" => array(
2379
- "regular",
2380
- ),
2381
- "Rhodium Libre" => array(
2382
- "regular",
2383
- ),
2384
- "Ribeye" => array(
2385
- "regular",
2386
- ),
2387
- "Ribeye Marrow" => array(
2388
- "regular",
2389
- ),
2390
- "Righteous" => array(
2391
- "regular",
2392
- ),
2393
- "Risque" => array(
2394
- "regular",
2395
- ),
2396
- "Roboto" => array(
2397
- "100",
2398
- "300",
2399
- "regular",
2400
- "500",
2401
- "700",
2402
- "900",
2403
- ),
2404
- "Roboto Condensed" => array(
2405
- "300",
2406
- "regular",
2407
- "700",
2408
- ),
2409
- "Roboto Mono" => array(
2410
- "100",
2411
- "300",
2412
- "regular",
2413
- "500",
2414
- "700",
2415
- ),
2416
- "Roboto Slab" => array(
2417
- "100",
2418
- "300",
2419
- "regular",
2420
- "700",
2421
- ),
2422
- "Rochester" => array(
2423
- "regular",
2424
- ),
2425
- "Rock Salt" => array(
2426
- "regular",
2427
- ),
2428
- "Rokkitt" => array(
2429
- "regular",
2430
- "700",
2431
- ),
2432
- "Romanesco" => array(
2433
- "regular",
2434
- ),
2435
- "Ropa Sans" => array(
2436
- "regular",
2437
- ),
2438
- "Rosario" => array(
2439
- "regular",
2440
- "700",
2441
- ),
2442
- "Rosarivo" => array(
2443
- "regular",
2444
- ),
2445
- "Rouge Script" => array(
2446
- "regular",
2447
- ),
2448
- "Rozha One" => array(
2449
- "regular",
2450
- ),
2451
- "Rubik" => array(
2452
- "300",
2453
- "regular",
2454
- "500",
2455
- "700",
2456
- "900",
2457
- ),
2458
- "Rubik Mono One" => array(
2459
- "regular",
2460
- ),
2461
- "Rubik One" => array(
2462
- "regular",
2463
- ),
2464
- "Ruda" => array(
2465
- "regular",
2466
- "700",
2467
- "900",
2468
- ),
2469
- "Rufina" => array(
2470
- "regular",
2471
- "700",
2472
- ),
2473
- "Ruge Boogie" => array(
2474
- "regular",
2475
- ),
2476
- "Ruluko" => array(
2477
- "regular",
2478
- ),
2479
- "Rum Raisin" => array(
2480
- "regular",
2481
- ),
2482
- "Ruslan Display" => array(
2483
- "regular",
2484
- ),
2485
- "Russo One" => array(
2486
- "regular",
2487
- ),
2488
- "Ruthie" => array(
2489
- "regular",
2490
- ),
2491
- "Rye" => array(
2492
- "regular",
2493
- ),
2494
- "Sacramento" => array(
2495
- "regular",
2496
- ),
2497
- "Sahitya" => array(
2498
- "regular",
2499
- "700",
2500
- ),
2501
- "Sail" => array(
2502
- "regular",
2503
- ),
2504
- "Salsa" => array(
2505
- "regular",
2506
- ),
2507
- "Sanchez" => array(
2508
- "regular",
2509
- ),
2510
- "Sancreek" => array(
2511
- "regular",
2512
- ),
2513
- "Sansita One" => array(
2514
- "regular",
2515
- ),
2516
- "Sarala" => array(
2517
- "regular",
2518
- "700",
2519
- ),
2520
- "Sarina" => array(
2521
- "regular",
2522
- ),
2523
- "Sarpanch" => array(
2524
- "regular",
2525
- "500",
2526
- "600",
2527
- "700",
2528
- "800",
2529
- "900",
2530
- ),
2531
- "Satisfy" => array(
2532
- "regular",
2533
- ),
2534
- "Scada" => array(
2535
- "regular",
2536
- "700",
2537
- ),
2538
- "Scheherazade" => array(
2539
- "regular",
2540
- "700",
2541
- ),
2542
- "Schoolbell" => array(
2543
- "regular",
2544
- ),
2545
- "Seaweed Script" => array(
2546
- "regular",
2547
- ),
2548
- "Sevillana" => array(
2549
- "regular",
2550
- ),
2551
- "Seymour One" => array(
2552
- "regular",
2553
- ),
2554
- "Shadows Into Light" => array(
2555
- "regular",
2556
- ),
2557
- "Shadows Into Light Two" => array(
2558
- "regular",
2559
- ),
2560
- "Shanti" => array(
2561
- "regular",
2562
- ),
2563
- "Share" => array(
2564
- "regular",
2565
- "700",
2566
- ),
2567
- "Share Tech" => array(
2568
- "regular",
2569
- ),
2570
- "Share Tech Mono" => array(
2571
- "regular",
2572
- ),
2573
- "Shojumaru" => array(
2574
- "regular",
2575
- ),
2576
- "Short Stack" => array(
2577
- "regular",
2578
- ),
2579
- "Siemreap" => array(
2580
- "regular",
2581
- ),
2582
- "Sigmar One" => array(
2583
- "regular",
2584
- ),
2585
- "Signika" => array(
2586
- "300",
2587
- "regular",
2588
- "600",
2589
- "700",
2590
- ),
2591
- "Signika Negative" => array(
2592
- "300",
2593
- "regular",
2594
- "600",
2595
- "700",
2596
- ),
2597
- "Simonetta" => array(
2598
- "regular",
2599
- "900",
2600
- ),
2601
- "Sintony" => array(
2602
- "regular",
2603
- "700",
2604
- ),
2605
- "Sirin Stencil" => array(
2606
- "regular",
2607
- ),
2608
- "Six Caps" => array(
2609
- "regular",
2610
- ),
2611
- "Skranji" => array(
2612
- "regular",
2613
- "700",
2614
- ),
2615
- "Slabo 13px" => array(
2616
- "regular",
2617
- ),
2618
- "Slabo 27px" => array(
2619
- "regular",
2620
- ),
2621
- "Slackey" => array(
2622
- "regular",
2623
- ),
2624
- "Smokum" => array(
2625
- "regular",
2626
- ),
2627
- "Smythe" => array(
2628
- "regular",
2629
- ),
2630
- "Sniglet" => array(
2631
- "regular",
2632
- "800",
2633
- ),
2634
- "Snippet" => array(
2635
- "regular",
2636
- ),
2637
- "Snowburst One" => array(
2638
- "regular",
2639
- ),
2640
- "Sofadi One" => array(
2641
- "regular",
2642
- ),
2643
- "Sofia" => array(
2644
- "regular",
2645
- ),
2646
- "Sonsie One" => array(
2647
- "regular",
2648
- ),
2649
- "Sorts Mill Goudy" => array(
2650
- "regular",
2651
- ),
2652
- "Source Code Pro" => array(
2653
- "200",
2654
- "300",
2655
- "regular",
2656
- "500",
2657
- "600",
2658
- "700",
2659
- "900",
2660
- ),
2661
- "Source Sans Pro" => array(
2662
- "200",
2663
- "300",
2664
- "regular",
2665
- "600",
2666
- "700",
2667
- "900",
2668
- ),
2669
- "Source Serif Pro" => array(
2670
- "regular",
2671
- "600",
2672
- "700",
2673
- ),
2674
- "Special Elite" => array(
2675
- "regular",
2676
- ),
2677
- "Spicy Rice" => array(
2678
- "regular",
2679
- ),
2680
- "Spinnaker" => array(
2681
- "regular",
2682
- ),
2683
- "Spirax" => array(
2684
- "regular",
2685
- ),
2686
- "Squada One" => array(
2687
- "regular",
2688
- ),
2689
- "Sree Krushnadevaraya" => array(
2690
- "regular",
2691
- ),
2692
- "Stalemate" => array(
2693
- "regular",
2694
- ),
2695
- "Stalinist One" => array(
2696
- "regular",
2697
- ),
2698
- "Stardos Stencil" => array(
2699
- "regular",
2700
- "700",
2701
- ),
2702
- "Stint Ultra Condensed" => array(
2703
- "regular",
2704
- ),
2705
- "Stint Ultra Expanded" => array(
2706
- "regular",
2707
- ),
2708
- "Stoke" => array(
2709
- "300",
2710
- "regular",
2711
- ),
2712
- "Strait" => array(
2713
- "regular",
2714
- ),
2715
- "Sue Ellen Francisco" => array(
2716
- "regular",
2717
- ),
2718
- "Sumana" => array(
2719
- "regular",
2720
- "700",
2721
- ),
2722
- "Sunshiney" => array(
2723
- "regular",
2724
- ),
2725
- "Supermercado One" => array(
2726
- "regular",
2727
- ),
2728
- "Sura" => array(
2729
- "regular",
2730
- "700",
2731
- ),
2732
- "Suranna" => array(
2733
- "regular",
2734
- ),
2735
- "Suravaram" => array(
2736
- "regular",
2737
- ),
2738
- "Suwannaphum" => array(
2739
- "regular",
2740
- ),
2741
- "Swanky and Moo Moo" => array(
2742
- "regular",
2743
- ),
2744
- "Syncopate" => array(
2745
- "regular",
2746
- "700",
2747
- ),
2748
- "Tangerine" => array(
2749
- "regular",
2750
- "700",
2751
- ),
2752
- "Taprom" => array(
2753
- "regular",
2754
- ),
2755
- "Tauri" => array(
2756
- "regular",
2757
- ),
2758
- "Teko" => array(
2759
- "300",
2760
- "regular",
2761
- "500",
2762
- "600",
2763
- "700",
2764
- ),
2765
- "Telex" => array(
2766
- "regular",
2767
- ),
2768
- "Tenali Ramakrishna" => array(
2769
- "regular",
2770
- ),
2771
- "Tenor Sans" => array(
2772
- "regular",
2773
- ),
2774
- "Text Me One" => array(
2775
- "regular",
2776
- ),
2777
- "The Girl Next Door" => array(
2778
- "regular",
2779
- ),
2780
- "Tienne" => array(
2781
- "regular",
2782
- "700",
2783
- "900",
2784
- ),
2785
- "Tillana" => array(
2786
- "regular",
2787
- "500",
2788
- "600",
2789
- "700",
2790
- "800",
2791
- ),
2792
- "Timmana" => array(
2793
- "regular",
2794
- ),
2795
- "Tinos" => array(
2796
- "regular",
2797
- "700",
2798
- ),
2799
- "Titan One" => array(
2800
- "regular",
2801
- ),
2802
- "Titillium Web" => array(
2803
- "200",
2804
- "300",
2805
- "regular",
2806
- "600",
2807
- "700",
2808
- "900",
2809
- ),
2810
- "Trade Winds" => array(
2811
- "regular",
2812
- ),
2813
- "Trocchi" => array(
2814
- "regular",
2815
- ),
2816
- "Trochut" => array(
2817
- "regular",
2818
- "700",
2819
- ),
2820
- "Trykker" => array(
2821
- "regular",
2822
- ),
2823
- "Tulpen One" => array(
2824
- "regular",
2825
- ),
2826
- "Ubuntu" => array(
2827
- "300",
2828
- "regular",
2829
- "500",
2830
- "700",
2831
- ),
2832
- "Ubuntu Condensed" => array(
2833
- "regular",
2834
- ),
2835
- "Ubuntu Mono" => array(
2836
- "regular",
2837
- "700",
2838
- ),
2839
- "Ultra" => array(
2840
- "regular",
2841
- ),
2842
- "Uncial Antiqua" => array(
2843
- "regular",
2844
- ),
2845
- "Underdog" => array(
2846
- "regular",
2847
- ),
2848
- "Unica One" => array(
2849
- "regular",
2850
- ),
2851
- "UnifrakturCook" => array(
2852
- "700",
2853
- ),
2854
- "UnifrakturMaguntia" => array(
2855
- "regular",
2856
- ),
2857
- "Unkempt" => array(
2858
- "regular",
2859
- "700",
2860
- ),
2861
- "Unlock" => array(
2862
- "regular",
2863
- ),
2864
- "Unna" => array(
2865
- "regular",
2866
- ),
2867
- "VT323" => array(
2868
- "regular",
2869
- ),
2870
- "Vampiro One" => array(
2871
- "regular",
2872
- ),
2873
- "Varela" => array(
2874
- "regular",
2875
- ),
2876
- "Varela Round" => array(
2877
- "regular",
2878
- ),
2879
- "Vast Shadow" => array(
2880
- "regular",
2881
- ),
2882
- "Vesper Libre" => array(
2883
- "regular",
2884
- "500",
2885
- "700",
2886
- "900",
2887
- ),
2888
- "Vibur" => array(
2889
- "regular",
2890
- ),
2891
- "Vidaloka" => array(
2892
- "regular",
2893
- ),
2894
- "Viga" => array(
2895
- "regular",
2896
- ),
2897
- "Voces" => array(
2898
- "regular",
2899
- ),
2900
- "Volkhov" => array(
2901
- "regular",
2902
- "700",
2903
- ),
2904
- "Vollkorn" => array(
2905
- "regular",
2906
- "700",
2907
- ),
2908
- "Voltaire" => array(
2909
- "regular",
2910
- ),
2911
- "Waiting for the Sunrise" => array(
2912
- "regular",
2913
- ),
2914
- "Wallpoet" => array(
2915
- "regular",
2916
- ),
2917
- "Walter Turncoat" => array(
2918
- "regular",
2919
- ),
2920
- "Warnes" => array(
2921
- "regular",
2922
- ),
2923
- "Wellfleet" => array(
2924
- "regular",
2925
- ),
2926
- "Wendy One" => array(
2927
- "regular",
2928
- ),
2929
- "Wire One" => array(
2930
- "regular",
2931
- ),
2932
- "Work Sans" => array(
2933
- "100",
2934
- "200",
2935
- "300",
2936
- "regular",
2937
- "500",
2938
- "600",
2939
- "700",
2940
- "800",
2941
- "900",
2942
- ),
2943
- "Yanone Kaffeesatz" => array(
2944
- "200",
2945
- "300",
2946
- "regular",
2947
- "700",
2948
- ),
2949
- "Yantramanav" => array(
2950
- "100",
2951
- "300",
2952
- "regular",
2953
- "500",
2954
- "700",
2955
- "900",
2956
- ),
2957
- "Yellowtail" => array(
2958
- "regular",
2959
- ),
2960
- "Yeseva One" => array(
2961
- "regular",
2962
- ),
2963
- "Yesteryear" => array(
2964
- "regular",
2965
- ),
2966
- "Zeyada" => array(
2967
- "regular",
2968
- ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2969
  );
2970
  }
22
  */
23
  static public function js()
24
  {
25
+ $default = json_encode( apply_filters( 'fl_builder_font_families_default', FLBuilderFontFamilies::$default ) );
26
+ $system = json_encode( apply_filters( 'fl_builder_font_families_system', FLBuilderFontFamilies::$system ) );
27
+ $google = json_encode( apply_filters( 'fl_builder_font_families_google', FLBuilderFontFamilies::$google ) );
28
+
29
  echo 'var FLBuilderFontFamilies = { default: '. $default .', system: '. $system .', google: '. $google .' };';
30
  }
31
 
38
  */
39
  static public function display_select_font($font)
40
  {
41
+ $system_fonts = apply_filters( 'fl_builder_font_families_system', FLBuilderFontFamilies::$system );
42
+ $google_fonts = apply_filters( 'fl_builder_font_families_google', FLBuilderFontFamilies::$google );
43
+
44
  echo '<option value="Default" '. selected('Default', $font) .'>'. __( 'Default', 'fl-builder' ) .'</option>';
45
  echo '<optgroup label="System">';
46
+
47
+ foreach( $system_fonts as $name => $variants ) {
48
  echo '<option value="'. $name .'" '. selected($name, $font) .'>'. $name .'</option>';
49
  }
50
+
51
  echo '<optgroup label="Google">';
52
+
53
+ foreach( $google_fonts as $name => $variants ) {
54
  echo '<option value="'. $name .'" '. selected($name, $font) .'>'. $name .'</option>';
55
  }
56
  }
64
  * @return void
65
  */
66
  static public function display_select_weight( $font, $weight )
67
+ {
68
  if( $font == 'Default' ){
69
+ echo '<option value="default">'. __( 'Default', 'fl-builder' ) .'</option>';
70
  } else {
71
+ $system_fonts = apply_filters( 'fl_builder_font_families_system', FLBuilderFontFamilies::$system );
72
+ $google_fonts = apply_filters( 'fl_builder_font_families_google', FLBuilderFontFamilies::$google );
73
 
74
+ if( array_key_exists( $font, $system_fonts ) ){
75
+ foreach( $system_fonts[ $font ]['weights'] as $variant ) {
 
76
  echo '<option value="'. $variant .'" '. selected($variant, $weight) .'>'. FLBuilderFonts::get_weight_string( $variant ) .'</option>';
77
  }
78
 
79
  } else {
80
+ foreach( $google_fonts[ $font ] as $variant) {
81
 
82
  echo '<option value="'. $variant .'" '. selected($variant, $weight) .'>'. FLBuilderFonts::get_weight_string( $variant ) .'</option>';
83
  }
84
 
85
  }
86
+
87
  }
88
+
89
  }
90
 
91
  /**
110
  '800' => 'Extra-Bold 800',
111
  '900' => 'Ultra-Bold 900'
112
  );
113
+
114
  return $weight_string[ $weight ];
115
  }
116
 
123
  */
124
  static public function font_css( $font ){
125
 
126
+ $system_fonts = apply_filters( 'fl_builder_font_families_system', FLBuilderFontFamilies::$system );
127
+
128
  $css = '';
129
 
130
+ if( array_key_exists( $font['family'], $system_fonts ) ){
131
+
132
+ $css .= 'font-family: '. $font['family'] .','. $system_fonts[ $font['family'] ]['fallback'] .';';
133
 
134
  } else {
135
  $css .= 'font-family: '. $font['family'] .';';
136
+ }
137
 
138
  if ( 'regular' == $font['weight'] ) {
139
  $css .= 'font-weight: normal;';
179
  static private function add_fonts_for_nested_module_form( $module, $form, $setting )
180
  {
181
  $fields = FLBuilderModel::get_settings_form_fields( $form );
182
+
183
  foreach ( $fields as $name => $field ) {
184
  if ( $field['type'] == 'font' && isset( $module->settings->$setting ) ) {
185
  foreach ( $module->settings->$setting as $key => $val ) {
211
  }
212
 
213
  $google_url = substr( $google_url, 0, -1 );
214
+
215
  wp_enqueue_style( 'fl-builder-google-fonts-' . md5( $google_url ), $google_url, array() );
216
+
217
  self::$fonts = array();
218
+ }
219
  }
220
 
221
  /**
229
 
230
  if( $font['family'] != 'Default' ){
231
 
232
+ $system_fonts = apply_filters( 'fl_builder_font_families_system', FLBuilderFontFamilies::$system );
233
+
234
  // check if is a Google Font
235
+ if( !array_key_exists( $font['family'], $system_fonts ) ){
236
 
237
  // check if font family is already added
238
  if( array_key_exists( $font['family'], self::$fonts ) ){
322
  )
323
  ),
324
  );
325
+
326
  /**
327
  * Array with Google Fonts.
328
  * @var array
331
  "ABeeZee" => array(
332
  "regular",
333
  ),
334
+ "Abel" => array(
335
+ "regular",
336
+ ),
337
+ "Abhaya Libre" => array(
338
+ "regular",
339
+ "500",
340
+ "600",
341
+ "700",
342
+ "800",
343
+ ),
344
+ "Abril Fatface" => array(
345
+ "regular",
346
+ ),
347
+ "Aclonica" => array(
348
+ "regular",
349
+ ),
350
+ "Acme" => array(
351
+ "regular",
352
+ ),
353
+ "Actor" => array(
354
+ "regular",
355
+ ),
356
+ "Adamina" => array(
357
+ "regular",
358
+ ),
359
+ "Advent Pro" => array(
360
+ "100",
361
+ "200",
362
+ "300",
363
+ "regular",
364
+ "500",
365
+ "600",
366
+ "700",
367
+ ),
368
+ "Aguafina Script" => array(
369
+ "regular",
370
+ ),
371
+ "Akronim" => array(
372
+ "regular",
373
+ ),
374
+ "Aladin" => array(
375
+ "regular",
376
+ ),
377
+ "Aldrich" => array(
378
+ "regular",
379
+ ),
380
+ "Alef" => array(
381
+ "regular",
382
+ "700",
383
+ ),
384
+ "Alegreya" => array(
385
+ "regular",
386
+ "700",
387
+ "900",
388
+ ),
389
+ "Alegreya SC" => array(
390
+ "regular",
391
+ "700",
392
+ "900",
393
+ ),
394
+ "Alegreya Sans" => array(
395
+ "100",
396
+ "300",
397
+ "regular",
398
+ "500",
399
+ "700",
400
+ "800",
401
+ "900",
402
+ ),
403
+ "Alegreya Sans SC" => array(
404
+ "100",
405
+ "300",
406
+ "regular",
407
+ "500",
408
+ "700",
409
+ "800",
410
+ "900",
411
+ ),
412
+ "Alex Brush" => array(
413
+ "regular",
414
+ ),
415
+ "Alfa Slab One" => array(
416
+ "regular",
417
+ ),
418
+ "Alice" => array(
419
+ "regular",
420
+ ),
421
+ "Alike" => array(
422
+ "regular",
423
+ ),
424
+ "Alike Angular" => array(
425
+ "regular",
426
+ ),
427
+ "Allan" => array(
428
+ "regular",
429
+ "700",
430
+ ),
431
+ "Allerta" => array(
432
+ "regular",
433
+ ),
434
+ "Allerta Stencil" => array(
435
+ "regular",
436
+ ),
437
+ "Allura" => array(
438
+ "regular",
439
+ ),
440
+ "Almendra" => array(
441
+ "regular",
442
+ "700",
443
+ ),
444
+ "Almendra Display" => array(
445
+ "regular",
446
+ ),
447
+ "Almendra SC" => array(
448
+ "regular",
449
+ ),
450
+ "Amarante" => array(
451
+ "regular",
452
+ ),
453
+ "Amaranth" => array(
454
+ "regular",
455
+ "700",
456
+ ),
457
+ "Amatic SC" => array(
458
+ "regular",
459
+ "700",
460
+ ),
461
+ "Amatica SC" => array(
462
+ "regular",
463
+ "700",
464
+ ),
465
+ "Amethysta" => array(
466
+ "regular",
467
+ ),
468
+ "Amiko" => array(
469
+ "regular",
470
+ "600",
471
+ "700",
472
+ ),
473
+ "Amiri" => array(
474
+ "regular",
475
+ "700",
476
+ ),
477
+ "Amita" => array(
478
+ "regular",
479
+ "700",
480
+ ),
481
+ "Anaheim" => array(
482
+ "regular",
483
+ ),
484
+ "Andada" => array(
485
+ "regular",
486
+ ),
487
+ "Andika" => array(
488
+ "regular",
489
+ ),
490
+ "Angkor" => array(
491
+ "regular",
492
+ ),
493
+ "Annie Use Your Telescope" => array(
494
+ "regular",
495
+ ),
496
+ "Anonymous Pro" => array(
497
+ "regular",
498
+ "700",
499
+ ),
500
+ "Antic" => array(
501
+ "regular",
502
+ ),
503
+ "Antic Didone" => array(
504
+ "regular",
505
+ ),
506
+ "Antic Slab" => array(
507
+ "regular",
508
+ ),
509
+ "Anton" => array(
510
+ "regular",
511
+ ),
512
+ "Arapey" => array(
513
+ "regular",
514
+ ),
515
+ "Arbutus" => array(
516
+ "regular",
517
+ ),
518
+ "Arbutus Slab" => array(
519
+ "regular",
520
+ ),
521
+ "Architects Daughter" => array(
522
+ "regular",
523
+ ),
524
+ "Archivo Black" => array(
525
+ "regular",
526
+ ),
527
+ "Archivo Narrow" => array(
528
+ "regular",
529
+ "700",
530
+ ),
531
+ "Aref Ruqaa" => array(
532
+ "regular",
533
+ "700",
534
+ ),
535
+ "Arima Madurai" => array(
536
+ "100",
537
+ "200",
538
+ "300",
539
+ "regular",
540
+ "500",
541
+ "700",
542
+ "800",
543
+ "900",
544
+ ),
545
+ "Arimo" => array(
546
+ "regular",
547
+ "700",
548
+ ),
549
+ "Arizonia" => array(
550
+ "regular",
551
+ ),
552
+ "Armata" => array(
553
+ "regular",
554
+ ),
555
+ "Artifika" => array(
556
+ "regular",
557
+ ),
558
+ "Arvo" => array(
559
+ "regular",
560
+ "700",
561
+ ),
562
+ "Arya" => array(
563
+ "regular",
564
+ "700",
565
+ ),
566
+ "Asap" => array(
567
+ "regular",
568
+ "700",
569
+ ),
570
+ "Asar" => array(
571
+ "regular",
572
+ ),
573
+ "Asset" => array(
574
+ "regular",
575
+ ),
576
+ "Assistant" => array(
577
+ "200",
578
+ "300",
579
+ "regular",
580
+ "600",
581
+ "700",
582
+ "800",
583
+ ),
584
+ "Astloch" => array(
585
+ "regular",
586
+ "700",
587
+ ),
588
+ "Asul" => array(
589
+ "regular",
590
+ "700",
591
+ ),
592
+ "Athiti" => array(
593
+ "200",
594
+ "300",
595
+ "regular",
596
+ "500",
597
+ "600",
598
+ "700",
599
+ ),
600
+ "Atma" => array(
601
+ "300",
602
+ "regular",
603
+ "500",
604
+ "600",
605
+ "700",
606
+ ),
607
+ "Atomic Age" => array(
608
+ "regular",
609
+ ),
610
+ "Aubrey" => array(
611
+ "regular",
612
+ ),
613
+ "Audiowide" => array(
614
+ "regular",
615
+ ),
616
+ "Autour One" => array(
617
+ "regular",
618
+ ),
619
+ "Average" => array(
620
+ "regular",
621
+ ),
622
+ "Average Sans" => array(
623
+ "regular",
624
+ ),
625
+ "Averia Gruesa Libre" => array(
626
+ "regular",
627
+ ),
628
+ "Averia Libre" => array(
629
+ "300",
630
+ "regular",
631
+ "700",
632
+ ),
633
+ "Averia Sans Libre" => array(
634
+ "300",
635
+ "regular",
636
+ "700",
637
+ ),
638
+ "Averia Serif Libre" => array(
639
+ "300",
640
+ "regular",
641
+ "700",
642
+ ),
643
+ "Bad Script" => array(
644
+ "regular",
645
+ ),
646
+ "Baloo" => array(
647
+ "regular",
648
+ ),
649
+ "Baloo Bhai" => array(
650
+ "regular",
651
+ ),
652
+ "Baloo Bhaina" => array(
653
+ "regular",
654
+ ),
655
+ "Baloo Chettan" => array(
656
+ "regular",
657
+ ),
658
+ "Baloo Da" => array(
659
+ "regular",
660
+ ),
661
+ "Baloo Paaji" => array(
662
+ "regular",
663
+ ),
664
+ "Baloo Tamma" => array(
665
+ "regular",
666
+ ),
667
+ "Baloo Thambi" => array(
668
+ "regular",
669
+ ),
670
+ "Balthazar" => array(
671
+ "regular",
672
+ ),
673
+ "Bangers" => array(
674
+ "regular",
675
+ ),
676
+ "Basic" => array(
677
+ "regular",
678
+ ),
679
+ "Battambang" => array(
680
+ "regular",
681
+ "700",
682
+ ),
683
+ "Baumans" => array(
684
+ "regular",
685
+ ),
686
+ "Bayon" => array(
687
+ "regular",
688
+ ),
689
+ "Belgrano" => array(
690
+ "regular",
691
+ ),
692
+ "Belleza" => array(
693
+ "regular",
694
+ ),
695
+ "BenchNine" => array(
696
+ "300",
697
+ "regular",
698
+ "700",
699
+ ),
700
+ "Bentham" => array(
701
+ "regular",
702
+ ),
703
+ "Berkshire Swash" => array(
704
+ "regular",
705
+ ),
706
+ "Bevan" => array(
707
+ "regular",
708
+ ),
709
+ "Bigelow Rules" => array(
710
+ "regular",
711
+ ),
712
+ "Bigshot One" => array(
713
+ "regular",
714
+ ),
715
+ "Bilbo" => array(
716
+ "regular",
717
+ ),
718
+ "Bilbo Swash Caps" => array(
719
+ "regular",
720
+ ),
721
+ "BioRhyme" => array(
722
+ "200",
723
+ "300",
724
+ "regular",
725
+ "700",
726
+ "800",
727
+ ),
728
+ "BioRhyme Expanded" => array(
729
+ "200",
730
+ "300",
731
+ "regular",
732
+ "700",
733
+ "800",
734
+ ),
735
+ "Biryani" => array(
736
+ "200",
737
+ "300",
738
+ "regular",
739
+ "600",
740
+ "700",
741
+ "800",
742
+ "900",
743
+ ),
744
+ "Bitter" => array(
745
+ "regular",
746
+ "700",
747
+ ),
748
+ "Black Ops One" => array(
749
+ "regular",
750
+ ),
751
+ "Bokor" => array(
752
+ "regular",
753
+ ),
754
+ "Bonbon" => array(
755
+ "regular",
756
+ ),
757
+ "Boogaloo" => array(
758
+ "regular",
759
+ ),
760
+ "Bowlby One" => array(
761
+ "regular",
762
+ ),
763
+ "Bowlby One SC" => array(
764
+ "regular",
765
+ ),
766
+ "Brawler" => array(
767
+ "regular",
768
+ ),
769
+ "Bree Serif" => array(
770
+ "regular",
771
+ ),
772
+ "Bubblegum Sans" => array(
773
+ "regular",
774
+ ),
775
+ "Bubbler One" => array(
776
+ "regular",
777
+ ),
778
+ "Buda" => array(
779
+ "300",
780
+ ),
781
+ "Buenard" => array(
782
+ "regular",
783
+ "700",
784
+ ),
785
+ "Bungee" => array(
786
+ "regular",
787
+ ),
788
+ "Bungee Hairline" => array(
789
+ "regular",
790
+ ),
791
+ "Bungee Inline" => array(
792
+ "regular",
793
+ ),
794
+ "Bungee Outline" => array(
795
+ "regular",
796
+ ),
797
+ "Bungee Shade" => array(
798
+ "regular",
799
+ ),
800
+ "Butcherman" => array(
801
+ "regular",
802
+ ),
803
+ "Butterfly Kids" => array(
804
+ "regular",
805
+ ),
806
+ "Cabin" => array(
807
+ "regular",
808
+ "500",
809
+ "600",
810
+ "700",
811
+ ),
812
+ "Cabin Condensed" => array(
813
+ "regular",
814
+ "500",
815
+ "600",
816
+ "700",
817
+ ),
818
+ "Cabin Sketch" => array(
819
+ "regular",
820
+ "700",
821
+ ),
822
+ "Caesar Dressing" => array(
823
+ "regular",
824
+ ),
825
+ "Cagliostro" => array(
826
+ "regular",
827
+ ),
828
+ "Cairo" => array(
829
+ "200",
830
+ "300",
831
+ "regular",
832
+ "600",
833
+ "700",
834
+ "900",
835
+ ),
836
+ "Calligraffitti" => array(
837
+ "regular",
838
+ ),
839
+ "Cambay" => array(
840
+ "regular",
841
+ "700",
842
+ ),
843
+ "Cambo" => array(
844
+ "regular",
845
+ ),
846
+ "Candal" => array(
847
+ "regular",
848
+ ),
849
+ "Cantarell" => array(
850
+ "regular",
851
+ "700",
852
+ ),
853
+ "Cantata One" => array(
854
+ "regular",
855
+ ),
856
+ "Cantora One" => array(
857
+ "regular",
858
+ ),
859
+ "Capriola" => array(
860
+ "regular",
861
+ ),
862
+ "Cardo" => array(
863
+ "regular",
864
+ "700",
865
+ ),
866
+ "Carme" => array(
867
+ "regular",
868
+ ),
869
+ "Carrois Gothic" => array(
870
+ "regular",
871
+ ),
872
+ "Carrois Gothic SC" => array(
873
+ "regular",
874
+ ),
875
+ "Carter One" => array(
876
+ "regular",
877
+ ),
878
+ "Catamaran" => array(
879
+ "100",
880
+ "200",
881
+ "300",
882
+ "regular",
883
+ "500",
884
+ "600",
885
+ "700",
886
+ "800",
887
+ "900",
888
+ ),
889
+ "Caudex" => array(
890
+ "regular",
891
+ "700",
892
+ ),
893
+ "Caveat" => array(
894
+ "regular",
895
+ "700",
896
+ ),
897
+ "Caveat Brush" => array(
898
+ "regular",
899
+ ),
900
+ "Cedarville Cursive" => array(
901
+ "regular",
902
+ ),
903
+ "Ceviche One" => array(
904
+ "regular",
905
+ ),
906
+ "Changa" => array(
907
+ "200",
908
+ "300",
909
+ "regular",
910
+ "500",
911
+ "600",
912
+ "700",
913
+ "800",
914
+ ),
915
+ "Changa One" => array(
916
+ "regular",
917
+ ),
918
+ "Chango" => array(
919
+ "regular",
920
+ ),
921
+ "Chathura" => array(
922
+ "100",
923
+ "300",
924
+ "regular",
925
+ "700",
926
+ "800",
927
+ ),
928
+ "Chau Philomene One" => array(
929
+ "regular",
930
+ ),
931
+ "Chela One" => array(
932
+ "regular",
933
+ ),
934
+ "Chelsea Market" => array(
935
+ "regular",
936
+ ),
937
+ "Chenla" => array(
938
+ "regular",
939
+ ),
940
+ "Cherry Cream Soda" => array(
941
+ "regular",
942
+ ),
943
+ "Cherry Swash" => array(
944
+ "regular",
945
+ "700",
946
+ ),
947
+ "Chewy" => array(
948
+ "regular",
949
+ ),
950
+ "Chicle" => array(
951
+ "regular",
952
+ ),
953
+ "Chivo" => array(
954
+ "regular",
955
+ "900",
956
+ ),
957
+ "Chonburi" => array(
958
+ "regular",
959
+ ),
960
+ "Cinzel" => array(
961
+ "regular",
962
+ "700",
963
+ "900",
964
+ ),
965
+ "Cinzel Decorative" => array(
966
+ "regular",
967
+ "700",
968
+ "900",
969
+ ),
970
+ "Clicker Script" => array(
971
+ "regular",
972
+ ),
973
+ "Coda" => array(
974
+ "regular",
975
+ "800",
976
+ ),
977
+ "Coda Caption" => array(
978
+ "800",
979
+ ),
980
+ "Codystar" => array(
981
+ "300",
982
+ "regular",
983
+ ),
984
+ "Coiny" => array(
985
+ "regular",
986
+ ),
987
+ "Combo" => array(
988
+ "regular",
989
+ ),
990
+ "Comfortaa" => array(
991
+ "300",
992
+ "regular",
993
+ "700",
994
+ ),
995
+ "Coming Soon" => array(
996
+ "regular",
997
+ ),
998
+ "Concert One" => array(
999
+ "regular",
1000
+ ),
1001
+ "Condiment" => array(
1002
+ "regular",
1003
+ ),
1004
+ "Content" => array(
1005
+ "regular",
1006
+ "700",
1007
+ ),
1008
+ "Contrail One" => array(
1009
+ "regular",
1010
+ ),
1011
+ "Convergence" => array(
1012
+ "regular",
1013
+ ),
1014
+ "Cookie" => array(
1015
+ "regular",
1016
+ ),
1017
+ "Copse" => array(
1018
+ "regular",
1019
+ ),
1020
+ "Corben" => array(
1021
+ "regular",
1022
+ "700",
1023
+ ),
1024
+ "Cormorant" => array(
1025
+ "300",
1026
+ "regular",
1027
+ "500",
1028
+ "600",
1029
+ "700",
1030
+ ),
1031
+ "Cormorant Garamond" => array(
1032
+ "300",
1033
+ "regular",
1034
+ "500",
1035
+ "600",
1036
+ "700",
1037
+ ),
1038
+ "Cormorant Infant" => array(
1039
+ "300",
1040
+ "regular",
1041
+ "500",
1042
+ "600",
1043
+ "700",
1044
+ ),
1045
+ "Cormorant SC" => array(
1046
+ "300",
1047
+ "regular",
1048
+ "500",
1049
+ "600",
1050
+ "700",
1051
+ ),
1052
+ "Cormorant Unicase" => array(
1053
+ "300",
1054
+ "regular",
1055
+ "500",
1056
+ "600",
1057
+ "700",
1058
+ ),
1059
+ "Cormorant Upright" => array(
1060
+ "300",
1061
+ "regular",
1062
+ "500",
1063
+ "600",
1064
+ "700",
1065
+ ),
1066
+ "Courgette" => array(
1067
+ "regular",
1068
+ ),
1069
+ "Cousine" => array(
1070
+ "regular",
1071
+ "700",
1072
+ ),
1073
+ "Coustard" => array(
1074
+ "regular",
1075
+ "900",
1076
+ ),
1077
+ "Covered By Your Grace" => array(
1078
+ "regular",
1079
+ ),
1080
+ "Crafty Girls" => array(
1081
+ "regular",
1082
+ ),
1083
+ "Creepster" => array(
1084
+ "regular",
1085
+ ),
1086
+ "Crete Round" => array(
1087
+ "regular",
1088
+ ),
1089
+ "Crimson Text" => array(
1090
+ "regular",
1091
+ "600",
1092
+ "700",
1093
+ ),
1094
+ "Croissant One" => array(
1095
+ "regular",
1096
+ ),
1097
+ "Crushed" => array(
1098
+ "regular",
1099
+ ),
1100
+ "Cuprum" => array(
1101
+ "regular",
1102
+ "700",
1103
+ ),
1104
+ "Cutive" => array(
1105
+ "regular",
1106
+ ),
1107
+ "Cutive Mono" => array(
1108
+ "regular",
1109
+ ),
1110
+ "Damion" => array(
1111
+ "regular",
1112
+ ),
1113
+ "Dancing Script" => array(
1114
+ "regular",
1115
+ "700",
1116
+ ),
1117
+ "Dangrek" => array(
1118
+ "regular",
1119
+ ),
1120
+ "David Libre" => array(
1121
+ "regular",
1122
+ "500",
1123
+ "700",
1124
+ ),
1125
+ "Dawning of a New Day" => array(
1126
+ "regular",
1127
+ ),
1128
+ "Days One" => array(
1129
+ "regular",
1130
+ ),
1131
+ "Dekko" => array(
1132
+ "regular",
1133
+ ),
1134
+ "Delius" => array(
1135
+ "regular",
1136
+ ),
1137
+ "Delius Swash Caps" => array(
1138
+ "regular",
1139
+ ),
1140
+ "Delius Unicase" => array(
1141
+ "regular",
1142
+ "700",
1143
+ ),
1144
+ "Della Respira" => array(
1145
+ "regular",
1146
+ ),
1147
+ "Denk One" => array(
1148
+ "regular",
1149
+ ),
1150
+ "Devonshire" => array(
1151
+ "regular",
1152
+ ),
1153
+ "Dhurjati" => array(
1154
+ "regular",
1155
+ ),
1156
+ "Didact Gothic" => array(
1157
+ "regular",
1158
+ ),
1159
+ "Diplomata" => array(
1160
+ "regular",
1161
+ ),
1162
+ "Diplomata SC" => array(
1163
+ "regular",
1164
+ ),
1165
+ "Domine" => array(
1166
+ "regular",
1167
+ "700",
1168
+ ),
1169
+ "Donegal One" => array(
1170
+ "regular",
1171
+ ),
1172
+ "Doppio One" => array(
1173
+ "regular",
1174
+ ),
1175
+ "Dorsa" => array(
1176
+ "regular",
1177
+ ),
1178
+ "Dosis" => array(
1179
+ "200",
1180
+ "300",
1181
+ "regular",
1182
+ "500",
1183
+ "600",
1184
+ "700",
1185
+ "800",
1186
+ ),
1187
+ "Dr Sugiyama" => array(
1188
+ "regular",
1189
+ ),
1190
+ "Droid Sans" => array(
1191
+ "regular",
1192
+ "700",
1193
+ ),
1194
+ "Droid Sans Mono" => array(
1195
+ "regular",
1196
+ ),
1197
+ "Droid Serif" => array(
1198
+ "regular",
1199
+ "700",
1200
+ ),
1201
+ "Duru Sans" => array(
1202
+ "regular",
1203
+ ),
1204
+ "Dynalight" => array(
1205
+ "regular",
1206
+ ),
1207
+ "EB Garamond" => array(
1208
+ "regular",
1209
+ ),
1210
+ "Eagle Lake" => array(
1211
+ "regular",
1212
+ ),
1213
+ "Eater" => array(
1214
+ "regular",
1215
+ ),
1216
+ "Economica" => array(
1217
+ "regular",
1218
+ "700",
1219
+ ),
1220
+ "Eczar" => array(
1221
+ "regular",
1222
+ "500",
1223
+ "600",
1224
+ "700",
1225
+ "800",
1226
+ ),
1227
+ "Ek Mukta" => array(
1228
+ "200",
1229
+ "300",
1230
+ "regular",
1231
+ "500",
1232
+ "600",
1233
+ "700",
1234
+ "800",
1235
+ ),
1236
+ "El Messiri" => array(
1237
+ "regular",
1238
+ "500",
1239
+ "600",
1240
+ "700",
1241
+ ),
1242
+ "Electrolize" => array(
1243
+ "regular",
1244
+ ),
1245
+ "Elsie" => array(
1246
+ "regular",
1247
+ "900",
1248
+ ),
1249
+ "Elsie Swash Caps" => array(
1250
+ "regular",
1251
+ "900",
1252
+ ),
1253
+ "Emblema One" => array(
1254
+ "regular",
1255
+ ),
1256
+ "Emilys Candy" => array(
1257
+ "regular",
1258
+ ),
1259
+ "Engagement" => array(
1260
+ "regular",
1261
+ ),
1262
+ "Englebert" => array(
1263
+ "regular",
1264
+ ),
1265
+ "Enriqueta" => array(
1266
+ "regular",
1267
+ "700",
1268
+ ),
1269
+ "Erica One" => array(
1270
+ "regular",
1271
+ ),
1272
+ "Esteban" => array(
1273
+ "regular",
1274
+ ),
1275
+ "Euphoria Script" => array(
1276
+ "regular",
1277
+ ),
1278
+ "Ewert" => array(
1279
+ "regular",
1280
+ ),
1281
+ "Exo" => array(
1282
+ "100",
1283
+ "200",
1284
+ "300",
1285
+ "regular",
1286
+ "500",
1287
+ "600",
1288
+ "700",
1289
+ "800",
1290
+ "900",
1291
+ ),
1292
+ "Exo 2" => array(
1293
+ "100",
1294
+ "200",
1295
+ "300",
1296
+ "regular",
1297
+ "500",
1298
+ "600",
1299
+ "700",
1300
+ "800",
1301
+ "900",
1302
+ ),
1303
+ "Expletus Sans" => array(
1304
+ "regular",
1305
+ "500",
1306
+ "600",
1307
+ "700",
1308
+ ),
1309
+ "Fanwood Text" => array(
1310
+ "regular",
1311
+ ),
1312
+ "Farsan" => array(
1313
+ "regular",
1314
+ ),
1315
+ "Fascinate" => array(
1316
+ "regular",
1317
+ ),
1318
+ "Fascinate Inline" => array(
1319
+ "regular",
1320
+ ),
1321
+ "Faster One" => array(
1322
+ "regular",
1323
+ ),
1324
+ "Fasthand" => array(
1325
+ "regular",
1326
+ ),
1327
+ "Fauna One" => array(
1328
+ "regular",
1329
+ ),
1330
+ "Federant" => array(
1331
+ "regular",
1332
+ ),
1333
+ "Federo" => array(
1334
+ "regular",
1335
+ ),
1336
+ "Felipa" => array(
1337
+ "regular",
1338
+ ),
1339
+ "Fenix" => array(
1340
+ "regular",
1341
+ ),
1342
+ "Finger Paint" => array(
1343
+ "regular",
1344
+ ),
1345
+ "Fira Mono" => array(
1346
+ "regular",
1347
+ "700",
1348
+ ),
1349
+ "Fira Sans" => array(
1350
+ "300",
1351
+ "regular",
1352
+ "500",
1353
+ "700",
1354
+ ),
1355
+ "Fjalla One" => array(
1356
+ "regular",
1357
+ ),
1358
+ "Fjord One" => array(
1359
+ "regular",
1360
+ ),
1361
+ "Flamenco" => array(
1362
+ "300",
1363
+ "regular",
1364
+ ),
1365
+ "Flavors" => array(
1366
+ "regular",
1367
+ ),
1368
+ "Fondamento" => array(
1369
+ "regular",
1370
+ ),
1371
+ "Fontdiner Swanky" => array(
1372
+ "regular",
1373
+ ),
1374
+ "Forum" => array(
1375
+ "regular",
1376
+ ),
1377
+ "Francois One" => array(
1378
+ "regular",
1379
+ ),
1380
+ "Frank Ruhl Libre" => array(
1381
+ "300",
1382
+ "regular",
1383
+ "500",
1384
+ "700",
1385
+ "900",
1386
+ ),
1387
+ "Freckle Face" => array(
1388
+ "regular",
1389
+ ),
1390
+ "Fredericka the Great" => array(
1391
+ "regular",
1392
+ ),
1393
+ "Fredoka One" => array(
1394
+ "regular",
1395
+ ),
1396
+ "Freehand" => array(
1397
+ "regular",
1398
+ ),
1399
+ "Fresca" => array(
1400
+ "regular",
1401
+ ),
1402
+ "Frijole" => array(
1403
+ "regular",
1404
+ ),
1405
+ "Fruktur" => array(
1406
+ "regular",
1407
+ ),
1408
+ "Fugaz One" => array(
1409
+ "regular",
1410
+ ),
1411
+ "GFS Didot" => array(
1412
+ "regular",
1413
+ ),
1414
+ "GFS Neohellenic" => array(
1415
+ "regular",
1416
+ "700",
1417
+ ),
1418
+ "Gabriela" => array(
1419
+ "regular",
1420
+ ),
1421
+ "Gafata" => array(
1422
+ "regular",
1423
+ ),
1424
+ "Galada" => array(
1425
+ "regular",
1426
+ ),
1427
+ "Galdeano" => array(
1428
+ "regular",
1429
+ ),
1430
+ "Galindo" => array(
1431
+ "regular",
1432
+ ),
1433
+ "Gentium Basic" => array(
1434
+ "regular",
1435
+ "700",
1436
+ ),
1437
+ "Gentium Book Basic" => array(
1438
+ "regular",
1439
+ "700",
1440
+ ),
1441
+ "Geo" => array(
1442
+ "regular",
1443
+ ),
1444
+ "Geostar" => array(
1445
+ "regular",
1446
+ ),
1447
+ "Geostar Fill" => array(
1448
+ "regular",
1449
+ ),
1450
+ "Germania One" => array(
1451
+ "regular",
1452
+ ),
1453
+ "Gidugu" => array(
1454
+ "regular",
1455
+ ),
1456
+ "Gilda Display" => array(
1457
+ "regular",
1458
+ ),
1459
+ "Give You Glory" => array(
1460
+ "regular",
1461
+ ),
1462
+ "Glass Antiqua" => array(
1463
+ "regular",
1464
+ ),
1465
+ "Glegoo" => array(
1466
+ "regular",
1467
+ "700",
1468
+ ),
1469
+ "Gloria Hallelujah" => array(
1470
+ "regular",
1471
+ ),
1472
+ "Goblin One" => array(
1473
+ "regular",
1474
+ ),
1475
+ "Gochi Hand" => array(
1476
+ "regular",
1477
+ ),
1478
+ "Gorditas" => array(
1479
+ "regular",
1480
+ "700",
1481
+ ),
1482
+ "Goudy Bookletter 1911" => array(
1483
+ "regular",
1484
+ ),
1485
+ "Graduate" => array(
1486
+ "regular",
1487
+ ),
1488
+ "Grand Hotel" => array(
1489
+ "regular",
1490
+ ),
1491
+ "Gravitas One" => array(
1492
+ "regular",
1493
+ ),
1494
+ "Great Vibes" => array(
1495
+ "regular",
1496
+ ),
1497
+ "Griffy" => array(
1498
+ "regular",
1499
+ ),
1500
+ "Gruppo" => array(
1501
+ "regular",
1502
+ ),
1503
+ "Gudea" => array(
1504
+ "regular",
1505
+ "700",
1506
+ ),
1507
+ "Gurajada" => array(
1508
+ "regular",
1509
+ ),
1510
+ "Habibi" => array(
1511
+ "regular",
1512
+ ),
1513
+ "Halant" => array(
1514
+ "300",
1515
+ "regular",
1516
+ "500",
1517
+ "600",
1518
+ "700",
1519
+ ),
1520
+ "Hammersmith One" => array(
1521
+ "regular",
1522
+ ),
1523
+ "Hanalei" => array(
1524
+ "regular",
1525
+ ),
1526
+ "Hanalei Fill" => array(
1527
+ "regular",
1528
+ ),
1529
+ "Handlee" => array(
1530
+ "regular",
1531
+ ),
1532
+ "Hanuman" => array(
1533
+ "regular",
1534
+ "700",
1535
+ ),
1536
+ "Happy Monkey" => array(
1537
+ "regular",
1538
+ ),
1539
+ "Harmattan" => array(
1540
+ "regular",
1541
+ ),
1542
+ "Headland One" => array(
1543
+ "regular",
1544
+ ),
1545
+ "Heebo" => array(
1546
+ "100",
1547
+ "300",
1548
+ "regular",
1549
+ "500",
1550
+ "700",
1551
+ "800",
1552
+ "900",
1553
+ ),
1554
+ "Henny Penny" => array(
1555
+ "regular",
1556
+ ),
1557
+ "Herr Von Muellerhoff" => array(
1558
+ "regular",
1559
+ ),
1560
+ "Hind" => array(
1561
+ "300",
1562
+ "regular",
1563
+ "500",
1564
+ "600",
1565
+ "700",
1566
+ ),
1567
+ "Hind Guntur" => array(
1568
+ "300",
1569
+ "regular",
1570
+ "500",
1571
+ "600",
1572
+ "700",
1573
+ ),
1574
+ "Hind Madurai" => array(
1575
+ "300",
1576
+ "regular",
1577
+ "500",
1578
+ "600",
1579
+ "700",
1580
+ ),
1581
+ "Hind Siliguri" => array(
1582
+ "300",
1583
+ "regular",
1584
+ "500",
1585
+ "600",
1586
+ "700",
1587
+ ),
1588
+ "Hind Vadodara" => array(
1589
+ "300",
1590
+ "regular",
1591
+ "500",
1592
+ "600",
1593
+ "700",
1594
+ ),
1595
+ "Holtwood One SC" => array(
1596
+ "regular",
1597
+ ),
1598
+ "Homemade Apple" => array(
1599
+ "regular",
1600
+ ),
1601
+ "Homenaje" => array(
1602
+ "regular",
1603
+ ),
1604
+ "IM Fell DW Pica" => array(
1605
+ "regular",
1606
+ ),
1607
+ "IM Fell DW Pica SC" => array(
1608
+ "regular",
1609
+ ),
1610
+ "IM Fell Double Pica" => array(
1611
+ "regular",
1612
+ ),
1613
+ "IM Fell Double Pica SC" => array(
1614
+ "regular",
1615
+ ),
1616
+ "IM Fell English" => array(
1617
+ "regular",
1618
+ ),
1619
+ "IM Fell English SC" => array(
1620
+ "regular",
1621
+ ),
1622
+ "IM Fell French Canon" => array(
1623
+ "regular",
1624
+ ),
1625
+ "IM Fell French Canon SC" => array(
1626
+ "regular",
1627
+ ),
1628
+ "IM Fell Great Primer" => array(
1629
+ "regular",
1630
+ ),
1631
+ "IM Fell Great Primer SC" => array(
1632
+ "regular",
1633
+ ),
1634
+ "Iceberg" => array(
1635
+ "regular",
1636
+ ),
1637
+ "Iceland" => array(
1638
+ "regular",
1639
+ ),
1640
+ "Imprima" => array(
1641
+ "regular",
1642
+ ),
1643
+ "Inconsolata" => array(
1644
+ "regular",
1645
+ "700",
1646
+ ),
1647
+ "Inder" => array(
1648
+ "regular",
1649
+ ),
1650
+ "Indie Flower" => array(
1651
+ "regular",
1652
+ ),
1653
+ "Inika" => array(
1654
+ "regular",
1655
+ "700",
1656
+ ),
1657
+ "Inknut Antiqua" => array(
1658
+ "300",
1659
+ "regular",
1660
+ "500",
1661
+ "600",
1662
+ "700",
1663
+ "800",
1664
+ "900",
1665
+ ),
1666
+ "Irish Grover" => array(
1667
+ "regular",
1668
+ ),
1669
+ "Istok Web" => array(
1670
+ "regular",
1671
+ "700",
1672
+ ),
1673
+ "Italiana" => array(
1674
+ "regular",
1675
+ ),
1676
+ "Italianno" => array(
1677
+ "regular",
1678
+ ),
1679
+ "Itim" => array(
1680
+ "regular",
1681
+ ),
1682
+ "Jacques Francois" => array(
1683
+ "regular",
1684
+ ),
1685
+ "Jacques Francois Shadow" => array(
1686
+ "regular",
1687
+ ),
1688
+ "Jaldi" => array(
1689
+ "regular",
1690
+ "700",
1691
+ ),
1692
+ "Jim Nightshade" => array(
1693
+ "regular",
1694
+ ),
1695
+ "Jockey One" => array(
1696
+ "regular",
1697
+ ),
1698
+ "Jolly Lodger" => array(
1699
+ "regular",
1700
+ ),
1701
+ "Jomhuria" => array(
1702
+ "regular",
1703
+ ),
1704
+ "Josefin Sans" => array(
1705
+ "100",
1706
+ "300",
1707
+ "regular",
1708
+ "600",
1709
+ "700",
1710
+ ),
1711
+ "Josefin Slab" => array(
1712
+ "100",
1713
+ "300",
1714
+ "regular",
1715
+ "600",
1716
+ "700",
1717
+ ),
1718
+ "Joti One" => array(
1719
+ "regular",
1720
+ ),
1721
+ "Judson" => array(
1722
+ "regular",
1723
+ "700",
1724
+ ),
1725
+ "Julee" => array(
1726
+ "regular",
1727
+ ),
1728
+ "Julius Sans One" => array(
1729
+ "regular",
1730
+ ),
1731
+ "Junge" => array(
1732
+ "regular",
1733
+ ),
1734
+ "Jura" => array(
1735
+ "300",
1736
+ "regular",
1737
+ "500",
1738
+ "600",
1739
+ ),
1740
+ "Just Another Hand" => array(
1741
+ "regular",
1742
+ ),
1743
+ "Just Me Again Down Here" => array(
1744
+ "regular",
1745
+ ),
1746
+ "Kadwa" => array(
1747
+ "regular",
1748
+ "700",
1749
+ ),
1750
+ "Kalam" => array(
1751
+ "300",
1752
+ "regular",
1753
+ "700",
1754
+ ),
1755
+ "Kameron" => array(
1756
+ "regular",
1757
+ "700",
1758
+ ),
1759
+ "Kanit" => array(
1760
+ "100",
1761
+ "200",
1762
+ "300",
1763
+ "regular",
1764
+ "500",
1765
+ "600",
1766
+ "700",
1767
+ "800",
1768
+ "900",
1769
+ ),
1770
+ "Kantumruy" => array(
1771
+ "300",
1772
+ "regular",
1773
+ "700",
1774
+ ),
1775
+ "Karla" => array(
1776
+ "regular",
1777
+ "700",
1778
+ ),
1779
+ "Karma" => array(
1780
+ "300",
1781
+ "regular",
1782
+ "500",
1783
+ "600",
1784
+ "700",
1785
+ ),
1786
+ "Katibeh" => array(
1787
+ "regular",
1788
+ ),
1789
+ "Kaushan Script" => array(
1790
+ "regular",
1791
+ ),
1792
+ "Kavivanar" => array(
1793
+ "regular",
1794
+ ),
1795
+ "Kavoon" => array(
1796
+ "regular",
1797
+ ),
1798
+ "Kdam Thmor" => array(
1799
+ "regular",
1800
+ ),
1801
+ "Keania One" => array(
1802
+ "regular",
1803
+ ),
1804
+ "Kelly Slab" => array(
1805
+ "regular",
1806
+ ),
1807
+ "Kenia" => array(
1808
+ "regular",
1809
+ ),
1810
+ "Khand" => array(
1811
+ "300",
1812
+ "regular",
1813
+ "500",
1814
+ "600",
1815
+ "700",
1816
+ ),
1817
+ "Khmer" => array(
1818
+ "regular",
1819
+ ),
1820
+ "Khula" => array(
1821
+ "300",
1822
+ "regular",
1823
+ "600",
1824
+ "700",
1825
+ "800",
1826
+ ),
1827
+ "Kite One" => array(
1828
+ "regular",
1829
+ ),
1830
+ "Knewave" => array(
1831
+ "regular",
1832
+ ),
1833
+ "Kotta One" => array(
1834
+ "regular",
1835
+ ),
1836
+ "Koulen" => array(
1837
+ "regular",
1838
+ ),
1839
+ "Kranky" => array(
1840
+ "regular",
1841
+ ),
1842
+ "Kreon" => array(
1843
+ "300",
1844
+ "regular",
1845
+ "700",
1846
+ ),
1847
+ "Kristi" => array(
1848
+ "regular",
1849
+ ),
1850
+ "Krona One" => array(
1851
+ "regular",
1852
+ ),
1853
+ "Kumar One" => array(
1854
+ "regular",
1855
+ ),
1856
+ "Kumar One Outline" => array(
1857
+ "regular",
1858
+ ),
1859
+ "Kurale" => array(
1860
+ "regular",
1861
+ ),
1862
+ "La Belle Aurore" => array(
1863
+ "regular",
1864
+ ),
1865
+ "Laila" => array(
1866
+ "300",
1867
+ "regular",
1868
+ "500",
1869
+ "600",
1870
+ "700",
1871
+ ),
1872
+ "Lakki Reddy" => array(
1873
+ "regular",
1874
+ ),
1875
+ "Lalezar" => array(
1876
+ "regular",
1877
+ ),
1878
+ "Lancelot" => array(
1879
+ "regular",
1880
+ ),
1881
+ "Lateef" => array(
1882
+ "regular",
1883
+ ),
1884
+ "Lato" => array(
1885
+ "100",
1886
+ "300",
1887
+ "regular",
1888
+ "700",
1889
+ "900",
1890
+ ),
1891
+ "League Script" => array(
1892
+ "regular",
1893
+ ),
1894
+ "Leckerli One" => array(
1895
+ "regular",
1896
+ ),
1897
+ "Ledger" => array(
1898
+ "regular",
1899
+ ),
1900
+ "Lekton" => array(
1901
+ "regular",
1902
+ "700",
1903
+ ),
1904
+ "Lemon" => array(
1905
+ "regular",
1906
+ ),
1907
+ "Lemonada" => array(
1908
+ "300",
1909
+ "regular",
1910
+ "600",
1911
+ "700",
1912
+ ),
1913
+ "Libre Baskerville" => array(
1914
+ "regular",
1915
+ "700",
1916
+ ),
1917
+ "Libre Franklin" => array(
1918
+ "100",
1919
+ "200",
1920
+ "300",
1921
+ "regular",
1922
+ "500",
1923
+ "600",
1924
+ "700",
1925
+ "800",
1926
+ "900",
1927
+ ),
1928
+ "Life Savers" => array(
1929
+ "regular",
1930
+ "700",
1931
+ ),
1932
+ "Lilita One" => array(
1933
+ "regular",
1934
+ ),
1935
+ "Lily Script One" => array(
1936
+ "regular",
1937
+ ),
1938
+ "Limelight" => array(
1939
+ "regular",
1940
+ ),
1941
+ "Linden Hill" => array(
1942
+ "regular",
1943
+ ),
1944
+ "Lobster" => array(
1945
+ "regular",
1946
+ ),
1947
+ "Lobster Two" => array(
1948
+ "regular",
1949
+ "700",
1950
+ ),
1951
+ "Londrina Outline" => array(
1952
+ "regular",
1953
+ ),
1954
+ "Londrina Shadow" => array(
1955
+ "regular",
1956
+ ),
1957
+ "Londrina Sketch" => array(
1958
+ "regular",
1959
+ ),
1960
+ "Londrina Solid" => array(
1961
+ "regular",
1962
+ ),
1963
+ "Lora" => array(
1964
+ "regular",
1965
+ "700",
1966
+ ),
1967
+ "Love Ya Like A Sister" => array(
1968
+ "regular",
1969
+ ),
1970
+ "Loved by the King" => array(
1971
+ "regular",
1972
+ ),
1973
+ "Lovers Quarrel" => array(
1974
+ "regular",
1975
+ ),
1976
+ "Luckiest Guy" => array(
1977
+ "regular",
1978
+ ),
1979
+ "Lusitana" => array(
1980
+ "regular",
1981
+ "700",
1982
+ ),
1983
+ "Lustria" => array(
1984
+ "regular",
1985
+ ),
1986
+ "Macondo" => array(
1987
+ "regular",
1988
+ ),
1989
+ "Macondo Swash Caps" => array(
1990
+ "regular",
1991
+ ),
1992
+ "Mada" => array(
1993
+ "300",
1994
+ "regular",
1995
+ "500",
1996
+ "900",
1997
+ ),
1998
+ "Magra" => array(
1999
+ "regular",
2000
+ "700",
2001
+ ),
2002
+ "Maiden Orange" => array(
2003
+ "regular",
2004
+ ),
2005
+ "Maitree" => array(
2006
+ "200",
2007
+ "300",
2008
+ "regular",
2009
+ "500",
2010
+ "600",
2011
+ "700",
2012
+ ),
2013
+ "Mako" => array(
2014
+ "regular",
2015
+ ),
2016
+ "Mallanna" => array(
2017
+ "regular",
2018
+ ),
2019
+ "Mandali" => array(
2020
+ "regular",
2021
+ ),
2022
+ "Marcellus" => array(
2023
+ "regular",
2024
+ ),
2025
+ "Marcellus SC" => array(
2026
+ "regular",
2027
+ ),
2028
+ "Marck Script" => array(
2029
+ "regular",
2030
+ ),
2031
+ "Margarine" => array(
2032
+ "regular",
2033
+ ),
2034
+ "Marko One" => array(
2035
+ "regular",
2036
+ ),
2037
+ "Marmelad" => array(
2038
+ "regular",
2039
+ ),
2040
+ "Martel" => array(
2041
+ "200",
2042
+ "300",
2043
+ "regular",
2044
+ "600",
2045
+ "700",
2046
+ "800",
2047
+ "900",
2048
+ ),
2049
+ "Martel Sans" => array(
2050
+ "200",
2051
+ "300",
2052
+ "regular",
2053
+ "600",
2054
+ "700",
2055
+ "800",
2056
+ "900",
2057
+ ),
2058
+ "Marvel" => array(
2059
+ "regular",
2060
+ "700",
2061
+ ),
2062
+ "Mate" => array(
2063
+ "regular",
2064
+ ),
2065
+ "Mate SC" => array(
2066
+ "regular",
2067
+ ),
2068
+ "Maven Pro" => array(
2069
+ "regular",
2070
+ "500",
2071
+ "700",
2072
+ "900",
2073
+ ),
2074
+ "McLaren" => array(
2075
+ "regular",
2076
+ ),
2077
+ "Meddon" => array(
2078
+ "regular",
2079
+ ),
2080
+ "MedievalSharp" => array(
2081
+ "regular",
2082
+ ),
2083
+ "Medula One" => array(
2084
+ "regular",
2085
+ ),
2086
+ "Meera Inimai" => array(
2087
+ "regular",
2088
+ ),
2089
+ "Megrim" => array(
2090
+ "regular",
2091
+ ),
2092
+ "Meie Script" => array(
2093
+ "regular",
2094
+ ),
2095
+ "Merienda" => array(
2096
+ "regular",
2097
+ "700",
2098
+ ),
2099
+ "Merienda One" => array(
2100
+ "regular",
2101
+ ),
2102
+ "Merriweather" => array(
2103
+ "300",
2104
+ "regular",
2105
+ "700",
2106
+ "900",
2107
+ ),
2108
+ "Merriweather Sans" => array(
2109
+ "300",
2110
+ "regular",
2111
+ "700",
2112
+ "800",
2113
+ ),
2114
+ "Metal" => array(
2115
+ "regular",
2116
+ ),
2117
+ "Metal Mania" => array(
2118
+ "regular",
2119
+ ),
2120
+ "Metamorphous" => array(
2121
+ "regular",
2122
+ ),
2123
+ "Metrophobic" => array(
2124
+ "regular",
2125
+ ),
2126
+ "Michroma" => array(
2127
+ "regular",
2128
+ ),
2129
+ "Milonga" => array(
2130
+ "regular",
2131
+ ),
2132
+ "Miltonian" => array(
2133
+ "regular",
2134
+ ),
2135
+ "Miltonian Tattoo" => array(
2136
+ "regular",
2137
+ ),
2138
+ "Miniver" => array(
2139
+ "regular",
2140
+ ),
2141
+ "Miriam Libre" => array(
2142
+ "regular",
2143
+ "700",
2144
+ ),
2145
+ "Mirza" => array(
2146
+ "regular",
2147
+ "500",
2148
+ "600",
2149
+ "700",
2150
+ ),
2151
+ "Miss Fajardose" => array(
2152
+ "regular",
2153
+ ),
2154
+ "Mitr" => array(
2155
+ "200",
2156
+ "300",
2157
+ "regular",
2158
+ "500",
2159
+ "600",
2160
+ "700",
2161
+ ),
2162
+ "Modak" => array(
2163
+ "regular",
2164
+ ),
2165
+ "Modern Antiqua" => array(
2166
+ "regular",
2167
+ ),
2168
+ "Mogra" => array(
2169
+ "regular",
2170
+ ),
2171
+ "Molengo" => array(
2172
+ "regular",
2173
+ ),
2174
+ "Molle" => array(
2175
+ ),
2176
+ "Monda" => array(
2177
+ "regular",
2178
+ "700",
2179
+ ),
2180
+ "Monofett" => array(
2181
+ "regular",
2182
+ ),
2183
+ "Monoton" => array(
2184
+ "regular",
2185
+ ),
2186
+ "Monsieur La Doulaise" => array(
2187
+ "regular",
2188
+ ),
2189
+ "Montaga" => array(
2190
+ "regular",
2191
+ ),
2192
+ "Montez" => array(
2193
+ "regular",
2194
+ ),
2195
+ "Montserrat" => array(
2196
+ "regular",
2197
+ "700",
2198
+ ),
2199
+ "Montserrat Alternates" => array(
2200
+ "regular",
2201
+ "700",
2202
+ ),
2203
+ "Montserrat Subrayada" => array(
2204
+ "regular",
2205
+ "700",
2206
+ ),
2207
+ "Moul" => array(
2208
+ "regular",
2209
+ ),
2210
+ "Moulpali" => array(
2211
+ "regular",
2212
+ ),
2213
+ "Mountains of Christmas" => array(
2214
+ "regular",
2215
+ "700",
2216
+ ),
2217
+ "Mouse Memoirs" => array(
2218
+ "regular",
2219
+ ),
2220
+ "Mr Bedfort" => array(
2221
+ "regular",
2222
+ ),
2223
+ "Mr Dafoe" => array(
2224
+ "regular",
2225
+ ),
2226
+ "Mr De Haviland" => array(
2227
+ "regular",
2228
+ ),
2229
+ "Mrs Saint Delafield" => array(
2230
+ "regular",
2231
+ ),
2232
+ "Mrs Sheppards" => array(
2233
+ "regular",
2234
+ ),
2235
+ "Mukta Vaani" => array(
2236
+ "200",
2237
+ "300",
2238
+ "regular",
2239
+ "500",
2240
+ "600",
2241
+ "700",
2242
+ "800",
2243
+ ),
2244
+ "Muli" => array(
2245
+ "300",
2246
+ "regular",
2247
+ ),
2248
+ "Mystery Quest" => array(
2249
+ "regular",
2250
+ ),
2251
+ "NTR" => array(
2252
+ "regular",
2253
+ ),
2254
+ "Neucha" => array(
2255
+ "regular",
2256
+ ),
2257
+ "Neuton" => array(
2258
+ "200",
2259
+ "300",
2260
+ "regular",
2261
+ "700",
2262
+ "800",
2263
+ ),
2264
+ "New Rocker" => array(
2265
+ "regular",
2266
+ ),
2267
+ "News Cycle" => array(
2268
+ "regular",
2269
+ "700",
2270
+ ),
2271
+ "Niconne" => array(
2272
+ "regular",
2273
+ ),
2274
+ "Nixie One" => array(
2275
+ "regular",
2276
+ ),
2277
+ "Nobile" => array(
2278
+ "regular",
2279
+ "700",
2280
+ ),
2281
+ "Nokora" => array(
2282
+ "regular",
2283
+ "700",
2284
+ ),
2285
+ "Norican" => array(
2286
+ "regular",
2287
+ ),
2288
+ "Nosifer" => array(
2289
+ "regular",
2290
+ ),
2291
+ "Nothing You Could Do" => array(
2292
+ "regular",
2293
+ ),
2294
+ "Noticia Text" => array(
2295
+ "regular",
2296
+ "700",
2297
+ ),
2298
+ "Noto Sans" => array(
2299
+ "regular",
2300
+ "700",
2301
+ ),
2302
+ "Noto Serif" => array(
2303
+ "regular",
2304
+ "700",
2305
+ ),
2306
+ "Nova Cut" => array(
2307
+ "regular",
2308
+ ),
2309
+ "Nova Flat" => array(
2310
+ "regular",
2311
+ ),
2312
+ "Nova Mono" => array(
2313
+ "regular",
2314
+ ),
2315
+ "Nova Oval" => array(
2316
+ "regular",
2317
+ ),
2318
+ "Nova Round" => array(
2319
+ "regular",
2320
+ ),
2321
+ "Nova Script" => array(
2322
+ "regular",
2323
+ ),
2324
+ "Nova Slim" => array(
2325
+ "regular",
2326
+ ),
2327
+ "Nova Square" => array(
2328
+ "regular",
2329
+ ),
2330
+ "Numans" => array(
2331
+ "regular",
2332
+ ),
2333
+ "Nunito" => array(
2334
+ "300",
2335
+ "regular",
2336
+ "700",
2337
+ ),
2338
+ "Odor Mean Chey" => array(
2339
+ "regular",
2340
+ ),
2341
+ "Offside" => array(
2342
+ "regular",
2343
+ ),
2344
+ "Old Standard TT" => array(
2345
+ "regular",
2346
+ "700",
2347
+ ),
2348
+ "Oldenburg" => array(
2349
+ "regular",
2350
+ ),
2351
+ "Oleo Script" => array(
2352
+ "regular",
2353
+ "700",
2354
+ ),
2355
+ "Oleo Script Swash Caps" => array(
2356
+ "regular",
2357
+ "700",
2358
+ ),
2359
+ "Open Sans" => array(
2360
+ "300",
2361
+ "regular",
2362
+ "600",
2363
+ "700",
2364
+ "800",
2365
+ ),
2366
+ "Open Sans Condensed" => array(
2367
+ "300",
2368
+ "700",
2369
+ ),
2370
+ "Oranienbaum" => array(
2371
+ "regular",
2372
+ ),
2373
+ "Orbitron" => array(
2374
+ "regular",
2375
+ "500",
2376
+ "700",
2377
+ "900",
2378
+ ),
2379
+ "Oregano" => array(
2380
+ "regular",
2381
+ ),
2382
+ "Orienta" => array(
2383
+ "regular",
2384
+ ),
2385
+ "Original Surfer" => array(
2386
+ "regular",
2387
+ ),
2388
+ "Oswald" => array(
2389
+ "300",
2390
+ "regular",
2391
+ "700",
2392
+ ),
2393
+ "Over the Rainbow" => array(
2394
+ "regular",
2395
+ ),
2396
+ "Overlock" => array(
2397
+ "regular",
2398
+ "700",
2399
+ "900",
2400
+ ),
2401
+ "Overlock SC" => array(
2402
+ "regular",
2403
+ ),
2404
+ "Ovo" => array(
2405
+ "regular",
2406
+ ),
2407
+ "Oxygen" => array(
2408
+ "300",
2409
+ "regular",
2410
+ "700",
2411
+ ),
2412
+ "Oxygen Mono" => array(
2413
+ "regular",
2414
+ ),
2415
+ "PT Mono" => array(
2416
+ "regular",
2417
+ ),
2418
+ "PT Sans" => array(
2419
+ "regular",
2420
+ "700",
2421
+ ),
2422
+ "PT Sans Caption" => array(
2423
+ "regular",
2424
+ "700",
2425
+ ),
2426
+ "PT Sans Narrow" => array(
2427
+ "regular",
2428
+ "700",
2429
+ ),
2430
+ "PT Serif" => array(
2431
+ "regular",
2432
+ "700",
2433
+ ),
2434
+ "PT Serif Caption" => array(
2435
+ "regular",
2436
+ ),
2437
+ "Pacifico" => array(
2438
+ "regular",
2439
+ ),
2440
+ "Palanquin" => array(
2441
+ "100",
2442
+ "200",
2443
+ "300",
2444
+ "regular",
2445
+ "500",
2446
+ "600",
2447
+ "700",
2448
+ ),
2449
+ "Palanquin Dark" => array(
2450
+ "regular",
2451
+ "500",
2452
+ "600",
2453
+ "700",
2454
+ ),
2455
+ "Paprika" => array(
2456
+ "regular",
2457
+ ),
2458
+ "Parisienne" => array(
2459
+ "regular",
2460
+ ),
2461
+ "Passero One" => array(
2462
+ "regular",
2463
+ ),
2464
+ "Passion One" => array(
2465
+ "regular",
2466
+ "700",
2467
+ "900",
2468
+ ),
2469
+ "Pathway Gothic One" => array(
2470
+ "regular",
2471
+ ),
2472
+ "Patrick Hand" => array(
2473
+ "regular",
2474
+ ),
2475
+ "Patrick Hand SC" => array(
2476
+ "regular",
2477
+ ),
2478
+ "Pattaya" => array(
2479
+ "regular",
2480
+ ),
2481
+ "Patua One" => array(
2482
+ "regular",
2483
+ ),
2484
+ "Pavanam" => array(
2485
+ "regular",
2486
+ ),
2487
+ "Paytone One" => array(
2488
+ "regular",
2489
+ ),
2490
+ "Peddana" => array(
2491
+ "regular",
2492
+ ),
2493
+ "Peralta" => array(
2494
+ "regular",
2495
+ ),
2496
+ "Permanent Marker" => array(
2497
+ "regular",
2498
+ ),
2499
+ "Petit Formal Script" => array(
2500
+ "regular",
2501
+ ),
2502
+ "Petrona" => array(
2503
+ "regular",
2504
+ ),
2505
+ "Philosopher" => array(
2506
+ "regular",
2507
+ "700",
2508
+ ),
2509
+ "Piedra" => array(
2510
+ "regular",
2511
+ ),
2512
+ "Pinyon Script" => array(
2513
+ "regular",
2514
+ ),
2515
+ "Pirata One" => array(
2516
+ "regular",
2517
+ ),
2518
+ "Plaster" => array(
2519
+ "regular",
2520
+ ),
2521
+ "Play" => array(
2522
+ "regular",
2523
+ "700",
2524
+ ),
2525
+ "Playball" => array(
2526
+ "regular",
2527
+ ),
2528
+ "Playfair Display" => array(
2529
+ "regular",
2530
+ "700",
2531
+ "900",
2532
+ ),
2533
+ "Playfair Display SC" => array(
2534
+ "regular",
2535
+ "700",
2536
+ "900",
2537
+ ),
2538
+ "Podkova" => array(
2539
+ "regular",
2540
+ "700",
2541
+ ),
2542
+ "Poiret One" => array(
2543
+ "regular",
2544
+ ),
2545
+ "Poller One" => array(
2546
+ "regular",
2547
+ ),
2548
+ "Poly" => array(
2549
+ "regular",
2550
+ ),
2551
+ "Pompiere" => array(
2552
+ "regular",
2553
+ ),
2554
+ "Pontano Sans" => array(
2555
+ "regular",
2556
+ ),
2557
+ "Poppins" => array(
2558
+ "300",
2559
+ "regular",
2560
+ "500",
2561
+ "600",
2562
+ "700",
2563
+ ),
2564
+ "Port Lligat Sans" => array(
2565
+ "regular",
2566
+ ),
2567
+ "Port Lligat Slab" => array(
2568
+ "regular",
2569
+ ),
2570
+ "Pragati Narrow" => array(
2571
+ "regular",
2572
+ "700",
2573
+ ),
2574
+ "Prata" => array(
2575
+ "regular",
2576
+ ),
2577
+ "Preahvihear" => array(
2578
+ "regular",
2579
+ ),
2580
+ "Press Start 2P" => array(
2581
+ "regular",
2582
+ ),
2583
+ "Pridi" => array(
2584
+ "200",
2585
+ "300",
2586
+ "regular",
2587
+ "500",
2588
+ "600",
2589
+ "700",
2590
+ ),
2591
+ "Princess Sofia" => array(
2592
+ "regular",
2593
+ ),
2594
+ "Prociono" => array(
2595
+ "regular",
2596
+ ),
2597
+ "Prompt" => array(
2598
+ "100",
2599
+ "200",
2600
+ "300",
2601
+ "regular",
2602
+ "500",
2603
+ "600",
2604
+ "700",
2605
+ "800",
2606
+ "900",
2607
+ ),
2608
+ "Prosto One" => array(
2609
+ "regular",
2610
+ ),
2611
+ "Proza Libre" => array(
2612
+ "regular",
2613
+ "500",
2614
+ "600",
2615
+ "700",
2616
+ "800",
2617
+ ),
2618
+ "Puritan" => array(
2619
+ "regular",
2620
+ "700",
2621
+ ),
2622
+ "Purple Purse" => array(
2623
+ "regular",
2624
+ ),
2625
+ "Quando" => array(
2626
+ "regular",
2627
+ ),
2628
+ "Quantico" => array(
2629
+ "regular",
2630
+ "700",
2631
+ ),
2632
+ "Quattrocento" => array(
2633
+ "regular",
2634
+ "700",
2635
+ ),
2636
+ "Quattrocento Sans" => array(
2637
+ "regular",
2638
+ "700",
2639
+ ),
2640
+ "Questrial" => array(
2641
+ "regular",
2642
+ ),
2643
+ "Quicksand" => array(
2644
+ "300",
2645
+ "regular",
2646
+ "700",
2647
+ ),
2648
+ "Quintessential" => array(
2649
+ "regular",
2650
+ ),
2651
+ "Qwigley" => array(
2652
+ "regular",
2653
+ ),
2654
+ "Racing Sans One" => array(
2655
+ "regular",
2656
+ ),
2657
+ "Radley" => array(
2658
+ "regular",
2659
+ ),
2660
+ "Rajdhani" => array(
2661
+ "300",
2662
+ "regular",
2663
+ "500",
2664
+ "600",
2665
+ "700",
2666
+ ),
2667
+ "Rakkas" => array(
2668
+ "regular",
2669
+ ),
2670
+ "Raleway" => array(
2671
+ "100",
2672
+ "200",
2673
+ "300",
2674
+ "regular",
2675
+ "500",
2676
+ "600",
2677
+ "700",
2678
+ "800",
2679
+ "900",
2680
+ ),
2681
+ "Raleway Dots" => array(
2682
+ "regular",
2683
+ ),
2684
+ "Ramabhadra" => array(
2685
+ "regular",
2686
+ ),
2687
+ "Ramaraja" => array(
2688
+ "regular",
2689
+ ),
2690
+ "Rambla" => array(
2691
+ "regular",
2692
+ "700",
2693
+ ),
2694
+ "Rammetto One" => array(
2695
+ "regular",
2696
+ ),
2697
+ "Ranchers" => array(
2698
+ "regular",
2699
+ ),
2700
+ "Rancho" => array(
2701
+ "regular",
2702
+ ),
2703
+ "Ranga" => array(
2704
+ "regular",
2705
+ "700",
2706
+ ),
2707
+ "Rasa" => array(
2708
+ "300",
2709
+ "regular",
2710
+ "500",
2711
+ "600",
2712
+ "700",
2713
+ ),
2714
+ "Rationale" => array(
2715
+ "regular",
2716
+ ),
2717
+ "Ravi Prakash" => array(
2718
+ "regular",
2719
+ ),
2720
+ "Redressed" => array(
2721
+ "regular",
2722
+ ),
2723
+ "Reem Kufi" => array(
2724
+ "regular",
2725
+ ),
2726
+ "Reenie Beanie" => array(
2727
+ "regular",
2728
+ ),
2729
+ "Revalia" => array(
2730
+ "regular",
2731
+ ),
2732
+ "Rhodium Libre" => array(
2733
+ "regular",
2734
+ ),
2735
+ "Ribeye" => array(
2736
+ "regular",
2737
+ ),
2738
+ "Ribeye Marrow" => array(
2739
+ "regular",
2740
+ ),
2741
+ "Righteous" => array(
2742
+ "regular",
2743
+ ),
2744
+ "Risque" => array(
2745
+ "regular",
2746
+ ),
2747
+ "Roboto" => array(
2748
+ "100",
2749
+ "300",
2750
+ "regular",
2751
+ "500",
2752
+ "700",
2753
+ "900",
2754
+ ),
2755
+ "Roboto Condensed" => array(
2756
+ "300",
2757
+ "regular",
2758
+ "700",
2759
+ ),
2760
+ "Roboto Mono" => array(
2761
+ "100",
2762
+ "300",
2763
+ "regular",
2764
+ "500",
2765
+ "700",
2766
+ ),
2767
+ "Roboto Slab" => array(
2768
+ "100",
2769
+ "300",
2770
+ "regular",
2771
+ "700",
2772
+ ),
2773
+ "Rochester" => array(
2774
+ "regular",
2775
+ ),
2776
+ "Rock Salt" => array(
2777
+ "regular",
2778
+ ),
2779
+ "Rokkitt" => array(
2780
+ "regular",
2781
+ "700",
2782
+ ),
2783
+ "Romanesco" => array(
2784
+ "regular",
2785
+ ),
2786
+ "Ropa Sans" => array(
2787
+ "regular",
2788
+ ),
2789
+ "Rosario" => array(
2790
+ "regular",
2791
+ "700",
2792
+ ),
2793
+ "Rosarivo" => array(
2794
+ "regular",
2795
+ ),
2796
+ "Rouge Script" => array(
2797
+ "regular",
2798
+ ),
2799
+ "Rozha One" => array(
2800
+ "regular",
2801
+ ),
2802
+ "Rubik" => array(
2803
+ "300",
2804
+ "regular",
2805
+ "500",
2806
+ "700",
2807
+ "900",
2808
+ ),
2809
+ "Rubik Mono One" => array(
2810
+ "regular",
2811
+ ),
2812
+ "Rubik One" => array(
2813
+ "regular",
2814
+ ),
2815
+ "Ruda" => array(
2816
+ "regular",
2817
+ "700",
2818
+ "900",
2819
+ ),
2820
+ "Rufina" => array(
2821
+ "regular",
2822
+ "700",
2823
+ ),
2824
+ "Ruge Boogie" => array(
2825
+ "regular",
2826
+ ),
2827
+ "Ruluko" => array(
2828
+ "regular",
2829
+ ),
2830
+ "Rum Raisin" => array(
2831
+ "regular",
2832
+ ),
2833
+ "Ruslan Display" => array(
2834
+ "regular",
2835
+ ),
2836
+ "Russo One" => array(
2837
+ "regular",
2838
+ ),
2839
+ "Ruthie" => array(
2840
+ "regular",
2841
+ ),
2842
+ "Rye" => array(
2843
+ "regular",
2844
+ ),
2845
+ "Sacramento" => array(
2846
+ "regular",
2847
+ ),
2848
+ "Sahitya" => array(
2849
+ "regular",
2850
+ "700",
2851
+ ),
2852
+ "Sail" => array(
2853
+ "regular",
2854
+ ),
2855
+ "Salsa" => array(
2856
+ "regular",
2857
+ ),
2858
+ "Sanchez" => array(
2859
+ "regular",
2860
+ ),
2861
+ "Sancreek" => array(
2862
+ "regular",
2863
+ ),
2864
+ "Sansita One" => array(
2865
+ "regular",
2866
+ ),
2867
+ "Sarala" => array(
2868
+ "regular",
2869
+ "700",
2870
+ ),
2871
+ "Sarina" => array(
2872
+ "regular",
2873
+ ),
2874
+ "Sarpanch" => array(
2875
+ "regular",
2876
+ "500",
2877
+ "600",
2878
+ "700",
2879
+ "800",
2880
+ "900",
2881
+ ),
2882
+ "Satisfy" => array(
2883
+ "regular",
2884
+ ),
2885
+ "Scada" => array(
2886
+ "regular",
2887
+ "700",
2888
+ ),
2889
+ "Scheherazade" => array(
2890
+ "regular",
2891
+ "700",
2892
+ ),
2893
+ "Schoolbell" => array(
2894
+ "regular",
2895
+ ),
2896
+ "Scope One" => array(
2897
+ "regular",
2898
+ ),
2899
+ "Seaweed Script" => array(
2900
+ "regular",
2901
+ ),
2902
+ "Secular One" => array(
2903
+ "regular",
2904
+ ),
2905
+ "Sevillana" => array(
2906
+ "regular",
2907
+ ),
2908
+ "Seymour One" => array(
2909
+ "regular",
2910
+ ),
2911
+ "Shadows Into Light" => array(
2912
+ "regular",
2913
+ ),
2914
+ "Shadows Into Light Two" => array(
2915
+ "regular",
2916
+ ),
2917
+ "Shanti" => array(
2918
+ "regular",
2919
+ ),
2920
+ "Share" => array(
2921
+ "regular",
2922
+ "700",
2923
+ ),
2924
+ "Share Tech" => array(
2925
+ "regular",
2926
+ ),
2927
+ "Share Tech Mono" => array(
2928
+ "regular",
2929
+ ),
2930
+ "Shojumaru" => array(
2931
+ "regular",
2932
+ ),
2933
+ "Short Stack" => array(
2934
+ "regular",
2935
+ ),
2936
+ "Shrikhand" => array(
2937
+ "regular",
2938
+ ),
2939
+ "Siemreap" => array(
2940
+ "regular",
2941
+ ),
2942
+ "Sigmar One" => array(
2943
+ "regular",
2944
+ ),
2945
+ "Signika" => array(
2946
+ "300",
2947
+ "regular",
2948
+ "600",
2949
+ "700",
2950
+ ),
2951
+ "Signika Negative" => array(
2952
+ "300",
2953
+ "regular",
2954
+ "600",
2955
+ "700",
2956
+ ),
2957
+ "Simonetta" => array(
2958
+ "regular",
2959
+ "900",
2960
+ ),
2961
+ "Sintony" => array(
2962
+ "regular",
2963
+ "700",
2964
+ ),
2965
+ "Sirin Stencil" => array(
2966
+ "regular",
2967
+ ),
2968
+ "Six Caps" => array(
2969
+ "regular",
2970
+ ),
2971
+ "Skranji" => array(
2972
+ "regular",
2973
+ "700",
2974
+ ),
2975
+ "Slabo 13px" => array(
2976
+ "regular",
2977
+ ),
2978
+ "Slabo 27px" => array(
2979
+ "regular",
2980
+ ),
2981
+ "Slackey" => array(
2982
+ "regular",
2983
+ ),
2984
+ "Smokum" => array(
2985
+ "regular",
2986
+ ),
2987
+ "Smythe" => array(
2988
+ "regular",
2989
+ ),
2990
+ "Sniglet" => array(
2991
+ "regular",
2992
+ "800",
2993
+ ),
2994
+ "Snippet" => array(
2995
+ "regular",
2996
+ ),
2997
+ "Snowburst One" => array(
2998
+ "regular",
2999
+ ),
3000
+ "Sofadi One" => array(
3001
+ "regular",
3002
+ ),
3003
+ "Sofia" => array(
3004
+ "regular",
3005
+ ),
3006
+ "Sonsie One" => array(
3007
+ "regular",
3008
+ ),
3009
+ "Sorts Mill Goudy" => array(
3010
+ "regular",
3011
+ ),
3012
+ "Source Code Pro" => array(
3013
+ "200",
3014
+ "300",
3015
+ "regular",
3016
+ "500",
3017
+ "600",
3018
+ "700",
3019
+ "900",
3020
+ ),
3021
+ "Source Sans Pro" => array(
3022
+ "200",
3023
+ "300",
3024
+ "regular",
3025
+ "600",
3026
+ "700",
3027
+ "900",
3028
+ ),
3029
+ "Source Serif Pro" => array(
3030
+ "regular",
3031
+ "600",
3032
+ "700",
3033
+ ),
3034
+ "Space Mono" => array(
3035
+ "regular",
3036
+ "700",
3037
+ ),
3038
+ "Special Elite" => array(
3039
+ "regular",
3040
+ ),
3041
+ "Spicy Rice" => array(
3042
+ "regular",
3043
+ ),
3044
+ "Spinnaker" => array(
3045
+ "regular",
3046
+ ),
3047
+ "Spirax" => array(
3048
+ "regular",
3049
+ ),
3050
+ "Squada One" => array(
3051
+ "regular",
3052
+ ),
3053
+ "Sree Krushnadevaraya" => array(
3054
+ "regular",
3055
+ ),
3056
+ "Sriracha" => array(
3057
+ "regular",
3058
+ ),
3059
+ "Stalemate" => array(
3060
+ "regular",
3061
+ ),
3062
+ "Stalinist One" => array(
3063
+ "regular",
3064
+ ),
3065
+ "Stardos Stencil" => array(
3066
+ "regular",
3067
+ "700",
3068
+ ),
3069
+ "Stint Ultra Condensed" => array(
3070
+ "regular",
3071
+ ),
3072
+ "Stint Ultra Expanded" => array(
3073
+ "regular",
3074
+ ),
3075
+ "Stoke" => array(
3076
+ "300",
3077
+ "regular",
3078
+ ),
3079
+ "Strait" => array(
3080
+ "regular",
3081
+ ),
3082
+ "Sue Ellen Francisco" => array(
3083
+ "regular",
3084
+ ),
3085
+ "Suez One" => array(
3086
+ "regular",
3087
+ ),
3088
+ "Sumana" => array(
3089
+ "regular",
3090
+ "700",
3091
+ ),
3092
+ "Sunshiney" => array(
3093
+ "regular",
3094
+ ),
3095
+ "Supermercado One" => array(
3096
+ "regular",
3097
+ ),
3098
+ "Sura" => array(
3099
+ "regular",
3100
+ "700",
3101
+ ),
3102
+ "Suranna" => array(
3103
+ "regular",
3104
+ ),
3105
+ "Suravaram" => array(
3106
+ "regular",
3107
+ ),
3108
+ "Suwannaphum" => array(
3109
+ "regular",
3110
+ ),
3111
+ "Swanky and Moo Moo" => array(
3112
+ "regular",
3113
+ ),
3114
+ "Syncopate" => array(
3115
+ "regular",
3116
+ "700",
3117
+ ),
3118
+ "Tangerine" => array(
3119
+ "regular",
3120
+ "700",
3121
+ ),
3122
+ "Taprom" => array(
3123
+ "regular",
3124
+ ),
3125
+ "Tauri" => array(
3126
+ "regular",
3127
+ ),
3128
+ "Taviraj" => array(
3129
+ "100",
3130
+ "200",
3131
+ "300",
3132
+ "regular",
3133
+ "500",
3134
+ "600",
3135
+ "700",
3136
+ "800",
3137
+ "900",
3138
+ ),
3139
+ "Teko" => array(
3140
+ "300",
3141
+ "regular",
3142
+ "500",
3143
+ "600",
3144
+ "700",
3145
+ ),
3146
+ "Telex" => array(
3147
+ "regular",
3148
+ ),
3149
+ "Tenali Ramakrishna" => array(
3150
+ "regular",
3151
+ ),
3152
+ "Tenor Sans" => array(
3153
+ "regular",
3154
+ ),
3155
+ "Text Me One" => array(
3156
+ "regular",
3157
+ ),
3158
+ "The Girl Next Door" => array(
3159
+ "regular",
3160
+ ),
3161
+ "Tienne" => array(
3162
+ "regular",
3163
+ "700",
3164
+ "900",
3165
+ ),
3166
+ "Tillana" => array(
3167
+ "regular",
3168
+ "500",
3169
+ "600",
3170
+ "700",
3171
+ "800",
3172
+ ),
3173
+ "Timmana" => array(
3174
+ "regular",
3175
+ ),
3176
+ "Tinos" => array(
3177
+ "regular",
3178
+ "700",
3179
+ ),
3180
+ "Titan One" => array(
3181
+ "regular",
3182
+ ),
3183
+ "Titillium Web" => array(
3184
+ "200",
3185
+ "300",
3186
+ "regular",
3187
+ "600",
3188
+ "700",
3189
+ "900",
3190
+ ),
3191
+ "Trade Winds" => array(
3192
+ "regular",
3193
+ ),
3194
+ "Trirong" => array(
3195
+ "100",
3196
+ "200",
3197
+ "300",
3198
+ "regular",
3199
+ "500",
3200
+ "600",
3201
+ "700",
3202
+ "800",
3203
+ "900",
3204
+ ),
3205
+ "Trocchi" => array(
3206
+ "regular",
3207
+ ),
3208
+ "Trochut" => array(
3209
+ "regular",
3210
+ "700",
3211
+ ),
3212
+ "Trykker" => array(
3213
+ "regular",
3214
+ ),
3215
+ "Tulpen One" => array(
3216
+ "regular",
3217
+ ),
3218
+ "Ubuntu" => array(
3219
+ "300",
3220
+ "regular",
3221
+ "500",
3222
+ "700",
3223
+ ),
3224
+ "Ubuntu Condensed" => array(
3225
+ "regular",
3226
+ ),
3227
+ "Ubuntu Mono" => array(
3228
+ "regular",
3229
+ "700",
3230
+ ),
3231
+ "Ultra" => array(
3232
+ "regular",
3233
+ ),
3234
+ "Uncial Antiqua" => array(
3235
+ "regular",
3236
+ ),
3237
+ "Underdog" => array(
3238
+ "regular",
3239
+ ),
3240
+ "Unica One" => array(
3241
+ "regular",
3242
+ ),
3243
+ "UnifrakturCook" => array(
3244
+ "700",
3245
+ ),
3246
+ "UnifrakturMaguntia" => array(
3247
+ "regular",
3248
+ ),
3249
+ "Unkempt" => array(
3250
+ "regular",
3251
+ "700",
3252
+ ),
3253
+ "Unlock" => array(
3254
+ "regular",
3255
+ ),
3256
+ "Unna" => array(
3257
+ "regular",
3258
+ ),
3259
+ "VT323" => array(
3260
+ "regular",
3261
+ ),
3262
+ "Vampiro One" => array(
3263
+ "regular",
3264
+ ),
3265
+ "Varela" => array(
3266
+ "regular",
3267
+ ),
3268
+ "Varela Round" => array(
3269
+ "regular",
3270
+ ),
3271
+ "Vast Shadow" => array(
3272
+ "regular",
3273
+ ),
3274
+ "Vesper Libre" => array(
3275
+ "regular",
3276
+ "500",
3277
+ "700",
3278
+ "900",
3279
+ ),
3280
+ "Vibur" => array(
3281
+ "regular",
3282
+ ),
3283
+ "Vidaloka" => array(
3284
+ "regular",
3285
+ ),
3286
+ "Viga" => array(
3287
+ "regular",
3288
+ ),
3289
+ "Voces" => array(
3290
+ "regular",
3291
+ ),
3292
+ "Volkhov" => array(
3293
+ "regular",
3294
+ "700",
3295
+ ),
3296
+ "Vollkorn" => array(
3297
+ "regular",
3298
+ "700",
3299
+ ),
3300
+ "Voltaire" => array(
3301
+ "regular",
3302
+ ),
3303
+ "Waiting for the Sunrise" => array(
3304
+ "regular",
3305
+ ),
3306
+ "Wallpoet" => array(
3307
+ "regular",
3308
+ ),
3309
+ "Walter Turncoat" => array(
3310
+ "regular",
3311
+ ),
3312
+ "Warnes" => array(
3313
+ "regular",
3314
+ ),
3315
+ "Wellfleet" => array(
3316
+ "regular",
3317
+ ),
3318
+ "Wendy One" => array(
3319
+ "regular",
3320
+ ),
3321
+ "Wire One" => array(
3322
+ "regular",
3323
+ ),
3324
+ "Work Sans" => array(
3325
+ "100",
3326
+ "200",
3327
+ "300",
3328
+ "regular",
3329
+ "500",
3330
+ "600",
3331
+ "700",
3332
+ "800",
3333
+ "900",
3334
+ ),
3335
+ "Yanone Kaffeesatz" => array(
3336
+ "200",
3337
+ "300",
3338
+ "regular",
3339
+ "700",
3340
+ ),
3341
+ "Yantramanav" => array(
3342
+ "100",
3343
+ "300",
3344
+ "regular",
3345
+ "500",
3346
+ "700",
3347
+ "900",
3348
+ ),
3349
+ "Yatra One" => array(
3350
+ "regular",
3351
+ ),
3352
+ "Yellowtail" => array(
3353
+ "regular",
3354
+ ),
3355
+ "Yeseva One" => array(
3356
+ "regular",
3357
+ ),
3358
+ "Yesteryear" => array(
3359
+ "regular",
3360
+ ),
3361
+ "Yrsa" => array(
3362
+ "300",
3363
+ "regular",
3364
+ "500",
3365
+ "600",
3366
+ "700",
3367
+ ),
3368
+ "Zeyada" => array(
3369
+ "regular",
3370
+ ),
3371
  );
3372
  }
classes/class-fl-builder-icons.php CHANGED
@@ -7,53 +7,53 @@
7
  */
8
 
9
  final class FLBuilderIcons {
10
-
11
  /**
12
  * An array of data for each icon set.
13
  *
14
  * @since 1.4.6
15
  * @access private
16
  * @var array $sets
17
- */
18
  static private $sets = null;
19
-
20
  /**
21
  * Gets an array of data for core and custom icon sets.
22
  *
23
  * @since 1.4.6
24
  * @return array An array of data for each icon set.
25
- */
26
  static public function get_sets()
27
  {
28
  // Return the sets if already registered.
29
  if ( self::$sets ) {
30
  return self::$sets;
31
  }
32
-
33
  // Check to see if we should pull sets from the main site.
34
  if ( is_multisite()) {
35
-
36
  $blog_id = defined( 'BLOG_ID_CURRENT_SITE' ) ? BLOG_ID_CURRENT_SITE : 1;
37
  $enabled_icons = get_option( '_fl_builder_enabled_icons' );
38
-
39
  if ( empty( $enabled_icons ) ) {
40
  switch_to_blog( $blog_id );
41
  }
42
  }
43
-
44
  // Register the icon sets.
45
  self::register_custom_sets();
46
  self::register_core_sets();
47
-
48
  // Revert to the current site if we pulled from the main site.
49
  if ( is_multisite() && empty( $enabled_icons ) ) {
50
  restore_current_blog();
51
  }
52
-
53
  // Return the sets.
54
  return self::$sets;
55
  }
56
-
57
  /**
58
  * Gets an array of data for icon sets of the current
59
  * site on a multisite install.
@@ -66,24 +66,24 @@ final class FLBuilderIcons {
66
  if ( ! is_multisite() ) {
67
  return self::get_sets();
68
  }
69
-
70
  // Store the original sets.
71
  $original_sets = self::$sets;
72
-
73
  // Register the icon sets.
74
  self::register_custom_sets();
75
  self::register_core_sets();
76
-
77
  // Get the new sets.
78
  $sets = self::$sets;
79
-
80
  // Revert to the original sets.
81
  self::$sets = $original_sets;
82
-
83
  // Return the sets.
84
  return $sets;
85
  }
86
-
87
  /**
88
  * Remove an icon set from the internal sets array.
89
  *
@@ -97,7 +97,7 @@ final class FLBuilderIcons {
97
  unset( self::$sets[ $key ] );
98
  }
99
  }
100
-
101
  /**
102
  * Get the key for an icon set from the path to an icon set stylesheet.
103
  *
@@ -108,7 +108,7 @@ final class FLBuilderIcons {
108
  static public function get_key_from_path( $path )
109
  {
110
  $sets = self::get_sets();
111
-
112
  foreach ( $sets as $key => $set ) {
113
  if ( $path == $set['path'] ) {
114
  return $key;
@@ -126,7 +126,7 @@ final class FLBuilderIcons {
126
  static private function register_core_sets()
127
  {
128
  $enabled_icons = FLBuilderModel::get_enabled_icons();
129
- $core_sets = array(
130
  'font-awesome' => array(
131
  'name' => 'Font Awesome',
132
  'prefix' => 'fa'
@@ -139,9 +139,9 @@ final class FLBuilderIcons {
139
  'name' => 'WordPress Dashicons',
140
  'prefix' => 'dashicons dashicons-before'
141
  )
142
- );
143
-
144
- // Add the core sets.
145
  foreach ( $core_sets as $set_key => $set_data ) {
146
  if ( is_admin() || in_array( $set_key, $enabled_icons ) ) {
147
  self::$sets[ $set_key ] = array(
@@ -151,7 +151,7 @@ final class FLBuilderIcons {
151
  );
152
  }
153
  }
154
-
155
  // Loop through core sets and add icons.
156
  foreach ( self::$sets as $set_key => $set_data ) {
157
  if ( 'core' == $set_data['type'] ) {
@@ -174,33 +174,33 @@ final class FLBuilderIcons {
174
  $enabled_icons = FLBuilderModel::get_enabled_icons();
175
  $upload_info = FLBuilderModel::get_cache_dir( 'icons' );
176
  $folders = glob( $upload_info['path'] . '*' );
177
-
178
  // Make sure we have an array.
179
  if( ! is_array( $folders ) ) {
180
  return;
181
  }
182
-
183
  // Loop through uploaded sets.
184
  foreach ( $folders as $folder ) {
185
-
186
  // Make sure we have a directory.
187
  if ( ! is_dir( $folder ) ) {
188
  continue;
189
  }
190
-
191
  $folder = trailingslashit( $folder );
192
-
193
  // This is an Icomoon font.
194
  if ( file_exists( $folder . 'selection.json' ) ) {
195
-
196
  $data = json_decode( file_get_contents( $folder . 'selection.json' ) );
197
  $key = basename( $folder );
198
  $url = str_ireplace( $upload_info['path'], $upload_info['url'], $folder );
199
-
200
  if ( isset( $data->icons ) ) {
201
-
202
  if ( is_admin() || in_array( $key, $enabled_icons ) ) {
203
-
204
  self::$sets[ $key ] = array(
205
  'name' => $data->metadata->name,
206
  'prefix' => '',
@@ -210,33 +210,33 @@ final class FLBuilderIcons {
210
  'stylesheet' => $url . 'style.css',
211
  'icons' => array()
212
  );
213
-
214
  foreach ( $data->icons as $icon ) {
215
-
216
  $prefs = $data->preferences->fontPref;
217
  $postfix = isset( $prefs->postfix ) ? $prefs->postfix : '';
218
-
219
  if ( isset( $prefs->selector ) && 'class' == $prefs->selector ) {
220
  $selector = trim( str_replace( '.', ' ', $prefs->classSelector ) ) . ' ';
221
  }
222
  else {
223
  $selector = '';
224
  }
225
-
226
  self::$sets[ $key ]['icons'][] = $selector . $prefs->prefix . $icon->properties->name . $postfix;
227
  }
228
  }
229
- }
230
  }
231
  // This is a Fontello font.
232
  else if ( file_exists( $folder . 'config.json' ) ) {
233
-
234
  $data = json_decode( file_get_contents( $folder . 'config.json' ) );
235
  $key = basename( $folder );
236
  $name = empty( $data->name ) ? 'Fontello' : $data->name;
237
  $url = str_ireplace( $upload_info['path'], $upload_info['url'], $folder );
238
  $style = empty( $data->name ) ? 'fontello' : $data->name;
239
-
240
  // Append the date to the name?
241
  if ( empty( $data->name ) ) {
242
  $time = str_replace( 'icon-', '', $key );
@@ -245,11 +245,11 @@ final class FLBuilderIcons {
245
  $date = date( $date_format . ' ' . $time_format );
246
  $name .= ' (' . $date . ')';
247
  }
248
-
249
  if ( isset( $data->glyphs ) ) {
250
-
251
  if ( is_admin() || in_array( $key, $enabled_icons ) ) {
252
-
253
  self::$sets[ $key ] = array(
254
  'name' => $name,
255
  'prefix' => '',
@@ -259,7 +259,7 @@ final class FLBuilderIcons {
259
  'stylesheet' => $url . 'css/' . $style . '.css',
260
  'icons' => array()
261
  );
262
-
263
  foreach ( $data->glyphs as $icon ) {
264
  if ( $data->css_use_suffix ) {
265
  self::$sets[ $key ]['icons'][] = $icon->css . $data->css_prefix_text;
@@ -283,14 +283,14 @@ final class FLBuilderIcons {
283
  static public function enqueue_all_custom_icons_styles()
284
  {
285
  $sets = self::get_sets();
286
-
287
  foreach ( $sets as $key => $data ) {
288
-
289
  // Don't enqueue core icons.
290
  if ( 'core' == $data['type'] ) {
291
  continue;
292
  }
293
-
294
  // Enqueue the custom icon styles.
295
  self::enqueue_custom_styles_by_key( $key );
296
  }
@@ -306,7 +306,7 @@ final class FLBuilderIcons {
306
  static public function enqueue_styles_for_module( $module )
307
  {
308
  $fields = FLBuilderModel::get_settings_form_fields( $module->form );
309
-
310
  foreach ( $fields as $name => $field ) {
311
  if ( isset( $field['form'] ) ) {
312
  $form = FLBuilderModel::$settings_forms[ $field['form'] ];
@@ -331,7 +331,7 @@ final class FLBuilderIcons {
331
  static private function enqueue_styles_for_nested_module_form( $module, $form, $setting )
332
  {
333
  $fields = FLBuilderModel::get_settings_form_fields( $form );
334
-
335
  foreach ( $fields as $name => $field ) {
336
  if ( $field['type'] == 'icon' && ! empty( $module->settings->$setting ) ) {
337
  foreach ( $module->settings->$setting as $key => $val ) {
@@ -356,7 +356,9 @@ final class FLBuilderIcons {
356
  */
357
  static private function enqueue_styles_for_icon( $icon )
358
  {
359
- // Is this a core icon?
 
 
360
  if ( stristr( $icon, 'fa-' ) ) {
361
  wp_enqueue_style( 'font-awesome' );
362
  }
@@ -368,9 +370,9 @@ final class FLBuilderIcons {
368
  }
369
  // It must be a custom icon.
370
  else {
371
-
372
  $sets = self::get_sets();
373
-
374
  foreach ( $sets as $key => $data ) {
375
  if ( in_array( $icon, $data['icons'] ) ) {
376
  self::enqueue_custom_styles_by_key( $key );
@@ -389,17 +391,19 @@ final class FLBuilderIcons {
389
  */
390
  static private function enqueue_custom_styles_by_key( $key )
391
  {
392
- $sets = self::get_sets();
393
-
394
- if ( isset( $sets[ $key ] ) ) {
395
-
396
- $set = $sets[ $key ];
397
-
398
- if ( 'icomoon' == $set['type'] ) {
399
- wp_enqueue_style( $key, $set['stylesheet'], array(), FL_BUILDER_VERSION );
400
- }
401
- if ( 'fontello' == $set['type'] ) {
402
- wp_enqueue_style( $key, $set['stylesheet'], array(), FL_BUILDER_VERSION );
 
 
403
  }
404
  }
405
  }
7
  */
8
 
9
  final class FLBuilderIcons {
10
+
11
  /**
12
  * An array of data for each icon set.
13
  *
14
  * @since 1.4.6
15
  * @access private
16
  * @var array $sets
17
+ */
18
  static private $sets = null;
19
+
20
  /**
21
  * Gets an array of data for core and custom icon sets.
22
  *
23
  * @since 1.4.6
24
  * @return array An array of data for each icon set.
25
+ */
26
  static public function get_sets()
27
  {
28
  // Return the sets if already registered.
29
  if ( self::$sets ) {
30
  return self::$sets;
31
  }
32
+
33
  // Check to see if we should pull sets from the main site.
34
  if ( is_multisite()) {
35
+
36
  $blog_id = defined( 'BLOG_ID_CURRENT_SITE' ) ? BLOG_ID_CURRENT_SITE : 1;
37
  $enabled_icons = get_option( '_fl_builder_enabled_icons' );
38
+
39
  if ( empty( $enabled_icons ) ) {
40
  switch_to_blog( $blog_id );
41
  }
42
  }
43
+
44
  // Register the icon sets.
45
  self::register_custom_sets();
46
  self::register_core_sets();
47
+
48
  // Revert to the current site if we pulled from the main site.
49
  if ( is_multisite() && empty( $enabled_icons ) ) {
50
  restore_current_blog();
51
  }
52
+
53
  // Return the sets.
54
  return self::$sets;
55
  }
56
+
57
  /**
58
  * Gets an array of data for icon sets of the current
59
  * site on a multisite install.
66
  if ( ! is_multisite() ) {
67
  return self::get_sets();
68
  }
69
+
70
  // Store the original sets.
71
  $original_sets = self::$sets;
72
+
73
  // Register the icon sets.
74
  self::register_custom_sets();
75
  self::register_core_sets();
76
+
77
  // Get the new sets.
78
  $sets = self::$sets;
79
+
80
  // Revert to the original sets.
81
  self::$sets = $original_sets;
82
+
83
  // Return the sets.
84
  return $sets;
85
  }
86
+
87
  /**
88
  * Remove an icon set from the internal sets array.
89
  *
97
  unset( self::$sets[ $key ] );
98
  }
99
  }
100
+
101
  /**
102
  * Get the key for an icon set from the path to an icon set stylesheet.
103
  *
108
  static public function get_key_from_path( $path )
109
  {
110
  $sets = self::get_sets();
111
+
112
  foreach ( $sets as $key => $set ) {
113
  if ( $path == $set['path'] ) {
114
  return $key;
126
  static private function register_core_sets()
127
  {
128
  $enabled_icons = FLBuilderModel::get_enabled_icons();
129
+ $core_sets = apply_filters( 'fl_builder_core_icon_sets', array(
130
  'font-awesome' => array(
131
  'name' => 'Font Awesome',
132
  'prefix' => 'fa'
139
  'name' => 'WordPress Dashicons',
140
  'prefix' => 'dashicons dashicons-before'
141
  )
142
+ ) );
143
+
144
+ // Add the core sets.
145
  foreach ( $core_sets as $set_key => $set_data ) {
146
  if ( is_admin() || in_array( $set_key, $enabled_icons ) ) {
147
  self::$sets[ $set_key ] = array(
151
  );
152
  }
153
  }
154
+
155
  // Loop through core sets and add icons.
156
  foreach ( self::$sets as $set_key => $set_data ) {
157
  if ( 'core' == $set_data['type'] ) {
174
  $enabled_icons = FLBuilderModel::get_enabled_icons();
175
  $upload_info = FLBuilderModel::get_cache_dir( 'icons' );
176
  $folders = glob( $upload_info['path'] . '*' );
177
+
178
  // Make sure we have an array.
179
  if( ! is_array( $folders ) ) {
180
  return;
181
  }
182
+
183
  // Loop through uploaded sets.
184
  foreach ( $folders as $folder ) {
185
+
186
  // Make sure we have a directory.
187
  if ( ! is_dir( $folder ) ) {
188
  continue;
189
  }
190
+
191
  $folder = trailingslashit( $folder );
192
+
193
  // This is an Icomoon font.
194
  if ( file_exists( $folder . 'selection.json' ) ) {
195
+
196
  $data = json_decode( file_get_contents( $folder . 'selection.json' ) );
197
  $key = basename( $folder );
198
  $url = str_ireplace( $upload_info['path'], $upload_info['url'], $folder );
199
+
200
  if ( isset( $data->icons ) ) {
201
+
202
  if ( is_admin() || in_array( $key, $enabled_icons ) ) {
203
+
204
  self::$sets[ $key ] = array(
205
  'name' => $data->metadata->name,
206
  'prefix' => '',
210
  'stylesheet' => $url . 'style.css',
211
  'icons' => array()
212
  );
213
+
214
  foreach ( $data->icons as $icon ) {
215
+
216
  $prefs = $data->preferences->fontPref;
217
  $postfix = isset( $prefs->postfix ) ? $prefs->postfix : '';
218
+
219
  if ( isset( $prefs->selector ) && 'class' == $prefs->selector ) {
220
  $selector = trim( str_replace( '.', ' ', $prefs->classSelector ) ) . ' ';
221
  }
222
  else {
223
  $selector = '';
224
  }
225
+
226
  self::$sets[ $key ]['icons'][] = $selector . $prefs->prefix . $icon->properties->name . $postfix;
227
  }
228
  }
229
+ }
230
  }
231
  // This is a Fontello font.
232
  else if ( file_exists( $folder . 'config.json' ) ) {
233
+
234
  $data = json_decode( file_get_contents( $folder . 'config.json' ) );
235
  $key = basename( $folder );
236
  $name = empty( $data->name ) ? 'Fontello' : $data->name;
237
  $url = str_ireplace( $upload_info['path'], $upload_info['url'], $folder );
238
  $style = empty( $data->name ) ? 'fontello' : $data->name;
239
+
240
  // Append the date to the name?
241
  if ( empty( $data->name ) ) {
242
  $time = str_replace( 'icon-', '', $key );
245
  $date = date( $date_format . ' ' . $time_format );
246
  $name .= ' (' . $date . ')';
247
  }
248
+
249
  if ( isset( $data->glyphs ) ) {
250
+
251
  if ( is_admin() || in_array( $key, $enabled_icons ) ) {
252
+
253
  self::$sets[ $key ] = array(
254
  'name' => $name,
255
  'prefix' => '',
259
  'stylesheet' => $url . 'css/' . $style . '.css',
260
  'icons' => array()
261
  );
262
+
263
  foreach ( $data->glyphs as $icon ) {
264
  if ( $data->css_use_suffix ) {
265
  self::$sets[ $key ]['icons'][] = $icon->css . $data->css_prefix_text;
283
  static public function enqueue_all_custom_icons_styles()
284
  {
285
  $sets = self::get_sets();
286
+
287
  foreach ( $sets as $key => $data ) {
288
+
289
  // Don't enqueue core icons.
290
  if ( 'core' == $data['type'] ) {
291
  continue;
292
  }
293
+
294
  // Enqueue the custom icon styles.
295
  self::enqueue_custom_styles_by_key( $key );
296
  }
306
  static public function enqueue_styles_for_module( $module )
307
  {
308
  $fields = FLBuilderModel::get_settings_form_fields( $module->form );
309
+
310
  foreach ( $fields as $name => $field ) {
311
  if ( isset( $field['form'] ) ) {
312
  $form = FLBuilderModel::$settings_forms[ $field['form'] ];
331
  static private function enqueue_styles_for_nested_module_form( $module, $form, $setting )
332
  {
333
  $fields = FLBuilderModel::get_settings_form_fields( $form );
334
+
335
  foreach ( $fields as $name => $field ) {
336
  if ( $field['type'] == 'icon' && ! empty( $module->settings->$setting ) ) {
337
  foreach ( $module->settings->$setting as $key => $val ) {
356
  */
357
  static private function enqueue_styles_for_icon( $icon )
358
  {
359
+ do_action( 'fl_builder_enqueue_styles_for_icon', $icon );
360
+
361
+ // Is this a core icon?
362
  if ( stristr( $icon, 'fa-' ) ) {
363
  wp_enqueue_style( 'font-awesome' );
364
  }
370
  }
371
  // It must be a custom icon.
372
  else {
373
+
374
  $sets = self::get_sets();
375
+
376
  foreach ( $sets as $key => $data ) {
377
  if ( in_array( $icon, $data['icons'] ) ) {
378
  self::enqueue_custom_styles_by_key( $key );
391
  */
392
  static private function enqueue_custom_styles_by_key( $key )
393
  {
394
+ if ( apply_filters( 'fl_builder_enqueue_custom_styles_by_key', true, $key ) ) {
395
+ $sets = self::get_sets();
396
+
397
+ if ( isset( $sets[ $key ] ) ) {
398
+
399
+ $set = $sets[ $key ];
400
+
401
+ if ( 'icomoon' == $set['type'] ) {
402
+ wp_enqueue_style( $key, $set['stylesheet'], array(), FL_BUILDER_VERSION );
403
+ }
404
+ if ( 'fontello' == $set['type'] ) {
405
+ wp_enqueue_style( $key, $set['stylesheet'], array(), FL_BUILDER_VERSION );
406
+ }
407
  }
408
  }
409
  }
classes/class-fl-builder-loader.php CHANGED
@@ -45,7 +45,7 @@ if ( ! class_exists( 'FLBuilderLoader' ) ) {
45
  */
46
  static private function define_constants()
47
  {
48
- define('FL_BUILDER_VERSION', '1.8.8');
49
  define('FL_BUILDER_FILE', trailingslashit(dirname(dirname(__FILE__))) . 'fl-builder.php');
50
  define('FL_BUILDER_DIR', plugin_dir_path(FL_BUILDER_FILE));
51
  define('FL_BUILDER_URL', plugins_url('/', FL_BUILDER_FILE));
45
  */
46
  static private function define_constants()
47
  {
48
+ define('FL_BUILDER_VERSION', '1.9.1');
49
  define('FL_BUILDER_FILE', trailingslashit(dirname(dirname(__FILE__))) . 'fl-builder.php');
50
  define('FL_BUILDER_DIR', plugin_dir_path(FL_BUILDER_FILE));
51
  define('FL_BUILDER_URL', plugins_url('/', FL_BUILDER_FILE));
classes/class-fl-builder-model.php CHANGED
@@ -51,6 +51,14 @@ final class FLBuilderModel {
51
  */
52
  static public $modules = array();
53
 
 
 
 
 
 
 
 
 
54
  /**
55
  * The last node id that was generated by the builder.
56
  * This is saved to ensure the next node id is unique.
@@ -887,9 +895,10 @@ final class FLBuilderModel {
887
  $nodes[ $node_id ] = $node;
888
  }
889
  }
890
-
891
- uasort( $nodes, array( 'FLBuilderModel', 'order_nodes' ) );
892
  }
 
 
 
893
 
894
  // Merge default settings.
895
  foreach ( $nodes as $node_id => $node ) {
@@ -903,6 +912,136 @@ final class FLBuilderModel {
903
  return $nodes;
904
  }
905
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
906
  /**
907
  * Returns an array of child nodes for a parent.
908
  *
@@ -997,10 +1136,33 @@ final class FLBuilderModel {
997
  foreach ( $cols as $col ) {
998
 
999
  $nodes['columns'][ $col->node ] = $col;
1000
- $modules = self::get_modules( $col );
1001
 
1002
- foreach ( $modules as $module ) {
1003
- $nodes['modules'][ $module->node ] = $module;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1004
  }
1005
  }
1006
  }
@@ -1240,15 +1402,17 @@ final class FLBuilderModel {
1240
  * @since 1.0
1241
  * @param string $node_id A node ID.
1242
  * @param int $position The new position.
 
1243
  * @return void
1244
  */
1245
  static public function reorder_node($node_id = null, $position = 0)
1246
  {
1247
  $data = self::get_layout_data();
1248
  $node = $data[$node_id];
1249
- $nodes = self::get_nodes($node->type, $node->parent);
 
1250
  $new_pos = 0;
1251
-
1252
  // Make sure node positions start at zero.
1253
  foreach($nodes as $node) {
1254
  $data[$node->node]->position = $new_pos;
@@ -1287,9 +1451,20 @@ final class FLBuilderModel {
1287
  $data = self::get_layout_data();
1288
  $new_parent = self::get_node($new_parent_id);
1289
  $node = self::get_node($node_id);
 
 
1290
 
1291
  // Set the node's new parent.
1292
- $data[$node_id]->parent = $new_parent->node;
 
 
 
 
 
 
 
 
 
1293
 
1294
  // Update the layout data.
1295
  self::update_layout_data($data);
@@ -1372,15 +1547,30 @@ final class FLBuilderModel {
1372
 
1373
  $new_nodes[ $col->node ] = clone $col;
1374
  $new_nodes[ $col->node ]->settings = clone $col->settings;
1375
- $modules = self::get_nodes( 'module', $col );
1376
 
1377
- foreach ( $modules as $module ) {
1378
 
1379
- $new_nodes[ $module->node ] = clone $module;
1380
- $new_nodes[ $module->node ]->settings = new stdClass;
1381
 
1382
- foreach ( $module->settings as $key => $val ) {
1383
- $new_nodes[ $module->node ]->settings->$key = $val;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1384
  }
1385
  }
1386
  }
@@ -1392,7 +1582,9 @@ final class FLBuilderModel {
1392
  // Set col group parent ids to the new row id and unset template data.
1393
  foreach ( $new_nodes as $child_node_id => $child ) {
1394
  if ( $child->type == 'column-group' ) {
1395
- $new_nodes[ $child_node_id ]->parent = $new_row_id;
 
 
1396
  }
1397
  if ( isset( $new_nodes[ $child_node_id ]->template_id ) ) {
1398
  unset( $new_nodes[ $child_node_id ]->template_id );
@@ -1412,7 +1604,7 @@ final class FLBuilderModel {
1412
  // Return the new row.
1413
  return self::get_node( $new_row_id );
1414
  }
1415
-
1416
  /**
1417
  * Returns the default settings for row nodes.
1418
  *
@@ -1423,6 +1615,54 @@ final class FLBuilderModel {
1423
  {
1424
  return self::get_settings_form_defaults( 'row' );
1425
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1426
 
1427
  /**
1428
  * Runs row specific logic on new row settings.
@@ -1554,7 +1794,7 @@ final class FLBuilderModel {
1554
  *
1555
  * @since 1.0
1556
  * @param string $node_id A row node ID.
1557
- * @param string $cols The type of column group layout.
1558
  * @param int $position The position of the new column group.
1559
  * @return object The new column group object.
1560
  */
@@ -1563,13 +1803,14 @@ final class FLBuilderModel {
1563
  $data = self::get_layout_data();
1564
  $group_node_id = self::generate_node_id();
1565
  $parent = self::get_node( $node_id );
 
1566
 
1567
  // Add the column group.
1568
  $data[$group_node_id] = new StdClass();
1569
  $data[$group_node_id]->node = $group_node_id;
1570
  $data[$group_node_id]->type = 'column-group';
1571
  $data[$group_node_id]->parent = $node_id;
1572
- $data[$group_node_id]->position = self::next_node_position('column-group', $node_id);
1573
  $data[$group_node_id]->settings = '';
1574
 
1575
  // Add node template data.
@@ -1578,28 +1819,66 @@ final class FLBuilderModel {
1578
  $data[$group_node_id]->template_node_id = $group_node_id;
1579
  }
1580
 
1581
- // Add the columns.
1582
- for($i = 0; $i < count(self::$row_layouts[$cols]); $i++) {
1583
-
1584
- $col_node_id = self::generate_node_id();
1585
- $data[$col_node_id] = new StdClass();
1586
- $data[$col_node_id]->node = $col_node_id;
1587
- $data[$col_node_id]->type = 'column';
1588
- $data[$col_node_id]->parent = $group_node_id;
1589
- $data[$col_node_id]->position = $i;
1590
- $data[$col_node_id]->settings = new StdClass();
1591
- $data[$col_node_id]->settings->size = self::$row_layouts[$cols][$i];
1592
 
1593
- // Add node template data.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1594
  if ( self::is_node_global( $parent ) ) {
1595
- $data[$col_node_id]->template_id = $parent->template_id;
1596
- $data[$col_node_id]->template_node_id = $col_node_id;
 
 
 
 
 
 
 
 
 
1597
  }
1598
  }
1599
 
1600
  // Update the layout data.
1601
  self::update_layout_data($data);
1602
-
 
 
 
 
 
 
 
 
 
 
1603
  // Position the column group.
1604
  if($position !== false) {
1605
  self::reorder_node($group_node_id, $position);
@@ -1671,7 +1950,7 @@ final class FLBuilderModel {
1671
  * Deletes a column.
1672
  *
1673
  * @since 1.0
1674
- * @param string $node_id Node ID of the column to delete.
1675
  * @param int $new_width New width of the remaining columns.
1676
  * @return void
1677
  */
@@ -1681,10 +1960,15 @@ final class FLBuilderModel {
1681
 
1682
  // Delete the column.
1683
  self::delete_node($node_id);
 
 
 
 
 
1684
 
1685
  // Get the group
1686
  $group = self::get_node($col->parent);
1687
-
1688
  // Get the group children.
1689
  $cols = self::get_nodes('column', $group->node);
1690
 
@@ -1711,6 +1995,48 @@ final class FLBuilderModel {
1711
  }
1712
  }
1713
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1714
  /**
1715
  * Resizes a column.
1716
  *
@@ -1729,7 +2055,7 @@ final class FLBuilderModel {
1729
  $siblings = array();
1730
  $siblings_width = 0;
1731
  $num_cols = count($cols);
1732
- $min_width = 10;
1733
  $max_width = 100 - $min_width;
1734
 
1735
  // Don't resize if only one column or width isn't a number.
@@ -1814,14 +2140,20 @@ final class FLBuilderModel {
1814
  * Resets the widths of all columns in a group.
1815
  *
1816
  * @since 1.6.4
1817
- * @param string $group_id Node ID of the group whose columns to reset.
1818
  * @return void
1819
  */
1820
  static public function reset_col_widths( $group_id = null )
1821
  {
 
 
 
 
 
 
 
1822
  $data = self::get_layout_data();
1823
  $post_data = self::get_post_data();
1824
- $group_id = isset( $post_data['group_id'] ) ? $post_data['group_id'] : $group_id;
1825
  $cols = self::get_nodes( 'column', $group_id );
1826
  $width = round( 100 / count( $cols ), 2 );
1827
 
@@ -1833,21 +2165,74 @@ final class FLBuilderModel {
1833
  }
1834
 
1835
  /**
1836
- * Inserts a column before or after another column.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1837
  *
1838
  * @since 1.6.4
1839
  * @param string $node_id Node ID of the column to insert before or after.
1840
  * @param string $insert Either before or after.
 
 
1841
  * @return object
1842
  */
1843
- static public function add_col( $col_id, $insert = 'before' )
1844
  {
1845
- $data = self::get_layout_data();
1846
- $new_col_id = self::generate_node_id();
1847
- $col = self::get_node( $col_id );
1848
- $parent = self::get_node( $col->parent );
1849
- $cols = self::get_nodes( 'column', $col->parent );
1850
- $num_cols = count( $cols ) + 1;
 
 
 
 
 
 
 
 
 
 
 
 
 
1851
 
1852
  // Get the new width.
1853
  if ( 6 === $num_cols ) {
@@ -1867,35 +2252,57 @@ final class FLBuilderModel {
1867
  else {
1868
  $new_col_position = $col->position + 1;
1869
  }
 
 
 
1870
 
1871
- // Add the column.
1872
- $data[ $new_col_id ] = new StdClass();
1873
- $data[ $new_col_id ]->node = $new_col_id;
1874
- $data[ $new_col_id ]->type = 'column';
1875
- $data[ $new_col_id ]->parent = $parent->node;
1876
- $data[ $new_col_id ]->position = self::next_node_position( 'column', $parent->node );
1877
- $data[ $new_col_id ]->settings = new StdClass();
1878
- $data[ $new_col_id ]->settings->size = $new_width;
1879
-
1880
- // Add node template data.
1881
- if ( self::is_node_global( $parent ) ) {
1882
- $data[ $new_col_id ]->template_id = $parent->template_id;
1883
- $data[ $new_col_id ]->template_node_id = $new_col_id;
 
 
 
1884
  }
1885
 
1886
- // Resize sibling columns.
1887
  foreach ( $cols as $sibling_col_id => $sibling_col ) {
 
1888
  $data[ $sibling_col_id ]->settings->size = $new_width;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1889
  }
1890
 
1891
  // Update the layout data.
1892
  self::update_layout_data( $data );
1893
-
1894
- // Position the new column.
1895
- self::reorder_node( $new_col_id, $new_col_position );
1896
 
1897
- // Return the new column.
1898
- return self::get_node( $new_col_id );
1899
  }
1900
 
1901
  /**
@@ -1983,6 +2390,19 @@ final class FLBuilderModel {
1983
  }
1984
  }
1985
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1986
  /**
1987
  * Returns an array of all modules that are enabled.
1988
  *
@@ -2114,14 +2534,14 @@ final class FLBuilderModel {
2114
  * Returns an instance of a module.
2115
  *
2116
  * @since 1.0
2117
- * @param string $node_id A module node ID.
2118
  * @return object|bool The module or false if it doesn't exist.
2119
  */
2120
- static public function get_module($node_id)
2121
  {
2122
- $module = self::get_node($node_id);
2123
 
2124
- if(isset(self::$modules[$module->settings->type])) {
2125
 
2126
  $class = get_class(self::$modules[$module->settings->type]);
2127
  $instance = new $class();
@@ -2163,7 +2583,7 @@ final class FLBuilderModel {
2163
 
2164
  foreach($modules as $module) {
2165
 
2166
- if(isset(self::$modules[$module->settings->type])) {
2167
 
2168
  $class = get_class(self::$modules[$module->settings->type]);
2169
  $instances[$i] = new $class();
@@ -2273,7 +2693,7 @@ final class FLBuilderModel {
2273
  $parent_id = $parent->node;
2274
  }
2275
 
2276
- // Add a new column if the parent is a row.
2277
  else if ( $parent->type == 'row' ) {
2278
  $col_group = self::add_col_group( $parent->node, '1-col', $position );
2279
  $cols = self::get_nodes( 'column', $col_group->node );
@@ -2281,6 +2701,12 @@ final class FLBuilderModel {
2281
  $parent_id = $parent->node;
2282
  }
2283
 
 
 
 
 
 
 
2284
  return $parent_id;
2285
  }
2286
 
@@ -2344,7 +2770,7 @@ final class FLBuilderModel {
2344
  $module_node_id = self::generate_node_id();
2345
 
2346
  // Add a new parent if one is needed.
2347
- if ( ! $parent || 'row' == $parent->type ) {
2348
  $parent_id = self::add_module_parent( $parent_id, $position );
2349
  $parent = self::get_node( $parent_id );
2350
  $position = null;
@@ -2424,6 +2850,24 @@ final class FLBuilderModel {
2424
  return $new_settings;
2425
  }
2426
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2427
  /**
2428
  * Returns the default settings for a module.
2429
  *
@@ -2632,13 +3076,32 @@ final class FLBuilderModel {
2632
  // Loop through the fields and get the defaults.
2633
  foreach($fields as $name => $field) {
2634
 
2635
- $default = isset($field['default']) ? $field['default'] : '';
2636
- $is_multiple = isset($field['multiple']) && $field['multiple'] === true;
2637
  $supports_multiple = $field['type'] != 'editor' && $field['type'] != 'photo';
 
 
2638
 
2639
  if($is_multiple && $supports_multiple) {
2640
  $defaults->$name = array($default);
2641
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2642
  else {
2643
  $defaults->$name = $default;
2644
  }
@@ -2749,14 +3212,19 @@ final class FLBuilderModel {
2749
  */
2750
  static public function get_global_settings()
2751
  {
2752
- $settings = get_option('_fl_builder_settings');
2753
- $defaults = self::get_settings_form_defaults( 'global' );
 
2754
 
2755
- if(!$settings) {
2756
- $settings = new StdClass();
 
 
 
 
2757
  }
2758
 
2759
- return (object)array_merge((array)$defaults, (array)$settings);
2760
  }
2761
 
2762
  /**
@@ -2772,8 +3240,11 @@ final class FLBuilderModel {
2772
  $new_settings = (object)array_merge((array)$old_settings, (array)$settings);
2773
 
2774
  self::delete_asset_cache_for_all_posts();
 
 
 
2775
 
2776
- return update_option('_fl_builder_settings', $settings);
2777
  }
2778
 
2779
  /**
@@ -4296,7 +4767,7 @@ final class FLBuilderModel {
4296
  $root_node = self::get_node_template_root( $type, $template_data );
4297
 
4298
  // Add a new parent for module node templates if needed.
4299
- if ( 'module' == $root_node->type && ( ! $parent || 'row' == $parent->type ) ) {
4300
  $parent_id = self::add_module_parent( $parent_id, $position );
4301
  $position = null;
4302
  }
51
  */
52
  static public $modules = array();
53
 
54
+ /**
55
+ * Cached global settings.
56
+ *
57
+ * @access private
58
+ * @var array $global_settings
59
+ */
60
+ private static $global_settings;
61
+
62
  /**
63
  * The last node id that was generated by the builder.
64
  * This is saved to ensure the next node id is unique.
895
  $nodes[ $node_id ] = $node;
896
  }
897
  }
 
 
898
  }
899
+
900
+ // Sort the nodes by position.
901
+ uasort( $nodes, array( 'FLBuilderModel', 'order_nodes' ) );
902
 
903
  // Merge default settings.
904
  foreach ( $nodes as $node_id => $node ) {
912
  return $nodes;
913
  }
914
 
915
+ /**
916
+ * Returns the direct parent object for a single node.
917
+ *
918
+ * @since 1.9
919
+ * @param string|object $node_id Either a node id or node object.
920
+ * @param string $status The node status. Either draft or published.
921
+ * @return object
922
+ */
923
+ static public function get_node_parent( $node_id = null, $status = null )
924
+ {
925
+ $parent = null;
926
+
927
+ if ( is_object( $node_id ) ) {
928
+ $node = $node_id;
929
+ }
930
+ else {
931
+ $node = self::get_node( $node_id, $status );
932
+ }
933
+
934
+ if ( $node ) {
935
+
936
+ $template_post_id = self::is_node_global( $node );
937
+ $post_id = $template_post_id ? $template_post_id : self::get_post_id();
938
+ $data = self::get_layout_data( $status, $post_id );
939
+
940
+ if ( isset( $data[ $node->parent ] ) ) {
941
+ return $data[ $node->parent ];
942
+ }
943
+ }
944
+
945
+ return $parent;
946
+ }
947
+
948
+ /**
949
+ * Returns a node's parent node of the specified type.
950
+ *
951
+ * @since 1.8.3
952
+ * @param string|object $node The node ID. Can also be a node object.
953
+ * @param string $type The type of parent to return. Either "column", "column-group" or "row".
954
+ * @return object The parent node.
955
+ */
956
+ static public function get_node_parent_by_type( $node, $type = '' )
957
+ {
958
+ // Get node object if node ID set
959
+ if ( ! is_object( $node ) ) {
960
+ $node = self::get_node( $node );
961
+ }
962
+
963
+ // Return early if no node object found or node has no parent
964
+ if ( empty( $node ) || empty( $node->parent ) ) {
965
+ return;
966
+ }
967
+
968
+ // Helper array of parent types and their categories for each node type
969
+ $parent_types = array(
970
+ 'module' => array(
971
+ 'type' => 'column',
972
+ 'category' => 'columns',
973
+ ),
974
+ 'column' => array(
975
+ 'type' => 'column-group',
976
+ 'category' => 'groups',
977
+ ),
978
+ 'column-group' => array(
979
+ 'type' => 'row',
980
+ 'category' => 'rows',
981
+ ),
982
+ );
983
+
984
+ // Helper array of node type hierarchies
985
+ $hierarchy = array(
986
+ 'module' => 10,
987
+ 'column' => 20,
988
+ 'column-group' => 30,
989
+ 'row' => 40,
990
+ );
991
+
992
+ // Set immediate parent type of the node when:
993
+ // - type is not of allowed types
994
+ // - type is the same as node type
995
+ // - type is lower in hierarchy than the node type
996
+ if ( ! in_array( $type, array_keys( $hierarchy ) ) || $type == $node->type || $hierarchy[ $parent_types[ $node->type ]['type'] ] > $hierarchy[ $type ] ) {
997
+ $type = $parent_types[ $node->type ]['type'];
998
+ }
999
+
1000
+ // Get all layout nodes, categorized
1001
+ $nodes = array_filter( self::get_categorized_nodes() );
1002
+
1003
+ // Null out the output initially
1004
+ $output = '';
1005
+
1006
+ // Parse layout nodes to get the correct output
1007
+ if ( ! empty( $nodes ) ) {
1008
+ while ( empty( $output ) ) {
1009
+ if ( ! empty( $node->parent ) && isset( $nodes[ $parent_types[ $node->type ]['category'] ] ) ) {
1010
+
1011
+ $break_while = true;
1012
+
1013
+ foreach ( $nodes[ $parent_types[ $node->type ]['category'] ] as $parent ) {
1014
+ if ( $parent->node == $node->parent ) {
1015
+
1016
+ $break_while = false;
1017
+
1018
+ if ( $parent_types[ $node->type ]['type'] == $type ) {
1019
+ // We have got the type we wanted! Set the output and break from while and foreach loops.
1020
+ $output = $parent;
1021
+ break; // From foreach
1022
+ }
1023
+
1024
+ // We now need node parents to crawl the tree
1025
+ $node = $parent;
1026
+ break; // From foreach
1027
+
1028
+ }
1029
+ }
1030
+
1031
+ // If we get this far without changing $break_while, something is wrong
1032
+ if ( $break_while ) {
1033
+ break; // From while
1034
+ }
1035
+
1036
+ } else {
1037
+ break; // From while
1038
+ }
1039
+ }
1040
+ }
1041
+
1042
+ return $output;
1043
+ }
1044
+
1045
  /**
1046
  * Returns an array of child nodes for a parent.
1047
  *
1136
  foreach ( $cols as $col ) {
1137
 
1138
  $nodes['columns'][ $col->node ] = $col;
1139
+ $col_children = self::get_nodes( null, $col );
1140
 
1141
+ foreach ( $col_children as $col_child ) {
1142
+
1143
+ if ( 'module' == $col_child->type ) {
1144
+
1145
+ $module = self::get_module( $col_child );
1146
+
1147
+ if ( $module ) {
1148
+ $nodes['modules'][ $col_child->node ] = $module;
1149
+ }
1150
+ }
1151
+ else if ( 'column-group' == $col_child->type ) {
1152
+
1153
+ $nodes['groups'][ $col_child->node ] = $col_child;
1154
+ $group_cols = self::get_nodes( 'column', $col_child );
1155
+
1156
+ foreach ( $group_cols as $group_col ) {
1157
+
1158
+ $nodes['columns'][ $group_col->node ] = $group_col;
1159
+ $modules = self::get_modules( $group_col );
1160
+
1161
+ foreach ( $modules as $module ) {
1162
+ $nodes['modules'][ $module->node ] = $module;
1163
+ }
1164
+ }
1165
+ }
1166
  }
1167
  }
1168
  }
1402
  * @since 1.0
1403
  * @param string $node_id A node ID.
1404
  * @param int $position The new position.
1405
+ * @param string $type The type of node to order.
1406
  * @return void
1407
  */
1408
  static public function reorder_node($node_id = null, $position = 0)
1409
  {
1410
  $data = self::get_layout_data();
1411
  $node = $data[$node_id];
1412
+ $type = ! $node->parent ? $node->type : null;
1413
+ $nodes = self::get_nodes($type, $node->parent);
1414
  $new_pos = 0;
1415
+
1416
  // Make sure node positions start at zero.
1417
  foreach($nodes as $node) {
1418
  $data[$node->node]->position = $new_pos;
1451
  $data = self::get_layout_data();
1452
  $new_parent = self::get_node($new_parent_id);
1453
  $node = self::get_node($node_id);
1454
+ $siblings = self::get_nodes(null, $node->parent);
1455
+ $sibling_pos = 0;
1456
 
1457
  // Set the node's new parent.
1458
+ $data[ $node_id ]->parent = $new_parent->node;
1459
+
1460
+ // Remove the node from the $siblings array.
1461
+ unset( $siblings[ $node_id ] );
1462
+
1463
+ // Reorder old siblings.
1464
+ foreach ( $siblings as $sibling ) {
1465
+ $data[ $sibling->node ]->position = $sibling_pos;
1466
+ $sibling_pos++;
1467
+ }
1468
 
1469
  // Update the layout data.
1470
  self::update_layout_data($data);
1547
 
1548
  $new_nodes[ $col->node ] = clone $col;
1549
  $new_nodes[ $col->node ]->settings = clone $col->settings;
1550
+ $nodes = self::get_nodes( null, $col );
1551
 
1552
+ foreach ( $nodes as $node ) {
1553
 
1554
+ $new_nodes[ $node->node ] = clone $node;
 
1555
 
1556
+ if ( 'module' == $node->type ) {
1557
+ $new_nodes[ $node->node ]->settings = self::clone_module_settings( $node->settings );
1558
+ }
1559
+ else if ( 'column-group' == $node->type ) {
1560
+
1561
+ $nested_cols = self::get_nodes( 'column', $node );
1562
+
1563
+ foreach ( $nested_cols as $nested_col ) {
1564
+
1565
+ $new_nodes[ $nested_col->node ] = clone $nested_col;
1566
+ $new_nodes[ $nested_col->node ]->settings = clone $nested_col->settings;
1567
+ $modules = self::get_nodes( 'module', $nested_col );
1568
+
1569
+ foreach ( $modules as $module ) {
1570
+ $new_nodes[ $module->node ] = clone $module;
1571
+ $new_nodes[ $module->node ]->settings = self::clone_module_settings( $module->settings );
1572
+ }
1573
+ }
1574
  }
1575
  }
1576
  }
1582
  // Set col group parent ids to the new row id and unset template data.
1583
  foreach ( $new_nodes as $child_node_id => $child ) {
1584
  if ( $child->type == 'column-group' ) {
1585
+ if ( $child->parent == $row->node || ( isset( $row->template_node_id ) && $child->parent == $row->template_node_id ) ) {
1586
+ $new_nodes[ $child_node_id ]->parent = $new_row_id;
1587
+ }
1588
  }
1589
  if ( isset( $new_nodes[ $child_node_id ]->template_id ) ) {
1590
  unset( $new_nodes[ $child_node_id ]->template_id );
1604
  // Return the new row.
1605
  return self::get_node( $new_row_id );
1606
  }
1607
+
1608
  /**
1609
  * Returns the default settings for row nodes.
1610
  *
1615
  {
1616
  return self::get_settings_form_defaults( 'row' );
1617
  }
1618
+
1619
+ /**
1620
+ * Returns an array of spacing placeholders for row
1621
+ * margins and padding.
1622
+ *
1623
+ * @since 1.9
1624
+ * @return array
1625
+ */
1626
+ static public function get_row_spacing_placeholders()
1627
+ {
1628
+ $settings = FLBuilderModel::get_global_settings();
1629
+ $placeholders = array();
1630
+
1631
+ // Default.
1632
+ $placeholders['row_margins'] = $settings->row_margins;
1633
+ $placeholders['row_padding'] = $settings->row_padding;
1634
+
1635
+ // Medium.
1636
+ $placeholders['row_margins_medium'] = ( '' != $settings->row_margins_medium ) ? $settings->row_margins_medium : $settings->row_margins;
1637
+ $placeholders['row_padding_medium'] = ( '' != $settings->row_padding_medium ) ? $settings->row_padding_medium : $settings->row_padding;
1638
+
1639
+ // Responsive row margins.
1640
+ if ( '' != $settings->row_margins_responsive ) {
1641
+ $placeholders['row_margins_responsive'] = $settings->row_margins_responsive;
1642
+ }
1643
+ else if ( $settings->auto_spacing ) {
1644
+ $placeholders['row_margins_responsive'] = 0;
1645
+ }
1646
+ else {
1647
+ $placeholders['row_margins_responsive'] = $placeholders['row_margins_medium'];
1648
+ }
1649
+
1650
+ // Responsive row padding.
1651
+ if ( '' != $settings->row_padding_responsive ) {
1652
+ $placeholders['row_padding_tb_responsive'] = $settings->row_padding_responsive;
1653
+ $placeholders['row_padding_lr_responsive'] = $settings->row_padding_responsive;
1654
+ }
1655
+ else if ( $settings->auto_spacing ) {
1656
+ $placeholders['row_padding_tb_responsive'] = $placeholders['row_padding_medium'];
1657
+ $placeholders['row_padding_lr_responsive'] = 0;
1658
+ }
1659
+ else {
1660
+ $placeholders['row_padding_tb_responsive'] = $placeholders['row_padding_medium'];
1661
+ $placeholders['row_padding_lr_responsive'] = $placeholders['row_padding_medium'];
1662
+ }
1663
+
1664
+ return $placeholders;
1665
+ }
1666
 
1667
  /**
1668
  * Runs row specific logic on new row settings.
1794
  *
1795
  * @since 1.0
1796
  * @param string $node_id A row node ID.
1797
+ * @param string $cols The type of column group layout or the ID of an existing column to add.
1798
  * @param int $position The position of the new column group.
1799
  * @return object The new column group object.
1800
  */
1803
  $data = self::get_layout_data();
1804
  $group_node_id = self::generate_node_id();
1805
  $parent = self::get_node( $node_id );
1806
+ $old_group = null;
1807
 
1808
  // Add the column group.
1809
  $data[$group_node_id] = new StdClass();
1810
  $data[$group_node_id]->node = $group_node_id;
1811
  $data[$group_node_id]->type = 'column-group';
1812
  $data[$group_node_id]->parent = $node_id;
1813
+ $data[$group_node_id]->position = self::next_node_position(null, $node_id);
1814
  $data[$group_node_id]->settings = '';
1815
 
1816
  // Add node template data.
1819
  $data[$group_node_id]->template_node_id = $group_node_id;
1820
  }
1821
 
1822
+ // Add new columns?
1823
+ if ( isset( self::$row_layouts[ $cols ] ) ) {
 
 
 
 
 
 
 
 
 
1824
 
1825
+ for($i = 0; $i < count(self::$row_layouts[$cols]); $i++) {
1826
+
1827
+ $col_node_id = self::generate_node_id();
1828
+ $data[$col_node_id] = new StdClass();
1829
+ $data[$col_node_id]->node = $col_node_id;
1830
+ $data[$col_node_id]->type = 'column';
1831
+ $data[$col_node_id]->parent = $group_node_id;
1832
+ $data[$col_node_id]->position = $i;
1833
+ $data[$col_node_id]->settings = new StdClass();
1834
+ $data[$col_node_id]->settings->size = self::$row_layouts[$cols][$i];
1835
+
1836
+ if ( self::is_node_global( $parent ) ) {
1837
+ $data[$col_node_id]->template_id = $parent->template_id;
1838
+ $data[$col_node_id]->template_node_id = $col_node_id;
1839
+ }
1840
+ }
1841
+ }
1842
+ // Add an existing column.
1843
+ else {
1844
+
1845
+ $old_group = $data[ $cols ]->parent;
1846
+ $siblings = self::get_nodes( 'column', $old_group );
1847
+ $sibling_pos = 0;
1848
+
1849
+ // Add the column to the group.
1850
+ $data[ $cols ]->parent = $group_node_id;
1851
+ $data[ $cols ]->position = 0;
1852
+ $data[ $cols ]->settings->size = 100;
1853
+
1854
  if ( self::is_node_global( $parent ) ) {
1855
+ $data[ $cols ]->template_id = $parent->template_id;
1856
+ $data[ $cols ]->template_node_id = $data[ $cols ]->node;
1857
+ }
1858
+
1859
+ // Remove the column from the $siblings array.
1860
+ unset( $siblings[ $cols ] );
1861
+
1862
+ // Reorder old siblings.
1863
+ foreach ( $siblings as $sibling ) {
1864
+ $data[ $sibling->node ]->position = $sibling_pos;
1865
+ $sibling_pos++;
1866
  }
1867
  }
1868
 
1869
  // Update the layout data.
1870
  self::update_layout_data($data);
1871
+
1872
+ // Delete an existing column's old group if empty or resize it.
1873
+ if ( $old_group ) {
1874
+ if ( 0 === count( self::get_nodes( 'column', $old_group ) ) ) {
1875
+ self::delete_node( $old_group );
1876
+ }
1877
+ else {
1878
+ self::reset_col_widths( $old_group );
1879
+ }
1880
+ }
1881
+
1882
  // Position the column group.
1883
  if($position !== false) {
1884
  self::reorder_node($group_node_id, $position);
1950
  * Deletes a column.
1951
  *
1952
  * @since 1.0
1953
+ * @param string $node_id Node ID of the column to delete (can also be a group).
1954
  * @param int $new_width New width of the remaining columns.
1955
  * @return void
1956
  */
1960
 
1961
  // Delete the column.
1962
  self::delete_node($node_id);
1963
+
1964
+ // Return if the node we just deleted was a group.
1965
+ if('column-group' == $col->type) {
1966
+ return;
1967
+ }
1968
 
1969
  // Get the group
1970
  $group = self::get_node($col->parent);
1971
+
1972
  // Get the group children.
1973
  $cols = self::get_nodes('column', $group->node);
1974
 
1995
  }
1996
  }
1997
 
1998
+ /**
1999
+ * Moves a column within a group.
2000
+ *
2001
+ * @since 1.9
2002
+ * @param string $node_id
2003
+ * @param int $position
2004
+ * @return void
2005
+ */
2006
+ static public function reorder_col( $node_id, $position = 0 )
2007
+ {
2008
+ $col = self::get_node( $node_id );
2009
+
2010
+ self::reorder_node( $node_id, $position );
2011
+ self::reset_col_widths( $col->parent );
2012
+ }
2013
+
2014
+ /**
2015
+ * Moves a column from one group to another.
2016
+ *
2017
+ * @since 1.9
2018
+ * @param string $col_id
2019
+ * @param string $group_id
2020
+ * @param int $position
2021
+ * @param array $resize
2022
+ * @return void
2023
+ */
2024
+ static public function move_col( $col_id, $group_id, $position, $resize = array() )
2025
+ {
2026
+ $col = self::get_node( $col_id );
2027
+ $old_group = self::get_node( $col->parent );
2028
+
2029
+ self::move_node( $col_id, $group_id, $position );
2030
+
2031
+ if ( 0 === count( self::get_nodes( 'column', $old_group ) ) ) {
2032
+ self::delete_node( $old_group->node );
2033
+ self::reset_col_widths( $group_id );
2034
+ }
2035
+ else {
2036
+ self::reset_col_widths( $resize );
2037
+ }
2038
+ }
2039
+
2040
  /**
2041
  * Resizes a column.
2042
  *
2055
  $siblings = array();
2056
  $siblings_width = 0;
2057
  $num_cols = count($cols);
2058
+ $min_width = 8;
2059
  $max_width = 100 - $min_width;
2060
 
2061
  // Don't resize if only one column or width isn't a number.
2140
  * Resets the widths of all columns in a group.
2141
  *
2142
  * @since 1.6.4
2143
+ * @param string|array $group_id Node ID of the group whose columns to reset or an array of group IDs.
2144
  * @return void
2145
  */
2146
  static public function reset_col_widths( $group_id = null )
2147
  {
2148
+ if ( 'array' == gettype( $group_id ) ) {
2149
+ foreach ( $group_id as $id ) {
2150
+ self::reset_col_widths( $id );
2151
+ }
2152
+ return;
2153
+ }
2154
+
2155
  $data = self::get_layout_data();
2156
  $post_data = self::get_post_data();
 
2157
  $cols = self::get_nodes( 'column', $group_id );
2158
  $width = round( 100 / count( $cols ), 2 );
2159
 
2165
  }
2166
 
2167
  /**
2168
+ * Adds a column to a column group in the current layout.
2169
+ *
2170
+ * @since 1.9
2171
+ * @param string $node_id A column group node ID.
2172
+ * @param int $position The position of the new column.
2173
+ * @return object The new column object.
2174
+ */
2175
+ static public function add_col($node_id = null, $position = false)
2176
+ {
2177
+ $group = self::get_node( $node_id );
2178
+ $cols = self::get_nodes( 'column', $group );
2179
+ $num_cols = count( $cols );
2180
+ $i = 0;
2181
+ $sibling = false;
2182
+ $insert = 'before';
2183
+
2184
+ foreach ( $cols as $col ) {
2185
+ if ( $i == $position ) {
2186
+ $sibling = $col;
2187
+ break;
2188
+ }
2189
+ $i++;
2190
+ }
2191
+
2192
+ if ( ! $sibling ) {
2193
+ $sibling = $col;
2194
+ $insert = 'after';
2195
+ }
2196
+
2197
+ self::add_cols( $sibling->node, $insert );
2198
+
2199
+ $cols = self::get_nodes( 'column', $group );
2200
+ $col_ids = array_keys( $cols );
2201
+
2202
+ return $cols[ $col_ids[ $position ] ];
2203
+ }
2204
+
2205
+ /**
2206
+ * Inserts a column (or columns) before or after another column.
2207
  *
2208
  * @since 1.6.4
2209
  * @param string $node_id Node ID of the column to insert before or after.
2210
  * @param string $insert Either before or after.
2211
+ * @param string $type The type of column(s) to insert.
2212
+ * @param boolean $nested Whether these columns are nested or not.
2213
  * @return object
2214
  */
2215
+ static public function add_cols( $col_id, $insert = 'before', $type = '1-col', $nested = false )
2216
  {
2217
+ $data = self::get_layout_data();
2218
+ $col = self::get_node( $col_id );
2219
+ $parent = self::get_node( $col->parent );
2220
+ $cols = self::get_nodes( 'column', $col->parent );
2221
+ $global = self::is_node_global( $parent );
2222
+ $num_new_cols = count( self::$row_layouts[ $type ] );
2223
+ $num_cols = count( $cols );
2224
+ $max_cols = $nested ? 4 : 12;
2225
+ $reposition = false;
2226
+ $position = 0;
2227
+
2228
+ // Make sure we have 12 columns or less.
2229
+ if ( $num_cols + $num_new_cols > $max_cols ) {
2230
+ $num_new_cols = $num_new_cols - ( $num_cols + $num_new_cols - $max_cols );
2231
+ $num_cols = $max_cols;
2232
+ }
2233
+ else {
2234
+ $num_cols += $num_new_cols;
2235
+ }
2236
 
2237
  // Get the new width.
2238
  if ( 6 === $num_cols ) {
2252
  else {
2253
  $new_col_position = $col->position + 1;
2254
  }
2255
+
2256
+ // Add the new columns.
2257
+ for ( $i = 0; $i < $num_new_cols; $i++ ) {
2258
 
2259
+ $new_col_id = self::generate_node_id();
2260
+ $data[ $new_col_id ] = new StdClass();
2261
+ $data[ $new_col_id ]->node = $new_col_id;
2262
+ $data[ $new_col_id ]->type = 'column';
2263
+ $data[ $new_col_id ]->parent = $parent->node;
2264
+ $data[ $new_col_id ]->position = $new_col_position;
2265
+ $data[ $new_col_id ]->settings = new StdClass();
2266
+ $data[ $new_col_id ]->settings->size = $new_width;
2267
+
2268
+ // Add node template data.
2269
+ if ( $global ) {
2270
+ $data[ $new_col_id ]->template_id = $parent->template_id;
2271
+ $data[ $new_col_id ]->template_node_id = $new_col_id;
2272
+ }
2273
+
2274
+ $new_col_position++;
2275
  }
2276
 
2277
+ // Resize sibling columns and set their new position.
2278
  foreach ( $cols as $sibling_col_id => $sibling_col ) {
2279
+
2280
  $data[ $sibling_col_id ]->settings->size = $new_width;
2281
+
2282
+ if ( $sibling_col_id == $col_id ) {
2283
+
2284
+ $reposition = true;
2285
+
2286
+ if ( 'before' == $insert ) {
2287
+ $data[ $sibling_col_id ]->position = $new_col_position;
2288
+ $new_col_position++;
2289
+ }
2290
+ }
2291
+ else if ( $reposition ) {
2292
+ $data[ $sibling_col_id ]->position = $new_col_position;
2293
+ $new_col_position++;
2294
+ }
2295
+ else {
2296
+ $data[ $sibling_col_id ]->position = $position;
2297
+ $position++;
2298
+ }
2299
  }
2300
 
2301
  // Update the layout data.
2302
  self::update_layout_data( $data );
 
 
 
2303
 
2304
+ // Return the column group.
2305
+ return $parent;
2306
  }
2307
 
2308
  /**
2390
  }
2391
  }
2392
 
2393
+ /**
2394
+ * Checks to see if a module of a certain type has
2395
+ * been registered.
2396
+ *
2397
+ * @since 1.9
2398
+ * @param array $type The module's type slug.
2399
+ * @return void
2400
+ */
2401
+ static public function is_module_registered( $type )
2402
+ {
2403
+ return isset( self::$modules[ $type ] );
2404
+ }
2405
+
2406
  /**
2407
  * Returns an array of all modules that are enabled.
2408
  *
2534
  * Returns an instance of a module.
2535
  *
2536
  * @since 1.0
2537
+ * @param string|object $node_id A module node ID or object.
2538
  * @return object|bool The module or false if it doesn't exist.
2539
  */
2540
+ static public function get_module( $node_id )
2541
  {
2542
+ $module = is_object( $node_id ) ? $node_id : self::get_node( $node_id );
2543
 
2544
+ if( self::is_module_registered( $module->settings->type ) ) {
2545
 
2546
  $class = get_class(self::$modules[$module->settings->type]);
2547
  $instance = new $class();
2583
 
2584
  foreach($modules as $module) {
2585
 
2586
+ if ( self::is_module_registered( $module->settings->type ) ) {
2587
 
2588
  $class = get_class(self::$modules[$module->settings->type]);
2589
  $instances[$i] = new $class();
2693
  $parent_id = $parent->node;
2694
  }
2695
 
2696
+ // Add a new column group if the parent is a row.
2697
  else if ( $parent->type == 'row' ) {
2698
  $col_group = self::add_col_group( $parent->node, '1-col', $position );
2699
  $cols = self::get_nodes( 'column', $col_group->node );
2701
  $parent_id = $parent->node;
2702
  }
2703
 
2704
+ // Add a new column if the parent is a column group.
2705
+ else if ( $parent->type == 'column-group' ) {
2706
+ $parent = self::add_col( $parent->node, $position );
2707
+ $parent_id = $parent->node;
2708
+ }
2709
+
2710
  return $parent_id;
2711
  }
2712
 
2770
  $module_node_id = self::generate_node_id();
2771
 
2772
  // Add a new parent if one is needed.
2773
+ if ( ! $parent || 'row' == $parent->type || 'column-group' == $parent->type ) {
2774
  $parent_id = self::add_module_parent( $parent_id, $position );
2775
  $parent = self::get_node( $parent_id );
2776
  $position = null;
2850
  return $new_settings;
2851
  }
2852
 
2853
+ /**
2854
+ * Returns a cloned settings object for a module.
2855
+ *
2856
+ * @since 1.9
2857
+ * @param object $settings
2858
+ * @return object
2859
+ */
2860
+ static public function clone_module_settings( $settings )
2861
+ {
2862
+ $new_settings = new stdClass;
2863
+
2864
+ foreach ( $settings as $key => $val ) {
2865
+ $new_settings->$key = $val;
2866
+ }
2867
+
2868
+ return $new_settings;
2869
+ }
2870
+
2871
  /**
2872
  * Returns the default settings for a module.
2873
  *
3076
  // Loop through the fields and get the defaults.
3077
  foreach($fields as $name => $field) {
3078
 
3079
+ $default = isset($field['default']) ? $field['default'] : '';
3080
+ $is_multiple = isset($field['multiple']) && $field['multiple'] === true;
3081
  $supports_multiple = $field['type'] != 'editor' && $field['type'] != 'photo';
3082
+ $responsive = isset($field['responsive']) && $field['responsive'] ? $field['responsive'] : false;
3083
+ $responsive_name = '';
3084
 
3085
  if($is_multiple && $supports_multiple) {
3086
  $defaults->$name = array($default);
3087
  }
3088
+ else if ( $responsive ) {
3089
+
3090
+ foreach ( array( 'default', 'medium', 'responsive' ) as $device ) {
3091
+
3092
+ $responsive_name = $name . ( 'default' == $device ? '' : '_' . $device );
3093
+
3094
+ if ( is_array( $responsive ) && isset( $responsive['default'] ) && isset( $responsive['default'][ $device ] ) ) {
3095
+ $defaults->{ $responsive_name } = $responsive['default'][ $device ];
3096
+ }
3097
+ else if( 'default' == $device ) {
3098
+ $defaults->$name = $default;
3099
+ }
3100
+ else {
3101
+ $defaults->{ $responsive_name } = '';
3102
+ }
3103
+ }
3104
+ }
3105
  else {
3106
  $defaults->$name = $default;
3107
  }
3212
  */
3213
  static public function get_global_settings()
3214
  {
3215
+ if ( null === self::$global_settings ) {
3216
+ $settings = get_option('_fl_builder_settings');
3217
+ $defaults = self::get_settings_form_defaults( 'global' );
3218
 
3219
+ if ( !$settings ) {
3220
+ $settings = new StdClass();
3221
+ }
3222
+
3223
+ // Merge in defaults and cache settings
3224
+ self::$global_settings = (object) array_merge((array) $defaults, (array) $settings);
3225
  }
3226
 
3227
+ return self::$global_settings;
3228
  }
3229
 
3230
  /**
3240
  $new_settings = (object)array_merge((array)$old_settings, (array)$settings);
3241
 
3242
  self::delete_asset_cache_for_all_posts();
3243
+ self::$global_settings = null;
3244
+
3245
+ update_option('_fl_builder_settings', $settings);
3246
 
3247
+ return self::get_global_settings();
3248
  }
3249
 
3250
  /**
4767
  $root_node = self::get_node_template_root( $type, $template_data );
4768
 
4769
  // Add a new parent for module node templates if needed.
4770
+ if ( 'module' == $root_node->type && ( ! $parent || 'row' == $parent->type || 'column-group' == $parent->type ) ) {
4771
  $parent_id = self::add_module_parent( $parent_id, $position );
4772
  $position = null;
4773
  }
classes/class-fl-builder.php CHANGED
@@ -196,16 +196,21 @@ final class FLBuilder {
196
  * @param array $buttons The current buttons array.
197
  * @return array
198
  */
199
- static public function editor_buttons_2($buttons)
200
  {
201
- if(FLBuilderModel::is_builder_active()) {
 
 
202
 
203
- array_shift($buttons);
204
- array_unshift($buttons, 'fontsizeselect');
205
- array_unshift($buttons, 'formatselect');
 
 
 
206
 
207
- if(($key = array_search('wp_help', $buttons)) !== false) {
208
- unset($buttons[$key]);
209
  }
210
  }
211
 
@@ -545,18 +550,20 @@ final class FLBuilder {
545
 
546
  // Enqueue individual builder scripts if WP_DEBUG is on.
547
  if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
548
- wp_enqueue_script('fl-color-picker', $js_url . 'fl-color-picker.js', array(), $ver, true);
549
- wp_enqueue_script('fl-lightbox', $js_url . 'fl-lightbox.js', array(), $ver, true);
550
- wp_enqueue_script('fl-icon-selector', $js_url . 'fl-icon-selector.js', array(), $ver, true);
551
- wp_enqueue_script('fl-stylesheet', $js_url . 'fl-stylesheet.js', array(), $ver, true);
552
- wp_enqueue_script('fl-builder', $js_url . 'fl-builder.js', array(), $ver, true);
553
- wp_enqueue_script('fl-builder-ajax-layout', $js_url . 'fl-builder-ajax-layout.js', array(), $ver, true);
554
- wp_enqueue_script('fl-builder-preview', $js_url . 'fl-builder-preview.js', array(), $ver, true);
555
- wp_enqueue_script('fl-builder-services', $js_url . 'fl-builder-services.js', array(), $ver, true);
556
- wp_enqueue_script('fl-builder-tour', $js_url . 'fl-builder-tour.js', array(), $ver, true);
 
 
557
  }
558
  else {
559
- wp_enqueue_script('fl-builder-min', $js_url . 'fl-builder.min.js', array(), $ver, true);
560
  }
561
 
562
  /* Additional module styles and scripts */
@@ -704,6 +711,7 @@ final class FLBuilder {
704
  if ( FLBuilderModel::is_builder_active() ) {
705
 
706
  $post_id = $wp_the_query->post->ID;
 
707
  $simple_ui = ! FLBuilderModel::current_user_has_editing_capability();
708
  $categories = FLBuilderModel::get_categorized_modules();
709
  $render_panel = apply_filters( 'fl_builder_render_ui_panel', FLBuilderModel::current_user_has_editing_capability() );
@@ -1186,7 +1194,16 @@ final class FLBuilder {
1186
  $value = isset($settings->$name) ? $settings->$name : '';
1187
  $preview = isset($field['preview']) ? json_encode($field['preview']) : json_encode(array('type' => 'refresh'));
1188
  $row_class = isset($field['row_class']) ? ' ' . $field['row_class'] : '';
 
 
 
 
 
 
 
 
1189
 
 
1190
  if($is_multiple && $supports_multiple) {
1191
 
1192
  $values = $value;
@@ -1530,8 +1547,9 @@ final class FLBuilder {
1530
  */
1531
  static public function render_column_group_attributes( $group )
1532
  {
1533
- $cols = FLBuilderModel::get_nodes( 'column', $group );
1534
- $attrs = array(
 
1535
  'class' => array(
1536
  'fl-col-group',
1537
  'fl-node-' . $group->node
@@ -1539,6 +1557,10 @@ final class FLBuilder {
1539
  'data-node' => $group->node
1540
  );
1541
 
 
 
 
 
1542
  foreach( $cols as $col ) {
1543
 
1544
  if( isset( $col->settings->equal_height ) && $col->settings->equal_height == 'yes' ) {
@@ -1605,7 +1627,7 @@ final class FLBuilder {
1605
 
1606
  return array(
1607
  'settings' => $rendered_settings['html'],
1608
- 'state' => FLBuilderAJAXLayout::render( $node_id )
1609
  );
1610
  }
1611
 
@@ -1620,6 +1642,7 @@ final class FLBuilder {
1620
  {
1621
  $custom_class = apply_filters( 'fl_builder_column_custom_class', $col->settings->class, $col );
1622
  $overlay_bgs = array( 'photo' );
 
1623
  $attrs = array(
1624
  'id' => $col->settings->id,
1625
  'class' => array(
@@ -1634,6 +1657,9 @@ final class FLBuilder {
1634
  if ( $col->settings->size <= 50 ) {
1635
  $attrs['class'][] = 'fl-col-small';
1636
  }
 
 
 
1637
  if ( in_array( $col->settings->bg_type, $overlay_bgs ) && ! empty( $col->settings->bg_overlay_color ) ) {
1638
  $attrs['class'][] = 'fl-col-bg-overlay';
1639
  }
@@ -1657,15 +1683,21 @@ final class FLBuilder {
1657
  */
1658
  static public function render_modules( $col_id = null )
1659
  {
1660
- $modules = FLBuilderModel::get_modules( $col_id );
1661
 
1662
- do_action( 'fl_builder_before_render_modules', $modules, $col_id );
1663
 
1664
- foreach ( $modules as $module ) {
1665
- self::render_module( $module );
 
 
 
 
 
 
1666
  }
1667
 
1668
- do_action( 'fl_builder_after_render_modules', $modules, $col_id );
1669
  }
1670
 
1671
  /**
@@ -1677,13 +1709,12 @@ final class FLBuilder {
1677
  */
1678
  static public function render_module( $module_id = null )
1679
  {
1680
- $module = is_object( $module_id ) ? $module_id : FLBuilderModel::get_module( $module_id );
1681
  $settings = $module->settings;
1682
  $id = $module->node;
1683
 
1684
  do_action( 'fl_builder_before_render_module', $module );
1685
 
1686
-
1687
  $template_file = self::locate_template_file(
1688
  apply_filters( 'fl_builder_module_template_base', 'module', $module ),
1689
  apply_filters( 'fl_builder_module_template_slug', '', $module )
@@ -1912,6 +1943,9 @@ final class FLBuilder {
1912
 
1913
  // Instance row padding
1914
  $css .= self::render_row_padding($row);
 
 
 
1915
  }
1916
 
1917
  // Loop through the columns.
@@ -1928,6 +1962,9 @@ final class FLBuilder {
1928
  // Instance column padding
1929
  $css .= self::render_column_padding($col);
1930
 
 
 
 
1931
  // Get the modules in this column.
1932
  $modules = FLBuilderModel::get_modules($col);
1933
  }
@@ -2028,34 +2065,71 @@ final class FLBuilder {
2028
  if(is_rtl()) {
2029
  $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-rtl.css');
2030
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2031
 
2032
  // Responsive layout css
2033
- if($global_settings->responsive_enabled) {
2034
-
 
2035
  $css .= '@media (max-width: '. $global_settings->medium_breakpoint .'px) { ';
2036
- $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-medium.css');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2037
  $css .= ' }';
 
 
2038
  $css .= '@media (max-width: '. $global_settings->responsive_breakpoint .'px) { ';
2039
- $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-responsive.css');
2040
 
2041
- if ( ! isset( $global_settings->auto_spacing ) || $global_settings->auto_spacing ) {
2042
- $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-auto-spacing.css');
2043
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2044
 
2045
  $css .= ' }';
2046
  }
2047
-
2048
- // Global row margins
2049
- $css .= '.fl-row-content-wrap { margin: '. $global_settings->row_margins .'px; }';
2050
-
2051
- // Global row padding
2052
- $css .= '.fl-row-content-wrap { padding: '. $global_settings->row_padding .'px; }';
2053
-
2054
- // Global row width
2055
- $css .= '.fl-row-fixed-width { max-width: '. $global_settings->row_width .'px; }';
2056
-
2057
- // Global module margins
2058
- $css .= '.fl-module-content { margin: '. $global_settings->module_margins .'px; }';
2059
 
2060
  // Default page heading
2061
  if ( ! $global_settings->show_default_heading && ! empty( $global_settings->default_heading_selector ) ) {
@@ -2091,37 +2165,132 @@ final class FLBuilder {
2091
  }
2092
 
2093
  /**
2094
- * Renders the CSS margins for a row.
2095
  *
2096
- * @since 1.0
2097
- * @param object $row A row node object.
2098
- * @return string The row CSS margins string.
2099
  */
2100
- static public function render_row_margins($row)
2101
  {
2102
- $settings = $row->settings;
2103
- $margins = '';
2104
- $css = '';
2105
 
2106
- if($settings->margin_top != '') {
2107
- $margins .= 'margin-top:' . $settings->margin_top . 'px;';
2108
- }
2109
- if($settings->margin_bottom != '') {
2110
- $margins .= 'margin-bottom:' . $settings->margin_bottom . 'px;';
 
 
 
 
 
 
 
 
 
 
 
2111
  }
2112
- if($settings->margin_left != '') {
2113
- $margins .= 'margin-left:' . $settings->margin_left . 'px;';
 
 
 
 
2114
  }
2115
- if($settings->margin_right != '') {
2116
- $margins .= 'margin-right:' . $settings->margin_right . 'px;';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2117
  }
2118
- if($margins != '') {
2119
- $css .= '.fl-node-' . $row->node . ' > .fl-row-content-wrap {' . $margins . '}';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2120
  }
2121
 
2122
  return $css;
2123
  }
2124
 
 
 
 
 
 
 
 
 
 
 
 
 
2125
  /**
2126
  * Renders the CSS padding for a row.
2127
  *
@@ -2131,27 +2300,19 @@ final class FLBuilder {
2131
  */
2132
  static public function render_row_padding($row)
2133
  {
2134
- $settings = $row->settings;
2135
- $padding = '';
2136
- $css = '';
2137
-
2138
- if($settings->padding_top != '') {
2139
- $padding .= 'padding-top:' . $settings->padding_top . 'px;';
2140
- }
2141
- if($settings->padding_bottom != '') {
2142
- $padding .= 'padding-bottom:' . $settings->padding_bottom . 'px;';
2143
- }
2144
- if($settings->padding_left != '') {
2145
- $padding .= 'padding-left:' . $settings->padding_left . 'px;';
2146
- }
2147
- if($settings->padding_right != '') {
2148
- $padding .= 'padding-right:' . $settings->padding_right . 'px;';
2149
- }
2150
- if($padding != '') {
2151
- $css = '.fl-node-' . $row->node . ' > .fl-row-content-wrap {' . $padding . '}';
2152
- }
2153
 
2154
- return $css;
 
 
 
 
 
 
 
 
 
2155
  }
2156
 
2157
  /**
@@ -2163,27 +2324,7 @@ final class FLBuilder {
2163
  */
2164
  static public function render_column_margins($col)
2165
  {
2166
- $settings = $col->settings;
2167
- $margins = '';
2168
- $css = '';
2169
-
2170
- if($settings->margin_top != '') {
2171
- $margins .= 'margin-top:' . $settings->margin_top . 'px;';
2172
- }
2173
- if($settings->margin_bottom != '') {
2174
- $margins .= 'margin-bottom:' . $settings->margin_bottom . 'px;';
2175
- }
2176
- if($settings->margin_left != '') {
2177
- $margins .= 'margin-left:' . $settings->margin_left . 'px;';
2178
- }
2179
- if($settings->margin_right != '') {
2180
- $margins .= 'margin-right:' . $settings->margin_right . 'px;';
2181
- }
2182
- if($margins != '') {
2183
- $css .= '.fl-node-' . $col->node . ' > .fl-col-content {' . $margins . '}';
2184
- }
2185
-
2186
- return $css;
2187
  }
2188
 
2189
  /**
@@ -2195,27 +2336,19 @@ final class FLBuilder {
2195
  */
2196
  static public function render_column_padding($col)
2197
  {
2198
- $settings = $col->settings;
2199
- $padding = '';
2200
- $css = '';
2201
-
2202
- if($settings->padding_top != '') {
2203
- $padding .= 'padding-top:' . $settings->padding_top . 'px;';
2204
- }
2205
- if($settings->padding_bottom != '') {
2206
- $padding .= 'padding-bottom:' . $settings->padding_bottom . 'px;';
2207
- }
2208
- if($settings->padding_left != '') {
2209
- $padding .= 'padding-left:' . $settings->padding_left . 'px;';
2210
- }
2211
- if($settings->padding_right != '') {
2212
- $padding .= 'padding-right:' . $settings->padding_right . 'px;';
2213
- }
2214
- if($padding != '') {
2215
- $css = '.fl-node-' . $col->node . ' > .fl-col-content {' . $padding . '}';
2216
- }
2217
 
2218
- return $css;
 
 
 
 
 
 
 
 
 
2219
  }
2220
 
2221
  /**
@@ -2227,31 +2360,11 @@ final class FLBuilder {
2227
  */
2228
  static public function render_module_margins($module)
2229
  {
2230
- $settings = $module->settings;
2231
- $margins = '';
2232
- $css = '';
2233
-
2234
- if($settings->margin_top != '') {
2235
- $margins .= 'margin-top:' . $settings->margin_top . 'px;';
2236
- }
2237
- if($settings->margin_bottom != '') {
2238
- $margins .= 'margin-bottom:' . $settings->margin_bottom . 'px;';
2239
- }
2240
- if($settings->margin_left != '') {
2241
- $margins .= 'margin-left:' . $settings->margin_left . 'px;';
2242
- }
2243
- if($settings->margin_right != '') {
2244
- $margins .= 'margin-right:' . $settings->margin_right . 'px;';
2245
- }
2246
- if($margins != '') {
2247
- $css = '.fl-node-' . $module->node . ' > .fl-module-content {' . $margins . '}';
2248
- }
2249
-
2250
- return $css;
2251
  }
2252
 
2253
  /**
2254
- * Renders the responsive CSS margins for a module.
2255
  *
2256
  * @since 1.0
2257
  * @param object $module A module node object.
@@ -2259,27 +2372,45 @@ final class FLBuilder {
2259
  */
2260
  static public function render_responsive_module_margins($module)
2261
  {
2262
- $global_settings = FLBuilderModel::get_global_settings();
2263
- $default = $global_settings->module_margins;
2264
- $settings = $module->settings;
2265
- $margins = '';
2266
- $css = '';
2267
-
2268
- if($settings->margin_top != '' && ($settings->margin_top > $default || $settings->margin_top < 0)) {
2269
- $margins .= 'margin-top:' . $default . 'px;';
2270
  }
2271
- if($settings->margin_bottom != '' && ($settings->margin_bottom > $default || $settings->margin_bottom < 0)) {
2272
- $margins .= 'margin-bottom:' . $default . 'px;';
 
 
2273
  }
2274
- if($settings->margin_left != '' && ($settings->margin_left > $default || $settings->margin_left < 0)) {
2275
- $margins .= 'margin-left:' . $default . 'px;';
2276
  }
2277
- if($settings->margin_right != '' && ($settings->margin_right > $default || $settings->margin_right < 0)) {
2278
- $margins .= 'margin-right:' . $default . 'px;';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2279
  }
2280
- if($margins != '') {
2281
- $css .= '@media (max-width: '. $global_settings->responsive_breakpoint .'px) { ';
2282
- $css .= '.fl-node-' . $module->node . ' > .fl-module-content {' . $margins . '}';
 
 
2283
  $css .= ' }';
2284
  }
2285
 
@@ -2630,4 +2761,4 @@ final class FLBuilder {
2630
  }
2631
  }
2632
 
2633
- FLBuilder::init();
196
  * @param array $buttons The current buttons array.
197
  * @return array
198
  */
199
+ static public function editor_buttons_2( $buttons )
200
  {
201
+ global $wp_version;
202
+
203
+ if ( FLBuilderModel::is_builder_active() ) {
204
 
205
+ array_shift( $buttons );
206
+ array_unshift( $buttons, 'fontsizeselect' );
207
+
208
+ if ( version_compare( $wp_version, '4.6.9', '<=' ) ) {
209
+ array_unshift( $buttons, 'formatselect' );
210
+ }
211
 
212
+ if ( ( $key = array_search( 'wp_help', $buttons ) ) !== false ) {
213
+ unset( $buttons[ $key ] );
214
  }
215
  }
216
 
550
 
551
  // Enqueue individual builder scripts if WP_DEBUG is on.
552
  if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
553
+ wp_enqueue_script('fl-color-picker', $js_url . 'fl-color-picker.js', array(), $ver, true);
554
+ wp_enqueue_script('fl-lightbox', $js_url . 'fl-lightbox.js', array(), $ver, true);
555
+ wp_enqueue_script('fl-icon-selector', $js_url . 'fl-icon-selector.js', array(), $ver, true);
556
+ wp_enqueue_script('fl-stylesheet', $js_url . 'fl-stylesheet.js', array(), $ver, true);
557
+ wp_enqueue_script('fl-builder', $js_url . 'fl-builder.js', array(), $ver, true);
558
+ wp_enqueue_script('fl-builder-ajax-layout', $js_url . 'fl-builder-ajax-layout.js', array(), $ver, true);
559
+ wp_enqueue_script('fl-builder-forced-media-queries', $js_url . 'fl-builder-forced-media-queries.js', array(), $ver, true);
560
+ wp_enqueue_script('fl-builder-preview', $js_url . 'fl-builder-preview.js', array(), $ver, true);
561
+ wp_enqueue_script('fl-builder-responsive-editing', $js_url . 'fl-builder-responsive-editing.js', array(), $ver, true);
562
+ wp_enqueue_script('fl-builder-services', $js_url . 'fl-builder-services.js', array(), $ver, true);
563
+ wp_enqueue_script('fl-builder-tour', $js_url . 'fl-builder-tour.js', array(), $ver, true);
564
  }
565
  else {
566
+ wp_enqueue_script('fl-builder-min', $js_url . 'fl-builder.min.js', array(), $ver, true);
567
  }
568
 
569
  /* Additional module styles and scripts */
711
  if ( FLBuilderModel::is_builder_active() ) {
712
 
713
  $post_id = $wp_the_query->post->ID;
714
+ $global_settings = FLBuilderModel::get_global_settings();
715
  $simple_ui = ! FLBuilderModel::current_user_has_editing_capability();
716
  $categories = FLBuilderModel::get_categorized_modules();
717
  $render_panel = apply_filters( 'fl_builder_render_ui_panel', FLBuilderModel::current_user_has_editing_capability() );
1194
  $value = isset($settings->$name) ? $settings->$name : '';
1195
  $preview = isset($field['preview']) ? json_encode($field['preview']) : json_encode(array('type' => 'refresh'));
1196
  $row_class = isset($field['row_class']) ? ' ' . $field['row_class'] : '';
1197
+ $responsive = false;
1198
+ $root_name = $name;
1199
+ $global_settings = FLBuilderModel::get_global_settings();
1200
+
1201
+ // Check to see if responsive is enabled for this field (unit field only for now).
1202
+ if ( $global_settings->responsive_enabled && isset( $field['responsive'] ) && ! $is_multiple && 'unit' == $field['type'] ) {
1203
+ $responsive = $field['responsive'];
1204
+ }
1205
 
1206
+ // Render the field.
1207
  if($is_multiple && $supports_multiple) {
1208
 
1209
  $values = $value;
1547
  */
1548
  static public function render_column_group_attributes( $group )
1549
  {
1550
+ $cols = FLBuilderModel::get_nodes( 'column', $group );
1551
+ $parent = FLBuilderModel::get_node_parent( $group );
1552
+ $attrs = array(
1553
  'class' => array(
1554
  'fl-col-group',
1555
  'fl-node-' . $group->node
1557
  'data-node' => $group->node
1558
  );
1559
 
1560
+ if ( 'column' == $parent->type ) {
1561
+ $attrs['class'][] = 'fl-col-group-nested';
1562
+ }
1563
+
1564
  foreach( $cols as $col ) {
1565
 
1566
  if( isset( $col->settings->equal_height ) && $col->settings->equal_height == 'yes' ) {
1627
 
1628
  return array(
1629
  'settings' => $rendered_settings['html'],
1630
+ 'state' => FLBuilderAJAXLayout::render( $node->parent )
1631
  );
1632
  }
1633
 
1642
  {
1643
  $custom_class = apply_filters( 'fl_builder_column_custom_class', $col->settings->class, $col );
1644
  $overlay_bgs = array( 'photo' );
1645
+ $nested = FLBuilderModel::get_nodes( 'column-group', $col );
1646
  $attrs = array(
1647
  'id' => $col->settings->id,
1648
  'class' => array(
1657
  if ( $col->settings->size <= 50 ) {
1658
  $attrs['class'][] = 'fl-col-small';
1659
  }
1660
+ if ( count( $nested ) > 0 ) {
1661
+ $attrs['class'][] = 'fl-col-has-cols';
1662
+ }
1663
  if ( in_array( $col->settings->bg_type, $overlay_bgs ) && ! empty( $col->settings->bg_overlay_color ) ) {
1664
  $attrs['class'][] = 'fl-col-bg-overlay';
1665
  }
1683
  */
1684
  static public function render_modules( $col_id = null )
1685
  {
1686
+ $nodes = FLBuilderModel::get_nodes( null, $col_id );
1687
 
1688
+ do_action( 'fl_builder_before_render_modules', $nodes, $col_id );
1689
 
1690
+ foreach ( $nodes as $node ) {
1691
+
1692
+ if ( 'module' == $node->type && FLBuilderModel::is_module_registered( $node->settings->type ) ) {
1693
+ self::render_module( $node );
1694
+ }
1695
+ else if ( 'column-group' == $node->type ) {
1696
+ self::render_column_group( $node );
1697
+ }
1698
  }
1699
 
1700
+ do_action( 'fl_builder_after_render_modules', $nodes, $col_id );
1701
  }
1702
 
1703
  /**
1709
  */
1710
  static public function render_module( $module_id = null )
1711
  {
1712
+ $module = FLBuilderModel::get_module( $module_id );
1713
  $settings = $module->settings;
1714
  $id = $module->node;
1715
 
1716
  do_action( 'fl_builder_before_render_module', $module );
1717
 
 
1718
  $template_file = self::locate_template_file(
1719
  apply_filters( 'fl_builder_module_template_base', 'module', $module ),
1720
  apply_filters( 'fl_builder_module_template_slug', '', $module )
1943
 
1944
  // Instance row padding
1945
  $css .= self::render_row_padding($row);
1946
+
1947
+ // Instance row border
1948
+ $css .= self::render_row_border($row);
1949
  }
1950
 
1951
  // Loop through the columns.
1962
  // Instance column padding
1963
  $css .= self::render_column_padding($col);
1964
 
1965
+ // Instance column border
1966
+ $css .= self::render_column_border($col);
1967
+
1968
  // Get the modules in this column.
1969
  $modules = FLBuilderModel::get_modules($col);
1970
  }
2065
  if(is_rtl()) {
2066
  $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-rtl.css');
2067
  }
2068
+
2069
+ // Global node css
2070
+ foreach ( array(
2071
+ array( 'row_margins', '.fl-row-content-wrap { margin: ' ),
2072
+ array( 'row_padding', '.fl-row-content-wrap { padding: ' ),
2073
+ array( 'row_width', '.fl-row-fixed-width { max-width: ' ),
2074
+ array( 'module_margins', '.fl-module-content { margin: ' )
2075
+ ) as $data ) {
2076
+ if ( '' !== $global_settings->{ $data[0] } ) {
2077
+ $value = preg_replace( self::regex( 'css_unit' ), '', strtolower( $global_settings->{ $data[0] } ) );
2078
+ $css .= $data[1] . esc_attr( $value );
2079
+ $css .= ( is_numeric( $value ) ) ? ( 'px; }' ) : ( '; }' );
2080
+ }
2081
+ }
2082
 
2083
  // Responsive layout css
2084
+ if ( $global_settings->responsive_enabled ) {
2085
+
2086
+ // Medium devices
2087
  $css .= '@media (max-width: '. $global_settings->medium_breakpoint .'px) { ';
2088
+
2089
+ // Core medium layout css
2090
+ $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-medium.css');
2091
+
2092
+ // Global node medium css
2093
+ foreach ( array(
2094
+ array( 'row_margins_medium', '.fl-row[data-node] > .fl-row-content-wrap { margin: ' ),
2095
+ array( 'row_padding_medium', '.fl-row[data-node] > .fl-row-content-wrap { padding: ' ),
2096
+ array( 'module_margins_medium', '.fl-module[data-node] > .fl-module-content { margin: ' )
2097
+ ) as $data ) {
2098
+ if ( '' !== $global_settings->{ $data[0] } ) {
2099
+ $value = preg_replace( self::regex( 'css_unit' ), '', strtolower( $global_settings->{ $data[0] } ) );
2100
+ $css .= $data[1] . esc_attr( $value );
2101
+ $css .= ( is_numeric( $value ) ) ? ( 'px; }' ) : ( '; }' );
2102
+ }
2103
+ }
2104
+
2105
  $css .= ' }';
2106
+
2107
+ // Responsive devices
2108
  $css .= '@media (max-width: '. $global_settings->responsive_breakpoint .'px) { ';
 
2109
 
2110
+ // Core responsive layout css
2111
+ $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-responsive.css');
2112
+
2113
+ // Auto spacing
2114
+ if ( ! isset( $global_settings->auto_spacing ) || $global_settings->auto_spacing ) {
2115
+ $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-auto-spacing.css');
2116
+ }
2117
+
2118
+ // Global node responsive css
2119
+ foreach ( array(
2120
+ array( 'row_margins_responsive', '.fl-row[data-node] > .fl-row-content-wrap { margin: ' ),
2121
+ array( 'row_padding_responsive', '.fl-row[data-node] > .fl-row-content-wrap { padding: ' ),
2122
+ array( 'module_margins_responsive', '.fl-module[data-node] > .fl-module-content { margin: ' )
2123
+ ) as $data ) {
2124
+ if ( '' !== $global_settings->{ $data[0] } ) {
2125
+ $value = preg_replace( self::regex( 'css_unit' ), '', strtolower( $global_settings->{ $data[0] } ) );
2126
+ $css .= $data[1] . esc_attr( $value );
2127
+ $css .= ( is_numeric( $value ) ) ? ( 'px; }' ) : ( '; }' );
2128
+ }
2129
+ }
2130
 
2131
  $css .= ' }';
2132
  }
 
 
 
 
 
 
 
 
 
 
 
 
2133
 
2134
  // Default page heading
2135
  if ( ! $global_settings->show_default_heading && ! empty( $global_settings->default_heading_selector ) ) {
2165
  }
2166
 
2167
  /**
2168
+ * Regular expressions.
2169
  *
2170
+ * @since 1.9
2171
+ * @param string $scope What regular expression to return?
2172
+ * @return string Regular expression.
2173
  */
2174
+ static public function regex( $scope )
2175
  {
2176
+ $regex = array(
2177
+ 'css_unit' => '/[^a-z0-9%.\-]/',
2178
+ );
2179
 
2180
+ return ( isset( $regex[ $scope ] ) ) ? $regex[ $scope ] : null;
2181
+ }
2182
+
2183
+ /**
2184
+ * Renders the CSS spacing and border properties for a node.
2185
+ *
2186
+ * @param object $node A generic node object.
2187
+ * @param string $prop_type One of [ 'padding', 'margin', 'border' ].
2188
+ * @param string $selector_prefix Optional CSS selector prefix for better overrides.
2189
+ * @return string A CSS string.
2190
+ */
2191
+ static public function render_node_spacing( $node = null, $prop_type = '', $selector_prefix = '' )
2192
+ {
2193
+ // Exit early if incorrect parameters
2194
+ if ( ! is_object( $node ) || empty( $prop_type ) ) {
2195
+ return;
2196
  }
2197
+
2198
+ $prop_type = strtolower( $prop_type );
2199
+
2200
+ // Ensure type is valid
2201
+ if ( ! in_array( $prop_type, array( 'margin', 'padding', 'border' ), true ) ) {
2202
+ return;
2203
  }
2204
+
2205
+ $global_settings = FLBuilderModel::get_global_settings();
2206
+ $settings = $node->settings;
2207
+ $css = '';
2208
+ $selector_prefix .= ' .fl-node-' . $node->node;
2209
+
2210
+ // Determine selector suffix to apply spacing to
2211
+ switch ( $node->type ) {
2212
+ case 'row':
2213
+ $selector_suffix = ' > .fl-row-content-wrap';
2214
+ break;
2215
+ case 'column':
2216
+ $selector_suffix = ' > .fl-col-content';
2217
+ break;
2218
+ case 'module':
2219
+ $selector_suffix = ' > .fl-module-content';
2220
+ break;
2221
  }
2222
+
2223
+ // Create rules for each breakpoint
2224
+ foreach ( array( 'default', 'medium', 'responsive' ) as $breakpoint ) {
2225
+ $breakpoint_css = '';
2226
+ $setting_suffix = ( 'default' !== $breakpoint ) ? '_' . $breakpoint : '';
2227
+
2228
+ // Iterate over each direction
2229
+ foreach ( array( 'top', 'right', 'bottom', 'left' ) as $dir ) {
2230
+ $setting = $prop_type . '_' . $dir . $setting_suffix;
2231
+
2232
+ if ( ! isset( $settings->{ $setting } ) ) {
2233
+ continue;
2234
+ }
2235
+
2236
+ $prop = $prop_type . '-' . $dir;
2237
+ $value = preg_replace( self::regex( 'css_unit' ), '', strtolower( $settings->{ $setting } ) );
2238
+
2239
+ if ( 'border' === $prop_type ) {
2240
+
2241
+ if ( empty( $settings->border_type ) ) {
2242
+ continue;
2243
+ }
2244
+ else {
2245
+ $prop .= '-width';
2246
+ }
2247
+ }
2248
+
2249
+ if ( '' !== $value ) {
2250
+ $breakpoint_css .= "\t";
2251
+ $breakpoint_css .= $prop . ':' . esc_attr( $value );
2252
+ $breakpoint_css .= ( is_numeric( trim( $value ) ) ) ? ( 'px;' ) : ( ';' );
2253
+ $breakpoint_css .= "\r\n";
2254
+ }
2255
+ }
2256
+
2257
+ if ( ! empty( $breakpoint_css ) ) {
2258
+
2259
+ // Build the selector
2260
+ if ( 'default' !== $breakpoint ) {
2261
+ $selector = $selector_prefix . '.fl-' . str_replace( 'column', 'col', $node->type ) . $selector_suffix;
2262
+ }
2263
+ else {
2264
+ $selector = $selector_prefix . $selector_suffix;
2265
+ }
2266
+
2267
+ // Wrap css in selector
2268
+ $breakpoint_css = $selector . ' {' . "\r\n" . $breakpoint_css . '}' . "\r\n";
2269
+
2270
+ // Wrap css in media query
2271
+ if ( 'default' !== $breakpoint ) {
2272
+ $breakpoint_css = '@media ( max-width: ' . $global_settings->{ $breakpoint . '_breakpoint' } . 'px ) {' . "\r\n" . $breakpoint_css . '}' . "\r\n";
2273
+ }
2274
+
2275
+ $css .= $breakpoint_css;
2276
+ }
2277
  }
2278
 
2279
  return $css;
2280
  }
2281
 
2282
+ /**
2283
+ * Renders the CSS margins for a row.
2284
+ *
2285
+ * @since 1.0
2286
+ * @param object $row A row node object.
2287
+ * @return string The row CSS margins string.
2288
+ */
2289
+ static public function render_row_margins($row)
2290
+ {
2291
+ return self::render_node_spacing( $row, 'margin' );
2292
+ }
2293
+
2294
  /**
2295
  * Renders the CSS padding for a row.
2296
  *
2300
  */
2301
  static public function render_row_padding($row)
2302
  {
2303
+ return self::render_node_spacing( $row, 'padding' );
2304
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2305
 
2306
+ /**
2307
+ * Renders the CSS border widths for a row.
2308
+ *
2309
+ * @since 1.9
2310
+ * @param object $row A row node object.
2311
+ * @return string The row CSS border-width string.
2312
+ */
2313
+ static public function render_row_border($row)
2314
+ {
2315
+ return self::render_node_spacing( $row, 'border' );
2316
  }
2317
 
2318
  /**
2324
  */
2325
  static public function render_column_margins($col)
2326
  {
2327
+ return self::render_node_spacing( $col, 'margin' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2328
  }
2329
 
2330
  /**
2336
  */
2337
  static public function render_column_padding($col)
2338
  {
2339
+ return self::render_node_spacing( $col, 'padding' );
2340
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2341
 
2342
+ /**
2343
+ * Renders the CSS border widths for a column.
2344
+ *
2345
+ * @since 1.9
2346
+ * @param object $col A column node object.
2347
+ * @return string The column CSS border-width string.
2348
+ */
2349
+ static public function render_column_border($col)
2350
+ {
2351
+ return self::render_node_spacing( $col, 'border', '.fl-builder-content' );
2352
  }
2353
 
2354
  /**
2360
  */
2361
  static public function render_module_margins($module)
2362
  {
2363
+ return self::render_node_spacing( $module, 'margin' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2364
  }
2365
 
2366
  /**
2367
+ * Renders the (auto) responsive CSS margins for a module.
2368
  *
2369
  * @since 1.0
2370
  * @param object $module A module node object.
2372
  */
2373
  static public function render_responsive_module_margins($module)
2374
  {
2375
+ $global_settings = FLBuilderModel::get_global_settings();
2376
+ $settings = $module->settings;
2377
+ $margins = '';
2378
+ $css = '';
2379
+
2380
+ // Bail early if we have global responsive margins.
2381
+ if ( '' != $global_settings->module_margins_responsive ) {
2382
+ return $css;
2383
  }
2384
+
2385
+ // Get the global default margin value to use.
2386
+ if ( '' != $global_settings->module_margins_medium ) {
2387
+ $default = trim( $global_settings->module_margins_medium );
2388
  }
2389
+ else {
2390
+ $default = trim( $global_settings->module_margins );
2391
  }
2392
+
2393
+ // Set the responsive margin CSS if necessary.
2394
+ foreach ( array( 'top', 'bottom', 'left', 'right' ) as $dimension ) {
2395
+
2396
+ $responsive = 'margin_' . $dimension . '_responsive';
2397
+ $medium = 'margin_' . $dimension . '_responsive';
2398
+ $desktop = 'margin_' . $dimension;
2399
+
2400
+ if ( '' == $settings->$responsive ) {
2401
+
2402
+ $value = '' == $settings->$medium ? $settings->$desktop : $settings->$medium;
2403
+
2404
+ if ( '' != $value && ( $value > $default || $value < 0 ) ) {
2405
+ $margins .= 'margin-' . $dimension . ':' . esc_attr( $default ) . 'px;';
2406
+ }
2407
+ }
2408
  }
2409
+
2410
+ // Set the media query if we have margins.
2411
+ if ( '' !== $margins ) {
2412
+ $css .= '@media (max-width: ' . esc_attr( $global_settings->responsive_breakpoint ) . 'px) { ';
2413
+ $css .= '.fl-node-' . $module->node . ' > .fl-module-content { ' . $margins . ' }';
2414
  $css .= ' }';
2415
  }
2416
 
2761
  }
2762
  }
2763
 
2764
+ FLBuilder::init();
css/fl-builder-layout-auto-spacing.css CHANGED
@@ -1,26 +1,26 @@
1
  /* Rows
2
  ------------------------------------------------------ */
3
 
4
- .fl-row-content-wrap {
5
- border-left: none !important;
6
- border-right: none !important;
7
- margin: 0 !important;
8
- padding-left: 0 !important;
9
- padding-right: 0 !important;
10
  }
11
- .fl-row .fl-bg-video,
12
- .fl-row .fl-bg-slideshow {
13
- left: 0 !important;
14
- right: 0 !important;
15
  }
16
 
17
  /* Columns
18
  ------------------------------------------------------ */
19
 
20
- .fl-col-content {
21
- border-left: none !important;
22
- border-right: none !important;
23
- margin: 0 !important;
24
- padding-left: 0 !important;
25
- padding-right: 0 !important;
26
  }
1
  /* Rows
2
  ------------------------------------------------------ */
3
 
4
+ .fl-row[data-node] .fl-row-content-wrap {
5
+ border-left: none;
6
+ border-right: none;
7
+ margin: 0;
8
+ padding-left: 0;
9
+ padding-right: 0;
10
  }
11
+ .fl-row[data-node] .fl-bg-video,
12
+ .fl-row[data-node] .fl-bg-slideshow {
13
+ left: 0;
14
+ right: 0;
15
  }
16
 
17
  /* Columns
18
  ------------------------------------------------------ */
19
 
20
+ .fl-col[data-node] .fl-col-content {
21
+ border-left: none;
22
+ border-right: none;
23
+ margin: 0;
24
+ padding-left: 0;
25
+ padding-right: 0;
26
  }
css/fl-builder-layout.css CHANGED
@@ -298,12 +298,14 @@
298
  -ms-flex-pack: end;
299
  }
300
 
301
- .fl-col-group-equal-height.fl-col-group-align-center .fl-module {
 
302
  width: 100%;
303
  }
304
 
305
  /* IE11 fix for images with height:auto in equal height columns. */
306
- .fl-builder-ie-11 .fl-col-group-equal-height .fl-module {
 
307
  min-height: 1px;
308
  }
309
 
@@ -331,7 +333,7 @@
331
  }
332
  .fl-col-bg-overlay .fl-module {
333
  position: relative;
334
- z-index: 1;
335
  }
336
 
337
  /* Modules
298
  -ms-flex-pack: end;
299
  }
300
 
301
+ .fl-col-group-equal-height.fl-col-group-align-center .fl-module,
302
+ .fl-col-group-equal-height.fl-col-group-align-center .fl-col-group {
303
  width: 100%;
304
  }
305
 
306
  /* IE11 fix for images with height:auto in equal height columns. */
307
+ .fl-builder-ie-11 .fl-col-group-equal-height .fl-module,
308
+ .fl-col-group-equal-height.fl-col-group-align-center .fl-col-group {
309
  min-height: 1px;
310
  }
311
 
333
  }
334
  .fl-col-bg-overlay .fl-module {
335
  position: relative;
336
+ z-index: 2;
337
  }
338
 
339
  /* Modules
css/fl-builder-rtl.css CHANGED
@@ -27,7 +27,7 @@
27
  ------------------------------------------------------ */
28
 
29
  .fl-lightbox-header .fl-builder-preview-loader {
30
- left: 15px;
31
  right: auto;
32
  }
33
  .fl-form-table th {
27
  ------------------------------------------------------ */
28
 
29
  .fl-lightbox-header .fl-builder-preview-loader {
30
+ left: 40px;
31
  right: auto;
32
  }
33
  .fl-form-table th {
css/fl-builder.css CHANGED
@@ -1,15 +1,3 @@
1
- /**
2
- * Temporary fix! Should be removed when fixed in WordPress core.
3
- *
4
- * The jQuery update in WordPress 4.5 breaks the media library
5
- * when border-collapse is set to 'collapse' for the table element.
6
- * This is a temporary fix until fixed in core. See this ticket:
7
- * https://core.trac.wordpress.org/ticket/36533
8
- */
9
- table {
10
- border-collapse: inherit !important;
11
- }
12
-
13
  /* General
14
  ------------------------------------------------------ */
15
 
@@ -44,9 +32,6 @@ html.fl-builder-edit {
44
  display: block;
45
  position: absolute;
46
  }
47
- #tiptip_holder {
48
- z-index: 200000;
49
- }
50
  .screen-reader-text {
51
  position: absolute;
52
  left: -1000em;
@@ -67,6 +52,49 @@ html.fl-builder-edit {
67
  display: block !important;
68
  }
69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  /* Builder Buttons
71
  ------------------------------------------------------ */
72
 
@@ -160,70 +188,6 @@ html.fl-builder-edit {
160
  background: #ff9600;
161
  }
162
 
163
- /* Builder Submenus
164
- ------------------------------------------------------ */
165
-
166
- .fl-builder-has-submenu {
167
- position: relative;
168
- }
169
- .fl-builder-has-submenu > ul.fl-builder-submenu.fl-block-col-submenu {
170
- background: #3ba0ff;
171
- box-shadow: 0 0 20px rgba(0,0,0,0.20);
172
- display: none;
173
- left: 0;
174
- list-style: none;
175
- margin: 0;
176
- padding: 6px 0;
177
- position: absolute;
178
- text-align: left;
179
- top: 100%;
180
- width: 155px;
181
- z-index: 100008;
182
- }
183
- .fl-builder-has-submenu > ul.fl-builder-submenu.fl-block-col-submenu li {
184
- list-style: none;
185
- margin: 0;
186
- padding: 0;
187
- }
188
- .fl-builder-submenu-right ul.fl-builder-submenu.fl-block-col-submenu {
189
- left: auto;
190
- right: 0;
191
- }
192
- .fl-builder-submenu-open ul.fl-builder-submenu.fl-block-col-submenu {
193
- display: block;
194
- }
195
- .fl-builder-has-submenu > ul.fl-builder-submenu.fl-block-col-submenu li a {
196
- border-bottom: 0 none;
197
- box-shadow: none;
198
- -moz-box-shadow: none;
199
- -webkit-box-shadow: none;
200
- color: #fff !important;
201
- display: block;
202
- line-height: 13px;
203
- font-size: 13px;
204
- font-family: Helvetica, Arial, Verdana, sans-serif;
205
- font-weight: normal;
206
- opacity: 0.8;
207
- filter: alpha(opacity = 80);
208
- padding: 6px 12px;
209
- text-decoration: none;
210
- }
211
- .fl-builder-has-submenu > ul.fl-builder-submenu li a:hover {
212
- background: #54acff;
213
- color: #fff;
214
- opacity: 1;
215
- filter: alpha(opacity = 100);
216
- text-decoration: none;
217
- }
218
-
219
- /* Global Submenus */
220
- .fl-block-overlay-global ul.fl-builder-submenu {
221
- background: #ff9600;
222
- }
223
- .fl-block-overlay-global ul.fl-builder-submenu li a:hover {
224
- background: #ffaa33;
225
- }
226
-
227
  /* Builder Bar
228
  ------------------------------------------------------ */
229
 
@@ -255,6 +219,7 @@ html.fl-builder-edit {
255
  padding: 7px 10px;
256
  }
257
  .fl-builder-bar-title img {
 
258
  height: 30px !important;
259
  margin: 0 1px 0 0 !important;
260
  vertical-align: middle !important;
@@ -301,6 +266,19 @@ html.fl-builder-edit {
301
  color: #fff !important;
302
  }
303
 
 
 
 
 
 
 
 
 
 
 
 
 
 
304
  /* Builder Panel
305
  ------------------------------------------------------ */
306
 
@@ -529,6 +507,9 @@ span.fl-builder-block-no-node-templates:hover {
529
  /* Drag and Drop
530
  ------------------------------------------------------ */
531
 
 
 
 
532
  .fl-builder-empty {
533
  border: 1px dashed #3ba0ff;
534
  color: #3ba0ff;
@@ -536,76 +517,268 @@ span.fl-builder-block-no-node-templates:hover {
536
  font-size: 14px;
537
  margin: 10px;
538
  padding: 100px 20px;
 
539
  text-align: center;
540
  text-transform: uppercase;
541
  }
542
- .fl-builder-empty .fl-builder-drop-zone {
543
- margin: 10px;
544
- }
545
  .fl-builder-block.ui-draggable-dragging,
546
  .fl-builder-block-drag-helper {
547
- background: #fff !important;
548
  border: 1px solid #ccc;
549
  box-shadow: 0 0 8px rgba(0,0,0,0.2);
550
  -moz-box-shadow: 0 0 8px rgba(0,0,0,0.2);
551
  -webkit-box-shadow: 0 0 8px rgba(0,0,0,0.2);
552
  color: #999999 !important;
553
  font-family: Helvetica, Verdana, sans-serif !important;
554
- font-size: 14px !important;
555
- height: 45px !important;
556
- line-height: 42px !important;
557
  overflow: hidden;
558
- padding: 0 18px;
559
  position: fixed !important;
560
  text-overflow: ellipsis;
561
  white-space: nowrap;
562
- width: 140px !important;
563
- z-index: 100010;
564
  }
565
  .fl-builder-drop-zone {
 
566
  background: #3ba0ff;
567
- color: #fff;
568
  display: block;
569
  font-family: Helvetica, Verdana, sans-serif !important;
570
- font-weight: bold;
571
- font-size: 14px;
 
 
572
  margin: 10px;
573
- padding: 10px;
 
 
 
574
  text-shadow: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
575
  }
576
  .fl-builder-drop-zone-global {
 
577
  background: #ff9600;
578
  }
 
 
 
 
 
 
 
 
 
 
 
579
  .fl-builder-content > .fl-builder-drop-zone {
580
  margin: 10px 20px;
581
  }
582
  .fl-row-content > .fl-builder-drop-zone {
583
- margin: 5px;
 
 
 
 
 
 
 
 
 
584
  }
 
 
585
  .fl-row-highlight {
586
- padding: 5px 0;
587
  }
588
  .fl-row-highlight .fl-row-content {
589
- border: 1px dashed #ff0000;
590
- padding: 5px;
591
  }
 
 
 
 
 
 
 
 
592
  .fl-col-highlight {
593
- padding: 15px 5px;
 
594
  }
595
  .fl-col-highlight .fl-col-content {
596
- border-style: dashed;
597
- border-color: #3ba0ff;
598
- border-top-width: 1px;
599
- border-bottom-width: 1px;
600
- border-left-width: 1px;
601
- border-right-width: 1px;
602
  min-height: 100px;
 
 
 
 
 
603
  }
604
  .fl-col-highlight.fl-node-global .fl-col-content {
605
- border-color: #ff9600;
606
  }
607
  .fl-builder-simple .fl-col-highlight .fl-col-content {
608
- border: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
609
  }
610
 
611
  /* Action Overlays
@@ -621,9 +794,13 @@ span.fl-builder-block-no-node-templates:hover {
621
  .fl-block-overlay-actions {
622
  background: #3ba0ff;
623
  float: left;
624
- margin: 0 -1px;
 
625
  text-shadow: none;
626
  }
 
 
 
627
  .fl-block-overlay-actions > span {
628
  display: block;
629
  float: left;
@@ -652,7 +829,7 @@ span.fl-builder-block-no-node-templates:hover {
652
  .fl-block-overlay-actions > i:last-child {
653
  padding-right: 2px;
654
  }
655
- .fl-block-overlay-actions i.fl-block-move {
656
  cursor: move;
657
  }
658
  .fl-block-overlay-title {
@@ -702,13 +879,13 @@ span.fl-builder-block-no-node-templates:hover {
702
  .fl-col-overlay {
703
  background: rgba(59, 160, 255, 0.15);
704
  border: 1px solid #3ba0ff;
705
- bottom: 15px;
706
  cursor: pointer;
707
  color: #fff;
708
- left: 5px;
709
  position: absolute;
710
- right: 5px;
711
- top: 15px;
712
  z-index: 100007;
713
  }
714
 
@@ -784,16 +961,8 @@ span.fl-builder-block-no-node-templates:hover {
784
  }
785
 
786
  /* Disabled Overlays */
787
- .fl-node-disabled {
788
- position: relative;
789
- }
790
- .fl-node-disabled-overlay {
791
- background: rgba(153, 153, 153, 0.75);
792
- bottom: 0;
793
- left: 0;
794
- position: absolute;
795
- right: 0;
796
- top: 0;
797
  }
798
 
799
  /* Column Resize Handles */
@@ -852,6 +1021,119 @@ span.fl-builder-block-no-node-templates:hover {
852
  top: -7px;
853
  }
854
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
855
  /* Actions Lightbox
856
  ------------------------------------------------------ */
857
 
@@ -1049,7 +1331,7 @@ form.fl-builder-settings {
1049
  .fl-lightbox-header .fl-builder-preview-loader {
1050
  margin: 0;
1051
  position: absolute;
1052
- right: 15px;
1053
  top: 15px;
1054
  }
1055
 
@@ -1062,20 +1344,24 @@ form.fl-builder-settings {
1062
  padding: 15px 20px 0 20px;
1063
  }
1064
  .fl-builder-settings-tabs a {
1065
- color: #999;
1066
  display: inline-block;
1067
  margin: 0;
 
1068
  padding: 10px 20px;
1069
  text-decoration: none !important;
1070
  }
1071
  .fl-builder-settings-tabs a:hover {
1072
  color: #333;
1073
  }
 
 
 
1074
  .fl-builder-settings-tabs a.fl-active {
1075
  background: #fff;
1076
  border: 1px solid #dfdfdf;
1077
  border-bottom: none;
1078
- color: #222;
1079
  position: relative;
1080
  top: 1px;
1081
  }
@@ -1108,6 +1394,7 @@ form.fl-builder-settings {
1108
  ------------------------------------------------------ */
1109
 
1110
  .fl-form-table {
 
1111
  border: none;
1112
  width: 100%;
1113
  }
@@ -1127,9 +1414,16 @@ form.fl-builder-settings {
1127
  vertical-align: top !important;
1128
  width: 200px !important;
1129
  }
1130
- .fl-form-table td {
1131
- border: none;
 
 
 
 
 
1132
  padding: 8px 10px;
 
 
1133
  }
1134
 
1135
  /* Settings Fields
@@ -1161,8 +1455,8 @@ form.fl-builder-settings {
1161
  .fl-builder-settings-fields input[type=tel],
1162
  .fl-builder-settings-fields input[type=url],
1163
  .fl-builder-settings-fields select {
1164
- background: #fff;
1165
- border-color: #dfdfdf;
1166
  border-style: solid;
1167
  border-width: 1px;
1168
  border-radius: 3px;
@@ -1171,7 +1465,7 @@ form.fl-builder-settings {
1171
  box-shadow: none;
1172
  -moz-box-shadow: none;
1173
  -webkit-box-shadow: none;
1174
- color: #333;
1175
  display: inline;
1176
  font-size: 12px;
1177
  height: auto;
@@ -1181,6 +1475,9 @@ form.fl-builder-settings {
1181
  padding: 3px;
1182
  width: auto;
1183
  }
 
 
 
1184
  .fl-builder-settings-fields textarea:focus,
1185
  .fl-builder-settings-fields input[type=text]:focus,
1186
  .fl-builder-settings-fields input[type=password]:focus,
@@ -1192,22 +1489,26 @@ form.fl-builder-settings {
1192
  .fl-builder-settings-fields input[type=url]:focus,
1193
  .fl-builder-settings-fields select:focus {
1194
  background: transparent;
1195
- border-color: #aaa;
1196
  }
1197
  .fl-builder-settings-fields select[multiple] {
1198
  height: 60px;
1199
  }
1200
  .fl-builder-settings-fields ::-webkit-input-placeholder { /* WebKit browsers */
1201
  color: #999 !important;
 
1202
  }
1203
  .fl-builder-settings-fields input:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
1204
  color: #999;
 
1205
  }
1206
  .fl-builder-settings-fields ::-moz-placeholder { /* Mozilla Firefox 19+ */
1207
  color: #999 !important;
 
1208
  }
1209
  .fl-builder-settings-fields input:-ms-input-placeholder { /* Internet Explorer 10+ */
1210
  color: #999;
 
1211
  }
1212
  .fl-builder-settings-fields label {
1213
  font-weight: normal;
@@ -1218,9 +1519,11 @@ form.fl-builder-settings {
1218
  padding: 2px;
1219
  }
1220
  .fl-builder-settings-description {
1221
- border-bottom: 1px solid #dfdfdf;
1222
- margin: 0 0 10px 0;
1223
- padding-bottom: 10px !important;
 
 
1224
  }
1225
  .fl-builder-settings-fields table {
1226
  margin: 0;
@@ -1294,6 +1597,29 @@ form.fl-builder-settings {
1294
  padding: 6px;
1295
  }
1296
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1297
  /* Text Field */
1298
  .fl-builder-settings-fields input.text-full {
1299
  width: 97%;
@@ -1842,6 +2168,20 @@ li.as-result-item em {
1842
  text-decoration: underline !important;
1843
  }
1844
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1845
  /* Getting Started Video
1846
  ------------------------------------------------------ */
1847
 
@@ -1946,4 +2286,4 @@ body > .fl-builder-tour-dimmed {
1946
  right: -1px;
1947
  top: -1px;
1948
  z-index: 1;
1949
- }
 
 
 
 
 
 
 
 
 
 
 
 
1
  /* General
2
  ------------------------------------------------------ */
3
 
32
  display: block;
33
  position: absolute;
34
  }
 
 
 
35
  .screen-reader-text {
36
  position: absolute;
37
  left: -1000em;
52
  display: block !important;
53
  }
54
 
55
+ /* Responsive Editing
56
+ ------------------------------------------------------ */
57
+
58
+ .fl-responsive-preview-mask {
59
+ background: #F7F7F7;
60
+ bottom: 0;
61
+ left: 0;
62
+ position: fixed;
63
+ right: 0;
64
+ top: 0;
65
+ z-index: 99999;
66
+ }
67
+ .fl-responsive-preview {
68
+ bottom: 0;
69
+ left: 0;
70
+ position: absolute;
71
+ right: 0;
72
+ top: 43px;
73
+ z-index: 100000;
74
+ }
75
+ .fl-responsive-preview-content {
76
+ background: #F7F7F7;
77
+ padding: 20px;
78
+ }
79
+ .fl-responsive-preview-message {
80
+ color: #b3b3b3;
81
+ font-family: Helvetica, Arial, Verdana, sans-serif;
82
+ font-size: 14px;
83
+ font-weight: normal;
84
+ padding: 0 20px 20px;
85
+ text-align: center;
86
+ }
87
+ .fl-responsive-preview-message i {
88
+ cursor: pointer;
89
+ margin-left: 3px;
90
+ }
91
+ .fl-responsive-preview .fl-builder-content {
92
+ box-shadow: 0 0 8px rgba(0,0,0,0.2);
93
+ margin-left: auto;
94
+ margin-right: auto;
95
+ max-width: 100%;
96
+ }
97
+
98
  /* Builder Buttons
99
  ------------------------------------------------------ */
100
 
188
  background: #ff9600;
189
  }
190
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  /* Builder Bar
192
  ------------------------------------------------------ */
193
 
219
  padding: 7px 10px;
220
  }
221
  .fl-builder-bar-title img {
222
+ display: inline-block!important;
223
  height: 30px !important;
224
  margin: 0 1px 0 0 !important;
225
  vertical-align: middle !important;
266
  color: #fff !important;
267
  }
268
 
269
+ /* Responsive Bar */
270
+ @media (max-width: 768px) {
271
+ .fl-builder-bar-title span {
272
+ display: none;
273
+ }
274
+ }
275
+ @media (max-width: 420px) {
276
+ .fl-builder-bar-title,
277
+ .fl-builder-help-button {
278
+ display: none;
279
+ }
280
+ }
281
+
282
  /* Builder Panel
283
  ------------------------------------------------------ */
284
 
507
  /* Drag and Drop
508
  ------------------------------------------------------ */
509
 
510
+ .fl-builder-dragging .fl-builder-content:not(.fl-builder-empty) {
511
+ padding: 16px 0;
512
+ }
513
  .fl-builder-empty {
514
  border: 1px dashed #3ba0ff;
515
  color: #3ba0ff;
517
  font-size: 14px;
518
  margin: 10px;
519
  padding: 100px 20px;
520
+ position: relative;
521
  text-align: center;
522
  text-transform: uppercase;
523
  }
 
 
 
524
  .fl-builder-block.ui-draggable-dragging,
525
  .fl-builder-block-drag-helper {
526
+ background: rgba( 255, 255, 255, 0.85 ) !important;
527
  border: 1px solid #ccc;
528
  box-shadow: 0 0 8px rgba(0,0,0,0.2);
529
  -moz-box-shadow: 0 0 8px rgba(0,0,0,0.2);
530
  -webkit-box-shadow: 0 0 8px rgba(0,0,0,0.2);
531
  color: #999999 !important;
532
  font-family: Helvetica, Verdana, sans-serif !important;
533
+ font-size: 13px !important;
534
+ height: 40px !important;
535
+ line-height: 40px !important;
536
  overflow: hidden;
537
+ padding: 0 15px;
538
  position: fixed !important;
539
  text-overflow: ellipsis;
540
  white-space: nowrap;
541
+ width: 120px !important;
542
+ z-index: 100010 !important;
543
  }
544
  .fl-builder-drop-zone {
545
+ animation: fl-builder-drop-zone-pulse 3s infinite;
546
  background: #3ba0ff;
547
+ color: #fff !important;
548
  display: block;
549
  font-family: Helvetica, Verdana, sans-serif !important;
550
+ font-weight: normal;
551
+ font-size: 12px;
552
+ letter-spacing: 1px;
553
+ line-height: 14px;
554
  margin: 10px;
555
+ padding: 6px 8px 5px;
556
+ position: relative;
557
+ text-align: left;
558
+ text-overflow: ellipsis;
559
  text-shadow: none;
560
+ text-transform: none;
561
+ white-space: nowrap;
562
+ overflow: hidden;
563
+ z-index: 10;
564
+ }
565
+ @keyframes fl-builder-drop-zone-pulse {
566
+ 0% {
567
+ background-color: #7ABFFF;
568
+ }
569
+ 50% {
570
+ background-color: #3ba0ff;
571
+ }
572
+ 100% {
573
+ background-color: #7ABFFF;
574
+ }
575
  }
576
  .fl-builder-drop-zone-global {
577
+ animation: fl-builder-drop-zone-global-pulse 3s infinite;
578
  background: #ff9600;
579
  }
580
+ @keyframes fl-builder-drop-zone-global-pulse {
581
+ 0% {
582
+ background-color: #FFBC5C;
583
+ }
584
+ 50% {
585
+ background-color: #ff9600;
586
+ }
587
+ 100% {
588
+ background-color: #FFBC5C;
589
+ }
590
+ }
591
  .fl-builder-content > .fl-builder-drop-zone {
592
  margin: 10px 20px;
593
  }
594
  .fl-row-content > .fl-builder-drop-zone {
595
+ margin: 3px 7px;
596
+ }
597
+ .fl-col-has-cols > .fl-col-content > .fl-builder-drop-zone {
598
+ margin: 3px 10px;
599
+ }
600
+ .fl-sortable-disabled > .fl-builder-drop-zone {
601
+ display: none !important;
602
+ }
603
+ .fl-col-group-equal-height.fl-col-group-align-center .fl-col-content > .fl-builder-drop-zone {
604
+ width: 100%;
605
  }
606
+
607
+ /* Row Highlights */
608
  .fl-row-highlight {
609
+ padding: 16px 0;
610
  }
611
  .fl-row-highlight .fl-row-content {
612
+ border: 1px dashed #3ba0ff;
613
+ padding: 8px;
614
  }
615
+ .fl-row-highlight.fl-node-global .fl-row-content {
616
+ border-color: #ff9600;
617
+ }
618
+ .fl-row-highlight .fl-col-group {
619
+ position: relative;
620
+ }
621
+
622
+ /* Column Highlights */
623
  .fl-col-highlight {
624
+ padding: 8px;
625
+ position: relative;
626
  }
627
  .fl-col-highlight .fl-col-content {
628
+ border-style: dashed !important;
629
+ border-color: #3ba0ff !important;
630
+ border-top-width: 1px !important;
631
+ border-bottom-width: 1px !important;
632
+ border-left-width: 1px !important;
633
+ border-right-width: 1px !important;
634
  min-height: 100px;
635
+ overflow-x: hidden;
636
+ width: 100%;
637
+ }
638
+ .fl-col-has-cols.fl-col-highlight > .fl-col-content {
639
+ padding: 8px;
640
  }
641
  .fl-col-highlight.fl-node-global .fl-col-content {
642
+ border-color: #ff9600 !important;
643
  }
644
  .fl-builder-simple .fl-col-highlight .fl-col-content {
645
+ border: none !important;
646
+ }
647
+
648
+ /* Column Highlight Guides */
649
+ .fl-col-has-highlight-guide .fl-col-content {
650
+ position: relative;
651
+ }
652
+ .fl-col-highlight-guide {
653
+ background: rgba(59, 160, 255, 0.15);
654
+ border: 1px solid #3ba0ff;
655
+ bottom: 4px;
656
+ left: 4px;
657
+ position: absolute;
658
+ right: 4px;
659
+ top: 4px;
660
+ z-index: 1;
661
+ }
662
+ .fl-col-has-highlight-guide .fl-block-overlay {
663
+ background: none;
664
+ border-color: transparent;
665
+ }
666
+ .fl-col-has-highlight-guide .fl-block-col-resize {
667
+ display: none;
668
+ }
669
+ .fl-col-has-highlight-guide .fl-col-highlight .fl-col-content {
670
+ border-color: transparent !important;
671
+ }
672
+
673
+ /* Column Drop Targets */
674
+ .fl-col-drop-target {
675
+ bottom: 8px;
676
+ display: none;
677
+ left: -9px;
678
+ position: absolute;
679
+ top: 8px;
680
+ width: 18px;
681
+ z-index: 1;
682
+ }
683
+ .fl-col-highlight .fl-col-drop-target {
684
+ display: block;
685
+ }
686
+ .fl-col-drop-target-last {
687
+ left: auto;
688
+ right: -9px;
689
+ }
690
+ .fl-col-drop-target .fl-builder-drop-zone {
691
+ bottom: 0;
692
+ left: 2px;
693
+ margin: 0;
694
+ padding: 0;
695
+ position: absolute;
696
+ right: 2px;
697
+ top: 0;
698
+ }
699
+
700
+ /* Column Group Drop Targets */
701
+ .fl-col-group-drop-target {
702
+ display: none;
703
+ left: 8px;
704
+ height: 18px;
705
+ position: absolute;
706
+ right: 8px;
707
+ top: -9px;
708
+ z-index: 1;
709
+ }
710
+ .fl-row-highlight .fl-col-group-drop-target {
711
+ display: block;
712
+ }
713
+ .fl-col-group-drop-target-last {
714
+ top: auto;
715
+ bottom: -9px;
716
+ }
717
+ .fl-col-group-drop-target .fl-builder-drop-zone {
718
+ bottom: 2px;
719
+ left: 0;
720
+ margin: 0;
721
+ padding: 0;
722
+ position: absolute;
723
+ right: 0;
724
+ top: 2px;
725
+ }
726
+ .fl-row-content > .fl-col-group-drop-target {
727
+ position: static;
728
+ }
729
+ .fl-row-content > .fl-col-group-drop-target .fl-builder-drop-zone {
730
+ height: 18px;
731
+ position: static;
732
+ }
733
+
734
+ /* Row Drop Targets */
735
+ .fl-row-drop-target {
736
+ display: none;
737
+ left: 0;
738
+ height: 24px;
739
+ margin-top: -28px;
740
+ position: absolute;
741
+ right: 0;
742
+ z-index: 1;
743
+ }
744
+ .fl-row-highlight .fl-row-drop-target {
745
+ display: block;
746
+ }
747
+ .fl-row-drop-target-last {
748
+ margin-top: 0;
749
+ margin-top: 4px;
750
+ }
751
+ .fl-row .fl-row-drop-target .fl-builder-drop-zone {
752
+ bottom: 0;
753
+ left: 4px;
754
+ margin: 0;
755
+ position: absolute;
756
+ right: 4px;
757
+ top: 0;
758
+ }
759
+
760
+ /* Main Layout Row Drop Target */
761
+ .fl-builder-content > .fl-row-drop-target {
762
+ margin: 0;
763
+ position: static;
764
+ }
765
+ .fl-builder-dragging .fl-builder-content.fl-builder-empty > .fl-row-drop-target {
766
+ bottom: 10px;
767
+ display: block;
768
+ height: auto;
769
+ left: 0;
770
+ position: absolute;
771
+ right: 0;
772
+ top: 10px;
773
+ }
774
+ .fl-builder-content .fl-row-drop-target .fl-builder-drop-zone {
775
+ margin-bottom: 0;
776
+ margin-top: 0;
777
+ }
778
+
779
+ /* Sortable Proxies */
780
+ .fl-sortable-proxy {
781
+ display: none;
782
  }
783
 
784
  /* Action Overlays
794
  .fl-block-overlay-actions {
795
  background: #3ba0ff;
796
  float: left;
797
+ height: 28px;
798
+ margin: -1px -1px 0;
799
  text-shadow: none;
800
  }
801
+ .fl-builder-col-resizing .fl-block-overlay-actions {
802
+ overflow: hidden;
803
+ }
804
  .fl-block-overlay-actions > span {
805
  display: block;
806
  float: left;
829
  .fl-block-overlay-actions > i:last-child {
830
  padding-right: 2px;
831
  }
832
+ .fl-block-overlay-actions .fl-block-move {
833
  cursor: move;
834
  }
835
  .fl-block-overlay-title {
879
  .fl-col-overlay {
880
  background: rgba(59, 160, 255, 0.15);
881
  border: 1px solid #3ba0ff;
882
+ bottom: 8px;
883
  cursor: pointer;
884
  color: #fff;
885
+ left: 8px;
886
  position: absolute;
887
+ right: 8px;
888
+ top: 8px;
889
  z-index: 100007;
890
  }
891
 
961
  }
962
 
963
  /* Disabled Overlays */
964
+ .fl-node-disabled .fl-row-content-wrap {
965
+ opacity: 0.3;
 
 
 
 
 
 
 
 
966
  }
967
 
968
  /* Column Resize Handles */
1021
  top: -7px;
1022
  }
1023
 
1024
+ /* Builder Submenus
1025
+ ------------------------------------------------------ */
1026
+
1027
+ .fl-builder-has-submenu {
1028
+ position: relative;
1029
+ }
1030
+ .fl-builder-has-submenu > ul.fl-builder-submenu {
1031
+ background: #3ba0ff;
1032
+ box-shadow: 0 0 20px rgba(0,0,0,0.20);
1033
+ display: none;
1034
+ left: 0;
1035
+ list-style: none;
1036
+ margin: 0;
1037
+ padding: 6px 0;
1038
+ position: absolute;
1039
+ text-align: left;
1040
+ top: 100%;
1041
+ width: 155px;
1042
+ z-index: 100008;
1043
+ }
1044
+ .fl-builder-has-submenu > ul.fl-builder-submenu li {
1045
+ list-style: none;
1046
+ margin: 0;
1047
+ padding: 0;
1048
+ }
1049
+ .fl-builder-submenu-right ul.fl-builder-submenu {
1050
+ left: auto;
1051
+ right: 0;
1052
+ }
1053
+ .fl-builder-submenu-open ul.fl-builder-submenu {
1054
+ display: block;
1055
+ }
1056
+ .fl-builder-has-submenu > ul.fl-builder-submenu li a {
1057
+ border-bottom: 0 none;
1058
+ box-shadow: none;
1059
+ -moz-box-shadow: none;
1060
+ -webkit-box-shadow: none;
1061
+ color: #fff !important;
1062
+ display: block;
1063
+ line-height: 13px;
1064
+ font-size: 13px;
1065
+ font-family: Helvetica, Arial, Verdana, sans-serif;
1066
+ font-weight: normal;
1067
+ opacity: 0.8;
1068
+ filter: alpha(opacity = 80);
1069
+ overflow: hidden;
1070
+ padding: 6px 12px;
1071
+ text-decoration: none;
1072
+ text-overflow: ellipsis;
1073
+ white-space: nowrap;
1074
+ }
1075
+ .fl-builder-has-submenu > ul.fl-builder-submenu li a:hover {
1076
+ background: #54acff;
1077
+ color: #fff;
1078
+ opacity: 1;
1079
+ filter: alpha(opacity = 100);
1080
+ text-decoration: none;
1081
+ }
1082
+
1083
+ /* Nested Submenus */
1084
+ .fl-builder-has-submenu .fl-builder-submenu .fa {
1085
+ float: right;
1086
+ height: 12px !important;
1087
+ line-height: 12px !important;
1088
+ position: relative;
1089
+ right: -5px;
1090
+ width: 14px !important;
1091
+ }
1092
+ .fl-builder-has-submenu .fl-builder-has-submenu .fl-builder-submenu {
1093
+ display: none;
1094
+ left: 100%;
1095
+ top: 0;
1096
+ }
1097
+ .fl-builder-has-submenu .fl-builder-submenu-right.fl-builder-has-submenu .fl-builder-submenu {
1098
+ left: auto;
1099
+ right: 100%;
1100
+ }
1101
+ .fl-builder-has-submenu .fl-builder-has-submenu:hover .fl-builder-submenu {
1102
+ display: block;
1103
+ }
1104
+
1105
+ /* Submenu Item Separators */
1106
+ .fl-builder-submenu-sep {
1107
+ padding: 7px 0px !important;
1108
+ }
1109
+ .fl-builder-submenu-sep div {
1110
+ border-bottom: 1px solid rgba( 255, 255, 255, 0.4 );
1111
+ }
1112
+
1113
+ /* Parent Column Controls */
1114
+ .fl-block-col-move,
1115
+ .fl-block-col-move-parent {
1116
+ cursor: move;
1117
+ position: relative;
1118
+ }
1119
+
1120
+ /* Submenu Move Icons */
1121
+ .fl-builder-submenu .fa-arrows {
1122
+ cursor: move;
1123
+ display: none !important;
1124
+ }
1125
+ .fl-builder-submenu a:hover .fa-arrows {
1126
+ display: block !important;
1127
+ }
1128
+
1129
+ /* Global Submenus */
1130
+ .fl-block-overlay-global ul.fl-builder-submenu {
1131
+ background: #ff9600 !important;
1132
+ }
1133
+ .fl-block-overlay-global ul.fl-builder-submenu li a:hover {
1134
+ background: #ffaa33;
1135
+ }
1136
+
1137
  /* Actions Lightbox
1138
  ------------------------------------------------------ */
1139
 
1331
  .fl-lightbox-header .fl-builder-preview-loader {
1332
  margin: 0;
1333
  position: absolute;
1334
+ right: 40px;
1335
  top: 15px;
1336
  }
1337
 
1344
  padding: 15px 20px 0 20px;
1345
  }
1346
  .fl-builder-settings-tabs a {
1347
+ color: #999 !important;
1348
  display: inline-block;
1349
  margin: 0;
1350
+ outline: none;
1351
  padding: 10px 20px;
1352
  text-decoration: none !important;
1353
  }
1354
  .fl-builder-settings-tabs a:hover {
1355
  color: #333;
1356
  }
1357
+ .fl-builder-settings-tabs a:focus {
1358
+ outline: none;
1359
+ }
1360
  .fl-builder-settings-tabs a.fl-active {
1361
  background: #fff;
1362
  border: 1px solid #dfdfdf;
1363
  border-bottom: none;
1364
+ color: #333 !important;
1365
  position: relative;
1366
  top: 1px;
1367
  }
1394
  ------------------------------------------------------ */
1395
 
1396
  .fl-form-table {
1397
+ background: none transparent;
1398
  border: none;
1399
  width: 100%;
1400
  }
1414
  vertical-align: top !important;
1415
  width: 200px !important;
1416
  }
1417
+ .fl-form-table th label {
1418
+ color: #333;
1419
+ }
1420
+ .fl-form-table td {
1421
+ background: #fff !important;
1422
+ border: none !important;
1423
+ font-weight: normal !important;
1424
  padding: 8px 10px;
1425
+ text-align: left !important;
1426
+ width: auto !important;
1427
  }
1428
 
1429
  /* Settings Fields
1455
  .fl-builder-settings-fields input[type=tel],
1456
  .fl-builder-settings-fields input[type=url],
1457
  .fl-builder-settings-fields select {
1458
+ background: #fff !important;
1459
+ border-color: #dfdfdf !important;
1460
  border-style: solid;
1461
  border-width: 1px;
1462
  border-radius: 3px;
1465
  box-shadow: none;
1466
  -moz-box-shadow: none;
1467
  -webkit-box-shadow: none;
1468
+ color: #333 !important;
1469
  display: inline;
1470
  font-size: 12px;
1471
  height: auto;
1475
  padding: 3px;
1476
  width: auto;
1477
  }
1478
+ .fl-builder-settings-fields input[type=number] {
1479
+ width: 50px;
1480
+ }
1481
  .fl-builder-settings-fields textarea:focus,
1482
  .fl-builder-settings-fields input[type=text]:focus,
1483
  .fl-builder-settings-fields input[type=password]:focus,
1489
  .fl-builder-settings-fields input[type=url]:focus,
1490
  .fl-builder-settings-fields select:focus {
1491
  background: transparent;
1492
+ border-color: #dfdfdf;
1493
  }
1494
  .fl-builder-settings-fields select[multiple] {
1495
  height: 60px;
1496
  }
1497
  .fl-builder-settings-fields ::-webkit-input-placeholder { /* WebKit browsers */
1498
  color: #999 !important;
1499
+ font-size: 12px;
1500
  }
1501
  .fl-builder-settings-fields input:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
1502
  color: #999;
1503
+ font-size: 12px;
1504
  }
1505
  .fl-builder-settings-fields ::-moz-placeholder { /* Mozilla Firefox 19+ */
1506
  color: #999 !important;
1507
+ font-size: 12px;
1508
  }
1509
  .fl-builder-settings-fields input:-ms-input-placeholder { /* Internet Explorer 10+ */
1510
  color: #999;
1511
+ font-size: 12px;
1512
  }
1513
  .fl-builder-settings-fields label {
1514
  font-weight: normal;
1519
  padding: 2px;
1520
  }
1521
  .fl-builder-settings-description {
1522
+ padding: 10px;
1523
+ padding-top: 0;
1524
+ margin: 0;
1525
+ font-style: italic;
1526
+ opacity: .75;
1527
  }
1528
  .fl-builder-settings-fields table {
1529
  margin: 0;
1597
  padding: 6px;
1598
  }
1599
 
1600
+ /* Responsive Options */
1601
+ .fl-field-responsive-setting {
1602
+ display: inline-block;
1603
+ }
1604
+ .fl-field-responsive-setting-medium,
1605
+ .fl-field-responsive-setting-responsive {
1606
+ display: none;
1607
+ }
1608
+ i.fl-field-responsive-toggle {
1609
+ color: #808080;
1610
+ cursor: pointer;
1611
+ display: inline-block;
1612
+ font-size: 15px !important;
1613
+ height: auto;
1614
+ line-height: 15px !important;
1615
+ text-align: left;
1616
+ vertical-align: middle;
1617
+ width: 20px;
1618
+ }
1619
+ i.fl-field-responsive-toggle:hover {
1620
+ color: #000;
1621
+ }
1622
+
1623
  /* Text Field */
1624
  .fl-builder-settings-fields input.text-full {
1625
  width: 97%;
2168
  text-decoration: underline !important;
2169
  }
2170
 
2171
+ /* TipTip
2172
+ ------------------------------------------------------ */
2173
+
2174
+ #tiptip_holder {
2175
+ z-index: 200000;
2176
+ }
2177
+ #tiptip_arrow_inner {
2178
+ border-top-color: #333 !important;
2179
+ }
2180
+ #tiptip_content {
2181
+ background: #333;
2182
+ box-shadow: none;
2183
+ }
2184
+
2185
  /* Getting Started Video
2186
  ------------------------------------------------------ */
2187
 
2286
  right: -1px;
2287
  top: -1px;
2288
  z-index: 1;
2289
+ }
css/fl-builder.min.css CHANGED
@@ -1 +1 @@
1
- .fl-builder-edit #wpadminbar,.fl-builder-hidden-editor{display:none}.fl-builder-edit .media-frame,.fl-lightbox-wrap{-webkit-backface-visibility:hidden}table{border-collapse:inherit!important}html.fl-builder-edit{margin-top:43px!important}.fl-builder-edit body{position:static!important}.fl-clear{clear:both}.fl-builder-loading{background:url(../img/ajax-loader.gif) center center no-repeat rgba(240,240,240,.8);bottom:0;display:none;left:0;position:fixed;right:0;text-align:center;top:0;z-index:200000}.fl-builder-settings .fl-builder-loading{background:url(../img/ajax-loader.gif) center center no-repeat rgba(255,255,255,.8);display:block;position:absolute}#tiptip_holder{z-index:200000}.screen-reader-text{position:absolute;left:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}.fl-visible-desktop,.fl-visible-desktop-medium,.fl-visible-medium,.fl-visible-medium-mobile,.fl-visible-mobile{display:block!important}.fl-builder-button{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top;display:inline-block;text-decoration:none;font-size:13px!important;line-height:13px!important;height:28px;margin:0;padding:7px 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-border-radius:3px;-webkit-appearance:none;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.fl-builder-button:hover{background:#fafafa;border-color:#999;color:#222}.fl-builder-button-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff!important;text-decoration:none}.fl-builder-button-primary:hover{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff!important}.fl-builder-button-large{height:30px;line-height:30px!important;padding:0 12px 2px}.fl-builder-button-small{font-size:11px!important;line-height:11px!important;height:24px}.fl-builder-help-button{color:#b3b3b3;font-size:16px!important}.fl-builder-help-button i{position:relative;top:-1px}.fl-builder-help-button:hover{color:#666}.fl-builder-publish-button{height:45px;line-height:45px!important}.fl-builder-badge{background:#333;border-radius:2px;color:#fff!important;display:inline;font-size:11px!important;font-weight:400;letter-spacing:1px;margin-left:2px;padding:2px 4px;vertical-align:top}.fl-builder-badge-global{background:#ff9600}.fl-builder-has-submenu{position:relative}.fl-builder-has-submenu>ul.fl-builder-submenu.fl-block-col-submenu{background:#3ba0ff;box-shadow:0 0 20px rgba(0,0,0,.2);display:none;left:0;list-style:none;margin:0;padding:6px 0;position:absolute;text-align:left;top:100%;width:155px;z-index:100008}.fl-builder-has-submenu>ul.fl-builder-submenu.fl-block-col-submenu li{list-style:none;margin:0;padding:0}.fl-builder-submenu-right ul.fl-builder-submenu.fl-block-col-submenu{left:auto;right:0}.fl-builder-submenu-open ul.fl-builder-submenu.fl-block-col-submenu{display:block}.fl-builder-has-submenu>ul.fl-builder-submenu.fl-block-col-submenu li a{border-bottom:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#fff!important;display:block;line-height:13px;font-size:13px;font-family:Helvetica,Arial,Verdana,sans-serif;font-weight:400;opacity:.8;filter:alpha(opacity=80);padding:6px 12px;text-decoration:none}.fl-builder-has-submenu>ul.fl-builder-submenu li a:hover{background:#54acff;color:#fff;opacity:1;filter:alpha(opacity=100);text-decoration:none}.fl-builder-bar-content,.fl-builder-panel{color:#999;font-family:Helvetica,Arial,Verdana,sans-serif}.fl-block-overlay-global ul.fl-builder-submenu{background:#ff9600}.fl-block-overlay-global ul.fl-builder-submenu li a:hover{background:#fa3}.fl-builder-bar{left:0;position:fixed;right:0;top:0;z-index:100008}.fl-builder-bar-content{background:#f4f4f4;border-bottom:1px solid #ccc;box-shadow:0 0 8px rgba(0,0,0,.2);-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);font-size:14px;height:43px}.fl-builder-bar-title{color:#333;display:block;float:left;font-size:20px;font-weight:300;line-height:20px;padding:7px 10px}.fl-builder-bar-title img{height:30px!important;margin:0 1px 0 0!important;vertical-align:middle!important}.fl-builder-bar-title span{vertical-align:middle}.fl-builder-bar-title.fl-builder-bar-title-no-icon{padding:12px}.fl-builder-bar-actions{float:right;padding:7px}.fl-builder-bar .fl-builder-button{float:right;margin:0 0 0 6px}.fl-builder-bar .fl-builder-add-content-button{display:none}.fl-builder-buy-button,.fl-builder-upgrade-button{background:#f7951e;border-color:#de7c04;-webkit-box-shadow:inset 0 1px 0 rgba(255,177,82,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(255,177,82,.5),0 1px 0 rgba(0,0,0,.15);color:#fff!important;text-decoration:none}.fl-builder-modules-cta a:focus,.fl-builder-settings-tabs a{text-decoration:none!important}.fl-builder-buy-button i.fa-external-link-square,.fl-builder-upgrade-button i.fa-external-link-square{color:#f4d1a7;margin:0 0 0 6px}.fl-builder-buy-button:hover,.fl-builder-upgrade-button:hover{background:#de861b;border-color:#c46e04;-webkit-box-shadow:inset 0 1px 0 rgba(255,177,82,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(255,177,82,.5),0 1px 0 rgba(0,0,0,.15);color:#fff!important}.fl-builder-panel{background:#f0f0f0;border-left:1px solid #ccc;bottom:0;box-shadow:0 0 8px rgba(0,0,0,.2);-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);font-size:14px;opacity:1;position:fixed;right:0;top:43px;width:300px;z-index:100007;-webkit-transform:translateZ(0);transition:opacity .2s;-webkit-transition:opacity .2s;-moz-transition:opacity .2s;-o-transition:opacity .2s;-ms-transition:opacity .2s;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-block-col-resize-feedback,.fl-builder-drop-zone,.fl-builder-empty{font-family:Helvetica,Verdana,sans-serif!important}.fl-builder-panel-actions{background:#f4f4f4;border-bottom:1px solid #dbdbdb;height:43px;left:0;position:absolute;right:0;top:0;text-align:right;z-index:100009}.fl-builder-panel-actions .fl-builder-panel-close{color:#bfbfbf;cursor:pointer;float:left;font-size:18px;margin:12px 18px}.fl-builder-panel-actions .fl-builder-panel-close:hover{color:#333}.fl-builder-panel-content-wrap{bottom:0;height:auto;left:0;overflow:hidden;position:absolute;right:0;top:43px}.fl-builder-panel-content{padding-bottom:60px}.fl-builder-blocks-section .fl-builder-block,.fl-builder-blocks-section .fl-builder-blocks-section-title{cursor:pointer;display:block;line-height:14px;padding:15px 20px}.fl-builder-blocks-section .fl-builder-blocks-section-title{border-bottom:1px solid #dfdfdf;color:#333;font-weight:400}.fl-builder-blocks-section .fl-builder-blocks-section-title i{color:#bfbfbf;float:right}.fl-builder-blocks-section .fl-builder-blocks-section-title:hover,.fl-builder-blocks-section .fl-builder-blocks-section-title:hover i{background:#e5e5e5}.fl-builder-blocks-section-content{background:#fff;display:none}.fl-builder-blocks-section.fl-active .fl-builder-blocks-section-content{display:block}.fl-builder-blocks-section-content .fl-builder-block{border-bottom:1px solid #ebebeb;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fl-builder-blocks-section-content .fl-builder-block i{color:#d9d9d9;margin-right:10px}.fl-builder-blocks-section-content .fl-builder-block:hover{background:#0074a1;color:#fff;cursor:move}.fl-builder-blocks-separator{background:#dfdfdf;height:6px}.fl-builder-block:hover .fl-builder-badge{background:#2ea2cc}.ui-sortable-helper .fl-builder-badge{display:none!important}.fl-builder-modules-cta a{color:#999!important;display:block!important;font-size:12px!important;font-style:italic!important;padding:15px 20px!important;line-height:16px!important}.fl-builder-modules-cta a:hover{background:#e5e5e5!important;color:#666!important;text-decoration:none!important}.fl-builder-modules-cta .fa{float:right!important;font-size:14px!important;margin:3px 0 0 9px!important}.fl-builder-block-template-image{margin:5px 0 10px;max-width:100%}.fl-photo-field .fl-photo-preview-img img,.fl-video-field .fl-video-preview-img img{max-width:60px}.fl-builder-block-template .fl-builder-block-title{display:block;overflow:hidden;text-overflow:ellipsis}.ui-sortable-helper .fl-builder-block-template-image{display:none!important}span.fl-builder-block-no-node-templates{display:block;padding:15px 20px}span.fl-builder-block-no-node-templates:hover{cursor:default;background:#fff}.fl-builder-blocks-node-template .fl-builder-block{position:relative}.fl-builder-blocks-section-content .fl-builder-node-template-actions{bottom:0;cursor:default;display:none;position:absolute;right:0;top:0;width:72px}.fl-builder-blocks-section-content .fl-builder-node-template-delete,.fl-builder-blocks-section-content .fl-builder-node-template-edit{bottom:0;cursor:pointer;margin:0;padding:15px 0;position:absolute;text-align:center;top:0;width:30px}.fl-builder-blocks-section-content .fl-builder-node-template-delete{right:12px}.fl-builder-blocks-section-content .fl-builder-node-template-edit{right:42px}.fl-builder-blocks-section-content .fl-builder-node-template-delete i,.fl-builder-blocks-section-content .fl-builder-node-template-edit i{margin:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete:hover i,.fl-builder-blocks-section-content .fl-builder-node-template-edit:hover i{color:#fff}.fl-builder-blocks-node-template .fl-builder-block:hover{padding-right:85px}.fl-builder-blocks-node-template .fl-builder-block:hover .fl-builder-node-template-actions{display:block}.ui-sortable-helper .fl-builder-node-template-delete,.ui-sortable-helper .fl-builder-node-template-edit{display:none!important}.fl-builder-empty{border:1px dashed #3ba0ff;color:#3ba0ff;font-size:14px;margin:10px;padding:100px 20px;text-align:center;text-transform:uppercase}.fl-builder-empty .fl-builder-drop-zone{margin:10px}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging{background:#fff!important;border:1px solid #ccc;box-shadow:0 0 8px rgba(0,0,0,.2);-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);color:#999!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:14px!important;height:45px!important;line-height:42px!important;overflow:hidden;padding:0 18px;position:fixed!important;text-overflow:ellipsis;white-space:nowrap;width:140px!important;z-index:100010}.fl-builder-drop-zone{background:#3ba0ff;color:#fff;display:block;font-weight:700;font-size:14px;margin:10px;padding:10px;text-shadow:none}.fl-builder-drop-zone-global{background:#ff9600}.fl-builder-content>.fl-builder-drop-zone{margin:10px 20px}.fl-row-content>.fl-builder-drop-zone{margin:5px}.fl-row-highlight{padding:5px 0}.fl-row-highlight .fl-row-content{border:1px dashed red;padding:5px}.fl-col-highlight{padding:15px 5px}.fl-col-highlight .fl-col-content{border-style:dashed;border-color:#3ba0ff;min-height:100px;border-width:1px}.fl-col-highlight.fl-node-global .fl-col-content{border-color:#ff9600}.fl-builder-simple .fl-col-highlight .fl-col-content{border:none}.fl-block-overlay,.fl-block-overlay *{text-shadow:none}.fl-block-overlay-active{position:relative}.fl-block-overlay-actions{background:#3ba0ff;float:left;margin:0 -1px;text-shadow:none}.fl-block-overlay-actions>span{display:block;float:left}.fl-block-overlay-actions i{color:#fff!important;cursor:pointer;display:block!important;float:left;font-size:14px!important;height:28px!important;font-weight:100!important;line-height:28px!important;opacity:.8;filter:alpha(opacity=80);text-align:center;width:28px!important}.fl-block-overlay-actions i:hover{opacity:1;filter:alpha(opacity=100)}.fl-block-overlay-actions>i:first-child{padding-left:4px}.fl-block-overlay-actions>i:last-child{padding-right:2px}.fl-block-overlay-actions i.fl-block-move{cursor:move}.fl-block-overlay-title{border-right:1px solid #5eb1ff;color:#fff!important;float:left;font-family:Helvetica,Arial,Verdana,sans-serif;font-size:13px;height:30px;line-height:29px;margin-right:2px;padding:0 8px}.fl-row-overlay{background:rgba(59,160,255,.15);border:1px solid #3ba0ff;bottom:0;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;color:#fff;left:0;position:absolute;top:-30px;width:100%;z-index:100006}.fl-row-overlay-header-bottom{bottom:-30px;top:0}.fl-row-overlay-header-bottom .fl-block-overlay-header{position:absolute;bottom:0}.fl-block-overlay-active .fl-row-content-wrap{position:relative}.fl-block-overlay-active .fl-row-content{position:relative;z-index:100007!important}.fl-col-overlay,.fl-module-overlay{background:rgba(59,160,255,.15);border:1px solid #3ba0ff;cursor:pointer;color:#fff;position:absolute}.fl-col-overlay{bottom:15px;left:5px;right:5px;top:15px;z-index:100007}.fl-module-overlay{bottom:4px;left:4px;min-height:32px;right:4px;top:4px;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-module-overlay{cursor:default}.fl-module-adjust-height{padding-bottom:15px;padding-top:15px}.fl-block-overlay-global{background:rgba(255,150,0,.1);border:1px solid #ff9600}.fl-block-overlay-global .fl-block-overlay-actions{background:#ff9600}.fl-block-overlay-global .fl-block-overlay-title{border-right:1px solid #ffcf66}.fl-block-overlay-title-global{background:#fff;border-radius:2px;color:#ff9600!important;font-size:11px;letter-spacing:1px;margin-left:4px;padding:2px 4px;vertical-align:top}.fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,.3);cursor:pointer;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-row-overlay{cursor:default}.fl-builder-row-template .fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,.1);cursor:default;z-index:100006}.fl-block-overlay-muted .fl-row-overlay{background:rgba(153,153,153,.1);border:1px solid #8c8c8c}.fl-block-overlay-muted .fl-row-overlay .fl-block-overlay-actions{background:#8c8c8c}.fl-block-overlay-muted .fl-row-overlay .fl-block-overlay-title{border-right:1px solid #a6a6a6}.fl-node-disabled{position:relative}.fl-node-disabled-overlay{background:rgba(153,153,153,.75);bottom:0;left:0;position:absolute;right:0;top:0}.fl-block-col-resize{bottom:0!important;position:absolute;top:0!important;width:6px}.fl-block-col-resize-e{cursor:ew-resize;left:auto!important;right:-4px!important}.fl-block-col-resize-w{cursor:ew-resize;left:-4px!important}.fl-block-col-resize-handle-wrap{margin:-4px 0 0 -5px;padding:0 5px;position:absolute;top:50%!important}.fl-block-col-resize-e .fl-block-col-resize-handle-wrap{margin-left:-6px}.fl-block-col-resize-handle{background:#fff;border:1px solid #259aff;height:7px;width:7px}.fl-node-global .fl-block-col-resize-handle{border-color:#ff9600}.fl-block-col-resize-feedback{color:#333!important;display:none;font-size:11px!important;position:absolute}.fl-builder-actions-title,.fl-builder-alert-lightbox .fl-lightbox-message{color:#333!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:16px!important}.fl-block-col-resize-feedback-left,.fl-block-col-resize-feedback-right{background:#fff;border:1px solid #3ba0ff;padding:2px 4px}.fl-block-col-resize-feedback-left{right:20px;top:-7px}.fl-block-col-resize-feedback-right{left:20px;top:-7px}.fl-builder-actions-lightbox .fl-lightbox{width:300px}.fl-builder-actions-lightbox .fl-builder-actions{display:block;padding:25px;text-align:center}.fl-builder-actions-title{display:block;margin-bottom:20px}.fl-builder-actions .fl-builder-button{display:block;margin-bottom:7px}.fl-builder-alert-lightbox{z-index:200001}.fl-builder-alert-lightbox .fl-lightbox{width:440px!important}.fl-builder-alert-lightbox .fl-lightbox-message{line-height:24px;padding:30px}.fl-template-category-select{width:180px!important}.fl-template-selector .fl-builder-settings-section{margin:0 0 10px}.fl-template-selector .fl-builder-settings-fields{height:470px}.fl-template-selector .fl-builder-settings-tab{width:560px}.fl-template-selector .fl-builder-settings-tab-description{font-size:15px!important;margin:0!important;padding:10px 0 25px;text-align:center}.fl-template-preview{float:left;margin:0 25px 30px 0;position:relative;text-align:center;width:170px}.fl-template-preview.fl-last{margin-right:0}.fl-template-image{border:1px solid #d9d9d9;cursor:pointer;margin-bottom:12px;height:164px;overflow:hidden}.fl-builder-templates-cta,.fl-user-templates{margin-bottom:20px}.fl-template-image:hover{border-color:red}.fl-template-image img{max-height:none;width:100%}.fl-template-preview span{display:block;text-align:center}.fl-user-template-category-name{background:#f2f2f2;border-bottom:3px solid #dfdfdf;border-top:2px solid #dfdfdf;font-weight:700;padding:8px 15px}.fl-user-templates{border-top:1px solid #dfdfdf;margin-right:8px}.fl-user-template{border-bottom:1px solid #dfdfdf;padding:15px;position:relative}.fl-user-template:hover{background:#0074a1;color:#fff!important;cursor:pointer}.fl-user-template:hover *{color:#fff!important}.fl-user-template-actions{bottom:0;position:absolute;right:0;top:0}.fl-user-template-actions a{color:#bfbfbf!important;display:inline-block;padding:15px}.fl-user-template:hover a{color:#99c7d9!important}.fl-user-template:hover a:hover{color:#fff!important}.fl-user-templates-message{display:none}.fl-builder-templates-cta p{display:inline-block!important;width:75%!important;font-size:14px!important;line-height:1.5!important;margin-bottom:0!important}.fl-builder-templates-cta .fl-builder-upgrade-button{font-size:13px!important;line-height:13px!important;position:relative;top:8px;left:15px;padding:1px 12px}.fl-builder-settings-message,.fl-builder-settings-message *{font-size:15px!important;line-height:23px!important}.fl-builder-node-template-settings .fl-builder-settings-fields,.fl-builder-user-template-settings .fl-builder-settings-fields{height:150px}.fl-builder-lightbox .fl-lightbox{width:600px}form.fl-builder-settings{margin:0;padding:0}.fl-builder-settings-message{padding:20px 25px!important;background:#f2f2f2!important}.fl-builder-preview-loader{position:relative;top:-1px;margin-left:3px}.fl-lightbox-header .fl-builder-preview-loader{margin:0;position:absolute;right:15px;top:15px}.fl-builder-settings-tabs{background:#f5f5f5;border-bottom:1px solid #dfdfdf;padding:15px 20px 0}.fl-builder-settings-tabs a{color:#999;display:inline-block;margin:0;padding:10px 20px}.fl-builder-settings-tabs a:hover{color:#333}.fl-builder-settings-tabs a.fl-active{background:#fff;border:1px solid #dfdfdf;border-bottom:none;color:#222;position:relative;top:1px}.fl-builder-settings-tabs a.error{color:#d03436;padding-right:10px}.fl-builder-settings-tabs a.error .fl-error-icon{background:url(../img/sprite.png) -148px -5px no-repeat;display:inline-block;height:16px;margin-left:7px;position:relative;top:3px;width:16px}.fl-builder-settings-tab{display:none;width:550px}.fl-builder-settings-tab.fl-active{display:block}.fl-builder-settings-tab-description{background:#f5f5f5;padding:10px 15px}.fl-form-table{border:none;width:100%}.fl-form-table tbody{border:none}.fl-form-table tr,.fl-form-table tr:nth-child(even){background:0 0}.fl-form-table th{border:none!important;background:#fff!important;font-weight:400!important;padding:10px!important;text-align:left!important;vertical-align:top!important;width:200px!important}.fl-form-table td{border:none;padding:8px 10px}.fl-builder-settings-fields{height:410px;margin:5px 0 0;overflow:hidden;position:relative}.fl-lightbox-header .fl-builder-settings-fields{height:auto;margin:0;position:absolute;right:10px;top:10px}.fl-builder-settings-fields .fl-nanoscroller-content{padding:15px 20px}.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select,.fl-builder-settings-fields textarea{background:#fff;border-color:#dfdfdf;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333;display:inline;font-size:12px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px;width:auto}.fl-builder-settings-fields input[type=email]:focus,.fl-builder-settings-fields input[type=file]:focus,.fl-builder-settings-fields input[type=number]:focus,.fl-builder-settings-fields input[type=password]:focus,.fl-builder-settings-fields input[type=search]:focus,.fl-builder-settings-fields input[type=tel]:focus,.fl-builder-settings-fields input[type=text]:focus,.fl-builder-settings-fields input[type=url]:focus,.fl-builder-settings-fields select:focus,.fl-builder-settings-fields textarea:focus{background:0 0;border-color:#aaa}.fl-builder-settings-fields select[multiple]{height:60px}.fl-builder-settings-fields ::-webkit-input-placeholder{color:#999!important}.fl-builder-settings-fields input:-moz-placeholder{color:#999}.fl-builder-settings-fields ::-moz-placeholder{color:#999!important}.fl-builder-settings-fields input:-ms-input-placeholder{color:#999}.fl-builder-settings-fields label{font-weight:400}.fl-builder-settings-fields select{height:2em;color:#000;padding:2px}.fl-builder-settings-description{border-bottom:1px solid #dfdfdf;margin:0 0 10px;padding-bottom:10px!important}.fl-builder-settings-fields table{margin:0}.fl-builder-settings-fields h3.fl-builder-settings-title{border-bottom:1px solid #dfdfdf;color:#333;font-size:14px;font-weight:700;margin:0 0 20px!important;padding:10px}.fl-builder-settings-section{margin-bottom:15px}.wp-core-ui h1,.wp-core-ui h2,.wp-core-ui h3,.wp-core-ui h4,.wp-core-ui h5,.wp-core-ui h6{color:#333}.wp-core-ui .submitbox .submitdelete{color:#a00}.wp-core-ui button{font-weight:400;text-transform:capitalize}.wp-core-ui input[type=email],.wp-core-ui input[type=file],.wp-core-ui input[type=number],.wp-core-ui input[type=password],.wp-core-ui input[type=search],.wp-core-ui input[type=tel],.wp-core-ui input[type=text],.wp-core-ui input[type=url],.wp-core-ui select,.wp-core-ui textarea{background-color:#fff;border-color:#dfdfdf;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333;font-weight:400}.wp-core-ui input[type=email]:focus,.wp-core-ui input[type=file]:focus,.wp-core-ui input[type=number]:focus,.wp-core-ui input[type=password]:focus,.wp-core-ui input[type=search]:focus,.wp-core-ui input[type=tel]:focus,.wp-core-ui input[type=text]:focus,.wp-core-ui input[type=url]:focus,.wp-core-ui select:focus,.wp-core-ui textarea:focus{background:0 0;border-color:#aaa}.wp-core-ui input[type=search]{background-image:none;padding:6px}.fl-builder-settings-fields input.text-full,.fl-builder-settings-fields textarea{width:97%}.fl-color-picker{cursor:pointer}.fl-color-picker .fl-color-picker-clear:hover{background-color:#ededed}.colorpicker input{padding:0!important;font-size:11px!important;color:#fff!important;width:29px!important;height:auto!important;background:0 0!important;border:none!important}.colorpicker .colorpicker_hex input{width:45px!important}.fl-builder-custom-field{border:1px solid #dfdfdf;border-radius:3px;padding:5px 10px}.fl-builder-custom-field a{color:#21759b!important;text-decoration:underline!important}.fl-builder-custom-field a:hover{color:#d54e21!important}.fl-builder-custom-field label.error{margin-top:5px}.fl-photo-field .fl-photo-select,.fl-photo-field.fl-photo-empty .fl-photo-preview{display:none}.fl-photo-field.fl-photo-empty .fl-photo-select{display:block}.fl-photo-field .fl-photo-preview-img{float:left;line-height:0;margin:5px 0}.fl-photo-field .fl-photo-preview select{margin:8px 0 8px 10px;width:200px}.fl-photo-field .fl-photo-edit{margin:0 0 0 11px}.fl-multiple-photos-field .fl-multiple-photos-add,.fl-photo-field .fl-photo-remove,.fl-photo-field .fl-photo-replace{margin:0 0 0 8px}.fl-builder-edit .media-modal-content .thumbnail{padding:0;border:none;border-radius:0}.fl-builder-edit button.button-link.media-modal-close{position:absolute;box-shadow:none;-webkit-box-shadow:none}.fl-builder-edit .media-frame.hide-menu{visibility:visible}.fl-multiple-photos-field .fl-multiple-photos-select,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-add,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-count,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-edit,.fl-multiple-photos-lightbox .gallery-settings{display:none}.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-select{display:inline}.fl-multiple-photos-count{font-weight:700;margin-bottom:3px}.fl-video-field .fl-video-select,.fl-video-field.fl-video-empty .fl-video-preview{display:none}.fl-video-field.fl-video-empty .fl-video-select{display:block}.fl-video-field .fl-video-preview-img{float:left;line-height:0;margin:5px 0}.fl-video-field .fl-video-preview-filename{display:inline-block;font-size:14px;font-weight:700;margin:7px 0 0 11px}.fl-video-field .fl-video-replace{margin:0 0 0 11px}.fl-multiple-audios-field .fl-multiple-audios-select,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-add,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-edit{display:none}.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-select{display:block}.fl-multiple-audios-field .fl-multiple-audios-add{margin:0 0 0 8px}.fl-icon-field .fl-icon-select,.fl-icon-field.fl-icon-empty .fl-icon-preview{display:none}.fl-icon-field.fl-icon-empty .fl-icon-select{display:block}.fl-icon-field .fl-icon-preview i{display:inline-block;font-size:28px;margin:10px 10px 9px 2px;vertical-align:middle}.fl-icon-field .fl-icon-remove{margin:0 0 0 8px}.fl-builder-settings .wp-switch-editor{background:#ebebeb;border:1px solid #e5e5e5;border-radius:0;color:#333}.fl-builder-settings .wp-editor-container{border:1px solid #e5e5e5}.fl-builder-settings .mce-toolbar .mce-btn-group .mce-btn{margin:2px 0}.fl-builder-settings .mce-menubtn.mce-fixed-width button{width:100px}.mce-close:active,.mce-close:hover,.mce-toolbar .mce-btn button:active,.mce-toolbar .mce-btn button:hover,.mce-window .mce-btn button:active,.mce-window .mce-btn button:hover{background:0 0;border:none}.mce-ico{font-family:tinymce,Arial!important}.mce-toolbar i.mce-ico{font:400 20px/1 dashicons!important}.fl-builder-edit form#wp-link,.popover[class*=tour-],ul.as-list{font-family:Helvetica,Arial,Verdana,sans-serif}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:1px!important}.wp-editor-container textarea.wp-editor-area{background:0 0;border:none;padding:10px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.fl-builder-edit form#wp-link{color:#000;font-size:13px}.fl-builder-edit form#wp-link #link-options label{display:block;margin-bottom:2px}.fl-builder-edit form#wp-link #link-options label span{padding-right:10px;vertical-align:middle}.fl-builder-edit form#wp-link #link-options input[type=text]{display:inline-block;height:auto;margin:5px 0 0;padding:3px 5px;width:80%}.fl-builder-edit form#wp-link .query-results{top:225px}.ace_editor,.ace_editor *{font-family:Monaco,Menlo,"Ubuntu Mono","Droid Sans Mono",Consolas,monospace!important;font-size:12px!important;font-weight:400!important;letter-spacing:0!important}.fl-builder-global-settings #fl-builder-settings-tab-css,.fl-builder-global-settings #fl-builder-settings-tab-js,.fl-builder-html-settings #fl-builder-settings-tab-general,.fl-builder-layout-settings #fl-builder-settings-tab-css,.fl-builder-layout-settings #fl-builder-settings-tab-js{width:560px}.fl-builder-global-settings #fl-builder-settings-section-css,.fl-builder-global-settings #fl-builder-settings-section-js,.fl-builder-html-settings #fl-builder-settings-section-general,.fl-builder-layout-settings #fl-builder-settings-section-css,.fl-builder-layout-settings #fl-builder-settings-section-js{margin-bottom:0}.fl-builder-global-settings #fl-builder-settings-tab-css td,.fl-builder-global-settings #fl-builder-settings-tab-js td,.fl-builder-html-settings #fl-builder-settings-section-general td,.fl-builder-layout-settings #fl-builder-settings-tab-css td,.fl-builder-layout-settings #fl-builder-settings-tab-js td{padding:0}.fl-layout-field-option{border:2px solid #d9d9d9;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;cursor:pointer;float:left;line-height:0;max-width:23%;margin:0 1% 2%;padding:5px}.fl-layout-field-option-selected,.fl-layout-field-option:hover{border-color:red}.fl-layout-field-option img{max-width:100%}.fl-link-field-input{width:244px!important}.fl-link-field-search{display:none;border:1px solid #dfdfdf;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;margin:4px 0 0;padding:10px}.fl-link-field-search-title{display:block;margin:0 0 3px 2px}.fl-link-field-search-cancel{margin-top:6px}.fl-help-tooltip{display:inline-block;position:relative}.fl-help-tooltip-icon{color:#999!important;cursor:pointer;font-family:FontAwesome;font-size:15px!important;padding:5px;vertical-align:middle}.fl-help-tooltip-text{background:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ccc;-moz-box-shadow:0 0 5px #ccc;-webkit-box-shadow:0 0 5px #ccc;display:none;font-weight:400;left:23px;padding:10px 13px;position:absolute;top:-6px;width:250px;z-index:1000}.fl-form-field-preview-text .fa{font-size:18px;line-height:22px}.fl-builder-field-actions{padding-left:0!important;padding-right:0!important;text-align:center;width:85px}.fl-builder-field-actions i{color:#999!important;cursor:pointer;font-size:13px!important;height:24px;line-height:29px!important;padding-bottom:20px;width:24px}.fl-builder-field-actions i:hover{color:#000!important}.fl-builder-field-actions i.fl-builder-field-copy,.fl-builder-field-actions i.fl-builder-field-delete{margin-left:5px}.fl-builder-field-actions i.fl-builder-field-move{cursor:move}.fl-builder-field-dd-helper{background:#ccc;height:30px!important;float:left;width:130px!important}.fl-builder-field-dd-zone{border:1px dashed #ccc;height:30px}.fl-builder-field-actions-single{width:auto}.fl-builder-field-actions-single i.fl-builder-field-delete,.fl-builder-field-actions-single i.fl-builder-field-move{display:none}.fl-builder-widget-settings input{display:inline-block!important;margin:5px 10px 8px!important}.fl-builder-lightbox-loading{background:url(../img/ajax-loader.gif) center center no-repeat;height:100px}.fl-builder-settings .error,.fl-builder-settings input.error{border-color:#d03436}.fl-builder-settings label.error,.fl-builder-settings p.error{color:#d03436;display:block;margin-top:5px}.fl-builder-settings .fl-form-table .fl-field-description{color:#999;font-style:normal}ul.as-selections{background-color:#fff;border-color:#dfdfdf;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333;font-size:12px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px;width:auto}ul.as-selections.loading{background:url(../img/ajax-loader-small.gif) 98% center no-repeat}ul.as-selections li.as-selection-item{background:#d4eaf6;border:none;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;font-size:11px;line-height:14px;margin-bottom:4px;padding-bottom:0;padding-top:0}ul.as-selections li.as-selection-item.blur{background:#f4f4f4}ul.as-selections li.as-selection-item a.as-close{line-height:12px}ul.as-selections li.as-original{margin:0}ul.as-selections li.as-original input{height:auto;font-size:12px;margin:0;padding:0}ul.as-list{margin:0;font-size:13px;color:#000;background-color:#fff;background-color:rgba(255,255,255,.95);z-index:2;-webkit-box-shadow:0 0 10px rgba(0,0,0,.1);-moz-box-shadow:0 0 10px rgba(0,0,0,.1);box-shadow:0 0 10px rgba(0,0,0,.1);-ms-border-radius:0;-o-border-radius:0;border:none;border:1px solid #dfdfdf;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}li.as-message,li.as-result-item{border:none}li.as-result-item.active{background:#e5e5e5;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;color:#333;text-shadow:none}li.as-result-item em{background:0 0!important;color:#333!important;font-size:12px;padding:0!important}.fl-loop-builder-filter{display:none}.fl-builder-service-settings{position:relative}.fl-builder-service-error{color:red!important;padding:15px 0 0}.fl-builder-service-account-delete{color:red!important;margin-left:10px;position:relative;top:2px}#fl-field-visibility_user_capability .fl-field-description,.fl-builder-service-connect-row .fl-field-description{background:#f0f0f0;color:#333!important;display:block;float:none;margin:10px 0 0;padding:10px}#fl-field-visibility_user_capability .fl-field-description a,.fl-builder-service-connect-row .fl-field-description a{color:#21759b!important;text-decoration:underline!important}.fl-builder-getting-started-video{line-height:0!important;padding:10px}.fl-builder-getting-started-video iframe{border:none;height:326px;width:100%}.fl-builder-tour-actions .fl-builder-actions-title{font-size:14px!important;line-height:19px}.fl-builder-tour-mask{bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000000}.fl-builder-tour-dimmed{background:rgba(0,0,0,.7);bottom:0;left:0;position:absolute;right:0;top:0}body>.fl-builder-tour-dimmed{position:fixed}.tour-backdrop{z-index:110000}.popover[class*=tour-]{border:1px solid #ccc;border-radius:0;-webkit-box-shadow:0 0 30px rgba(0,0,0,.3);box-shadow:0 0 40px rgba(0,0,0,.3);color:#666;font-size:13px;font-weight:400;line-height:18px;max-width:none;padding:0;width:300px;z-index:100000001}.popover[class*=tour-].bottom>.arrow{border-bottom-color:#ccc}.popover[class*=tour-].bottom>.arrow:after{border-bottom-color:#f7f7f7}.popover[class*=tour-] .popover-title{border-radius:0;color:#333;letter-spacing:normal;text-transform:none}.popover[class*=tour-] .fa-times{color:#b3b3b3;cursor:pointer;font-size:16px;padding:5px;position:absolute;right:3px;top:2px}.popover[class*=tour-] .fa-times:hover{color:#666}.popover[class*=tour-] .popover-content{border-bottom:1px solid #d9d9d9;padding:13px 15px}.popover[class*=tour-] .fl-builder-tour-next{display:block;float:none;width:100%}.fl-builder-shortcode-mask-wrap{position:relative}.fl-builder-shortcode-mask{bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fl-color-picker-ui .iris-picker{width:200px;height:215px;display:block;position:relative;border-top:1px solid rgba(0,0,0,.1)}.fl-color-picker-ui .iris-picker .iris-square-inner,.fl-color-picker-ui .iris-picker-inner{position:absolute;left:0;top:0;bottom:0;right:0}.fl-color-picker-ui .iris-picker,.iris-picker *{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}.fl-color-picker-ui .iris-error{background-color:#ffafaf}.fl-color-picker-ui .iris-picker .iris-square{width:200px;height:200px}.fl-color-picker-ui .iris-picker .iris-palette,.fl-color-picker-ui .iris-picker .iris-slider,.fl-color-picker-ui .iris-picker .iris-square-inner{height:100%;width:12.5%}.fl-color-picker-ui .iris-picker .iris-placeholder,.fl-color-picker-ui .iris-picker .iris-square{position:relative}.fl-color-picker-ui .iris-picker .iris-square-inner{width:auto;margin:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square,.fl-color-picker-ui .iris-ie-9 .iris-square-inner{box-shadow:none;border-radius:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square{outline:rgba(0,0,0,.1) solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-palette,.fl-color-picker-ui .iris-ie-lt9 .iris-slider,.fl-color-picker-ui .iris-ie-lt9 .iris-square,.fl-color-picker-ui .iris-ie-lt9 .iris-square-inner{outline:#999 solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-square .ui-slider-handle{outline:#999 solid 1px;background-color:#fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.fl-color-picker-ui .iris-ie-lt9 .iris-square .iris-square-handle{background:0 0;border:3px solid #fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"}.fl-color-picker-ui .iris-picker .iris-strip{width:200px;margin-top:5px;position:relative;height:10px;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle{width:6px;position:absolute;right:0;top:-2px;bottom:-2px;margin:0;border-radius:3px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.5);z-index:5;cursor:ew-resize}.fl-color-picker-ui .iris-picker .iris-slider-offset{position:absolute;top:0;left:6px;right:0;bottom:0;width:auto;height:auto;background:0 0;border:none;border-radius:0;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-square-handle{background:0 0;border:5px solid #999;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.fl-color-picker-ui .iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover{border-color:#999}.fl-color-picker-ui .iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover::after{border-color:#fff}.fl-color-picker-ui .iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.fl-color-picker-clear,.fl-color-picker-color{float:left;border:1px solid rgba(0,0,0,.1);cursor:pointer}.fl-color-picker-ui .iris-picker .iris-square-value{width:8px;height:8px;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.fl-color-picker-wrapper{position:relative;width:48px;height:32px}.fl-color-picker-color{position:relative;width:30px;height:30px;background-color:transparent}.fl-color-picker-color.fl-color-picker-empty{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABG2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS4xLjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+MahxaQAAAAlwSFlzAAALEwAACxMBAJqcGAAACk9pQ0NQUGhvdG9zaG9wIElDQyBwcm9maWxlAAB42p1TZ1RT6RY99970QkuIgJRLb1IVCCBSQouAFJEmKiEJEEqIIaHZFVHBEUVFBBvIoIgDjo6AjBVRLAyKCtgH5CGijoOjiIrK++F7o2vWvPfmzf611z7nrPOds88HwAgMlkgzUTWADKlCHhHgg8fExuHkLkCBCiRwABAIs2Qhc/0jAQD4fjw8KyLAB74AAXjTCwgAwE2bwDAch/8P6kKZXAGAhAHAdJE4SwiAFABAeo5CpgBARgGAnZgmUwCgBABgy2Ni4wBQLQBgJ3/m0wCAnfiZewEAW5QhFQGgkQAgE2WIRABoOwCsz1aKRQBYMAAUZkvEOQDYLQAwSVdmSACwtwDAzhALsgAIDAAwUYiFKQAEewBgyCMjeACEmQAURvJXPPErrhDnKgAAeJmyPLkkOUWBWwgtcQdXVy4eKM5JFysUNmECYZpALsJ5mRkygTQP4PPMAACgkRUR4IPz/XjODq7OzjaOtg5fLeq/Bv8iYmLj/uXPq3BAAADhdH7R/iwvsxqAOwaAbf6iJe4EaF4LoHX3i2ayD0C1AKDp2lfzcPh+PDxFoZC52dnl5OTYSsRCW2HKV33+Z8JfwFf9bPl+PPz39eC+4iSBMl2BRwT44MLM9EylHM+SCYRi3OaPR/y3C//8HdMixEliuVgqFONREnGORJqM8zKlIolCkinFJdL/ZOLfLPsDPt81ALBqPgF7kS2oXWMD9ksnEFh0wOL3AADyu2/B1CgIA4Bog+HPd//vP/1HoCUAgGZJknEAAF5EJC5UyrM/xwgAAESggSqwQRv0wRgswAYcwQXcwQv8YDaEQiTEwkIQQgpkgBxyYCmsgkIohs2wHSpgL9RAHTTAUWiGk3AOLsJVuA49cA/6YQiewSi8gQkEQcgIE2Eh2ogBYopYI44IF5mF+CHBSAQSiyQgyYgUUSJLkTVIMVKKVCBVSB3yPXICOYdcRrqRO8gAMoL8hrxHMZSBslE91Ay1Q7moNxqERqIL0GR0MZqPFqCb0HK0Gj2MNqHn0KtoD9qPPkPHMMDoGAczxGwwLsbDQrE4LAmTY8uxIqwMq8YasFasA7uJ9WPPsXcEEoFFwAk2BHdCIGEeQUhYTFhO2EioIBwkNBHaCTcJA4RRwicik6hLtCa6EfnEGGIyMYdYSCwj1hKPEy8Qe4hDxDckEolDMie5kAJJsaRU0hLSRtJuUiPpLKmbNEgaI5PJ2mRrsgc5lCwgK8iF5J3kw+Qz5BvkIfJbCp1iQHGk+FPiKFLKakoZ5RDlNOUGZZgyQVWjmlLdqKFUETWPWkKtobZSr1GHqBM0dZo5zYMWSUulraKV0xpoF2j3aa/odLoR3ZUeTpfQV9LL6Ufol+gD9HcMDYYVg8eIZygZmxgHGGcZdxivmEymGdOLGcdUMDcx65jnmQ+Zb1VYKrYqfBWRygqVSpUmlRsqL1Spqqaq3qoLVfNVy1SPqV5Tfa5GVTNT46kJ1JarVaqdUOtTG1NnqTuoh6pnqG9UP6R+Wf2JBlnDTMNPQ6RRoLFf47zGIAtjGbN4LCFrDauGdYE1xCaxzdl8diq7mP0du4s9qqmhOUMzSjNXs1LzlGY/B+OYcficdE4J5yinl/N+it4U7yniKRumNEy5MWVca6qWl5ZYq0irUatH6702ru2nnaa9RbtZ+4EOQcdKJ1wnR2ePzgWd51PZU92nCqcWTT069a4uqmulG6G7RHe/bqfumJ6+XoCeTG+n3nm95/ocfS/9VP1t+qf1RwxYBrMMJAbbDM4YPMU1cW88HS/H2/FRQ13DQEOlYZVhl+GEkbnRPKPVRo1GD4xpxlzjJONtxm3GoyYGJiEmS03qTe6aUk25pimmO0w7TMfNzM2izdaZNZs9Mdcy55vnm9eb37dgWnhaLLaotrhlSbLkWqZZ7ra8boVaOVmlWFVaXbNGrZ2tJda7rbunEae5TpNOq57WZ8Ow8bbJtqm3GbDl2AbbrrZttn1hZ2IXZ7fFrsPuk72Tfbp9jf09Bw2H2Q6rHVodfnO0chQ6Vjrems6c7j99xfSW6S9nWM8Qz9gz47YTyynEaZ1Tm9NHZxdnuXOD84iLiUuCyy6XPi6bG8bdyL3kSnT1cV3hetL1nZuzm8LtqNuv7jbuae6H3J/MNJ8pnlkzc9DDyEPgUeXRPwuflTBr36x+T0NPgWe15yMvYy+RV63XsLeld6r3Ye8XPvY+cp/jPuM8N94y3llfzDfAt8i3y0/Db55fhd9DfyP/ZP96/9EAp4AlAWcDiYFBgVsC+/h6fCG/jj8622X2stntQYyguUEVQY+CrYLlwa0haMjskK0h9+eYzpHOaQ6FUH7o1tAHYeZhi8N+DCeFh4VXhj+OcIhYGtExlzV30dxDc99E+kSWRN6bZzFPOa8tSjUqPqouajzaN7o0uj/GLmZZzNVYnVhJbEscOS4qrjZubL7f/O3zh+Kd4gvjexeYL8hdcHmhzsL0hacWqS4SLDqWQEyITjiU8EEQKqgWjCXyE3cljgp5wh3CZyIv0TbRiNhDXCoeTvJIKk16kuyRvDV5JMUzpSzluYQnqZC8TA1M3Zs6nhaadiBtMj06vTGDkpGQcUKqIU2TtmfqZ+ZmdsusZYWy/sVui7cvHpUHyWuzkKwFWS0KtkKm6FRaKNcqB7JnZVdmv82JyjmWq54rze3Ms8rbkDec75//7RLCEuGStqWGS1ctHVjmvaxqObI8cXnbCuMVBSuGVgasPLiKtipt1U+r7VeXrn69JnpNa4FewcqCwbUBa+sLVQrlhX3r3NftXU9YL1nftWH6hp0bPhWJiq4U2xeXFX/YKNx45RuHb8q/mdyUtKmrxLlkz2bSZunm3i2eWw6Wqpfmlw5uDdnatA3fVrTt9fZF2y+XzSjbu4O2Q7mjvzy4vGWnyc7NOz9UpFT0VPpUNu7S3bVh1/hu0e4be7z2NOzV21u89/0+yb7bVQFVTdVm1WX7Sfuz9z+uiarp+Jb7bV2tTm1x7ccD0gP9ByMOtte51NUd0j1UUo/WK+tHDscfvv6d73ctDTYNVY2cxuIjcER55On3Cd/3Hg062naMe6zhB9Mfdh1nHS9qQprymkabU5r7W2Jbuk/MPtHW6t56/EfbHw+cNDxZeUrzVMlp2umC05Nn8s+MnZWdfX4u+dxg26K2e+djzt9qD2/vuhB04dJF/4vnO7w7zlzyuHTystvlE1e4V5qvOl9t6nTqPP6T00/Hu5y7mq65XGu57nq9tXtm9+kbnjfO3fS9efEW/9bVnjk93b3zem/3xff13xbdfnIn/c7Lu9l3J+6tvE+8X/RA7UHZQ92H1T9b/tzY79x/asB3oPPR3Ef3BoWDz/6R9Y8PQwWPmY/Lhg2G6544Pjk54j9y/en8p0PPZM8mnhf+ov7LrhcWL3741evXztGY0aGX8peTv218pf3qwOsZr9vGwsYevsl4MzFe9Fb77cF33Hcd76PfD0/kfCB/KP9o+bH1U9Cn+5MZk5P/BAOY8/xjMy3bAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAGbSURBVHjajNO/S1VxGMfx9+ebQ6FiImkOgatTDYlKXgfPgVAbHRpt6U/oH6jmHAPH2gOX2vx1URCaWoKGhhQ1hKsJLnqeT8sxTveeSz3bFx5ez/f58vkqyzL+pyQhiYhYsL0i6bIoiuf6B/AIENCUBPAUWAX6AGx/6wpIyoEPJTBhewxYk9Rz3RMRXYEeSevATHneB/qBgcqAi4hY6gAkYVvApKS3wP2aAYWk5Yh4rzzPKff7U7axfQP4LKkdOJb0zPZH23QAtpE0FBGbwLmkV7ZfV6AD29PAD6AWGLa9JSlJemj7l6THtj9VbnFuexHYbgcGbe+UjzgLHNq+DawBt4BeYBy4sj33FxARA8BeOblh+0jSsO0mcAk8sD0u6Q3w0vZGdYWhiGgCKaXUAH7aHikDFMAU0IqIzrzkeX6nsvOU7Zak0YjYklRImgZaZXBqgW3gXtl4aHsQ2AWSpAZwXEleJ5Bl2feU0rztr5WdQ9IMcFJt7naDL5JeAKcR8S6ldAVM2j5rD1g3YB24C9wEDiQ9AU7rPkgd8HsAv5vXzUui544AAAAASUVORK5CYII=) center center no-repeat}.fl-color-picker-clear{position:relative;display:block;width:17px;height:30px;border-left:none;background-color:#FAFAFA}.fl-color-picker-color.fl-color-picker-empty+.fl-color-picker-clear{display:none}.fl-color-picker-ui{display:inline-block;font-family:Helvetica,Verdana,sans-serif;z-index:999999;position:fixed;overflow:hidden;padding-bottom:45px;border:1px solid rgba(0,0,0,.1);color:#999;background-color:#FAFAFA;border-radius:3px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:opacity .2s,visibility .2s;-moz-transition:opacity .2s,visibility .2s;-ms-transition:opacity .2s,visibility .2s;-o-transition:opacity .2s,visibility .2s;transition:opacity .2s,visibility .2s;visibility:hidden;opacity:0;-webkit-transform:translate3d(0,0,0)}.fl-color-picker-ui.fl-color-picker-active{visibility:visible;opacity:1}.fl-color-picker-ui .fl-color-picker-input,.fl-color-picker-ui .fl-color-picker-input:focus{width:100%;height:30px;border:none!important;font-size:14px!important;padding:0 8px;vertical-align:middle;color:#999;background-color:#fff;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.fl-color-picker-ui .iris-square-value{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.fl-color-picker-preset-add{position:absolute;top:8px;right:8px;width:14px;height:14px;background-color:#999;border-radius:50%;cursor:pointer;-webkit-transition:all .2s;-moz-transition:all .2s;-ms-transition:all .2s;-o-transition:all .2s;transition:all .2s}.fl-color-picker-preset-add:hover{background-color:#333}.fl-color-picker-preset-add:after,.fl-color-picker-preset-add:before{content:'';display:block;position:relative;background-color:#fff}.fl-color-picker-preset-add:before{top:6px;left:3px;width:8px;height:2px}.fl-color-picker-preset-add:after{left:6px;top:1px;width:2px;height:8px}.fl-color-picker-presets{position:absolute;left:0;bottom:0;width:100%;z-index:15;overflow:auto;border-top:1px solid rgba(0,0,0,.1);background-color:#FAFAFA}.fl-color-picker-presets-list .fl-color-picker-preset:hover,.fl-color-picker-presets-toggle:hover{background-color:#EDEDED}.fl-color-picker-presets-toggle{position:relative;overflow:hidden;width:100%;height:35px;text-align:center;line-height:35px;font-size:12px;font-weight:700;cursor:pointer;-webkit-transition:all .1s;-moz-transition:all .1s;-ms-transition:all .1s;-o-transition:all .1s;transition:all .1s}.fl-color-picker-presets-close-label,.fl-color-picker-presets-open-label{position:absolute;top:50%;left:50%;visibility:hidden;color:#999;-webkit-transition:all .5s;-moz-transition:all .5s;-ms-transition:all .5s;-o-transition:all .5s;transition:all .5s;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);opacity:0}.fl-color-picker-presets-close-label.fl-color-picker-active,.fl-color-picker-presets-open-label.fl-color-picker-active{color:#999;visibility:visible;opacity:1}.fl-color-picker-presets-list{width:100%;list-style:none;margin:0;padding:0;overflow:auto}.fl-color-picker-presets-list .fl-color-picker-no-preset,.fl-color-picker-presets-list .fl-color-picker-preset{position:relative;padding:5px;font-size:12px;border-top:1px solid rgba(0,0,0,.1);-webkit-transition:all .1s;-moz-transition:all .1s;-ms-transition:all .1s;-o-transition:all .1s;transition:all .1s}.fl-color-picker-presets-list .fl-color-picker-preset-color{display:inline-block;width:20px;height:20px;margin-right:3px;vertical-align:middle;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-label{vertical-align:middle;color:#999}.fl-color-picker-clear .fl-color-picker-icon-remove,.fl-color-picker-presets-list .fl-color-picker-preset-remove{position:absolute;top:50%;cursor:pointer;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.fl-color-picker-clear .fl-color-picker-icon-remove{right:0}.fl-color-picker-presets-list .fl-color-picker-preset-remove{right:5px}.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:after,.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:before{background-color:#333}.fl-color-picker-added{position:absolute;width:100%;top:0;left:0;right:0;bottom:35px;z-index:10;color:#fff;text-align:center;background-color:rgba(0,0,0,.6)}.fl-color-picker-added-text{position:absolute;top:50%;left:50%;width:80%;font-size:14px;color:#fff!important;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.fl-color-picker-icon-check{position:relative;width:50px;height:50px;margin:5px auto}.fl-color-picker-icon-check:before{content:'';display:block;position:relative;width:15px;height:30px;margin-left:14px;border:7px solid #fff;border-left:none;border-top:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.fl-color-picker-icon-arrow-down,.fl-color-picker-icon-arrow-up{display:inline-block;position:relative;width:10px;height:10px;margin-left:5px}.fl-color-picker-icon-arrow-down:before,.fl-color-picker-icon-arrow-up:before{content:'';display:block;position:relative;width:6px;height:6px;border:2px solid #999;border-left:none;border-top:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.fl-color-picker-icon-arrow-up{top:2px;-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fl-color-picker-icon-remove{width:15px;height:15px}.fl-color-picker-icon-remove:after,.fl-color-picker-icon-remove:before{content:'';display:block;position:relative;background-color:#999}.fl-color-picker-icon-remove:before{left:6px;width:2px;height:10px;margin-top:3px;background:#999;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.fl-color-picker-icon-remove:after{left:6px;width:2px;height:10px;margin-top:-10px;background:#999;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.fl-icons-filter input,.fl-icons-filter select{vertical-align:middle;width:160px}.fl-icon-selector .fl-lightbox{height:100%}.fl-icons-filter{height:auto!important;margin:0!important;position:absolute!important;right:10px;top:10px}.fl-icons-filter input{line-height:18px}.fl-icons-list{bottom:52px;left:0;overflow:auto;padding:20px;position:absolute;right:0;top:48px}.fl-icons-list::-webkit-scrollbar{background-color:#ccc;-webkit-appearance:none;width:10px}.fl-icons-list::-webkit-scrollbar-thumb{background-color:#666;border:1px solid #ccc}.fl-icons-section{text-align:center}.fl-icons-section h2{border-bottom:1px solid #dfdfdf;color:#333!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:16px!important;font-weight:700!important;margin:0 0 20px!important;padding:0 0 10px!important;text-align:left}.fl-icons-list i,.fl-icons-list i:before{cursor:pointer;display:inline-block;font-size:32px;height:80px;line-height:80px;width:80px}.fl-icons-list i:hover{background:#e5e5e5}.fl-icon-selector-footer{bottom:0;left:0;position:absolute;right:0}.fl-lightbox-mask,.fl-lightbox-wrap{bottom:0;left:0;position:fixed;right:0;top:0}.fl-lightbox-wrap{display:none;overflow:auto;padding:30px;z-index:100010;-webkit-transform:translateZ(0)}.fl-lightbox-wrap.fl-icon-selector{z-index:100011}.fl-lightbox-mask{background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100010}.fl-lightbox{background:#fff;box-shadow:rgba(0,0,0,1) 0 4px 30px;-moz-box-shadow:rgba(0,0,0,1) 0 4px 30px;-webkit-box-shadow:rgba(0,0,0,1) 0 4px 30px;position:relative;z-index:100011}.fl-lightbox :not(i){color:#333;font-family:Helvetica,Verdana,sans-serif;font-size:12px;line-height:16px;text-decoration:none;text-transform:none}.fl-lightbox *,.fl-lightbox :after,.fl-lightbox :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fl-lightbox .fl-nanoscroller-pane{bottom:4px;right:4px;width:8px}.fl-lightbox .fa{font-family:FontAwesome}.fl-lightbox-content-wrap{height:100%}.fl-lightbox.ui-draggable{box-shadow:rgba(0,0,0,.5) 0 4px 30px;-moz-box-shadow:rgba(0,0,0,.5) 0 4px 30px;-webkit-box-shadow:rgba(0,0,0,.5) 0 4px 30px}.fl-lightbox-controls{position:absolute;right:10px;top:10px;z-index:5}.fl-lightbox-controls .fa{color:#999;font-size:18px;padding:5px}.fl-lightbox-controls .fa:hover{color:#333;cursor:pointer}.fl-builder-lightbox .fl-lightbox-expanded{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox.ui-draggable.fl-lightbox-expanded .fl-lightbox-header{cursor:inherit}.fl-builder-lightbox .fl-lightbox-expanded .fl-builder-settings-tab{width:100%!important}.fl-lightbox-header{background:#fff;border-bottom:1px solid #dfdfdf;box-shadow:0 4px 4px -4px rgba(0,0,0,.1);-moz-box-shadow:0 4px 4px -4px rgba(0,0,0,.1);-webkit-box-shadow:0 4px 4px -4px rgba(0,0,0,.1);position:relative}.fl-lightbox-header h1{color:#333!important;font-size:18px!important;font-family:Helvetica,Verdana,sans-serif!important;font-weight:300!important;margin:0!important;padding:15px 20px!important}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:move}.fl-lightbox-footer{border-top:1px solid #dfdfdf;box-shadow:0 -4px 4px -4px rgba(0,0,0,.1);-moz-box-shadow:0 -4px 4px -4px rgba(0,0,0,.1);-webkit-box-shadow:0 -4px 4px -4px rgba(0,0,0,.1);padding:10px;text-align:right}.fl-lightbox-footer .fl-builder-button{margin-left:5px!important}
1
+ .fl-builder-edit #wpadminbar,.fl-builder-hidden-editor{display:none}html.fl-builder-edit{margin-top:43px!important}.fl-builder-edit body{position:static!important}.fl-clear{clear:both}.fl-builder-loading{background:url(../img/ajax-loader.gif) center center no-repeat rgba(240,240,240,.8);bottom:0;display:none;left:0;position:fixed;right:0;text-align:center;top:0;z-index:200000}.fl-builder-settings .fl-builder-loading{background:url(../img/ajax-loader.gif) center center no-repeat rgba(255,255,255,.8);display:block;position:absolute}.screen-reader-text{position:absolute;left:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}.fl-visible-desktop,.fl-visible-desktop-medium,.fl-visible-medium,.fl-visible-medium-mobile,.fl-visible-mobile{display:block!important}.fl-responsive-preview-mask{background:#F7F7F7;bottom:0;left:0;position:fixed;right:0;top:0;z-index:99999}.fl-responsive-preview{bottom:0;left:0;position:absolute;right:0;top:43px;z-index:100000}.fl-responsive-preview-content{background:#F7F7F7;padding:20px}.fl-responsive-preview-message{color:#b3b3b3;font-family:Helvetica,Arial,Verdana,sans-serif;font-size:14px;font-weight:400;padding:0 20px 20px;text-align:center}.fl-responsive-preview-message i{cursor:pointer;margin-left:3px}.fl-responsive-preview .fl-builder-content{box-shadow:0 0 8px rgba(0,0,0,.2);margin-left:auto;margin-right:auto;max-width:100%}.fl-builder-button{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top;display:inline-block;text-decoration:none;font-size:13px!important;line-height:13px!important;height:28px;margin:0;padding:7px 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-border-radius:3px;-webkit-appearance:none;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.fl-builder-button:hover{background:#fafafa;border-color:#999;color:#222}.fl-builder-button-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff!important;text-decoration:none}.fl-builder-button-primary:hover{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff!important}.fl-builder-bar-content,.fl-builder-panel{box-shadow:0 0 8px rgba(0,0,0,.2);font-family:Helvetica,Arial,Verdana,sans-serif}.fl-builder-button-large{height:30px;line-height:30px!important;padding:0 12px 2px}.fl-builder-button-small{font-size:11px!important;line-height:11px!important;height:24px}.fl-builder-help-button{color:#b3b3b3;font-size:16px!important}.fl-builder-help-button i{position:relative;top:-1px}.fl-builder-help-button:hover{color:#666}.fl-builder-publish-button{height:45px;line-height:45px!important}.fl-builder-badge{background:#333;border-radius:2px;color:#fff!important;display:inline;font-size:11px!important;font-weight:400;letter-spacing:1px;margin-left:2px;padding:2px 4px;vertical-align:top}.fl-builder-badge-global{background:#ff9600}.fl-builder-bar{left:0;position:fixed;right:0;top:0;z-index:100008}.fl-builder-bar-content{background:#f4f4f4;border-bottom:1px solid #ccc;-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);color:#999;font-size:14px;height:43px}.fl-builder-bar-title{color:#333;display:block;float:left;font-size:20px;font-weight:300;line-height:20px;padding:7px 10px}.fl-builder-bar-title img{display:inline-block!important;height:30px!important;margin:0 1px 0 0!important;vertical-align:middle!important}.fl-builder-bar-title span{vertical-align:middle}.fl-builder-bar-title.fl-builder-bar-title-no-icon{padding:12px}.fl-builder-bar-actions{float:right;padding:7px}.fl-builder-bar .fl-builder-button{float:right;margin:0 0 0 6px}.fl-builder-bar .fl-builder-add-content-button{display:none}.fl-builder-buy-button,.fl-builder-upgrade-button{background:#f7951e;border-color:#de7c04;-webkit-box-shadow:inset 0 1px 0 rgba(255,177,82,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(255,177,82,.5),0 1px 0 rgba(0,0,0,.15);color:#fff!important;text-decoration:none}.fl-builder-buy-button i.fa-external-link-square,.fl-builder-upgrade-button i.fa-external-link-square{color:#f4d1a7;margin:0 0 0 6px}.fl-builder-buy-button:hover,.fl-builder-upgrade-button:hover{background:#de861b;border-color:#c46e04;-webkit-box-shadow:inset 0 1px 0 rgba(255,177,82,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(255,177,82,.5),0 1px 0 rgba(0,0,0,.15);color:#fff!important}@media (max-width:768px){.fl-builder-bar-title span{display:none}}@media (max-width:420px){.fl-builder-bar-title,.fl-builder-help-button{display:none}}.fl-builder-panel{background:#f0f0f0;border-left:1px solid #ccc;bottom:0;-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);color:#999;font-size:14px;opacity:1;position:fixed;right:0;top:43px;width:300px;z-index:100007;-webkit-transform:translateZ(0);transition:opacity .2s;-webkit-transition:opacity .2s;-moz-transition:opacity .2s;-o-transition:opacity .2s;-ms-transition:opacity .2s;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder-panel-actions{background:#f4f4f4;border-bottom:1px solid #dbdbdb;height:43px;left:0;position:absolute;right:0;top:0;text-align:right;z-index:100009}.fl-builder-panel-actions .fl-builder-panel-close{color:#bfbfbf;cursor:pointer;float:left;font-size:18px;margin:12px 18px}.fl-builder-panel-actions .fl-builder-panel-close:hover{color:#333}.fl-builder-panel-content-wrap{bottom:0;height:auto;left:0;overflow:hidden;position:absolute;right:0;top:43px}.fl-builder-panel-content{padding-bottom:60px}.fl-builder-blocks-section .fl-builder-block,.fl-builder-blocks-section .fl-builder-blocks-section-title{cursor:pointer;display:block;line-height:14px;padding:15px 20px}.fl-builder-blocks-section .fl-builder-blocks-section-title{border-bottom:1px solid #dfdfdf;color:#333;font-weight:400}.fl-builder-blocks-section .fl-builder-blocks-section-title i{color:#bfbfbf;float:right}.fl-builder-blocks-section .fl-builder-blocks-section-title:hover,.fl-builder-blocks-section .fl-builder-blocks-section-title:hover i{background:#e5e5e5}.fl-builder-blocks-section-content{background:#fff;display:none}.fl-builder-blocks-section.fl-active .fl-builder-blocks-section-content{display:block}.fl-builder-blocks-section-content .fl-builder-block{border-bottom:1px solid #ebebeb;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fl-builder-blocks-section-content .fl-builder-block i{color:#d9d9d9;margin-right:10px}.fl-builder-blocks-section-content .fl-builder-block:hover{background:#0074a1;color:#fff;cursor:move}.fl-builder-blocks-separator{background:#dfdfdf;height:6px}.fl-builder-block:hover .fl-builder-badge{background:#2ea2cc}.ui-sortable-helper .fl-builder-badge{display:none!important}.fl-builder-modules-cta a{color:#999!important;display:block!important;font-size:12px!important;font-style:italic!important;padding:15px 20px!important;line-height:16px!important}.fl-builder-modules-cta a:hover{background:#e5e5e5!important;color:#666!important;text-decoration:none!important}.fl-builder-modules-cta a:focus{text-decoration:none!important}.fl-builder-modules-cta .fa{float:right!important;font-size:14px!important;margin:3px 0 0 9px!important}.fl-builder-block-template-image{margin:5px 0 10px;max-width:100%}.fl-builder-block-template .fl-builder-block-title{display:block;overflow:hidden;text-overflow:ellipsis}.ui-sortable-helper .fl-builder-block-template-image{display:none!important}span.fl-builder-block-no-node-templates{display:block;padding:15px 20px}span.fl-builder-block-no-node-templates:hover{cursor:default;background:#fff}.fl-builder-blocks-node-template .fl-builder-block{position:relative}.fl-builder-blocks-section-content .fl-builder-node-template-actions{bottom:0;cursor:default;display:none;position:absolute;right:0;top:0;width:72px}.fl-builder-blocks-section-content .fl-builder-node-template-delete,.fl-builder-blocks-section-content .fl-builder-node-template-edit{bottom:0;cursor:pointer;margin:0;padding:15px 0;position:absolute;text-align:center;top:0;width:30px}.fl-builder-blocks-section-content .fl-builder-node-template-delete{right:12px}.fl-builder-blocks-section-content .fl-builder-node-template-edit{right:42px}.fl-builder-blocks-section-content .fl-builder-node-template-delete i,.fl-builder-blocks-section-content .fl-builder-node-template-edit i{margin:0}.fl-builder-drop-zone,.fl-builder-empty{font-family:Helvetica,Verdana,sans-serif!important;margin:10px}.fl-builder-blocks-section-content .fl-builder-node-template-delete:hover i,.fl-builder-blocks-section-content .fl-builder-node-template-edit:hover i{color:#fff}.fl-builder-blocks-node-template .fl-builder-block:hover{padding-right:85px}.fl-builder-blocks-node-template .fl-builder-block:hover .fl-builder-node-template-actions{display:block}.ui-sortable-helper .fl-builder-node-template-delete,.ui-sortable-helper .fl-builder-node-template-edit{display:none!important}.fl-builder-dragging .fl-builder-content:not(.fl-builder-empty){padding:16px 0}.fl-builder-empty{border:1px dashed #3ba0ff;color:#3ba0ff;font-size:14px;padding:100px 20px;position:relative;text-align:center;text-transform:uppercase}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging{background:rgba(255,255,255,.85)!important;border:1px solid #ccc;box-shadow:0 0 8px rgba(0,0,0,.2);-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);color:#999!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:13px!important;height:40px!important;line-height:40px!important;overflow:hidden;padding:0 15px;position:fixed!important;text-overflow:ellipsis;white-space:nowrap;width:120px!important;z-index:100010!important}.fl-col-has-highlight-guide .fl-col-content,.fl-col-highlight,.fl-row-highlight .fl-col-group{position:relative}.fl-builder-drop-zone{animation:fl-builder-drop-zone-pulse 3s infinite;background:#3ba0ff;color:#fff!important;display:block;font-weight:400;font-size:12px;letter-spacing:1px;line-height:14px;padding:6px 8px 5px;position:relative;text-align:left;text-overflow:ellipsis;text-shadow:none;text-transform:none;white-space:nowrap;overflow:hidden;z-index:10}@keyframes fl-builder-drop-zone-pulse{0%,100%{background-color:#7ABFFF}50%{background-color:#3ba0ff}}.fl-builder-drop-zone-global{animation:fl-builder-drop-zone-global-pulse 3s infinite;background:#ff9600}@keyframes fl-builder-drop-zone-global-pulse{0%,100%{background-color:#FFBC5C}50%{background-color:#ff9600}}.fl-builder-content>.fl-builder-drop-zone{margin:10px 20px}.fl-row-content>.fl-builder-drop-zone{margin:3px 7px}.fl-col-has-cols>.fl-col-content>.fl-builder-drop-zone{margin:3px 10px}.fl-sortable-disabled>.fl-builder-drop-zone{display:none!important}.fl-col-group-equal-height.fl-col-group-align-center .fl-col-content>.fl-builder-drop-zone{width:100%}.fl-row-highlight{padding:16px 0}.fl-row-highlight .fl-row-content{border:1px dashed #3ba0ff;padding:8px}.fl-row-highlight.fl-node-global .fl-row-content{border-color:#ff9600}.fl-col-highlight{padding:8px}.fl-col-highlight .fl-col-content{border-style:dashed!important;border-color:#3ba0ff!important;min-height:100px;overflow-x:hidden;width:100%;border-width:1px!important}.fl-col-has-cols.fl-col-highlight>.fl-col-content{padding:8px}.fl-col-highlight.fl-node-global .fl-col-content{border-color:#ff9600!important}.fl-builder-simple .fl-col-highlight .fl-col-content{border:none!important}.fl-col-highlight-guide{background:rgba(59,160,255,.15);border:1px solid #3ba0ff;bottom:4px;left:4px;position:absolute;right:4px;top:4px;z-index:1}.fl-col-has-highlight-guide .fl-block-overlay{background:0 0;border-color:transparent}.fl-col-has-highlight-guide .fl-block-col-resize{display:none}.fl-col-has-highlight-guide .fl-col-highlight .fl-col-content{border-color:transparent!important}.fl-col-drop-target{bottom:8px;display:none;left:-9px;position:absolute;top:8px;width:18px;z-index:1}.fl-col-highlight .fl-col-drop-target{display:block}.fl-col-drop-target-last{left:auto;right:-9px}.fl-col-drop-target .fl-builder-drop-zone{bottom:0;left:2px;margin:0;padding:0;position:absolute;right:2px;top:0}.fl-col-group-drop-target{display:none;left:8px;height:18px;position:absolute;right:8px;top:-9px;z-index:1}.fl-row-highlight .fl-col-group-drop-target{display:block}.fl-col-group-drop-target-last{top:auto;bottom:-9px}.fl-col-group-drop-target .fl-builder-drop-zone{bottom:2px;left:0;margin:0;padding:0;position:absolute;right:0;top:2px}.fl-row-content>.fl-col-group-drop-target{position:static}.fl-row-content>.fl-col-group-drop-target .fl-builder-drop-zone{height:18px;position:static}.fl-row-drop-target{display:none;left:0;height:24px;margin-top:-28px;position:absolute;right:0;z-index:1}.fl-row-highlight .fl-row-drop-target{display:block}.fl-row-drop-target-last{margin-top:4px}.fl-row .fl-row-drop-target .fl-builder-drop-zone{bottom:0;left:4px;margin:0;position:absolute;right:4px;top:0}.fl-builder-content>.fl-row-drop-target{margin:0;position:static}.fl-builder-dragging .fl-builder-content.fl-builder-empty>.fl-row-drop-target{bottom:10px;display:block;height:auto;left:0;position:absolute;right:0;top:10px}.fl-builder-content .fl-row-drop-target .fl-builder-drop-zone{margin-bottom:0;margin-top:0}.fl-sortable-proxy{display:none}.fl-block-overlay,.fl-block-overlay *{text-shadow:none}.fl-block-overlay-active{position:relative}.fl-block-overlay-actions{background:#3ba0ff;float:left;height:28px;margin:-1px -1px 0;text-shadow:none}.fl-builder-col-resizing .fl-block-overlay-actions{overflow:hidden}.fl-block-overlay-actions>span{display:block;float:left}.fl-block-overlay-actions i{color:#fff!important;cursor:pointer;display:block!important;float:left;font-size:14px!important;height:28px!important;font-weight:100!important;line-height:28px!important;opacity:.8;filter:alpha(opacity=80);text-align:center;width:28px!important}.fl-block-overlay-actions i:hover{opacity:1;filter:alpha(opacity=100)}.fl-block-overlay-actions>i:first-child{padding-left:4px}.fl-block-overlay-actions>i:last-child{padding-right:2px}.fl-block-overlay-actions .fl-block-move{cursor:move}.fl-block-overlay-title{border-right:1px solid #5eb1ff;color:#fff!important;float:left;font-family:Helvetica,Arial,Verdana,sans-serif;font-size:13px;height:30px;line-height:29px;margin-right:2px;padding:0 8px}.fl-col-overlay,.fl-module-overlay,.fl-row-overlay{background:rgba(59,160,255,.15);border:1px solid #3ba0ff;color:#fff}.fl-row-overlay{bottom:0;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;left:0;position:absolute;top:-30px;width:100%;z-index:100006}.fl-row-overlay-header-bottom{bottom:-30px;top:0}.fl-row-overlay-header-bottom .fl-block-overlay-header{position:absolute;bottom:0}.fl-block-overlay-active .fl-row-content-wrap{position:relative}.fl-block-overlay-active .fl-row-content{position:relative;z-index:100007!important}.fl-col-overlay{bottom:8px;cursor:pointer;left:8px;position:absolute;right:8px;top:8px;z-index:100007}.fl-module-overlay{bottom:4px;cursor:pointer;left:4px;min-height:32px;position:absolute;right:4px;top:4px;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-module-overlay{cursor:default}.fl-module-adjust-height{padding-bottom:15px;padding-top:15px}.fl-block-overlay-global{background:rgba(255,150,0,.1);border:1px solid #ff9600}.fl-block-overlay-global .fl-block-overlay-actions{background:#ff9600}.fl-block-overlay-global .fl-block-overlay-title{border-right:1px solid #ffcf66}.fl-block-overlay-title-global{background:#fff;border-radius:2px;color:#ff9600!important;font-size:11px;letter-spacing:1px;margin-left:4px;padding:2px 4px;vertical-align:top}.fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,.3);cursor:pointer;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-row-overlay{cursor:default}.fl-builder-row-template .fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,.1);cursor:default;z-index:100006}.fl-block-overlay-muted .fl-row-overlay{background:rgba(153,153,153,.1);border:1px solid #8c8c8c}.fl-block-overlay-muted .fl-row-overlay .fl-block-overlay-actions{background:#8c8c8c}.fl-block-overlay-muted .fl-row-overlay .fl-block-overlay-title{border-right:1px solid #a6a6a6}.fl-node-disabled .fl-row-content-wrap{opacity:.3}.fl-block-col-resize{bottom:0!important;position:absolute;top:0!important;width:6px}.fl-block-col-resize-e{cursor:ew-resize;left:auto!important;right:-4px!important}.fl-block-col-resize-w{cursor:ew-resize;left:-4px!important}.fl-block-col-resize-handle-wrap{margin:-4px 0 0 -5px;padding:0 5px;position:absolute;top:50%!important}.fl-block-col-resize-e .fl-block-col-resize-handle-wrap{margin-left:-6px}.fl-block-col-resize-handle{background:#fff;border:1px solid #259aff;height:7px;width:7px}.fl-node-global .fl-block-col-resize-handle{border-color:#ff9600}.fl-block-col-resize-feedback{color:#333!important;display:none;font-family:Helvetica,Verdana,sans-serif!important;font-size:11px!important;position:absolute}.fl-block-col-resize-feedback-left,.fl-block-col-resize-feedback-right{background:#fff;border:1px solid #3ba0ff;padding:2px 4px}.fl-block-col-resize-feedback-left{right:20px;top:-7px}.fl-block-col-resize-feedback-right{left:20px;top:-7px}.fl-builder-has-submenu{position:relative}.fl-builder-has-submenu>ul.fl-builder-submenu{background:#3ba0ff;box-shadow:0 0 20px rgba(0,0,0,.2);display:none;left:0;list-style:none;margin:0;padding:6px 0;position:absolute;text-align:left;top:100%;width:155px;z-index:100008}.fl-builder-has-submenu>ul.fl-builder-submenu li{list-style:none;margin:0;padding:0}.fl-builder-submenu-right ul.fl-builder-submenu{left:auto;right:0}.fl-builder-submenu-open ul.fl-builder-submenu{display:block}.fl-builder-has-submenu>ul.fl-builder-submenu li a{border-bottom:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#fff!important;display:block;line-height:13px;font-size:13px;font-family:Helvetica,Arial,Verdana,sans-serif;font-weight:400;opacity:.8;filter:alpha(opacity=80);overflow:hidden;padding:6px 12px;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.fl-builder-has-submenu>ul.fl-builder-submenu li a:hover{background:#54acff;color:#fff;opacity:1;filter:alpha(opacity=100);text-decoration:none}.fl-builder-actions-title,.fl-builder-alert-lightbox .fl-lightbox-message{color:#333!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:16px!important}.fl-builder-has-submenu .fl-builder-submenu .fa{float:right;height:12px!important;line-height:12px!important;position:relative;right:-5px;width:14px!important}.fl-builder-has-submenu .fl-builder-has-submenu .fl-builder-submenu{display:none;left:100%;top:0}.fl-builder-has-submenu .fl-builder-submenu-right.fl-builder-has-submenu .fl-builder-submenu{left:auto;right:100%}.fl-builder-has-submenu .fl-builder-has-submenu:hover .fl-builder-submenu{display:block}.fl-builder-submenu-sep{padding:7px 0!important}.fl-builder-submenu-sep div{border-bottom:1px solid rgba(255,255,255,.4)}.fl-block-col-move,.fl-block-col-move-parent{cursor:move;position:relative}.fl-builder-submenu .fa-arrows{cursor:move;display:none!important}.fl-builder-submenu a:hover .fa-arrows{display:block!important}.fl-block-overlay-global ul.fl-builder-submenu{background:#ff9600!important}.fl-block-overlay-global ul.fl-builder-submenu li a:hover{background:#fa3}.fl-builder-actions-lightbox .fl-lightbox{width:300px}.fl-builder-actions-lightbox .fl-builder-actions{display:block;padding:25px;text-align:center}.fl-builder-actions-title{display:block;margin-bottom:20px}.fl-builder-actions .fl-builder-button{display:block;margin-bottom:7px}.fl-builder-alert-lightbox{z-index:200001}.fl-builder-alert-lightbox .fl-lightbox{width:440px!important}.fl-builder-alert-lightbox .fl-lightbox-message{line-height:24px;padding:30px}.fl-template-category-select{width:180px!important}.fl-template-selector .fl-builder-settings-section{margin:0 0 10px}.fl-template-selector .fl-builder-settings-fields{height:470px}.fl-template-selector .fl-builder-settings-tab{width:560px}.fl-template-selector .fl-builder-settings-tab-description{font-size:15px!important;margin:0!important;padding:10px 0 25px;text-align:center}.fl-template-preview{float:left;margin:0 25px 30px 0;position:relative;text-align:center;width:170px}.fl-template-preview.fl-last{margin-right:0}.fl-template-image{border:1px solid #d9d9d9;cursor:pointer;margin-bottom:12px;height:164px;overflow:hidden}.fl-builder-templates-cta,.fl-user-templates{margin-bottom:20px}.fl-template-image:hover{border-color:red}.fl-template-image img{max-height:none;width:100%}.fl-template-preview span{display:block;text-align:center}.fl-user-template-category-name{background:#f2f2f2;border-bottom:3px solid #dfdfdf;border-top:2px solid #dfdfdf;font-weight:700;padding:8px 15px}.fl-user-templates{border-top:1px solid #dfdfdf;margin-right:8px}.fl-user-template{border-bottom:1px solid #dfdfdf;padding:15px;position:relative}.fl-user-template:hover{background:#0074a1;color:#fff!important;cursor:pointer}.fl-user-template:hover *{color:#fff!important}.fl-user-template-actions{bottom:0;position:absolute;right:0;top:0}.fl-user-template-actions a{color:#bfbfbf!important;display:inline-block;padding:15px}.fl-user-template:hover a{color:#99c7d9!important}.fl-user-template:hover a:hover{color:#fff!important}.fl-user-templates-message{display:none}.fl-builder-templates-cta p{display:inline-block!important;width:75%!important;font-size:14px!important;line-height:1.5!important;margin-bottom:0!important}.fl-builder-templates-cta .fl-builder-upgrade-button{font-size:13px!important;line-height:13px!important;position:relative;top:8px;left:15px;padding:1px 12px}.fl-builder-settings-message,.fl-builder-settings-message *{font-size:15px!important;line-height:23px!important}.fl-builder-node-template-settings .fl-builder-settings-fields,.fl-builder-user-template-settings .fl-builder-settings-fields{height:150px}.fl-builder-lightbox .fl-lightbox{width:600px}form.fl-builder-settings{margin:0;padding:0}.fl-builder-settings-message{padding:20px 25px!important;background:#f2f2f2!important}.fl-builder-preview-loader{position:relative;top:-1px;margin-left:3px}.fl-lightbox-header .fl-builder-preview-loader{margin:0;position:absolute;right:40px;top:15px}.fl-builder-settings-tabs{background:#f5f5f5;border-bottom:1px solid #dfdfdf;padding:15px 20px 0}.fl-builder-settings-tabs a{color:#999!important;display:inline-block;margin:0;outline:0;padding:10px 20px;text-decoration:none!important}.fl-builder-settings-tabs a:hover{color:#333}.fl-builder-settings-tabs a:focus{outline:0}.fl-builder-settings-tabs a.fl-active{background:#fff;border:1px solid #dfdfdf;border-bottom:none;color:#333!important;position:relative;top:1px}.fl-builder-settings-tabs a.error{color:#d03436;padding-right:10px}.fl-builder-settings-tabs a.error .fl-error-icon{background:url(../img/sprite.png) -148px -5px no-repeat;display:inline-block;height:16px;margin-left:7px;position:relative;top:3px;width:16px}.fl-builder-settings-tab{display:none;width:550px}.fl-builder-settings-tab.fl-active{display:block}.fl-builder-settings-tab-description{background:#f5f5f5;padding:10px 15px}.fl-form-table{background:none;border:none;width:100%}.fl-form-table tbody{border:none}.fl-form-table td,.fl-form-table th{border:none!important;font-weight:400!important;text-align:left!important}.fl-form-table tr,.fl-form-table tr:nth-child(even){background:0 0}.fl-form-table th{background:#fff!important;padding:10px!important;vertical-align:top!important;width:200px!important}.fl-form-table th label{color:#333}.fl-form-table td{background:#fff!important;padding:8px 10px;width:auto!important}.fl-builder-settings-fields{height:410px;margin:5px 0 0;overflow:hidden;position:relative}.fl-lightbox-header .fl-builder-settings-fields{height:auto;margin:0;position:absolute;right:10px;top:10px}.fl-builder-settings-fields .fl-nanoscroller-content{padding:15px 20px}.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select,.fl-builder-settings-fields textarea{background:#fff!important;border-color:#dfdfdf!important;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333!important;display:inline;font-size:12px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px;width:auto}.fl-builder-settings-fields input[type=number]{width:50px}.fl-builder-settings-fields input[type=email]:focus,.fl-builder-settings-fields input[type=file]:focus,.fl-builder-settings-fields input[type=number]:focus,.fl-builder-settings-fields input[type=password]:focus,.fl-builder-settings-fields input[type=search]:focus,.fl-builder-settings-fields input[type=tel]:focus,.fl-builder-settings-fields input[type=text]:focus,.fl-builder-settings-fields input[type=url]:focus,.fl-builder-settings-fields select:focus,.fl-builder-settings-fields textarea:focus{background:0 0;border-color:#dfdfdf}.fl-builder-settings-fields select[multiple]{height:60px}.fl-builder-settings-fields ::-webkit-input-placeholder{color:#999!important;font-size:12px}.fl-builder-settings-fields input:-moz-placeholder{color:#999;font-size:12px}.fl-builder-settings-fields ::-moz-placeholder{color:#999!important;font-size:12px}.fl-builder-settings-fields input:-ms-input-placeholder{color:#999;font-size:12px}.fl-builder-settings-fields label{font-weight:400}.fl-builder-settings-fields select{height:2em;color:#000;padding:2px}.fl-builder-settings-description{padding:0 10px 10px;margin:0;font-style:italic;opacity:.75}.fl-builder-settings-fields table{margin:0}.fl-builder-settings-fields h3.fl-builder-settings-title{border-bottom:1px solid #dfdfdf;color:#333;font-size:14px;font-weight:700;margin:0 0 20px!important;padding:10px}.fl-builder-settings-section{margin-bottom:15px}.wp-core-ui h1,.wp-core-ui h2,.wp-core-ui h3,.wp-core-ui h4,.wp-core-ui h5,.wp-core-ui h6{color:#333}.wp-core-ui .submitbox .submitdelete{color:#a00}.wp-core-ui button{font-weight:400;text-transform:capitalize}.wp-core-ui input[type=email],.wp-core-ui input[type=file],.wp-core-ui input[type=number],.wp-core-ui input[type=password],.wp-core-ui input[type=search],.wp-core-ui input[type=tel],.wp-core-ui input[type=text],.wp-core-ui input[type=url],.wp-core-ui select,.wp-core-ui textarea{background-color:#fff;border-color:#dfdfdf;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333;font-weight:400}.wp-core-ui input[type=email]:focus,.wp-core-ui input[type=file]:focus,.wp-core-ui input[type=number]:focus,.wp-core-ui input[type=password]:focus,.wp-core-ui input[type=search]:focus,.wp-core-ui input[type=tel]:focus,.wp-core-ui input[type=text]:focus,.wp-core-ui input[type=url]:focus,.wp-core-ui select:focus,.wp-core-ui textarea:focus{background:0 0;border-color:#aaa}.wp-core-ui input[type=search]{background-image:none;padding:6px}.fl-field-responsive-setting{display:inline-block}.fl-field-responsive-setting-medium,.fl-field-responsive-setting-responsive{display:none}i.fl-field-responsive-toggle{color:grey;cursor:pointer;display:inline-block;font-size:15px!important;height:auto;line-height:15px!important;text-align:left;vertical-align:middle;width:20px}i.fl-field-responsive-toggle:hover{color:#000}.fl-builder-settings-fields input.text-full,.fl-builder-settings-fields textarea{width:97%}.fl-color-picker{cursor:pointer}.fl-color-picker .fl-color-picker-clear:hover{background-color:#ededed}.colorpicker input{padding:0!important;font-size:11px!important;color:#fff!important;width:29px!important;height:auto!important;background:0 0!important;border:none!important}.colorpicker .colorpicker_hex input{width:45px!important}.fl-builder-custom-field{border:1px solid #dfdfdf;border-radius:3px;padding:5px 10px}.fl-builder-custom-field a{color:#21759b!important;text-decoration:underline!important}.fl-builder-custom-field a:hover{color:#d54e21!important}.fl-builder-custom-field label.error{margin-top:5px}.fl-photo-field .fl-photo-select,.fl-photo-field.fl-photo-empty .fl-photo-preview{display:none}.fl-photo-field.fl-photo-empty .fl-photo-select{display:block}.fl-photo-field .fl-photo-preview-img{float:left;line-height:0;margin:5px 0}.fl-photo-field .fl-photo-preview-img img{max-width:60px}.fl-photo-field .fl-photo-preview select{margin:8px 0 8px 10px;width:200px}.fl-photo-field .fl-photo-edit{margin:0 0 0 11px}.fl-multiple-photos-field .fl-multiple-photos-add,.fl-photo-field .fl-photo-remove,.fl-photo-field .fl-photo-replace{margin:0 0 0 8px}.fl-builder-edit .media-frame{-webkit-backface-visibility:hidden}.fl-builder-edit .media-modal-content .thumbnail{padding:0;border:none;border-radius:0}.fl-builder-edit button.button-link.media-modal-close{position:absolute;box-shadow:none;-webkit-box-shadow:none}.fl-builder-edit .media-frame.hide-menu{visibility:visible}.fl-multiple-photos-field .fl-multiple-photos-select,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-add,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-count,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-edit,.fl-multiple-photos-lightbox .gallery-settings{display:none}.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-select{display:inline}.fl-multiple-photos-count{font-weight:700;margin-bottom:3px}.fl-video-field .fl-video-select,.fl-video-field.fl-video-empty .fl-video-preview{display:none}.fl-video-field.fl-video-empty .fl-video-select{display:block}.fl-video-field .fl-video-preview-img{float:left;line-height:0;margin:5px 0}.fl-video-field .fl-video-preview-img img{max-width:60px}.fl-video-field .fl-video-preview-filename{display:inline-block;font-size:14px;font-weight:700;margin:7px 0 0 11px}.fl-video-field .fl-video-replace{margin:0 0 0 11px}.fl-multiple-audios-field .fl-multiple-audios-select,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-add,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-edit{display:none}.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-select{display:block}.fl-multiple-audios-field .fl-multiple-audios-add{margin:0 0 0 8px}.fl-icon-field .fl-icon-select,.fl-icon-field.fl-icon-empty .fl-icon-preview{display:none}.fl-icon-field.fl-icon-empty .fl-icon-select{display:block}.fl-icon-field .fl-icon-preview i{display:inline-block;font-size:28px;margin:10px 10px 9px 2px;vertical-align:middle}.fl-icon-field .fl-icon-remove{margin:0 0 0 8px}.fl-builder-settings .wp-switch-editor{background:#ebebeb;border:1px solid #e5e5e5;border-radius:0;color:#333}.fl-builder-settings .wp-editor-container{border:1px solid #e5e5e5}.fl-builder-settings .mce-toolbar .mce-btn-group .mce-btn{margin:2px 0}.fl-builder-settings .mce-menubtn.mce-fixed-width button{width:100px}.mce-close:active,.mce-close:hover,.mce-toolbar .mce-btn button:active,.mce-toolbar .mce-btn button:hover,.mce-window .mce-btn button:active,.mce-window .mce-btn button:hover{background:0 0;border:none}.mce-ico{font-family:tinymce,Arial!important}.mce-toolbar i.mce-ico{font:400 20px/1 dashicons!important}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:1px!important}.wp-editor-container textarea.wp-editor-area{background:0 0;border:none;padding:10px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.fl-builder-edit form#wp-link{color:#000;font-family:Helvetica,Arial,Verdana,sans-serif;font-size:13px}.fl-builder-edit form#wp-link #link-options label{display:block;margin-bottom:2px}.fl-builder-edit form#wp-link #link-options label span{padding-right:10px;vertical-align:middle}.fl-builder-edit form#wp-link #link-options input[type=text]{display:inline-block;height:auto;margin:5px 0 0;padding:3px 5px;width:80%}.fl-builder-edit form#wp-link .query-results{top:225px}.ace_editor,.ace_editor *{font-family:Monaco,Menlo,"Ubuntu Mono","Droid Sans Mono",Consolas,monospace!important;font-size:12px!important;font-weight:400!important;letter-spacing:0!important}.fl-builder-global-settings #fl-builder-settings-tab-css,.fl-builder-global-settings #fl-builder-settings-tab-js,.fl-builder-html-settings #fl-builder-settings-tab-general,.fl-builder-layout-settings #fl-builder-settings-tab-css,.fl-builder-layout-settings #fl-builder-settings-tab-js{width:560px}.fl-builder-global-settings #fl-builder-settings-section-css,.fl-builder-global-settings #fl-builder-settings-section-js,.fl-builder-html-settings #fl-builder-settings-section-general,.fl-builder-layout-settings #fl-builder-settings-section-css,.fl-builder-layout-settings #fl-builder-settings-section-js{margin-bottom:0}.fl-builder-global-settings #fl-builder-settings-tab-css td,.fl-builder-global-settings #fl-builder-settings-tab-js td,.fl-builder-html-settings #fl-builder-settings-section-general td,.fl-builder-layout-settings #fl-builder-settings-tab-css td,.fl-builder-layout-settings #fl-builder-settings-tab-js td{padding:0}.fl-layout-field-option{border:2px solid #d9d9d9;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;cursor:pointer;float:left;line-height:0;max-width:23%;margin:0 1% 2%;padding:5px}.fl-layout-field-option-selected,.fl-layout-field-option:hover{border-color:red}.fl-layout-field-option img{max-width:100%}.fl-link-field-input{width:244px!important}.fl-link-field-search{display:none;border:1px solid #dfdfdf;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;margin:4px 0 0;padding:10px}.fl-link-field-search-title{display:block;margin:0 0 3px 2px}.fl-link-field-search-cancel{margin-top:6px}.fl-help-tooltip{display:inline-block;position:relative}.fl-help-tooltip-icon{color:#999!important;cursor:pointer;font-family:FontAwesome;font-size:15px!important;padding:5px;vertical-align:middle}.popover[class*=tour-],ul.as-list{font-family:Helvetica,Arial,Verdana,sans-serif}.fl-help-tooltip-text{background:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ccc;-moz-box-shadow:0 0 5px #ccc;-webkit-box-shadow:0 0 5px #ccc;display:none;font-weight:400;left:23px;padding:10px 13px;position:absolute;top:-6px;width:250px;z-index:1000}.fl-form-field-preview-text .fa{font-size:18px;line-height:22px}.fl-builder-field-actions{padding-left:0!important;padding-right:0!important;text-align:center;width:85px}.fl-builder-field-actions i{color:#999!important;cursor:pointer;font-size:13px!important;height:24px;line-height:29px!important;padding-bottom:20px;width:24px}.fl-builder-field-actions i:hover{color:#000!important}.fl-builder-field-actions i.fl-builder-field-copy,.fl-builder-field-actions i.fl-builder-field-delete{margin-left:5px}.fl-builder-field-actions i.fl-builder-field-move{cursor:move}.fl-builder-field-dd-helper{background:#ccc;height:30px!important;float:left;width:130px!important}.fl-builder-field-dd-zone{border:1px dashed #ccc;height:30px}.fl-builder-field-actions-single{width:auto}.fl-builder-field-actions-single i.fl-builder-field-delete,.fl-builder-field-actions-single i.fl-builder-field-move{display:none}.fl-builder-widget-settings input{display:inline-block!important;margin:5px 10px 8px!important}.fl-builder-lightbox-loading{background:url(../img/ajax-loader.gif) center center no-repeat;height:100px}.fl-builder-settings .error,.fl-builder-settings input.error{border-color:#d03436}.fl-builder-settings label.error,.fl-builder-settings p.error{color:#d03436;display:block;margin-top:5px}.fl-builder-settings .fl-form-table .fl-field-description{color:#999;font-style:normal}ul.as-selections{background-color:#fff;border-color:#dfdfdf;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333;font-size:12px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px;width:auto}ul.as-selections.loading{background:url(../img/ajax-loader-small.gif) 98% center no-repeat}ul.as-selections li.as-selection-item{background:#d4eaf6;border:none;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;font-size:11px;line-height:14px;margin-bottom:4px;padding-bottom:0;padding-top:0}ul.as-selections li.as-selection-item.blur{background:#f4f4f4}ul.as-selections li.as-selection-item a.as-close{line-height:12px}ul.as-selections li.as-original{margin:0}ul.as-selections li.as-original input{height:auto;font-size:12px;margin:0;padding:0}ul.as-list{margin:0;font-size:13px;color:#000;background-color:#fff;background-color:rgba(255,255,255,.95);z-index:2;-webkit-box-shadow:0 0 10px rgba(0,0,0,.1);-moz-box-shadow:0 0 10px rgba(0,0,0,.1);box-shadow:0 0 10px rgba(0,0,0,.1);-ms-border-radius:0;-o-border-radius:0;border:none;border:1px solid #dfdfdf;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}li.as-message,li.as-result-item{border:none}li.as-result-item.active{background:#e5e5e5;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;color:#333;text-shadow:none}li.as-result-item em{background:0 0!important;color:#333!important;font-size:12px;padding:0!important}.fl-loop-builder-filter{display:none}.fl-builder-service-settings{position:relative}.fl-builder-service-error{color:red!important;padding:15px 0 0}.fl-builder-service-account-delete{color:red!important;margin-left:10px;position:relative;top:2px}#fl-field-visibility_user_capability .fl-field-description,.fl-builder-service-connect-row .fl-field-description{background:#f0f0f0;color:#333!important;display:block;float:none;margin:10px 0 0;padding:10px}#fl-field-visibility_user_capability .fl-field-description a,.fl-builder-service-connect-row .fl-field-description a{color:#21759b!important;text-decoration:underline!important}#tiptip_holder{z-index:200000}#tiptip_arrow_inner{border-top-color:#333!important}#tiptip_content{background:#333;box-shadow:none}.fl-builder-getting-started-video{line-height:0!important;padding:10px}.fl-builder-getting-started-video iframe{border:none;height:326px;width:100%}.fl-builder-tour-actions .fl-builder-actions-title{font-size:14px!important;line-height:19px}.fl-builder-tour-mask{bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000000}.fl-builder-tour-dimmed{background:rgba(0,0,0,.7);bottom:0;left:0;position:absolute;right:0;top:0}body>.fl-builder-tour-dimmed{position:fixed}.tour-backdrop{z-index:110000}.popover[class*=tour-]{border:1px solid #ccc;border-radius:0;-webkit-box-shadow:0 0 30px rgba(0,0,0,.3);box-shadow:0 0 40px rgba(0,0,0,.3);color:#666;font-size:13px;font-weight:400;line-height:18px;max-width:none;padding:0;width:300px;z-index:100000001}.popover[class*=tour-].bottom>.arrow{border-bottom-color:#ccc}.popover[class*=tour-].bottom>.arrow:after{border-bottom-color:#f7f7f7}.popover[class*=tour-] .popover-title{border-radius:0;color:#333;letter-spacing:normal;text-transform:none}.popover[class*=tour-] .fa-times{color:#b3b3b3;cursor:pointer;font-size:16px;padding:5px;position:absolute;right:3px;top:2px}.popover[class*=tour-] .fa-times:hover{color:#666}.popover[class*=tour-] .popover-content{border-bottom:1px solid #d9d9d9;padding:13px 15px}.popover[class*=tour-] .fl-builder-tour-next{display:block;float:none;width:100%}.fl-builder-shortcode-mask-wrap{position:relative}.fl-builder-shortcode-mask{bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fl-color-picker-ui{width:200px}.fl-color-picker-ui .iris-picker{float:left;width:200px;height:215px;display:block;position:relative;border-top:1px solid rgba(0,0,0,.1)}.fl-color-picker-ui .iris-picker .iris-square-inner,.fl-color-picker-ui .iris-picker-inner{position:absolute;left:0;top:0;bottom:0;right:0}.fl-color-picker-ui .iris-picker,.iris-picker *{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}.fl-color-picker-ui .iris-error{background-color:#ffafaf}.fl-color-picker-ui .iris-picker .iris-square{width:200px;height:200px}.fl-color-picker-ui .iris-picker .iris-palette,.fl-color-picker-ui .iris-picker .iris-slider,.fl-color-picker-ui .iris-picker .iris-square-inner{box-shadow:0 0 3px rgba(0,0,0,.1) inset;height:100%;width:12.5%}.fl-color-picker-ui .iris-picker .iris-placeholder,.fl-color-picker-ui .iris-picker .iris-square{position:relative}.fl-color-picker-ui .iris-picker .iris-square-inner{width:auto;margin:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square,.fl-color-picker-ui .iris-ie-9 .iris-square-inner{box-shadow:none;border-radius:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square{outline:rgba(0,0,0,.1) solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-palette,.fl-color-picker-ui .iris-ie-lt9 .iris-slider,.fl-color-picker-ui .iris-ie-lt9 .iris-square,.fl-color-picker-ui .iris-ie-lt9 .iris-square-inner{outline:#999 solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-square .ui-slider-handle{outline:#999 solid 1px;background-color:#fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.fl-color-picker-ui .iris-ie-lt9 .iris-square .iris-square-handle{background:0 0;border:3px solid #fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"}.fl-color-picker-ui .iris-picker .iris-strip{width:200px;margin-top:5px;position:relative;height:14px;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle{width:6px;position:absolute;right:0;top:-2px;bottom:-2px;margin:0;border-radius:3px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.5);z-index:5;cursor:ew-resize}.fl-color-picker-ui .iris-picker .iris-slider-offset{position:absolute;top:0;left:6px;right:0;bottom:0;width:auto;height:auto;background:0 0;border:none;border-radius:0;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-square-handle{background:0 0;border:5px solid #999;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.fl-color-picker-ui .iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover{border-color:#999}.fl-color-picker-ui .iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover::after{border-color:#fff}.fl-color-picker-ui .iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.fl-color-picker-clear,.fl-color-picker-color{border:1px solid rgba(0,0,0,.1);cursor:pointer;float:left}.fl-color-picker-ui .iris-picker .iris-square-value{width:8px;height:8px;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.fl-color-picker-wrapper{position:relative;width:48px;height:32px}.fl-color-picker-color{position:relative;width:30px;height:30px;background-color:transparent}.fl-color-picker-color.fl-color-picker-empty{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABG2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS4xLjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+MahxaQAAAAlwSFlzAAALEwAACxMBAJqcGAAACk9pQ0NQUGhvdG9zaG9wIElDQyBwcm9maWxlAAB42p1TZ1RT6RY99970QkuIgJRLb1IVCCBSQouAFJEmKiEJEEqIIaHZFVHBEUVFBBvIoIgDjo6AjBVRLAyKCtgH5CGijoOjiIrK++F7o2vWvPfmzf611z7nrPOds88HwAgMlkgzUTWADKlCHhHgg8fExuHkLkCBCiRwABAIs2Qhc/0jAQD4fjw8KyLAB74AAXjTCwgAwE2bwDAch/8P6kKZXAGAhAHAdJE4SwiAFABAeo5CpgBARgGAnZgmUwCgBABgy2Ni4wBQLQBgJ3/m0wCAnfiZewEAW5QhFQGgkQAgE2WIRABoOwCsz1aKRQBYMAAUZkvEOQDYLQAwSVdmSACwtwDAzhALsgAIDAAwUYiFKQAEewBgyCMjeACEmQAURvJXPPErrhDnKgAAeJmyPLkkOUWBWwgtcQdXVy4eKM5JFysUNmECYZpALsJ5mRkygTQP4PPMAACgkRUR4IPz/XjODq7OzjaOtg5fLeq/Bv8iYmLj/uXPq3BAAADhdH7R/iwvsxqAOwaAbf6iJe4EaF4LoHX3i2ayD0C1AKDp2lfzcPh+PDxFoZC52dnl5OTYSsRCW2HKV33+Z8JfwFf9bPl+PPz39eC+4iSBMl2BRwT44MLM9EylHM+SCYRi3OaPR/y3C//8HdMixEliuVgqFONREnGORJqM8zKlIolCkinFJdL/ZOLfLPsDPt81ALBqPgF7kS2oXWMD9ksnEFh0wOL3AADyu2/B1CgIA4Bog+HPd//vP/1HoCUAgGZJknEAAF5EJC5UyrM/xwgAAESggSqwQRv0wRgswAYcwQXcwQv8YDaEQiTEwkIQQgpkgBxyYCmsgkIohs2wHSpgL9RAHTTAUWiGk3AOLsJVuA49cA/6YQiewSi8gQkEQcgIE2Eh2ogBYopYI44IF5mF+CHBSAQSiyQgyYgUUSJLkTVIMVKKVCBVSB3yPXICOYdcRrqRO8gAMoL8hrxHMZSBslE91Ay1Q7moNxqERqIL0GR0MZqPFqCb0HK0Gj2MNqHn0KtoD9qPPkPHMMDoGAczxGwwLsbDQrE4LAmTY8uxIqwMq8YasFasA7uJ9WPPsXcEEoFFwAk2BHdCIGEeQUhYTFhO2EioIBwkNBHaCTcJA4RRwicik6hLtCa6EfnEGGIyMYdYSCwj1hKPEy8Qe4hDxDckEolDMie5kAJJsaRU0hLSRtJuUiPpLKmbNEgaI5PJ2mRrsgc5lCwgK8iF5J3kw+Qz5BvkIfJbCp1iQHGk+FPiKFLKakoZ5RDlNOUGZZgyQVWjmlLdqKFUETWPWkKtobZSr1GHqBM0dZo5zYMWSUulraKV0xpoF2j3aa/odLoR3ZUeTpfQV9LL6Ufol+gD9HcMDYYVg8eIZygZmxgHGGcZdxivmEymGdOLGcdUMDcx65jnmQ+Zb1VYKrYqfBWRygqVSpUmlRsqL1Spqqaq3qoLVfNVy1SPqV5Tfa5GVTNT46kJ1JarVaqdUOtTG1NnqTuoh6pnqG9UP6R+Wf2JBlnDTMNPQ6RRoLFf47zGIAtjGbN4LCFrDauGdYE1xCaxzdl8diq7mP0du4s9qqmhOUMzSjNXs1LzlGY/B+OYcficdE4J5yinl/N+it4U7yniKRumNEy5MWVca6qWl5ZYq0irUatH6702ru2nnaa9RbtZ+4EOQcdKJ1wnR2ePzgWd51PZU92nCqcWTT069a4uqmulG6G7RHe/bqfumJ6+XoCeTG+n3nm95/ocfS/9VP1t+qf1RwxYBrMMJAbbDM4YPMU1cW88HS/H2/FRQ13DQEOlYZVhl+GEkbnRPKPVRo1GD4xpxlzjJONtxm3GoyYGJiEmS03qTe6aUk25pimmO0w7TMfNzM2izdaZNZs9Mdcy55vnm9eb37dgWnhaLLaotrhlSbLkWqZZ7ra8boVaOVmlWFVaXbNGrZ2tJda7rbunEae5TpNOq57WZ8Ow8bbJtqm3GbDl2AbbrrZttn1hZ2IXZ7fFrsPuk72Tfbp9jf09Bw2H2Q6rHVodfnO0chQ6Vjrems6c7j99xfSW6S9nWM8Qz9gz47YTyynEaZ1Tm9NHZxdnuXOD84iLiUuCyy6XPi6bG8bdyL3kSnT1cV3hetL1nZuzm8LtqNuv7jbuae6H3J/MNJ8pnlkzc9DDyEPgUeXRPwuflTBr36x+T0NPgWe15yMvYy+RV63XsLeld6r3Ye8XPvY+cp/jPuM8N94y3llfzDfAt8i3y0/Db55fhd9DfyP/ZP96/9EAp4AlAWcDiYFBgVsC+/h6fCG/jj8622X2stntQYyguUEVQY+CrYLlwa0haMjskK0h9+eYzpHOaQ6FUH7o1tAHYeZhi8N+DCeFh4VXhj+OcIhYGtExlzV30dxDc99E+kSWRN6bZzFPOa8tSjUqPqouajzaN7o0uj/GLmZZzNVYnVhJbEscOS4qrjZubL7f/O3zh+Kd4gvjexeYL8hdcHmhzsL0hacWqS4SLDqWQEyITjiU8EEQKqgWjCXyE3cljgp5wh3CZyIv0TbRiNhDXCoeTvJIKk16kuyRvDV5JMUzpSzluYQnqZC8TA1M3Zs6nhaadiBtMj06vTGDkpGQcUKqIU2TtmfqZ+ZmdsusZYWy/sVui7cvHpUHyWuzkKwFWS0KtkKm6FRaKNcqB7JnZVdmv82JyjmWq54rze3Ms8rbkDec75//7RLCEuGStqWGS1ctHVjmvaxqObI8cXnbCuMVBSuGVgasPLiKtipt1U+r7VeXrn69JnpNa4FewcqCwbUBa+sLVQrlhX3r3NftXU9YL1nftWH6hp0bPhWJiq4U2xeXFX/YKNx45RuHb8q/mdyUtKmrxLlkz2bSZunm3i2eWw6Wqpfmlw5uDdnatA3fVrTt9fZF2y+XzSjbu4O2Q7mjvzy4vGWnyc7NOz9UpFT0VPpUNu7S3bVh1/hu0e4be7z2NOzV21u89/0+yb7bVQFVTdVm1WX7Sfuz9z+uiarp+Jb7bV2tTm1x7ccD0gP9ByMOtte51NUd0j1UUo/WK+tHDscfvv6d73ctDTYNVY2cxuIjcER55On3Cd/3Hg062naMe6zhB9Mfdh1nHS9qQprymkabU5r7W2Jbuk/MPtHW6t56/EfbHw+cNDxZeUrzVMlp2umC05Nn8s+MnZWdfX4u+dxg26K2e+djzt9qD2/vuhB04dJF/4vnO7w7zlzyuHTystvlE1e4V5qvOl9t6nTqPP6T00/Hu5y7mq65XGu57nq9tXtm9+kbnjfO3fS9efEW/9bVnjk93b3zem/3xff13xbdfnIn/c7Lu9l3J+6tvE+8X/RA7UHZQ92H1T9b/tzY79x/asB3oPPR3Ef3BoWDz/6R9Y8PQwWPmY/Lhg2G6544Pjk54j9y/en8p0PPZM8mnhf+ov7LrhcWL3741evXztGY0aGX8peTv218pf3qwOsZr9vGwsYevsl4MzFe9Fb77cF33Hcd76PfD0/kfCB/KP9o+bH1U9Cn+5MZk5P/BAOY8/xjMy3bAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAGbSURBVHjajNO/S1VxGMfx9+ebQ6FiImkOgatTDYlKXgfPgVAbHRpt6U/oH6jmHAPH2gOX2vx1URCaWoKGhhQ1hKsJLnqeT8sxTveeSz3bFx5ez/f58vkqyzL+pyQhiYhYsL0i6bIoiuf6B/AIENCUBPAUWAX6AGx/6wpIyoEPJTBhewxYk9Rz3RMRXYEeSevATHneB/qBgcqAi4hY6gAkYVvApKS3wP2aAYWk5Yh4rzzPKff7U7axfQP4LKkdOJb0zPZH23QAtpE0FBGbwLmkV7ZfV6AD29PAD6AWGLa9JSlJemj7l6THtj9VbnFuexHYbgcGbe+UjzgLHNq+DawBt4BeYBy4sj33FxARA8BeOblh+0jSsO0mcAk8sD0u6Q3w0vZGdYWhiGgCKaXUAH7aHikDFMAU0IqIzrzkeX6nsvOU7Zak0YjYklRImgZaZXBqgW3gXtl4aHsQ2AWSpAZwXEleJ5Bl2feU0rztr5WdQ9IMcFJt7naDL5JeAKcR8S6ldAVM2j5rD1g3YB24C9wEDiQ9AU7rPkgd8HsAv5vXzUui544AAAAASUVORK5CYII=) center center no-repeat}.fl-color-picker-clear{position:relative;display:block;width:17px;height:30px;border-left:none;background-color:#FAFAFA}.fl-color-picker-color.fl-color-picker-empty+.fl-color-picker-clear{display:none}.fl-color-picker-ui{display:inline-block;font-family:Helvetica,Verdana,sans-serif;z-index:999999;position:fixed;overflow:hidden;padding-bottom:45px;border:1px solid rgba(0,0,0,.1);color:#999;background-color:#FAFAFA;border-radius:3px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:opacity .2s,visibility .2s;-moz-transition:opacity .2s,visibility .2s;-ms-transition:opacity .2s,visibility .2s;-o-transition:opacity .2s,visibility .2s;transition:opacity .2s,visibility .2s;visibility:hidden;opacity:0;-webkit-transform:translate3d(0,0,0)}.fl-color-picker-ui.fl-color-picker-active{visibility:visible;opacity:1}.fl-color-picker-ui .fl-color-picker-input,.fl-color-picker-ui .fl-color-picker-input:focus{width:100%;height:30px;border:none!important;font-size:14px!important;padding:0 8px;vertical-align:middle;color:#999;background-color:#fff;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.fl-color-picker-ui .iris-square-value{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.fl-color-picker-preset-add{position:absolute;top:8px;right:8px;width:14px;height:14px;background-color:#999;border-radius:50%;cursor:pointer;-webkit-transition:all .2s;-moz-transition:all .2s;-ms-transition:all .2s;-o-transition:all .2s;transition:all .2s}.fl-color-picker-preset-add:hover{background-color:#333}.fl-color-picker-preset-add:after,.fl-color-picker-preset-add:before{content:'';display:block;position:relative;background-color:#fff}.fl-color-picker-preset-add:before{top:6px;left:3px;width:8px;height:2px}.fl-color-picker-preset-add:after{left:6px;top:1px;width:2px;height:8px}.fl-color-picker-presets{position:absolute;left:0;bottom:0;width:100%;z-index:15;overflow:auto;border-top:1px solid rgba(0,0,0,.1);background-color:#FAFAFA}.fl-color-picker-presets-list .fl-color-picker-preset:hover,.fl-color-picker-presets-toggle:hover{background-color:#EDEDED}.fl-color-picker-presets-toggle{position:relative;overflow:hidden;width:100%;height:35px;text-align:center;line-height:35px;font-size:12px;font-weight:700;cursor:pointer;-webkit-transition:all .1s;-moz-transition:all .1s;-ms-transition:all .1s;-o-transition:all .1s;transition:all .1s}.fl-color-picker-presets-close-label,.fl-color-picker-presets-open-label{position:absolute;top:50%;left:50%;visibility:hidden;color:#999;-webkit-transition:all .5s;-moz-transition:all .5s;-ms-transition:all .5s;-o-transition:all .5s;transition:all .5s;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);opacity:0;width:100%}.fl-color-picker-presets-close-label.fl-color-picker-active,.fl-color-picker-presets-open-label.fl-color-picker-active{color:#999;visibility:visible;opacity:1}.fl-color-picker-presets-list{width:100%;list-style:none;margin:0;padding:0;overflow:auto}.fl-color-picker-presets-list .fl-color-picker-no-preset,.fl-color-picker-presets-list .fl-color-picker-preset{position:relative;padding:5px;font-size:12px;border-top:1px solid rgba(0,0,0,.1);-webkit-transition:all .1s;-moz-transition:all .1s;-ms-transition:all .1s;-o-transition:all .1s;transition:all .1s}.fl-color-picker-presets-list .fl-color-picker-preset-color{display:inline-block;width:20px;height:20px;margin-right:3px;vertical-align:middle;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-label{vertical-align:middle;color:#999}.fl-color-picker-clear .fl-color-picker-icon-remove,.fl-color-picker-presets-list .fl-color-picker-preset-remove{position:absolute;top:50%;cursor:pointer;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.fl-color-picker-clear .fl-color-picker-icon-remove{right:0}.fl-color-picker-presets-list .fl-color-picker-preset-remove{right:5px}.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:after,.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:before{background-color:#333}.fl-color-picker-added{position:absolute;width:100%;top:0;left:0;right:0;bottom:35px;z-index:10;color:#fff;text-align:center;background-color:rgba(0,0,0,.6)}.fl-color-picker-added-text{position:absolute;top:50%;left:50%;width:80%;font-size:14px;color:#fff!important;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.fl-color-picker-icon-check{position:relative;width:50px;height:50px;margin:5px auto}.fl-color-picker-icon-check:before{content:'';display:block;position:relative;width:15px;height:30px;margin-left:14px;border:7px solid #fff;border-left:none;border-top:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.fl-color-picker-icon-arrow-down,.fl-color-picker-icon-arrow-up{display:inline-block;position:relative;width:10px;height:10px;margin-left:5px}.fl-color-picker-icon-arrow-down:before,.fl-color-picker-icon-arrow-up:before{content:'';display:block;position:relative;width:6px;height:6px;border:2px solid #999;border-left:none;border-top:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.fl-color-picker-icon-arrow-up{top:2px;-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fl-color-picker-icon-remove{width:15px;height:15px}.fl-color-picker-icon-remove:after,.fl-color-picker-icon-remove:before{content:'';display:block;position:relative;background-color:#999}.fl-color-picker-icon-remove:before{left:6px;width:2px;height:10px;margin-top:3px;background:#999;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.fl-color-picker-icon-remove:after{left:6px;width:2px;height:10px;margin-top:-10px;background:#999;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.fl-alpha-wrap{float:left;position:relative;width:40px;height:215px;padding:0 5px;border-top:none}.fl-alpha-slider{height:185px;position:absolute;top:15px;width:28px}.fl-alpha-slider .ui-slider-handle{background:rgba(0,0,0,0);border-color:#aaa;border-radius:4px;border-style:solid;border-width:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);cursor:ns-resize;height:16px;left:-2px;opacity:.9;position:absolute;right:-2px;width:34px;z-index:14}.fl-alpha-slider .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;border-radius:3px}.fl-alpha-slider-offset{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAASCAYAAAAe/ZHXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkNEQUQ0ODM4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkNEQUQ0ODQ4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2Q0RBRDQ4MThFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2Q0RBRDQ4MjhFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/r/N8AAAWYSURBVHjarFvvR3VBEN45JZGIPkREHyIiIhJJf3qUSERE9CGiDxERkcg9z9u92uucvTszz5z7xnHPj93Z2d359cxscn5+jpTS+EoiMr3/+51cZ2dn4+e29i2/u7y8RKf/pO3vc+o+n5ycoNK31+f6+jrfZ37yuG2mf3R01H3fa5N/b29vU6dP5qft0G4PDg5MGuPr/v4+jz1t27mfvN/b21P75+fHx8eZfiV/Ozs7rUJnSu/5+RlFv+m6ZJpbW1s1PnrvXl9fZ/qX89zY2LB4mfy+v7/nsdV1XltbK/dr5vnz87OcV5bJabuVlRVLBifjfX9/l/xkGtM+S0tLNXnu0szfU/P3IMn/k0678h6ddqjQFGccVL6hoCsVfsq+NZ5QtCv5rfFS41sq37W+UPhMyhxEWTetvce3NR8oewqD39qalXuGAK/WPltjajIC4x2c9Ye1f43SGcqGwRBeTZjhMNntL4pCWZMQYhE05RVl02EovRgC4RkCbUNSQAGhGB/GsKG4h6FQoigDa2i8fRBy3uLMXYIG3Vr3aZvRaCRdBYlYIMZywhBGCVhgzzOlgRuUSOvC0GMEWxOM/+EtQFh1OIIXtfwg1tRaayGjg5px0jyZKEaTle3e+AsLCygVRAh3FlEgKbReE3oYGj9EgIR00QiEgKw3ZBQbRGjBeAMtDETQmHiKDsezJNLgCTFGItZXlAgCSiQggblP+9c8SDI0lXWlFv5g3K63KZ51FOcZzthQ3LomoNHwJmKIQISI3vqzSpwIQ8liSjGMFQjDpoVgaQ6cWgvLhOC7qiAwiHrWbEg4JMSmeUrBuHoYwioOQNXmhmAcrs096s1gJCGi3hSEVU8DQxYElYHhKwUUGAa+NqOBMsSSAQJuhQhCAH4vxozExsxiihPuaIrjCVYKWlYEsjSM52G8Kxxryngl5j0j+EyGTIiED4s1Itm0ZGWxMFCLJaBAcEI6OBkmFgNBoc8Cait2ZnENE/6wQN8LJSJeSMNAjKVm+LUMAIt3PR5AQgIGp1Z5zxhE8PtXUYReYeXi4mKmOPNXBMzt2tPT07LIUtJqr66uusXEbkFnWiQ6Pj72ikrtzc1NKopuvbbj58PDwxqNHp27u7tuYWumUDV+v7+/Xyu6pc59+/DwUCsC9ujt7u6qRbt8//T01C3elbyN70fb29uZ/1FSincvLy/lPGb42tzc9IqJeHt7q61Pr2C6vr7u7tfHx8fMPhV0sLq6WhZtU0n36+uru8elPE7aLi8v1wqJPXn++fmZKYgX8ozFxcXJb0NaQTHClZT8+gBjsYdaFc+zWcUkGTCWENY66ta92oSVzo3WI6IZKGtukeyfBLFKBNAj6bUOBgaoe9wE4n04IBNkLMoC7+Skj630ZlTJMYdyMsU2T8AwpzALkVFilZgJcT2l9PCWDDSAMBSjVlJgZNk0lE1AIby0qCiCnBQNj6aBGQslZIZJ5hB6D/AzQHto5Z9Nk8tARdN4q2ExBnsyIJ311EymShyjan2rKk0zh1Ay1oQVWAZQRnkUA8RFw7TahjBnmNgMVMQrsCGZJezRtGlU0cUZ1zuaxGZPpbhApM+ZpFQqQ6xadoMtBrEKpBVo4GRXvNSxpaRixKiR+TChCYhsDwZkfFj8IkErjAHejcUI0XQrgwehhNSMHAz21E0wZ23FcCAmj8Sd/PXy2xLYLAuwRw4IMsqjFaWYOpMEhDySAPFCWyFkgAHrEcA+BNeJ4UE8HCzJPpCrerUmQIx1pWJkjqxJD8EikUo2c5aI8ZYgsAkM4WQtnHd0ns0ORgVTBghy5ISy928SGsbTMqYg523RUY8oNYG4FIYiyRyZCnFCJC87IoRAIMVOqQ7BKexxCS2hYVl9JhvlpYjnAe4MhmRPMWhhvLfXINaI9WKM0Zu0+SfAAFLE1EgfVSv7AAAAAElFTkSuQmCC);border-radius:2px;box-shadow:0 0 5px rgba(0,0,0,.4) inset;-moz-box-shadow:0 0 5px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4) inset;width:200px;height:28px;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg);bottom:47%;left:-80px;position:absolute}.fl-alpha-text{width:30px;font-size:12px;text-align:center;color:#999;position:absolute;bottom:-5px}.fl-icons-filter input,.fl-icons-filter select{vertical-align:middle;width:160px}.fl-icon-selector .fl-lightbox{height:100%}.fl-icons-filter{height:auto!important;margin:0!important;position:absolute!important;right:10px;top:10px}.fl-icons-filter input{line-height:18px}.fl-icons-list{bottom:52px;left:0;overflow:auto;padding:20px;position:absolute;right:0;top:48px}.fl-icons-list::-webkit-scrollbar{background-color:#ccc;-webkit-appearance:none;width:10px}.fl-icons-list::-webkit-scrollbar-thumb{background-color:#666;border:1px solid #ccc}.fl-icons-section{text-align:center}.fl-icons-section h2{border-bottom:1px solid #dfdfdf;color:#333!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:16px!important;font-weight:700!important;margin:0 0 20px!important;padding:0 0 10px!important;text-align:left}.fl-icons-list i,.fl-icons-list i:before{cursor:pointer;display:inline-block;font-size:32px;height:80px;line-height:80px;width:80px}.fl-icons-list i:hover{background:#e5e5e5}.fl-icon-selector-footer{bottom:0;left:0;position:absolute;right:0}.fl-lightbox-mask,.fl-lightbox-wrap{bottom:0;left:0;position:fixed;right:0;top:0}.fl-lightbox-wrap{display:none;overflow:auto;padding:30px;z-index:100010;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0)}.fl-lightbox-wrap.fl-icon-selector{z-index:100011}.fl-lightbox-mask{background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100010}.fl-lightbox{background:#fff;box-shadow:rgba(0,0,0,1) 0 4px 30px;-moz-box-shadow:rgba(0,0,0,1) 0 4px 30px;-webkit-box-shadow:rgba(0,0,0,1) 0 4px 30px;position:relative;z-index:100011}.fl-lightbox :not(i){color:#333;font-family:Helvetica,Verdana,sans-serif;font-size:12px;line-height:16px;text-decoration:none;text-transform:none}.fl-lightbox *,.fl-lightbox :after,.fl-lightbox :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fl-lightbox .fl-nanoscroller-pane{bottom:4px;right:4px;width:8px}.fl-lightbox .fa{font-family:FontAwesome}.fl-lightbox .dashicons{font-family:dashicons}.fl-lightbox-content-wrap{height:100%}.fl-lightbox.ui-draggable{box-shadow:rgba(0,0,0,.5) 0 4px 30px;-moz-box-shadow:rgba(0,0,0,.5) 0 4px 30px;-webkit-box-shadow:rgba(0,0,0,.5) 0 4px 30px}.fl-lightbox-controls{position:absolute;right:10px;top:10px;z-index:5}.fl-lightbox-controls .fa{color:#999;font-size:18px;padding:5px}.fl-lightbox-controls .fa:hover{color:#333;cursor:pointer}.fl-builder-lightbox .fl-lightbox-expanded{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox.ui-draggable.fl-lightbox-expanded .fl-lightbox-header{cursor:inherit}.fl-builder-lightbox .fl-lightbox-expanded .fl-builder-settings-tab{width:100%!important}.fl-lightbox-header{background:#fff;border-bottom:1px solid #dfdfdf;box-shadow:0 4px 4px -4px rgba(0,0,0,.1);-moz-box-shadow:0 4px 4px -4px rgba(0,0,0,.1);-webkit-box-shadow:0 4px 4px -4px rgba(0,0,0,.1);position:relative}.fl-lightbox-header h1{color:#333!important;font-size:18px!important;font-family:Helvetica,Verdana,sans-serif!important;font-weight:300!important;margin:0!important;padding:15px 20px!important;text-align:left!important}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:move}.fl-lightbox-footer{border-top:1px solid #dfdfdf;box-shadow:0 -4px 4px -4px rgba(0,0,0,.1);-moz-box-shadow:0 -4px 4px -4px rgba(0,0,0,.1);-webkit-box-shadow:0 -4px 4px -4px rgba(0,0,0,.1);padding:10px;text-align:right}.fl-lightbox-footer .fl-builder-button{margin-left:5px!important}
css/fl-color-picker.css CHANGED
@@ -1,7 +1,11 @@
1
  /* Iris Base
2
  ---------------------------------------------------- */
3
 
 
 
 
4
  .fl-color-picker-ui .iris-picker {
 
5
  width: 200px;
6
  height: 215px;
7
  display: block;
@@ -32,12 +36,15 @@
32
  bottom: 0;
33
  }
34
  .fl-color-picker-ui .iris-picker .iris-square{
 
35
  width: 200px;
36
  height: 200px;
37
  }
 
38
  .fl-color-picker-ui .iris-picker .iris-slider,
39
  .fl-color-picker-ui .iris-picker .iris-square-inner,
40
  .fl-color-picker-ui .iris-picker .iris-palette {
 
41
  height: 100%;
42
  width: 12.5%;
43
  }
@@ -82,7 +89,7 @@
82
  width: 200px;
83
  margin-top: 5px;
84
  position: relative;
85
- height: 10px;
86
  -webkit-transform: rotate(180deg);
87
  -ms-transform: rotate(180deg);
88
  -o-transform: rotate(180deg);
@@ -332,6 +339,7 @@
332
  -o-transform: translate(-50%,-50%);
333
  transform: translate(-50%,-50%);
334
  opacity: 0;
 
335
  }
336
  .fl-color-picker-presets-open-label.fl-color-picker-active,
337
  .fl-color-picker-presets-close-label.fl-color-picker-active{
@@ -519,4 +527,82 @@
519
  -ms-transform: rotate(45deg);
520
  -o-transform: rotate(45deg);
521
  transform: rotate(45deg);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
522
  }
1
  /* Iris Base
2
  ---------------------------------------------------- */
3
 
4
+ .fl-color-picker-ui {
5
+ width: 200px;
6
+ }
7
  .fl-color-picker-ui .iris-picker {
8
+ float: left;
9
  width: 200px;
10
  height: 215px;
11
  display: block;
36
  bottom: 0;
37
  }
38
  .fl-color-picker-ui .iris-picker .iris-square{
39
+ /* float: left; */
40
  width: 200px;
41
  height: 200px;
42
  }
43
+
44
  .fl-color-picker-ui .iris-picker .iris-slider,
45
  .fl-color-picker-ui .iris-picker .iris-square-inner,
46
  .fl-color-picker-ui .iris-picker .iris-palette {
47
+ box-shadow: 0 0 3px rgba(0, 0, 0, 0.1) inset;
48
  height: 100%;
49
  width: 12.5%;
50
  }
89
  width: 200px;
90
  margin-top: 5px;
91
  position: relative;
92
+ height: 14px;
93
  -webkit-transform: rotate(180deg);
94
  -ms-transform: rotate(180deg);
95
  -o-transform: rotate(180deg);
339
  -o-transform: translate(-50%,-50%);
340
  transform: translate(-50%,-50%);
341
  opacity: 0;
342
+ width: 100%;
343
  }
344
  .fl-color-picker-presets-open-label.fl-color-picker-active,
345
  .fl-color-picker-presets-close-label.fl-color-picker-active{
527
  -ms-transform: rotate(45deg);
528
  -o-transform: rotate(45deg);
529
  transform: rotate(45deg);
530
+ }
531
+
532
+ /* Color Picker Alpha / Opacity
533
+ ---------------------------------------------------- */
534
+ .fl-alpha-wrap {
535
+ float: left;
536
+ position: relative;
537
+ width: 40px;
538
+ height: 215px;
539
+ padding: 0 5px;
540
+ border-top: none;
541
+ }
542
+
543
+ .fl-alpha-slider {
544
+ height: 185px;
545
+ position: absolute;
546
+ top: 15px;
547
+ width: 28px;
548
+ }
549
+
550
+ .fl-alpha-slider .ui-slider-handle {
551
+ background: rgba(0, 0, 0, 0) none repeat scroll 0 0;
552
+ border-color: #aaa;
553
+ border-radius: 4px;
554
+ border-style: solid;
555
+ border-width: 4px;
556
+
557
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
558
+ -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
559
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
560
+
561
+ cursor: ns-resize;
562
+ height: 16px;
563
+ left: -2px;
564
+ opacity: 0.9;
565
+ position: absolute;
566
+ right: -2px;
567
+ width: 34px;
568
+ z-index: 14;
569
+ }
570
+
571
+ .fl-alpha-slider .ui-slider-handle:before {
572
+ content: " ";
573
+ position: absolute;
574
+ left: -2px;
575
+ right: -2px;
576
+ top: -3px;
577
+ bottom: -3px;
578
+ border: 2px solid #fff;
579
+ border-radius: 3px;
580
+ }
581
+
582
+ .fl-alpha-slider-offset {
583
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAASCAYAAAAe/ZHXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkNEQUQ0ODM4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkNEQUQ0ODQ4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2Q0RBRDQ4MThFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2Q0RBRDQ4MjhFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/r/N8AAAWYSURBVHjarFvvR3VBEN45JZGIPkREHyIiIhJJf3qUSERE9CGiDxERkcg9z9u92uucvTszz5z7xnHPj93Z2d359cxscn5+jpTS+EoiMr3/+51cZ2dn4+e29i2/u7y8RKf/pO3vc+o+n5ycoNK31+f6+jrfZ37yuG2mf3R01H3fa5N/b29vU6dP5qft0G4PDg5MGuPr/v4+jz1t27mfvN/b21P75+fHx8eZfiV/Ozs7rUJnSu/5+RlFv+m6ZJpbW1s1PnrvXl9fZ/qX89zY2LB4mfy+v7/nsdV1XltbK/dr5vnz87OcV5bJabuVlRVLBifjfX9/l/xkGtM+S0tLNXnu0szfU/P3IMn/k0678h6ddqjQFGccVL6hoCsVfsq+NZ5QtCv5rfFS41sq37W+UPhMyhxEWTetvce3NR8oewqD39qalXuGAK/WPltjajIC4x2c9Ye1f43SGcqGwRBeTZjhMNntL4pCWZMQYhE05RVl02EovRgC4RkCbUNSQAGhGB/GsKG4h6FQoigDa2i8fRBy3uLMXYIG3Vr3aZvRaCRdBYlYIMZywhBGCVhgzzOlgRuUSOvC0GMEWxOM/+EtQFh1OIIXtfwg1tRaayGjg5px0jyZKEaTle3e+AsLCygVRAh3FlEgKbReE3oYGj9EgIR00QiEgKw3ZBQbRGjBeAMtDETQmHiKDsezJNLgCTFGItZXlAgCSiQggblP+9c8SDI0lXWlFv5g3K63KZ51FOcZzthQ3LomoNHwJmKIQISI3vqzSpwIQ8liSjGMFQjDpoVgaQ6cWgvLhOC7qiAwiHrWbEg4JMSmeUrBuHoYwioOQNXmhmAcrs096s1gJCGi3hSEVU8DQxYElYHhKwUUGAa+NqOBMsSSAQJuhQhCAH4vxozExsxiihPuaIrjCVYKWlYEsjSM52G8Kxxryngl5j0j+EyGTIiED4s1Itm0ZGWxMFCLJaBAcEI6OBkmFgNBoc8Cait2ZnENE/6wQN8LJSJeSMNAjKVm+LUMAIt3PR5AQgIGp1Z5zxhE8PtXUYReYeXi4mKmOPNXBMzt2tPT07LIUtJqr66uusXEbkFnWiQ6Pj72ikrtzc1NKopuvbbj58PDwxqNHp27u7tuYWumUDV+v7+/Xyu6pc59+/DwUCsC9ujt7u6qRbt8//T01C3elbyN70fb29uZ/1FSincvLy/lPGb42tzc9IqJeHt7q61Pr2C6vr7u7tfHx8fMPhV0sLq6WhZtU0n36+uru8elPE7aLi8v1wqJPXn++fmZKYgX8ozFxcXJb0NaQTHClZT8+gBjsYdaFc+zWcUkGTCWENY66ta92oSVzo3WI6IZKGtukeyfBLFKBNAj6bUOBgaoe9wE4n04IBNkLMoC7+Skj630ZlTJMYdyMsU2T8AwpzALkVFilZgJcT2l9PCWDDSAMBSjVlJgZNk0lE1AIby0qCiCnBQNj6aBGQslZIZJ5hB6D/AzQHto5Z9Nk8tARdN4q2ExBnsyIJ311EymShyjan2rKk0zh1Ay1oQVWAZQRnkUA8RFw7TahjBnmNgMVMQrsCGZJezRtGlU0cUZ1zuaxGZPpbhApM+ZpFQqQ6xadoMtBrEKpBVo4GRXvNSxpaRixKiR+TChCYhsDwZkfFj8IkErjAHejcUI0XQrgwehhNSMHAz21E0wZ23FcCAmj8Sd/PXy2xLYLAuwRw4IMsqjFaWYOpMEhDySAPFCWyFkgAHrEcA+BNeJ4UE8HCzJPpCrerUmQIx1pWJkjqxJD8EikUo2c5aI8ZYgsAkM4WQtnHd0ns0ORgVTBghy5ISy928SGsbTMqYg523RUY8oNYG4FIYiyRyZCnFCJC87IoRAIMVOqQ7BKexxCS2hYVl9JhvlpYjnAe4MhmRPMWhhvLfXINaI9WKM0Zu0+SfAAFLE1EgfVSv7AAAAAElFTkSuQmCC);
584
+ border-radius: 2px;
585
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.4) inset;
586
+ -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4) inset;
587
+ -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4) inset;
588
+ width: 200px;
589
+ height: 28px;
590
+
591
+ -webkit-transform: rotate(-90deg);
592
+ -moz-transform: rotate(-90deg);
593
+ -ms-transform: rotate(-90deg);
594
+ -o-transform: rotate(-90deg);
595
+ transform: rotate(-90deg);
596
+ bottom: 47%;
597
+ left: -80px;
598
+ position: absolute;
599
+ }
600
+
601
+ .fl-alpha-text {
602
+ width: 30px;
603
+ font-size: 12px;
604
+ text-align: center;
605
+ color: #999;
606
+ position: absolute;
607
+ bottom: -5px;
608
  }
css/fl-lightbox.css CHANGED
@@ -56,6 +56,9 @@
56
  .fl-lightbox .fa {
57
  font-family: FontAwesome;
58
  }
 
 
 
59
  .fl-lightbox-content-wrap {
60
  height: 100%;
61
  }
@@ -111,6 +114,7 @@
111
  font-weight: 300 !important;
112
  margin: 0 !important;
113
  padding: 15px 20px !important;
 
114
  }
115
  .fl-lightbox.ui-draggable .fl-lightbox-header {
116
  cursor: move;
56
  .fl-lightbox .fa {
57
  font-family: FontAwesome;
58
  }
59
+ .fl-lightbox .dashicons {
60
+ font-family: dashicons;
61
+ }
62
  .fl-lightbox-content-wrap {
63
  height: 100%;
64
  }
114
  font-weight: 300 !important;
115
  margin: 0 !important;
116
  padding: 15px 20px !important;
117
+ text-align: left!important;
118
  }
119
  .fl-lightbox.ui-draggable .fl-lightbox-header {
120
  cursor: move;
fl-builder.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Beaver Builder Plugin (Lite Version)
4
  * Plugin URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-uri
5
  * Description: A drag and drop frontend WordPress page builder plugin that works with almost any theme!
6
- * Version: 1.8.8
7
  * Author: The Beaver Builder Team
8
  * Author URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-author
9
  * Copyright: (c) 2014 Beaver Builder
3
  * Plugin Name: Beaver Builder Plugin (Lite Version)
4
  * Plugin URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-uri
5
  * Description: A drag and drop frontend WordPress page builder plugin that works with almost any theme!
6
+ * Version: 1.9.1
7
  * Author: The Beaver Builder Team
8
  * Author URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-author
9
  * Copyright: (c) 2014 Beaver Builder
includes/admin-settings-welcome.php CHANGED
@@ -8,13 +8,13 @@ function fl_welcome_utm( $campaign ) {
8
  );
9
  }
10
 
11
- $blog_post_url = FLBuilderModel::get_store_url( 'beaver-builder-1-8-gordon', fl_welcome_utm('settings-welcome-blog-post' ) );
12
  $change_logs_url = FLBuilderModel::get_store_url( 'change-logs', fl_welcome_utm( 'settings-welcome-change-logs' ) );
13
  $upgrade_url = FLBuilderModel::get_store_url( '', fl_welcome_utm( 'settings-welcome-upgrade' ) );
14
  $support_url = FLBuilderModel::get_store_url( 'beaver-builder-support', fl_welcome_utm( 'settings-welcome-support' ) );
15
- $docs_url = FLBuilderModel::get_store_url( 'knowledge-base', fl_welcome_utm( 'settings-welcome-docs' ) );
16
  $faqs_url = FLBuilderModel::get_store_url( 'frequently-asked-questions', fl_welcome_utm( 'settings-welcome-faqs' ) );
17
  $forums_url = FLBuilderModel::get_store_url( 'support', fl_welcome_utm( 'settings-welcome-forums' ) );
 
18
 
19
  ?>
20
  <div id="fl-welcome-form" class="fl-settings-form">
@@ -68,15 +68,15 @@ $forums_url = FLBuilderModel::get_store_url( 'support', fl_welcome_utm( '
68
 
69
  <div class="fl-welcome-col">
70
 
71
- <h4><?php _e('What\'s New in Beaver Builder 1.8 Gordon', 'fl-builder'); ?></h4>
72
 
73
- <p><?php _e('Beaver Builder 1.8 is out and it\'s has some epic new features:', 'fl-builder'); ?></p>
74
 
75
  <ul>
76
- <li><?php _e('16 new landing page templates are available in the template selector.', 'fl-builder'); ?></li>
77
- <li><?php _e('Overhauled Import/Export options and the ability to export single templates.', 'fl-builder'); ?></li>
78
- <li><?php _e('Hide rows and modules depending on whether a user is logged in or out.', 'fl-builder'); ?></li>
79
- <li><?php _e('Ability to expand settings panels.', 'fl-builder'); ?></li>
80
  </ul>
81
 
82
  <p><?php printf( __('There\'s a whole lot more, too! Read about everything else on our <a href="%s" target="_blank">update post</a> or <a href="%s" target="_blank">change logs</a>.', 'fl-builder'), $blog_post_url, $change_logs_url ); ?></p>
8
  );
9
  }
10
 
11
+ $blog_post_url = FLBuilderModel::get_store_url( 'beaver-builder-1-9-shasta', fl_welcome_utm('settings-welcome-blog-post' ) );
12
  $change_logs_url = FLBuilderModel::get_store_url( 'change-logs', fl_welcome_utm( 'settings-welcome-change-logs' ) );
13
  $upgrade_url = FLBuilderModel::get_store_url( '', fl_welcome_utm( 'settings-welcome-upgrade' ) );
14
  $support_url = FLBuilderModel::get_store_url( 'beaver-builder-support', fl_welcome_utm( 'settings-welcome-support' ) );
 
15
  $faqs_url = FLBuilderModel::get_store_url( 'frequently-asked-questions', fl_welcome_utm( 'settings-welcome-faqs' ) );
16
  $forums_url = FLBuilderModel::get_store_url( 'support', fl_welcome_utm( 'settings-welcome-forums' ) );
17
+ $docs_url = 'http://kb.wpbeaverbuilder.com/';
18
 
19
  ?>
20
  <div id="fl-welcome-form" class="fl-settings-form">
68
 
69
  <div class="fl-welcome-col">
70
 
71
+ <h4><?php _e('What\'s New in Beaver Builder 1.9 Shasta', 'fl-builder'); ?></h4>
72
 
73
+ <p><?php _e('Beaver Builder 1.9 is out and it has some epic new features:', 'fl-builder'); ?></p>
74
 
75
  <ul>
76
+ <li><?php _e('The ability to drag, drop and nest columns.', 'fl-builder'); ?></li>
77
+ <li><?php _e('A revamped editor with more accurate dragging and dropping.', 'fl-builder'); ?></li>
78
+ <li><?php _e('Responsive settings for margins, paddings and borders.', 'fl-builder'); ?></li>
79
+ <li><?php _e('New content page templates available in the template selector.', 'fl-builder'); ?></li>
80
  </ul>
81
 
82
  <p><?php printf( __('There\'s a whole lot more, too! Read about everything else on our <a href="%s" target="_blank">update post</a> or <a href="%s" target="_blank">change logs</a>.', 'fl-builder'), $blog_post_url, $change_logs_url ); ?></p>
includes/column-css.php CHANGED
@@ -6,7 +6,7 @@
6
  .fl-node-<?php echo $col->node; ?> {
7
  color: #<?php echo $col->settings->text_color; ?>;
8
  }
9
- .fl-builder-content .fl-node-<?php echo $col->node; ?> *:not(input):not(textarea):not(a):not(h1):not(h2):not(h3):not(h4):not(h5):not(h6):not(.fl-menu-mobile-toggle) {
10
  color: inherit;
11
  }
12
  <?php endif; ?>
@@ -90,10 +90,7 @@
90
  <?php if(!empty($col->settings->border_type)) : // Border ?>
91
  .fl-builder-content .fl-node-<?php echo $col->node; ?> > .fl-col-content {
92
  border-style: <?php echo $col->settings->border_type; ?>;
93
- border-top-width: <?php echo is_numeric($col->settings->border_top) ? $col->settings->border_top : '0'; ?>px;
94
- border-bottom-width: <?php echo is_numeric($col->settings->border_bottom) ? $col->settings->border_bottom : '0'; ?>px;
95
- border-left-width: <?php echo is_numeric($col->settings->border_left) ? $col->settings->border_left : '0'; ?>px;
96
- border-right-width: <?php echo is_numeric($col->settings->border_right) ? $col->settings->border_right : '0'; ?>px;
97
  <?php if(!empty($col->settings->border_color)) : ?>
98
  border-color: #<?php echo $col->settings->border_color; ?>;
99
  border-color: rgba(<?php echo implode(',', FLBuilderColor::hex_to_rgb($col->settings->border_color)) ?>, <?php echo $col->settings->border_opacity/100; ?>);
6
  .fl-node-<?php echo $col->node; ?> {
7
  color: #<?php echo $col->settings->text_color; ?>;
8
  }
9
+ .fl-builder-content .fl-node-<?php echo $col->node; ?> *:not(input):not(textarea):not(select):not(a):not(h1):not(h2):not(h3):not(h4):not(h5):not(h6):not(.fl-heading-text):not(.fl-menu-mobile-toggle) {
10
  color: inherit;
11
  }
12
  <?php endif; ?>
90
  <?php if(!empty($col->settings->border_type)) : // Border ?>
91
  .fl-builder-content .fl-node-<?php echo $col->node; ?> > .fl-col-content {
92
  border-style: <?php echo $col->settings->border_type; ?>;
93
+ border-width: 0;
 
 
 
94
  <?php if(!empty($col->settings->border_color)) : ?>
95
  border-color: #<?php echo $col->settings->border_color; ?>;
96
  border-color: rgba(<?php echo implode(',', FLBuilderColor::hex_to_rgb($col->settings->border_color)) ?>, <?php echo $col->settings->border_opacity/100; ?>);
includes/column-settings.php CHANGED
@@ -23,15 +23,15 @@ FLBuilder::register_settings_form('col', array(
23
  'equal_height' => array(
24
  'type' => 'select',
25
  'label' => __('Equalize Column Heights', 'fl-builder'),
26
- 'help' => __('Setting this to yes will make all of the columns in this group the same height regardless of how much content is in each of them.', 'fl-builder'),
27
  'default' => 'no',
28
  'options' => array(
29
  'no' => __( 'No', 'fl-builder' ),
30
  'yes' => __( 'Yes', 'fl-builder' ),
31
  ),
32
  'toggle' => array(
33
- 'yes' => array(
34
- 'fields' => array('content_alignment')
35
  )
36
  ),
37
  'preview' => array(
@@ -39,13 +39,13 @@ FLBuilder::register_settings_form('col', array(
39
  )
40
  ),
41
  'content_alignment' => array(
42
- 'type' => 'select',
43
- 'label' => __('Content Alignment', 'fl-builder'),
44
- 'default' => 'top',
45
- 'options' => array(
46
- 'top' => __( 'Top', 'fl-builder' ),
47
- 'center' => __( 'Center', 'fl-builder' ),
48
- 'bottom' => __( 'Bottom', 'fl-builder' ),
49
  ),
50
  'preview' => array(
51
  'type' => 'none'
@@ -294,54 +294,70 @@ FLBuilder::register_settings_form('col', array(
294
  )
295
  ),
296
  'border_top' => array(
297
- 'type' => 'text',
298
- 'label' => __('Top Width', 'fl-builder'),
299
- 'default' => '1',
300
- 'description' => 'px',
301
- 'maxlength' => '3',
302
- 'size' => '5',
303
- 'placeholder' => '0',
304
- 'preview' => array(
305
- 'type' => 'none'
 
 
 
 
306
  )
307
  ),
308
  'border_bottom' => array(
309
- 'type' => 'text',
310
- 'label' => __('Bottom Width', 'fl-builder'),
311
- 'default' => '1',
312
- 'description' => 'px',
313
- 'maxlength' => '3',
314
- 'size' => '5',
315
- 'placeholder' => '0',
316
- 'preview' => array(
317
- 'type' => 'none'
 
 
 
 
318
  )
319
  ),
320
  'border_left' => array(
321
- 'type' => 'text',
322
- 'label' => __('Left Width', 'fl-builder'),
323
- 'default' => '1',
324
- 'description' => 'px',
325
- 'maxlength' => '3',
326
- 'size' => '5',
327
- 'placeholder' => '0',
328
- 'preview' => array(
329
- 'type' => 'none'
 
 
 
 
330
  )
331
  ),
332
  'border_right' => array(
333
- 'type' => 'text',
334
- 'label' => __('Right Width', 'fl-builder'),
335
- 'default' => '1',
336
- 'description' => 'px',
337
- 'maxlength' => '3',
338
- 'size' => '5',
339
- 'placeholder' => '0',
340
- 'preview' => array(
341
- 'type' => 'none'
 
 
 
 
342
  )
343
- )
344
- )
345
  ),
346
  )
347
  ),
@@ -351,108 +367,92 @@ FLBuilder::register_settings_form('col', array(
351
  'margins' => array(
352
  'title' => __('Margins', 'fl-builder'),
353
  'fields' => array(
354
- 'margin_top' => array(
355
- 'type' => 'text',
356
- 'label' => __( 'Top', 'fl-builder' ),
357
- 'default' => '',
358
- 'description' => 'px',
359
- 'maxlength' => '4',
360
- 'size' => '5',
361
- 'placeholder' => '0',
362
- 'preview' => array(
363
- 'type' => 'none'
364
- )
365
  ),
366
  'margin_bottom' => array(
367
- 'type' => 'text',
368
- 'label' => __( 'Bottom', 'fl-builder' ),
369
- 'default' => '',
370
- 'description' => 'px',
371
- 'maxlength' => '4',
372
- 'size' => '5',
373
- 'placeholder' => '0',
374
- 'preview' => array(
375
- 'type' => 'none'
376
- )
377
  ),
378
- 'margin_left' => array(
379
- 'type' => 'text',
380
- 'label' => __( 'Left', 'fl-builder' ),
381
- 'default' => '',
382
- 'description' => 'px',
383
- 'maxlength' => '4',
384
- 'size' => '5',
385
- 'placeholder' => '0',
386
- 'preview' => array(
387
- 'type' => 'none'
388
- )
389
  ),
390
- 'margin_right' => array(
391
- 'type' => 'text',
392
- 'label' => __( 'Right', 'fl-builder' ),
393
- 'default' => '',
394
- 'description' => 'px',
395
- 'maxlength' => '4',
396
- 'size' => '5',
397
- 'placeholder' => '0',
398
- 'preview' => array(
399
- 'type' => 'none'
400
- )
401
- )
402
- )
403
  ),
404
  'padding' => array(
405
  'title' => __('Padding', 'fl-builder'),
406
  'fields' => array(
407
- 'padding_top' => array(
408
- 'type' => 'text',
409
- 'label' => __( 'Top', 'fl-builder' ),
410
- 'default' => '',
411
- 'description' => 'px',
412
- 'maxlength' => '4',
413
- 'size' => '5',
414
- 'placeholder' => '0',
415
- 'preview' => array(
416
- 'type' => 'none'
417
- )
418
  ),
419
  'padding_bottom' => array(
420
- 'type' => 'text',
421
- 'label' => __( 'Bottom', 'fl-builder' ),
422
- 'default' => '',
423
- 'description' => 'px',
424
- 'maxlength' => '4',
425
- 'size' => '5',
426
- 'placeholder' => '0',
427
- 'preview' => array(
428
- 'type' => 'none'
429
- )
430
  ),
431
- 'padding_left' => array(
432
- 'type' => 'text',
433
- 'label' => __( 'Left', 'fl-builder' ),
434
- 'default' => '',
435
- 'description' => 'px',
436
- 'maxlength' => '4',
437
- 'size' => '5',
438
- 'placeholder' => '0',
439
- 'preview' => array(
440
- 'type' => 'none'
441
- )
442
  ),
443
  'padding_right' => array(
444
- 'type' => 'text',
445
- 'label' => __( 'Right', 'fl-builder' ),
446
- 'default' => '',
447
- 'description' => 'px',
448
- 'maxlength' => '4',
449
- 'size' => '5',
450
- 'placeholder' => '0',
451
- 'preview' => array(
452
- 'type' => 'none'
453
- )
454
- )
455
- )
456
  ),
457
  'responsive' => array(
458
  'title' => __('Responsive Layout', 'fl-builder'),
@@ -533,7 +533,7 @@ FLBuilder::register_settings_form('col', array(
533
  'type' => 'select',
534
  'label' => __('Stacking Order', 'fl-builder'),
535
  'help' => __( 'The order of the columns in this group when they are stacked for small devices.', 'fl-builder' ),
536
- 'default' => 'default',
537
  'options' => array(
538
  'default' => __('Default', 'fl-builder'),
539
  'reversed' => __('Reversed', 'fl-builder'),
@@ -541,7 +541,7 @@ FLBuilder::register_settings_form('col', array(
541
  'preview' => array(
542
  'type' => 'none'
543
  )
544
- ),
545
  )
546
  ),
547
  'visibility' => array(
@@ -551,14 +551,14 @@ FLBuilder::register_settings_form('col', array(
551
  'type' => 'select',
552
  'label' => __('Display', 'fl-builder'),
553
  'options' => array(
554
- '' => __('Always', 'fl-builder'),
555
  'logged_out' => __('Logged Out User', 'fl-builder'),
556
  'logged_in' => __('Logged In User', 'fl-builder'),
557
  '0' => __('Never', 'fl-builder'),
558
  ),
559
- 'toggle' => array(
560
- 'logged_in' => array(
561
- 'fields' => array('visibility_user_capability')
562
  )
563
  ),
564
  'preview' => array(
@@ -566,11 +566,11 @@ FLBuilder::register_settings_form('col', array(
566
  )
567
  ),
568
  'visibility_user_capability' => array(
569
- 'type' => 'text',
570
- 'label' => __('User Capability', 'fl-builder'),
571
- 'description' => sprintf( __( 'Optional. Set the <a%s>capability</a> required for users to view this column.', 'fl-builder' ), ' href="http://codex.wordpress.org/Roles_and_Capabilities#Capability_vs._Role_Table" target="_blank"' ),
572
- 'preview' => array(
573
- 'type' => 'none'
574
  ),
575
  )
576
  )
@@ -599,4 +599,4 @@ FLBuilder::register_settings_form('col', array(
599
  )
600
  )
601
  )
602
- ));
23
  'equal_height' => array(
24
  'type' => 'select',
25
  'label' => __('Equalize Column Heights', 'fl-builder'),
26
+ 'help' => __('Setting this to yes will make all of the columns in this group the same height regardless of how much content is in each of them.', 'fl-builder'),
27
  'default' => 'no',
28
  'options' => array(
29
  'no' => __( 'No', 'fl-builder' ),
30
  'yes' => __( 'Yes', 'fl-builder' ),
31
  ),
32
  'toggle' => array(
33
+ 'yes' => array(
34
+ 'fields' => array('content_alignment')
35
  )
36
  ),
37
  'preview' => array(
39
  )
40
  ),
41
  'content_alignment' => array(
42
+ 'type' => 'select',
43
+ 'label' => __('Content Alignment', 'fl-builder'),
44
+ 'default' => 'top',
45
+ 'options' => array(
46
+ 'top' => __( 'Top', 'fl-builder' ),
47
+ 'center' => __( 'Center', 'fl-builder' ),
48
+ 'bottom' => __( 'Bottom', 'fl-builder' ),
49
  ),
50
  'preview' => array(
51
  'type' => 'none'
294
  )
295
  ),
296
  'border_top' => array(
297
+ 'type' => 'unit',
298
+ 'label' => __( 'Top Width', 'fl-builder' ),
299
+ 'default' => '1',
300
+ 'description' => 'px',
301
+ 'preview' => array(
302
+ 'type' => 'none',
303
+ ),
304
+ 'responsive' => array(
305
+ 'placeholder' => array(
306
+ 'default' => '0',
307
+ 'medium' => '',
308
+ 'responsive' => '',
309
+ )
310
  )
311
  ),
312
  'border_bottom' => array(
313
+ 'type' => 'unit',
314
+ 'label' => __( 'Bottom Width', 'fl-builder' ),
315
+ 'default' => '1',
316
+ 'description' => 'px',
317
+ 'preview' => array(
318
+ 'type' => 'none',
319
+ ),
320
+ 'responsive' => array(
321
+ 'placeholder' => array(
322
+ 'default' => '0',
323
+ 'medium' => '',
324
+ 'responsive' => '',
325
+ )
326
  )
327
  ),
328
  'border_left' => array(
329
+ 'type' => 'unit',
330
+ 'label' => __( 'Left Width', 'fl-builder' ),
331
+ 'default' => '1',
332
+ 'description' => 'px',
333
+ 'preview' => array(
334
+ 'type' => 'none',
335
+ ),
336
+ 'responsive' => array(
337
+ 'placeholder' => array(
338
+ 'default' => '0',
339
+ 'medium' => '',
340
+ 'responsive' => '',
341
+ )
342
  )
343
  ),
344
  'border_right' => array(
345
+ 'type' => 'unit',
346
+ 'label' => __( 'Right Width', 'fl-builder' ),
347
+ 'default' => '1',
348
+ 'description' => 'px',
349
+ 'preview' => array(
350
+ 'type' => 'none',
351
+ ),
352
+ 'responsive' => array(
353
+ 'placeholder' => array(
354
+ 'default' => '0',
355
+ 'medium' => '',
356
+ 'responsive' => '',
357
+ )
358
  )
359
+ ),
360
+ ),
361
  ),
362
  )
363
  ),
367
  'margins' => array(
368
  'title' => __('Margins', 'fl-builder'),
369
  'fields' => array(
370
+ 'margin_top' => array(
371
+ 'type' => 'unit',
372
+ 'label' => __( 'Top', 'fl-builder' ),
373
+ 'description' => 'px',
374
+ 'preview' => array(
375
+ 'type' => 'none',
376
+ ),
377
+ 'placeholder' => '0',
378
+ 'responsive' => true
 
 
379
  ),
380
  'margin_bottom' => array(
381
+ 'type' => 'unit',
382
+ 'label' => __( 'Bottom', 'fl-builder' ),
383
+ 'description' => 'px',
384
+ 'preview' => array(
385
+ 'type' => 'none',
386
+ ),
387
+ 'placeholder' => '0',
388
+ 'responsive' => true
 
 
389
  ),
390
+ 'margin_left' => array(
391
+ 'type' => 'unit',
392
+ 'label' => __( 'Left', 'fl-builder' ),
393
+ 'description' => 'px',
394
+ 'preview' => array(
395
+ 'type' => 'none',
396
+ ),
397
+ 'placeholder' => '0',
398
+ 'responsive' => true
 
 
399
  ),
400
+ 'margin_right' => array(
401
+ 'type' => 'unit',
402
+ 'label' => __( 'Right', 'fl-builder' ),
403
+ 'description' => 'px',
404
+ 'preview' => array(
405
+ 'type' => 'none',
406
+ ),
407
+ 'placeholder' => '0',
408
+ 'responsive' => true
409
+ ),
410
+ ),
 
 
411
  ),
412
  'padding' => array(
413
  'title' => __('Padding', 'fl-builder'),
414
  'fields' => array(
415
+ 'padding_top' => array(
416
+ 'type' => 'unit',
417
+ 'label' => __( 'Top', 'fl-builder' ),
418
+ 'description' => 'px',
419
+ 'preview' => array(
420
+ 'type' => 'none',
421
+ ),
422
+ 'placeholder' => '0',
423
+ 'responsive' => true
 
 
424
  ),
425
  'padding_bottom' => array(
426
+ 'type' => 'unit',
427
+ 'label' => __( 'Bottom', 'fl-builder' ),
428
+ 'description' => 'px',
429
+ 'preview' => array(
430
+ 'type' => 'none',
431
+ ),
432
+ 'placeholder' => '0',
433
+ 'responsive' => true
 
 
434
  ),
435
+ 'padding_left' => array(
436
+ 'type' => 'unit',
437
+ 'label' => __( 'Left', 'fl-builder' ),
438
+ 'description' => 'px',
439
+ 'preview' => array(
440
+ 'type' => 'none',
441
+ ),
442
+ 'placeholder' => '0',
443
+ 'responsive' => true
 
 
444
  ),
445
  'padding_right' => array(
446
+ 'type' => 'unit',
447
+ 'label' => __( 'Right', 'fl-builder' ),
448
+ 'description' => 'px',
449
+ 'preview' => array(
450
+ 'type' => 'none',
451
+ ),
452
+ 'placeholder' => '0',
453
+ 'responsive' => true
454
+ ),
455
+ ),
 
 
456
  ),
457
  'responsive' => array(
458
  'title' => __('Responsive Layout', 'fl-builder'),
533
  'type' => 'select',
534
  'label' => __('Stacking Order', 'fl-builder'),
535
  'help' => __( 'The order of the columns in this group when they are stacked for small devices.', 'fl-builder' ),
536
+ 'default' => 'default',
537
  'options' => array(
538
  'default' => __('Default', 'fl-builder'),
539
  'reversed' => __('Reversed', 'fl-builder'),
541
  'preview' => array(
542
  'type' => 'none'
543
  )
544
+ )
545
  )
546
  ),
547
  'visibility' => array(
551
  'type' => 'select',
552
  'label' => __('Display', 'fl-builder'),
553
  'options' => array(
554
+ '' => __('Always', 'fl-builder'),
555
  'logged_out' => __('Logged Out User', 'fl-builder'),
556
  'logged_in' => __('Logged In User', 'fl-builder'),
557
  '0' => __('Never', 'fl-builder'),
558
  ),
559
+ 'toggle' => array(
560
+ 'logged_in' => array(
561
+ 'fields' => array('visibility_user_capability')
562
  )
563
  ),
564
  'preview' => array(
566
  )
567
  ),
568
  'visibility_user_capability' => array(
569
+ 'type' => 'text',
570
+ 'label' => __('User Capability', 'fl-builder'),
571
+ 'description' => sprintf( __( 'Optional. Set the <a%s>capability</a> required for users to view this column.', 'fl-builder' ), ' href="http://codex.wordpress.org/Roles_and_Capabilities#Capability_vs._Role_Table" target="_blank"' ),
572
+ 'preview' => array(
573
+ 'type' => 'none'
574
  ),
575
  )
576
  )
599
  )
600
  )
601
  )
602
+ ));
includes/field-color.php CHANGED
@@ -1,5 +1,5 @@
1
  <div class="fl-color-picker<?php if(isset($field['class'])) echo ' ' . $field['class']; ?>">
2
- <div class="fl-color-picker-color<?php if( empty( $value ) ) echo ' fl-color-picker-empty' ?>"></div>
3
  <?php if(isset($field['show_reset']) && $field['show_reset']) : ?>
4
  <div class="fl-color-picker-clear"><div class="fl-color-picker-icon-remove"></div></div>
5
  <?php endif; ?>
1
  <div class="fl-color-picker<?php if(isset($field['class'])) echo ' ' . $field['class']; ?>">
2
+ <div class="fl-color-picker-color<?php if( empty( $value ) ) echo ' fl-color-picker-empty' ?><?php if( isset($field['show_alpha']) && $field['show_alpha']) echo ' fl-color-picker-alpha-enabled' ?>"></div>
3
  <?php if(isset($field['show_reset']) && $field['show_reset']) : ?>
4
  <div class="fl-color-picker-clear"><div class="fl-color-picker-icon-remove"></div></div>
5
  <?php endif; ?>
includes/field-text.php CHANGED
@@ -1,4 +1,4 @@
1
- <input type="text" name="<?php echo $name; ?>" value="<?php echo htmlspecialchars($value); ?>" class="text<?php if(isset($field['class'])) echo ' '. $field['class']; if(!isset($field['size'])) echo ' text-full'; ?>" <?php if(isset($field['placeholder'])) echo ' placeholder="'. $field['placeholder'] .'"'; if(isset($field['maxlength'])) echo ' maxlength="'. $field['maxlength'] .'"'; if(isset($field['size'])) echo ' size="'. $field['size'] .'"'; ?> />
2
 
3
  <?php
4
 
1
+ <input type="text" name="<?php echo $name; ?>" value="<?php echo esc_attr($value); ?>" class="text<?php if(isset($field['class'])) echo ' '. $field['class']; if(!isset($field['size'])) echo ' text-full'; ?>" <?php if(isset($field['placeholder'])) echo ' placeholder="'. $field['placeholder'] .'"'; if(isset($field['maxlength'])) echo ' maxlength="'. $field['maxlength'] .'"'; if(isset($field['size'])) echo ' size="'. $field['size'] .'"'; ?> />
2
 
3
  <?php
4
 
includes/field-unit.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <input
2
+ type="number"
3
+ name="<?php esc_attr_e( $name ); ?>"
4
+ value="<?php esc_attr_e( $value ); ?>"
5
+ placeholder="<?php if ( isset( $field['placeholder'] ) ) esc_attr_e( $field['placeholder'] ); ?>"
6
+ />
includes/field.php CHANGED
@@ -1,46 +1,76 @@
1
  <?php if(empty($field['label'])) : ?>
2
  <td colspan="2">
3
  <?php else : ?>
4
- <th>
5
- <label for="<?php echo $name; ?>">
6
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
- if ( 'button' == $field['type'] ) {
9
- echo '&nbsp;';
10
  }
11
- else {
12
-
13
- echo $field['label'];
14
 
15
- if ( isset( $i ) ) {
16
- echo ' <span class="fl-builder-field-index">' . ( $i + 1 ) . '</span>';
17
- }
 
 
 
 
 
 
 
 
 
 
 
18
  }
19
 
20
- ?>
21
- <?php if(isset($field['help'])) : ?>
22
- <span class="fl-help-tooltip">
23
- <i class="fl-help-tooltip-icon fa fa-question-circle"></i>
24
- <span class="fl-help-tooltip-text"><?php echo $field['help']; ?></span>
25
- </span>
26
- <?php endif; ?>
27
- </label>
28
- </th>
29
- <td>
30
- <?php endif; ?>
31
- <?php
32
 
33
- $field_file = FL_BUILDER_DIR . 'includes/field-' . $field['type'] . '.php';
34
-
35
- if(file_exists($field_file)) {
36
- do_action('fl_builder_before_control_' . $field['type'], $name, $value, $field, $settings);
37
- include $field_file;
38
- do_action('fl_builder_after_control_' . $field['type'], $name, $value, $field, $settings);
39
- }
40
- else {
41
- do_action('fl_builder_before_control_' . $field['type'], $name, $value, $field, $settings);
42
- do_action('fl_builder_control_' . $field['type'], $name, $value, $field, $settings);
43
- do_action('fl_builder_after_control_' . $field['type'], $name, $value, $field, $settings);
 
 
 
44
  }
45
 
46
  ?>
1
  <?php if(empty($field['label'])) : ?>
2
  <td colspan="2">
3
  <?php else : ?>
4
+ <th>
5
+ <label for="<?php echo $name; ?>">
6
+ <?php
7
+
8
+ if ( 'button' == $field['type'] ) {
9
+ echo '&nbsp;';
10
+ }
11
+ else {
12
+
13
+ echo $field['label'];
14
+
15
+ if ( isset( $i ) ) {
16
+ echo ' <span class="fl-builder-field-index">' . ( $i + 1 ) . '</span>';
17
+ }
18
+ }
19
+
20
+ ?>
21
+ <?php if(isset($field['help'])) : ?>
22
+ <span class="fl-help-tooltip">
23
+ <i class="fl-help-tooltip-icon fa fa-question-circle"></i>
24
+ <span class="fl-help-tooltip-text"><?php echo $field['help']; ?></span>
25
+ </span>
26
+ <?php endif; ?>
27
+ </label>
28
+ </th>
29
+ <td>
30
+ <?php endif; ?>
31
+ <?php if ( $responsive ) : ?>
32
+ <i class="fl-field-responsive-toggle dashicons dashicons-desktop" data-mode="default"></i>
33
+ <?php endif; ?>
34
+ <?php
35
+
36
+ foreach ( array( 'default', 'medium', 'responsive' ) as $device ) {
37
 
38
+ if ( 'default' != $device && ! $responsive ) {
39
+ continue;
40
  }
 
 
 
41
 
42
+ if ( $responsive ) {
43
+
44
+ $name = 'default' == $device ? $root_name : $root_name . '_' . $device;
45
+ $value = isset( $settings->$name ) ? $settings->$name : '';
46
+
47
+ echo '<div class="fl-field-responsive-setting fl-field-responsive-setting-' . $device . '" data-device="' . $device . '">';
48
+
49
+ if ( is_array( $responsive ) ) {
50
+ foreach ( $responsive as $responsive_key => $responsive_var ) {
51
+ if ( is_array( $responsive_var ) && isset( $responsive_var[ $device ] ) ) {
52
+ $field[ $responsive_key ] = $responsive_var[ $device ];
53
+ }
54
+ }
55
+ }
56
  }
57
 
58
+ $field_file = FL_BUILDER_DIR . 'includes/field-' . $field['type'] . '.php';
 
 
 
 
 
 
 
 
 
 
 
59
 
60
+ if(file_exists($field_file)) {
61
+ do_action('fl_builder_before_control_' . $field['type'], $name, $value, $field, $settings);
62
+ include $field_file;
63
+ do_action('fl_builder_after_control_' . $field['type'], $name, $value, $field, $settings);
64
+ }
65
+ else {
66
+ do_action('fl_builder_before_control_' . $field['type'], $name, $value, $field, $settings);
67
+ do_action('fl_builder_control_' . $field['type'], $name, $value, $field, $settings);
68
+ do_action('fl_builder_after_control_' . $field['type'], $name, $value, $field, $settings);
69
+ }
70
+
71
+ if ( $responsive ) {
72
+ echo '</div>';
73
+ }
74
  }
75
 
76
  ?>
includes/global-settings.php CHANGED
@@ -37,19 +37,19 @@ FLBuilder::register_settings_form('global', array(
37
  'title' => __('Rows', 'fl-builder'),
38
  'fields' => array(
39
  'row_margins' => array(
40
- 'type' => 'text',
41
  'label' => __('Margins', 'fl-builder'),
42
  'default' => '0',
43
- 'maxlength' => '3',
44
- 'size' => '5',
45
  'description' => 'px'
46
  ),
47
  'row_padding' => array(
48
- 'type' => 'text',
49
  'label' => __('Padding', 'fl-builder'),
50
  'default' => '20',
51
- 'maxlength' => '3',
52
- 'size' => '5',
53
  'description' => 'px'
54
  ),
55
  'row_width' => array(
@@ -59,7 +59,7 @@ FLBuilder::register_settings_form('global', array(
59
  'maxlength' => '4',
60
  'size' => '5',
61
  'description' => 'px',
62
- 'help' => __('All rows will default to this width. You can override this and make a row full width in the settings for each row.', 'fl-builder')
63
  ),
64
  'row_width_default' => array(
65
  'type' => 'select',
@@ -90,11 +90,11 @@ FLBuilder::register_settings_form('global', array(
90
  'title' => __('Modules', 'fl-builder'),
91
  'fields' => array(
92
  'module_margins' => array(
93
- 'type' => 'text',
94
  'label' => __('Margins', 'fl-builder'),
95
  'default' => '20',
96
- 'maxlength' => '3',
97
- 'size' => '5',
98
  'description' => 'px'
99
  )
100
  )
37
  'title' => __('Rows', 'fl-builder'),
38
  'fields' => array(
39
  'row_margins' => array(
40
+ 'type' => 'unit',
41
  'label' => __('Margins', 'fl-builder'),
42
  'default' => '0',
43
+ 'placeholder' => '0',
44
+ 'responsive' => true,
45
  'description' => 'px'
46
  ),
47
  'row_padding' => array(
48
+ 'type' => 'unit',
49
  'label' => __('Padding', 'fl-builder'),
50
  'default' => '20',
51
+ 'placeholder' => '0',
52
+ 'responsive' => true,
53
  'description' => 'px'
54
  ),
55
  'row_width' => array(
59
  'maxlength' => '4',
60
  'size' => '5',
61
  'description' => 'px',
62
+ 'help' => __('All rows will default to this width. You can override this and make a row full width in the settings for each row.', 'fl-builder')
63
  ),
64
  'row_width_default' => array(
65
  'type' => 'select',
90
  'title' => __('Modules', 'fl-builder'),
91
  'fields' => array(
92
  'module_margins' => array(
93
+ 'type' => 'unit',
94
  'label' => __('Margins', 'fl-builder'),
95
  'default' => '20',
96
+ 'placeholder' => '0',
97
+ 'responsive' => true,
98
  'description' => 'px'
99
  )
100
  )
includes/module-settings.php CHANGED
@@ -8,54 +8,66 @@ FLBuilder::register_settings_form('module_advanced', array(
8
  'margins' => array(
9
  'title' => __('Margins', 'fl-builder'),
10
  'fields' => array(
11
- 'margin_top' => array(
12
- 'type' => 'text',
13
- 'label' => __( 'Top', 'fl-builder' ),
14
- 'default' => '',
15
- 'description' => 'px',
16
- 'maxlength' => '4',
17
- 'size' => '5',
18
- 'placeholder' => $global_settings->module_margins,
19
- 'preview' => array(
20
- 'type' => 'none'
 
 
 
21
  )
22
  ),
23
  'margin_bottom' => array(
24
- 'type' => 'text',
25
- 'label' => __( 'Bottom', 'fl-builder' ),
26
- 'default' => '',
27
- 'description' => 'px',
28
- 'maxlength' => '4',
29
- 'size' => '5',
30
- 'placeholder' => $global_settings->module_margins,
31
- 'preview' => array(
32
- 'type' => 'none'
 
 
 
33
  )
34
  ),
35
- 'margin_left' => array(
36
- 'type' => 'text',
37
- 'label' => __( 'Left', 'fl-builder' ),
38
- 'default' => '',
39
- 'description' => 'px',
40
- 'maxlength' => '4',
41
- 'size' => '5',
42
- 'placeholder' => $global_settings->module_margins,
43
- 'preview' => array(
44
- 'type' => 'none'
 
 
 
45
  )
46
  ),
47
- 'margin_right' => array(
48
- 'type' => 'text',
49
- 'label' => __( 'Right', 'fl-builder' ),
50
- 'default' => '',
51
- 'description' => 'px',
52
- 'maxlength' => '4',
53
- 'size' => '5',
54
- 'placeholder' => $global_settings->module_margins,
55
- 'preview' => array(
56
- 'type' => 'none'
 
 
 
57
  )
58
- )
59
  )
60
  ),
61
  'responsive' => array(
@@ -76,7 +88,7 @@ FLBuilder::register_settings_form('module_advanced', array(
76
  'preview' => array(
77
  'type' => 'none'
78
  )
79
- )
80
  )
81
  ),
82
  'visibility' => array(
@@ -164,4 +176,4 @@ FLBuilder::register_settings_form('module_advanced', array(
164
  )
165
  )
166
  )
167
- ));
8
  'margins' => array(
9
  'title' => __('Margins', 'fl-builder'),
10
  'fields' => array(
11
+ 'margin_top' => array(
12
+ 'type' => 'unit',
13
+ 'label' => __( 'Top', 'fl-builder' ),
14
+ 'description' => 'px',
15
+ 'preview' => array(
16
+ 'type' => 'none',
17
+ ),
18
+ 'responsive' => array(
19
+ 'placeholder' => array(
20
+ 'default' => ( isset( $global_settings->module_margins ) ) ? $global_settings->module_margins : '',
21
+ 'medium' => ( isset( $global_settings->module_margins_medium ) ) ? $global_settings->module_margins_medium : '',
22
+ 'responsive' => ( isset( $global_settings->module_margins_responsive ) ) ? $global_settings->module_margins_responsive : '',
23
+ )
24
  )
25
  ),
26
  'margin_bottom' => array(
27
+ 'type' => 'unit',
28
+ 'label' => __( 'Bottom', 'fl-builder' ),
29
+ 'description' => 'px',
30
+ 'preview' => array(
31
+ 'type' => 'none',
32
+ ),
33
+ 'responsive' => array(
34
+ 'placeholder' => array(
35
+ 'default' => ( isset( $global_settings->module_margins ) ) ? $global_settings->module_margins : '',
36
+ 'medium' => ( isset( $global_settings->module_margins_medium ) ) ? $global_settings->module_margins_medium : '',
37
+ 'responsive' => ( isset( $global_settings->module_margins_responsive ) ) ? $global_settings->module_margins_responsive : '',
38
+ )
39
  )
40
  ),
41
+ 'margin_left' => array(
42
+ 'type' => 'unit',
43
+ 'label' => __( 'Left', 'fl-builder' ),
44
+ 'description' => 'px',
45
+ 'preview' => array(
46
+ 'type' => 'none',
47
+ ),
48
+ 'responsive' => array(
49
+ 'placeholder' => array(
50
+ 'default' => ( isset( $global_settings->module_margins ) ) ? $global_settings->module_margins : '',
51
+ 'medium' => ( isset( $global_settings->module_margins_medium ) ) ? $global_settings->module_margins_medium : '',
52
+ 'responsive' => ( isset( $global_settings->module_margins_responsive ) ) ? $global_settings->module_margins_responsive : '',
53
+ )
54
  )
55
  ),
56
+ 'margin_right' => array(
57
+ 'type' => 'unit',
58
+ 'label' => __( 'Right', 'fl-builder' ),
59
+ 'description' => 'px',
60
+ 'preview' => array(
61
+ 'type' => 'none',
62
+ ),
63
+ 'responsive' => array(
64
+ 'placeholder' => array(
65
+ 'default' => ( isset( $global_settings->module_margins ) ) ? $global_settings->module_margins : '',
66
+ 'medium' => ( isset( $global_settings->module_margins_medium ) ) ? $global_settings->module_margins_medium : '',
67
+ 'responsive' => ( isset( $global_settings->module_margins_responsive ) ) ? $global_settings->module_margins_responsive : '',
68
+ )
69
  )
70
+ ),
71
  )
72
  ),
73
  'responsive' => array(
88
  'preview' => array(
89
  'type' => 'none'
90
  )
91
+ ),
92
  )
93
  ),
94
  'visibility' => array(
176
  )
177
  )
178
  )
179
+ ));
includes/row-css.php CHANGED
@@ -2,7 +2,7 @@
2
  .fl-node-<?php echo $row->node; ?> {
3
  color: #<?php echo $row->settings->text_color; ?>;
4
  }
5
- .fl-builder-content .fl-node-<?php echo $row->node; ?> *:not(input):not(textarea):not(a):not(h1):not(h2):not(h3):not(h4):not(h5):not(h6):not(.fl-menu-mobile-toggle) {
6
  color: inherit;
7
  }
8
  <?php endif; ?>
@@ -100,10 +100,7 @@
100
  <?php if(!empty($row->settings->border_type)) : // Border ?>
101
  .fl-node-<?php echo $row->node; ?> > .fl-row-content-wrap {
102
  border-style: <?php echo $row->settings->border_type; ?>;
103
- border-top-width: <?php echo is_numeric($row->settings->border_top) ? $row->settings->border_top : '0'; ?>px;
104
- border-bottom-width: <?php echo is_numeric($row->settings->border_bottom) ? $row->settings->border_bottom : '0'; ?>px;
105
- border-left-width: <?php echo is_numeric($row->settings->border_left) ? $row->settings->border_left : '0'; ?>px;
106
- border-right-width: <?php echo is_numeric($row->settings->border_right) ? $row->settings->border_right : '0'; ?>px;
107
  <?php if(!empty($row->settings->border_color)) : ?>
108
  border-color: #<?php echo $row->settings->border_color; ?>;
109
  border-color: rgba(<?php echo implode(',', FLBuilderColor::hex_to_rgb($row->settings->border_color)) ?>, <?php echo $row->settings->border_opacity/100; ?>);
2
  .fl-node-<?php echo $row->node; ?> {
3
  color: #<?php echo $row->settings->text_color; ?>;
4
  }
5
+ .fl-builder-content .fl-node-<?php echo $row->node; ?> *:not(input):not(textarea):not(select):not(a):not(h1):not(h2):not(h3):not(h4):not(h5):not(h6):not(.fl-heading-text):not(.fl-menu-mobile-toggle) {
6
  color: inherit;
7
  }
8
  <?php endif; ?>
100
  <?php if(!empty($row->settings->border_type)) : // Border ?>
101
  .fl-node-<?php echo $row->node; ?> > .fl-row-content-wrap {
102
  border-style: <?php echo $row->settings->border_type; ?>;
103
+ border-width: 0;
 
 
 
104
  <?php if(!empty($row->settings->border_color)) : ?>
105
  border-color: #<?php echo $row->settings->border_color; ?>;
106
  border-color: rgba(<?php echo implode(',', FLBuilderColor::hex_to_rgb($row->settings->border_color)) ?>, <?php echo $row->settings->border_opacity/100; ?>);
includes/row-settings.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
 
3
- $global_settings = FLBuilderModel::get_global_settings();
 
4
 
5
  FLBuilder::register_settings_form('row', array(
6
  'title' => __('Row Settings', 'fl-builder'),
@@ -540,54 +541,70 @@ FLBuilder::register_settings_form('row', array(
540
  )
541
  ),
542
  'border_top' => array(
543
- 'type' => 'text',
544
- 'label' => __('Top Width', 'fl-builder'),
545
- 'default' => '1',
546
- 'description' => 'px',
547
- 'maxlength' => '3',
548
- 'size' => '5',
549
- 'placeholder' => '0',
550
- 'preview' => array(
551
- 'type' => 'none'
 
 
 
 
552
  )
553
  ),
554
  'border_bottom' => array(
555
- 'type' => 'text',
556
- 'label' => __('Bottom Width', 'fl-builder'),
557
- 'default' => '1',
558
- 'description' => 'px',
559
- 'maxlength' => '3',
560
- 'size' => '5',
561
- 'placeholder' => '0',
562
- 'preview' => array(
563
- 'type' => 'none'
 
 
 
 
564
  )
565
  ),
566
  'border_left' => array(
567
- 'type' => 'text',
568
- 'label' => __('Left Width', 'fl-builder'),
569
- 'default' => '0',
570
- 'description' => 'px',
571
- 'maxlength' => '3',
572
- 'size' => '5',
573
- 'placeholder' => '0',
574
- 'preview' => array(
575
- 'type' => 'none'
 
 
 
 
576
  )
577
  ),
578
  'border_right' => array(
579
- 'type' => 'text',
580
- 'label' => __('Right Width', 'fl-builder'),
581
- 'default' => '0',
582
- 'description' => 'px',
583
- 'maxlength' => '3',
584
- 'size' => '5',
585
- 'placeholder' => '0',
586
- 'preview' => array(
587
- 'type' => 'none'
 
 
 
 
588
  )
589
- )
590
- )
591
  ),
592
  )
593
  ),
@@ -597,108 +614,132 @@ FLBuilder::register_settings_form('row', array(
597
  'margins' => array(
598
  'title' => __('Margins', 'fl-builder'),
599
  'fields' => array(
600
- 'margin_top' => array(
601
- 'type' => 'text',
602
- 'label' => __('Top', 'fl-builder'),
603
- 'default' => '',
604
- 'description' => 'px',
605
- 'maxlength' => '4',
606
- 'size' => '5',
607
- 'placeholder' => $global_settings->row_margins,
608
- 'preview' => array(
609
- 'type' => 'none'
 
 
 
610
  )
611
  ),
612
  'margin_bottom' => array(
613
- 'type' => 'text',
614
- 'label' => __('Bottom', 'fl-builder'),
615
- 'default' => '',
616
- 'description' => 'px',
617
- 'maxlength' => '4',
618
- 'size' => '5',
619
- 'placeholder' => $global_settings->row_margins,
620
- 'preview' => array(
621
- 'type' => 'none'
 
 
 
622
  )
623
  ),
624
- 'margin_left' => array(
625
- 'type' => 'text',
626
- 'label' => __('Left', 'fl-builder'),
627
- 'default' => '',
628
- 'description' => 'px',
629
- 'maxlength' => '4',
630
- 'size' => '5',
631
- 'placeholder' => $global_settings->row_margins,
632
- 'preview' => array(
633
- 'type' => 'none'
 
 
 
634
  )
635
  ),
636
- 'margin_right' => array(
637
- 'type' => 'text',
638
- 'label' => __('Right', 'fl-builder'),
639
- 'default' => '',
640
- 'description' => 'px',
641
- 'maxlength' => '4',
642
- 'size' => '5',
643
- 'placeholder' => $global_settings->row_margins,
644
- 'preview' => array(
645
- 'type' => 'none'
 
 
 
646
  )
647
- )
648
- )
649
  ),
650
  'padding' => array(
651
  'title' => __('Padding', 'fl-builder'),
652
  'fields' => array(
653
- 'padding_top' => array(
654
- 'type' => 'text',
655
- 'label' => __('Top', 'fl-builder'),
656
- 'default' => '',
657
- 'description' => 'px',
658
- 'maxlength' => '4',
659
- 'size' => '5',
660
- 'placeholder' => $global_settings->row_padding,
661
- 'preview' => array(
662
- 'type' => 'none'
 
 
 
663
  )
664
  ),
665
  'padding_bottom' => array(
666
- 'type' => 'text',
667
- 'label' => __('Bottom', 'fl-builder'),
668
- 'default' => '',
669
- 'description' => 'px',
670
- 'maxlength' => '4',
671
- 'size' => '5',
672
- 'placeholder' => $global_settings->row_padding,
673
- 'preview' => array(
674
- 'type' => 'none'
 
 
 
675
  )
676
  ),
677
- 'padding_left' => array(
678
- 'type' => 'text',
679
- 'label' => __('Left', 'fl-builder'),
680
- 'default' => '',
681
- 'description' => 'px',
682
- 'maxlength' => '4',
683
- 'size' => '5',
684
- 'placeholder' => $global_settings->row_padding,
685
- 'preview' => array(
686
- 'type' => 'none'
 
 
 
687
  )
688
  ),
689
  'padding_right' => array(
690
- 'type' => 'text',
691
- 'label' => __('Right', 'fl-builder'),
692
- 'default' => '',
693
- 'description' => 'px',
694
- 'maxlength' => '4',
695
- 'size' => '5',
696
- 'placeholder' => $global_settings->row_padding,
697
- 'preview' => array(
698
- 'type' => 'none'
 
 
 
699
  )
700
- )
701
- )
702
  ),
703
  'responsive' => array(
704
  'title' => __('Responsive Layout', 'fl-builder'),
1
  <?php
2
 
3
+ $global_settings = FLBuilderModel::get_global_settings();
4
+ $spacing_placeholders = FLBuilderModel::get_row_spacing_placeholders();
5
 
6
  FLBuilder::register_settings_form('row', array(
7
  'title' => __('Row Settings', 'fl-builder'),
541
  )
542
  ),
543
  'border_top' => array(
544
+ 'type' => 'unit',
545
+ 'label' => __( 'Top Width', 'fl-builder' ),
546
+ 'description' => 'px',
547
+ 'default' => '1',
548
+ 'preview' => array(
549
+ 'type' => 'none',
550
+ ),
551
+ 'responsive' => array(
552
+ 'placeholder' => array(
553
+ 'default' => '1',
554
+ 'medium' => '',
555
+ 'responsive' => '',
556
+ )
557
  )
558
  ),
559
  'border_bottom' => array(
560
+ 'type' => 'unit',
561
+ 'label' => __( 'Bottom Width', 'fl-builder' ),
562
+ 'description' => 'px',
563
+ 'default' => '1',
564
+ 'preview' => array(
565
+ 'type' => 'none',
566
+ ),
567
+ 'responsive' => array(
568
+ 'placeholder' => array(
569
+ 'default' => '1',
570
+ 'medium' => '',
571
+ 'responsive' => '',
572
+ )
573
  )
574
  ),
575
  'border_left' => array(
576
+ 'type' => 'unit',
577
+ 'label' => __( 'Left Width', 'fl-builder' ),
578
+ 'description' => 'px',
579
+ 'default' => '0',
580
+ 'preview' => array(
581
+ 'type' => 'none',
582
+ ),
583
+ 'responsive' => array(
584
+ 'placeholder' => array(
585
+ 'default' => '0',
586
+ 'medium' => '',
587
+ 'responsive' => '',
588
+ )
589
  )
590
  ),
591
  'border_right' => array(
592
+ 'type' => 'unit',
593
+ 'label' => __( 'Right Width', 'fl-builder' ),
594
+ 'description' => 'px',
595
+ 'default' => '0',
596
+ 'preview' => array(
597
+ 'type' => 'none',
598
+ ),
599
+ 'responsive' => array(
600
+ 'placeholder' => array(
601
+ 'default' => '0',
602
+ 'medium' => '',
603
+ 'responsive' => '',
604
+ )
605
  )
606
+ ),
607
+ ),
608
  ),
609
  )
610
  ),
614
  'margins' => array(
615
  'title' => __('Margins', 'fl-builder'),
616
  'fields' => array(
617
+ 'margin_top' => array(
618
+ 'type' => 'unit',
619
+ 'label' => __( 'Top', 'fl-builder' ),
620
+ 'description' => 'px',
621
+ 'preview' => array(
622
+ 'type' => 'none',
623
+ ),
624
+ 'responsive' => array(
625
+ 'placeholder' => array(
626
+ 'default' => $spacing_placeholders['row_margins'],
627
+ 'medium' => $spacing_placeholders['row_margins_medium'],
628
+ 'responsive' => $spacing_placeholders['row_margins_responsive'],
629
+ )
630
  )
631
  ),
632
  'margin_bottom' => array(
633
+ 'type' => 'unit',
634
+ 'label' => __( 'Bottom', 'fl-builder' ),
635
+ 'description' => 'px',
636
+ 'preview' => array(
637
+ 'type' => 'none',
638
+ ),
639
+ 'responsive' => array(
640
+ 'placeholder' => array(
641
+ 'default' => $spacing_placeholders['row_margins'],
642
+ 'medium' => $spacing_placeholders['row_margins_medium'],
643
+ 'responsive' => $spacing_placeholders['row_margins_responsive'],
644
+ )
645
  )
646
  ),
647
+ 'margin_left' => array(
648
+ 'type' => 'unit',
649
+ 'label' => __( 'Left', 'fl-builder' ),
650
+ 'description' => 'px',
651
+ 'preview' => array(
652
+ 'type' => 'none',
653
+ ),
654
+ 'responsive' => array(
655
+ 'placeholder' => array(
656
+ 'default' => $spacing_placeholders['row_margins'],
657
+ 'medium' => $spacing_placeholders['row_margins_medium'],
658
+ 'responsive' => $spacing_placeholders['row_margins_responsive'],
659
+ )
660
  )
661
  ),
662
+ 'margin_right' => array(
663
+ 'type' => 'unit',
664
+ 'label' => __( 'Right', 'fl-builder' ),
665
+ 'description' => 'px',
666
+ 'preview' => array(
667
+ 'type' => 'none',
668
+ ),
669
+ 'responsive' => array(
670
+ 'placeholder' => array(
671
+ 'default' => $spacing_placeholders['row_margins'],
672
+ 'medium' => $spacing_placeholders['row_margins_medium'],
673
+ 'responsive' => $spacing_placeholders['row_margins_responsive'],
674
+ )
675
  )
676
+ ),
677
+ ),
678
  ),
679
  'padding' => array(
680
  'title' => __('Padding', 'fl-builder'),
681
  'fields' => array(
682
+ 'padding_top' => array(
683
+ 'type' => 'unit',
684
+ 'label' => __( 'Top', 'fl-builder' ),
685
+ 'description' => 'px',
686
+ 'preview' => array(
687
+ 'type' => 'none',
688
+ ),
689
+ 'responsive' => array(
690
+ 'placeholder' => array(
691
+ 'default' => $spacing_placeholders['row_padding'],
692
+ 'medium' => $spacing_placeholders['row_padding_medium'],
693
+ 'responsive' => $spacing_placeholders['row_padding_tb_responsive'],
694
+ )
695
  )
696
  ),
697
  'padding_bottom' => array(
698
+ 'type' => 'unit',
699
+ 'label' => __( 'Bottom', 'fl-builder' ),
700
+ 'description' => 'px',
701
+ 'preview' => array(
702
+ 'type' => 'none',
703
+ ),
704
+ 'responsive' => array(
705
+ 'placeholder' => array(
706
+ 'default' => $spacing_placeholders['row_padding'],
707
+ 'medium' => $spacing_placeholders['row_padding_medium'],
708
+ 'responsive' => $spacing_placeholders['row_padding_tb_responsive'],
709
+ )
710
  )
711
  ),
712
+ 'padding_left' => array(
713
+ 'type' => 'unit',
714
+ 'label' => __( 'Left', 'fl-builder' ),
715
+ 'description' => 'px',
716
+ 'preview' => array(
717
+ 'type' => 'none',
718
+ ),
719
+ 'responsive' => array(
720
+ 'placeholder' => array(
721
+ 'default' => $spacing_placeholders['row_padding'],
722
+ 'medium' => $spacing_placeholders['row_padding_medium'],
723
+ 'responsive' => $spacing_placeholders['row_padding_lr_responsive'],
724
+ )
725
  )
726
  ),
727
  'padding_right' => array(
728
+ 'type' => 'unit',
729
+ 'label' => __( 'Right', 'fl-builder' ),
730
+ 'description' => 'px',
731
+ 'preview' => array(
732
+ 'type' => 'none',
733
+ ),
734
+ 'responsive' => array(
735
+ 'placeholder' => array(
736
+ 'default' => $spacing_placeholders['row_padding'],
737
+ 'medium' => $spacing_placeholders['row_padding_medium'],
738
+ 'responsive' => $spacing_placeholders['row_padding_lr_responsive'],
739
+ )
740
  )
741
+ ),
742
+ ),
743
  ),
744
  'responsive' => array(
745
  'title' => __('Responsive Layout', 'fl-builder'),
includes/settings.php CHANGED
@@ -45,6 +45,10 @@
45
  <h3 class="fl-builder-settings-title"><?php echo $section['title']; ?></h3>
46
  <?php endif; ?>
47
 
 
 
 
 
48
  <table class="fl-form-table">
49
  <?php
50
 
45
  <h3 class="fl-builder-settings-title"><?php echo $section['title']; ?></h3>
46
  <?php endif; ?>
47
 
48
+ <?php if ( isset( $section['description'] ) && ! empty( $section['description'] ) ) : // Section description ?>
49
+ <p class="fl-builder-settings-description"><?php echo $section['description']; ?></p>
50
+ <?php endif; ?>
51
+
52
  <table class="fl-form-table">
53
  <?php
54
 
includes/ui-fields.php CHANGED
@@ -1,4 +1,6 @@
1
  <div class="fl-builder-loading"></div>
 
 
2
  <div class="fl-builder-hidden-editor">
3
  <?php wp_editor(' ', 'flhiddeneditor', array('wpautop' => true)); ?>
4
  </div>
1
  <div class="fl-builder-loading"></div>
2
+ <div class="fl-sortable-proxy fl-row-sortable-proxy"><div class="fl-row-sortable-proxy-item"></div></div>
3
+ <div class="fl-sortable-proxy fl-col-sortable-proxy"><div class="fl-col-sortable-proxy-item"></div></div>
4
  <div class="fl-builder-hidden-editor">
5
  <?php wp_editor(' ', 'flhiddeneditor', array('wpautop' => true)); ?>
6
  </div>
includes/ui-js-config.php CHANGED
@@ -7,13 +7,16 @@ echo 'FLBuilderConfig = ' . json_encode( apply_filters('fl_builder_ui_js_config'
7
  'customImageSizeTitles' => apply_filters( 'image_size_names_choose', array() ),
8
  'debug' => ( defined( 'WP_DEBUG' ) && WP_DEBUG ),
9
  'enabledTemplates' => 'core',
 
10
  'help' => FLBuilderModel::get_help_button_settings(),
11
  'homeUrl' => home_url(),
12
  'isRtl' => is_rtl(),
13
  'isUserTemplate' => false,
14
  'lite' => true === FL_BUILDER_LITE,
15
  'modSecFix' => ( defined( 'FL_BUILDER_MODSEC_FIX' ) && FL_BUILDER_MODSEC_FIX ),
 
16
  'newUser' => FLBuilderModel::is_new_user(),
 
17
  'postId' => $post_id,
18
  'postStatus' => get_post_status(),
19
  'postType' => get_post_type(),
7
  'customImageSizeTitles' => apply_filters( 'image_size_names_choose', array() ),
8
  'debug' => ( defined( 'WP_DEBUG' ) && WP_DEBUG ),
9
  'enabledTemplates' => 'core',
10
+ 'global' => $global_settings,
11
  'help' => FLBuilderModel::get_help_button_settings(),
12
  'homeUrl' => home_url(),
13
  'isRtl' => is_rtl(),
14
  'isUserTemplate' => false,
15
  'lite' => true === FL_BUILDER_LITE,
16
  'modSecFix' => ( defined( 'FL_BUILDER_MODSEC_FIX' ) && FL_BUILDER_MODSEC_FIX ),
17
+ 'nestedColumns' => ( ! defined( 'FL_BUILDER_NESTED_COLUMNS' ) || FL_BUILDER_NESTED_COLUMNS ),
18
  'newUser' => FLBuilderModel::is_new_user(),
19
+ 'pluginUrl' => FL_BUILDER_URL,
20
  'postId' => $post_id,
21
  'postStatus' => get_post_status(),
22
  'postType' => get_post_type(),
includes/ui-js-templates.php CHANGED
@@ -1,5 +1,5 @@
1
  <script type="text/html" id="tmpl-fl-row-overlay">
2
- <div class="fl-row-overlay fl-block-overlay<# if ( data.global ) { #> fl-block-overlay-global<# } #>" data-node="{{data.node}}">
3
  <div class="fl-block-overlay-header">
4
  <div class="fl-block-overlay-actions">
5
  <div class="fl-block-overlay-title"><?php _e('Row', 'fl-builder'); ?></div>
@@ -27,17 +27,19 @@
27
  <div class="fl-block-overlay-header">
28
  <div class="fl-block-overlay-actions">
29
  <?php if ( ! $simple_ui ) : ?>
 
30
  <span class="fl-builder-has-submenu">
31
  <i class="fl-block-settings fa fa-columns fl-tip" title="<?php _e( 'Edit Column', 'fl-builder' ); ?>"></i>
32
  <ul class="fl-builder-submenu fl-block-col-submenu">
33
  <li><a class="fl-block-col-edit" href="javascript:void(0);"><?php _e( 'Column Settings', 'fl-builder' ); ?></a></li>
34
- <# if ( data.numCols < 12 ) { #>
35
- <li><a class="fl-block-col-insert-before" href="javascript:void(0);"><?php _e( 'Insert Column Before', 'fl-builder' ); ?></a></li>
36
- <li><a class="fl-block-col-insert-after" href="javascript:void(0);"><?php _e( 'Insert Column After', 'fl-builder' ); ?></a></li>
37
- <# } #>
38
- <# if ( data.numCols > 1 ) { #>
39
  <li><a class="fl-block-col-reset" href="javascript:void(0);"><?php _e( 'Reset Column Widths', 'fl-builder' ); ?></a></li>
40
  <# } #>
 
 
 
 
 
41
  </ul>
42
  </span>
43
  <i class="fl-block-remove fa fa-times fl-tip" title="<?php _e( 'Remove', 'fl-builder' ); ?>"></i>
@@ -46,8 +48,8 @@
46
  <div class="fl-clear"></div>
47
  </div>
48
  <?php if ( ! $simple_ui ) : ?>
49
- <# if ( ! data.first ) { #>
50
- <div class="fl-block-col-resize fl-block-col-resize-w">
51
  <div class="fl-block-col-resize-handle-wrap">
52
  <div class="fl-block-col-resize-feedback fl-block-col-resize-feedback-left"></div>
53
  <div class="fl-block-col-resize-handle"></div>
@@ -55,8 +57,8 @@
55
  </div>
56
  </div>
57
  <# } #>
58
- <# if ( ! data.last ) { #>
59
- <div class="fl-block-col-resize fl-block-col-resize-e">
60
  <div class="fl-block-col-resize-handle-wrap">
61
  <div class="fl-block-col-resize-feedback fl-block-col-resize-feedback-left"></div>
62
  <div class="fl-block-col-resize-handle"></div>
@@ -79,21 +81,23 @@
79
  <?php if ( ! FLBuilderModel::is_post_user_template( 'module' ) && ! $simple_ui ) : ?>
80
  <i class="fl-block-move fa fa-arrows fl-tip" title="<?php _e('Move', 'fl-builder'); ?>"></i>
81
  <?php endif; ?>
82
- <i class="fl-block-settings fa fa-wrench fl-tip" title="{{data.moduleName}} <?php _e('Settings', 'fl-builder'); ?>"></i>
83
  <?php if ( ! FLBuilderModel::is_post_user_template( 'module' ) && ! $simple_ui ) : ?>
84
  <i class="fl-block-copy fa fa-copy fl-tip" title="<?php _e( 'Duplicate', 'fl-builder' ); ?>"></i>
85
  <span class="fl-builder-has-submenu">
86
  <i class="fl-block-col-settings fa fa-columns fl-tip" title="<?php _e( 'Edit Column', 'fl-builder' ); ?>"></i>
87
  <ul class="fl-builder-submenu fl-block-col-submenu">
 
88
  <li><a class="fl-block-col-edit" href="javascript:void(0);"><?php _e( 'Column Settings', 'fl-builder' ); ?></a></li>
89
  <li><a class="fl-block-col-delete" href="javascript:void(0);"><?php _e( 'Delete Column', 'fl-builder' ); ?></a></li>
90
- <# if ( data.numCols < 12 ) { #>
91
- <li><a class="fl-block-col-insert-before" href="javascript:void(0);"><?php _e( 'Insert Column Before', 'fl-builder' ); ?></a></li>
92
- <li><a class="fl-block-col-insert-after" href="javascript:void(0);"><?php _e( 'Insert Column After', 'fl-builder' ); ?></a></li>
93
- <# } #>
94
- <# if ( data.numCols > 1 ) { #>
95
  <li><a class="fl-block-col-reset" href="javascript:void(0);"><?php _e( 'Reset Column Widths', 'fl-builder' ); ?></a></li>
96
  <# } #>
 
 
 
 
 
97
  </ul>
98
  </span>
99
  <i class="fl-block-remove fa fa-times fl-tip" title="<?php _e( 'Remove', 'fl-builder' ); ?>"></i>
@@ -103,8 +107,8 @@
103
  <div class="fl-clear"></div>
104
  </div>
105
  <?php if ( ! FLBuilderModel::is_post_user_template( 'module' ) && ! $simple_ui ) : ?>
106
- <# if ( ! data.parentFirst ) { #>
107
- <div class="fl-block-col-resize fl-block-col-resize-w">
108
  <div class="fl-block-col-resize-handle-wrap">
109
  <div class="fl-block-col-resize-feedback fl-block-col-resize-feedback-left"></div>
110
  <div class="fl-block-col-resize-handle"></div>
@@ -112,8 +116,8 @@
112
  </div>
113
  </div>
114
  <# } #>
115
- <# if ( ! data.parentLast ) { #>
116
- <div class="fl-block-col-resize fl-block-col-resize-e">
117
  <div class="fl-block-col-resize-handle-wrap">
118
  <div class="fl-block-col-resize-feedback fl-block-col-resize-feedback-left"></div>
119
  <div class="fl-block-col-resize-handle"></div>
@@ -126,6 +130,24 @@
126
  </script>
127
  <!-- #tmpl-fl-module-overlay -->
128
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  <script type="text/html" id="tmpl-fl-actions-lightbox">
130
  <div class="fl-builder-actions {{data.className}}">
131
  <span class="fl-builder-actions-title">{{data.title}}</span>
@@ -163,4 +185,16 @@
163
  <span class="fl-builder-settings-cancel fl-builder-button fl-builder-button-large fl-builder-button-primary" href="javascript:void(0);"><?php _e('Done', 'fl-builder'); ?></span>
164
  </div>
165
  </script>
166
- <!-- #tmpl-fl-video-lightbox -->
 
 
 
 
 
 
 
 
 
 
 
 
1
  <script type="text/html" id="tmpl-fl-row-overlay">
2
+ <div class="fl-row-overlay fl-block-overlay<# if ( data.global ) { #> fl-block-overlay-global<# } #>">
3
  <div class="fl-block-overlay-header">
4
  <div class="fl-block-overlay-actions">
5
  <div class="fl-block-overlay-title"><?php _e('Row', 'fl-builder'); ?></div>
27
  <div class="fl-block-overlay-header">
28
  <div class="fl-block-overlay-actions">
29
  <?php if ( ! $simple_ui ) : ?>
30
+ <i class="fl-block-move fa fa-arrows fl-tip" title="<?php _e('Move', 'fl-builder'); ?>"></i>
31
  <span class="fl-builder-has-submenu">
32
  <i class="fl-block-settings fa fa-columns fl-tip" title="<?php _e( 'Edit Column', 'fl-builder' ); ?>"></i>
33
  <ul class="fl-builder-submenu fl-block-col-submenu">
34
  <li><a class="fl-block-col-edit" href="javascript:void(0);"><?php _e( 'Column Settings', 'fl-builder' ); ?></a></li>
35
+ <# if ( data.numCols > 1 || ( data.hasParentCol && data.numParentCols > 1 ) ) { #>
 
 
 
 
36
  <li><a class="fl-block-col-reset" href="javascript:void(0);"><?php _e( 'Reset Column Widths', 'fl-builder' ); ?></a></li>
37
  <# } #>
38
+ <# if ( data.hasParentCol ) { #>
39
+ <li class="fl-builder-submenu-sep"><div></div></li>
40
+ <li><a class="fl-block-col-move-parent" href="javascript:void(0);"><?php _e( 'Move Parent', 'fl-builder' ); ?><i class="fa fa-arrows"></i></a></li>
41
+ <li><a class="fl-block-col-edit-parent" href="javascript:void(0);"><?php _e( 'Parent Settings', 'fl-builder' ); ?></a></li>
42
+ <# } #>
43
  </ul>
44
  </span>
45
  <i class="fl-block-remove fa fa-times fl-tip" title="<?php _e( 'Remove', 'fl-builder' ); ?>"></i>
48
  <div class="fl-clear"></div>
49
  </div>
50
  <?php if ( ! $simple_ui ) : ?>
51
+ <# if ( ( ! data.first && data.contentWidth > 40 ) || ( data.hasParentCol && data.first && ! data.parentFirst ) ) { #>
52
+ <div class="fl-block-col-resize fl-block-col-resize-w<# if ( data.hasParentCol && data.first && ! data.parentFirst ) { #> fl-block-col-resize-parent<# } #>">
53
  <div class="fl-block-col-resize-handle-wrap">
54
  <div class="fl-block-col-resize-feedback fl-block-col-resize-feedback-left"></div>
55
  <div class="fl-block-col-resize-handle"></div>
57
  </div>
58
  </div>
59
  <# } #>
60
+ <# if ( ( ! data.last && data.contentWidth > 40 ) || ( data.hasParentCol && data.last && ! data.parentLast ) ) { #>
61
+ <div class="fl-block-col-resize fl-block-col-resize-e<# if ( data.hasParentCol && data.last && ! data.parentLast ) { #> fl-block-col-resize-parent<# } #>">
62
  <div class="fl-block-col-resize-handle-wrap">
63
  <div class="fl-block-col-resize-feedback fl-block-col-resize-feedback-left"></div>
64
  <div class="fl-block-col-resize-handle"></div>
81
  <?php if ( ! FLBuilderModel::is_post_user_template( 'module' ) && ! $simple_ui ) : ?>
82
  <i class="fl-block-move fa fa-arrows fl-tip" title="<?php _e('Move', 'fl-builder'); ?>"></i>
83
  <?php endif; ?>
84
+ <i class="fl-block-settings fa fa-wrench fl-tip" title="<?php _e('Module Settings', 'fl-builder'); ?>"></i>
85
  <?php if ( ! FLBuilderModel::is_post_user_template( 'module' ) && ! $simple_ui ) : ?>
86
  <i class="fl-block-copy fa fa-copy fl-tip" title="<?php _e( 'Duplicate', 'fl-builder' ); ?>"></i>
87
  <span class="fl-builder-has-submenu">
88
  <i class="fl-block-col-settings fa fa-columns fl-tip" title="<?php _e( 'Edit Column', 'fl-builder' ); ?>"></i>
89
  <ul class="fl-builder-submenu fl-block-col-submenu">
90
+ <li><a class="fl-block-col-move" href="javascript:void(0);"><?php _e( 'Move Column', 'fl-builder' ); ?><i class="fa fa-arrows"></i></a></li>
91
  <li><a class="fl-block-col-edit" href="javascript:void(0);"><?php _e( 'Column Settings', 'fl-builder' ); ?></a></li>
92
  <li><a class="fl-block-col-delete" href="javascript:void(0);"><?php _e( 'Delete Column', 'fl-builder' ); ?></a></li>
93
+ <# if ( data.numCols > 1 || ( data.hasParentCol && data.numParentCols > 1 ) ) { #>
 
 
 
 
94
  <li><a class="fl-block-col-reset" href="javascript:void(0);"><?php _e( 'Reset Column Widths', 'fl-builder' ); ?></a></li>
95
  <# } #>
96
+ <# if ( data.hasParentCol ) { #>
97
+ <li class="fl-builder-submenu-sep"><div></div></li>
98
+ <li><a class="fl-block-col-move-parent" href="javascript:void(0);"><?php _e( 'Move Parent', 'fl-builder' ); ?><i class="fa fa-arrows"></i></a></li>
99
+ <li><a class="fl-block-col-edit-parent" href="javascript:void(0);"><?php _e( 'Parent Settings', 'fl-builder' ); ?></a></li>
100
+ <# } #>
101
  </ul>
102
  </span>
103
  <i class="fl-block-remove fa fa-times fl-tip" title="<?php _e( 'Remove', 'fl-builder' ); ?>"></i>
107
  <div class="fl-clear"></div>
108
  </div>
109
  <?php if ( ! FLBuilderModel::is_post_user_template( 'module' ) && ! $simple_ui ) : ?>
110
+ <# if ( ( ! data.colFirst && data.contentWidth > 40 ) || ( data.hasParentCol && data.colFirst && ! data.parentFirst ) ) { #>
111
+ <div class="fl-block-col-resize fl-block-col-resize-w<# if ( data.hasParentCol && data.colFirst && ! data.parentFirst ) { #> fl-block-col-resize-parent<# } #>">
112
  <div class="fl-block-col-resize-handle-wrap">
113
  <div class="fl-block-col-resize-feedback fl-block-col-resize-feedback-left"></div>
114
  <div class="fl-block-col-resize-handle"></div>
116
  </div>
117
  </div>
118
  <# } #>
119
+ <# if ( ( ! data.colLast && data.contentWidth > 40 ) || ( data.hasParentCol && data.colLast && ! data.parentLast ) ) { #>
120
+ <div class="fl-block-col-resize fl-block-col-resize-e<# if ( data.hasParentCol && data.colLast && ! data.parentLast ) { #> fl-block-col-resize-parent<# } #>">
121
  <div class="fl-block-col-resize-handle-wrap">
122
  <div class="fl-block-col-resize-feedback fl-block-col-resize-feedback-left"></div>
123
  <div class="fl-block-col-resize-handle"></div>
130
  </script>
131
  <!-- #tmpl-fl-module-overlay -->
132
 
133
+ <script type="text/html" id="tmpl-fl-overlay-overflow-menu">
134
+ <span class="fl-builder-has-submenu">
135
+ <i class="fl-block-overflow-menu fa fa-bars fl-tip" title="<?php _e( 'More', 'fl-builder' ); ?>"></i>
136
+ <ul class="fl-builder-submenu">
137
+ <# for( var i = 0; i < data.length; i++ ) { #>
138
+ <# if ( 'submenu' == data[ i ].type ) { #>
139
+ <li class="fl-builder-has-submenu"><a href="javascript:void(0);">{{data[ i ].label}}<i class="fa fa-caret-right"></i></a>
140
+ {{{data[ i ].submenu}}}
141
+ </li>
142
+ <# } else { #>
143
+ <li><a class="{{data[ i ].className}}" href="javascript:void(0);">{{data[ i ].label}}<# if ( data[ i ].className.indexOf( 'fl-block-move' ) > -1 ) { #><i class="fa fa-arrows"></i><# } #></a>
144
+ <# } #>
145
+ <# } #>
146
+ </ul>
147
+ </span>
148
+ </script>
149
+ <!-- #tmpl-fl-overlay-overflow-menu -->
150
+
151
  <script type="text/html" id="tmpl-fl-actions-lightbox">
152
  <div class="fl-builder-actions {{data.className}}">
153
  <span class="fl-builder-actions-title">{{data.title}}</span>
185
  <span class="fl-builder-settings-cancel fl-builder-button fl-builder-button-large fl-builder-button-primary" href="javascript:void(0);"><?php _e('Done', 'fl-builder'); ?></span>
186
  </div>
187
  </script>
188
+ <!-- #tmpl-fl-video-lightbox -->
189
+
190
+ <script type="text/html" id="tmpl-fl-responsive-preview">
191
+ <div class="fl-responsive-preview-mask"></div>
192
+ <div class="fl-responsive-preview">
193
+ <div class="fl-responsive-preview-content">
194
+ <div class="fl-responsive-preview-message">
195
+ <?php _e( 'Layout Preview', 'fl-builder' ); ?>
196
+ </div>
197
+ </div>
198
+ </div>
199
+ </script>
200
+ <!-- #tmpl-fl-responsive-preview -->
includes/ui-panel.php CHANGED
@@ -41,13 +41,13 @@
41
  <?php if($title == __('WordPress Widgets', 'fl-builder')) : ?>
42
  <div class="fl-builder-blocks-section-content fl-builder-widgets">
43
  <?php foreach($modules as $module) : ?>
44
- <span class="fl-builder-block fl-builder-block-module" data-type="widget" data-widget="<?php echo $module->class; ?>"><span class="fl-builder-block-title"><?php echo $module->name; ?></span></span>
45
  <?php endforeach; ?>
46
  </div>
47
  <?php else : ?>
48
  <div class="fl-builder-blocks-section-content fl-builder-modules">
49
  <?php foreach($modules as $module) : ?>
50
- <span class="fl-builder-block fl-builder-block-module" data-type="<?php echo $module->slug; ?>"><span class="fl-builder-block-title"><?php echo $module->name; ?></span></span>
51
  <?php endforeach; ?>
52
  </div>
53
  <?php endif; ?>
41
  <?php if($title == __('WordPress Widgets', 'fl-builder')) : ?>
42
  <div class="fl-builder-blocks-section-content fl-builder-widgets">
43
  <?php foreach($modules as $module) : ?>
44
+ <span class="fl-builder-block fl-builder-block-module" data-type="widget" data-widget="<?php echo $module->class; ?>"><span class="fl-builder-block-title" title="<?php echo esc_attr( $module->name ); ?>"><?php echo $module->name; ?></span></span>
45
  <?php endforeach; ?>
46
  </div>
47
  <?php else : ?>
48
  <div class="fl-builder-blocks-section-content fl-builder-modules">
49
  <?php foreach($modules as $module) : ?>
50
+ <span class="fl-builder-block fl-builder-block-module" data-type="<?php echo $module->slug; ?>"><span class="fl-builder-block-title" title="<?php echo esc_attr( $module->name ); ?>"><?php echo $module->name; ?></span></span>
51
  <?php endforeach; ?>
52
  </div>
53
  <?php endif; ?>
includes/updater-config.php CHANGED
@@ -3,7 +3,7 @@
3
  if(class_exists('FLUpdater')) {
4
  FLUpdater::add_product(array(
5
  'name' => 'Beaver Builder Plugin (Lite Version)',
6
- 'version' => '1.8.8',
7
  'slug' => 'bb-plugin',
8
  'type' => 'plugin'
9
  ));
3
  if(class_exists('FLUpdater')) {
4
  FLUpdater::add_product(array(
5
  'name' => 'Beaver Builder Plugin (Lite Version)',
6
+ 'version' => '1.9.1',
7
  'slug' => 'bb-plugin',
8
  'type' => 'plugin'
9
  ));
js/fl-builder-ajax-layout.js CHANGED
@@ -374,18 +374,18 @@
374
 
375
  // If data.nodeParent is present, we have a new node.
376
  if ( this._data.nodeParent ) {
377
-
378
  // Get sibling rows.
379
  if ( this._data.nodeParent.hasClass( 'fl-builder-content' ) ) {
380
  siblings = this._data.nodeParent.find( '.fl-row' );
381
  }
382
  // Get sibling column groups.
383
  else if ( this._data.nodeParent.hasClass( 'fl-row-content' ) ) {
384
- siblings = this._data.nodeParent.find( '.fl-col-group' );
385
  }
386
  // Get sibling modules.
387
  else {
388
- siblings = this._data.nodeParent.find( '.fl-module' );
389
  }
390
 
391
  // Add the new node.
@@ -542,10 +542,12 @@
542
  {
543
  FLBuilder._setupEmptyLayout();
544
  FLBuilder._highlightEmptyCols();
 
545
  FLBuilder._initSortables();
546
  FLBuilder._resizeLayout();
547
  FLBuilder._initMediaElements();
548
  FLBuilderLayout.init();
 
549
 
550
  this._body.height( 'auto' );
551
  }
374
 
375
  // If data.nodeParent is present, we have a new node.
376
  if ( this._data.nodeParent ) {
377
+
378
  // Get sibling rows.
379
  if ( this._data.nodeParent.hasClass( 'fl-builder-content' ) ) {
380
  siblings = this._data.nodeParent.find( '.fl-row' );
381
  }
382
  // Get sibling column groups.
383
  else if ( this._data.nodeParent.hasClass( 'fl-row-content' ) ) {
384
+ siblings = this._data.nodeParent.find( ' > .fl-col-group' );
385
  }
386
  // Get sibling modules.
387
  else {
388
+ siblings = this._data.nodeParent.find( ' > .fl-col-group, > .fl-module' );
389
  }
390
 
391
  // Add the new node.
542
  {
543
  FLBuilder._setupEmptyLayout();
544
  FLBuilder._highlightEmptyCols();
545
+ FLBuilder._initDropTargets();
546
  FLBuilder._initSortables();
547
  FLBuilder._resizeLayout();
548
  FLBuilder._initMediaElements();
549
  FLBuilderLayout.init();
550
+ FLBuilderResponsiveEditing.refreshPreview();
551
 
552
  this._body.height( 'auto' );
553
  }
js/fl-builder-forced-media-queries.js ADDED
@@ -0,0 +1,492 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */
2
+ !function(a){"use strict";if(a.matchMedia&&a.matchMedia("all").addListener)return!1;var b=a.matchMedia,c=b("only all").matches,d=!1,e=0,f=[],g=function(c){a.clearTimeout(e),e=a.setTimeout(function(){for(var c=0,d=f.length;c<d;c++){var e=f[c].mql,g=f[c].listeners||[],h=b(e.media).matches;if(h!==e.matches){e.matches=h;for(var i=0,j=g.length;i<j;i++)g[i].call(a,e)}}},30)};a.matchMedia=function(e){var h=b(e),i=[],j=0;return h.addListener=function(b){c&&(d||(d=!0,a.addEventListener("resize",g,!0)),0===j&&(j=f.push({mql:h,listeners:i})),i.push(b))},h.removeListener=function(a){for(var b=0,c=i.length;b<c;b++)i[b]===a&&i.splice(b,1)},h}}(this);
3
+
4
+ /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
5
+ /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
6
+ !function(a){"use strict";a.matchMedia=a.matchMedia||function(a,b){var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(a.document)}(this);
7
+
8
+ ( function( $ ) {
9
+
10
+ /**
11
+ * Helper for simulating media queries without resizing
12
+ * the viewport.
13
+ *
14
+ * Based on Respond.js by Scott Jehl (https://github.com/scottjehl/Respond)
15
+ *
16
+ * @since 1.9
17
+ * @class FLBuilderForcedMediaQueries
18
+ */
19
+ FLBuilderForcedMediaQueries = {
20
+
21
+ /**
22
+ * @since 1.9
23
+ * @access private
24
+ * @property {Array} _requestQueue
25
+ */
26
+ _requestQueue: [],
27
+
28
+ /**
29
+ * @since 1.9
30
+ * @access private
31
+ * @property {Object} _xmlHttp
32
+ */
33
+ _xmlHttp: (function() {
34
+ var xmlhttpmethod = false;
35
+ try {
36
+ xmlhttpmethod = new window.XMLHttpRequest();
37
+ }
38
+ catch( e ){
39
+ xmlhttpmethod = new window.ActiveXObject( "Microsoft.XMLHTTP" );
40
+ }
41
+ return function(){
42
+ return xmlhttpmethod;
43
+ };
44
+ })(),
45
+
46
+ /**
47
+ * @since 1.9
48
+ * @access private
49
+ * @property {Object} _regex
50
+ */
51
+ _regex: {
52
+ media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,
53
+ keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,
54
+ comments: /\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,
55
+ urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,
56
+ findStyles: /@media *([^\{]+)\{([\S\s]+?)$/,
57
+ only: /(only\s+)?([a-zA-Z]+)\s?/,
58
+ minw: /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
59
+ maxw: /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
60
+ minmaxwh: /\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,
61
+ other: /\([^\)]*\)/g
62
+ },
63
+
64
+ /**
65
+ * @since 1.9
66
+ * @access private
67
+ * @property {Array} _mediaStyles
68
+ */
69
+ _mediaStyles: [],
70
+
71
+ /**
72
+ * @since 1.9
73
+ * @access private
74
+ * @property {Array} _rules
75
+ */
76
+ _rules: [],
77
+
78
+ /**
79
+ * @since 1.9
80
+ * @access private
81
+ * @property {Array} _appendedEls
82
+ */
83
+ _appendedEls: [],
84
+
85
+ /**
86
+ * @since 1.9
87
+ * @access private
88
+ * @property {Object} _parsedSheets
89
+ */
90
+ _parsedSheets: {},
91
+
92
+ /**
93
+ * @since 1.9
94
+ * @access private
95
+ * @property {Number} _emInPx
96
+ */
97
+ _emInPx: null,
98
+
99
+ /**
100
+ * The current viewport width to simulate.
101
+ *
102
+ * @since 1.9
103
+ * @access private
104
+ * @property {Number} _width
105
+ */
106
+ _width: null,
107
+
108
+ /**
109
+ * @since 1.9
110
+ * @access private
111
+ * @property {Function} _callback
112
+ */
113
+ _callback: null,
114
+
115
+ /**
116
+ * Translates all stylesheets and applies the media queries.
117
+ *
118
+ * @since 1.9
119
+ * @method update
120
+ * @param {Number) width The viewport width to simulate.
121
+ * @param {Function) callback
122
+ */
123
+ update: function( width, callback )
124
+ {
125
+ var self = FLBuilderForcedMediaQueries,
126
+ doc = window.document,
127
+ docElem = doc.documentElement,
128
+ head = doc.getElementsByTagName( 'head' )[0] || docElem,
129
+ base = doc.getElementsByTagName( 'base' )[0],
130
+ links = head.getElementsByTagName( 'link' );
131
+
132
+ self._mediaStyles = [];
133
+ self._rules = [];
134
+
135
+ if ( 'undefined' != typeof width ) {
136
+ self._width = width;
137
+ }
138
+ if ( 'undefined' != typeof callback ) {
139
+ self._callback = callback;
140
+ }
141
+
142
+ // Always reparse builder sheets for changes
143
+ for ( var sheet in self._parsedSheets ) {
144
+ if ( sheet.indexOf( '-layout-draft.css?' ) > -1 ) {
145
+ self._parsedSheets[ sheet ].parsed = false;
146
+ }
147
+ else if ( sheet.indexOf( '-layout-preview.css?' ) > -1 ) {
148
+ self._parsedSheets[ sheet ].parsed = false;
149
+ }
150
+ }
151
+
152
+ for( var i = 0; i < links.length; i++ ){
153
+
154
+ var sheet = links[ i ],
155
+ href = sheet.href,
156
+ media = sheet.media,
157
+ isCSS = sheet.rel && sheet.rel.toLowerCase() === 'stylesheet';
158
+
159
+ if ( !! href && isCSS ) {
160
+
161
+ // Don't translate builder UI sheets
162
+ if ( href.indexOf( FLBuilderConfig.pluginUrl ) > -1 ) {
163
+ continue;
164
+ }
165
+ // Translate cached sheets
166
+ else if ( 'undefined' != typeof self._parsedSheets[ href ] && self._parsedSheets[ href ].parsed ) {
167
+ self._translate( self._parsedSheets[ href ].styles, href, self._parsedSheets[ href ].media );
168
+ }
169
+ // Selectivizr exposes css through the rawCssText expando
170
+ else if ( sheet.styleSheet && sheet.styleSheet.rawCssText ) {
171
+ self._translate( sheet.styleSheet.rawCssText, href, media );
172
+ self._parsedSheets[ href ] = true;
173
+ }
174
+ else if( ( ! /^([a-zA-Z:]*\/\/)/.test( href ) && ! base ) ||
175
+ href.replace( RegExp.$1, '' ).split( '/' )[0] === window.location.host ) {
176
+
177
+ // IE7 doesn't handle urls that start with '//' for ajax request
178
+ // manually add in the protocol
179
+ if ( href.substring( 0,2 ) === '//' ) {
180
+ href = window.location.protocol + href;
181
+ }
182
+
183
+ self._requestQueue.push( {
184
+ href: href,
185
+ media: media
186
+ } );
187
+ }
188
+ }
189
+ }
190
+
191
+ self._makeRequests();
192
+ },
193
+
194
+ /**
195
+ * Applies translated media queries to the page.
196
+ *
197
+ * @since 1.9
198
+ * @method applyMedia
199
+ * @param {Number) width The viewport width to simulate.
200
+ */
201
+ applyMedia: function( width )
202
+ {
203
+ var self = FLBuilderForcedMediaQueries,
204
+ name = 'clientWidth',
205
+ doc = window.document,
206
+ docElem = doc.documentElement,
207
+ docElemProp = docElem[ name ],
208
+ head = doc.getElementsByTagName( 'head' )[0] || docElem,
209
+ links = head.getElementsByTagName( 'link' ),
210
+ lastLink = links[ links.length - 1 ],
211
+ now = ( new Date() ).getTime(),
212
+ styleBlocks = {},
213
+ mediaStyles = self._mediaStyles,
214
+ appendedEls = self._appendedEls,
215
+ emInPx = self._emInPx;
216
+
217
+ self._width = width;
218
+
219
+ for ( var i in mediaStyles ) {
220
+ if ( mediaStyles.hasOwnProperty( i ) ) {
221
+ var thisStyle = mediaStyles[ i ],
222
+ min = thisStyle.minw,
223
+ max = thisStyle.maxw,
224
+ minNull = min === null,
225
+ maxNull = max === null,
226
+ em = 'em';
227
+
228
+ if ( !! min ) {
229
+ min = parseFloat( min ) * ( min.indexOf( em ) > -1 ? ( emInPx || self.getEmPixelValue() ) : 1 );
230
+ }
231
+ if ( !! max ) {
232
+ max = parseFloat( max ) * ( max.indexOf( em ) > -1 ? ( emInPx || self.getEmPixelValue() ) : 1 );
233
+ }
234
+
235
+ // If there's no media query at all (the () part), or min or max is not null, and if either is present, they're true
236
+ if ( ! thisStyle.hasQuery || ( ! minNull || ! maxNull ) && ( minNull || width >= min ) && ( maxNull || width <= max ) ) {
237
+ if ( ! styleBlocks[ thisStyle.media ] ) {
238
+ styleBlocks[ thisStyle.media ] = [];
239
+ }
240
+ styleBlocks[ thisStyle.media ].push( self._rules[ thisStyle.rules ] );
241
+ }
242
+ }
243
+ }
244
+
245
+ // Remove any existing respond style element(s)
246
+ for ( var j in appendedEls ) {
247
+ if ( appendedEls.hasOwnProperty( j ) ) {
248
+ if( appendedEls[ j ] && appendedEls[ j ].parentNode === head ) {
249
+ head.removeChild( appendedEls[ j ] );
250
+ }
251
+ }
252
+ }
253
+
254
+ self._appendedEls.length = 0;
255
+
256
+ // Inject active styles, grouped by media type
257
+ for ( var k in styleBlocks ) {
258
+ if ( styleBlocks.hasOwnProperty( k ) ) {
259
+ var ss = doc.createElement( 'style' ),
260
+ css = styleBlocks[ k ].join( "\n" );
261
+
262
+ ss.type = 'text/css';
263
+ ss.media = k;
264
+
265
+ // Originally, ss was appended to a documentFragment and sheets were appended in bulk.
266
+ // This caused crashes in IE in a number of circumstances, such as when the HTML element
267
+ // had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one!
268
+ head.insertBefore( ss, lastLink.nextSibling );
269
+
270
+ if ( ss.styleSheet ) {
271
+ ss.styleSheet.cssText = css;
272
+ }
273
+ else {
274
+ ss.appendChild( doc.createTextNode( css ) );
275
+ }
276
+
277
+ // Push to _appendedEls to track for later removal
278
+ self._appendedEls.push( ss );
279
+ }
280
+ }
281
+ },
282
+
283
+ /**
284
+ * @since 1.9
285
+ * @method isUnsupportedMediaQuery
286
+ */
287
+ isUnsupportedMediaQuery: function( query )
288
+ {
289
+ var regex = FLBuilderForcedMediaQueries._regex;
290
+
291
+ return query.replace( regex.minmaxwh, '' ).match( regex.other );
292
+ },
293
+
294
+ /**
295
+ * Returns the value of 1em in pixels.
296
+ *
297
+ * @since 1.9
298
+ * @method getEmPixelValue
299
+ */
300
+ getEmPixelValue: function()
301
+ {
302
+ var ret = null,
303
+ doc = window.document,
304
+ docElem = doc.documentElement,
305
+ body = doc.body,
306
+ div = doc.createElement('div'),
307
+ originalHTMLFontSize = docElem.style.fontSize,
308
+ originalBodyFontSize = body && body.style.fontSize,
309
+ fakeUsed = false;
310
+
311
+ div.style.cssText = 'position:absolute;font-size:1em;width:1em';
312
+
313
+ if ( ! body ) {
314
+ body = fakeUsed = doc.createElement( 'body' );
315
+ body.style.background = 'none';
316
+ }
317
+
318
+ // 1em in a media query is the value of the default font size of the browser
319
+ // reset docElem and body to ensure the correct value is returned
320
+ docElem.style.fontSize = '100%';
321
+ body.style.fontSize = '100%';
322
+
323
+ body.appendChild( div );
324
+
325
+ if ( fakeUsed ) {
326
+ docElem.insertBefore( body, docElem.firstChild );
327
+ }
328
+
329
+ ret = div.offsetWidth;
330
+
331
+ if ( fakeUsed ) {
332
+ docElem.removeChild( body );
333
+ }
334
+ else {
335
+ body.removeChild( div );
336
+ }
337
+
338
+ // Restore the original values
339
+ docElem.style.fontSize = originalHTMLFontSize;
340
+
341
+ if ( originalBodyFontSize ) {
342
+ body.style.fontSize = originalBodyFontSize;
343
+ }
344
+
345
+ // Also update _emInPx before returning
346
+ ret = FLBuilderForcedMediaQueries._emInPx = parseFloat( ret );
347
+
348
+ return ret;
349
+ },
350
+
351
+ /**
352
+ * Find media blocks in css text, convert to style blocks.
353
+ *
354
+ * @since 1.9
355
+ * @private
356
+ * @method _translate
357
+ * @param {String) styles
358
+ * @param {String) href
359
+ * @param {String) media
360
+ */
361
+ _translate: function( styles, href, media )
362
+ {
363
+ var self = FLBuilderForcedMediaQueries,
364
+ regex = self._regex,
365
+ qs = styles.replace( regex.comments, '' ).replace( regex.keyframes, '' ).match( regex.media ),
366
+ ql = qs && qs.length || 0;
367
+
368
+ // Try to get CSS path
369
+ href = href.substring( 0, href.lastIndexOf( '/' ) );
370
+
371
+ var repUrls = function( css ) {
372
+ return css.replace( regex.urls, "$1" + href + "$2$3" );
373
+ },
374
+ useMedia = !ql && media;
375
+
376
+ // If path exists, tack on trailing slash
377
+ if ( href.length ) {
378
+ href += '/';
379
+ }
380
+
381
+ // If no internal queries exist, but media attr does, use that
382
+ // Note: this currently lacks support for situations where a media attr is specified on a link AND
383
+ // Its associated stylesheet has internal CSS media queries.
384
+ // In those cases, the media attribute will currently be ignored.
385
+ if ( useMedia ) {
386
+ ql = 1;
387
+ }
388
+
389
+ for ( var i = 0; i < ql; i++ ) {
390
+
391
+ var fullq, thisq, eachq, eql;
392
+
393
+ // Media attr
394
+ if ( useMedia ) {
395
+ fullq = media;
396
+ self._rules.push( repUrls( styles ) );
397
+ }
398
+ //parse for styles
399
+ else{
400
+ fullq = qs[ i ].match( regex.findStyles ) && RegExp.$1;
401
+ self._rules.push( RegExp.$2 && repUrls( RegExp.$2 ) );
402
+ }
403
+
404
+ eachq = fullq.split( ',' );
405
+ eql = eachq.length;
406
+
407
+ for ( var j = 0; j < eql; j++ ) {
408
+
409
+ thisq = eachq[ j ];
410
+
411
+ if( self.isUnsupportedMediaQuery( thisq ) ) {
412
+ continue;
413
+ }
414
+
415
+ self._mediaStyles.push( {
416
+ media : thisq.split( '(' )[ 0 ].match( regex.only ) && RegExp.$2 || 'all',
417
+ rules : self._rules.length - 1,
418
+ hasQuery : thisq.indexOf( '(' ) > -1,
419
+ minw : thisq.match( regex.minw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || '' ),
420
+ maxw : thisq.match( regex.maxw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || '' )
421
+ } );
422
+ }
423
+ }
424
+ },
425
+
426
+ /**
427
+ * Loop through the request queue and get the
428
+ * css text for each sheet.
429
+ *
430
+ * @since 1.9
431
+ * @private
432
+ * @method _makeRequests
433
+ */
434
+ _makeRequests: function()
435
+ {
436
+ var self = FLBuilderForcedMediaQueries;
437
+
438
+ if( self._requestQueue.length ) {
439
+
440
+ var thisRequest = self._requestQueue.shift();
441
+
442
+ self._ajax( thisRequest.href, function( styles )
443
+ {
444
+ self._translate( styles, thisRequest.href, thisRequest.media );
445
+
446
+ self._parsedSheets[ thisRequest.href ] = {
447
+ parsed: true,
448
+ styles: styles,
449
+ media: thisRequest.media
450
+ };
451
+
452
+ // By wrapping recursive function call in setTimeout
453
+ // We prevent "Stack overflow" error in IE7
454
+ window.setTimeout( function(){ self._makeRequests(); },0 );
455
+ } );
456
+ }
457
+ else if ( self._width ) {
458
+
459
+ self.applyMedia( self._width );
460
+
461
+ if ( self._callback ) {
462
+ self._callback();
463
+ self._callback = null;
464
+ }
465
+ }
466
+ },
467
+
468
+ /**
469
+ * @since 1.9
470
+ * @access private
471
+ * @method _ajax
472
+ */
473
+ _ajax: function( url, callback ) {
474
+ var req = FLBuilderForcedMediaQueries._xmlHttp();
475
+ if (!req){
476
+ return;
477
+ }
478
+ req.open( "GET", url, true );
479
+ req.onreadystatechange = function () {
480
+ if ( req.readyState !== 4 || req.status !== 200 && req.status !== 304 ){
481
+ return;
482
+ }
483
+ callback( req.responseText );
484
+ };
485
+ if ( req.readyState === 4 ){
486
+ return;
487
+ }
488
+ req.send( null );
489
+ },
490
+ };
491
+
492
+ } )( jQuery );
js/fl-builder-layout.js CHANGED
@@ -310,7 +310,7 @@
310
  _initParallaxBackground: function()
311
  {
312
  var row = $(this),
313
- content = row.find('.fl-row-content-wrap'),
314
  src = row.data('parallax-image'),
315
  loaded = row.data('parallax-loaded'),
316
  img = new Image();
@@ -641,12 +641,16 @@
641
  iframe = wrap.find('iframe');
642
 
643
  if ( vid.length ) {
644
- if(vidHeight === '' || vidWidth === '') {
645
  vid.css({
646
  'left' : '0px',
647
  'top' : '0px',
648
  'width' : newWidth + 'px'
649
  });
 
 
 
 
650
  }
651
  else {
652
 
@@ -676,6 +680,43 @@
676
  }
677
  },
678
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
679
  /**
680
  * Fires when the window is resized to resize
681
  * a single Youtube video background.
310
  _initParallaxBackground: function()
311
  {
312
  var row = $(this),
313
+ content = row.find('> .fl-row-content-wrap'),
314
  src = row.data('parallax-image'),
315
  loaded = row.data('parallax-loaded'),
316
  img = new Image();
641
  iframe = wrap.find('iframe');
642
 
643
  if ( vid.length ) {
644
+ if(vidHeight === '' || typeof vidHeight === 'undefined' || vidWidth === '' || typeof vidWidth === 'undefined') {
645
  vid.css({
646
  'left' : '0px',
647
  'top' : '0px',
648
  'width' : newWidth + 'px'
649
  });
650
+
651
+ // Try to set the actual video dimension on 'loadedmetadata' when using URL as video source
652
+ vid.on('loadedmetadata', FLBuilderLayout._resizeOnLoadedMeta);
653
+
654
  }
655
  else {
656
 
680
  }
681
  },
682
 
683
+ /**
684
+ * Fires when video meta has been loaded.
685
+ * This will be Triggered when width/height attributes were not specified during video background resizing.
686
+ *
687
+ * @since 1.8.5
688
+ * @access private
689
+ * @method _resizeOnLoadedMeta
690
+ */
691
+ _resizeOnLoadedMeta: function(){
692
+ var video = $(this),
693
+ wrapHeight = video.parent().outerHeight(),
694
+ wrapWidth = video.parent().outerWidth(),
695
+ vidWidth = video[0].videoWidth,
696
+ vidHeight = video[0].videoHeight,
697
+ newHeight = Math.round(vidHeight * wrapWidth/vidWidth),
698
+ newTop = 0;
699
+
700
+ if(newHeight < wrapHeight) {
701
+ newHeight = wrapHeight;
702
+ newWidth = Math.round(vidWidth * wrapHeight/vidHeight);
703
+ newLeft = -((newWidth - wrapWidth)/2);
704
+ }
705
+ else {
706
+ newTop = -((newHeight - wrapHeight)/2);
707
+ }
708
+
709
+ video.parent().data('width', vidWidth);
710
+ video.parent().data('height', vidHeight);
711
+
712
+ video.css({
713
+ 'left' : newLeft + 'px',
714
+ 'top' : newTop + 'px',
715
+ 'width' : newWidth + 'px',
716
+ 'height' : newHeight + 'px'
717
+ });
718
+ },
719
+
720
  /**
721
  * Fires when the window is resized to resize
722
  * a single Youtube video background.
js/fl-builder-preview.js CHANGED
@@ -107,6 +107,24 @@
107
  */
108
  _styleSheet : null,
109
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  /**
111
  * A timeout object for delaying the current preview refresh.
112
  *
@@ -152,6 +170,12 @@
152
  // Elements and Class Names
153
  this._initElementsAndClasses();
154
 
 
 
 
 
 
 
155
  // Default field previews
156
  this._initDefaultFieldPreviews();
157
 
@@ -217,10 +241,10 @@
217
 
218
  // Content Class
219
  if(this.type == 'row') {
220
- contentClass = '.fl-row-content-wrap';
221
  }
222
  else {
223
- contentClass = '.fl-' + this.type + '-content';
224
  }
225
 
226
  // Class Names
@@ -228,7 +252,7 @@
228
  settings : '.fl-builder-' + this.type + '-settings',
229
  settingsHeader : '.fl-builder-' + this.type + '-settings .fl-lightbox-header',
230
  node : FLBuilder._contentClass + ' .fl-node-' + this.nodeId,
231
- content : FLBuilder._contentClass + ' .fl-node-' + this.nodeId + ' ' + contentClass
232
  });
233
 
234
  // Elements
@@ -240,6 +264,48 @@
240
  });
241
  },
242
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
  /**
244
  * Updates a CSS rule for this preview.
245
  *
@@ -249,15 +315,9 @@
249
  * @param {String} property The CSS property to update.
250
  * @param {String} value The CSS value to update.
251
  */
252
- updateCSSRule: function(selector, property, value)
253
  {
254
- // Make sure we have a stylesheet.
255
- if(!this._styleSheet) {
256
- this._styleSheet = new FLStyleSheet();
257
- }
258
-
259
- // Update the rule.
260
- this._styleSheet.updateRule(selector, property, value);
261
  },
262
 
263
  /**
@@ -319,6 +379,70 @@
319
  return isNaN(parseFloat(value)) ? 0 : parseFloat(value);
320
  },
321
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
322
  /* States
323
  ----------------------------------------------------------*/
324
 
@@ -453,14 +577,8 @@
453
  */
454
  revert: function()
455
  {
456
- // Canel any preview delays or requests.
457
- this._cancelDelay();
458
- this._cancelPreview();
459
-
460
- // Remove the preview stylesheet.
461
- if(this._styleSheet) {
462
- this._styleSheet.remove();
463
- }
464
 
465
  // Render the layout.
466
  if ( this._settingsHaveChanged() ) {
@@ -481,13 +599,13 @@
481
  this._cancelDelay();
482
  this._cancelPreview();
483
 
484
- // Remove the preview stylesheet.
485
- if(this._styleSheet) {
486
- this._styleSheet.remove();
487
- this._styleSheet = null;
488
- }
489
  },
490
-
491
  /* Node Text Color Settings
492
  ----------------------------------------------------------*/
493
 
@@ -880,6 +998,7 @@
880
 
881
  }
882
  },
 
883
  /**
884
  * Fires when a background overlay color is cleared.
885
  *
@@ -892,7 +1011,7 @@
892
  {
893
  this.elements.bgOverlayColor.prev('.fl-color-picker-clear').trigger('click');
894
  },
895
-
896
  /* Node Border Settings
897
  ----------------------------------------------------------*/
898
 
@@ -910,21 +1029,13 @@
910
  borderType : $(this.classes.settings + ' select[name=border_type]'),
911
  borderColor : $(this.classes.settings + ' input[name=border_color]'),
912
  borderColorPicker : $(this.classes.settings + ' .fl-picker-border_color'),
913
- borderOpacity : $(this.classes.settings + ' input[name=border_opacity]'),
914
- borderTopWidth : $(this.classes.settings + ' input[name=border_top]'),
915
- borderBottomWidth : $(this.classes.settings + ' input[name=border_bottom]'),
916
- borderLeftWidth : $(this.classes.settings + ' input[name=border_left]'),
917
- borderRightWidth : $(this.classes.settings + ' input[name=border_right]')
918
  });
919
 
920
  // Events
921
- this.elements.borderType.on( 'change', $.proxy(this._borderTypeChange, this));
922
- this.elements.borderColor.on( 'change', $.proxy(this._borderColorChange, this));
923
- this.elements.borderOpacity.on( 'keyup', $.proxy(this._borderOpacityChange, this));
924
- this.elements.borderTopWidth.on( 'keyup', $.proxy(this._borderWidthChange, this));
925
- this.elements.borderBottomWidth.on( 'keyup', $.proxy(this._borderWidthChange, this));
926
- this.elements.borderLeftWidth.on( 'keyup', $.proxy(this._borderWidthChange, this));
927
- this.elements.borderRightWidth.on( 'keyup', $.proxy(this._borderWidthChange, this));
928
  },
929
 
930
  /**
@@ -945,7 +1056,7 @@
945
  });
946
 
947
  this.elements.borderColor.trigger('change');
948
- this.elements.borderTopWidth.trigger('keyup');
949
  },
950
 
951
  /**
@@ -990,68 +1101,6 @@
990
  this.elements.borderColor.trigger('change');
991
  },
992
 
993
- /**
994
- * Get the border widths from a node preview event.
995
- *
996
- * @since 1.3.3
997
- * @access private
998
- * @method _getBorderWidths
999
- * @param {Object} e An event object.
1000
- * @return {Object} An object with tblr border widths.
1001
- */
1002
- _getBorderWidths: function(e)
1003
- {
1004
- var top = this.elements.borderTopWidth.val(),
1005
- bottom = this.elements.borderBottomWidth.val(),
1006
- left = this.elements.borderLeftWidth.val(),
1007
- right = this.elements.borderRightWidth.val();
1008
-
1009
- if(top === '') {
1010
- top = this.elements.borderTopWidth.attr('placeholder');
1011
- }
1012
- if(bottom === '') {
1013
- bottom = this.elements.borderBottomWidth.attr('placeholder');
1014
- }
1015
- if(left === '') {
1016
- left = this.elements.borderLeftWidth.attr('placeholder');
1017
- }
1018
- if(right === '') {
1019
- right = this.elements.borderRightWidth.attr('placeholder');
1020
- }
1021
-
1022
- return {
1023
- top : this.parseFloat(top),
1024
- bottom : this.parseFloat(bottom),
1025
- left : this.parseFloat(left),
1026
- right : this.parseFloat(right)
1027
- };
1028
- },
1029
-
1030
- /**
1031
- * Fires when the border width fields of
1032
- * a node change.
1033
- *
1034
- * @since 1.3.3
1035
- * @access private
1036
- * @method _borderWidthChange
1037
- * @param {Object} e An event object.
1038
- */
1039
- _borderWidthChange: function(e)
1040
- {
1041
- var widths = this._getBorderWidths();
1042
-
1043
- this.elements.borderColor.trigger('change');
1044
-
1045
- this.updateCSSRule(this.classes.content, {
1046
- 'border-top-width' : widths.top + 'px',
1047
- 'border-bottom-width' : widths.bottom + 'px',
1048
- 'border-left-width' : widths.left + 'px',
1049
- 'border-right-width' : widths.right + 'px',
1050
- });
1051
-
1052
- this._positionAbsoluteBgs();
1053
- },
1054
-
1055
  /* Node Class Name Settings
1056
  ----------------------------------------------------------*/
1057
 
@@ -1098,172 +1147,137 @@
1098
  ----------------------------------------------------------*/
1099
 
1100
  /**
1101
- * Initializes node margin previews.
 
1102
  *
1103
- * @since 1.3.3
1104
  * @access private
1105
- * @method _initMargins
1106
  */
1107
- _initMargins: function()
1108
  {
1109
- // Elements
1110
- $.extend(this.elements, {
1111
- marginTop : $(this.classes.settings + ' input[name=margin_top]'),
1112
- marginBottom : $(this.classes.settings + ' input[name=margin_bottom]'),
1113
- marginLeft : $(this.classes.settings + ' input[name=margin_left]'),
1114
- marginRight : $(this.classes.settings + ' input[name=margin_right]')
1115
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1116
 
1117
- // Events
1118
- this.elements.marginTop.on( 'keyup', $.proxy(this._marginChange, this));
1119
- this.elements.marginBottom.on( 'keyup', $.proxy(this._marginChange, this));
1120
- this.elements.marginLeft.on( 'keyup', $.proxy(this._marginChange, this));
1121
- this.elements.marginRight.on( 'keyup', $.proxy(this._marginChange, this));
1122
  },
1123
 
1124
  /**
1125
- * Get the margins from a node preview event.
1126
  *
1127
- * @since 1.3.3
1128
  * @access private
1129
- * @method _getMargins
1130
- * @param {Object} e An event object.
1131
- * @return {Object} An object with tblr margin data.
1132
  */
1133
- _getMargins: function(e)
1134
  {
1135
- var top = this.elements.marginTop.val(),
1136
- bottom = this.elements.marginBottom.val(),
1137
- left = this.elements.marginLeft.val(),
1138
- right = this.elements.marginRight.val();
1139
-
1140
- if(top === '') {
1141
- top = this.elements.marginTop.attr('placeholder');
1142
- }
1143
- if(bottom === '') {
1144
- bottom = this.elements.marginBottom.attr('placeholder');
1145
- }
1146
- if(left === '') {
1147
- left = this.elements.marginLeft.attr('placeholder');
1148
- }
1149
- if(right === '') {
1150
- right = this.elements.marginRight.attr('placeholder');
1151
  }
1152
-
1153
- return {
1154
- top : this.parseFloat(top),
1155
- bottom : this.parseFloat(bottom),
1156
- left : this.parseFloat(left),
1157
- right : this.parseFloat(right)
1158
- };
1159
  },
1160
 
1161
  /**
1162
- * Fires when a margin field of a node changes.
1163
  *
1164
- * @since 1.3.3
1165
  * @access private
1166
- * @method _marginChange
1167
- * @param {Object} e An event object.
1168
  */
1169
- _marginChange: function(e)
1170
  {
1171
- var margins = this._getMargins();
1172
-
1173
- this.updateCSSRule(this.classes.content, {
1174
- 'margin-top' : margins.top + 'px',
1175
- 'margin-bottom' : margins.bottom + 'px',
1176
- 'margin-left' : margins.left + 'px',
1177
- 'margin-right' : margins.right + 'px',
1178
- });
1179
-
1180
  this._positionAbsoluteBgs();
1181
  },
1182
 
1183
- /* Node Padding Settings
1184
- ----------------------------------------------------------*/
1185
-
1186
  /**
1187
- * Initializes node padding previews.
1188
  *
1189
- * @since 1.3.3
1190
  * @access private
1191
- * @method _initPadding
 
 
 
1192
  */
1193
- _initPadding: function()
1194
  {
1195
- // Elements
1196
- $.extend(this.elements, {
1197
- paddingTop : $(this.classes.settings + ' input[name=padding_top]'),
1198
- paddingBottom : $(this.classes.settings + ' input[name=padding_bottom]'),
1199
- paddingLeft : $(this.classes.settings + ' input[name=padding_left]'),
1200
- paddingRight : $(this.classes.settings + ' input[name=padding_right]')
1201
- });
1202
-
1203
- // Events
1204
- this.elements.paddingTop.on( 'keyup', $.proxy(this._paddingChange, this));
1205
- this.elements.paddingBottom.on( 'keyup', $.proxy(this._paddingChange, this));
1206
- this.elements.paddingLeft.on( 'keyup', $.proxy(this._paddingChange, this));
1207
- this.elements.paddingRight.on( 'keyup', $.proxy(this._paddingChange, this));
1208
- },
1209
-
1210
- /**
1211
- * Get the padding from a node preview event.
1212
- *
1213
- * @since 1.3.3
1214
- * @access private
1215
- * @method _getPadding
1216
- * @param {Object} e An event object.
1217
- * @return {Object} An object with tblr padding data.
1218
- */
1219
- _getPadding: function(e)
1220
- {
1221
- var top = this.elements.paddingTop.val(),
1222
- bottom = this.elements.paddingBottom.val(),
1223
- left = this.elements.paddingLeft.val(),
1224
- right = this.elements.paddingRight.val();
1225
-
1226
- if(top === '') {
1227
- top = this.elements.paddingTop.attr('placeholder');
1228
- }
1229
- if(bottom === '') {
1230
- bottom = this.elements.paddingBottom.attr('placeholder');
1231
- }
1232
- if(left === '') {
1233
- left = this.elements.paddingLeft.attr('placeholder');
1234
- }
1235
- if(right === '') {
1236
- right = this.elements.paddingRight.attr('placeholder');
1237
  }
1238
-
1239
- return {
1240
- top : this.parseFloat(top),
1241
- bottom : this.parseFloat(bottom),
1242
- left : this.parseFloat(left),
1243
- right : this.parseFloat(right)
1244
- };
1245
- },
1246
-
1247
- /**
1248
- * Fires when the padding field of a node changes.
1249
- *
1250
- * @since 1.3.3
1251
- * @access private
1252
- * @method _paddingChange
1253
- * @param {Object} e An event object.
1254
- */
1255
- _paddingChange: function(e)
1256
- {
1257
- var padding = this._getPadding();
1258
-
1259
- this.updateCSSRule(this.classes.content, {
1260
- 'padding-top' : padding.top + 'px',
1261
- 'padding-bottom' : padding.bottom + 'px',
1262
- 'padding-left' : padding.left + 'px',
1263
- 'padding-right' : padding.right + 'px',
1264
- });
1265
-
1266
- this._positionAbsoluteBgs();
1267
  },
1268
 
1269
  /* Absolutely Positioned Backgrounds
@@ -1279,35 +1293,39 @@
1279
  */
1280
  _positionAbsoluteBgs: function()
1281
  {
 
1282
  var slideshow = this.elements.node.find('.fl-bg-slideshow'),
1283
- video = this.elements.node.find('.fl-bg-video'),
1284
- margins = null,
1285
- borders = null;
1286
-
1287
- if(slideshow.length > 0 || video.length > 0) {
1288
-
1289
- margins = this._getMargins();
1290
- borders = this._getBorderWidths();
1291
-
1292
- if(slideshow.length > 0) {
1293
-
1294
- this.updateCSSRule(this.classes.node + ' .fl-bg-slideshow', {
1295
- 'top' : (margins.top + borders.top) + 'px',
1296
- 'bottom' : (margins.bottom + borders.bottom) + 'px',
1297
- 'left' : (margins.left + borders.left) + 'px',
1298
- 'right' : (margins.right + borders.right) + 'px',
1299
- });
1300
-
 
 
 
 
 
 
 
 
1301
  FLBuilder._resizeLayout();
1302
  }
1303
- if(video.length > 0) {
1304
-
1305
- this.updateCSSRule(this.classes.node + ' .fl-bg-video', {
1306
- 'top' : (margins.top + borders.top) + 'px',
1307
- 'bottom' : (margins.bottom + borders.bottom) + 'px',
1308
- 'left' : (margins.left + borders.left) + 'px',
1309
- 'right' : (margins.right + borders.right) + 'px',
1310
- });
1311
  }
1312
  }
1313
  },
@@ -1341,10 +1359,11 @@
1341
  // Common Elements
1342
  this._initNodeTextColor();
1343
  this._initNodeBg();
1344
- this._initNodeBorder();
1345
  this._initNodeClassName();
1346
- this._initMargins();
1347
- this._initPadding();
 
 
1348
  },
1349
 
1350
  /**
@@ -1444,10 +1463,11 @@
1444
  // Common Elements
1445
  this._initNodeTextColor();
1446
  this._initNodeBg();
1447
- this._initNodeBorder();
1448
  this._initNodeClassName();
1449
- this._initMargins();
1450
- this._initPadding();
 
 
1451
  },
1452
 
1453
  /**
@@ -1460,7 +1480,7 @@
1460
  _colSizeChange: function()
1461
  {
1462
  var preview = this,
1463
- minWidth = 10,
1464
  maxWidth = 100 - minWidth,
1465
  size = parseFloat(this.elements.size.val()),
1466
  prev = this.elements.node.prev('.fl-col'),
@@ -1557,7 +1577,7 @@
1557
  _initModule: function()
1558
  {
1559
  this._initNodeClassName();
1560
- this._initMargins();
1561
  },
1562
 
1563
  /* Default Field Previews
@@ -1677,6 +1697,10 @@
1677
  case 'suggest':
1678
  field.find('.as-values').on('change', callback);
1679
  break;
 
 
 
 
1680
 
1681
  }
1682
  },
@@ -1701,6 +1725,10 @@
1701
  field.find('input[type=text]').on('keyup', callback);
1702
  break;
1703
 
 
 
 
 
1704
  case 'textarea':
1705
  field.find('textarea').on('keyup', callback);
1706
  break;
@@ -1974,6 +2002,10 @@
1974
  field.find( 'input[type=text]' ).on( 'keyup', $.proxy( this._previewCSS, this, preview ) );
1975
  break;
1976
 
 
 
 
 
1977
  case 'select':
1978
  field.find( 'select' ).on( 'change', $.proxy( this._previewCSS, this, preview ) );
1979
  break;
@@ -1998,7 +2030,8 @@
1998
  var selector = this._getPreviewSelector( this.classes.node, preview.selector ),
1999
  property = preview.property,
2000
  unit = typeof preview.unit == 'undefined' ? '' : preview.unit,
2001
- value = $(e.target).val();
 
2002
 
2003
  if(unit == '%') {
2004
  value = parseInt(value)/100;
@@ -2007,7 +2040,12 @@
2007
  value += unit;
2008
  }
2009
 
2010
- this.updateCSSRule(selector, property, value);
 
 
 
 
 
2011
  },
2012
 
2013
  /**
@@ -2022,10 +2060,16 @@
2022
  _previewColor: function(preview, e)
2023
  {
2024
  var selector = this._getPreviewSelector( this.classes.node, preview.selector ),
2025
- val = $(e.target).val(),
 
2026
  color = val === '' ? 'inherit' : '#' + val;
2027
-
2028
- this.updateCSSRule(selector, preview.property, color);
 
 
 
 
 
2029
  },
2030
 
2031
  /**
@@ -2074,4 +2118,4 @@
2074
  }
2075
  };
2076
 
2077
- })(jQuery);
107
  */
108
  _styleSheet : null,
109
 
110
+ /**
111
+ * An instance of FLStyleSheet for the medium device preview.
112
+ *
113
+ * @since 1.9
114
+ * @access private
115
+ * @property {FLStyleSheet} _styleSheetMedium
116
+ */
117
+ _styleSheetMedium : null,
118
+
119
+ /**
120
+ * An instance of FLStyleSheet for the responsive device preview.
121
+ *
122
+ * @since 1.9
123
+ * @access private
124
+ * @property {FLStyleSheet} _styleSheet
125
+ */
126
+ _styleSheetResponsive : null,
127
+
128
  /**
129
  * A timeout object for delaying the current preview refresh.
130
  *
170
  // Elements and Class Names
171
  this._initElementsAndClasses();
172
 
173
+ // Create the preview stylesheets
174
+ this._createSheets();
175
+
176
+ // Responsive previews
177
+ this._initResponsivePreviews();
178
+
179
  // Default field previews
180
  this._initDefaultFieldPreviews();
181
 
241
 
242
  // Content Class
243
  if(this.type == 'row') {
244
+ contentClass = '> .fl-row-content-wrap';
245
  }
246
  else {
247
+ contentClass = '> .fl-' + this.type + '-content';
248
  }
249
 
250
  // Class Names
252
  settings : '.fl-builder-' + this.type + '-settings',
253
  settingsHeader : '.fl-builder-' + this.type + '-settings .fl-lightbox-header',
254
  node : FLBuilder._contentClass + ' .fl-node-' + this.nodeId,
255
+ content : FLBuilder._contentClass + ' .fl-node-' + this.nodeId + ' > ' + contentClass
256
  });
257
 
258
  // Elements
264
  });
265
  },
266
 
267
+ /**
268
+ * Creates the stylesheets for default, medium
269
+ * and responsive previews.
270
+ *
271
+ * @since 1.9
272
+ * @method _createSheets
273
+ */
274
+ _createSheets: function()
275
+ {
276
+ if ( ! this._styleSheet ) {
277
+ this._styleSheet = new FLStyleSheet( { id : 'fl-builder-preview' } );
278
+ }
279
+ if ( ! this._styleSheetMedium ) {
280
+ this._styleSheetMedium = new FLStyleSheet( { id : 'fl-builder-preview-medium' } );
281
+ }
282
+ if ( ! this._styleSheetResponsive ) {
283
+ this._styleSheetResponsive = new FLStyleSheet( { id : 'fl-builder-preview-responsive' } );
284
+ }
285
+ },
286
+
287
+ /**
288
+ * Destroys all preview sheets.
289
+ *
290
+ * @since 1.9
291
+ * @method _destroySheets
292
+ */
293
+ _destroySheets: function()
294
+ {
295
+ if ( this._styleSheet ) {
296
+ this._styleSheet.destroy();
297
+ this._styleSheet = null;
298
+ }
299
+ if ( this._styleSheetMedium ) {
300
+ this._styleSheetMedium.destroy();
301
+ this._styleSheetMedium = null;
302
+ }
303
+ if ( this._styleSheetResponsive ) {
304
+ this._styleSheetResponsive.destroy();
305
+ this._styleSheetResponsive = null;
306
+ }
307
+ },
308
+
309
  /**
310
  * Updates a CSS rule for this preview.
311
  *
315
  * @param {String} property The CSS property to update.
316
  * @param {String} value The CSS value to update.
317
  */
318
+ updateCSSRule: function( selector, property, value )
319
  {
320
+ this._styleSheet.updateRule( selector, property, value );
 
 
 
 
 
 
321
  },
322
 
323
  /**
379
  return isNaN(parseFloat(value)) ? 0 : parseFloat(value);
380
  },
381
 
382
+ /* Responsive Previews
383
+ ----------------------------------------------------------*/
384
+
385
+ /**
386
+ * Initializes logic for responsive previews.
387
+ *
388
+ * @since 1.9
389
+ * @method _initResponsivePreviews
390
+ */
391
+ _initResponsivePreviews: function()
392
+ {
393
+ FLBuilder.addHook( 'responsive-editing-switched', $.proxy( this._responsiveEditingSwitched, this ) );
394
+ },
395
+
396
+ /**
397
+ * Destroys responsive preview events.
398
+ *
399
+ * @since 1.9
400
+ * @method _destroyResponsivePreviews
401
+ */
402
+ _destroyResponsivePreviews: function()
403
+ {
404
+ FLBuilder.removeHook( 'responsive-editing-switched' );
405
+ },
406
+
407
+ /**
408
+ * Initializes logic for responsive previews.
409
+ *
410
+ * @since 1.9
411
+ * @method _responsiveEditingSwitched
412
+ */
413
+ _responsiveEditingSwitched: function( e, mode )
414
+ {
415
+ if ( 'default' == mode ) {
416
+ this._styleSheetMedium.disable();
417
+ this._styleSheetResponsive.disable();
418
+ }
419
+ else if ( 'medium' == mode ) {
420
+ this._styleSheetMedium.enable();
421
+ this._styleSheetResponsive.disable();
422
+ }
423
+ else if ( 'responsive' == mode ) {
424
+ this._styleSheetMedium.disable();
425
+ this._styleSheetResponsive.enable();
426
+ }
427
+ },
428
+
429
+ /**
430
+ * Updates a CSS rule for responsive preview.
431
+ *
432
+ * @since 1.9
433
+ * @method updateResponsiveCSSRule
434
+ * @param {String} selector The CSS selector to update.
435
+ * @param {String} property The CSS property to update.
436
+ * @param {String} value The CSS value to update.
437
+ */
438
+ updateResponsiveCSSRule: function( selector, property, value )
439
+ {
440
+ var mode = FLBuilderResponsiveEditing._mode,
441
+ sheetKey = 'default' == mode ? '' : mode.charAt(0).toUpperCase() + mode.slice(1);
442
+
443
+ this[ '_styleSheet' + sheetKey ].updateRule( selector, property, value );
444
+ },
445
+
446
  /* States
447
  ----------------------------------------------------------*/
448
 
577
  */
578
  revert: function()
579
  {
580
+ // Clear the preview.
581
+ this.clear();
 
 
 
 
 
 
582
 
583
  // Render the layout.
584
  if ( this._settingsHaveChanged() ) {
599
  this._cancelDelay();
600
  this._cancelPreview();
601
 
602
+ // Destroy the preview stylesheet.
603
+ this._destroySheets();
604
+
605
+ // Destroy responsive editing previews.
606
+ this._destroyResponsivePreviews();
607
  },
608
+
609
  /* Node Text Color Settings
610
  ----------------------------------------------------------*/
611
 
998
 
999
  }
1000
  },
1001
+
1002
  /**
1003
  * Fires when a background overlay color is cleared.
1004
  *
1011
  {
1012
  this.elements.bgOverlayColor.prev('.fl-color-picker-clear').trigger('click');
1013
  },
1014
+
1015
  /* Node Border Settings
1016
  ----------------------------------------------------------*/
1017
 
1029
  borderType : $(this.classes.settings + ' select[name=border_type]'),
1030
  borderColor : $(this.classes.settings + ' input[name=border_color]'),
1031
  borderColorPicker : $(this.classes.settings + ' .fl-picker-border_color'),
1032
+ borderOpacity : $(this.classes.settings + ' input[name=border_opacity]')
 
 
 
 
1033
  });
1034
 
1035
  // Events
1036
+ this.elements.borderType.on( 'change', $.proxy(this._borderTypeChange, this));
1037
+ this.elements.borderColor.on( 'change', $.proxy(this._borderColorChange, this));
1038
+ this.elements.borderOpacity.on( 'keyup', $.proxy(this._borderOpacityChange, this));
 
 
 
 
1039
  },
1040
 
1041
  /**
1056
  });
1057
 
1058
  this.elements.borderColor.trigger('change');
1059
+ this.elements.borderTop.trigger('keyup');
1060
  },
1061
 
1062
  /**
1101
  this.elements.borderColor.trigger('change');
1102
  },
1103
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1104
  /* Node Class Name Settings
1105
  ----------------------------------------------------------*/
1106
 
1147
  ----------------------------------------------------------*/
1148
 
1149
  /**
1150
+ * Initializes node responsive dimension previews for things
1151
+ * like margins, padding and borders.
1152
  *
1153
+ * @since 1.9
1154
  * @access private
1155
+ * @method _initResponsiveDimensions
1156
  */
1157
+ _initResponsiveDimensions: function( property )
1158
  {
1159
+ var elements = {},
1160
+ dimensions = [ 'Top', 'Bottom', 'Left', 'Right' ],
1161
+ devices = [ '', 'Medium', 'Responsive' ],
1162
+ settingsClass = this.classes.settings,
1163
+ elementKey = '',
1164
+ inputName = '',
1165
+ i = null,
1166
+ k = null;
1167
+
1168
+ for ( i = 0; i < dimensions.length; i++ ) {
1169
+
1170
+ for ( k = 0; k < devices.length; k++ ) {
1171
+
1172
+ elementKey = property + dimensions[ i ] + devices[ k ];
1173
+ inputName = property + '_' + dimensions[ i ].toLowerCase();
1174
+
1175
+ if ( '' != devices[ k ] ) {
1176
+ inputName += '_' + devices[ k ].toLowerCase();
1177
+ }
1178
+
1179
+ elements[ elementKey ] = $( settingsClass + ' input[name=' + inputName + ']');
1180
+ elements[ elementKey ].on( 'keyup', $.proxy( this._responsiveDimensionChange, this, property ) );
1181
+ }
1182
+ }
1183
 
1184
+ $.extend( this.elements, elements );
 
 
 
 
1185
  },
1186
 
1187
  /**
1188
+ * Get all dimensions from a node preview event.
1189
  *
1190
+ * @since 1.9
1191
  * @access private
1192
+ * @method _getDimensions
1193
+ * @param {String} property
1194
+ * @return {Object} An object with tblr data.
1195
  */
1196
+ _getDimensions: function( property )
1197
  {
1198
+ var mode = FLBuilderResponsiveEditing._mode,
1199
+ dimensions = [ 'Top', 'Bottom', 'Left', 'Right' ],
1200
+ device = 'default' == mode ? '' : mode.charAt(0).toUpperCase() + mode.slice(1),
1201
+ values = {},
1202
+ i = 0;
1203
+
1204
+ for ( ; i < dimensions.length; i++ ) {
1205
+ values[ dimensions[ i ].toLowerCase() ] = this.elements[ property + dimensions[ i ] + device ].val();
 
 
 
 
 
 
 
 
1206
  }
1207
+
1208
+ return this._normalizeDimensionValues( values, property );
 
 
 
 
 
1209
  },
1210
 
1211
  /**
1212
+ * Fires when a dimension field of a node changes.
1213
  *
1214
+ * @since 1.9
1215
  * @access private
1216
+ * @method _responsiveDimensionChange
1217
+ * @param {String} property
1218
  */
1219
+ _responsiveDimensionChange: function( property )
1220
  {
1221
+ var newDimensions = this._getDimensions( property ),
1222
+ newRules = {},
1223
+ isBorder = 'border' == property;
1224
+
1225
+ $.each( newDimensions, function( dir, val ) {
1226
+ newRules[ property + '-' + dir + ( isBorder ? '-width' : '' ) ] = val;
1227
+ } );
1228
+
1229
+ this.updateResponsiveCSSRule( this.classes.content, newRules );
1230
  this._positionAbsoluteBgs();
1231
  },
1232
 
 
 
 
1233
  /**
1234
+ * Normalize CSS dimension values.
1235
  *
1236
+ * @since 1.9
1237
  * @access private
1238
+ * @method _normalizeDimensionValues
1239
+ * @param {Object} values Object of margins/paddings/border widths values.
1240
+ * @param {String} property CSS property to get, can be 'margin', 'padding' or 'border-width'.
1241
+ * @return {Object} An object of normalized margins/paddings/border widths values with units.
1242
  */
1243
+ _normalizeDimensionValues: function( values, property )
1244
  {
1245
+ var parent = this,
1246
+ mode = FLBuilderResponsiveEditing._mode,
1247
+ device = 'default' == mode ? '' : mode.charAt(0).toUpperCase() + mode.slice(1),
1248
+
1249
+ // Separate property name from property suffix
1250
+ property = property.split( '-' );
1251
+
1252
+ // Set correct property suffix
1253
+ if ( 'undefined' === typeof property[1] ) {
1254
+ property[1] = '';
1255
+ } else {
1256
+ property[1] = property[1].charAt( 0 ).toUpperCase() + property[1].slice( 1 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1257
  }
1258
+
1259
+ $.map( values, function( val, key ) {
1260
+ val = val.toLowerCase().replace( /[^a-z0-9%.\-]/g, '' );
1261
+
1262
+ // Fall back to placeholder if the value is empty
1263
+ if ( '' === val ) {
1264
+ var option = property[0] + key.charAt( 0 ).toUpperCase() + key.slice( 1 ) + property[1] + device,
1265
+ placeholder = parent.elements[ option ].attr( 'placeholder' );
1266
+
1267
+ if ( placeholder ) {
1268
+ val = placeholder;
1269
+ }
1270
+ }
1271
+
1272
+ // Fall back to pixels when numeric value set
1273
+ if ( null !== val && '' !== val && ! isNaN( val ) ) {
1274
+ val = parseFloat( val ) + 'px';
1275
+ }
1276
+
1277
+ values[ key ] = val;
1278
+ } );
1279
+
1280
+ return values;
 
 
 
 
 
 
1281
  },
1282
 
1283
  /* Absolutely Positioned Backgrounds
1293
  */
1294
  _positionAbsoluteBgs: function()
1295
  {
1296
+ // @todo Oliver: Why is this actually needed???
1297
  var slideshow = this.elements.node.find('.fl-bg-slideshow'),
1298
+ video = this.elements.node.find('.fl-bg-video'),
1299
+ margins = null,
1300
+ borders = null,
1301
+ position = {
1302
+ 'top' : 0,
1303
+ 'bottom' : 0,
1304
+ 'left' : 0,
1305
+ 'right' : 0,
1306
+ };
1307
+
1308
+ if ( slideshow.length > 0 || video.length > 0 ) {
1309
+ margins = this._getDimensions( 'margin' );
1310
+ borders = this._getDimensions( 'border' );
1311
+
1312
+ $.map( position, function( val, key ) {
1313
+ if ( margins[ key ] && borders[ key ] ) {
1314
+ position[ key ] = 'calc(' + margins[ key ] + '+' + borders[ key ] + ')';
1315
+ } else if ( margins[ key ] ) {
1316
+ position[ key ] = margins[ key ];
1317
+ } else if ( borders[ key ] ) {
1318
+ position[ key ] = borders[ key ];
1319
+ }
1320
+ } );
1321
+
1322
+ if ( slideshow.length > 0 ) {
1323
+ this.updateCSSRule( this.classes.node + ' .fl-bg-slideshow', position );
1324
  FLBuilder._resizeLayout();
1325
  }
1326
+
1327
+ if ( video.length > 0 ) {
1328
+ this.updateCSSRule( this.classes.node + ' .fl-bg-video', position );
 
 
 
 
 
1329
  }
1330
  }
1331
  },
1359
  // Common Elements
1360
  this._initNodeTextColor();
1361
  this._initNodeBg();
 
1362
  this._initNodeClassName();
1363
+ this._initNodeBorder();
1364
+ this._initResponsiveDimensions( 'border' );
1365
+ this._initResponsiveDimensions( 'margin' );
1366
+ this._initResponsiveDimensions( 'padding' );
1367
  },
1368
 
1369
  /**
1463
  // Common Elements
1464
  this._initNodeTextColor();
1465
  this._initNodeBg();
 
1466
  this._initNodeClassName();
1467
+ this._initNodeBorder();
1468
+ this._initResponsiveDimensions( 'border' );
1469
+ this._initResponsiveDimensions( 'margin' );
1470
+ this._initResponsiveDimensions( 'padding' );
1471
  },
1472
 
1473
  /**
1480
  _colSizeChange: function()
1481
  {
1482
  var preview = this,
1483
+ minWidth = 8,
1484
  maxWidth = 100 - minWidth,
1485
  size = parseFloat(this.elements.size.val()),
1486
  prev = this.elements.node.prev('.fl-col'),
1577
  _initModule: function()
1578
  {
1579
  this._initNodeClassName();
1580
+ this._initResponsiveDimensions( 'margin' );
1581
  },
1582
 
1583
  /* Default Field Previews
1697
  case 'suggest':
1698
  field.find('.as-values').on('change', callback);
1699
  break;
1700
+
1701
+ case 'unit':
1702
+ field.find('input[type=number]').on('keyup', callback);
1703
+ break;
1704
 
1705
  }
1706
  },
1725
  field.find('input[type=text]').on('keyup', callback);
1726
  break;
1727
 
1728
+ case 'unit':
1729
+ field.find('input[type=number]').on('keyup', callback);
1730
+ break;
1731
+
1732
  case 'textarea':
1733
  field.find('textarea').on('keyup', callback);
1734
  break;
2002
  field.find( 'input[type=text]' ).on( 'keyup', $.proxy( this._previewCSS, this, preview ) );
2003
  break;
2004
 
2005
+ case 'unit':
2006
+ field.find( 'input[type=number]' ).on( 'keyup', $.proxy( this._previewCSS, this, preview ) );
2007
+ break;
2008
+
2009
  case 'select':
2010
  field.find( 'select' ).on( 'change', $.proxy( this._previewCSS, this, preview ) );
2011
  break;
2030
  var selector = this._getPreviewSelector( this.classes.node, preview.selector ),
2031
  property = preview.property,
2032
  unit = typeof preview.unit == 'undefined' ? '' : preview.unit,
2033
+ input = $(e.target),
2034
+ value = input.val();
2035
 
2036
  if(unit == '%') {
2037
  value = parseInt(value)/100;
2040
  value += unit;
2041
  }
2042
 
2043
+ if ( input.closest( '.fl-field-responsive-setting' ).length ) {
2044
+ this.updateResponsiveCSSRule( selector, property, value );
2045
+ }
2046
+ else {
2047
+ this.updateCSSRule( selector, property, value );
2048
+ }
2049
  },
2050
 
2051
  /**
2060
  _previewColor: function(preview, e)
2061
  {
2062
  var selector = this._getPreviewSelector( this.classes.node, preview.selector ),
2063
+ input = $(e.target),
2064
+ val = input.val(),
2065
  color = val === '' ? 'inherit' : '#' + val;
2066
+
2067
+ if ( input.closest( '.fl-field-responsive-setting' ).length ) {
2068
+ this.updateResponsiveCSSRule( selector, preview.property, color );
2069
+ }
2070
+ else {
2071
+ this.updateCSSRule( selector, preview.property, color );
2072
+ }
2073
  },
2074
 
2075
  /**
2118
  }
2119
  };
2120
 
2121
+ })(jQuery);
js/fl-builder-responsive-editing.js ADDED
@@ -0,0 +1,549 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( $ ) {
2
+
3
+ /**
4
+ * Helper for handling responsive editing logic.
5
+ *
6
+ * @since 1.9
7
+ * @class FLBuilderResponsiveEditing
8
+ */
9
+ FLBuilderResponsiveEditing = {
10
+
11
+ /**
12
+ * The current editing mode we're in.
13
+ *
14
+ * @since 1.9
15
+ * @private
16
+ * @property {FLBuilderPreview} _mode
17
+ */
18
+ _mode: 'default',
19
+
20
+ /**
21
+ * Cached references to fields that have logic run
22
+ * on them when the preview is toggled.
23
+ *
24
+ * @since 1.9
25
+ * @private
26
+ * @property {Object} _fields
27
+ */
28
+ _fields: {},
29
+
30
+ /**
31
+ * Refreshes the media queries for the responsive preview
32
+ * if necessary.
33
+ *
34
+ * @since 1.9
35
+ * @method refreshPreview
36
+ */
37
+ refreshPreview: function()
38
+ {
39
+ if ( $( '.fl-responsive-preview' ).length ) {
40
+ FLBuilderForcedMediaQueries.update();
41
+ }
42
+ },
43
+
44
+ /**
45
+ * Initializes responsive editing.
46
+ *
47
+ * @since 1.9
48
+ * @access private
49
+ * @method _init
50
+ */
51
+ _init: function()
52
+ {
53
+ this._bind();
54
+ },
55
+
56
+ /**
57
+ * Bind events.
58
+ *
59
+ * @since 1.9
60
+ * @access private
61
+ * @method _bind
62
+ */
63
+ _bind: function()
64
+ {
65
+ FLBuilder.addHook( 'responsive-editing-switched', this._previewSpacingFields );
66
+ FLBuilder.addHook( 'settings-form-init', this._initSettingsForms );
67
+ FLBuilder.addHook( 'settings-lightbox-closed', this._clearPreview );
68
+
69
+ $( 'body' ).delegate( '.fl-field-responsive-toggle', 'click', this._settingToggleClicked );
70
+ },
71
+
72
+ /**
73
+ * Switches to either mobile, tablet or desktop editing.
74
+ *
75
+ * @since 1.9
76
+ * @access private
77
+ * @method _switchTo
78
+ */
79
+ _switchTo: function( mode, callback )
80
+ {
81
+ var body = $( 'body' ),
82
+ content = $( FLBuilder._contentClass ),
83
+ preview = $( '.fl-responsive-preview' ),
84
+ mask = $( '.fl-responsive-preview-mask' ),
85
+ placeholder = $( '.fl-content-placeholder' ),
86
+ width = null;
87
+
88
+ // Save the new mode.
89
+ FLBuilderResponsiveEditing._mode = mode;
90
+
91
+ // Setup the preview.
92
+ if ( 'default' == mode ) {
93
+
94
+ if ( 0 === placeholder.length ) {
95
+ return;
96
+ }
97
+
98
+ placeholder.after( content );
99
+ placeholder.remove();
100
+ preview.remove();
101
+ mask.remove();
102
+ }
103
+ else if ( 0 === preview.length ) {
104
+ content.after( '<div class="fl-content-placeholder"></div>' );
105
+ body.prepend( wp.template( 'fl-responsive-preview' )() );
106
+ $( '.fl-responsive-preview' ).addClass( 'fl-preview-' + mode );
107
+ $( '.fl-responsive-preview-content' ).append( content );
108
+ }
109
+ else {
110
+ preview.removeClass( 'fl-preview-responsive fl-preview-medium' );
111
+ preview.addClass( 'fl-preview-' + mode );
112
+ }
113
+
114
+ // Set the content width and apply media queries.
115
+ if ( 'responsive' == mode ) {
116
+ width = FLBuilderConfig.global.responsive_breakpoint >= 320 ? 320 : FLBuilderConfig.global.responsive_breakpoint;
117
+ content.width( width );
118
+ FLBuilderForcedMediaQueries.update( width, callback );
119
+ }
120
+ else if ( 'medium' == mode ) {
121
+ width = FLBuilderConfig.global.medium_breakpoint >= 769 ? 769 : FLBuilderConfig.global.medium_breakpoint;
122
+ content.width( width );
123
+ FLBuilderForcedMediaQueries.update( width, callback );
124
+ }
125
+ else {
126
+ content.width( '' );
127
+ FLBuilderForcedMediaQueries.update( 10000, callback );
128
+ }
129
+
130
+ // Set the content background color.
131
+ this._setContentBackgroundColor();
132
+
133
+ // Resize the layout.
134
+ FLBuilder._resizeLayout();
135
+
136
+ // Broadcast the switch.
137
+ FLBuilder.triggerHook( 'responsive-editing-switched', mode );
138
+ },
139
+
140
+ /**
141
+ * Sets the background color for the builder content
142
+ * in a responsive preview.
143
+ *
144
+ * @since 1.9
145
+ * @access private
146
+ * @method _setContentBackgroundColor
147
+ */
148
+ _setContentBackgroundColor: function()
149
+ {
150
+ var content = $( FLBuilder._contentClass ),
151
+ preview = $( '.fl-responsive-preview' ),
152
+ placeholder = $( '.fl-content-placeholder' ),
153
+ parents = placeholder.parents(),
154
+ parent = null,
155
+ color = '#fff',
156
+ i = 0;
157
+
158
+ if ( 0 === preview.length ) {
159
+ content.css( 'background-color', '' );
160
+ }
161
+ else {
162
+
163
+ for( ; i < parents.length; i++ ) {
164
+
165
+ color = parents.eq( i ).css( 'background-color' );
166
+
167
+ if ( color != 'rgba(0, 0, 0, 0)' ) {
168
+ break;
169
+ }
170
+ }
171
+
172
+ content.css( 'background-color', color );
173
+ }
174
+ },
175
+
176
+ /**
177
+ * Switches to the given mode and scrolls to an
178
+ * active node if one is present.
179
+ *
180
+ * @since 1.9
181
+ * @access private
182
+ * @method _switchToAndScroll
183
+ */
184
+ _switchToAndScroll: function( mode )
185
+ {
186
+ var nodeId = $( '.fl-builder-settings' ).data( 'node' ),
187
+ element = undefined === nodeId ? undefined : $( '.fl-node-' + nodeId );
188
+
189
+ FLBuilderResponsiveEditing._switchTo( mode, function() {
190
+
191
+ if ( undefined !== element && element ) {
192
+
193
+ setTimeout( function(){
194
+
195
+ var win = $( window ),
196
+ content = $( '.fl-responsive-preview-content' );
197
+
198
+ if ( ! content.length || win.height() < content.height() ) {
199
+ $( 'html, body' ).animate( {
200
+ scrollTop: element.offset().top - 100
201
+ }, 250 );
202
+ }
203
+ else {
204
+ scrollTo( 0, 0 );
205
+ }
206
+
207
+ }, 250 );
208
+ }
209
+ } );
210
+ },
211
+
212
+ /**
213
+ * Clears the responsive editing preview and reverts
214
+ * to the default view.
215
+ *
216
+ * @since 1.9
217
+ * @access private
218
+ * @method _clearPreview
219
+ */
220
+ _clearPreview: function()
221
+ {
222
+ FLBuilderResponsiveEditing._switchToAndScroll( 'default' );
223
+ },
224
+
225
+ /**
226
+ * Callback for when the responsive toggle of a setting
227
+ * is clicked.
228
+ *
229
+ * @since 1.9
230
+ * @access private
231
+ * @method _settingToggleClicked
232
+ */
233
+ _settingToggleClicked: function()
234
+ {
235
+ var toggle = $( this ),
236
+ mode = toggle.data( 'mode' );
237
+
238
+ if ( 'default' == mode ) {
239
+ mode = 'medium';
240
+ }
241
+ else if ( 'medium' == mode ) {
242
+ mode = 'responsive';
243
+ }
244
+ else {
245
+ mode = 'default';
246
+ }
247
+
248
+ FLBuilderResponsiveEditing._switchAllSettingsTo( mode );
249
+
250
+ toggle.siblings( '.fl-field-responsive-setting:visible' ).find( 'input' ).focus();
251
+ },
252
+
253
+ /**
254
+ * Switches all responsive settings in a settings form
255
+ * to the given mode.
256
+ *
257
+ * @since 1.9
258
+ * @access private
259
+ * @method _switchAllSettingsTo
260
+ * @param {String} mode
261
+ */
262
+ _switchAllSettingsTo: function( mode )
263
+ {
264
+ var className = 'dashicons-desktop dashicons-tablet dashicons-smartphone';
265
+
266
+ $( '.fl-field-responsive-toggle' ).removeClass( className );
267
+ $( '.fl-field-responsive-setting' ).hide();
268
+
269
+ if ( 'default' == mode ) {
270
+ className = 'dashicons-desktop';
271
+ }
272
+ else if ( 'medium' == mode ) {
273
+ className = 'dashicons-tablet';
274
+ }
275
+ else {
276
+ className = 'dashicons-smartphone';
277
+ }
278
+
279
+ $( '.fl-field-responsive-toggle' ).addClass( className ).data( 'mode', mode );
280
+ $( '.fl-field-responsive-setting-' + mode ).css( 'display', 'inline-block' );
281
+
282
+ FLBuilderResponsiveEditing._switchToAndScroll( mode );
283
+ },
284
+
285
+ /**
286
+ * Initializes responsive settings in settings forms.
287
+ *
288
+ * @since 1.9
289
+ * @access private
290
+ * @method _initSettingsForms
291
+ */
292
+ _initSettingsForms: function()
293
+ {
294
+ var self = FLBuilderResponsiveEditing;
295
+
296
+ if ( Number( FLBuilderConfig.global.responsive_enabled ) ) {
297
+
298
+ FLBuilderResponsiveEditing._fields = {};
299
+
300
+ self._initFields( 'unit', 'input', 'keyup', self._spacingFieldKeyup, [
301
+ 'margin_top',
302
+ 'margin_bottom',
303
+ 'margin_left',
304
+ 'margin_right',
305
+ 'padding_top',
306
+ 'padding_bottom',
307
+ 'padding_left',
308
+ 'padding_right'
309
+ ] );
310
+
311
+ self._initFields( 'unit', 'input', 'keyup', self._textFieldKeyup );
312
+ }
313
+
314
+ self._switchAllSettingsTo( self._mode );
315
+ },
316
+
317
+ /**
318
+ * Initializes responsive logic for fields when
319
+ * an event occurs.
320
+ *
321
+ * @since 1.9
322
+ * @access private
323
+ * @method _initFields
324
+ * @param {String} type
325
+ * @param {String} event
326
+ * @param {Function} callback
327
+ * @param {Array} names
328
+ */
329
+ _initFields: function( type, selector, event, callback, names )
330
+ {
331
+ var form = $( '.fl-builder-settings' ),
332
+ fields = form.find( '.fl-field' ).has( '.fl-field-responsive-setting' ),
333
+ field = null,
334
+ name = null,
335
+ i = 0,
336
+ j = 0;
337
+
338
+ if ( 'object' != typeof this._fields[ type ] ) {
339
+ this._fields[ type ] = {};
340
+ }
341
+
342
+ for ( ; i < fields.length; i++ ) {
343
+
344
+ field = fields.eq( i );
345
+ name = field.attr( 'id' ).replace( 'fl-field-', '' );
346
+
347
+ if ( 'object' == typeof names && $.inArray( name, names ) < 0 ) {
348
+ continue;
349
+ }
350
+ if ( type != field.attr( 'data-type' ) ) {
351
+ continue;
352
+ }
353
+ if ( undefined !== field.attr( 'data-responsive-init' ) ) {
354
+ continue;
355
+ }
356
+
357
+ this._fields[ type ][ name ] = {
358
+ 'default' : field.find( '.fl-field-responsive-setting-default ' + selector ),
359
+ 'medium' : field.find( '.fl-field-responsive-setting-medium ' + selector ),
360
+ 'responsive' : field.find( '.fl-field-responsive-setting-responsive ' + selector )
361
+ };
362
+
363
+ for ( j in this._fields[ type ][ name ] ) {
364
+ this._fields[ type ][ name ][ j ].on( event, callback );
365
+ }
366
+
367
+ this._fields[ type ][ name ][ 'default' ].trigger( event );
368
+
369
+ field.attr( 'data-responsive-init', 1 );
370
+ }
371
+ },
372
+
373
+ /**
374
+ * Returns the fields object for an element.
375
+ *
376
+ * @since 1.9
377
+ * @access private
378
+ * @method _getFields
379
+ */
380
+ _getFields: function( element )
381
+ {
382
+ var field = $( element ).closest( '.fl-field' );
383
+ type = field.attr( 'data-type' ),
384
+ name = field.attr( 'id' ).replace( 'fl-field-', '' );
385
+
386
+ return this._fields[ type ][ name ];
387
+ },
388
+
389
+ /**
390
+ * Callback for the keyup event on a text field.
391
+ *
392
+ * @since 1.9
393
+ * @access private
394
+ * @method _textFieldKeyup
395
+ */
396
+ _textFieldKeyup: function()
397
+ {
398
+ var fields = FLBuilderResponsiveEditing._getFields( this ),
399
+ defaultPlaceholder = fields.default.attr( 'placeholder' ),
400
+ defaultValue = fields.default.val(),
401
+ mediumValue = fields.medium.val();
402
+
403
+ // Medium placeholder
404
+ if ( '' == defaultValue ) {
405
+ fields.medium.attr( 'placeholder', ( undefined === defaultPlaceholder ? '' : defaultPlaceholder ) );
406
+ }
407
+ else {
408
+ fields.medium.attr( 'placeholder', defaultValue );
409
+ }
410
+
411
+ // Responsive placeholder
412
+ if ( '' == mediumValue ) {
413
+ fields.responsive.attr( 'placeholder', fields.medium.attr( 'placeholder' ) );
414
+ }
415
+ else {
416
+ fields.responsive.attr( 'placeholder', mediumValue );
417
+ }
418
+ },
419
+
420
+ /**
421
+ * Callback for the keyup event on a spacing field.
422
+ *
423
+ * @since 1.9
424
+ * @access private
425
+ * @method _spacingFieldKeyup
426
+ */
427
+ _spacingFieldKeyup: function()
428
+ {
429
+ var form = $( '.fl-builder-settings' ),
430
+ type = 'row',
431
+ parts = $( this ).closest( '.fl-field' ).attr( 'id' ).replace( 'fl-field-', '' ).split( '_' ),
432
+ field = parts[0],
433
+ dimension = parts[1],
434
+ fields = FLBuilderResponsiveEditing._fields[ 'unit' ][ field + '_' + dimension ],
435
+ config = FLBuilderConfig.global,
436
+ configPrefix = null,
437
+ defaultVal = fields.default.val(),
438
+ defaultGlobalVal = null,
439
+ mediumVal = fields.medium.val(),
440
+ mediumGlobalVal = null,
441
+ responsiveVal = fields.responsive.val(),
442
+ responsiveGlobalVal = null,
443
+ moduleGlobalVal = null,
444
+ moduleResponsiveVal = null;
445
+
446
+ // Get the node type
447
+ if ( form.hasClass( 'fl-builder-row-settings' ) ) {
448
+ type = 'row';
449
+ }
450
+ else if ( form.hasClass( 'fl-builder-col-settings' ) ) {
451
+ type = 'col';
452
+ }
453
+ else if ( form.hasClass( 'fl-builder-module-settings' ) ) {
454
+ type = 'module';
455
+ }
456
+
457
+ // Spoof global column defaults.
458
+ $.extend( config, {
459
+ col_margins : 0,
460
+ col_margins_medium : '',
461
+ col_margins_responsive : '',
462
+ col_padding : 0,
463
+ col_padding_medium : '',
464
+ col_padding_responsive : ''
465
+ } );
466
+
467
+ // Set the global values
468
+ configPrefix = type + '_' + field + ( 'margin' == field ? 's' : '' );
469
+ defaultGlobalVal = config[ configPrefix ];
470
+ mediumGlobalVal = config[ configPrefix + '_medium' ];
471
+ responsiveGlobalVal = config[ configPrefix + '_responsive' ];
472
+
473
+ // Medium value
474
+ if ( '' == mediumGlobalVal ) {
475
+
476
+ if ( '' != defaultVal ) {
477
+ fields.medium.attr( 'placeholder', defaultVal );
478
+ }
479
+ else if ( '' != defaultGlobalVal ) {
480
+ fields.medium.attr( 'placeholder', defaultGlobalVal );
481
+ }
482
+ }
483
+
484
+ // Responsive value
485
+ if ( '' == responsiveGlobalVal ) {
486
+
487
+ if ( 'module' == type && Number( config.auto_spacing ) ) {
488
+
489
+ moduleGlobalVal = '' == mediumGlobalVal ? Number( defaultGlobalVal ) : mediumGlobalVal;
490
+ moduleResponsiveVal = '' == mediumVal ? Number( defaultVal ) : mediumVal;
491
+
492
+ if ( '' != moduleResponsiveVal && ( moduleResponsiveVal > moduleGlobalVal || moduleResponsiveVal < 0 ) ) {
493
+ fields.responsive.attr( 'placeholder', moduleGlobalVal );
494
+ }
495
+ else if ( '' != moduleResponsiveVal ) {
496
+ fields.responsive.attr( 'placeholder', moduleResponsiveVal );
497
+ }
498
+ else {
499
+ fields.responsive.attr( 'placeholder', moduleGlobalVal );
500
+ }
501
+ }
502
+ else if ( ! Number( config.auto_spacing ) || ( 'padding' == field && 'top|bottom'.indexOf( dimension ) > -1 ) ) {
503
+
504
+ if ( '' != mediumVal ) {
505
+ fields.responsive.attr( 'placeholder', mediumVal );
506
+ }
507
+ else if ( '' != mediumGlobalVal ) {
508
+ fields.responsive.attr( 'placeholder', mediumGlobalVal );
509
+ }
510
+ else if ( '' != defaultVal ) {
511
+ fields.responsive.attr( 'placeholder', defaultVal );
512
+ }
513
+ else if ( '' != defaultGlobalVal ) {
514
+ fields.responsive.attr( 'placeholder', defaultGlobalVal );
515
+ }
516
+ }
517
+ }
518
+ },
519
+
520
+ /**
521
+ * Callback for when the responsive preview changes
522
+ * to live preview CSS for spacing fields.
523
+ *
524
+ * @since 1.9
525
+ * @access private
526
+ * @method _previewSpacingFields
527
+ */
528
+ _previewSpacingFields: function()
529
+ {
530
+ var mode = FLBuilderResponsiveEditing._mode,
531
+ form = $( '.fl-builder-settings' ),
532
+ fields = null,
533
+ prop = null;
534
+
535
+ if ( 0 === form.length || undefined === form.attr( 'data-node' ) ) {
536
+ return;
537
+ }
538
+
539
+ fields = FLBuilderResponsiveEditing._fields[ 'unit' ];
540
+
541
+ for ( prop in fields ) {
542
+ fields[ prop ][ mode ].trigger( 'keyup' );
543
+ }
544
+ },
545
+ };
546
+
547
+ $( function() { FLBuilderResponsiveEditing._init() } );
548
+
549
+ } )( jQuery );
js/fl-builder.js CHANGED
@@ -29,13 +29,13 @@
29
 
30
  /**
31
  * A jQuery reference to a module element that should be
32
- * added to a new row after it has been rendered.
33
  *
34
  * @since 1.0
35
  * @access private
36
- * @property {Object} _addModuleAfterRowRender
37
  */
38
- _addModuleAfterRowRender : null,
39
 
40
  /**
41
  * An object that holds data for column resizing.
@@ -83,6 +83,16 @@
83
  */
84
  _dragging : false,
85
 
 
 
 
 
 
 
 
 
 
 
86
  /**
87
  * The URL to redirect to when a user leaves the builder.
88
  *
@@ -302,8 +312,10 @@
302
  FLBuilder._initOverflowFix();
303
  FLBuilder._initScrollbars();
304
  FLBuilder._initLightboxes();
 
305
  FLBuilder._initSortables();
306
  FLBuilder._initStrings();
 
307
  FLBuilder._bindEvents();
308
  FLBuilder._bindOverlayEvents();
309
  FLBuilder._setupEmptyLayout();
@@ -482,37 +494,46 @@
482
  appendTo: 'body',
483
  cursor: 'move',
484
  cursorAt: {
485
- left: 25,
486
  top: 20
487
  },
488
  distance: 1,
489
  helper: FLBuilder._blockDragHelper,
490
  start : FLBuilder._blockDragStart,
491
  sort: FLBuilder._blockDragSort,
 
 
492
  placeholder: 'fl-builder-drop-zone',
493
  tolerance: 'intersect'
494
  },
495
- rowConnections = '',
496
- moduleConnections = '';
497
 
498
- // Row Connections.
499
  if ( 'row' == FLBuilderConfig.userTemplateType ) {
500
- rowConnections = FLBuilder._contentClass + ' .fl-row-content';
 
 
501
  }
502
  else {
503
- rowConnections = FLBuilder._contentClass + ', ' +
504
- FLBuilder._contentClass + ' .fl-row:not(.fl-node-global) .fl-row-content';
 
 
505
  }
506
 
507
- // Module Connections.
508
- if ( 'row' == FLBuilderConfig.userTemplateType ) {
509
- moduleConnections = FLBuilder._contentClass + ' .fl-row-content, ' +
510
- FLBuilder._contentClass + ' .fl-col-content';
 
 
 
511
  }
512
  else {
513
- moduleConnections = FLBuilder._contentClass + ', ' +
514
- FLBuilder._contentClass + ' .fl-row:not(.fl-node-global) .fl-row-content, ' +
515
- FLBuilder._contentClass + ' .fl-col:not(.fl-node-global) .fl-col-content';
516
  }
517
 
518
  // Row layouts from the builder panel.
@@ -524,7 +545,7 @@
524
 
525
  // Row templates from the builder panel.
526
  $('.fl-builder-row-templates').sortable($.extend({}, defaults, {
527
- connectWith: FLBuilder._contentClass,
528
  items: '.fl-builder-block-row-template',
529
  stop: FLBuilder._nodeTemplateDragStop
530
  }));
@@ -532,7 +553,7 @@
532
  // Saved rows from the builder panel.
533
  $('.fl-builder-saved-rows').sortable($.extend({}, defaults, {
534
  cancel: '.fl-builder-node-template-actions, .fl-builder-node-template-edit, .fl-builder-node-template-delete',
535
- connectWith: FLBuilder._contentClass,
536
  items: '.fl-builder-block-saved-row',
537
  stop: FLBuilder._nodeTemplateDragStop
538
  }));
@@ -559,30 +580,36 @@
559
  stop: FLBuilder._nodeTemplateDragStop
560
  }));
561
 
562
- // Row position.
563
- $(FLBuilder._contentClass).sortable($.extend({}, defaults, {
564
- handle: '.fl-row-overlay .fl-block-overlay-actions .fl-block-move',
565
  helper: FLBuilder._rowDragHelper,
566
- items: '.fl-row',
567
  stop: FLBuilder._rowDragStop
568
  }));
569
 
570
- // Column group position.
571
- $(FLBuilder._contentClass + ' .fl-row-content').sortable($.extend({}, defaults, {
572
- handle: '.fl-row-overlay .fl-block-overlay-actions .fl-block-move',
573
- helper: FLBuilder._rowDragHelper,
574
- items: '.fl-col-group',
575
- stop: FLBuilder._rowDragStop
576
  }));
577
 
578
- // Module position.
579
  $(FLBuilder._contentClass + ' .fl-col-content').sortable($.extend({}, defaults, {
580
  connectWith: moduleConnections,
581
  handle: '.fl-module-overlay .fl-block-overlay-actions .fl-block-move',
582
  helper: FLBuilder._moduleDragHelper,
583
- items: '.fl-module',
 
584
  stop: FLBuilder._moduleDragStop
585
  }));
 
 
 
 
 
586
  },
587
 
588
  /**
@@ -621,6 +648,7 @@
621
  $('body').delegate('.fl-builder-has-submenu a', 'click', FLBuilder._submenuChildClicked);
622
  $('body').delegate('.fl-builder-submenu', 'mouseenter', FLBuilder._submenuMouseenter);
623
  $('body').delegate('.fl-builder-submenu', 'mouseleave', FLBuilder._submenuMouseleave);
 
624
 
625
  /* Bar */
626
  $('.fl-builder-tools-button').on('click', FLBuilder._toolsClicked);
@@ -694,22 +722,28 @@
694
  /* Rows */
695
  $('body').delegate('.fl-row-overlay .fl-block-remove', 'click', FLBuilder._deleteRowClicked);
696
  $('body').delegate('.fl-row-overlay .fl-block-copy', 'click', FLBuilder._rowCopyClicked);
697
- $('body').delegate('.fl-row-overlay .fl-block-move', 'mousedown', FLBuilder._blockDragInit);
698
  $('body').delegate('.fl-row-overlay .fl-block-settings', 'click', FLBuilder._rowSettingsClicked);
699
  $('body').delegate('.fl-row-overlay', 'click', FLBuilder._rowSettingsClicked);
700
  $('body').delegate('.fl-builder-row-settings .fl-builder-settings-save', 'click', FLBuilder._saveSettings);
701
 
702
  /* Columns */
 
 
703
  $('body').delegate('.fl-col-overlay', 'click', FLBuilder._colSettingsClicked);
704
  $('body').delegate('.fl-builder-col-settings .fl-builder-settings-save', 'click', FLBuilder._saveSettings);
705
- $('body').delegate('.fl-col-overlay .fl-block-remove', 'click', FLBuilder._deleteColClicked);
706
 
707
  /* Columns Submenu */
 
708
  $('body').delegate('.fl-block-col-submenu .fl-block-col-edit', 'click', FLBuilder._colSettingsClicked);
709
  $('body').delegate('.fl-block-col-submenu .fl-block-col-delete', 'click', FLBuilder._deleteColClicked);
710
- $('body').delegate('.fl-block-col-submenu .fl-block-col-insert-before', 'click', FLBuilder._insertColBeforeClicked);
711
- $('body').delegate('.fl-block-col-submenu .fl-block-col-insert-after', 'click', FLBuilder._insertColAfterClicked);
712
- $('body').delegate('.fl-block-col-submenu .fl-block-col-reset', 'click', FLBuilder._resetColumnWidths);
 
 
 
 
713
 
714
  /* Modules */
715
  $('body').delegate('.fl-module-overlay .fl-block-remove', 'click', FLBuilder._deleteModuleClicked);
@@ -906,7 +940,16 @@
906
  */
907
  _initTipTips: function()
908
  {
909
- $('.fl-tip').tipTip();
 
 
 
 
 
 
 
 
 
910
  },
911
 
912
  /**
@@ -965,7 +1008,11 @@
965
  */
966
  _submenuChildClicked: function( e )
967
  {
968
- $( this ).closest( '.fl-builder-submenu-open' ).removeClass( 'fl-builder-submenu-open' );
 
 
 
 
969
  },
970
 
971
  /**
@@ -997,13 +1044,44 @@
997
  _submenuMouseleave: function( e )
998
  {
999
  var menu = $( this ),
1000
- timeout = setTimeout( function(){
1001
- menu.closest( '.fl-builder-submenu-open' ).removeClass( 'fl-builder-submenu-open' );
1002
  }, 500 );
1003
 
1004
  menu.data( 'timeout', timeout );
1005
  },
1006
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1007
  /* Bar
1008
  ----------------------------------------------------------*/
1009
 
@@ -1543,18 +1621,6 @@
1543
  FLBuilder._layoutSettingsInitCSS();
1544
 
1545
  FLBuilder._initSettingsValidation({
1546
- module_margins: {
1547
- required: true,
1548
- number: true
1549
- },
1550
- row_margins: {
1551
- required: true,
1552
- number: true
1553
- },
1554
- row_padding: {
1555
- required: true,
1556
- number: true
1557
- },
1558
  row_width: {
1559
  required: true,
1560
  number: true
@@ -1593,11 +1659,26 @@
1593
  FLBuilder.ajax({
1594
  action: 'save_global_settings',
1595
  settings: settings
1596
- }, FLBuilder._updateLayout);
1597
 
1598
  FLBuilder._lightbox.close();
1599
  }
1600
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1601
 
1602
  /* Template Selector
1603
  ----------------------------------------------------------*/
@@ -2276,6 +2357,63 @@
2276
  /* Generic Drag and Drop
2277
  ----------------------------------------------------------*/
2278
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2279
  /**
2280
  * Returns a helper element for a drag operation.
2281
  *
@@ -2304,70 +2442,58 @@
2304
  * @method _blockDragInit
2305
  * @param {Object} e The event object.
2306
  */
2307
- _blockDragInit: function(e)
2308
  {
2309
- var target = $(e.target),
2310
- item = null,
2311
- initialPos = 0,
2312
- noHighlight = 'row' == FLBuilderConfig.userTemplateType ? '' : ':not(.fl-node-global)';
2313
 
2314
  // Set the _dragEnabled flag.
2315
  FLBuilder._dragEnabled = true;
2316
 
2317
- // Set the item to a module instance.
2318
- if(target.closest('.fl-module').length > 0) {
2319
- item = target.closest('.fl-module');
2320
- }
2321
- // Set the item to a row instance.
2322
- else if(target.closest('.fl-row').length > 0) {
2323
- item = target.closest('.fl-row');
2324
- }
2325
- // Set the item to the first visible row.
2326
- else if(target.hasClass('fl-builder-block-row') || target.hasClass('fl-builder-block-saved-row')) {
2327
- $('.fl-row').each(function(){
2328
- if(item === null && $(this).offset().top - $(window).scrollTop() > 0) {
2329
- item = $(this);
2330
- }
2331
- });
2332
  }
2333
- // Set the item to the first visible module.
2334
- else if(target.hasClass('fl-builder-block-module') || target.hasClass('fl-builder-block-saved-module')) {
2335
 
2336
- $('.fl-module').each(function(){
2337
- if(item === null && $(this).offset().top - $(window).scrollTop() > 0) {
2338
- item = $(this);
 
2339
  }
2340
- });
2341
- }
2342
-
2343
- // Get the initial scroll position of the item.
2344
- if(item !== null) {
2345
- initialPos = item.offset().top - $(window).scrollTop();
2346
- }
2347
- else {
2348
- item = target;
2349
  }
2350
 
2351
- // Hide the empty message.
2352
- $('.fl-builder-empty-message').hide();
2353
-
2354
- // Highlight rows.
2355
- $(FLBuilder._contentClass + ' .fl-row' + noHighlight).addClass('fl-row-highlight');
2356
-
2357
- // Highlight modules.
2358
- if(item.hasClass('fl-module') || item.hasClass('fl-builder-block-module') || item.hasClass('fl-builder-block-saved-module')) {
2359
- $(FLBuilder._contentClass + ' .fl-col' + noHighlight).addClass('fl-col-highlight');
2360
  }
2361
 
2362
  // Setup the UI for dragging.
 
 
2363
  FLBuilder._disableGlobalRows();
2364
  FLBuilder._closePanel();
2365
  FLBuilder._destroyOverlayEvents();
2366
  FLBuilder._removeAllOverlays();
 
 
 
 
2367
 
2368
- // Scroll to the row or module that was dragged.
2369
- if(initialPos > 0) {
2370
- scrollTo(0, item.offset().top - initialPos);
2371
  }
2372
  },
2373
 
@@ -2382,12 +2508,11 @@
2382
  */
2383
  _blockDragStart: function(e, ui)
2384
  {
 
2385
  FLBuilder._dragging = true;
2386
 
2387
- // Refresh sortables.
2388
- $(FLBuilder._contentClass).sortable('refreshPositions');
2389
- $(FLBuilder._contentClass + ' .fl-row-content').sortable('refreshPositions');
2390
- $(FLBuilder._contentClass + ' .fl-col-content').sortable('refreshPositions');
2391
  },
2392
 
2393
  /**
@@ -2402,16 +2527,23 @@
2402
  */
2403
  _blockDragSort: function(e, ui)
2404
  {
2405
- if(typeof ui.placeholder === 'undefined') {
2406
- return;
2407
- }
2408
-
2409
  var parent = ui.placeholder.parent(),
2410
  title = FLBuilderStrings.insert;
2411
 
 
 
 
 
 
2412
  // Find the placeholder title.
2413
  if(parent.hasClass('fl-col-content')) {
2414
- if(ui.item.hasClass('fl-builder-block-module')) {
 
 
 
 
 
 
2415
  title = ui.item.find('.fl-builder-block-title').text();
2416
  }
2417
  else if(ui.item.hasClass('fl-builder-block-saved-module') || ui.item.hasClass('fl-builder-block-module-template')) {
@@ -2421,22 +2553,20 @@
2421
  title = ui.item.attr('data-name');
2422
  }
2423
  }
2424
- else if(parent.hasClass('fl-row-content')) {
2425
- if(ui.item.hasClass('fl-builder-block-row')) {
2426
- title = ui.item.find('.fl-builder-block-title').text();
2427
- }
2428
- else {
2429
- title = FLBuilderStrings.newColumn;
2430
- }
2431
  }
2432
- else if(parent.hasClass('fl-builder-content')) {
2433
  if(ui.item.hasClass('fl-builder-block-row')) {
2434
  title = ui.item.find('.fl-builder-block-title').text();
2435
  }
2436
  else if(ui.item.hasClass('fl-builder-block-saved-row')) {
2437
  title = ui.item.find('.fl-builder-block-title').text();
2438
  }
2439
- else if(ui.item.hasClass('fl-row')) {
2440
  title = FLBuilderStrings.row;
2441
  }
2442
  else {
@@ -2448,7 +2578,10 @@
2448
  ui.placeholder.html(title);
2449
 
2450
  // Add the global class?
2451
- if ( ui.item.hasClass( 'fl-node-global' ) || ui.item.hasClass( 'fl-builder-block-global' ) ) {
 
 
 
2452
  ui.placeholder.addClass( 'fl-builder-drop-zone-global' );
2453
  }
2454
  else {
@@ -2456,6 +2589,89 @@
2456
  }
2457
  },
2458
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2459
  /**
2460
  * Cleans up when a drag operation has stopped.
2461
  *
@@ -2465,13 +2681,23 @@
2465
  * @param {Object} e The event object.
2466
  * @param {Object} ui An object with additional info for the drag.
2467
  */
2468
- _blockDragStop: function(e, ui)
2469
  {
2470
- var parent = ui.item.parent(),
2471
- initialPos = parent.offset().top - $(window).scrollTop();
 
 
 
 
 
 
 
 
 
 
2472
 
2473
- // Show the panel?
2474
- if(parent.hasClass('fl-builder-blocks-section-content')) {
2475
  FLBuilder._showPanel();
2476
  }
2477
 
@@ -2481,10 +2707,11 @@
2481
  FLBuilder._bindOverlayEvents();
2482
  FLBuilder._highlightEmptyCols();
2483
  FLBuilder._enableGlobalRows();
2484
- $('.fl-builder-empty-message').show();
 
2485
 
2486
  // Scroll the page back to where it was.
2487
- scrollTo(0, parent.offset().top - initialPos);
2488
  },
2489
 
2490
  /**
@@ -2496,16 +2723,60 @@
2496
  */
2497
  _blockDragCancel: function()
2498
  {
2499
- if(FLBuilder._dragEnabled && !FLBuilder._dragging) {
2500
  FLBuilder._dragEnabled = false;
2501
  FLBuilder._dragging = false;
2502
  FLBuilder._bindOverlayEvents();
2503
  FLBuilder._highlightEmptyCols();
2504
  FLBuilder._enableGlobalRows();
2505
- $('.fl-builder-empty-message').show();
 
 
 
 
2506
  }
2507
  },
2508
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2509
  /**
2510
  * Removes all node overlays and hides any tooltip helpies.
2511
  *
@@ -2517,6 +2788,7 @@
2517
  {
2518
  FLBuilder._removeRowOverlays();
2519
  FLBuilder._removeColOverlays();
 
2520
  FLBuilder._removeModuleOverlays();
2521
  FLBuilder._hideTipTips();
2522
  },
@@ -2565,39 +2837,94 @@
2565
  overlayPos = isNaN( overlayPos ) ? 0 : overlayPos;
2566
  overlay.css( 'bottom', ( margins.bottom + overlayPos ) + 'px' );
2567
  }
2568
-
2569
  return overlay;
2570
  },
2571
 
2572
- /* Rows
2573
- ----------------------------------------------------------*/
2574
-
2575
  /**
2576
- * Adds a dashed border to empty columns.
2577
  *
2578
- * @since 1.0
2579
  * @access private
2580
- * @method _highlightEmptyCols
 
2581
  */
2582
- _highlightEmptyCols: function()
2583
  {
2584
- var noHighlight = 'row' == FLBuilderConfig.userTemplateType ? '' : ':not(.fl-node-global)',
2585
- rows = $(FLBuilder._contentClass + ' .fl-row' + noHighlight),
2586
- cols = $(FLBuilder._contentClass + ' .fl-col' + noHighlight);
 
 
 
 
 
 
 
 
2587
 
2588
- rows.removeClass('fl-row-highlight');
2589
- cols.removeClass('fl-col-highlight');
 
 
 
 
2590
 
2591
- cols.each(function(){
 
 
 
 
 
 
 
 
2592
 
2593
- var col = $(this);
 
2594
 
2595
- if(col.find('.fl-module').length === 0) {
2596
- col.addClass('fl-col-highlight');
 
2597
  }
2598
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2599
  },
2600
 
 
 
 
2601
  /**
2602
  * Removes all row overlays from the page.
2603
  *
@@ -2625,10 +2952,7 @@
2625
  return;
2626
  }
2627
 
2628
- var rows = $('.fl-row.fl-node-global');
2629
-
2630
- rows.addClass( 'fl-node-disabled' );
2631
- rows.append( '<div class="fl-node-disabled-overlay"></div>' );
2632
  },
2633
 
2634
  /**
@@ -2645,7 +2969,6 @@
2645
  }
2646
 
2647
  $( '.fl-node-disabled' ).removeClass( 'fl-node-disabled' );
2648
- $( '.fl-node-disabled-overlay' ).remove();
2649
  },
2650
 
2651
  /**
@@ -2729,7 +3052,57 @@
2729
  */
2730
  _rowDragHelper: function()
2731
  {
2732
- return $('<div class="fl-builder-block-drag-helper" style="width: 190px; height: 45px;">' + FLBuilderStrings.row + '</div>');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2733
  },
2734
 
2735
  /**
@@ -2741,34 +3114,73 @@
2741
  * @param {Object} e The event object.
2742
  * @param {Object} ui An object with additional info for the drag.
2743
  */
2744
- _rowDragStop: function(e, ui)
2745
  {
2746
- var item = ui.item,
2747
- parent = item.parent();
 
 
 
2748
 
2749
- FLBuilder._blockDragStop(e, ui);
2750
-
2751
  // A row was dropped back into the row list.
2752
- if(parent.hasClass('fl-builder-rows')) {
2753
  item.remove();
2754
  return;
2755
  }
 
 
 
 
 
2756
  // Add a new row.
2757
- else if(item.hasClass('fl-builder-block')) {
2758
 
2759
- // A row was dropped into another row.
2760
- if(parent.hasClass('fl-row-content')) {
 
 
 
 
 
 
2761
  FLBuilder._addColGroup(
2762
- item.closest('.fl-row').attr('data-node'),
2763
- item.attr('data-cols'),
2764
- parent.children('.fl-col-group, .fl-builder-block').index(item)
2765
  );
2766
  }
2767
- // A row was dropped into the main layout.
2768
- else {
2769
- FLBuilder._addRow(
2770
- item.attr('data-cols'),
2771
- parent.children('.fl-row, .fl-builder-block').index(item)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2772
  );
2773
  }
2774
 
@@ -2779,36 +3191,36 @@
2779
  FLBuilder._showPanel();
2780
 
2781
  // Show the module list.
2782
- $('.fl-builder-modules').siblings('.fl-builder-blocks-section-title').eq(0).trigger('click');
2783
  }
2784
  // Reorder a row.
2785
  else {
2786
- FLBuilder._reorderRow(
2787
- item.attr('data-node'),
2788
- parent.children('.fl-row').index(item)
2789
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2790
  }
2791
  },
2792
 
2793
- /**
2794
- * Reorders a row within the layout.
2795
- *
2796
- * @since 1.0
2797
- * @access private
2798
- * @method _reorderRow
2799
- * @param {String} node_id The node ID of the row.
2800
- * @param {Number} position The new position.
2801
- */
2802
- _reorderRow: function(node_id, position)
2803
- {
2804
- FLBuilder.ajax({
2805
- action: 'reorder_node',
2806
- node_id: node_id,
2807
- position: position,
2808
- silent: true
2809
- });
2810
- },
2811
-
2812
  /**
2813
  * Adds a new row to the layout.
2814
  *
@@ -2845,7 +3257,8 @@
2845
  {
2846
  var data = JSON.parse(response),
2847
  content = $(FLBuilder._contentClass),
2848
- rowId = $(data.html).data('node');
 
2849
 
2850
  // Add new row info to the data.
2851
  data.nodeParent = content;
@@ -2855,15 +3268,10 @@
2855
  FLBuilder._renderLayout( data, function(){
2856
 
2857
  // Add a module to the newly created row.
2858
- if(FLBuilder._addModuleAfterRowRender !== null) {
2859
-
2860
- // Add an existing module.
2861
- if(FLBuilder._addModuleAfterRowRender.hasClass('fl-module')) {
2862
- $('.fl-node-' + rowId + ' .fl-col-content').append(FLBuilder._addModuleAfterRowRender);
2863
- FLBuilder._reorderModule(FLBuilder._addModuleAfterRowRender);
2864
- }
2865
-
2866
- FLBuilder._addModuleAfterRowRender = null;
2867
  }
2868
  } );
2869
  },
@@ -2878,8 +3286,7 @@
2878
  */
2879
  _deleteRowClicked: function( e )
2880
  {
2881
- var nodeId = $(this).closest('.fl-row-overlay').attr('data-node'),
2882
- row = $('.fl-row[data-node='+ nodeId +']'),
2883
  result = null;
2884
 
2885
  if(!row.find('.fl-module').length) {
@@ -2973,7 +3380,7 @@
2973
  _rowSettingsClicked: function( e )
2974
  {
2975
  var button = $( this ),
2976
- nodeId = button.closest( '.fl-row-overlay' ).attr( 'data-node' ),
2977
  global = button.closest( '.fl-block-overlay-global' ).length > 0;
2978
 
2979
  if ( global && 'row' != FLBuilderConfig.userTemplateType ) {
@@ -3019,6 +3426,147 @@
3019
  /* Columns
3020
  ----------------------------------------------------------*/
3021
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3022
  /**
3023
  * Shows an overlay with actions when the mouse enters a column.
3024
  *
@@ -3029,13 +3577,25 @@
3029
  _colMouseenter: function()
3030
  {
3031
  var col = $( this ),
 
3032
  global = col.hasClass( 'fl-node-global' ),
3033
  parentGlobal = col.parents( '.fl-node-global' ).length > 0,
3034
- numCols = col.parents( '.fl-col-group' ).find( '.fl-col' ).length,
3035
- first = 0 === col.index(),
3036
- last = numCols === col.index() + 1,
3037
- template = wp.template( 'fl-col-overlay' );
3038
-
 
 
 
 
 
 
 
 
 
 
 
3039
  if ( FLBuilderConfig.simpleUi ) {
3040
  return;
3041
  }
@@ -3045,6 +3605,9 @@
3045
  else if ( col.find( '.fl-module' ).length > 0 ) {
3046
  return;
3047
  }
 
 
 
3048
  else if ( ! col.hasClass( 'fl-block-overlay-active' ) ) {
3049
 
3050
  // Remove existing overlays.
@@ -3052,13 +3615,22 @@
3052
  FLBuilder._removeModuleOverlays();
3053
 
3054
  // Append the template.
3055
- FLBuilder._appendOverlay( col, template( {
3056
- global : global,
3057
- numCols : numCols,
3058
- first : first,
3059
- last : last
 
 
 
 
 
 
3060
  } ) );
3061
 
 
 
 
3062
  // Init column resizing.
3063
  FLBuilder._initColDragResizing();
3064
  }
@@ -3082,11 +3654,15 @@
3082
  isTipTip = toElement.is('#tiptip_holder'),
3083
  isTipTipChild = toElement.closest('#tiptip_holder').length > 0;
3084
 
3085
- if(hasModules || isTipTip || isTipTipChild) {
 
 
 
3086
  return;
3087
  }
3088
 
3089
  FLBuilder._removeColOverlays();
 
3090
  },
3091
 
3092
  /**
@@ -3105,6 +3681,201 @@
3105
  $('body').removeClass('fl-block-overlay-muted');
3106
  },
3107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3108
  /**
3109
  * Shows the settings lightbox and loads the column settings
3110
  * when the column settings button is clicked.
@@ -3116,12 +3887,21 @@
3116
  */
3117
  _colSettingsClicked: function(e)
3118
  {
3119
- var nodeId = $(this).closest('.fl-col').attr('data-node');
 
 
3120
 
3121
  if ( FLBuilder._colResizing ) {
3122
  return;
3123
  }
3124
 
 
 
 
 
 
 
 
3125
  FLBuilder._closePanel();
3126
  FLBuilder._showLightbox();
3127
 
@@ -3142,27 +3922,32 @@
3142
  * @method _colSettingsLoaded
3143
  * @param {String} response The JSON response with the HTML for the column settings form.
3144
  */
3145
- _colSettingsLoaded: function(response)
3146
  {
3147
  var data = JSON.parse( response ),
3148
  settings = null,
3149
  nodeId = null,
3150
- col = null;
 
3151
 
3152
  FLBuilder._setSettingsFormContent( data.settings );
3153
 
3154
- settings = $('.fl-builder-col-settings');
3155
- nodeId = settings.data('node');
3156
- col = $('.fl-col[data-node="' + nodeId + '"]');
 
3157
 
3158
- if(col.siblings('.fl-col').length === 0) {
3159
- $(settings).find('#fl-builder-settings-section-general').css('display', 'none');
 
 
 
3160
  }
3161
 
3162
- FLBuilder.preview = new FLBuilderPreview({
3163
  type : 'col',
3164
  state : data.state
3165
- });
3166
  },
3167
 
3168
  /**
@@ -3175,17 +3960,34 @@
3175
  */
3176
  _deleteColClicked: function( e )
3177
  {
3178
- var button = $( this ),
3179
- col = button.closest( '.fl-col' ),
3180
- module = button.closest( '.fl-module' ),
3181
- result = true;
 
 
 
 
3182
 
3183
- if ( module.length > 0 ) {
3184
  result = confirm( FLBuilderStrings.deleteColumnMessage );
3185
  }
 
 
 
 
 
 
 
 
 
 
 
 
3186
  if ( result ) {
3187
  FLBuilder._deleteCol( col );
3188
  FLBuilder._removeAllOverlays();
 
3189
  }
3190
 
3191
  e.stopPropagation();
@@ -3197,7 +3999,7 @@
3197
  * @since 1.0
3198
  * @access private
3199
  * @method _deleteCol
3200
- * @param {Object} col A jQuery reference of the column to delete.
3201
  */
3202
  _deleteCol: function(col)
3203
  {
@@ -3207,8 +4009,8 @@
3207
  width = 0;
3208
 
3209
  col.remove();
3210
- rowCols = row.find('.fl-col');
3211
- groupCols = group.find('.fl-col');
3212
 
3213
  if(0 === rowCols.length && 'row' != FLBuilderConfig.userTemplateType) {
3214
  FLBuilder._deleteRow(row);
@@ -3239,60 +4041,78 @@
3239
  new_width : width,
3240
  silent : true
3241
  });
 
 
 
3242
  }
3243
  },
3244
 
3245
  /**
3246
- * Inserts a column before another column when the insert
3247
- * column before link is clicked.
3248
  *
3249
  * @since 1.6.4
3250
  * @access private
3251
- * @method _insertColBeforeClicked
3252
- * @param {Object} e The event object.
 
 
 
3253
  */
3254
- _insertColBeforeClicked: function( e )
3255
  {
3256
- FLBuilder._insertCol( $( this ).closest( '.fl-col' ), 'before' );
 
3257
 
3258
- e.stopPropagation();
3259
- },
3260
-
3261
- /**
3262
- * Inserts a column after another column when the insert
3263
- * column after link is clicked.
3264
- *
3265
- * @since 1.6.4
3266
- * @access private
3267
- * @method _insertColAfterClicked
3268
- * @param {Object} e The event object.
3269
- */
3270
- _insertColAfterClicked: function( e )
3271
- {
3272
- FLBuilder._insertCol( $( this ).closest( '.fl-col' ), 'after' );
3273
 
3274
- e.stopPropagation();
 
 
 
 
 
 
3275
  },
3276
 
3277
  /**
3278
- * Inserts a column before or after another column.
 
 
3279
  *
3280
- * @since 1.6.4
3281
  * @access private
3282
- * @method _insertCol
3283
- * @param {Object} col A jQuery reference of the column to insert before or after.
3284
- * @param {String} insert Either before or after.
3285
- */
3286
- _insertCol: function( col, insert )
3287
  {
3288
- FLBuilder.showAjaxLoader();
3289
- FLBuilder._removeAllOverlays();
3290
-
3291
- FLBuilder.ajax( {
3292
- action : 'render_new_column',
3293
- node_id : col.attr('data-node'),
3294
- insert : insert
3295
- }, FLBuilder._renderLayout );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3296
  },
3297
 
3298
  /**
@@ -3307,13 +4127,21 @@
3307
  */
3308
  _addColGroup: function(nodeId, cols, position)
3309
  {
 
 
3310
  // Show the loader.
3311
  FLBuilder.showAjaxLoader();
3312
 
3313
  // Save the new column group info.
3314
- FLBuilder._newColGroupParent = $('.fl-node-' + nodeId + ' .fl-row-content');
3315
  FLBuilder._newColGroupPosition = position;
3316
 
 
 
 
 
 
 
 
3317
  // Send the request.
3318
  FLBuilder.ajax({
3319
  action : 'render_new_column_group',
@@ -3335,8 +4163,9 @@
3335
  */
3336
  _addColGroupComplete: function(response)
3337
  {
3338
- var data = JSON.parse(response),
3339
- colId = $(data.html).find('.fl-col').data('node');
 
3340
 
3341
  // Add new column group info to the data.
3342
  data.nodeParent = FLBuilder._newColGroupParent;
@@ -3345,16 +4174,16 @@
3345
  // Render the layout.
3346
  FLBuilder._renderLayout( data, function(){
3347
 
 
 
 
 
 
3348
  // Add a module to the newly created column group.
3349
- if(FLBuilder._addModuleAfterRowRender !== null) {
3350
-
3351
- // Add an existing module.
3352
- if(FLBuilder._addModuleAfterRowRender.hasClass('fl-module')) {
3353
- $('.fl-node-' + colId + ' .fl-col-content').append(FLBuilder._addModuleAfterRowRender);
3354
- FLBuilder._reorderModule(FLBuilder._addModuleAfterRowRender);
3355
- }
3356
-
3357
- FLBuilder._addModuleAfterRowRender = null;
3358
  }
3359
  } );
3360
  },
@@ -3388,15 +4217,17 @@
3388
  _colDragResizeStart: function( e, ui )
3389
  {
3390
  // Setup resize vars.
3391
- var handle = $( ui.helper ),
3392
- direction = '',
3393
- group = handle.closest( '.fl-col-group' ),
3394
- cols = group.find( '> .fl-col' ),
3395
- col = handle.closest( '.fl-col' ),
3396
- sibling = null,
3397
- availWidth = 100,
3398
- i = 0;
3399
-
 
 
3400
  // Find the direction and sibling.
3401
  if ( handle.hasClass( 'fl-block-col-resize-e' ) ) {
3402
  direction = 'e';
@@ -3437,6 +4268,9 @@
3437
  // Set the resizing flag.
3438
  FLBuilder._colResizing = true;
3439
 
 
 
 
3440
  // Close the builder panel and destroy overlay events.
3441
  FLBuilder._closePanel();
3442
  FLBuilder._destroyOverlayEvents();
@@ -3463,15 +4297,15 @@
3463
  colRound = Math.round( colWidth * 100 ) / 100,
3464
  siblingWidth = data.availWidth - colWidth,
3465
  siblingRound = Math.round( siblingWidth * 100 ) / 100,
3466
- minRound = 10,
3467
- maxRound = Math.round( ( data.availWidth - 10 ) * 100 ) / 100;
3468
 
3469
  // Set the min/max width if needed.
3470
- if ( colRound < 10 ) {
3471
  colRound = minRound;
3472
  siblingRound = maxRound;
3473
  }
3474
- else if ( siblingRound < 10 ) {
3475
  colRound = maxRound;
3476
  siblingRound = minRound;
3477
  }
@@ -3505,7 +4339,8 @@
3505
  */
3506
  _colDragResizeStop: function( e, ui )
3507
  {
3508
- var data = FLBuilder._colResizeData;
 
3509
 
3510
  // Hide the feedback divs.
3511
  FLBuilder._colResizeData.feedbackLeft.hide();
@@ -3521,9 +4356,15 @@
3521
  silent : true
3522
  });
3523
 
 
 
 
3524
  // Reset the resize data.
3525
  FLBuilder._colResizeData = null;
3526
 
 
 
 
3527
  // Rebind overlay events.
3528
  FLBuilder._bindOverlayEvents();
3529
 
@@ -3534,6 +4375,41 @@
3534
  FLBuilder.triggerHook( 'col-resize-stop' );
3535
  },
3536
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3537
  /**
3538
  * Resets the widths of all columns in a group.
3539
  *
@@ -3542,13 +4418,11 @@
3542
  * @method _resetColumnWidths
3543
  * @param {Object} e The event object.
3544
  */
3545
- _resetColumnWidths: function( e )
3546
  {
3547
- var group = $( this ).closest( '.fl-col-group' ),
3548
- cols = group.find( '.fl-col' ),
3549
  width = 0;
3550
 
3551
- // Get the new width.
3552
  if ( 6 === cols.length ) {
3553
  width = 16.65;
3554
  }
@@ -3559,20 +4433,7 @@
3559
  width = Math.round( 100 / cols.length * 100 ) / 100;
3560
  }
3561
 
3562
- // Apply it to the columns.
3563
- cols.css('width', width + '%');
3564
-
3565
- // Save the resize data.
3566
- FLBuilder.ajax({
3567
- action : 'reset_col_widths',
3568
- group_id : group.data( 'node' ),
3569
- silent : true
3570
- });
3571
-
3572
- // Trigger the col-reset-widths hook.
3573
- FLBuilder.triggerHook( 'col-reset-widths' );
3574
-
3575
- e.stopPropagation();
3576
  },
3577
 
3578
  /* Modules
@@ -3591,32 +4452,45 @@
3591
  moduleName = module.attr( 'data-name' ),
3592
  global = module.hasClass( 'fl-node-global' ),
3593
  parentGlobal = module.parents( '.fl-node-global' ).length > 0,
3594
- numCols = module.parents( '.fl-col-group' ).find( '.fl-col' ).length,
3595
- parentCol = module.parents( '.fl-col' ),
3596
- parentFirst = 0 === parentCol.index(),
3597
- parentLast = numCols === parentCol.index() + 1,
3598
- template = wp.template( 'fl-module-overlay' );
 
 
 
 
 
 
 
3599
 
3600
  // Remove existing overlays.
3601
  FLBuilder._removeColOverlays();
3602
  FLBuilder._removeModuleOverlays();
3603
 
3604
- // Don't show if this is a global row in a standard layout.
3605
  if ( global && parentGlobal && 'row' != FLBuilderConfig.userTemplateType ) {
3606
  return;
3607
  }
3608
- // Show the overlay.
3609
  else if ( ! module.hasClass( 'fl-block-overlay-active' ) ) {
3610
 
3611
  // Append the template.
3612
- FLBuilder._appendOverlay( module, template( {
3613
- global : global,
3614
- moduleName : moduleName,
3615
- numCols : numCols,
3616
- parentFirst : parentFirst,
3617
- parentLast : parentLast
 
 
 
 
 
3618
  } ) );
3619
 
 
 
 
3620
  // Init column resizing.
3621
  FLBuilder._initColDragResizing();
3622
  }
@@ -3644,6 +4518,7 @@
3644
  }
3645
 
3646
  FLBuilder._removeModuleOverlays();
 
3647
  },
3648
 
3649
  /**
@@ -3677,6 +4552,22 @@
3677
  return $('<div class="fl-builder-block-drag-helper">' + item.attr('data-name') + '</div>');
3678
  },
3679
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3680
  /**
3681
  * Callback for when a module drag operation completes.
3682
  *
@@ -3688,60 +4579,102 @@
3688
  */
3689
  _moduleDragStop: function(e, ui)
3690
  {
 
 
3691
  var item = ui.item,
3692
  parent = item.parent(),
 
3693
  position = 0,
3694
  parentId = 0;
3695
 
3696
- FLBuilder._blockDragStop(e, ui);
3697
-
3698
  // A module was dropped back into the module list.
3699
- if(parent.hasClass('fl-builder-modules') || parent.hasClass('fl-builder-widgets')) {
3700
  item.remove();
3701
  return;
3702
  }
3703
  // A new module was dropped.
3704
- else if(item.hasClass('fl-builder-block')) {
3705
 
 
 
 
 
 
 
3706
  // A new module was dropped into a row position.
3707
- if(parent.hasClass('fl-builder-content')) {
3708
- position = parent.children('.fl-row, .fl-builder-block').index(item);
3709
  parentId = 0;
 
 
 
 
 
 
 
 
 
3710
  }
3711
  // A new module was dropped into a column position.
3712
- else if(parent.hasClass('fl-row-content')) {
3713
- position = parent.children('.fl-col-group, .fl-builder-block').index(item);
3714
- parentId = item.closest('.fl-row').attr('data-node');
 
 
3715
  }
3716
  // A new module was dropped into a column.
3717
  else {
3718
- position = parent.children('.fl-module, .fl-builder-block').index(item);
3719
- parentId = item.closest('.fl-col').attr('data-node');
 
 
 
 
 
3720
  }
3721
 
3722
  // Add the new module.
3723
- FLBuilder._addModule(parent, parentId, item.attr('data-type'), position, item.attr('data-widget'));
3724
 
3725
  // Remove the drag helper.
3726
- ui.item.remove();
3727
  }
3728
- // A module was dropped into the main layout.
3729
- else if(parent.hasClass('fl-builder-content')) {
3730
- position = parent.children('.fl-row, .fl-module').index(item);
3731
- FLBuilder._addModuleAfterRowRender = item;
3732
- FLBuilder._addRow('1-col', position);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3733
  item.remove();
3734
  }
3735
  // A module was dropped into a column position.
3736
- else if(parent.hasClass('fl-row-content')) {
3737
- position = parent.children('.fl-col-group, .fl-module').index(item);
3738
- FLBuilder._addModuleAfterRowRender = item;
3739
- FLBuilder._addColGroup(item.closest('.fl-row').attr('data-node'), '1-col', position);
 
3740
  item.remove();
3741
  }
3742
  // A module was dropped into another column.
3743
  else {
3744
- FLBuilder._reorderModule(item);
3745
  }
3746
 
3747
  FLBuilder._resizeLayout();
@@ -3759,27 +4692,15 @@
3759
  {
3760
  var newParent = module.closest('.fl-col').attr('data-node'),
3761
  oldParent = module.attr('data-parent'),
3762
- node_id = module.attr('data-node'),
3763
  position = module.index();
3764
 
3765
  if(newParent == oldParent) {
3766
- FLBuilder.ajax({
3767
- action: 'reorder_node',
3768
- node_id: node_id,
3769
- position: position,
3770
- silent: true
3771
- });
3772
  }
3773
  else {
3774
  module.attr('data-parent', newParent);
3775
-
3776
- FLBuilder.ajax({
3777
- action: 'move_node',
3778
- new_parent: newParent,
3779
- node_id: node_id,
3780
- position: position,
3781
- silent: true
3782
- });
3783
  }
3784
  },
3785
 
@@ -4040,8 +4961,14 @@
4040
  FLBuilder.showAjaxLoader();
4041
 
4042
  // Save the new module data.
4043
- FLBuilder._newModuleParent = parent;
4044
- FLBuilder._newModulePosition = position;
 
 
 
 
 
 
4045
 
4046
  // Send the request.
4047
  FLBuilder.ajax({
@@ -4250,19 +5177,21 @@
4250
  */
4251
  _nodeTemplateDragStop: function( e, ui )
4252
  {
 
 
4253
  var item = ui.item,
4254
  parent = item.parent(),
4255
  parentId = null,
4256
  position = 0,
 
4257
  action = '',
4258
  callback = null;
4259
 
4260
- // Stop the drag.
4261
- FLBuilder._blockDragStop(e, ui);
4262
-
4263
  // A saved row was dropped.
4264
  if ( item.hasClass( 'fl-builder-block-saved-row' ) || item.hasClass( 'fl-builder-block-row-template' ) ) {
4265
- position = parent.children('.fl-row, .fl-builder-block').index( item );
 
 
4266
  parentId = null;
4267
  action = 'render_new_row';
4268
  callback = FLBuilder._addRowComplete;
@@ -4274,15 +5203,29 @@
4274
  action = 'render_new_module';
4275
  callback = FLBuilder._addModuleComplete;
4276
 
 
 
 
 
 
 
4277
  // Dropped into a row position.
4278
- if ( parent.hasClass( 'fl-builder-content' ) ) {
4279
- position = parent.children( '.fl-row, .fl-builder-block' ).index( item );
4280
  parentId = 0;
 
 
 
 
 
 
 
4281
  }
4282
  // Dropped into a column position.
4283
- else if ( parent.hasClass( 'fl-row-content' ) ) {
4284
- position = parent.children( '.fl-col-group, .fl-builder-block' ).index( item );
4285
- parentId = item.closest( '.fl-row' ).attr( 'data-node' );
 
4286
  }
4287
  // Dropped into a column.
4288
  else {
@@ -4290,9 +5233,20 @@
4290
  parentId = item.closest( '.fl-col' ).attr( 'data-node' );
4291
  }
4292
 
 
 
 
 
 
4293
  // Save the new module data.
4294
- FLBuilder._newModuleParent = parent;
4295
- FLBuilder._newModulePosition = position;
 
 
 
 
 
 
4296
  }
4297
 
4298
  // Show the loader.
@@ -5097,7 +6051,8 @@
5097
  alreadySaved : FLBuilderStrings.alreadySaved,
5098
  noPresets : FLBuilderStrings.noPresets,
5099
  presetAdded : FLBuilderStrings.presetAdded,
5100
- }
 
5101
  });
5102
 
5103
  $( FLBuilder.colorPicker ).on( 'presetRemoved presetAdded', function( event, data ) {
@@ -5224,7 +6179,7 @@
5224
 
5225
  wrap.addClass('fl-photo-empty');
5226
  photoField.val('');
5227
- srcSelect.html('');
5228
  srcSelect.trigger('change');
5229
  },
5230
 
@@ -6373,8 +7328,9 @@
6373
  */
6374
  _lightboxClosed: function()
6375
  {
 
6376
  FLBuilder._lightbox.empty();
6377
- clearTimeout(FLBuilder._lightboxScrollbarTimeout);
6378
  },
6379
 
6380
  /**
29
 
30
  /**
31
  * A jQuery reference to a module element that should be
32
+ * added to a new node after it has been rendered.
33
  *
34
  * @since 1.0
35
  * @access private
36
+ * @property {Object} _addModuleAfterNodeRender
37
  */
38
+ _addModuleAfterNodeRender : null,
39
 
40
  /**
41
  * An object that holds data for column resizing.
83
  */
84
  _dragging : false,
85
 
86
+ /**
87
+ * The initial scroll top of the window when a drag starts.
88
+ * Used to reset the scroll top when a drag is cancelled.
89
+ *
90
+ * @since 1.0
91
+ * @access private
92
+ * @property {Boolean} _dragging
93
+ */
94
+ _dragInitialScrollTop : 0,
95
+
96
  /**
97
  * The URL to redirect to when a user leaves the builder.
98
  *
312
  FLBuilder._initOverflowFix();
313
  FLBuilder._initScrollbars();
314
  FLBuilder._initLightboxes();
315
+ FLBuilder._initDropTargets();
316
  FLBuilder._initSortables();
317
  FLBuilder._initStrings();
318
+ FLBuilder._initTipTips();
319
  FLBuilder._bindEvents();
320
  FLBuilder._bindOverlayEvents();
321
  FLBuilder._setupEmptyLayout();
494
  appendTo: 'body',
495
  cursor: 'move',
496
  cursorAt: {
497
+ left: 60,
498
  top: 20
499
  },
500
  distance: 1,
501
  helper: FLBuilder._blockDragHelper,
502
  start : FLBuilder._blockDragStart,
503
  sort: FLBuilder._blockDragSort,
504
+ change: FLBuilder._blockDragChange,
505
+ stop: FLBuilder._blockDragStop,
506
  placeholder: 'fl-builder-drop-zone',
507
  tolerance: 'intersect'
508
  },
509
+ rowConnections = '',
510
+ moduleConnections = '';
511
 
512
+ // Module Connections.
513
  if ( 'row' == FLBuilderConfig.userTemplateType ) {
514
+ moduleConnections = FLBuilder._contentClass + ' .fl-col-group-drop-target, ' +
515
+ FLBuilder._contentClass + ' .fl-col-drop-target, ' +
516
+ FLBuilder._contentClass + ' .fl-col-content';
517
  }
518
  else {
519
+ moduleConnections = FLBuilder._contentClass + ' .fl-row-drop-target, ' +
520
+ FLBuilder._contentClass + ' .fl-col-group-drop-target, ' +
521
+ FLBuilder._contentClass + ' .fl-col-drop-target, ' +
522
+ FLBuilder._contentClass + ' .fl-row:not(.fl-node-global) .fl-col-content';
523
  }
524
 
525
+ // Row Connections.
526
+ if ( FLBuilderConfig.nestedColumns ) {
527
+ rowConnections = moduleConnections;
528
+ }
529
+ else if ( 'row' == FLBuilderConfig.userTemplateType ) {
530
+ rowConnections = FLBuilder._contentClass + ' .fl-col-group-drop-target, ' +
531
+ FLBuilder._contentClass + ' .fl-col-drop-target';
532
  }
533
  else {
534
+ rowConnections = FLBuilder._contentClass + ' .fl-row-drop-target, ' +
535
+ FLBuilder._contentClass + ' .fl-col-group-drop-target, ' +
536
+ FLBuilder._contentClass + ' .fl-col-drop-target';
537
  }
538
 
539
  // Row layouts from the builder panel.
545
 
546
  // Row templates from the builder panel.
547
  $('.fl-builder-row-templates').sortable($.extend({}, defaults, {
548
+ connectWith: FLBuilder._contentClass + ' .fl-row-drop-target',
549
  items: '.fl-builder-block-row-template',
550
  stop: FLBuilder._nodeTemplateDragStop
551
  }));
553
  // Saved rows from the builder panel.
554
  $('.fl-builder-saved-rows').sortable($.extend({}, defaults, {
555
  cancel: '.fl-builder-node-template-actions, .fl-builder-node-template-edit, .fl-builder-node-template-delete',
556
+ connectWith: FLBuilder._contentClass + ' .fl-row-drop-target',
557
  items: '.fl-builder-block-saved-row',
558
  stop: FLBuilder._nodeTemplateDragStop
559
  }));
580
  stop: FLBuilder._nodeTemplateDragStop
581
  }));
582
 
583
+ // Rows
584
+ $('.fl-row-sortable-proxy').sortable($.extend({}, defaults, {
585
+ connectWith: FLBuilder._contentClass + ' .fl-row-drop-target',
586
  helper: FLBuilder._rowDragHelper,
587
+ start: FLBuilder._rowDragStart,
588
  stop: FLBuilder._rowDragStop
589
  }));
590
 
591
+ // Columns
592
+ $('.fl-col-sortable-proxy').sortable($.extend({}, defaults, {
593
+ connectWith: moduleConnections,
594
+ helper: FLBuilder._colDragHelper,
595
+ start: FLBuilder._colDragStart,
596
+ stop: FLBuilder._colDragStop
597
  }));
598
 
599
+ // Modules
600
  $(FLBuilder._contentClass + ' .fl-col-content').sortable($.extend({}, defaults, {
601
  connectWith: moduleConnections,
602
  handle: '.fl-module-overlay .fl-block-overlay-actions .fl-block-move',
603
  helper: FLBuilder._moduleDragHelper,
604
+ items: '.fl-module, .fl-col-group',
605
+ start: FLBuilder._moduleDragStart,
606
  stop: FLBuilder._moduleDragStop
607
  }));
608
+
609
+ // Drop targets
610
+ $(FLBuilder._contentClass + ' .fl-row-drop-target').sortable( defaults );
611
+ $(FLBuilder._contentClass + ' .fl-col-group-drop-target').sortable( defaults );
612
+ $(FLBuilder._contentClass + ' .fl-col-drop-target').sortable( defaults );
613
  },
614
 
615
  /**
648
  $('body').delegate('.fl-builder-has-submenu a', 'click', FLBuilder._submenuChildClicked);
649
  $('body').delegate('.fl-builder-submenu', 'mouseenter', FLBuilder._submenuMouseenter);
650
  $('body').delegate('.fl-builder-submenu', 'mouseleave', FLBuilder._submenuMouseleave);
651
+ $('body').delegate('.fl-builder-submenu .fl-builder-has-submenu', 'mouseenter', FLBuilder._submenuNestedParentMouseenter);
652
 
653
  /* Bar */
654
  $('.fl-builder-tools-button').on('click', FLBuilder._toolsClicked);
722
  /* Rows */
723
  $('body').delegate('.fl-row-overlay .fl-block-remove', 'click', FLBuilder._deleteRowClicked);
724
  $('body').delegate('.fl-row-overlay .fl-block-copy', 'click', FLBuilder._rowCopyClicked);
725
+ $('body').delegate('.fl-row-overlay .fl-block-move', 'mousedown', FLBuilder._rowDragInit);
726
  $('body').delegate('.fl-row-overlay .fl-block-settings', 'click', FLBuilder._rowSettingsClicked);
727
  $('body').delegate('.fl-row-overlay', 'click', FLBuilder._rowSettingsClicked);
728
  $('body').delegate('.fl-builder-row-settings .fl-builder-settings-save', 'click', FLBuilder._saveSettings);
729
 
730
  /* Columns */
731
+ $('body').delegate('.fl-col-overlay .fl-block-move', 'mousedown', FLBuilder._colDragInit);
732
+ $('body').delegate('.fl-col-overlay .fl-block-remove', 'click', FLBuilder._deleteColClicked);
733
  $('body').delegate('.fl-col-overlay', 'click', FLBuilder._colSettingsClicked);
734
  $('body').delegate('.fl-builder-col-settings .fl-builder-settings-save', 'click', FLBuilder._saveSettings);
 
735
 
736
  /* Columns Submenu */
737
+ $('body').delegate('.fl-block-col-submenu .fl-block-col-move', 'mousedown', FLBuilder._colDragInit);
738
  $('body').delegate('.fl-block-col-submenu .fl-block-col-edit', 'click', FLBuilder._colSettingsClicked);
739
  $('body').delegate('.fl-block-col-submenu .fl-block-col-delete', 'click', FLBuilder._deleteColClicked);
740
+ $('body').delegate('.fl-block-col-submenu .fl-block-col-reset', 'click', FLBuilder._resetColumnWidthsClicked);
741
+ $('body').delegate('.fl-block-col-submenu li', 'mouseenter', FLBuilder._showColHighlightGuide);
742
+ $('body').delegate('.fl-block-col-submenu li', 'mouseleave', FLBuilder._removeColHighlightGuides);
743
+
744
+ /* Columns Submenu (Parent Column) */
745
+ $('body').delegate('.fl-block-col-submenu .fl-block-col-move-parent', 'mousedown', FLBuilder._colDragInit);
746
+ $('body').delegate('.fl-block-col-submenu .fl-block-col-edit-parent', 'click', FLBuilder._colSettingsClicked);
747
 
748
  /* Modules */
749
  $('body').delegate('.fl-module-overlay .fl-block-remove', 'click', FLBuilder._deleteModuleClicked);
940
  */
941
  _initTipTips: function()
942
  {
943
+ $('.fl-tip:not(.fl-has-tip)').each( function(){
944
+ var ele = $( this );
945
+ ele.addClass( 'fl-has-tip' );
946
+ if ( undefined == ele.attr( 'data-title' ) ) {
947
+ ele.attr( 'data-title', ele.attr( 'title' ) );
948
+ }
949
+ } ).tipTip( {
950
+ defaultPosition : 'top',
951
+ delay : 1500
952
+ } );
953
  },
954
 
955
  /**
1008
  */
1009
  _submenuChildClicked: function( e )
1010
  {
1011
+ var parent = $( this ).parents( '.fl-builder-has-submenu' );
1012
+
1013
+ if ( ! parent.parents( '.fl-builder-has-submenu' ).length ) {
1014
+ parent.removeClass( 'fl-builder-submenu-open' );
1015
+ }
1016
  },
1017
 
1018
  /**
1044
  _submenuMouseleave: function( e )
1045
  {
1046
  var menu = $( this ),
1047
+ timeout = setTimeout( function() {
1048
+ menu.closest( '.fl-builder-has-submenu' ).removeClass( 'fl-builder-submenu-open' );
1049
  }, 500 );
1050
 
1051
  menu.data( 'timeout', timeout );
1052
  },
1053
 
1054
+ /**
1055
+ * Callback for when the mouse enters the parent
1056
+ * of a nested submenu.
1057
+ *
1058
+ * @since 1.9
1059
+ * @access private
1060
+ * @method _submenuNestedParentMouseenter
1061
+ * @param {Object} e The event object.
1062
+ */
1063
+ _submenuNestedParentMouseenter: function( e )
1064
+ {
1065
+ var parent = $( this ),
1066
+ submenu = parent.find( '.fl-builder-submenu' );
1067
+
1068
+ if( parent.width() + parent.offset().left + submenu.width() > $( window ).width() ) {
1069
+ parent.addClass( 'fl-builder-submenu-right' );
1070
+ }
1071
+ },
1072
+
1073
+ /**
1074
+ * Closes all open submenus.
1075
+ *
1076
+ * @since 1.9
1077
+ * @access private
1078
+ * @method _closeAllSubmenus
1079
+ */
1080
+ _closeAllSubmenus: function()
1081
+ {
1082
+ $( '.fl-builder-submenu-open' ).removeClass( 'fl-builder-submenu-open' );
1083
+ },
1084
+
1085
  /* Bar
1086
  ----------------------------------------------------------*/
1087
 
1621
  FLBuilder._layoutSettingsInitCSS();
1622
 
1623
  FLBuilder._initSettingsValidation({
 
 
 
 
 
 
 
 
 
 
 
 
1624
  row_width: {
1625
  required: true,
1626
  number: true
1659
  FLBuilder.ajax({
1660
  action: 'save_global_settings',
1661
  settings: settings
1662
+ }, FLBuilder._saveGlobalSettingsComplete);
1663
 
1664
  FLBuilder._lightbox.close();
1665
  }
1666
  },
1667
+
1668
+ /**
1669
+ * Saves the global settings when the save button is clicked.
1670
+ *
1671
+ * @since 1.0
1672
+ * @access private
1673
+ * @method _saveGlobalSettingsComplete
1674
+ * @param {String} response
1675
+ */
1676
+ _saveGlobalSettingsComplete: function( response )
1677
+ {
1678
+ FLBuilderConfig.global = JSON.parse( response );
1679
+
1680
+ FLBuilder._updateLayout();
1681
+ },
1682
 
1683
  /* Template Selector
1684
  ----------------------------------------------------------*/
2357
  /* Generic Drag and Drop
2358
  ----------------------------------------------------------*/
2359
 
2360
+ /**
2361
+ * Inserts drop targets for nodes such as rows, columns
2362
+ * and column groups since making those all sortables
2363
+ * makes sorting really jumpy.
2364
+ *
2365
+ * @since 1.9
2366
+ * @access private
2367
+ * @method _initDropTargets
2368
+ */
2369
+ _initDropTargets: function()
2370
+ {
2371
+ var notGlobal = 'row' == FLBuilderConfig.userTemplateType ? '' : ':not(.fl-node-global)',
2372
+ rows = $( FLBuilder._contentClass + ' .fl-row' ),
2373
+ row = null,
2374
+ groups = $( FLBuilder._contentClass + ' .fl-row' + notGlobal ).find( '.fl-col-group' ),
2375
+ group = null,
2376
+ cols = null,
2377
+ i = 0;
2378
+
2379
+ // Remove old drop targets.
2380
+ $( '.fl-col-drop-target' ).remove();
2381
+ $( '.fl-col-group-drop-target' ).remove();
2382
+ $( '.fl-row-drop-target' ).remove();
2383
+
2384
+ // Row drop targets.
2385
+ $( FLBuilder._contentClass ).append( '<div class="fl-drop-target fl-row-drop-target"></div>' );
2386
+ rows.prepend( '<div class="fl-drop-target fl-row-drop-target"></div>' );
2387
+ rows.append( '<div class="fl-drop-target fl-drop-target-last fl-row-drop-target fl-row-drop-target-last"></div>' );
2388
+
2389
+ // Add group drop targets to empty rows.
2390
+ for ( ; i < rows.length; i++ ) {
2391
+
2392
+ row = rows.eq( i );
2393
+
2394
+ if ( 0 === row.find( '.fl-col-group' ).length ) {
2395
+ row.find( '.fl-row-content' ).append( '<div class="fl-drop-target fl-col-group-drop-target"></div>' );
2396
+ }
2397
+ }
2398
+
2399
+ // Loop through the column groups.
2400
+ for ( i = 0; i < groups.length; i++ ) {
2401
+
2402
+ group = groups.eq( i );
2403
+ cols = group.find( '> .fl-col' );
2404
+
2405
+ // Column group drop targets.
2406
+ if ( ! group.hasClass( 'fl-col-group-nested' ) ) {
2407
+ group.append( '<div class="fl-drop-target fl-col-group-drop-target"></div>' );
2408
+ group.append( '<div class="fl-drop-target fl-drop-target-last fl-col-group-drop-target fl-col-group-drop-target-last"></div>' );
2409
+ }
2410
+
2411
+ // Column drop targets.
2412
+ cols.append( '<div class="fl-drop-target fl-col-drop-target"></div>' );
2413
+ cols.append( '<div class="fl-drop-target fl-drop-target-last fl-col-drop-target fl-col-drop-target-last"></div>' );
2414
+ }
2415
+ },
2416
+
2417
  /**
2418
  * Returns a helper element for a drag operation.
2419
  *
2442
  * @method _blockDragInit
2443
  * @param {Object} e The event object.
2444
  */
2445
+ _blockDragInit: function( e )
2446
  {
2447
+ var target = $( e.currentTarget ),
2448
+ node = null,
2449
+ scrollTop = $( window ).scrollTop(),
2450
+ initialPos = 0;
2451
 
2452
  // Set the _dragEnabled flag.
2453
  FLBuilder._dragEnabled = true;
2454
 
2455
+ // Save the initial scroll position.
2456
+ FLBuilder._dragInitialScrollTop = scrollTop;
2457
+
2458
+ // Get the node to scroll to once the node highlights have affected the body height.
2459
+ if ( target.closest( '[data-node]' ).length > 0 ) {
2460
+
2461
+ // Set the node to a node instance being dragged.
2462
+ node = target.closest( '[data-node]' );
2463
+
2464
+ // Mark this node as initialized for dragging.
2465
+ node.addClass( 'fl-node-drag-init' );
 
 
 
 
2466
  }
2467
+ else if ( target.hasClass( 'fl-builder-block' ) ) {
 
2468
 
2469
+ // Set the node to the first visible row instance.
2470
+ $( '.fl-row' ).each( function() {
2471
+ if ( node === null && $( this ).offset().top - scrollTop > 0 ) {
2472
+ node = $( this );
2473
  }
2474
+ } );
 
 
 
 
 
 
 
 
2475
  }
2476
 
2477
+ // Get the initial scroll position of the node.
2478
+ if ( node !== null ) {
2479
+ initialPos = node.offset().top - scrollTop;
 
 
 
 
 
 
2480
  }
2481
 
2482
  // Setup the UI for dragging.
2483
+ FLBuilder._highlightRowsAndColsForDrag( target );
2484
+ FLBuilder._adjustColHeightsForDrag();
2485
  FLBuilder._disableGlobalRows();
2486
  FLBuilder._closePanel();
2487
  FLBuilder._destroyOverlayEvents();
2488
  FLBuilder._removeAllOverlays();
2489
+ FLBuilder._initSortables();
2490
+ $( 'body' ).addClass( 'fl-builder-dragging' );
2491
+ $( '.fl-builder-empty-message' ).hide();
2492
+ $( '.fl-sortable-disabled' ).removeClass( 'fl-sortable-disabled' );
2493
 
2494
+ // Scroll to the node that is dragging.
2495
+ if ( initialPos > 0 ) {
2496
+ scrollTo( 0, node.offset().top - initialPos );
2497
  }
2498
  },
2499
 
2508
  */
2509
  _blockDragStart: function(e, ui)
2510
  {
2511
+ // Let the builder know dragging has started.
2512
  FLBuilder._dragging = true;
2513
 
2514
+ // Removed the drag init class as we're done with that.
2515
+ $( '.fl-node-drag-init' ).removeClass( 'fl-node-drag-init' );
 
 
2516
  },
2517
 
2518
  /**
2527
  */
2528
  _blockDragSort: function(e, ui)
2529
  {
 
 
 
 
2530
  var parent = ui.placeholder.parent(),
2531
  title = FLBuilderStrings.insert;
2532
 
2533
+ // Prevent sorting?
2534
+ if ( FLBuilder._blockPreventSort( ui.item, parent ) ) {
2535
+ return;
2536
+ }
2537
+
2538
  // Find the placeholder title.
2539
  if(parent.hasClass('fl-col-content')) {
2540
+ if(ui.item.hasClass('fl-builder-block-row')) {
2541
+ title = ui.item.find('.fl-builder-block-title').text();
2542
+ }
2543
+ else if(ui.item.hasClass('fl-col-sortable-proxy-item')) {
2544
+ title = FLBuilderStrings.column;
2545
+ }
2546
+ else if(ui.item.hasClass('fl-builder-block-module')) {
2547
  title = ui.item.find('.fl-builder-block-title').text();
2548
  }
2549
  else if(ui.item.hasClass('fl-builder-block-saved-module') || ui.item.hasClass('fl-builder-block-module-template')) {
2553
  title = ui.item.attr('data-name');
2554
  }
2555
  }
2556
+ else if(parent.hasClass('fl-col-drop-target')) {
2557
+ title = '';
2558
+ }
2559
+ else if (parent.hasClass('fl-col-group-drop-target')) {
2560
+ title = '';
 
 
2561
  }
2562
+ else if(parent.hasClass('fl-row-drop-target')) {
2563
  if(ui.item.hasClass('fl-builder-block-row')) {
2564
  title = ui.item.find('.fl-builder-block-title').text();
2565
  }
2566
  else if(ui.item.hasClass('fl-builder-block-saved-row')) {
2567
  title = ui.item.find('.fl-builder-block-title').text();
2568
  }
2569
+ else if(ui.item.hasClass('fl-row-sortable-proxy-item')) {
2570
  title = FLBuilderStrings.row;
2571
  }
2572
  else {
2578
  ui.placeholder.html(title);
2579
 
2580
  // Add the global class?
2581
+ if ( ui.item.hasClass( 'fl-node-global' ) ||
2582
+ ui.item.hasClass( 'fl-builder-block-global' ) ||
2583
+ $( '.fl-node-dragging' ).hasClass( 'fl-node-global' )
2584
+ ) {
2585
  ui.placeholder.addClass( 'fl-builder-drop-zone-global' );
2586
  }
2587
  else {
2589
  }
2590
  },
2591
 
2592
+ /**
2593
+ * Callback that fires when an element that is being
2594
+ * dragged position changes.
2595
+ *
2596
+ * @since 1.9
2597
+ * @access private
2598
+ * @method _blockDragChange
2599
+ * @param {Object} e The event object.
2600
+ * @param {Object} ui An object with additional info for the drag.
2601
+ */
2602
+ _blockDragChange: function( e, ui )
2603
+ {
2604
+ ui.placeholder.hide();
2605
+ ui.placeholder.fadeIn( 100 );
2606
+ },
2607
+
2608
+ /**
2609
+ * Prevents sorting of items that shouldn't be sorted into
2610
+ * specific areas.
2611
+ *
2612
+ * @since 1.9
2613
+ * @access private
2614
+ * @method _blockPreventSort
2615
+ * @param {Object} item The item being sorted.
2616
+ * @param {Object} parent The new parent.
2617
+ */
2618
+ _blockPreventSort: function( item, parent )
2619
+ {
2620
+ var prevent = false,
2621
+ isRowBlock = item.hasClass( 'fl-builder-block-row' ),
2622
+ isCol = item.hasClass( 'fl-col-sortable-proxy-item' ),
2623
+ isParentCol = parent.hasClass( 'fl-col-content' ),
2624
+ isColTarget = parent.hasClass( 'fl-col-drop-target' ),
2625
+ group = parent.parents( '.fl-col-group:not(.fl-col-group-nested)' ),
2626
+ nestedGroup = parent.parents( '.fl-col-group-nested' );
2627
+
2628
+ // Prevent columns in nested columns.
2629
+ if ( ( isRowBlock || isCol ) && isParentCol && nestedGroup.length > 0 ) {
2630
+ prevent = true;
2631
+ }
2632
+
2633
+ // Prevent 1 column from being nested in an empty column.
2634
+ if ( isParentCol && ! parent.find( '.fl-module, .fl-col' ).length ) {
2635
+
2636
+ if ( isRowBlock && '1-col' == item.data( 'cols' ) ) {
2637
+ prevent = true;
2638
+ }
2639
+ else if ( isCol ) {
2640
+ prevent = true;
2641
+ }
2642
+ }
2643
+
2644
+ // Prevent 5 or 6 columns from being nested.
2645
+ if ( isRowBlock && isParentCol && $.inArray( item.data( 'cols' ), [ '5-cols', '6-cols' ] ) > -1 ) {
2646
+ prevent = true;
2647
+ }
2648
+
2649
+ // Prevent columns with nested columns from being dropped in nested columns.
2650
+ if ( isCol && $( '.fl-node-dragging' ).find( '.fl-col-group-nested' ).length > 0 ) {
2651
+
2652
+ if ( isParentCol || ( isColTarget && nestedGroup.length > 0 ) ) {
2653
+ prevent = true;
2654
+ }
2655
+ }
2656
+
2657
+ // Prevent more than 12 columns.
2658
+ if ( isColTarget && group.length > 0 && 0 === nestedGroup.length && group.find( '> .fl-col:visible' ).length > 11 ) {
2659
+ prevent = true;
2660
+ }
2661
+
2662
+ // Prevent more than 4 nested columns.
2663
+ if ( isColTarget && nestedGroup.length > 0 && nestedGroup.find( '.fl-col:visible' ).length > 3 ) {
2664
+ prevent = true;
2665
+ }
2666
+
2667
+ // Add the disabled class if we are preventing a sort.
2668
+ if ( prevent ) {
2669
+ parent.addClass( 'fl-sortable-disabled' );
2670
+ }
2671
+
2672
+ return prevent;
2673
+ },
2674
+
2675
  /**
2676
  * Cleans up when a drag operation has stopped.
2677
  *
2681
  * @param {Object} e The event object.
2682
  * @param {Object} ui An object with additional info for the drag.
2683
  */
2684
+ _blockDragStop: function( e, ui )
2685
  {
2686
+ var scrollTop = $( window ).scrollTop(),
2687
+ parent = ui.item.parent(),
2688
+ initialPos = null;
2689
+
2690
+ // Get the node to scroll to once removing the node highlights affects the body height.
2691
+ if ( parent.hasClass( 'fl-drop-target' ) && parent.closest( '[data-node]' ).length ) {
2692
+ parent = parent.closest( '[data-node]' );
2693
+ initialPos = parent.offset().top - scrollTop;
2694
+ }
2695
+ else {
2696
+ initialPos = parent.offset().top - scrollTop;
2697
+ }
2698
 
2699
+ // Show the panel if a block was dropped back in.
2700
+ if ( parent.hasClass( 'fl-builder-blocks-section-content' ) ) {
2701
  FLBuilder._showPanel();
2702
  }
2703
 
2707
  FLBuilder._bindOverlayEvents();
2708
  FLBuilder._highlightEmptyCols();
2709
  FLBuilder._enableGlobalRows();
2710
+ FLBuilder._setupEmptyLayout();
2711
+ $( 'body' ).removeClass( 'fl-builder-dragging' );
2712
 
2713
  // Scroll the page back to where it was.
2714
+ scrollTo( 0, parent.offset().top - initialPos );
2715
  },
2716
 
2717
  /**
2723
  */
2724
  _blockDragCancel: function()
2725
  {
2726
+ if ( FLBuilder._dragEnabled && ! FLBuilder._dragging ) {
2727
  FLBuilder._dragEnabled = false;
2728
  FLBuilder._dragging = false;
2729
  FLBuilder._bindOverlayEvents();
2730
  FLBuilder._highlightEmptyCols();
2731
  FLBuilder._enableGlobalRows();
2732
+ FLBuilder._setupEmptyLayout();
2733
+ $( 'body' ).removeClass( 'fl-builder-dragging' );
2734
+ $( '.fl-node-drag-init' ).removeClass( 'fl-node-drag-init' );
2735
+ $( '.fl-node-dragging' ).removeClass( 'fl-node-dragging' );
2736
+ scrollTo( 0, FLBuilder._dragInitialScrollTop );
2737
  }
2738
  },
2739
 
2740
+ /**
2741
+ * Reorders a node within its parent.
2742
+ *
2743
+ * @since 1.9
2744
+ * @access private
2745
+ * @method _reorderNode
2746
+ * @param {String} nodeId The node ID of the node.
2747
+ * @param {Number} position The new position.
2748
+ */
2749
+ _reorderNode: function( nodeId, position )
2750
+ {
2751
+ FLBuilder.ajax( {
2752
+ action: 'reorder_node',
2753
+ node_id: nodeId,
2754
+ position: position,
2755
+ silent: true
2756
+ } );
2757
+ },
2758
+
2759
+ /**
2760
+ * Moves a node to a new parent.
2761
+ *
2762
+ * @since 1.9
2763
+ * @access private
2764
+ * @method _moveNode
2765
+ * @param {String} newParent The node ID of the new parent.
2766
+ * @param {String} nodeId The node ID of the node.
2767
+ * @param {Number} position The new position.
2768
+ */
2769
+ _moveNode: function( newParent, nodeId, position )
2770
+ {
2771
+ FLBuilder.ajax({
2772
+ action: 'move_node',
2773
+ new_parent: newParent,
2774
+ node_id: nodeId,
2775
+ position: position,
2776
+ silent: true
2777
+ });
2778
+ },
2779
+
2780
  /**
2781
  * Removes all node overlays and hides any tooltip helpies.
2782
  *
2788
  {
2789
  FLBuilder._removeRowOverlays();
2790
  FLBuilder._removeColOverlays();
2791
+ FLBuilder._removeColHighlightGuides();
2792
  FLBuilder._removeModuleOverlays();
2793
  FLBuilder._hideTipTips();
2794
  },
2837
  overlayPos = isNaN( overlayPos ) ? 0 : overlayPos;
2838
  overlay.css( 'bottom', ( margins.bottom + overlayPos ) + 'px' );
2839
  }
2840
+
2841
  return overlay;
2842
  },
2843
 
 
 
 
2844
  /**
2845
+ * Builds the overflow menu for an overlay if necessary.
2846
  *
2847
+ * @since 1.9
2848
  * @access private
2849
+ * @method _buildOverlayOverflowMenu
2850
+ * @param {Object} overlay The overlay object.
2851
  */
2852
+ _buildOverlayOverflowMenu: function( overlay )
2853
  {
2854
+ var actions = overlay.find( '.fl-block-overlay-actions' ),
2855
+ original = actions.data( 'original' ),
2856
+ actionsWidth = 0,
2857
+ items = null,
2858
+ itemsWidth = 0,
2859
+ item = null,
2860
+ i = 0,
2861
+ visibleItems = [],
2862
+ overflowItems = [],
2863
+ menuData = [],
2864
+ template = wp.template( 'fl-overlay-overflow-menu' );
2865
 
2866
+ // Use the original copy if we have one.
2867
+ if ( undefined != original ) {
2868
+ actions.after( original );
2869
+ actions.remove();
2870
+ actions = original;
2871
+ }
2872
 
2873
+ // Save a copy of the original actions.
2874
+ actions.data( 'original', actions.clone() );
2875
+
2876
+ // Get the actions width and items.
2877
+ actionsWidth = actions[0].getBoundingClientRect().width;
2878
+ items = actions.find( ' > i, > span.fl-builder-has-submenu' );
2879
+
2880
+ // Find visible and overflow items.
2881
+ for( ; i < items.length; i++ ) {
2882
 
2883
+ item = items.eq( i );
2884
+ itemsWidth += item.outerWidth();
2885
 
2886
+ if ( itemsWidth > actionsWidth ) {
2887
+ overflowItems.push( item );
2888
+ item.remove();
2889
  }
2890
+ else {
2891
+ visibleItems.push( item );
2892
+ }
2893
+ }
2894
+
2895
+ // Build the menu if we have overflow items.
2896
+ if ( overflowItems.length > 0 ) {
2897
+
2898
+ overflowItems.unshift( visibleItems.pop().remove() );
2899
+
2900
+ for( i = 0; i < overflowItems.length; i++ ) {
2901
+
2902
+ if ( overflowItems[ i ].is( '.fl-builder-has-submenu' ) ) {
2903
+ menuData.push( {
2904
+ type : 'submenu',
2905
+ label : overflowItems[ i ].find( '.fa' ).data( 'title' ),
2906
+ submenu : overflowItems[ i ].find( '.fl-builder-submenu' )[0].outerHTML
2907
+ } );
2908
+ }
2909
+ else {
2910
+ menuData.push( {
2911
+ type : 'action',
2912
+ label : overflowItems[ i ].data( 'title' ),
2913
+ className : overflowItems[ i ].removeClass( function( i, c ) {
2914
+ return c.replace( /fl-block-([^\s]+)/, '' );
2915
+ } ).attr( 'class' )
2916
+ } );
2917
+ }
2918
+ }
2919
+
2920
+ actions.append( template( menuData ) );
2921
+ FLBuilder._initTipTips();
2922
+ }
2923
  },
2924
 
2925
+ /* Rows
2926
+ ----------------------------------------------------------*/
2927
+
2928
  /**
2929
  * Removes all row overlays from the page.
2930
  *
2952
  return;
2953
  }
2954
 
2955
+ $('.fl-row.fl-node-global').addClass( 'fl-node-disabled' );
 
 
 
2956
  },
2957
 
2958
  /**
2969
  }
2970
 
2971
  $( '.fl-node-disabled' ).removeClass( 'fl-node-disabled' );
 
2972
  },
2973
 
2974
  /**
3052
  */
3053
  _rowDragHelper: function()
3054
  {
3055
+ return $('<div class="fl-builder-block-drag-helper">' + FLBuilderStrings.row + '</div>');
3056
+ },
3057
+
3058
+ /**
3059
+ * Initializes dragging for row. Rows themselves aren't sortables
3060
+ * as nesting that many sortables breaks down quickly and draggable by
3061
+ * itself is slow. Instead, we are programmatically triggering the drag
3062
+ * of our helper div that isn't a nested sortable but connected to the
3063
+ * sortables in the main layout.
3064
+ *
3065
+ * @since 1.9
3066
+ * @access private
3067
+ * @method _rowDragInit
3068
+ * @param {Object} e The event object.
3069
+ */
3070
+ _rowDragInit: function( e )
3071
+ {
3072
+ var handle = $( e.target ),
3073
+ helper = $( '.fl-row-sortable-proxy-item' ),
3074
+ row = handle.closest( '.fl-row' );
3075
+
3076
+ row.addClass( 'fl-node-dragging' );
3077
+
3078
+ FLBuilder._blockDragInit( e );
3079
+
3080
+ e.target = helper[ 0 ];
3081
+
3082
+ helper.trigger( e );
3083
+ },
3084
+
3085
+ /**
3086
+ * Callback that fires when dragging starts for a row.
3087
+ *
3088
+ * @since 1.9
3089
+ * @access private
3090
+ * @method _rowDragStart
3091
+ * @param {Object} e The event object.
3092
+ * @param {Object} ui An object with additional info for the drag.
3093
+ */
3094
+ _rowDragStart: function( e, ui )
3095
+ {
3096
+ var rows = $( FLBuilder._contentClass + ' .fl-row' ),
3097
+ row = $( '.fl-node-dragging' );
3098
+
3099
+ if ( 1 === rows.length ) {
3100
+ $( FLBuilder._contentClass ).addClass( 'fl-builder-empty' );
3101
+ }
3102
+
3103
+ row.hide();
3104
+
3105
+ FLBuilder._blockDragStart( e, ui );
3106
  },
3107
 
3108
  /**
3114
  * @param {Object} e The event object.
3115
  * @param {Object} ui An object with additional info for the drag.
3116
  */
3117
+ _rowDragStop: function( e, ui )
3118
  {
3119
+ var item = ui.item,
3120
+ parent = item.parent(),
3121
+ row = null,
3122
+ group = null,
3123
+ position = 0;
3124
 
3125
+ FLBuilder._blockDragStop( e, ui );
3126
+
3127
  // A row was dropped back into the row list.
3128
+ if ( parent.hasClass( 'fl-builder-rows' ) ) {
3129
  item.remove();
3130
  return;
3131
  }
3132
+ // A row was dropped back into the sortable proxy.
3133
+ else if ( parent.hasClass( 'fl-row-sortable-proxy' ) ) {
3134
+ $( '.fl-node-dragging' ).removeClass( 'fl-node-dragging' ).show();
3135
+ return;
3136
+ }
3137
  // Add a new row.
3138
+ else if ( item.hasClass( 'fl-builder-block' ) ) {
3139
 
3140
+ // Cancel the drop if the sortable is disabled?
3141
+ if ( parent.hasClass( 'fl-sortable-disabled' ) ) {
3142
+ item.remove();
3143
+ FLBuilder._showPanel();
3144
+ return;
3145
+ }
3146
+ // A new row was dropped into column.
3147
+ else if ( parent.hasClass( 'fl-col-content' ) ) {
3148
  FLBuilder._addColGroup(
3149
+ item.closest( '.fl-col' ).attr( 'data-node' ),
3150
+ item.attr( 'data-cols' ),
3151
+ parent.find( '> .fl-module, .fl-col-group, .fl-builder-block' ).index( item )
3152
  );
3153
  }
3154
+ // A new row was dropped next to a column.
3155
+ else if ( parent.hasClass( 'fl-col-drop-target' ) ) {
3156
+ FLBuilder._addCols(
3157
+ parent.closest( '.fl-col' ),
3158
+ parent.hasClass( 'fl-col-drop-target-last' ) ? 'after' : 'before',
3159
+ item.attr( 'data-cols' ),
3160
+ parent.closest( '.fl-col-group-nested' ).length > 0
3161
+ );
3162
+ }
3163
+ // A new row was dropped into a column group position.
3164
+ else if ( parent.hasClass( 'fl-col-group-drop-target' ) ) {
3165
+
3166
+ group = item.closest( '.fl-col-group' );
3167
+ position = item.closest( '.fl-row' ).find( '.fl-row-content > .fl-col-group' ).index( group );
3168
+
3169
+ FLBuilder._addColGroup(
3170
+ item.closest( '.fl-row' ).attr( 'data-node' ),
3171
+ item.attr( 'data-cols' ),
3172
+ parent.hasClass( 'fl-drop-target-last' ) ? position + 1 : position
3173
+ );
3174
+ }
3175
+ // A row was dropped into a row position.
3176
+ else {
3177
+
3178
+ row = item.closest( '.fl-row' );
3179
+ position = ! row.length ? 0 : $( FLBuilder._contentClass + ' .fl-row' ).index( row );
3180
+
3181
+ FLBuilder._addRow(
3182
+ item.attr('data-cols'),
3183
+ parent.hasClass( 'fl-drop-target-last' ) ? position + 1 : position
3184
  );
3185
  }
3186
 
3191
  FLBuilder._showPanel();
3192
 
3193
  // Show the module list.
3194
+ $( '.fl-builder-modules' ).siblings( '.fl-builder-blocks-section-title' ).eq( 0 ).trigger( 'click' );
3195
  }
3196
  // Reorder a row.
3197
  else {
3198
+
3199
+ row = $( '.fl-node-dragging' ).removeClass( 'fl-node-dragging' ).show();
3200
+
3201
+ // Make sure a single row wasn't dropped back into the main layout.
3202
+ if ( ! parent.parent().hasClass( 'fl-builder-content' ) ) {
3203
+
3204
+ // Move the row in the UI.
3205
+ if ( parent.hasClass( 'fl-drop-target-last' ) ) {
3206
+ parent.parent().after( row );
3207
+ }
3208
+ else {
3209
+ parent.parent().before( row );
3210
+ }
3211
+
3212
+ // Reorder the row.
3213
+ FLBuilder._reorderNode(
3214
+ row.attr('data-node'),
3215
+ row.index()
3216
+ );
3217
+ }
3218
+
3219
+ // Revert the proxy to its parent.
3220
+ $( '.fl-row-sortable-proxy' ).append( ui.item );
3221
  }
3222
  },
3223
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3224
  /**
3225
  * Adds a new row to the layout.
3226
  *
3257
  {
3258
  var data = JSON.parse(response),
3259
  content = $(FLBuilder._contentClass),
3260
+ rowId = $(data.html).data('node'),
3261
+ module = FLBuilder._addModuleAfterNodeRender;
3262
 
3263
  // Add new row info to the data.
3264
  data.nodeParent = content;
3268
  FLBuilder._renderLayout( data, function(){
3269
 
3270
  // Add a module to the newly created row.
3271
+ if(module !== null) {
3272
+ $('.fl-node-' + rowId + ' .fl-col-content').append(module);
3273
+ FLBuilder._reorderModule(module);
3274
+ FLBuilder._addModuleAfterNodeRender = null;
 
 
 
 
 
3275
  }
3276
  } );
3277
  },
3286
  */
3287
  _deleteRowClicked: function( e )
3288
  {
3289
+ var row = $(this).closest('.fl-row'),
 
3290
  result = null;
3291
 
3292
  if(!row.find('.fl-module').length) {
3380
  _rowSettingsClicked: function( e )
3381
  {
3382
  var button = $( this ),
3383
+ nodeId = button.closest( '.fl-row' ).attr( 'data-node' ),
3384
  global = button.closest( '.fl-block-overlay-global' ).length > 0;
3385
 
3386
  if ( global && 'row' != FLBuilderConfig.userTemplateType ) {
3426
  /* Columns
3427
  ----------------------------------------------------------*/
3428
 
3429
+ /**
3430
+ * Adds a dashed border to empty columns.
3431
+ *
3432
+ * @since 1.0
3433
+ * @access private
3434
+ * @method _highlightEmptyCols
3435
+ */
3436
+ _highlightEmptyCols: function()
3437
+ {
3438
+ var notGlobal = 'row' == FLBuilderConfig.userTemplateType ? '' : ':not(.fl-node-global)',
3439
+ rows = $(FLBuilder._contentClass + ' .fl-row' + notGlobal),
3440
+ cols = $(FLBuilder._contentClass + ' .fl-col' + notGlobal);
3441
+
3442
+ $( '.fl-row-highlight' ).removeClass('fl-row-highlight');
3443
+ cols.removeClass('fl-col-highlight').find('.fl-col-content').css( 'height', '' );
3444
+
3445
+ cols.each(function(){
3446
+
3447
+ var col = $(this);
3448
+
3449
+ if(col.find('.fl-module, .fl-col').length === 0) {
3450
+ col.addClass('fl-col-highlight');
3451
+ }
3452
+ });
3453
+ },
3454
+
3455
+ /**
3456
+ * Sets up dashed borders to show where things can
3457
+ * be dropped in rows and columns.
3458
+ *
3459
+ * @since 1.9
3460
+ * @access private
3461
+ * @method _highlightRowsAndColsForDrag
3462
+ * @param {Object} target The event target for the drag.
3463
+ */
3464
+ _highlightRowsAndColsForDrag: function( target )
3465
+ {
3466
+ var notGlobal = 'row' == FLBuilderConfig.userTemplateType ? '' : ':not(.fl-node-global)';
3467
+
3468
+ // Highlight rows.
3469
+ $( FLBuilder._contentClass + ' .fl-row' ).addClass( 'fl-row-highlight' );
3470
+
3471
+ // Highlight columns.
3472
+ if ( ! target.closest( '.fl-row-overlay' ).length ) {
3473
+ $( FLBuilder._contentClass + ' .fl-col' + notGlobal ).addClass( 'fl-col-highlight' );
3474
+ }
3475
+ },
3476
+
3477
+ /**
3478
+ * Adjust the height of columns with modules in them
3479
+ * to account for the drop zone and keep the layout
3480
+ * from jumping around.
3481
+ *
3482
+ * @since 1.9
3483
+ * @access private
3484
+ * @method _adjustColHeightsForDrag
3485
+ */
3486
+ _adjustColHeightsForDrag: function()
3487
+ {
3488
+ var notGlobal = 'row' == FLBuilderConfig.userTemplateType ? '' : '.fl-row:not(.fl-node-global) ',
3489
+ content = $( FLBuilder._contentClass ),
3490
+ notNested = content.find( notGlobal + '.fl-col-group:not(.fl-col-group-nested) > .fl-col > .fl-col-content' ),
3491
+ nested = content.find( notGlobal + '.fl-col-group-nested .fl-col-content' ),
3492
+ col = null,
3493
+ i = 0;
3494
+
3495
+ $( '.fl-node-drag-init' ).hide();
3496
+
3497
+ for ( ; i < nested.length; i++ ) {
3498
+ FLBuilder._adjustColHeightForDrag( nested.eq( i ) );
3499
+ }
3500
+
3501
+ for ( i = 0; i < notNested.length; i++ ) {
3502
+ FLBuilder._adjustColHeightForDrag( notNested.eq( i ) );
3503
+ }
3504
+
3505
+ $( '.fl-node-drag-init' ).show();
3506
+ },
3507
+
3508
+ /**
3509
+ * Adjust the height of a single column for dragging.
3510
+ *
3511
+ * @since 1.9
3512
+ * @access private
3513
+ * @method _adjustColHeightForDrag
3514
+ */
3515
+ _adjustColHeightForDrag: function( col )
3516
+ {
3517
+ if ( col.find( '.fl-module:visible, .fl-col:visible' ).length ) {
3518
+ col.height( col.height() + 45 );
3519
+ }
3520
+ },
3521
+
3522
+ /**
3523
+ * Adds a border guide to a column when the column
3524
+ * actions submenu is open for a module.
3525
+ *
3526
+ * @since 1.9
3527
+ * @access private
3528
+ * @method _showColHighlightGuide
3529
+ */
3530
+ _showColHighlightGuide: function()
3531
+ {
3532
+ var li = $( this ),
3533
+ link = li.find( 'a' ),
3534
+ col = li.closest( '.fl-col' ),
3535
+ parentCol = col.parents( '.fl-col' ),
3536
+ guide = $( '<div class="fl-col-highlight-guide"></div>' ),
3537
+ guideTop = null,
3538
+ overlayTop = li.closest( '.fl-block-overlay' ).offset().top;
3539
+
3540
+ if ( link.hasClass( 'fl-block-col-move-parent' ) || link.hasClass( 'fl-block-col-edit-parent' ) ) {
3541
+ col = parentCol;
3542
+ }
3543
+ if ( col.hasClass( 'fl-col-highlight' ) ) {
3544
+ return;
3545
+ }
3546
+
3547
+ col.find( '> .fl-col-content' ).append( guide );
3548
+ col.addClass( 'fl-col-has-highlight-guide' );
3549
+
3550
+ guideTop = guide.offset().top;
3551
+
3552
+ if ( guideTop > overlayTop ) {
3553
+ guide.css( 'top', ( overlayTop - guideTop + 4 ) + 'px' );
3554
+ }
3555
+ },
3556
+
3557
+ /**
3558
+ * Removes all column highlight guides.
3559
+ *
3560
+ * @since 1.9
3561
+ * @access private
3562
+ * @method _showColHighlightGuide
3563
+ */
3564
+ _removeColHighlightGuides: function()
3565
+ {
3566
+ $( '.fl-col-has-highlight-guide' ).removeClass( 'fl-col-has-highlight-guide' );
3567
+ $( '.fl-col-highlight-guide' ).remove();
3568
+ },
3569
+
3570
  /**
3571
  * Shows an overlay with actions when the mouse enters a column.
3572
  *
3577
  _colMouseenter: function()
3578
  {
3579
  var col = $( this ),
3580
+ group = col.closest( '.fl-col-group' ),
3581
  global = col.hasClass( 'fl-node-global' ),
3582
  parentGlobal = col.parents( '.fl-node-global' ).length > 0,
3583
+ numCols = col.closest( '.fl-col-group' ).find( '> .fl-col' ).length,
3584
+ index = group.find( '> .fl-col' ).index( col ),
3585
+ first = 0 === index,
3586
+ last = numCols === index + 1,
3587
+ hasChildCols = col.find( '.fl-col' ).length > 0,
3588
+ parentCol = col.parents( '.fl-col' ),
3589
+ parentGroup = parentCol.closest( '.fl-col-group' ),
3590
+ hasParentCol = parentCol.length > 0,
3591
+ numParentCols = hasParentCol ? parentGroup.find( '> .fl-col' ).length : 0,
3592
+ parentIndex = parentGroup.find( '> .fl-col' ).index( parentCol ),
3593
+ parentFirst = hasParentCol ? 0 === parentIndex : false,
3594
+ parentLast = hasParentCol ? numParentCols === parentIndex + 1 : false,
3595
+ contentWidth = col.find( '> .fl-col-content' ).width(),
3596
+ template = wp.template( 'fl-col-overlay' ),
3597
+ overlay = null;
3598
+
3599
  if ( FLBuilderConfig.simpleUi ) {
3600
  return;
3601
  }
3605
  else if ( col.find( '.fl-module' ).length > 0 ) {
3606
  return;
3607
  }
3608
+ else if ( col.find( '.fl-col' ).length > 0 ) {
3609
+ return;
3610
+ }
3611
  else if ( ! col.hasClass( 'fl-block-overlay-active' ) ) {
3612
 
3613
  // Remove existing overlays.
3615
  FLBuilder._removeModuleOverlays();
3616
 
3617
  // Append the template.
3618
+ overlay = FLBuilder._appendOverlay( col, template( {
3619
+ global : global,
3620
+ numCols : numCols,
3621
+ first : first,
3622
+ last : last,
3623
+ hasChildCols : hasChildCols,
3624
+ hasParentCol : hasParentCol,
3625
+ parentFirst : parentFirst,
3626
+ parentLast : parentLast,
3627
+ numParentCols : numParentCols,
3628
+ contentWidth : contentWidth
3629
  } ) );
3630
 
3631
+ // Build the overlay overflow menu if needed.
3632
+ FLBuilder._buildOverlayOverflowMenu( overlay );
3633
+
3634
  // Init column resizing.
3635
  FLBuilder._initColDragResizing();
3636
  }
3654
  isTipTip = toElement.is('#tiptip_holder'),
3655
  isTipTipChild = toElement.closest('#tiptip_holder').length > 0;
3656
 
3657
+ if( isTipTip || isTipTipChild ) {
3658
+ return;
3659
+ }
3660
+ if( hasModules ) {
3661
  return;
3662
  }
3663
 
3664
  FLBuilder._removeColOverlays();
3665
+ FLBuilder._removeColHighlightGuides();
3666
  },
3667
 
3668
  /**
3681
  $('body').removeClass('fl-block-overlay-muted');
3682
  },
3683
 
3684
+ /**
3685
+ * Returns a helper element for column drag operations.
3686
+ *
3687
+ * @since 1.9
3688
+ * @access private
3689
+ * @method _colDragHelper
3690
+ * @return {Object} The helper element.
3691
+ */
3692
+ _colDragHelper: function()
3693
+ {
3694
+ return $('<div class="fl-builder-block-drag-helper">' + FLBuilderStrings.column + '</div>');
3695
+ },
3696
+
3697
+ /**
3698
+ * Initializes dragging for columns. Columns themselves aren't sortables
3699
+ * as nesting that many sortables breaks down quickly and draggable by
3700
+ * itself is slow. Instead, we are programmatically triggering the drag
3701
+ * of our helper div that isn't a nested sortable but connected to the
3702
+ * sortables in the main layout.
3703
+ *
3704
+ * @since 1.9
3705
+ * @access private
3706
+ * @method _colDragInit
3707
+ * @param {Object} e The event object.
3708
+ */
3709
+ _colDragInit: function( e )
3710
+ {
3711
+ var handle = $( e.target ),
3712
+ helper = $( '.fl-col-sortable-proxy-item' ),
3713
+ col = handle.closest( '.fl-col' );
3714
+
3715
+ if ( handle.hasClass( 'fl-block-col-move-parent' ) ) {
3716
+ col = col.parents( '.fl-col' );
3717
+ }
3718
+
3719
+ col.addClass( 'fl-node-dragging' );
3720
+
3721
+ FLBuilder._blockDragInit( e );
3722
+ FLBuilder._removeColHighlightGuides();
3723
+
3724
+ e.target = helper[ 0 ];
3725
+
3726
+ helper.trigger( e );
3727
+ },
3728
+
3729
+ /**
3730
+ * Callback that fires when dragging starts for a column.
3731
+ *
3732
+ * @since 1.9
3733
+ * @access private
3734
+ * @method _colDragStart
3735
+ * @param {Object} e The event object.
3736
+ * @param {Object} ui An object with additional info for the drag.
3737
+ */
3738
+ _colDragStart: function( e, ui )
3739
+ {
3740
+ var col = $( '.fl-node-dragging' );
3741
+
3742
+ col.hide();
3743
+
3744
+ FLBuilder._resetColumnWidths( col.parent() );
3745
+ FLBuilder._blockDragStart( e, ui );
3746
+ },
3747
+
3748
+ /**
3749
+ * Callback that fires when dragging stops for a column.
3750
+ *
3751
+ * @since 1.9
3752
+ * @access private
3753
+ * @method _colDragStop
3754
+ * @param {Object} e The event object.
3755
+ * @param {Object} ui An object with additional info for the drag.
3756
+ */
3757
+ _colDragStop: function( e, ui )
3758
+ {
3759
+ FLBuilder._blockDragStop( e, ui );
3760
+
3761
+ var col = $( '.fl-node-dragging' ).removeClass( 'fl-node-dragging' ).show(),
3762
+ colId = col.attr( 'data-node' ),
3763
+ newParent = ui.item.parent(),
3764
+ oldGroup = col.parent(),
3765
+ oldGroupId = oldGroup.attr( 'data-node' )
3766
+ newGroup = newParent.closest( '.fl-col-group' ),
3767
+ newGroupId = newGroup.attr( 'data-node' ),
3768
+ newRow = newParent.closest('.fl-row'),
3769
+ position = 0;
3770
+
3771
+ // Cancel the drop if the sortable is disabled?
3772
+ if ( newParent.hasClass( 'fl-sortable-disabled' ) ) {
3773
+ FLBuilder._resetColumnWidths( oldGroup );
3774
+ }
3775
+ // A column was dropped back into the sortable proxy.
3776
+ else if ( newParent.hasClass( 'fl-col-sortable-proxy' ) ) {
3777
+ FLBuilder._resetColumnWidths( oldGroup );
3778
+ }
3779
+ // A column was dropped into a column.
3780
+ else if ( newParent.hasClass( 'fl-col-content' ) ) {
3781
+
3782
+ // Remove the column.
3783
+ col.remove();
3784
+
3785
+ // Remove empty old groups (needs to be done here for correct position).
3786
+ if ( 0 === oldGroup.find( '.fl-col' ).length ) {
3787
+ oldGroup.remove();
3788
+ }
3789
+
3790
+ // Find the new group position.
3791
+ position = newParent.find( '.fl-module, .fl-col-group, .fl-col-sortable-proxy-item' ).index( ui.item );
3792
+
3793
+ // Add the new group.
3794
+ FLBuilder._addColGroup( newParent.closest( '.fl-col' ).attr('data-node'), colId, position );
3795
+ }
3796
+ // A column was dropped into a column position.
3797
+ else if ( newParent.hasClass( 'fl-col-drop-target' ) ) {
3798
+
3799
+ // Move the column in the UI.
3800
+ if ( newParent.hasClass( 'fl-col-drop-target-last' ) ) {
3801
+ newParent.parent().after( col );
3802
+ }
3803
+ else {
3804
+ newParent.parent().before( col );
3805
+ }
3806
+
3807
+ // Reset the UI column widths.
3808
+ FLBuilder._resetColumnWidths( newGroup );
3809
+
3810
+ // Save the column move via AJAX.
3811
+ if ( oldGroupId == newGroupId ) {
3812
+ FLBuilder.ajax( {
3813
+ action: 'reorder_col',
3814
+ node_id: colId,
3815
+ position: col.index(),
3816
+ silent: true
3817
+ } );
3818
+ }
3819
+ else {
3820
+ FLBuilder.ajax( {
3821
+ action: 'move_col',
3822
+ node_id: colId,
3823
+ new_parent: newGroupId,
3824
+ position: col.index(),
3825
+ resize: [ oldGroupId, newGroupId ],
3826
+ silent: true
3827
+ } );
3828
+ }
3829
+
3830
+ // Trigger a layout resize.
3831
+ FLBuilder._resizeLayout();
3832
+ }
3833
+ // A column was dropped into a column group position.
3834
+ else if ( newParent.hasClass( 'fl-col-group-drop-target' ) ) {
3835
+
3836
+ // Remove the column.
3837
+ col.remove();
3838
+
3839
+ // Remove empty old groups (needs to be done here for correct position).
3840
+ if ( 0 === oldGroup.find( '.fl-col' ).length ) {
3841
+ oldGroup.remove();
3842
+ }
3843
+
3844
+ // Find the new group position.
3845
+ position = newRow.find( '.fl-row-content > .fl-col-group' ).index( newGroup );
3846
+ position = newParent.hasClass( 'fl-drop-target-last' ) ? position + 1 : position;
3847
+
3848
+ // Add the new group.
3849
+ FLBuilder._addColGroup( newRow.attr('data-node'), colId, position );
3850
+ }
3851
+ // A column was dropped into a row position.
3852
+ else if ( newParent.hasClass( 'fl-row-drop-target' ) ) {
3853
+
3854
+ // Remove the column.
3855
+ col.remove();
3856
+
3857
+ // Find the new row position.
3858
+ position = newParent.closest( '.fl-builder-content' ).find( '.fl-row' ).index( newRow );
3859
+ position = newParent.hasClass( 'fl-drop-target-last' ) ? position + 1 : position;
3860
+
3861
+ // Add the new row.
3862
+ FLBuilder._addRow( colId, position );
3863
+ }
3864
+
3865
+ // Remove empty old groups.
3866
+ if ( 0 === oldGroup.find( '.fl-col' ).length ) {
3867
+ oldGroup.remove();
3868
+ }
3869
+
3870
+ // Revert the proxy to its parent.
3871
+ $( '.fl-col-sortable-proxy' ).append( ui.item );
3872
+
3873
+ // Finish the drag.
3874
+ FLBuilder._highlightEmptyCols();
3875
+ FLBuilder._initDropTargets();
3876
+ FLBuilder._initSortables();
3877
+ },
3878
+
3879
  /**
3880
  * Shows the settings lightbox and loads the column settings
3881
  * when the column settings button is clicked.
3887
  */
3888
  _colSettingsClicked: function(e)
3889
  {
3890
+ var button = $( this ),
3891
+ col = button.closest('.fl-col'),
3892
+ nodeId = null;
3893
 
3894
  if ( FLBuilder._colResizing ) {
3895
  return;
3896
  }
3897
 
3898
+ if ( button.hasClass( 'fl-block-col-edit-parent' ) ) {
3899
+ nodeId = col.parents( '.fl-col' ).data( 'node' );
3900
+ }
3901
+ else {
3902
+ nodeId = col.attr('data-node');
3903
+ }
3904
+
3905
  FLBuilder._closePanel();
3906
  FLBuilder._showLightbox();
3907
 
3922
  * @method _colSettingsLoaded
3923
  * @param {String} response The JSON response with the HTML for the column settings form.
3924
  */
3925
+ _colSettingsLoaded: function( response )
3926
  {
3927
  var data = JSON.parse( response ),
3928
  settings = null,
3929
  nodeId = null,
3930
+ col = null,
3931
+ content = null;
3932
 
3933
  FLBuilder._setSettingsFormContent( data.settings );
3934
 
3935
+ settings = $( '.fl-builder-col-settings' );
3936
+ nodeId = settings.data( 'node' );
3937
+ col = $( '.fl-col[data-node="' + nodeId + '"]' );
3938
+ content = col.find( '> .fl-col-content' );
3939
 
3940
+ if ( col.siblings( '.fl-col' ).length === 0 ) {
3941
+ $( settings ).find( '#fl-builder-settings-section-general' ).css( 'display', 'none' );
3942
+ }
3943
+ else if( content.width() <= 40 ) {
3944
+ $( '#fl-field-size' ).hide();
3945
  }
3946
 
3947
+ FLBuilder.preview = new FLBuilderPreview( {
3948
  type : 'col',
3949
  state : data.state
3950
+ } );
3951
  },
3952
 
3953
  /**
3960
  */
3961
  _deleteColClicked: function( e )
3962
  {
3963
+ var button = $( this ),
3964
+ col = button.closest( '.fl-col' ),
3965
+ parentGroup = col.closest( '.fl-col-group' ),
3966
+ parentCol = col.parents( '.fl-col' ),
3967
+ hasParentCol = parentCol.length > 0,
3968
+ parentChildren = parentCol.find( '> .fl-col-content > .fl-module, > .fl-col-content > .fl-col-group' ),
3969
+ siblingCols = col.siblings( '.fl-col' ),
3970
+ result = true;
3971
 
3972
+ if ( col.find( '.fl-module' ).length > 0 ) {
3973
  result = confirm( FLBuilderStrings.deleteColumnMessage );
3974
  }
3975
+
3976
+ // Handle deleting of nested columns.
3977
+ if ( hasParentCol && 1 === parentChildren.length ) {
3978
+
3979
+ if ( 0 === siblingCols.length ) {
3980
+ col = parentCol;
3981
+ }
3982
+ else if ( 1 === siblingCols.length && ! siblingCols.find( '.fl-module' ).length ) {
3983
+ col = parentGroup;
3984
+ }
3985
+ }
3986
+
3987
  if ( result ) {
3988
  FLBuilder._deleteCol( col );
3989
  FLBuilder._removeAllOverlays();
3990
+ FLBuilder._highlightEmptyCols();
3991
  }
3992
 
3993
  e.stopPropagation();
3999
  * @since 1.0
4000
  * @access private
4001
  * @method _deleteCol
4002
+ * @param {Object} col A jQuery reference of the column to delete (can also be a group).
4003
  */
4004
  _deleteCol: function(col)
4005
  {
4009
  width = 0;
4010
 
4011
  col.remove();
4012
+ rowCols = row.find('.fl-row-content > .fl-col-group > .fl-col');
4013
+ groupCols = group.find(' > .fl-col');
4014
 
4015
  if(0 === rowCols.length && 'row' != FLBuilderConfig.userTemplateType) {
4016
  FLBuilder._deleteRow(row);
4041
  new_width : width,
4042
  silent : true
4043
  });
4044
+
4045
+ FLBuilder._initDropTargets();
4046
+ FLBuilder._initSortables();
4047
  }
4048
  },
4049
 
4050
  /**
4051
+ * Inserts a column (or columns) before or after another column.
 
4052
  *
4053
  * @since 1.6.4
4054
  * @access private
4055
+ * @method _addCols
4056
+ * @param {Object} col A jQuery reference of the column to insert before or after.
4057
+ * @param {String} insert Either before or after.
4058
+ * @param {String} type The type of column(s) to insert.
4059
+ * @param {Boolean} nested Whether these columns are nested or not.
4060
  */
4061
+ _addCols: function( col, insert, type, nested )
4062
  {
4063
+ type = typeof type == 'undefined' ? '1-col' : type;
4064
+ nested = typeof nested == 'undefined' ? false : nested;
4065
 
4066
+ FLBuilder.showAjaxLoader();
4067
+ FLBuilder._removeAllOverlays();
 
 
 
 
 
 
 
 
 
 
 
 
 
4068
 
4069
+ FLBuilder.ajax( {
4070
+ action : 'render_new_columns',
4071
+ node_id : col.attr('data-node'),
4072
+ insert : insert,
4073
+ type : type,
4074
+ nested : nested ? 1 : 0
4075
+ }, FLBuilder._addColsComplete );
4076
  },
4077
 
4078
  /**
4079
+ * Adds the HTML for columns to the layout when the AJAX add
4080
+ * operation is complete. Adds a module if one is queued to
4081
+ * go in a new column.
4082
  *
4083
+ * @since 1.9
4084
  * @access private
4085
+ * @method _addColsComplete
4086
+ * @param {String} response The JSON response with the HTML for the new column(s).
4087
+ */
4088
+ _addColsComplete: function( response )
 
4089
  {
4090
+ var data = JSON.parse( response ),
4091
+ col = null,
4092
+ moduleData = FLBuilder._addModuleAfterNodeRender,
4093
+ module = null;
4094
+
4095
+ // Render the layout.
4096
+ FLBuilder._renderLayout( data, function() {
4097
+
4098
+ // Add a module to a newly created column.
4099
+ if ( moduleData !== null ) {
4100
+
4101
+ $( '[data-node="' + moduleData.module.data( 'node' ) + '"]' ).remove()
4102
+
4103
+ col = $( '[data-node="' + moduleData.colId + '"]' );
4104
+
4105
+ if ( 'after' == moduleData.position ) {
4106
+ col.next().find( '.fl-col-content' ).append( moduleData.module );
4107
+ }
4108
+ else {
4109
+ col.prev().find( '.fl-col-content' ).append( moduleData.module );
4110
+ }
4111
+
4112
+ FLBuilder._reorderModule( moduleData.module );
4113
+ FLBuilder._addModuleAfterNodeRender = null;
4114
+ }
4115
+ } );
4116
  },
4117
 
4118
  /**
4127
  */
4128
  _addColGroup: function(nodeId, cols, position)
4129
  {
4130
+ var parent = $( '.fl-node-' + nodeId );
4131
+
4132
  // Show the loader.
4133
  FLBuilder.showAjaxLoader();
4134
 
4135
  // Save the new column group info.
 
4136
  FLBuilder._newColGroupPosition = position;
4137
 
4138
+ if ( parent.hasClass( 'fl-col' ) ) {
4139
+ FLBuilder._newColGroupParent = parent.find( ' > .fl-col-content' );
4140
+ }
4141
+ else {
4142
+ FLBuilder._newColGroupParent = parent.find( '.fl-row-content' );
4143
+ }
4144
+
4145
  // Send the request.
4146
  FLBuilder.ajax({
4147
  action : 'render_new_column_group',
4163
  */
4164
  _addColGroupComplete: function(response)
4165
  {
4166
+ var data = JSON.parse(response),
4167
+ colId = $(data.html).find('.fl-col').data('node'),
4168
+ module = FLBuilder._addModuleAfterNodeRender;
4169
 
4170
  // Add new column group info to the data.
4171
  data.nodeParent = FLBuilder._newColGroupParent;
4174
  // Render the layout.
4175
  FLBuilder._renderLayout( data, function(){
4176
 
4177
+ // Added the nested columns class if needed.
4178
+ if ( data.nodeParent.hasClass( 'fl-col-content' ) ) {
4179
+ data.nodeParent.parents( '.fl-col' ).addClass( 'fl-col-has-cols' );
4180
+ }
4181
+
4182
  // Add a module to the newly created column group.
4183
+ if(module !== null) {
4184
+ $('.fl-node-' + colId + ' .fl-col-content').append(module);
4185
+ FLBuilder._reorderModule(module);
4186
+ FLBuilder._addModuleAfterNodeRender = null;
 
 
 
 
 
4187
  }
4188
  } );
4189
  },
4217
  _colDragResizeStart: function( e, ui )
4218
  {
4219
  // Setup resize vars.
4220
+ var handle = $( ui.helper ),
4221
+ direction = '',
4222
+ resizeParent = handle.hasClass( 'fl-block-col-resize-parent' ),
4223
+ parentCol = resizeParent ? handle.closest( '.fl-col' ).parents( '.fl-col' ) : null,
4224
+ group = resizeParent ? parentCol.parents( '.fl-col-group' ) : handle.closest( '.fl-col-group' ),
4225
+ cols = group.find( '> .fl-col' ),
4226
+ col = resizeParent ? parentCol : handle.closest( '.fl-col' ),
4227
+ sibling = null,
4228
+ availWidth = 100,
4229
+ i = 0;
4230
+
4231
  // Find the direction and sibling.
4232
  if ( handle.hasClass( 'fl-block-col-resize-e' ) ) {
4233
  direction = 'e';
4268
  // Set the resizing flag.
4269
  FLBuilder._colResizing = true;
4270
 
4271
+ // Add the body col resize class.
4272
+ $( 'body' ).addClass( 'fl-builder-col-resizing' );
4273
+
4274
  // Close the builder panel and destroy overlay events.
4275
  FLBuilder._closePanel();
4276
  FLBuilder._destroyOverlayEvents();
4297
  colRound = Math.round( colWidth * 100 ) / 100,
4298
  siblingWidth = data.availWidth - colWidth,
4299
  siblingRound = Math.round( siblingWidth * 100 ) / 100,
4300
+ minRound = 8,
4301
+ maxRound = Math.round( ( data.availWidth - minRound ) * 100 ) / 100;
4302
 
4303
  // Set the min/max width if needed.
4304
+ if ( colRound < minRound ) {
4305
  colRound = minRound;
4306
  siblingRound = maxRound;
4307
  }
4308
+ else if ( siblingRound < minRound ) {
4309
  colRound = maxRound;
4310
  siblingRound = minRound;
4311
  }
4339
  */
4340
  _colDragResizeStop: function( e, ui )
4341
  {
4342
+ var data = FLBuilder._colResizeData,
4343
+ overlay = FLBuilder._colResizeData.handle.closest( '.fl-block-overlay' );
4344
 
4345
  // Hide the feedback divs.
4346
  FLBuilder._colResizeData.feedbackLeft.hide();
4356
  silent : true
4357
  });
4358
 
4359
+ // Build the overlay overflow menu if needed.
4360
+ FLBuilder._buildOverlayOverflowMenu( overlay );
4361
+
4362
  // Reset the resize data.
4363
  FLBuilder._colResizeData = null;
4364
 
4365
+ // Remove the body col resize class.
4366
+ $( 'body' ).removeClass( 'fl-builder-col-resizing' );
4367
+
4368
  // Rebind overlay events.
4369
  FLBuilder._bindOverlayEvents();
4370
 
4375
  FLBuilder.triggerHook( 'col-resize-stop' );
4376
  },
4377
 
4378
+ /**
4379
+ * Resets the widths of all columns in a row when the
4380
+ * Reset Column Widths button is clicked.
4381
+ *
4382
+ * @since 1.6.4
4383
+ * @access private
4384
+ * @method _resetColumnWidthsClicked
4385
+ * @param {Object} e The event object.
4386
+ */
4387
+ _resetColumnWidthsClicked: function( e )
4388
+ {
4389
+ var group = $( this ).parents( '.fl-col-group' ).last(),
4390
+ groupIds = [ group.data( 'node' ) ],
4391
+ children = group.find( '.fl-col-group' ),
4392
+ i = 0;
4393
+
4394
+ FLBuilder._resetColumnWidths( group );
4395
+
4396
+ for ( ; i < children.length; i++ ) {
4397
+ FLBuilder._resetColumnWidths( children.eq( i ) );
4398
+ groupIds.push( children.eq( i ).data( 'node' ) );
4399
+ }
4400
+
4401
+ FLBuilder.ajax({
4402
+ action : 'reset_col_widths',
4403
+ group_id : groupIds,
4404
+ silent : true
4405
+ });
4406
+
4407
+ FLBuilder.triggerHook( 'col-reset-widths' );
4408
+ FLBuilder._closeAllSubmenus();
4409
+
4410
+ e.stopPropagation();
4411
+ },
4412
+
4413
  /**
4414
  * Resets the widths of all columns in a group.
4415
  *
4418
  * @method _resetColumnWidths
4419
  * @param {Object} e The event object.
4420
  */
4421
+ _resetColumnWidths: function( group )
4422
  {
4423
+ var cols = group.find( ' > .fl-col:visible' ),
 
4424
  width = 0;
4425
 
 
4426
  if ( 6 === cols.length ) {
4427
  width = 16.65;
4428
  }
4433
  width = Math.round( 100 / cols.length * 100 ) / 100;
4434
  }
4435
 
4436
+ cols.css( 'width', width + '%' );
 
 
 
 
 
 
 
 
 
 
 
 
 
4437
  },
4438
 
4439
  /* Modules
4452
  moduleName = module.attr( 'data-name' ),
4453
  global = module.hasClass( 'fl-node-global' ),
4454
  parentGlobal = module.parents( '.fl-node-global' ).length > 0,
4455
+ numCols = module.closest( '.fl-col-group' ).find( '> .fl-col' ).length,
4456
+ col = module.closest( '.fl-col' ),
4457
+ colFirst = 0 === col.index(),
4458
+ colLast = numCols === col.index() + 1,
4459
+ parentCol = col.parents( '.fl-col' ),
4460
+ hasParentCol = parentCol.length > 0,
4461
+ numParentCols = hasParentCol ? parentCol.closest( '.fl-col-group' ).find( '> .fl-col' ).length : 0,
4462
+ parentFirst = hasParentCol ? 0 === parentCol.index() : false,
4463
+ parentLast = hasParentCol ? numParentCols === parentCol.index() + 1 : false,
4464
+ contentWidth = col.find( '> .fl-col-content' ).width(),
4465
+ template = wp.template( 'fl-module-overlay' ),
4466
+ overlay = null;
4467
 
4468
  // Remove existing overlays.
4469
  FLBuilder._removeColOverlays();
4470
  FLBuilder._removeModuleOverlays();
4471
 
 
4472
  if ( global && parentGlobal && 'row' != FLBuilderConfig.userTemplateType ) {
4473
  return;
4474
  }
 
4475
  else if ( ! module.hasClass( 'fl-block-overlay-active' ) ) {
4476
 
4477
  // Append the template.
4478
+ overlay = FLBuilder._appendOverlay( module, template( {
4479
+ global : global,
4480
+ moduleName : moduleName,
4481
+ numCols : numCols,
4482
+ colFirst : colFirst,
4483
+ colLast : colLast,
4484
+ hasParentCol : hasParentCol,
4485
+ numParentCols : numParentCols,
4486
+ parentFirst : parentFirst,
4487
+ parentLast : parentLast,
4488
+ contentWidth : contentWidth
4489
  } ) );
4490
 
4491
+ // Build the overlay overflow menu if necessary.
4492
+ FLBuilder._buildOverlayOverflowMenu( overlay );
4493
+
4494
  // Init column resizing.
4495
  FLBuilder._initColDragResizing();
4496
  }
4518
  }
4519
 
4520
  FLBuilder._removeModuleOverlays();
4521
+ FLBuilder._removeColHighlightGuides();
4522
  },
4523
 
4524
  /**
4552
  return $('<div class="fl-builder-block-drag-helper">' + item.attr('data-name') + '</div>');
4553
  },
4554
 
4555
+ /**
4556
+ * Callback that fires when dragging starts for a module.
4557
+ *
4558
+ * @since 1.9
4559
+ * @access private
4560
+ * @method _moduleDragStart
4561
+ * @param {Object} e The event object.
4562
+ * @param {Object} ui An object with additional info for the drag.
4563
+ */
4564
+ _moduleDragStart: function( e, ui )
4565
+ {
4566
+ $( ui.item ).data( 'original-position', ui.item.index() );
4567
+
4568
+ FLBuilder._blockDragStart( e, ui );
4569
+ },
4570
+
4571
  /**
4572
  * Callback for when a module drag operation completes.
4573
  *
4579
  */
4580
  _moduleDragStop: function(e, ui)
4581
  {
4582
+ FLBuilder._blockDragStop( e, ui );
4583
+
4584
  var item = ui.item,
4585
  parent = item.parent(),
4586
+ node = null,
4587
  position = 0,
4588
  parentId = 0;
4589
 
 
 
4590
  // A module was dropped back into the module list.
4591
+ if ( parent.hasClass( 'fl-builder-modules' ) || parent.hasClass( 'fl-builder-widgets' ) ) {
4592
  item.remove();
4593
  return;
4594
  }
4595
  // A new module was dropped.
4596
+ else if ( item.hasClass( 'fl-builder-block' ) ) {
4597
 
4598
+ // Cancel the drop if the sortable is disabled?
4599
+ if ( parent.hasClass( 'fl-sortable-disabled' ) ) {
4600
+ item.remove();
4601
+ FLBuilder._showPanel();
4602
+ return;
4603
+ }
4604
  // A new module was dropped into a row position.
4605
+ else if ( parent.hasClass( 'fl-row-drop-target' ) ) {
4606
+ parent = item.closest('.fl-builder-content');
4607
  parentId = 0;
4608
+ node = item.closest('.fl-row');
4609
+ position = parent.find( '.fl-row' ).index( node );
4610
+ }
4611
+ // A new module was dropped into a column group position.
4612
+ else if ( parent.hasClass( 'fl-col-group-drop-target' ) ) {
4613
+ parent = item.closest( '.fl-row-content' );
4614
+ parentId = parent.closest( '.fl-row' ).attr( 'data-node' );
4615
+ node = item.closest( '.fl-col-group' );
4616
+ position = parent.find( ' > .fl-col-group' ).index( node );
4617
  }
4618
  // A new module was dropped into a column position.
4619
+ else if ( parent.hasClass( 'fl-col-drop-target' ) ) {
4620
+ parent = item.closest( '.fl-col-group' );
4621
+ parentId = parent.attr( 'data-node' );
4622
+ node = item.closest( '.fl-col' );
4623
+ position = parent.find( ' > .fl-col' ).index( node );
4624
  }
4625
  // A new module was dropped into a column.
4626
  else {
4627
+ position = parent.find( '> .fl-module, .fl-col-group, .fl-builder-block' ).index( item );
4628
+ parentId = item.closest( '.fl-col' ).attr( 'data-node' );
4629
+ }
4630
+
4631
+ // Increment the position?
4632
+ if ( item.closest( '.fl-drop-target-last' ).length ) {
4633
+ position += 1;
4634
  }
4635
 
4636
  // Add the new module.
4637
+ FLBuilder._addModule( parent, parentId, item.attr( 'data-type' ), position, item.attr( 'data-widget' ) );
4638
 
4639
  // Remove the drag helper.
4640
+ item.remove();
4641
  }
4642
+ // Cancel the drop if the sortable is disabled?
4643
+ else if ( parent.hasClass( 'fl-sortable-disabled' ) ) {
4644
+ $( e.target ).append( ui.item );
4645
+ $( e.target ).children().eq( ui.item.data( 'original-position' ) ).before( ui.item );
4646
+ FLBuilder._highlightEmptyCols();
4647
+ return;
4648
+ }
4649
+ // A module was dropped into a row position.
4650
+ else if ( parent.hasClass( 'fl-row-drop-target' ) ) {
4651
+ node = item.closest( '.fl-row' );
4652
+ position = item.closest( '.fl-builder-content' ).children( '.fl-row' ).index( node );
4653
+ position = item.closest( '.fl-drop-target-last' ).length ? position + 1 : position;
4654
+ FLBuilder._addModuleAfterNodeRender = item;
4655
+ FLBuilder._addRow( '1-col', position );
4656
+ item.remove();
4657
+ }
4658
+ // A module was dropped into a column group position.
4659
+ else if ( parent.hasClass( 'fl-col-group-drop-target' ) ) {
4660
+ node = item.closest( '.fl-col-group' );
4661
+ position = item.closest( '.fl-row-content ').find( ' > .fl-col-group' ).index( node );
4662
+ position = item.closest( '.fl-drop-target-last' ).length ? position + 1 : position;
4663
+ FLBuilder._addModuleAfterNodeRender = item;
4664
+ FLBuilder._addColGroup( item.closest( '.fl-row' ).attr( 'data-node' ), '1-col', position );
4665
  item.remove();
4666
  }
4667
  // A module was dropped into a column position.
4668
+ else if ( parent.hasClass( 'fl-col-drop-target' ) ) {
4669
+ node = item.closest( '.fl-col' );
4670
+ position = item.closest( '.fl-col-drop-target-last' ).length ? 'after' : 'before';
4671
+ FLBuilder._addModuleAfterNodeRender = { module: item, colId: node.data( 'node' ), position: position };
4672
+ FLBuilder._addCols( node, position, '1-col', item.closest( '.fl-col-group-nested' ).length > 0 );
4673
  item.remove();
4674
  }
4675
  // A module was dropped into another column.
4676
  else {
4677
+ FLBuilder._reorderModule( item );
4678
  }
4679
 
4680
  FLBuilder._resizeLayout();
4692
  {
4693
  var newParent = module.closest('.fl-col').attr('data-node'),
4694
  oldParent = module.attr('data-parent'),
4695
+ nodeId = module.attr('data-node'),
4696
  position = module.index();
4697
 
4698
  if(newParent == oldParent) {
4699
+ FLBuilder._reorderNode( nodeId, position );
 
 
 
 
 
4700
  }
4701
  else {
4702
  module.attr('data-parent', newParent);
4703
+ FLBuilder._moveNode( newParent, nodeId, position );
 
 
 
 
 
 
 
4704
  }
4705
  },
4706
 
4961
  FLBuilder.showAjaxLoader();
4962
 
4963
  // Save the new module data.
4964
+ if ( parent.hasClass( 'fl-col-group' ) ) {
4965
+ FLBuilder._newModuleParent = null;
4966
+ FLBuilder._newModulePosition = 0;
4967
+ }
4968
+ else {
4969
+ FLBuilder._newModuleParent = parent;
4970
+ FLBuilder._newModulePosition = position;
4971
+ }
4972
 
4973
  // Send the request.
4974
  FLBuilder.ajax({
5177
  */
5178
  _nodeTemplateDragStop: function( e, ui )
5179
  {
5180
+ FLBuilder._blockDragStop( e, ui );
5181
+
5182
  var item = ui.item,
5183
  parent = item.parent(),
5184
  parentId = null,
5185
  position = 0,
5186
+ node = null,
5187
  action = '',
5188
  callback = null;
5189
 
 
 
 
5190
  // A saved row was dropped.
5191
  if ( item.hasClass( 'fl-builder-block-saved-row' ) || item.hasClass( 'fl-builder-block-row-template' ) ) {
5192
+ node = item.closest( '.fl-row' );
5193
+ position = ! node.length ? 0 : $( FLBuilder._contentClass + ' .fl-row' ).index( node );
5194
+ position = parent.hasClass( 'fl-drop-target-last' ) ? position + 1 : position;
5195
  parentId = null;
5196
  action = 'render_new_row';
5197
  callback = FLBuilder._addRowComplete;
5203
  action = 'render_new_module';
5204
  callback = FLBuilder._addModuleComplete;
5205
 
5206
+ // Cancel the drop if the sortable is disabled?
5207
+ if ( parent.hasClass( 'fl-sortable-disabled' ) ) {
5208
+ item.remove();
5209
+ FLBuilder._showPanel();
5210
+ return;
5211
+ }
5212
  // Dropped into a row position.
5213
+ else if ( parent.hasClass( 'fl-row-drop-target' ) ) {
5214
+ parent = item.closest('.fl-builder-content');
5215
  parentId = 0;
5216
+ position = parent.find( '.fl-row' ).index( item.closest('.fl-row') );
5217
+ }
5218
+ // Dropped into a column group position.
5219
+ else if ( parent.hasClass( 'fl-col-group-drop-target' ) ) {
5220
+ parent = item.closest( '.fl-row-content' );
5221
+ parentId = parent.closest( '.fl-row' ).attr( 'data-node' );
5222
+ position = parent.find( ' > .fl-col-group' ).index( item.closest( '.fl-col-group' ) );
5223
  }
5224
  // Dropped into a column position.
5225
+ else if ( parent.hasClass( 'fl-col-drop-target' ) ) {
5226
+ parent = item.closest('.fl-col-group');
5227
+ position = parent.children('.fl-col').index( item.closest('.fl-col') );
5228
+ parentId = parent.attr('data-node');
5229
  }
5230
  // Dropped into a column.
5231
  else {
5233
  parentId = item.closest( '.fl-col' ).attr( 'data-node' );
5234
  }
5235
 
5236
+ // Increment the position?
5237
+ if ( item.closest( '.fl-drop-target-last' ).length ) {
5238
+ position += 1;
5239
+ }
5240
+
5241
  // Save the new module data.
5242
+ if ( parent.hasClass( 'fl-col-group' ) ) {
5243
+ FLBuilder._newModuleParent = null;
5244
+ FLBuilder._newModulePosition = 0;
5245
+ }
5246
+ else {
5247
+ FLBuilder._newModuleParent = parent;
5248
+ FLBuilder._newModulePosition = position;
5249
+ }
5250
  }
5251
 
5252
  // Show the loader.
6051
  alreadySaved : FLBuilderStrings.alreadySaved,
6052
  noPresets : FLBuilderStrings.noPresets,
6053
  presetAdded : FLBuilderStrings.presetAdded,
6054
+ },
6055
+ mode: 'hsv'
6056
  });
6057
 
6058
  $( FLBuilder.colorPicker ).on( 'presetRemoved presetAdded', function( event, data ) {
6179
 
6180
  wrap.addClass('fl-photo-empty');
6181
  photoField.val('');
6182
+ srcSelect.html('<option value="" selected></option>');
6183
  srcSelect.trigger('change');
6184
  },
6185
 
7328
  */
7329
  _lightboxClosed: function()
7330
  {
7331
+ FLBuilder.triggerHook( 'settings-lightbox-closed' );
7332
  FLBuilder._lightbox.empty();
7333
+ clearTimeout( FLBuilder._lightboxScrollbarTimeout );
7334
  },
7335
 
7336
  /**
js/fl-builder.min.js CHANGED
@@ -1,5 +1,6 @@
1
- !function(e){FLBuilderAJAXLayout=function(t,i){this._data=e.extend({},this._defaults,"string"==typeof t?JSON.parse(t):t),this._callback=i,this._post=e("#fl-post-id").val(),this._head=e("head").eq(0),this._body=e("body").eq(0),this._data.css&&(this._loader=e('<img src="'+this._data.css+'" />'),this._oldCss=e('link[href*="/cache/'+this._post+'"]'),this._newCss=e('<link rel="stylesheet" id="fl-builder-layout-'+this._post+'-css" href="'+this._data.css+'" />')),this._data.partial?(this._data.js&&(this._oldJs=e("#fl-builder-partial-refresh-js"),this._newJs=e('<script type="text/javascript" id="fl-builder-partial-refresh-js">'+this._data.js+"</script>")),this._data.nodeId&&(this._data.oldNodeId?(this._oldScriptsStyles=e('.fl-builder-node-scripts-styles[data-node="'+this._data.oldNodeId+'"]'),this._content=e(".fl-node-"+this._data.oldNodeId)):(this._oldScriptsStyles=e('.fl-builder-node-scripts-styles[data-node="'+this._data.nodeId+'"]'),this._content=e(".fl-node-"+this._data.nodeId)))):(this._oldJs=e('script[src*="/cache/'+this._post+'"]'),this._newJs=e('<script src="'+this._data.js+'"></script>'),this._oldScriptsStyles=e(".fl-builder-layout-scripts-styles"),this._content=e(FLBuilder._contentClass)),this._init()},FLBuilderAJAXLayout.prototype={_defaults:{partial:!1,nodeId:null,nodeType:null,nodeParent:null,nodePosition:null,oldNodeId:null,html:null,scriptsStyles:null,css:null,js:null},_data:null,_callback:function(){},_post:null,_head:null,_body:null,_loader:null,_oldCss:null,_newCss:null,_oldJs:null,_newJs:null,_oldScriptsStyles:null,_content:null,_init:function(){this._body.height(this._body.height()),this._loader?(this._loader.on("error",e.proxy(this._loadNewCSSComplete,this)),this._body.append(this._loader)):this._finish()},_loadNewCSSComplete:function(){this._loader.remove(),this._oldCss.length>0?this._oldCss.after(this._newCss):this._head.append(this._newCss),setTimeout(e.proxy(this._finish,this),250)},_finish:function(){this._removeOldContentAndAssets(),this._cleanNewHTML(),this._cleanNewAssets(),this._addNewHTML(),this._addNewScriptsStyles(),this._addNewJS(),e(FLBuilder._contentClass).trigger("fl-builder.layout-rendered"),FLBuilder.hideAjaxLoader(),"undefined"!=typeof this._callback&&this._callback()},_removeOldContentAndAssets:function(){this._content&&this._content.empty(),this._oldCss&&this._oldCss.remove(),this._oldJs&&this._oldJs.remove(),this._oldScriptsStyles&&this._oldScriptsStyles.remove()},_cleanNewHTML:function(){if(this._data.scriptsStyles){var t=e("<div>"+this._data.html+"</div>"),i="fl-row",l=this._data.scriptsStyles,o="";this._data.partial&&(i="column-group"==this._data.nodeType?"fl-col-group":"column"==this._data.nodeType?"fl-col":"fl-"+this._data.nodeType),t.find("> *, script").each(function(){e(this).hasClass(i)||(o=e(this).remove(),l+=o[0].outerHTML)}),""!==l&&(l=this._data.partial?'<div class="fl-builder-node-scripts-styles" data-node="'+this._data.nodeId+'">'+l+"<div>":'<div class="fl-builder-node-scripts-styles">'+l+"<div>"),this._data.html=t.html(),this._data.scriptsStyles=l}},_addNewHTML:function(){var e;this._data.partial?this._data.nodeParent?(e=this._data.nodeParent.hasClass("fl-builder-content")?this._data.nodeParent.find(".fl-row"):this._data.nodeParent.hasClass("fl-row-content")?this._data.nodeParent.find(".fl-col-group"):this._data.nodeParent.find(".fl-module"),0===e.length||e.length==this._data.nodePosition?this._data.nodeParent.append(this._data.html):e.eq(this._data.nodePosition).before(this._data.html)):(this._content.after(this._data.html),this._content.remove()):this._content.append(this._data.html)},_cleanNewAssets:function(){var t=this;this._data.html=this._removeDuplicateAssets(this._data.html),this._data.scriptsStyles&&""!==this._data.scriptsStyles&&(this._data.scriptsStyles=this._removeDuplicateAssets(this._data.scriptsStyles)),this._data.partial?e(".fl-builder-node-scripts-styles").each(function(){t._data.html.indexOf("fl-node-"+e(this).data("node"))>-1&&e(this).remove()}):(e("#fl-builder-partial-refresh-js").remove(),e(".fl-builder-node-scripts-styles").remove())},_removeDuplicateAssets:function(t){var i=e("<div>"+t+"</div>"),l="",o=null,s="",r=null,n=window.location,a=n.protocol+"//"+n.hostname+(n.port?":"+n.port:"");return i.find("script").each(function(){l=e(this).attr("src"),"undefined"!=typeof l&&(l=l.replace(a,""),o=e('script[src*="'+l+'"]'),o.length>0&&e(this).remove())}),i.find("link").each(function(){s=e(this).attr("href"),"undefined"!=typeof s&&(s=s.replace(a,""),r=e('link[href*="'+s+'"]'),r.length>0&&e(this).remove())}),i.html()},_addNewScriptsStyles:function(){this._data.scriptsStyles&&""!==this._data.scriptsStyles&&this._body.append(this._data.scriptsStyles)},_addNewJS:function(){setTimeout(e.proxy(function(){this._newJs&&this._head.append(this._newJs)},this),50)},_complete:function(){FLBuilder._setupEmptyLayout(),FLBuilder._highlightEmptyCols(),FLBuilder._initSortables(),FLBuilder._resizeLayout(),FLBuilder._initMediaElements(),FLBuilderLayout.init(),this._body.height("auto")}}}(jQuery),function(e){FLBuilderPreview=function(t){this.type=t.type,"undefined"!=t.state&&t.state?this.state=t.state:this._saveState(),"undefined"!=t.layout&&t.layout?FLBuilder._renderLayout(t.layout,e.proxy(this._init,this)):this._init()},FLBuilderPreview._fontsList={},FLBuilderPreview.prototype={type:"",nodeId:null,classes:{},elements:{},state:null,_savedSettings:null,_styleSheet:null,_timeout:null,_lastClassName:null,_xhr:null,_init:function(){switch(this.nodeId=e(".fl-builder-settings").data("node"),this._saveSettings(),this._initElementsAndClasses(),this._initDefaultFieldPreviews(),this.type){case"row":this._initRow();break;case"col":this._initColumn();break;case"module":this._initModule()}},_saveSettings:function(){var t=e(".fl-builder-settings-lightbox .fl-builder-settings");this._savedSettings=FLBuilder._getSettings(t)},_settingsHaveChanged:function(){var t=e(".fl-builder-settings-lightbox .fl-builder-settings"),i=FLBuilder._getSettings(t);return JSON.stringify(this._savedSettings)!=JSON.stringify(i)},_initElementsAndClasses:function(){var t;t="row"==this.type?".fl-row-content-wrap":".fl-"+this.type+"-content",e.extend(this.classes,{settings:".fl-builder-"+this.type+"-settings",settingsHeader:".fl-builder-"+this.type+"-settings .fl-lightbox-header",node:FLBuilder._contentClass+" .fl-node-"+this.nodeId,content:FLBuilder._contentClass+" .fl-node-"+this.nodeId+" "+t}),e.extend(this.elements,{settings:e(this.classes.settings),settingsHeader:e(this.classes.settingsHeader),node:e(this.classes.node),content:e(this.classes.content)})},updateCSSRule:function(e,t,i){this._styleSheet||(this._styleSheet=new FLStyleSheet),this._styleSheet.updateRule(e,t,i)},delay:function(e,t){this._cancelDelay(),this._timeout=setTimeout(t,e)},_cancelDelay:function(){null!==this._timeout&&clearTimeout(this._timeout)},hexToRgb:function(e){var t=parseInt(e,16),i=t>>16&255,l=t>>8&255,o=255&t;return[i,l,o]},parseFloat:function(e){return isNaN(parseFloat(e))?0:parseFloat(e)},_saveState:function(){var t=e("#fl-post-id").val(),i=e('link[href*="/cache/'+t+'"]').attr("href"),l=e('script[src*="/cache/'+t+'"]').attr("src"),o=e(FLBuilder._contentClass).html();this.state={css:i,js:l,html:o}},preview:function(){var t=e(".fl-builder-settings-lightbox .fl-builder-settings"),i=t.attr("data-node"),l=FLBuilder._getSettings(t);this._cancelPreview(),this._xhr=FLBuilder.ajax({action:"render_layout",node_id:i,node_preview:l},e.proxy(this._renderPreview,this))},delayPreview:function(t){var i="undefined"==typeof t?[]:e(t.target).closest("tr").find("th"),l=e(".fl-builder-widget-settings .fl-builder-settings-title"),o=e(".fl-builder-settings .fl-lightbox-header"),s=FLBuilderLayoutConfig.paths.pluginUrl+"img/ajax-loader-small.gif",r=e('<img class="fl-builder-preview-loader" src="'+s+'" />');e(".fl-builder-preview-loader").remove(),i.length>0?i.append(r):l.length>0?l.append(r):o.length>0&&o.append(r),this.delay(1e3,e.proxy(this.preview,this))},_cancelPreview:function(){this._xhr&&(this._xhr.abort(),this._xhr=null)},_renderPreview:function(t){this._xhr=null,FLBuilder._renderLayout(t,e.proxy(this._renderPreviewComplete,this))},_renderPreviewComplete:function(){this._initElementsAndClasses(),e(".fl-builder-preview-loader").remove(),e(FLBuilder._contentClass).trigger("fl-builder.preview-rendered")},revert:function(){this._cancelDelay(),this._cancelPreview(),this._styleSheet&&this._styleSheet.remove(),this._settingsHaveChanged()&&FLBuilder._renderLayout(this.state)},clear:function(){this._cancelDelay(),this._cancelPreview(),this._styleSheet&&(this._styleSheet.remove(),this._styleSheet=null)},_initNodeTextColor:function(){e.extend(this.elements,{textColor:e(this.classes.settings+" input[name=text_color]"),linkColor:e(this.classes.settings+" input[name=link_color]"),hoverColor:e(this.classes.settings+" input[name=hover_color]"),headingColor:e(this.classes.settings+" input[name=heading_color]")}),this.elements.textColor.on("change",e.proxy(this._textColorChange,this)),this.elements.linkColor.on("change",e.proxy(this._textColorChange,this)),this.elements.hoverColor.on("change",e.proxy(this._textColorChange,this)),this.elements.headingColor.on("change",e.proxy(this._textColorChange,this))},_textColorChange:function(t){var i=this.elements.textColor.val(),l=this.elements.linkColor.val(),o=this.elements.hoverColor.val(),s=this.elements.headingColor.val();l=""===l?i:l,o=""===o?i:o,s=""===s?i:s,this.delay(100,e.proxy(function(){""===i?this.updateCSSRule(this.classes.node,"color","inherit"):this.updateCSSRule(this.classes.node,"color","#"+i),""===l?this.updateCSSRule(this.classes.node+" a","color","inherit"):this.updateCSSRule(this.classes.node+" a","color","#"+l),""===o?this.updateCSSRule(this.classes.node+" a:hover","color","inherit"):this.updateCSSRule(this.classes.node+" a:hover","color","#"+o),""===s?(this.updateCSSRule(this.classes.node+" h1","color","inherit"),this.updateCSSRule(this.classes.node+" h2","color","inherit"),this.updateCSSRule(this.classes.node+" h3","color","inherit"),this.updateCSSRule(this.classes.node+" h4","color","inherit"),this.updateCSSRule(this.classes.node+" h5","color","inherit"),this.updateCSSRule(this.classes.node+" h6","color","inherit"),this.updateCSSRule(this.classes.node+" h1 a","color","inherit"),this.updateCSSRule(this.classes.node+" h2 a","color","inherit"),this.updateCSSRule(this.classes.node+" h3 a","color","inherit"),this.updateCSSRule(this.classes.node+" h4 a","color","inherit"),this.updateCSSRule(this.classes.node+" h5 a","color","inherit"),this.updateCSSRule(this.classes.node+" h6 a","color","inherit")):(this.updateCSSRule(this.classes.node+" h1","color","#"+s),this.updateCSSRule(this.classes.node+" h2","color","#"+s),this.updateCSSRule(this.classes.node+" h3","color","#"+s),this.updateCSSRule(this.classes.node+" h4","color","#"+s),this.updateCSSRule(this.classes.node+" h5","color","#"+s),this.updateCSSRule(this.classes.node+" h6","color","#"+s),this.updateCSSRule(this.classes.node+" h1 a","color","#"+s),this.updateCSSRule(this.classes.node+" h2 a","color","#"+s),this.updateCSSRule(this.classes.node+" h3 a","color","#"+s),this.updateCSSRule(this.classes.node+" h4 a","color","#"+s),this.updateCSSRule(this.classes.node+" h5 a","color","#"+s),this.updateCSSRule(this.classes.node+" h6 a","color","#"+s))},this))},_initNodeBg:function(){e.extend(this.elements,{bgType:e(this.classes.settings+" select[name=bg_type]"),bgColor:e(this.classes.settings+" input[name=bg_color]"),bgColorPicker:e(this.classes.settings+" .fl-picker-bg_color"),bgOpacity:e(this.classes.settings+" input[name=bg_opacity]"),bgImageSrc:e(this.classes.settings+" select[name=bg_image_src]"),bgRepeat:e(this.classes.settings+" select[name=bg_repeat]"),bgPosition:e(this.classes.settings+" select[name=bg_position]"),bgAttachment:e(this.classes.settings+" select[name=bg_attachment]"),bgSize:e(this.classes.settings+" select[name=bg_size]"),bgVideo:e(this.classes.settings+" input[name=bg_video]"),bgVideoFallbackSrc:e(this.classes.settings+" select[name=bg_video_fallback_src]"),bgSlideshowSource:e(this.classes.settings+" select[name=ss_source]"),bgSlideshowPhotos:e(this.classes.settings+" input[name=ss_photos]"),bgSlideshowFeedUrl:e(this.classes.settings+" input[name=ss_feed_url]"),bgSlideshowSpeed:e(this.classes.settings+" input[name=ss_speed]"),bgSlideshowTrans:e(this.classes.settings+" select[name=ss_transition]"),bgSlideshowTransSpeed:e(this.classes.settings+" input[name=ss_transitionDuration]"),bgParallaxImageSrc:e(this.classes.settings+" select[name=bg_parallax_image_src]"),bgOverlayColor:e(this.classes.settings+" input[name=bg_overlay_color]"),bgOverlayOpacity:e(this.classes.settings+" input[name=bg_overlay_opacity]")}),this.elements.bgType.on("change",e.proxy(this._bgTypeChange,this)),this.elements.bgColor.on("change",e.proxy(this._bgColorChange,this)),this.elements.bgOpacity.on("keyup",e.proxy(this._bgOpacityChange,this)),this.elements.bgImageSrc.on("change",e.proxy(this._bgPhotoChange,this)),this.elements.bgRepeat.on("change",e.proxy(this._bgPhotoChange,this)),this.elements.bgPosition.on("change",e.proxy(this._bgPhotoChange,this)),this.elements.bgAttachment.on("change",e.proxy(this._bgPhotoChange,this)),this.elements.bgSize.on("change",e.proxy(this._bgPhotoChange,this)),this.elements.bgSlideshowSource.on("change",e.proxy(this._bgSlideshowChange,this)),this.elements.bgSlideshowPhotos.on("change",e.proxy(this._bgSlideshowChange,this)),this.elements.bgSlideshowFeedUrl.on("keyup",e.proxy(this._bgSlideshowChange,this)),this.elements.bgSlideshowSpeed.on("keyup",e.proxy(this._bgSlideshowChange,this)),this.elements.bgSlideshowTrans.on("change",e.proxy(this._bgSlideshowChange,this)),this.elements.bgSlideshowTransSpeed.on("keyup",e.proxy(this._bgSlideshowChange,this)),this.elements.bgParallaxImageSrc.on("change",e.proxy(this._bgParallaxChange,this)),this.elements.bgOverlayColor.on("change",e.proxy(this._bgOverlayChange,this)),this.elements.bgOverlayOpacity.on("keyup",e.proxy(this._bgOverlayChange,this))},_bgTypeChange:function(e){var t=this.elements.bgType.val();this.elements.node.removeClass("fl-row-bg-video"),this.elements.node.removeClass("fl-row-bg-slideshow"),this.elements.node.removeClass("fl-row-bg-parallax"),this.elements.node.find(".fl-bg-video").remove(),this.elements.node.find(".fl-bg-slideshow").remove(),this.elements.content.css("background-image",""),this.updateCSSRule(this.classes.content,{"background-color":"transparent","background-image":"none"}),"none"==t?this._bgOverlayClear():"color"==t?(this.elements.bgColor.trigger("change"),this._bgOverlayClear()):"photo"==t?(this.elements.bgColor.trigger("change"),this.elements.bgImageSrc.trigger("change")):"video"==t?(this.elements.bgColor.trigger("change"),""!=this.elements.bgVideo.val()&&this.preview()):"slideshow"==t?(this.elements.bgColor.trigger("change"),this._bgSlideshowChange()):"parallax"==t&&(this.elements.bgColor.trigger("change"),this.elements.bgParallaxImageSrc.trigger("change"))},_bgColorChange:function(t){var i,l,o;""===this.elements.bgColor.val()||isNaN(this.elements.bgOpacity.val())?this.updateCSSRule(this.classes.content,"background-color","transparent"):(i=this.hexToRgb(this.elements.bgColor.val()),l=this.parseFloat(this.elements.bgOpacity.val())/100,o="rgba("+i.join()+", "+l+")",this.delay(100,e.proxy(function(){this.updateCSSRule(this.classes.content,"background-color",o)},this)))},_bgOpacityChange:function(e){this.elements.bgColor.trigger("change")},_bgPhotoChange:function(e){this.elements.bgImageSrc.val()?this.updateCSSRule(this.classes.content,{"background-image":"url("+this.elements.bgImageSrc.val()+")","background-repeat":this.elements.bgRepeat.val(),"background-position":this.elements.bgPosition.val(),"background-attachment":this.elements.bgAttachment.val(),"background-size":this.elements.bgSize.val()}):this.updateCSSRule(this.classes.content,{"background-image":"none"})},_bgSlideshowChange:function(t){var i=this.elements,l=i.bgSlideshowSource.val(),o=i.bgSlideshowPhotos.val(),s=i.bgSlideshowFeedUrl.val(),r=i.bgSlideshowSpeed.val(),n=i.bgSlideshowTransSpeed.val();"wordpress"==l&&""===o||"smugmug"==l&&""===s||isNaN(parseInt(r))||isNaN(parseInt(n))||this.delay(500,e.proxy(this.preview,this))},_bgParallaxChange:function(e){this.elements.bgParallaxImageSrc.val()&&this.updateCSSRule(this.classes.content,{"background-image":"url("+this.elements.bgParallaxImageSrc.val()+")","background-repeat":"no-repeat","background-position":"center center","background-attachment":"fixed","background-size":"cover"})},_bgOverlayChange:function(t){var i,l,o;""===this.elements.bgOverlayColor.val()||isNaN(this.elements.bgOverlayOpacity.val())?(this.elements.node.removeClass("fl-row-bg-overlay"),this.elements.node.removeClass("fl-col-bg-overlay"),this.updateCSSRule(this.classes.content+":after","background-color","transparent")):(i=this.hexToRgb(this.elements.bgOverlayColor.val()),l=this.parseFloat(this.elements.bgOverlayOpacity.val())/100,o="rgba("+i.join()+", "+l+")",this.delay(100,e.proxy(function(){this.elements.node.hasClass("fl-col")?this.elements.node.addClass("fl-col-bg-overlay"):this.elements.node.addClass("fl-row-bg-overlay"),this.updateCSSRule(this.classes.content+":after","background-color",o)},this)))},_bgOverlayClear:function(e){this.elements.bgOverlayColor.prev(".fl-color-picker-clear").trigger("click")},_initNodeBorder:function(){e.extend(this.elements,{borderType:e(this.classes.settings+" select[name=border_type]"),borderColor:e(this.classes.settings+" input[name=border_color]"),borderColorPicker:e(this.classes.settings+" .fl-picker-border_color"),borderOpacity:e(this.classes.settings+" input[name=border_opacity]"),borderTopWidth:e(this.classes.settings+" input[name=border_top]"),borderBottomWidth:e(this.classes.settings+" input[name=border_bottom]"),borderLeftWidth:e(this.classes.settings+" input[name=border_left]"),borderRightWidth:e(this.classes.settings+" input[name=border_right]")}),this.elements.borderType.on("change",e.proxy(this._borderTypeChange,this)),this.elements.borderColor.on("change",e.proxy(this._borderColorChange,this)),this.elements.borderOpacity.on("keyup",e.proxy(this._borderOpacityChange,this)),this.elements.borderTopWidth.on("keyup",e.proxy(this._borderWidthChange,this)),this.elements.borderBottomWidth.on("keyup",e.proxy(this._borderWidthChange,this)),this.elements.borderLeftWidth.on("keyup",e.proxy(this._borderWidthChange,this)),this.elements.borderRightWidth.on("keyup",e.proxy(this._borderWidthChange,this))},_borderTypeChange:function(e){var t=this.elements.borderType.val();this.updateCSSRule(this.classes.content,{"border-style":""===t?"none":t}),this.elements.borderColor.trigger("change"),this.elements.borderTopWidth.trigger("keyup")},_borderColorChange:function(t){var i,l,o;""===this.elements.borderColor.val()||isNaN(this.elements.borderOpacity.val())?this.updateCSSRule(this.classes.content,"border-color","transparent"):(i=this.hexToRgb(this.elements.borderColor.val()),l=parseInt(this.elements.borderOpacity.val())/100,o="rgba("+i.join()+", "+l+")",this.delay(100,e.proxy(function(){this.updateCSSRule(this.classes.content,"border-color",o)},this)))},_borderOpacityChange:function(e){this.elements.borderColor.trigger("change")},_getBorderWidths:function(e){var t=this.elements.borderTopWidth.val(),i=this.elements.borderBottomWidth.val(),l=this.elements.borderLeftWidth.val(),o=this.elements.borderRightWidth.val();return""===t&&(t=this.elements.borderTopWidth.attr("placeholder")),""===i&&(i=this.elements.borderBottomWidth.attr("placeholder")),""===l&&(l=this.elements.borderLeftWidth.attr("placeholder")),""===o&&(o=this.elements.borderRightWidth.attr("placeholder")),{top:this.parseFloat(t),bottom:this.parseFloat(i),left:this.parseFloat(l),right:this.parseFloat(o)}},_borderWidthChange:function(e){var t=this._getBorderWidths();this.elements.borderColor.trigger("change"),this.updateCSSRule(this.classes.content,{"border-top-width":t.top+"px","border-bottom-width":t.bottom+"px","border-left-width":t.left+"px","border-right-width":t.right+"px"}),this._positionAbsoluteBgs()},_initNodeClassName:function(){e.extend(this.elements,{className:e(this.classes.settings+" input[name=class]")}),this.elements.className.on("keyup",e.proxy(this._classNameChange,this)),this._lastClassName=this.elements.className.val()},_classNameChange:function(e){var t=this.elements.className.val();null!==this._lastClassName&&this.elements.node.removeClass(this._lastClassName),this.elements.node.addClass(t),this._lastClassName=t},_initMargins:function(){e.extend(this.elements,{marginTop:e(this.classes.settings+" input[name=margin_top]"),marginBottom:e(this.classes.settings+" input[name=margin_bottom]"),marginLeft:e(this.classes.settings+" input[name=margin_left]"),marginRight:e(this.classes.settings+" input[name=margin_right]")}),this.elements.marginTop.on("keyup",e.proxy(this._marginChange,this)),this.elements.marginBottom.on("keyup",e.proxy(this._marginChange,this)),this.elements.marginLeft.on("keyup",e.proxy(this._marginChange,this)),this.elements.marginRight.on("keyup",e.proxy(this._marginChange,this))},_getMargins:function(e){var t=this.elements.marginTop.val(),i=this.elements.marginBottom.val(),l=this.elements.marginLeft.val(),o=this.elements.marginRight.val();return""===t&&(t=this.elements.marginTop.attr("placeholder")),""===i&&(i=this.elements.marginBottom.attr("placeholder")),""===l&&(l=this.elements.marginLeft.attr("placeholder")),""===o&&(o=this.elements.marginRight.attr("placeholder")),{top:this.parseFloat(t),bottom:this.parseFloat(i),left:this.parseFloat(l),right:this.parseFloat(o)}},_marginChange:function(e){var t=this._getMargins();this.updateCSSRule(this.classes.content,{"margin-top":t.top+"px","margin-bottom":t.bottom+"px","margin-left":t.left+"px","margin-right":t.right+"px"}),this._positionAbsoluteBgs()},_initPadding:function(){e.extend(this.elements,{paddingTop:e(this.classes.settings+" input[name=padding_top]"),paddingBottom:e(this.classes.settings+" input[name=padding_bottom]"),paddingLeft:e(this.classes.settings+" input[name=padding_left]"),paddingRight:e(this.classes.settings+" input[name=padding_right]")}),this.elements.paddingTop.on("keyup",e.proxy(this._paddingChange,this)),this.elements.paddingBottom.on("keyup",e.proxy(this._paddingChange,this)),this.elements.paddingLeft.on("keyup",e.proxy(this._paddingChange,this)),this.elements.paddingRight.on("keyup",e.proxy(this._paddingChange,this))},_getPadding:function(e){var t=this.elements.paddingTop.val(),i=this.elements.paddingBottom.val(),l=this.elements.paddingLeft.val(),o=this.elements.paddingRight.val();return""===t&&(t=this.elements.paddingTop.attr("placeholder")),""===i&&(i=this.elements.paddingBottom.attr("placeholder")),""===l&&(l=this.elements.paddingLeft.attr("placeholder")),""===o&&(o=this.elements.paddingRight.attr("placeholder")),{top:this.parseFloat(t),bottom:this.parseFloat(i),left:this.parseFloat(l),right:this.parseFloat(o)}},_paddingChange:function(e){var t=this._getPadding();this.updateCSSRule(this.classes.content,{"padding-top":t.top+"px","padding-bottom":t.bottom+"px","padding-left":t.left+"px","padding-right":t.right+"px"}),this._positionAbsoluteBgs()},_positionAbsoluteBgs:function(){var e=this.elements.node.find(".fl-bg-slideshow"),t=this.elements.node.find(".fl-bg-video"),i=null,l=null;(e.length>0||t.length>0)&&(i=this._getMargins(),l=this._getBorderWidths(),e.length>0&&(this.updateCSSRule(this.classes.node+" .fl-bg-slideshow",{top:i.top+l.top+"px",bottom:i.bottom+l.bottom+"px",left:i.left+l.left+"px",right:i.right+l.right+"px"}),FLBuilder._resizeLayout()),t.length>0&&this.updateCSSRule(this.classes.node+" .fl-bg-video",{top:i.top+l.top+"px",bottom:i.bottom+l.bottom+"px",left:i.left+l.left+"px",right:i.right+l.right+"px"}))},_initRow:function(){e.extend(this.elements,{width:e(this.classes.settings+" select[name=width]"),contentWidth:e(this.classes.settings+" select[name=content_width]"),height:e(this.classes.settings+" select[name=full_height]"),align:e(this.classes.settings+" select[name=content_alignment]")}),this.elements.width.on("change",e.proxy(this._rowWidthChange,this)),this.elements.contentWidth.on("change",e.proxy(this._rowContentWidthChange,this)),this.elements.height.on("change",e.proxy(this._rowHeightChange,this)),this.elements.align.on("change",e.proxy(this._rowHeightChange,this)),this._initNodeTextColor(),this._initNodeBg(),this._initNodeBorder(),this._initNodeClassName(),this._initMargins(),this._initPadding()},_rowWidthChange:function(e){var t=this.elements.node;"full"==this.elements.width.val()?(t.removeClass("fl-row-fixed-width"),t.addClass("fl-row-full-width")):(t.removeClass("fl-row-full-width"),t.addClass("fl-row-fixed-width"))},_rowHeightChange:function(e){var t=this.elements.node;t.removeClass("fl-row-align-top"),t.removeClass("fl-row-align-center"),"full"==this.elements.height.val()?(t.addClass("fl-row-full-height"),t.addClass("fl-row-align-"+this.elements.align.val())):t.removeClass("fl-row-full-height")},_rowContentWidthChange:function(e){var t=this.elements.content.find(".fl-row-content");"full"==this.elements.contentWidth.val()?(t.removeClass("fl-row-fixed-width"),t.addClass("fl-row-full-width")):(t.removeClass("fl-row-full-width"),t.addClass("fl-row-fixed-width"))},_initColumn:function(){e.extend(this.elements,{size:e(this.classes.settings+" input[name=size]"),columnHeight:e(this.classes.settings+" select[name=equal_height]"),columnAlign:e(this.classes.settings+" select[name=content_alignment]"),responsiveOrder:e(this.classes.settings+" select[name=responsive_order]")}),this.elements.size.on("keyup",e.proxy(this._colSizeChange,this)),this.elements.columnHeight.on("change",e.proxy(this._colHeightChange,this)),this.elements.columnAlign.on("change",e.proxy(this._colHeightChange,this)),this.elements.responsiveOrder.on("change",e.proxy(this._colResponsiveOrder,this)),this._initNodeTextColor(),this._initNodeBg(),this._initNodeBorder(),this._initNodeClassName(),this._initMargins(),this._initPadding()},_colSizeChange:function(){var t=10,i=100-t,l=parseFloat(this.elements.size.val()),o=this.elements.node.prev(".fl-col"),s=this.elements.node.next(".fl-col"),r=0===s.length?o:s,n=this.elements.node.siblings(".fl-col"),a=0;0===n.length||isNaN(l)||(n.each(function(){e(this).data("node")!=r.data("node")&&(i-=parseFloat(e(this)[0].style.width),a+=parseFloat(e(this)[0].style.width))}),l<t&&(l=t),l>i&&(l=i),r.css("width",100-a-l+"%"),this.elements.node.css("width",l+"%"))},_colHeightChange:function(){var e=this.elements.node.parent(".fl-col-group");e.removeClass("fl-col-group-align-top"),e.removeClass("fl-col-group-align-center"),e.removeClass("fl-col-group-align-bottom"),"yes"==this.elements.columnHeight.val()?(e.addClass("fl-col-group-equal-height"),e.addClass("fl-col-group-align-"+this.elements.columnAlign.val())):e.removeClass("fl-col-group-equal-height")},_colResponsiveOrder:function(){var e=this.elements.node.parent(".fl-col-group");"reversed"==this.elements.responsiveOrder.val()?e.addClass("fl-col-group-responsive-reversed"):e.removeClass("fl-col-group-responsive-reversed")},_initModule:function(){this._initNodeClassName(),this._initMargins()},_initDefaultFieldPreviews:function(){for(var e=this.elements.settings.find(".fl-field"),t=null,i=null,l=0;l<e.length;l++)t=e.eq(l),i=t.data("preview"),"refresh"==i.type&&this._initFieldRefreshPreview(t),"text"==i.type&&this._initFieldTextPreview(t),"css"==i.type&&this._initFieldCSSPreview(t),"widget"==i.type&&this._initFieldWidgetPreview(t),"font"==i.type&&this._initFieldFontPreview(t)},_initFieldRefreshPreview:function(t){var i=t.data("type"),l=t.data("preview"),o=e.proxy(this.delayPreview,this);switch(i){case"text":t.find("input[type=text]").on("keyup",o);break;case"textarea":t.find("textarea").on("keyup",o);break;case"select":t.find("select").on("change",o);break;case"color":t.find(".fl-color-picker-value").on("change",o);break;case"photo":t.find("select").on("change",o);break;case"multiple-photos":t.find("input").on("change",o);break;case"photo-sizes":t.find("select").on("change",o);break;case"video":t.find("input").on("change",o);break;case"multiple-audios":t.find("input").on("change",o);break;case"icon":t.find("input").on("change",o);break;case"form":t.delegate("input","change",o);break;case"editor":this._addTextEditorCallback(t,l);break;case"code":t.find("textarea").on("change",o);break;case"post-type":t.find("select").on("change",o);break;case"suggest":t.find(".as-values").on("change",o)}},_initFieldTextPreview:function(t){var i=t.data("type"),l=t.data("preview"),o=e.proxy(this._previewText,this,l);switch(i){case"text":t.find("input[type=text]").on("keyup",o);break;case"textarea":t.find("textarea").on("keyup",o);break;case"code":t.find("textarea").on("change",o);break;case"editor":this._addTextEditorCallback(t,l)}},_previewText:function(t,i){var l=this.elements.node.find(t.selector),o=e("<div>"+e(i.target).val()+"</div>");l.length>0&&(o.find("script").remove(),l.html(o.html()))},_previewTextEditor:function(t,i,l){var o=this.elements.node.find(t.selector),s="undefined"!=typeof tinyMCE?tinyMCE.get(i):null,r=e("#"+i),n="";o.length>0&&(n=e(s&&"none"==r.css("display")?"<div>"+s.getContent()+"</div>":"undefined"==typeof switchEditors||"undefined"==typeof switchEditors.wpautop?"<div>"+r.val()+"</div>":"<div>"+switchEditors.wpautop(r.val())+"</div>"),n.find("script").remove(),o.html(n.html()))},_addTextEditorCallback:function(t,i){var l=t.find("textarea.wp-editor-area").attr("id"),o=null;if("refresh"==i.type)o=e.proxy(this.delayPreview,this);else{if("text"!=i.type)return;o=e.proxy(this._previewTextEditor,this,i,l)}e("#"+l).on("keyup",o),"undefined"!=typeof tinyMCE&&(editor=tinyMCE.get(l),editor.on("change",o),editor.on("keyup",o))},_initFieldFontPreview:function(t){var i=t.data("type"),l=t.data("preview");l.id=t.attr("id");var o=e.proxy(this._previewFont,this,l);"font"==i&&t.find(".fl-font-field").on("change","select",o)},_previewFont:function(t,i){var l=e(i.delegateTarget),o=l.find(".fl-font-field-font"),s=e(o).find(":selected"),r=s.parent().attr("label"),n=l.find(".fl-font-field-weight"),a=t.id+"-"+this.nodeId,d=this._getPreviewSelector(this.classes.node,t.selector);"Google"==r&&this._buildFontStylesheet(a,o.val(),n.val()),"Default"==o.val()?(this.updateCSSRule(d,"font-family",""),this.updateCSSRule(d,"font-weight","")):(this.updateCSSRule(d,"font-family",o.val()),this.updateCSSRule(d,"font-weight",n.val()))},_buildFontStylesheet:function(t,i,l){var o=FLBuilderConfig.googleFontsUrl,s="",r={},n={};r[i]=[l],FLBuilderPreview._fontsList[t]=r,Object.keys(FLBuilderPreview._fontsList).forEach(function(e){var t=FLBuilderPreview._fontsList[e];Object.keys(t).forEach(function(e){var i=t[e];n[e]=n[e]||[],i=i.filter(function(t){return n[e].indexOf(t)<0}),n[e]=n[e].concat(i)})}),e.each(n,function(e,t){s+=e+":"+t.join()+"|"}),s=o+s.slice(0,-1).replace(" ","+"),e("#fl-builder-google-fonts-preview").length<1?e("<link>").attr("id","fl-builder-google-fonts-preview").attr("type","text/css").attr("rel","stylesheet").attr("href",s).appendTo("head"):e("#fl-builder-google-fonts-preview").attr("href",s)},_initFieldCSSPreview:function(e){var t=e.data("preview"),i=null;if("undefined"!=typeof t.rules)for(i in t.rules)this._initFieldCSSPreviewCallback(e,t.rules[i]);else this._initFieldCSSPreviewCallback(e,t)},_initFieldCSSPreviewCallback:function(t,i){switch(t.data("type")){case"text":t.find("input[type=text]").on("keyup",e.proxy(this._previewCSS,this,i));break;case"select":t.find("select").on("change",e.proxy(this._previewCSS,this,i));break;case"color":t.find(".fl-color-picker-value").on("change",e.proxy(this._previewColor,this,i))}},_previewCSS:function(t,i){var l=this._getPreviewSelector(this.classes.node,t.selector),o=t.property,s="undefined"==typeof t.unit?"":t.unit,r=e(i.target).val();"%"==s?r=parseInt(r)/100:r+=s,this.updateCSSRule(l,o,r)},_previewColor:function(t,i){var l=this._getPreviewSelector(this.classes.node,t.selector),o=e(i.target).val(),s=""===o?"inherit":"#"+o;
2
- this.updateCSSRule(l,t.property,s)},_initFieldWidgetPreview:function(t){var i=e.proxy(this.delayPreview,this);t.find("input").on("keyup",i),t.find("input[type=checkbox]").on("click",i),t.find("textarea").on("keyup",i),t.find("select").on("change",i)},_getPreviewSelector:function(e,t){for(var i="",l=t.split(","),o=0;o<l.length;o++)i+=e+" "+l[o],o!=l.length-1&&(i+=", ");return i}}}(jQuery),function(e){var t={init:function(){var t=e("body");t.delegate(".fl-builder-service-select","change",this._serviceChange),t.delegate(".fl-builder-service-connect-button","click",this._connectClicked),t.delegate(".fl-builder-service-account-select","change",this._accountChange),t.delegate(".fl-builder-service-account-delete","click",this._accountDeleteClicked),t.delegate(".fl-builder-campaign-monitor-client-select","change",this._campaignMonitorClientChange),t.delegate(".fl-builder-mailchimp-list-select","change",this._mailChimpListChange),t.delegate(".fl-builder-activecampaign-list_type-select","change",this._activeCampaignChange)},_startSettingsLoading:function(t){var i=e(".fl-builder-settings"),l=t.closest(".fl-builder-service-settings"),o=e(".fl-builder-service-error");i.append('<div class="fl-builder-loading"></div>'),l.addClass("fl-builder-service-settings-loading"),o.remove()},_finishSettingsLoading:function(){var t=e(".fl-builder-settings"),i=e(".fl-builder-service-settings-loading");t.find(".fl-builder-loading").remove(),i.removeClass("fl-builder-service-settings-loading")},_serviceChange:function(){var i=e(".fl-builder-settings").data("node"),l=e(this),o=l.closest("tr"),s=l.val();o.siblings("tr.fl-builder-service-account-row").remove(),o.siblings("tr.fl-builder-service-connect-row").remove(),o.siblings("tr.fl-builder-service-field-row").remove(),e(".fl-builder-service-error").remove(),""!==s&&(t._startSettingsLoading(l),FLBuilder.ajax({action:"render_service_settings",node_id:i,service:s},t._serviceChangeComplete))},_serviceChangeComplete:function(i){var l=JSON.parse(i),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-service-select-row");s.after(l.html),t._addAccountDelete(o),t._finishSettingsLoading()},_connectClicked:function(){for(var i=e(".fl-builder-settings").data("node"),l=e(this).closest(".fl-builder-service-settings"),o=l.find(".fl-builder-service-select"),s=l.find(".fl-builder-service-connect-row"),r=l.find(".fl-builder-service-connect-input"),n=null,a=null,d=0,u={action:"connect_service",node_id:i,service:o.val(),fields:{}};d<r.length;d++)n=r.eq(d),a=n.attr("name"),u.fields[a]=n.val();s.hide(),t._startSettingsLoading(o),FLBuilder.ajax(u,t._connectComplete)},_connectComplete:function(i){var l=JSON.parse(i),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-service-select-row"),r=o.find(".fl-builder-service-select"),n=o.find(".fl-builder-service-account-row"),a=o.find(".fl-builder-service-account-select"),d=o.find(".fl-builder-service-connect-row");l.error?(d.show(),0===a.length?r.after('<div class="fl-builder-service-error">'+l.error+"</div>"):a.after('<div class="fl-builder-service-error">'+l.error+"</div>")):(d.remove(),n.remove(),s.after(l.html)),t._addAccountDelete(o),t._finishSettingsLoading()},_accountChange:function(){var i=e(".fl-builder-settings").data("node"),l=e(this).closest(".fl-builder-service-settings"),o=l.find(".fl-builder-service-select"),s=l.find(".fl-builder-service-account-select"),r=l.find(".fl-builder-service-connect-row"),n=l.find("tr.fl-builder-service-field-row"),a=e(".fl-builder-service-error"),d=s.val(),u=null;r.remove(),n.remove(),a.remove(),"add_new_account"==d?u={action:"render_service_settings",node_id:i,service:o.val(),add_new:!0}:""!==d&&(u={action:"render_service_fields",node_id:i,service:o.val(),account:d}),u&&(t._startSettingsLoading(o),FLBuilder.ajax(u,t._accountChangeComplete)),t._addAccountDelete(l)},_accountChangeComplete:function(i){var l=JSON.parse(i),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-service-account-row");s.after(l.html),t._finishSettingsLoading()},_addAccountDelete:function(e){var t=e.find(".fl-builder-service-account-select");t.length>0&&(e.find(".fl-builder-service-account-delete").remove(),""!==t.val()&&"add_new_account"!=t.val()&&t.after('<a href="javascript:void(0);" class="fl-builder-service-account-delete">'+FLBuilderStrings.deleteAccount+"</a>"))},_accountDeleteClicked:function(){var i=e(this).closest(".fl-builder-service-settings"),l=i.find(".fl-builder-service-select"),o=i.find(".fl-builder-service-account-select");confirm(FLBuilderStrings.deleteAccountWarning)&&(FLBuilder.ajax({action:"delete_service_account",service:l.val(),account:o.val()},t._accountDeleteComplete),t._startSettingsLoading(o))},_accountDeleteComplete:function(){var i=e(".fl-builder-service-settings-loading"),l=i.find(".fl-builder-service-select");t._finishSettingsLoading(),l.trigger("change")},_campaignMonitorClientChange:function(){var i=e(".fl-builder-settings").data("node"),l=e(this).closest(".fl-builder-service-settings"),o=l.find(".fl-builder-service-select"),s=l.find(".fl-builder-service-account-select"),r=e(this),n=l.find(".fl-builder-service-list-select"),a=r.val();0!==n.length&&n.closest("tr").remove(),""!==a&&(t._startSettingsLoading(o),FLBuilder.ajax({action:"render_service_fields",node_id:i,service:o.val(),account:s.val(),client:a},t._campaignMonitorClientChangeComplete))},_campaignMonitorClientChangeComplete:function(i){var l=JSON.parse(i),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-campaign-monitor-client-select");s.closest("tr").after(l.html),t._finishSettingsLoading()},_mailChimpListChange:function(){var i=e(".fl-builder-settings").data("node"),l=e(this).closest(".fl-builder-service-settings"),o=l.find(".fl-builder-service-select"),s=l.find(".fl-builder-service-account-select"),r=l.find(".fl-builder-service-list-select");e(".fl-builder-mailchimp-group-select").closest("tr").remove(),""!==r.val()&&(t._startSettingsLoading(o),FLBuilder.ajax({action:"render_service_fields",node_id:i,service:o.val(),account:s.val(),list_id:r.val()},t._mailChimpListChangeComplete))},_mailChimpListChangeComplete:function(i){var l=JSON.parse(i),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-service-list-select");s.closest("tr").after(l.html),t._finishSettingsLoading()},_activeCampaignChange:function(){var i=e(".fl-builder-settings").data("node"),l=e(this).closest(".fl-builder-service-settings"),o=l.find(".fl-builder-service-select"),s=l.find(".fl-builder-service-account-select"),r=l.find(".fl-builder-service-list-select");list_type=l.find('select[name="list_type"]'),0!==r.length&&r.closest("tr").remove(),""!==list_type.val()&&(t._startSettingsLoading(o),FLBuilder.ajax({action:"render_service_fields",node_id:i,service:o.val(),account:s.val(),list_type:list_type.val()},t._activeCampaignTypeChangeComplete))},_activeCampaignTypeChangeComplete:function(i){var l=JSON.parse(i),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-service-field-row");s.after(l.html),t._finishSettingsLoading()}};e(function(){t.init()})}(jQuery),function(e){FLBuilderTour={_tour:null,start:function(){FLBuilderTour._tour?FLBuilderTour._tour.restart():(FLBuilderTour._tour=new Tour(FLBuilderTour._config()),FLBuilderTour._tour.init()),FLBuilderTour._tour.start()},_config:function(){var t={storage:!1,onStart:FLBuilderTour._onStart,onPrev:FLBuilderTour._onPrev,onNext:FLBuilderTour._onNext,onEnd:FLBuilderTour._onEnd,template:'<div class="popover" role="tooltip"> <i class="fa fa-times" data-role="end"></i> <div class="arrow"></div> <h3 class="popover-title"></h3> <div class="popover-content"></div> <div class="popover-navigation clearfix"> <button class="fl-builder-button fl-builder-button-primary fl-builder-tour-next" data-role="next">'+FLBuilderStrings.tourNext+"</button> </div> </div>",steps:[{animation:!1,element:".fl-builder-bar",placement:"bottom",title:FLBuilderStrings.tourTemplatesTitle,content:FLBuilderStrings.tourTemplates,onShown:function(){0===e(".fl-template-selector").length?(e(".popover[class*=tour-]").css("visibility","hidden"),FLBuilder._showTemplateSelector()):FLBuilderTour._templateSelectorLoaded()}},{animation:!1,element:"#fl-builder-blocks-rows .fl-builder-blocks-section-title",placement:"left",title:FLBuilderStrings.tourAddRowsTitle,content:FLBuilderStrings.tourAddRows,onShow:function(){FLBuilderTour._dimSection("body"),FLBuilderTour._dimSection(".fl-builder-bar"),FLBuilder._showPanel(),e(".fl-template-selector .fl-builder-settings-cancel").trigger("click"),e("#fl-builder-blocks-rows .fl-builder-blocks-section-title").trigger("click")}},{animation:!1,element:"#fl-builder-blocks-basic .fl-builder-blocks-section-title",placement:"left",title:FLBuilderStrings.tourAddContentTitle,content:FLBuilderStrings.tourAddContent,onShow:function(){FLBuilderTour._dimSection("body"),FLBuilderTour._dimSection(".fl-builder-bar"),FLBuilder._showPanel(),e("#fl-builder-blocks-basic .fl-builder-blocks-section-title").trigger("click"),e(".fl-row").eq(0).trigger("mouseleave"),e(".fl-module").eq(0).trigger("mouseleave")}},{animation:!1,element:".fl-row:first-of-type",placement:"top",title:FLBuilderStrings.tourEditContentTitle,content:FLBuilderStrings.tourEditContent,onShow:function(){FLBuilderTour._dimSection(".fl-builder-bar"),FLBuilder._closePanel(),e(".fl-row").eq(0).trigger("mouseenter"),e(".fl-module").eq(0).trigger("mouseenter")}},{animation:!1,element:".fl-row:first-of-type .fl-module-overlay .fl-block-overlay-actions",placement:"top",title:FLBuilderStrings.tourEditContentTitle,content:FLBuilderStrings.tourEditContent2,onShow:function(){FLBuilderTour._dimSection(".fl-builder-bar"),FLBuilder._closePanel(),e(".fl-row").eq(0).trigger("mouseenter"),e(".fl-module").eq(0).trigger("mouseenter")}},{animation:!1,element:".fl-builder-add-content-button",placement:"bottom",title:FLBuilderStrings.tourAddContentButtonTitle,content:FLBuilderStrings.tourAddContentButton,onShow:function(){FLBuilderTour._dimSection("body"),e(".fl-row").eq(0).trigger("mouseleave"),e(".fl-module").eq(0).trigger("mouseleave")}},{animation:!1,element:".fl-builder-templates-button",placement:"bottom",title:FLBuilderStrings.tourTemplatesButtonTitle,content:FLBuilderStrings.tourTemplatesButton,onShow:function(){FLBuilderTour._dimSection("body")}},{animation:!1,element:".fl-builder-tools-button",placement:"bottom",title:FLBuilderStrings.tourToolsButtonTitle,content:FLBuilderStrings.tourToolsButton,onShow:function(){FLBuilderTour._dimSection("body")}},{animation:!1,element:".fl-builder-done-button",placement:"bottom",title:FLBuilderStrings.tourDoneButtonTitle,content:FLBuilderStrings.tourDoneButton,onShow:function(){FLBuilderTour._dimSection("body")}},{animation:!1,orphan:!0,backdrop:!0,title:FLBuilderStrings.tourFinishedTitle,content:FLBuilderStrings.tourFinished,template:'<div class="popover" role="tooltip"> <div class="arrow"></div> <i class="fa fa-times" data-role="end"></i> <h3 class="popover-title"></h3> <div class="popover-content"></div> <div class="popover-navigation clearfix"> <button class="fl-builder-button fl-builder-button-primary fl-builder-tour-next" data-role="end">'+FLBuilderStrings.tourEnd+"</button> </div> </div>"}]};return FLBuilderConfig.lite?t.steps.shift():"disabled"==FLBuilderConfig.enabledTemplates?t.steps.shift():"fl-builder-template"==FLBuilderConfig.postType&&t.steps.shift(),t},_onStart:function(){var t=e("body");t.append('<div class="fl-builder-tour-mask"></div>'),t.on("fl-builder.template-selector-loaded",FLBuilderTour._templateSelectorLoaded),0===e(".fl-row").length&&"module"!=FLBuilderConfig.userTemplateType&&(e(".fl-builder-content").append('<div class="fl-builder-tour-demo-content fl-row fl-row-fixed-width fl-row-bg-none"> <div class="fl-row-content-wrap"> <div class="fl-row-content fl-row-fixed-width fl-node-content"> <div class="fl-col-group"> <div class="fl-col" style="width:100%"> <div class="fl-col-content fl-node-content"> <div class="fl-module fl-module-rich-text" data-type="rich-text" data-name="Text Editor"> <div class="fl-module-content fl-node-content"> <div class="fl-rich-text"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pellentesque ut lorem non cursus. Sed mauris nunc, porttitor iaculis lorem a, sollicitudin lacinia sapien. Proin euismod orci lacus, et sollicitudin leo posuere ac. In hac habitasse platea dictumst. Maecenas elit magna, consequat in turpis suscipit, ultrices rhoncus arcu. Phasellus finibus sapien nec elit tempus venenatis. Maecenas tincidunt sapien non libero maximus, in aliquam felis tincidunt. Mauris mollis ultricies facilisis. Duis condimentum dignissim tortor sit amet facilisis. Aenean gravida lacus eu risus molestie egestas. Donec ut dolor dictum, fringilla metus malesuada, viverra nunc. Maecenas ut purus ac justo aliquet lacinia. Cras vestibulum elementum tincidunt. Maecenas mattis tortor neque, consectetur dignissim neque tempor nec.</p></div> </div> </div> </div> </div> </div> </div> </div> </div>'),FLBuilder._setupEmptyLayout(),FLBuilder._highlightEmptyCols())},_onPrev:function(){e(".fl-builder-tour-dimmed").remove()},_onNext:function(){e(".fl-builder-tour-dimmed").remove()},_onEnd:function(){e("body").off("fl-builder.template-selector-loaded"),e(".fl-builder-tour-mask").remove(),e(".fl-builder-tour-dimmed").remove(),e(".fl-builder-tour-demo-content").remove(),FLBuilder._setupEmptyLayout(),FLBuilder._highlightEmptyCols(),FLBuilder._showPanel(),FLBuilder._initTemplateSelector()},_dimSection:function(t){e(t).find(".fl-builder-tour-dimmed").remove(),e(t).append('<div class="fl-builder-tour-dimmed"></div>')},_templateSelectorLoaded:function(){var t=e(".fl-builder-settings-lightbox .fl-lightbox-header"),i=t.height(),l=t.offset().top+75;e(".popover[class*=tour-]").css({top:l+i+"px",visibility:"visible"})}}}(jQuery),function(e){FLBuilder={preview:null,_actionsLightbox:null,_addModuleAfterRowRender:null,_colResizeData:null,_colResizing:!1,_contentClass:!1,_dragEnabled:!1,_dragging:!1,_exitUrl:null,_layout:null,_layoutSettingsCSSCache:null,_layoutSettingsCSSTimeout:null,_lightbox:null,_lightboxScrollbarTimeout:null,_loadedModuleAssets:[],_moduleHelpers:{},_multiplePhotoSelector:null,_newColGroupParent:null,_newColGroupPosition:0,_newModuleParent:null,_newModulePosition:0,_newRowPosition:0,_selectedTemplateId:null,_selectedTemplateType:null,_singlePhotoSelector:null,_singleVideoSelector:null,_multipleAudiosSelector:null,_silentUpdate:!1,_silentUpdateCallbackData:null,_init:function(){FLBuilder._initJQueryReadyFix(),FLBuilder._initGlobalErrorHandling(),FLBuilder._initPostLock(),FLBuilder._initClassNames(),FLBuilder._initMediaUploader(),FLBuilder._initOverflowFix(),FLBuilder._initScrollbars(),FLBuilder._initLightboxes(),FLBuilder._initSortables(),FLBuilder._initStrings(),FLBuilder._bindEvents(),FLBuilder._bindOverlayEvents(),FLBuilder._setupEmptyLayout(),FLBuilder._highlightEmptyCols(),FLBuilder._showTourOrTemplates()},_initJQueryReadyFix:function(){FLBuilderConfig.debug||(jQuery.fn.oldReady=jQuery.fn.ready,jQuery.fn.ready=function(e){return jQuery.fn.oldReady(function(){try{"function"==typeof e&&e()}catch(t){FLBuilder.logError(t)}})})},_initGlobalErrorHandling:function(){FLBuilderConfig.debug||(window.onerror=function(e,t,i,l,o){return FLBuilder.logGlobalError(e,t,i,l,o),!0})},_initPostLock:function(){"undefined"!=typeof wp.heartbeat&&(wp.heartbeat.interval(30),wp.heartbeat.enqueue("fl_builder_post_lock",{post_id:e("#fl-post-id").val()}))},_initClassNames:function(){e("html").addClass("fl-builder-edit"),e("body").addClass("fl-builder"),FLBuilderConfig.simpleUi&&e("body").addClass("fl-builder-simple"),FLBuilder._contentClass=".fl-builder-content-"+FLBuilderConfig.postId},_initMediaUploader:function(){wp.media.model.settings.post.id=e("#fl-post-id").val()},_initOverflowFix:function(){e(FLBuilder._contentClass).parents().css("overflow","visible")},_initScrollbars:function(){e(".fl-nanoscroller").nanoScroller({alwaysVisible:!0,preventPageScrolling:!0,paneClass:"fl-nanoscroller-pane",sliderClass:"fl-nanoscroller-slider",contentClass:"fl-nanoscroller-content"})},_initLightboxes:function(){FLBuilder._lightbox=new FLLightbox({className:"fl-builder-lightbox fl-builder-settings-lightbox"}),FLBuilder._lightbox.on("close",FLBuilder._lightboxClosed),FLBuilder._actionsLightbox=new FLLightbox({className:"fl-builder-actions-lightbox"})},_initSortables:function(){var t={appendTo:"body",cursor:"move",cursorAt:{left:25,top:20},distance:1,helper:FLBuilder._blockDragHelper,start:FLBuilder._blockDragStart,sort:FLBuilder._blockDragSort,placeholder:"fl-builder-drop-zone",tolerance:"intersect"},i="",l="";i="row"==FLBuilderConfig.userTemplateType?FLBuilder._contentClass+" .fl-row-content":FLBuilder._contentClass+", "+FLBuilder._contentClass+" .fl-row:not(.fl-node-global) .fl-row-content",l="row"==FLBuilderConfig.userTemplateType?FLBuilder._contentClass+" .fl-row-content, "+FLBuilder._contentClass+" .fl-col-content":FLBuilder._contentClass+", "+FLBuilder._contentClass+" .fl-row:not(.fl-node-global) .fl-row-content, "+FLBuilder._contentClass+" .fl-col:not(.fl-node-global) .fl-col-content",e(".fl-builder-rows").sortable(e.extend({},t,{connectWith:i,items:".fl-builder-block-row",stop:FLBuilder._rowDragStop})),e(".fl-builder-row-templates").sortable(e.extend({},t,{connectWith:FLBuilder._contentClass,items:".fl-builder-block-row-template",stop:FLBuilder._nodeTemplateDragStop})),e(".fl-builder-saved-rows").sortable(e.extend({},t,{cancel:".fl-builder-node-template-actions, .fl-builder-node-template-edit, .fl-builder-node-template-delete",connectWith:FLBuilder._contentClass,items:".fl-builder-block-saved-row",stop:FLBuilder._nodeTemplateDragStop})),e(".fl-builder-modules, .fl-builder-widgets").sortable(e.extend({},t,{connectWith:l,items:".fl-builder-block-module",stop:FLBuilder._moduleDragStop})),e(".fl-builder-module-templates").sortable(e.extend({},t,{connectWith:l,items:".fl-builder-block-module-template",stop:FLBuilder._nodeTemplateDragStop})),e(".fl-builder-saved-modules").sortable(e.extend({},t,{cancel:".fl-builder-node-template-actions, .fl-builder-node-template-edit, .fl-builder-node-template-delete",connectWith:l,items:".fl-builder-block-saved-module",stop:FLBuilder._nodeTemplateDragStop})),e(FLBuilder._contentClass).sortable(e.extend({},t,{handle:".fl-row-overlay .fl-block-overlay-actions .fl-block-move",helper:FLBuilder._rowDragHelper,items:".fl-row",stop:FLBuilder._rowDragStop})),e(FLBuilder._contentClass+" .fl-row-content").sortable(e.extend({},t,{handle:".fl-row-overlay .fl-block-overlay-actions .fl-block-move",helper:FLBuilder._rowDragHelper,items:".fl-col-group",stop:FLBuilder._rowDragStop})),e(FLBuilder._contentClass+" .fl-col-content").sortable(e.extend({},t,{connectWith:l,handle:".fl-module-overlay .fl-block-overlay-actions .fl-block-move",helper:FLBuilder._moduleDragHelper,items:".fl-module",stop:FLBuilder._moduleDragStop}))},_initStrings:function(){e.validator.messages.required=FLBuilderStrings.validateRequiredMessage},_bindEvents:function(){e("a").on("click",FLBuilder._preventDefault),e(".fl-page-nav .nav a").on("click",FLBuilder._headerLinkClicked),e(document).on("heartbeat-tick",FLBuilder._initPostLock),e(window).on("beforeunload",FLBuilder._warnBeforeUnload),e("body").delegate(".fl-builder-has-submenu","click",FLBuilder._submenuParentClicked),e("body").delegate(".fl-builder-has-submenu a","click",FLBuilder._submenuChildClicked),e("body").delegate(".fl-builder-submenu","mouseenter",FLBuilder._submenuMouseenter),e("body").delegate(".fl-builder-submenu","mouseleave",FLBuilder._submenuMouseleave),e(".fl-builder-tools-button").on("click",FLBuilder._toolsClicked),e(".fl-builder-done-button").on("click",FLBuilder._doneClicked),e(".fl-builder-add-content-button").on("click",FLBuilder._showPanel),e(".fl-builder-templates-button").on("click",FLBuilder._changeTemplateClicked),e(".fl-builder-buy-button").on("click",FLBuilder._upgradeClicked),e(".fl-builder-upgrade-button").on("click",FLBuilder._upgradeClicked),e(".fl-builder-help-button").on("click",FLBuilder._helpButtonClicked),e(".fl-builder-panel-actions .fl-builder-panel-close").on("click",FLBuilder._closePanel),e(".fl-builder-blocks-section-title").on("click",FLBuilder._blockSectionTitleClicked),e("body").delegate(".fl-builder-node-template-actions","mousedown",FLBuilder._stopPropagation),e("body").delegate(".fl-builder-node-template-edit","mousedown",FLBuilder._stopPropagation),e("body").delegate(".fl-builder-node-template-delete","mousedown",FLBuilder._stopPropagation),e("body").delegate(".fl-builder-node-template-edit","click",FLBuilder._editNodeTemplateClicked),e("body").delegate(".fl-builder-node-template-delete","click",FLBuilder._deleteNodeTemplateClicked),e("body").delegate(".fl-builder-block","mousedown",FLBuilder._blockDragInit),e("body").on("mouseup",FLBuilder._blockDragCancel),e("body").delegate(".fl-builder-actions .fl-builder-cancel-button","click",FLBuilder._cancelButtonClicked),e("body").delegate(".fl-lightbox-controls .fa","click",FLBuilder._resizeLightbox),e("body").delegate(".fl-builder-save-actions .fl-builder-publish-button","click",FLBuilder._publishButtonClicked),e("body").delegate(".fl-builder-save-actions .fl-builder-draft-button","click",FLBuilder._draftButtonClicked),e("body").delegate(".fl-builder-save-actions .fl-builder-discard-button","click",FLBuilder._discardButtonClicked),e("body").delegate(".fl-builder-save-user-template-button","click",FLBuilder._saveUserTemplateClicked),e("body").delegate(".fl-builder-duplicate-layout-button","click",FLBuilder._duplicateLayoutClicked),e("body").delegate(".fl-builder-layout-settings-button","click",FLBuilder._layoutSettingsClicked),e("body").delegate(".fl-builder-layout-settings .fl-builder-settings-save","click",FLBuilder._saveLayoutSettingsClicked),e("body").delegate(".fl-builder-layout-settings .fl-builder-settings-cancel","click",FLBuilder._cancelLayoutSettingsClicked),e("body").delegate(".fl-builder-global-settings-button","click",FLBuilder._globalSettingsClicked),e("body").delegate(".fl-builder-global-settings .fl-builder-settings-save","click",FLBuilder._saveGlobalSettingsClicked),e("body").delegate(".fl-builder-global-settings .fl-builder-settings-cancel","click",FLBuilder._cancelLayoutSettingsClicked),e("body").delegate(".fl-template-category-select","change",FLBuilder._templateCategoryChanged),e("body").delegate(".fl-template-preview","click",FLBuilder._templateClicked),e("body").delegate(".fl-user-template","click",FLBuilder._userTemplateClicked),e("body").delegate(".fl-user-template-edit","click",FLBuilder._editUserTemplateClicked),e("body").delegate(".fl-user-template-delete","click",FLBuilder._deleteUserTemplateClicked),e("body").delegate(".fl-builder-template-replace-button","click",FLBuilder._templateReplaceClicked),e("body").delegate(".fl-builder-template-append-button","click",FLBuilder._templateAppendClicked),e("body").delegate(".fl-builder-template-actions .fl-builder-cancel-button","click",FLBuilder._templateCancelClicked),e("body").delegate(".fl-builder-user-template-settings .fl-builder-settings-save","click",FLBuilder._saveUserTemplateSettings),e("body").delegate(".fl-builder-help-tour-button","click",FLBuilder._startHelpTour),e("body").delegate(".fl-builder-help-video-button","click",FLBuilder._watchVideoClicked),e("body").delegate(".fl-builder-knowledge-base-button","click",FLBuilder._viewKnowledgeBaseClicked),e("body").delegate(".fl-builder-forums-button","click",FLBuilder._visitForumsClicked),e("body").delegate(".fl-builder-no-tour-button","click",FLBuilder._noTourButtonClicked),e("body").delegate(".fl-builder-yes-tour-button","click",FLBuilder._yesTourButtonClicked),e("body").delegate(".fl-builder-alert-close","click",FLBuilder._alertClose),e("body").delegate(".fl-row-overlay .fl-block-remove","click",FLBuilder._deleteRowClicked),e("body").delegate(".fl-row-overlay .fl-block-copy","click",FLBuilder._rowCopyClicked),e("body").delegate(".fl-row-overlay .fl-block-move","mousedown",FLBuilder._blockDragInit),e("body").delegate(".fl-row-overlay .fl-block-settings","click",FLBuilder._rowSettingsClicked),e("body").delegate(".fl-row-overlay","click",FLBuilder._rowSettingsClicked),e("body").delegate(".fl-builder-row-settings .fl-builder-settings-save","click",FLBuilder._saveSettings),e("body").delegate(".fl-col-overlay","click",FLBuilder._colSettingsClicked),e("body").delegate(".fl-builder-col-settings .fl-builder-settings-save","click",FLBuilder._saveSettings),e("body").delegate(".fl-col-overlay .fl-block-remove","click",FLBuilder._deleteColClicked),e("body").delegate(".fl-block-col-submenu .fl-block-col-edit","click",FLBuilder._colSettingsClicked),e("body").delegate(".fl-block-col-submenu .fl-block-col-delete","click",FLBuilder._deleteColClicked),e("body").delegate(".fl-block-col-submenu .fl-block-col-insert-before","click",FLBuilder._insertColBeforeClicked),e("body").delegate(".fl-block-col-submenu .fl-block-col-insert-after","click",FLBuilder._insertColAfterClicked),e("body").delegate(".fl-block-col-submenu .fl-block-col-reset","click",FLBuilder._resetColumnWidths),e("body").delegate(".fl-module-overlay .fl-block-remove","click",FLBuilder._deleteModuleClicked),e("body").delegate(".fl-module-overlay .fl-block-copy","click",FLBuilder._moduleCopyClicked),e("body").delegate(".fl-module-overlay .fl-block-move","mousedown",FLBuilder._blockDragInit),e("body").delegate(".fl-module-overlay .fl-block-settings","click",FLBuilder._moduleSettingsClicked),e("body").delegate(".fl-module-overlay","click",FLBuilder._moduleSettingsClicked),e("body").delegate(".fl-builder-module-settings .fl-builder-settings-save","click",FLBuilder._saveModuleClicked),e("body").delegate(".fl-builder-settings-save-as","click",FLBuilder._showNodeTemplateSettings),e("body").delegate(".fl-builder-node-template-settings .fl-builder-settings-save","click",FLBuilder._saveNodeTemplate),e("body").delegate(".fl-builder-settings-tabs a","click",FLBuilder._settingsTabClicked),e("body").delegate(".fl-builder-settings-cancel","click",FLBuilder._settingsCancelClicked),e("body").delegate(".fl-help-tooltip-icon","mouseover",FLBuilder._showHelpTooltip),e("body").delegate(".fl-help-tooltip-icon","mouseout",FLBuilder._hideHelpTooltip),e("body").delegate(".fl-builder-field-add","click",FLBuilder._addFieldClicked),e("body").delegate(".fl-builder-field-copy","click",FLBuilder._copyFieldClicked),e("body").delegate(".fl-builder-field-delete","click",FLBuilder._deleteFieldClicked),e("body").delegate(".fl-builder-settings-fields select","change",FLBuilder._settingsSelectChanged),e("body").delegate(".fl-photo-field .fl-photo-select","click",FLBuilder._selectSinglePhoto),e("body").delegate(".fl-photo-field .fl-photo-edit","click",FLBuilder._selectSinglePhoto),e("body").delegate(".fl-photo-field .fl-photo-replace","click",FLBuilder._selectSinglePhoto),e("body").delegate(".fl-photo-field .fl-photo-remove","click",FLBuilder._singlePhotoRemoved),e("body").delegate(".fl-multiple-photos-field .fl-multiple-photos-select","click",FLBuilder._selectMultiplePhotos),e("body").delegate(".fl-multiple-photos-field .fl-multiple-photos-edit","click",FLBuilder._selectMultiplePhotos),e("body").delegate(".fl-multiple-photos-field .fl-multiple-photos-add","click",FLBuilder._selectMultiplePhotos),e("body").delegate(".fl-video-field .fl-video-select","click",FLBuilder._selectSingleVideo),e("body").delegate(".fl-video-field .fl-video-replace","click",FLBuilder._selectSingleVideo),e("body").delegate(".fl-multiple-audios-field .fl-multiple-audios-select","click",FLBuilder._selectMultipleAudios),e("body").delegate(".fl-multiple-audios-field .fl-multiple-audios-edit","click",FLBuilder._selectMultipleAudios),e("body").delegate(".fl-multiple-audios-field .fl-multiple-audios-add","click",FLBuilder._selectMultipleAudios),e("body").delegate(".fl-icon-field .fl-icon-select","click",FLBuilder._selectIcon),e("body").delegate(".fl-icon-field .fl-icon-replace","click",FLBuilder._selectIcon),e("body").delegate(".fl-icon-field .fl-icon-remove","click",FLBuilder._removeIcon),e("body").delegate(".fl-form-field .fl-form-field-edit","click",FLBuilder._formFieldClicked),e("body").delegate(".fl-form-field-settings .fl-builder-settings-save","click",FLBuilder._saveFormFieldClicked),e("body").delegate(".fl-layout-field-option","click",FLBuilder._layoutFieldClicked),e("body").delegate(".fl-link-field-select","click",FLBuilder._linkFieldSelectClicked),e("body").delegate(".fl-link-field-search-cancel","click",FLBuilder._linkFieldSelectCancelClicked),e("body").delegate(".fl-loop-builder select[name=post_type]","change",FLBuilder._loopBuilderPostTypeChange),e("body").delegate(".fl-select-add-value","change",FLBuilder._textFieldAddValueSelectChange)},_bindOverlayEvents:function(){var t=e(FLBuilder._contentClass);t.delegate(".fl-row","mouseenter",FLBuilder._rowMouseenter),t.delegate(".fl-row","mouseleave",FLBuilder._rowMouseleave),t.delegate(".fl-row-overlay","mouseleave",FLBuilder._rowMouseleave),t.delegate(".fl-col","mouseenter",FLBuilder._colMouseenter),t.delegate(".fl-col","mouseleave",FLBuilder._colMouseleave),t.delegate(".fl-module","mouseenter",FLBuilder._moduleMouseenter),t.delegate(".fl-module","mouseleave",FLBuilder._moduleMouseleave)},_destroyOverlayEvents:function(){var t=e(FLBuilder._contentClass);t.undelegate(".fl-row","mouseenter",FLBuilder._rowMouseenter),t.undelegate(".fl-row","mouseleave",FLBuilder._rowMouseleave),t.undelegate(".fl-row-overlay","mouseleave",FLBuilder._rowMouseleave),t.undelegate(".fl-col","mouseenter",FLBuilder._colMouseenter),t.undelegate(".fl-col","mouseleave",FLBuilder._colMouseleave),t.undelegate(".fl-module","mouseenter",FLBuilder._moduleMouseenter),t.undelegate(".fl-module","mouseleave",FLBuilder._moduleMouseleave)},_preventDefault:function(e){e.preventDefault()},_stopPropagation:function(e){e.stopPropagation()},_headerLinkClicked:function(t){var i=e(this),l=i.attr("href");t.preventDefault(),FLBuilderConfig.isUserTemplate||(FLBuilder._exitUrl=l.indexOf("?")>-1?l:l+"?fl_builder",FLBuilder._doneClicked())},_warnBeforeUnload:function(){var t=e(".fl-builder-row-settings").length>0,i=e(".fl-builder-col-settings").length>0,l=e(".fl-builder-module-settings").length>0;if(t||i||l)return FLBuilderStrings.unloadWarning},_initTipTips:function(){e(".fl-tip").tipTip()},_hideTipTips:function(){e("#tiptip_holder").stop().remove()},_submenuParentClicked:function(t){var i=e(this),l=i.find(".fl-builder-submenu");i.hasClass("fl-builder-submenu-open")?(i.removeClass("fl-builder-submenu-open"),i.removeClass("fl-builder-submenu-right")):(i.offset().left+l.width()>e(window).width()&&i.addClass("fl-builder-submenu-right"),i.addClass("fl-builder-submenu-open")),FLBuilder._hideTipTips(),t.preventDefault(),t.stopPropagation()},_submenuChildClicked:function(t){e(this).closest(".fl-builder-submenu-open").removeClass("fl-builder-submenu-open")},_submenuMouseenter:function(t){var i=e(this),l=i.data("timeout");"undefined"!=typeof l&&clearTimeout(l)},_submenuMouseleave:function(t){var i=e(this),l=setTimeout(function(){i.closest(".fl-builder-submenu-open").removeClass("fl-builder-submenu-open")},500);i.data("timeout",l)},_toolsClicked:function(){var e=[],t=FLBuilderConfig.lite,i=FLBuilderConfig.enabledTemplates;t||FLBuilderConfig.isUserTemplate||"enabled"!=i&&"user"!=i||(e[10]={key:"save-user-template",label:FLBuilderStrings.saveTemplate}),FLBuilderConfig.isUserTemplate?"undefined"!=typeof window.opener&&window.opener||(e[20]={key:"duplicate-layout",label:FLBuilderStrings.duplicateLayout}):e[20]={key:"duplicate-layout",label:FLBuilderStrings.duplicateLayout},e[30]={key:"layout-settings",label:FLBuilderStrings.editLayoutSettings},e[40]={key:"global-settings",label:FLBuilderStrings.editGlobalSettings},FLBuilder._showActionsLightbox({className:"fl-builder-tools-actions",title:FLBuilderStrings.actionsLightboxTitle,buttons:e})},_doneClicked:function(){var e=[],t=FLBuilderStrings.publish;"publish"==FLBuilderConfig.postStatus||FLBuilderConfig.userCanPublish||(t=FLBuilderStrings.submitForReview),
3
- e[10]={key:"publish",label:t},e[20]={key:"draft",label:FLBuilderStrings.draft},e[30]={key:"discard",label:FLBuilderStrings.discard},FLBuilder._showActionsLightbox({className:"fl-builder-save-actions",title:FLBuilderStrings.actionsLightboxTitle,buttons:e})},_upgradeClicked:function(){window.open(FLBuilderConfig.upgradeUrl)},_helpButtonClicked:function(){var e={};FLBuilderConfig.help.tour&&(e[10]={key:"help-tour",label:FLBuilderStrings.takeHelpTour}),FLBuilderConfig.help.video&&(e[20]={key:"help-video",label:FLBuilderStrings.watchHelpVideo}),FLBuilderConfig.help.knowledge_base&&(e[30]={key:"knowledge-base",label:FLBuilderStrings.viewKnowledgeBase}),FLBuilderConfig.help.forums&&(e[40]={key:"forums",label:FLBuilderStrings.visitForums}),FLBuilder._showActionsLightbox({className:"fl-builder-help-actions",title:FLBuilderStrings.actionsLightboxTitle,buttons:e})},_closePanel:function(){e(".fl-builder-panel").stop(!0,!0).animate({right:"-350px"},500,function(){e(this).hide()}),e(".fl-builder-bar .fl-builder-add-content-button").stop(!0,!0).fadeIn()},_showPanel:function(){e(".fl-builder-bar .fl-builder-add-content-button").stop(!0,!0).fadeOut(),e(".fl-builder-panel").stop(!0,!0).show().animate({right:"0"},500)},_blockSectionTitleClicked:function(){var t=e(this),i=t.parent();i.hasClass("fl-active")?i.removeClass("fl-active"):(e(".fl-builder-blocks-section").removeClass("fl-active"),i.addClass("fl-active")),FLBuilder._initScrollbars()},_publishButtonClicked:function(){FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"save_layout"},FLBuilder._exit),FLBuilder._actionsLightbox.close()},_draftButtonClicked:function(){FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"save_draft"},FLBuilder._exit),FLBuilder._actionsLightbox.close()},_discardButtonClicked:function(){var e=confirm(FLBuilderStrings.discardMessage);e&&(FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"clear_draft_layout"},FLBuilder._exit),FLBuilder._actionsLightbox.close())},_cancelButtonClicked:function(){FLBuilder._exitUrl=null,FLBuilder._actionsLightbox.close()},_exit:function(){var e=window.location.href;FLBuilderConfig.isUserTemplate&&"undefined"!=typeof window.opener&&window.opener?("undefined"!=typeof window.opener.FLBuilder&&window.opener.FLBuilder._updateLayout(),window.close()):(FLBuilder._exitUrl?e=FLBuilder._exitUrl:(e=e.replace("?fl_builder&","?"),e=e.replace("?fl_builder",""),e=e.replace("&fl_builder","")),window.location.href=e)},_duplicateLayoutClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"duplicate_post"},FLBuilder._duplicateLayoutComplete)},_duplicateLayoutComplete:function(t){var i=e("#fl-admin-url").val();window.location.href=i+"post.php?post="+t+"&action=edit"},_layoutSettingsClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._showLightbox(),FLBuilder._closePanel(),FLBuilder.ajax({action:"render_layout_settings"},FLBuilder._layoutSettingsLoaded)},_layoutSettingsLoaded:function(e){var t=JSON.parse(e);FLBuilder._setSettingsFormContent(t.html),FLBuilder._layoutSettingsInitCSS()},_layoutSettingsInitCSS:function(){var t=e(".fl-builder-settings #fl-field-css textarea:not(.ace_text-input)");t.on("change",FLBuilder._layoutSettingsCSSChanged),FLBuilder._layoutSettingsCSSCache=t.val()},_layoutSettingsCSSChanged:function(){FLBuilder._layoutSettingsCSSTimeout&&clearTimeout(FLBuilder._layoutSettingsCSSTimeout),FLBuilder._layoutSettingsCSSTimeout=setTimeout(e.proxy(FLBuilder._layoutSettingsCSSDoChange,this),600)},_layoutSettingsCSSDoChange:function(){var t=e(".fl-builder-settings"),i=e(this),l=i.parents("#fl-field-css");l.find(".ace_error").length>0||(t.hasClass("fl-builder-layout-settings")?e("#fl-builder-layout-css").html(i.val()):e("#fl-builder-global-css").html(i.val()),FLBuilder._layoutSettingsCSSTimeout=null)},_saveLayoutSettingsClicked:function(){for(var t=e(this).closest(".fl-builder-settings"),i=t.serializeArray(),l={},o=0;o<i.length;o++)l[i[o].name]=i[o].value;FLBuilder.showAjaxLoader(),FLBuilder._lightbox.close(),FLBuilder._layoutSettingsCSSCache=null,FLBuilder.ajax({action:"save_layout_settings",settings:l},FLBuilder._updateLayout)},_cancelLayoutSettingsClicked:function(){var t=e(".fl-builder-settings");t.hasClass("fl-builder-layout-settings")?e("#fl-builder-layout-css").html(FLBuilder._layoutSettingsCSSCache):e("#fl-builder-global-css").html(FLBuilder._layoutSettingsCSSCache),FLBuilder._layoutSettingsCSSCache=null},_globalSettingsClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._showLightbox(),FLBuilder.ajax({action:"render_global_settings"},FLBuilder._globalSettingsLoaded)},_globalSettingsLoaded:function(e){var t=JSON.parse(e);FLBuilder._setSettingsFormContent(t.html),FLBuilder._layoutSettingsInitCSS(),FLBuilder._initSettingsValidation({module_margins:{required:!0,number:!0},row_margins:{required:!0,number:!0},row_padding:{required:!0,number:!0},row_width:{required:!0,number:!0},responsive_breakpoint:{required:!0,number:!0}})},_saveGlobalSettingsClicked:function(){var t=e(this).closest(".fl-builder-settings"),i=t.validate().form(),l=t.serializeArray(),o={},s=0;if(i){for(;s<l.length;s++)o[l[s].name]=l[s].value;FLBuilder.showAjaxLoader(),FLBuilder._layoutSettingsCSSCache=null,FLBuilder.ajax({action:"save_global_settings",settings:o},FLBuilder._updateLayout),FLBuilder._lightbox.close()}},_initTemplateSelector:function(){var t=e(FLBuilder._contentClass).find(".fl-row");0===t.length&&FLBuilder._showTemplateSelector()},_changeTemplateClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._showTemplateSelector()},_showTemplateSelector:function(){FLBuilderConfig.simpleUi||FLBuilderConfig.isUserTemplate||"disabled"!=FLBuilderConfig.enabledTemplates&&0!==e(".fl-builder-templates-button").length&&(FLBuilder._showLightbox(!1),FLBuilder.ajax({action:"render_template_selector"},FLBuilder._templateSelectorLoaded))},_templateSelectorLoaded:function(t){var i=JSON.parse(t),l=null,o=null;FLBuilder._setLightboxContent(i.html),l=e(".fl-template-category-select"),tabs=e(".fl-builder-settings-tab"),userTemplatesTab=e("#fl-builder-settings-tab-yours"),o=e(".fl-user-template"),("user"==FLBuilderConfig.enabledTemplates||o.length>0||userTemplatesTab.length>0&&1==tabs.length)&&(l.val("fl-builder-settings-tab-yours"),e(".fl-builder-settings-tab").removeClass("fl-active"),e("#fl-builder-settings-tab-yours").addClass("fl-active")),0===o.length&&e(".fl-user-templates-message").show(),e("body").trigger("fl-builder.template-selector-loaded")},_templateCategoryChanged:function(){e(".fl-template-selector .fl-builder-settings-tab").hide(),e("#"+e(this).val()).show()},_templateClicked:function(){var t=e(this),i=t.closest(".fl-template-preview").attr("data-id");e(FLBuilder._contentClass).children(".fl-row").length>0?0==i?confirm(FLBuilderStrings.changeTemplateMessage)&&(FLBuilder._lightbox._node.hide(),FLBuilder._applyTemplate(0,!1,"core")):(FLBuilder._selectedTemplateId=i,FLBuilder._selectedTemplateType="core",FLBuilder._showTemplateActions(),FLBuilder._lightbox._node.hide()):FLBuilder._applyTemplate(i,!1,"core")},_showTemplateActions:function(){var e=[];e[10]={key:"template-replace",label:FLBuilderStrings.templateReplace},e[20]={key:"template-append",label:FLBuilderStrings.templateAppend},FLBuilder._showActionsLightbox({className:"fl-builder-template-actions",title:FLBuilderStrings.actionsLightboxTitle,buttons:e})},_templateReplaceClicked:function(){confirm(FLBuilderStrings.changeTemplateMessage)&&(FLBuilder._actionsLightbox.close(),FLBuilder._applyTemplate(FLBuilder._selectedTemplateId,!1,FLBuilder._selectedTemplateType))},_templateAppendClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._applyTemplate(FLBuilder._selectedTemplateId,!0,FLBuilder._selectedTemplateType)},_templateCancelClicked:function(){FLBuilder._lightbox._node.show()},_applyTemplate:function(e,t,i){t="undefined"!=typeof t&&t?"1":"0",i="undefined"==typeof i?"core":i,FLBuilder._lightbox.close(),FLBuilder.showAjaxLoader(),"core"==i?FLBuilder.ajax({action:"apply_template",template_id:e,append:t},FLBuilder._updateLayout):FLBuilder.ajax({action:"apply_user_template",template_id:e,append:t},FLBuilder._updateLayout)},_saveUserTemplateClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._showLightbox(!1),FLBuilder.ajax({action:"render_user_template_settings"},FLBuilder._userTemplateSettingsLoaded)},_userTemplateSettingsLoaded:function(e){var t=JSON.parse(e);FLBuilder._setSettingsFormContent(t.html),FLBuilder._initSettingsValidation({name:{required:!0}})},_saveUserTemplateSettings:function(){var t=e(this).closest(".fl-builder-settings"),i=t.validate().form(),l=FLBuilder._getSettings(t);i&&(FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"save_user_template",settings:l},FLBuilder._saveUserTemplateSettingsComplete),FLBuilder._lightbox.close())},_saveUserTemplateSettingsComplete:function(){FLBuilder.alert(FLBuilderStrings.templateSaved)},_userTemplateClicked:function(){var t=e(this).attr("data-id");e(FLBuilder._contentClass).children(".fl-row").length>0?"blank"==t?confirm(FLBuilderStrings.changeTemplateMessage)&&(FLBuilder._lightbox._node.hide(),FLBuilder._applyTemplate("blank",!1,"user")):(FLBuilder._selectedTemplateId=t,FLBuilder._selectedTemplateType="user",FLBuilder._showTemplateActions(),FLBuilder._lightbox._node.hide()):FLBuilder._applyTemplate(t,!1,"user")},_editUserTemplateClicked:function(t){t.preventDefault(),t.stopPropagation(),window.open(e(this).attr("href"))},_deleteUserTemplateClicked:function(t){var i=e(this).closest(".fl-user-template"),l=i.attr("data-id"),o=e(".fl-user-template[data-id="+l+"]"),s=null;confirm(FLBuilderStrings.deleteTemplate)&&(FLBuilder.ajax({action:"delete_user_template",template_id:l}),o.fadeOut(function(){i=e(this),s=i.closest(".fl-user-template-category"),i.remove(),0===s.find(".fl-user-template").length&&s.remove(),1===e(".fl-user-template").length&&(e(".fl-user-templates").hide(),e(".fl-user-templates-message").show())})),t.stopPropagation()},_watchVideoClicked:function(){var e=wp.template("fl-video-lightbox");FLBuilder._actionsLightbox.close(),FLBuilder._lightbox.open(e({video:FLBuilderConfig.help.video_embed}))},_viewKnowledgeBaseClicked:function(){FLBuilder._actionsLightbox.close(),window.open(FLBuilderConfig.help.knowledge_base_url)},_visitForumsClicked:function(){FLBuilder._actionsLightbox.close(),window.open(FLBuilderConfig.help.forums_url)},_showTourOrTemplates:function(){FLBuilderConfig.simpleUi||FLBuilderConfig.isUserTemplate||(FLBuilderConfig.help.tour&&FLBuilderConfig.newUser?FLBuilder._showTourLightbox():FLBuilder._initTemplateSelector())},_showTourLightbox:function(){var e=wp.template("fl-tour-lightbox");FLBuilder._actionsLightbox.open(e())},_noTourButtonClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._initTemplateSelector()},_yesTourButtonClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilderTour.start()},_startHelpTour:function(){FLBuilder._actionsLightbox.close(),FLBuilderTour.start()},_setupEmptyLayout:function(){var t=e(FLBuilder._contentClass);FLBuilderConfig.isUserTemplate&&"module"==FLBuilderConfig.userTemplateType||(t.removeClass("fl-builder-empty"),t.find(".fl-builder-empty-message").remove(),0===t.children(".fl-row").length&&(t.addClass("fl-builder-empty"),t.append('<span class="fl-builder-empty-message">'+FLBuilderStrings.emptyMessage+"</span>"),FLBuilder._initSortables()))},_updateLayout:function(){FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"render_layout"},FLBuilder._renderLayout)},_renderLayout:function(e,t){FLBuilder._layout=new FLBuilderAJAXLayout(e,t)},_renderLayoutComplete:function(){FLBuilder._layout&&(FLBuilder._layout._complete(),FLBuilder._layout=null)},_resizeLayout:function(){e(window).trigger("resize"),"undefined"!=typeof YUI&&YUI().use("node-event-simulate",function(e){e.one(window).simulate("resize")})},_initMediaElements:function(){var t={};"undefined"!=typeof e.fn.mediaelementplayer&&("undefined"!=typeof _wpmejsSettings&&(t.pluginPath=_wpmejsSettings.pluginPath),e(".wp-audio-shortcode, .wp-video-shortcode").not(".mejs-container").mediaelementplayer(t))},_blockDragHelper:function(e,t){var i=t.clone();return t.clone().insertAfter(t),i.addClass("fl-builder-block-drag-helper"),i},_blockDragInit:function(t){var i=e(t.target),l=null,o=0,s="row"==FLBuilderConfig.userTemplateType?"":":not(.fl-node-global)";FLBuilder._dragEnabled=!0,i.closest(".fl-module").length>0?l=i.closest(".fl-module"):i.closest(".fl-row").length>0?l=i.closest(".fl-row"):i.hasClass("fl-builder-block-row")||i.hasClass("fl-builder-block-saved-row")?e(".fl-row").each(function(){null===l&&e(this).offset().top-e(window).scrollTop()>0&&(l=e(this))}):(i.hasClass("fl-builder-block-module")||i.hasClass("fl-builder-block-saved-module"))&&e(".fl-module").each(function(){null===l&&e(this).offset().top-e(window).scrollTop()>0&&(l=e(this))}),null!==l?o=l.offset().top-e(window).scrollTop():l=i,e(".fl-builder-empty-message").hide(),e(FLBuilder._contentClass+" .fl-row"+s).addClass("fl-row-highlight"),(l.hasClass("fl-module")||l.hasClass("fl-builder-block-module")||l.hasClass("fl-builder-block-saved-module"))&&e(FLBuilder._contentClass+" .fl-col"+s).addClass("fl-col-highlight"),FLBuilder._disableGlobalRows(),FLBuilder._closePanel(),FLBuilder._destroyOverlayEvents(),FLBuilder._removeAllOverlays(),o>0&&scrollTo(0,l.offset().top-o)},_blockDragStart:function(t,i){FLBuilder._dragging=!0,e(FLBuilder._contentClass).sortable("refreshPositions"),e(FLBuilder._contentClass+" .fl-row-content").sortable("refreshPositions"),e(FLBuilder._contentClass+" .fl-col-content").sortable("refreshPositions")},_blockDragSort:function(e,t){if("undefined"!=typeof t.placeholder){var i=t.placeholder.parent(),l=FLBuilderStrings.insert;i.hasClass("fl-col-content")?l=t.item.hasClass("fl-builder-block-module")?t.item.find(".fl-builder-block-title").text():t.item.hasClass("fl-builder-block-saved-module")||t.item.hasClass("fl-builder-block-module-template")?t.item.find(".fl-builder-block-title").text():t.item.attr("data-name"):i.hasClass("fl-row-content")?l=t.item.hasClass("fl-builder-block-row")?t.item.find(".fl-builder-block-title").text():FLBuilderStrings.newColumn:i.hasClass("fl-builder-content")&&(l=t.item.hasClass("fl-builder-block-row")?t.item.find(".fl-builder-block-title").text():t.item.hasClass("fl-builder-block-saved-row")?t.item.find(".fl-builder-block-title").text():t.item.hasClass("fl-row")?FLBuilderStrings.row:FLBuilderStrings.newRow),t.placeholder.html(l),t.item.hasClass("fl-node-global")||t.item.hasClass("fl-builder-block-global")?t.placeholder.addClass("fl-builder-drop-zone-global"):t.placeholder.removeClass("fl-builder-drop-zone-global")}},_blockDragStop:function(t,i){var l=i.item.parent(),o=l.offset().top-e(window).scrollTop();l.hasClass("fl-builder-blocks-section-content")&&FLBuilder._showPanel(),FLBuilder._dragEnabled=!1,FLBuilder._dragging=!1,FLBuilder._bindOverlayEvents(),FLBuilder._highlightEmptyCols(),FLBuilder._enableGlobalRows(),e(".fl-builder-empty-message").show(),scrollTo(0,l.offset().top-o)},_blockDragCancel:function(){FLBuilder._dragEnabled&&!FLBuilder._dragging&&(FLBuilder._dragEnabled=!1,FLBuilder._dragging=!1,FLBuilder._bindOverlayEvents(),FLBuilder._highlightEmptyCols(),FLBuilder._enableGlobalRows(),e(".fl-builder-empty-message").show())},_removeAllOverlays:function(){FLBuilder._removeRowOverlays(),FLBuilder._removeColOverlays(),FLBuilder._removeModuleOverlays(),FLBuilder._hideTipTips()},_appendOverlay:function(e,t){var i=0,l=null,o=e.hasClass("fl-row"),s=o?e.find("> .fl-row-content-wrap"):e.find("> .fl-node-content"),r={top:parseInt(s.css("margin-top"),10),bottom:parseInt(s.css("margin-bottom"),10)};return e.append(t),e.addClass("fl-block-overlay-active"),FLBuilder._initTipTips(),l=e.find("> .fl-block-overlay"),r.top<0&&(i=parseInt(l.css("top"),10),i=isNaN(i)?0:i,l.css("top",r.top+i+"px")),r.bottom<0&&(i=parseInt(l.css("bottom"),10),i=isNaN(i)?0:i,l.css("bottom",r.bottom+i+"px")),l},_highlightEmptyCols:function(){var t="row"==FLBuilderConfig.userTemplateType?"":":not(.fl-node-global)",i=e(FLBuilder._contentClass+" .fl-row"+t),l=e(FLBuilder._contentClass+" .fl-col"+t);i.removeClass("fl-row-highlight"),l.removeClass("fl-col-highlight"),l.each(function(){var t=e(this);0===t.find(".fl-module").length&&t.addClass("fl-col-highlight")})},_removeRowOverlays:function(){e(".fl-row").removeClass("fl-block-overlay-active"),e(".fl-row-overlay").remove(),e(".fl-module").removeClass("fl-module-adjust-height")},_disableGlobalRows:function(){if("row"!=FLBuilderConfig.userTemplateType){var t=e(".fl-row.fl-node-global");t.addClass("fl-node-disabled"),t.append('<div class="fl-node-disabled-overlay"></div>')}},_enableGlobalRows:function(){"row"!=FLBuilderConfig.userTemplateType&&(e(".fl-node-disabled").removeClass("fl-node-disabled"),e(".fl-node-disabled-overlay").remove())},_rowMouseenter:function(){var t=e(this),i=t.offset().top,l=null,o=null,s=wp.template("fl-row-overlay");t.hasClass("fl-block-overlay-active")||(o=FLBuilder._appendOverlay(t,s({global:t.hasClass("fl-node-global"),node:t.attr("data-node")})),t.find(".fl-node-content:visible").each(function(){var t=e(this).offset().top;l=null===l||l>t?t:l}),null!==l&&l<i&&o.css("top",l-i-30+"px"),o.offset().top<43&&o.addClass("fl-row-overlay-header-bottom"),t.find(".fl-module").each(function(){var t=e(this);t.outerHeight(!0)<20&&t.addClass("fl-module-adjust-height")}))},_rowMouseleave:function(t){var i=e(t.toElement)||e(t.relatedTarget),l=i.hasClass("fl-row-overlay"),o=i.closest(".fl-row-overlay").length>0,s=i.is("#tiptip_holder"),r=i.closest("#tiptip_holder").length>0;l||o||s||r||FLBuilder._removeRowOverlays()},_rowDragHelper:function(){return e('<div class="fl-builder-block-drag-helper" style="width: 190px; height: 45px;">'+FLBuilderStrings.row+"</div>")},_rowDragStop:function(t,i){var l=i.item,o=l.parent();return FLBuilder._blockDragStop(t,i),o.hasClass("fl-builder-rows")?void l.remove():void(l.hasClass("fl-builder-block")?(o.hasClass("fl-row-content")?FLBuilder._addColGroup(l.closest(".fl-row").attr("data-node"),l.attr("data-cols"),o.children(".fl-col-group, .fl-builder-block").index(l)):FLBuilder._addRow(l.attr("data-cols"),o.children(".fl-row, .fl-builder-block").index(l)),l.remove(),FLBuilder._showPanel(),e(".fl-builder-modules").siblings(".fl-builder-blocks-section-title").eq(0).trigger("click")):FLBuilder._reorderRow(l.attr("data-node"),o.children(".fl-row").index(l)))},_reorderRow:function(e,t){FLBuilder.ajax({action:"reorder_node",node_id:e,position:t,silent:!0})},_addRow:function(e,t){FLBuilder.showAjaxLoader(),FLBuilder._newRowPosition=t,FLBuilder.ajax({action:"render_new_row",cols:e,position:t},FLBuilder._addRowComplete)},_addRowComplete:function(t){var i=JSON.parse(t),l=e(FLBuilder._contentClass),o=e(i.html).data("node");i.nodeParent=l,i.nodePosition=FLBuilder._newRowPosition,FLBuilder._renderLayout(i,function(){null!==FLBuilder._addModuleAfterRowRender&&(FLBuilder._addModuleAfterRowRender.hasClass("fl-module")&&(e(".fl-node-"+o+" .fl-col-content").append(FLBuilder._addModuleAfterRowRender),FLBuilder._reorderModule(FLBuilder._addModuleAfterRowRender)),FLBuilder._addModuleAfterRowRender=null)})},_deleteRowClicked:function(t){var i=e(this).closest(".fl-row-overlay").attr("data-node"),l=e(".fl-row[data-node="+i+"]"),o=null;l.find(".fl-module").length?(o=confirm(FLBuilderStrings.deleteRowMessage),o&&FLBuilder._deleteRow(l)):FLBuilder._deleteRow(l),FLBuilder._removeAllOverlays(),t.stopPropagation()},_deleteRow:function(e){FLBuilder.ajax({action:"delete_node",node_id:e.attr("data-node"),silent:!0}),e.empty(),e.remove(),FLBuilder._setupEmptyLayout(),FLBuilder._removeRowOverlays()},_rowCopyClicked:function(t){var i=e(this).closest(".fl-row"),l=i.attr("data-node");FLBuilder.showAjaxLoader(),FLBuilder._removeAllOverlays(),FLBuilder._newRowPosition=i.index(".fl-row")+1,FLBuilder.ajax({action:"copy_row",node_id:l},FLBuilder._rowCopyComplete),t.stopPropagation()},_rowCopyComplete:function(t){var i=JSON.parse(t);i.nodeParent=e(FLBuilder._contentClass),i.nodePosition=FLBuilder._newRowPosition,FLBuilder._renderLayout(i)},_rowSettingsClicked:function(t){var i=e(this),l=i.closest(".fl-row-overlay").attr("data-node"),o=i.closest(".fl-block-overlay-global").length>0;o&&"row"!=FLBuilderConfig.userTemplateType?FLBuilderConfig.userCanEditGlobalTemplates&&window.open(e('.fl-row[data-node="'+l+'"]').attr("data-template-url")):i.hasClass("fl-block-settings")&&(FLBuilder._closePanel(),FLBuilder._showLightbox(),FLBuilder.ajax({action:"render_row_settings",node_id:l},FLBuilder._rowSettingsLoaded)),t.stopPropagation()},_rowSettingsLoaded:function(e){var t=JSON.parse(e);FLBuilder._setSettingsFormContent(t.settings),FLBuilder.preview=new FLBuilderPreview({type:"row",state:t.state})},_colMouseenter:function(){var t=e(this),i=t.hasClass("fl-node-global"),l=t.parents(".fl-node-global").length>0,o=t.parents(".fl-col-group").find(".fl-col").length,s=0===t.index(),r=o===t.index()+1,n=wp.template("fl-col-overlay");FLBuilderConfig.simpleUi||i&&l&&"row"!=FLBuilderConfig.userTemplateType||t.find(".fl-module").length>0||(t.hasClass("fl-block-overlay-active")||(FLBuilder._removeColOverlays(),FLBuilder._removeModuleOverlays(),FLBuilder._appendOverlay(t,n({global:i,numCols:o,first:s,last:r})),FLBuilder._initColDragResizing()),e("body").addClass("fl-block-overlay-muted"))},_colMouseleave:function(t){var i=e(this),l=e(t.toElement)||e(t.relatedTarget),o=i.find(".fl-module").length>0,s=l.is("#tiptip_holder"),r=l.closest("#tiptip_holder").length>0;o||s||r||FLBuilder._removeColOverlays()},_removeColOverlays:function(){var t=e(".fl-col");t.removeClass("fl-block-overlay-active"),t.find(".fl-col-overlay").remove(),e("body").removeClass("fl-block-overlay-muted")},_colSettingsClicked:function(t){var i=e(this).closest(".fl-col").attr("data-node");FLBuilder._colResizing||(FLBuilder._closePanel(),FLBuilder._showLightbox(),FLBuilder.ajax({action:"render_column_settings",node_id:i},FLBuilder._colSettingsLoaded),t.stopPropagation())},_colSettingsLoaded:function(t){var i=JSON.parse(t),l=null,o=null,s=null;FLBuilder._setSettingsFormContent(i.settings),l=e(".fl-builder-col-settings"),o=l.data("node"),s=e('.fl-col[data-node="'+o+'"]'),0===s.siblings(".fl-col").length&&e(l).find("#fl-builder-settings-section-general").css("display","none"),FLBuilder.preview=new FLBuilderPreview({type:"col",state:i.state})},_deleteColClicked:function(t){var i=e(this),l=i.closest(".fl-col"),o=i.closest(".fl-module"),s=!0;o.length>0&&(s=confirm(FLBuilderStrings.deleteColumnMessage)),s&&(FLBuilder._deleteCol(l),FLBuilder._removeAllOverlays()),t.stopPropagation()},_deleteCol:function(e){var t=e.closest(".fl-row"),i=e.closest(".fl-col-group"),l=0;e.remove(),rowCols=t.find(".fl-col"),groupCols=i.find(".fl-col"),0===rowCols.length&&"row"!=FLBuilderConfig.userTemplateType?FLBuilder._deleteRow(t):(0===groupCols.length?i.remove():(l=6===groupCols.length?16.65:7===groupCols.length?14.28:Math.round(100/groupCols.length*100)/100,groupCols.css("width",l+"%")),FLBuilder.ajax({action:"delete_col",node_id:e.attr("data-node"),new_width:l,silent:!0}))},_insertColBeforeClicked:function(t){FLBuilder._insertCol(e(this).closest(".fl-col"),"before"),t.stopPropagation()},_insertColAfterClicked:function(t){FLBuilder._insertCol(e(this).closest(".fl-col"),"after"),t.stopPropagation()},_insertCol:function(e,t){FLBuilder.showAjaxLoader(),FLBuilder._removeAllOverlays(),FLBuilder.ajax({action:"render_new_column",node_id:e.attr("data-node"),insert:t},FLBuilder._renderLayout)},_addColGroup:function(t,i,l){FLBuilder.showAjaxLoader(),FLBuilder._newColGroupParent=e(".fl-node-"+t+" .fl-row-content"),FLBuilder._newColGroupPosition=l,FLBuilder.ajax({action:"render_new_column_group",cols:i,node_id:t,position:l},FLBuilder._addColGroupComplete)},_addColGroupComplete:function(t){var i=JSON.parse(t),l=e(i.html).find(".fl-col").data("node");i.nodeParent=FLBuilder._newColGroupParent,i.nodePosition=FLBuilder._newColGroupPosition,FLBuilder._renderLayout(i,function(){null!==FLBuilder._addModuleAfterRowRender&&(FLBuilder._addModuleAfterRowRender.hasClass("fl-module")&&(e(".fl-node-"+l+" .fl-col-content").append(FLBuilder._addModuleAfterRowRender),FLBuilder._reorderModule(FLBuilder._addModuleAfterRowRender)),FLBuilder._addModuleAfterRowRender=null)})},_initColDragResizing:function(){e(".fl-block-col-resize").draggable({axis:"x",start:FLBuilder._colDragResizeStart,drag:FLBuilder._colDragResize,stop:FLBuilder._colDragResizeStop})},_colDragResizeStart:function(t,i){var l=e(i.helper),o="",s=l.closest(".fl-col-group"),r=s.find("> .fl-col"),n=l.closest(".fl-col"),a=null,d=100,u=0;for(l.hasClass("fl-block-col-resize-e")?(o="e",a=n.next(".fl-col")):(o="w",a=n.prev(".fl-col"));u<r.length;u++)r.eq(u).data("node")!=n.data("node")&&r.eq(u).data("node")!=a.data("node")&&(d-=parseFloat(r.eq(u)[0].style.width));FLBuilder._colResizeData={handle:l,feedbackLeft:l.find(".fl-block-col-resize-feedback-left"),feedbackRight:l.find(".fl-block-col-resize-feedback-right"),direction:o,groupWidth:s.outerWidth(),col:n,colWidth:parseFloat(n[0].style.width)/100,sibling:a,offset:i.position.left,availWidth:d},FLBuilder._colResizing=!0,FLBuilder._closePanel(),FLBuilder._destroyOverlayEvents(),FLBuilder.triggerHook("col-resize-start")},_colDragResize:function(e,t){var i=FLBuilder._colResizeData,l=(i.offset-t.position.left)/i.groupWidth,o="e"==i.direction?100*(i.colWidth-l):100*(i.colWidth+l),s=Math.round(100*o)/100,r=i.availWidth-o,n=Math.round(100*r)/100,a=10,d=Math.round(100*(i.availWidth-10))/100;s<10?(s=a,n=d):n<10&&(s=d,n=a),"e"==i.direction?(i.feedbackLeft.html(s.toFixed(1)+"%").show(),i.feedbackRight.html(n.toFixed(1)+"%").show()):(i.feedbackLeft.html(n.toFixed(1)+"%").show(),i.feedbackRight.html(s.toFixed(1)+"%").show()),i.col.css("width",s+"%"),i.sibling.css("width",n+"%"),FLBuilder.triggerHook("col-resize-drag")},_colDragResizeStop:function(e,t){var i=FLBuilder._colResizeData;FLBuilder._colResizeData.feedbackLeft.hide(),FLBuilder._colResizeData.feedbackRight.hide(),FLBuilder.ajax({action:"resize_cols",col_id:i.col.data("node"),col_width:parseFloat(i.col[0].style.width),sibling_id:i.sibling.data("node"),sibling_width:parseFloat(i.sibling[0].style.width),silent:!0}),FLBuilder._colResizeData=null,FLBuilder._bindOverlayEvents(),setTimeout(function(){FLBuilder._colResizing=!1},50),FLBuilder.triggerHook("col-resize-stop")},_resetColumnWidths:function(t){var i=e(this).closest(".fl-col-group"),l=i.find(".fl-col"),o=0;o=6===l.length?16.65:7===l.length?14.28:Math.round(100/l.length*100)/100,l.css("width",o+"%"),FLBuilder.ajax({action:"reset_col_widths",group_id:i.data("node"),silent:!0}),FLBuilder.triggerHook("col-reset-widths"),t.stopPropagation()},_moduleMouseenter:function(){var t=e(this),i=t.attr("data-name"),l=t.hasClass("fl-node-global"),o=t.parents(".fl-node-global").length>0,s=t.parents(".fl-col-group").find(".fl-col").length,r=t.parents(".fl-col"),n=0===r.index(),a=s===r.index()+1,d=wp.template("fl-module-overlay");FLBuilder._removeColOverlays(),FLBuilder._removeModuleOverlays(),l&&o&&"row"!=FLBuilderConfig.userTemplateType||(t.hasClass("fl-block-overlay-active")||(FLBuilder._appendOverlay(t,d({global:l,moduleName:i,numCols:s,parentFirst:n,parentLast:a})),FLBuilder._initColDragResizing()),e("body").addClass("fl-block-overlay-muted"))},_moduleMouseleave:function(t){var i=(e(this),e(t.toElement)||e(t.relatedTarget)),l=i.is("#tiptip_holder"),o=i.closest("#tiptip_holder").length>0;l||o||FLBuilder._removeModuleOverlays()},_removeModuleOverlays:function(){var t=e(".fl-module");t.removeClass("fl-block-overlay-active"),t.find(".fl-module-overlay").remove(),e("body").removeClass("fl-block-overlay-muted")},_moduleDragHelper:function(t,i){return e('<div class="fl-builder-block-drag-helper">'+i.attr("data-name")+"</div>")},_moduleDragStop:function(e,t){var i=t.item,l=i.parent(),o=0,s=0;return FLBuilder._blockDragStop(e,t),l.hasClass("fl-builder-modules")||l.hasClass("fl-builder-widgets")?void i.remove():(i.hasClass("fl-builder-block")?(l.hasClass("fl-builder-content")?(o=l.children(".fl-row, .fl-builder-block").index(i),s=0):l.hasClass("fl-row-content")?(o=l.children(".fl-col-group, .fl-builder-block").index(i),s=i.closest(".fl-row").attr("data-node")):(o=l.children(".fl-module, .fl-builder-block").index(i),s=i.closest(".fl-col").attr("data-node")),FLBuilder._addModule(l,s,i.attr("data-type"),o,i.attr("data-widget")),t.item.remove()):l.hasClass("fl-builder-content")?(o=l.children(".fl-row, .fl-module").index(i),FLBuilder._addModuleAfterRowRender=i,FLBuilder._addRow("1-col",o),i.remove()):l.hasClass("fl-row-content")?(o=l.children(".fl-col-group, .fl-module").index(i),FLBuilder._addModuleAfterRowRender=i,FLBuilder._addColGroup(i.closest(".fl-row").attr("data-node"),"1-col",o),i.remove()):FLBuilder._reorderModule(i),void FLBuilder._resizeLayout())},_reorderModule:function(e){var t=e.closest(".fl-col").attr("data-node"),i=e.attr("data-parent"),l=e.attr("data-node"),o=e.index();t==i?FLBuilder.ajax({action:"reorder_node",node_id:l,position:o,silent:!0}):(e.attr("data-parent",t),FLBuilder.ajax({action:"move_node",new_parent:t,node_id:l,position:o,silent:!0}))},_deleteModuleClicked:function(t){var i=e(this).closest(".fl-module"),l=confirm(FLBuilderStrings.deleteModuleMessage);l&&(FLBuilder._deleteModule(i),FLBuilder._removeAllOverlays()),t.stopPropagation()},_deleteModule:function(e){var t=e.closest(".fl-row");FLBuilder.ajax({action:"delete_node",node_id:e.attr("data-node"),silent:!0}),e.empty(),e.remove(),t.removeClass("fl-block-overlay-muted"),FLBuilder._highlightEmptyCols(),FLBuilder._removeAllOverlays()},_moduleCopyClicked:function(t){var i=e(this).closest(".fl-module");FLBuilder.showAjaxLoader(),FLBuilder._removeAllOverlays(),FLBuilder._newModuleParent=i.parent(),FLBuilder._newModulePosition=i.index()+1,FLBuilder.ajax({action:"copy_module",node_id:i.attr("data-node")},FLBuilder._moduleCopyComplete),t.stopPropagation()},_moduleCopyComplete:function(e){var t=JSON.parse(e);t.nodeParent=FLBuilder._newModuleParent,t.nodePosition=FLBuilder._newModulePosition,FLBuilder._renderLayout(t)},_moduleSettingsClicked:function(t){var i=e(this),l=i.closest(".fl-module").attr("data-node"),o=i.closest(".fl-col").attr("data-node"),s=i.closest(".fl-module").attr("data-type"),r=i.closest(".fl-block-overlay-global").length>0;t.stopPropagation(),FLBuilder._colResizing||r&&!FLBuilderConfig.userCanEditGlobalTemplates||FLBuilder._showModuleSettings(l,o,s)},_showModuleSettings:function(e,t,i){FLBuilder._closePanel(),FLBuilder._showLightbox(),FLBuilder.ajax({action:"render_module_settings",node_id:e,type:i,parent_id:t},FLBuilder._moduleSettingsLoaded)},_moduleSettingsLoaded:function(t){var i=JSON.parse(t),l=e("<div>"+i.settings+"</div>"),o=l.find("link.fl-builder-settings-css"),s=l.find("script.fl-builder-settings-js"),r=l.find(".fl-builder-settings"),n=r.attr("data-type"),a=null,d=null,u=null;e.inArray(n,FLBuilder._loadedModuleAssets)>-1?(o.remove(),s.remove()):(e("head").append(o),e("head").append(s),FLBuilder._loadedModuleAssets.push(n)),FLBuilder._setSettingsFormContent(l),"undefined"!=typeof i.layout&&(a=i.layout,a.nodeParent=FLBuilder._newModuleParent,a.nodePosition=FLBuilder._newModulePosition),"undefined"!=typeof i.state&&(d=i.state),FLBuilder.preview=new FLBuilderPreview({type:"module",layout:a,state:d}),u=FLBuilder._moduleHelpers[n],"undefined"!=typeof u&&(FLBuilder._initSettingsValidation(u.rules),u.init())},_saveModuleClicked:function(){var t=e(this).closest(".fl-builder-settings"),i=t.attr("data-type"),l=(t.attr("data-node"),FLBuilder._moduleHelpers[i]),o=!0;"undefined"!=typeof l&&(t.find("label.error").remove(),t.validate().hideErrors(),o=t.validate().form(),o&&(o=l.submit())),o?(FLBuilder._saveSettings(),FLBuilder._lightbox.close()):FLBuilder._toggleSettingsTabErrors()},_addModule:function(e,t,i,l,o){FLBuilder.showAjaxLoader(),FLBuilder._newModuleParent=e,FLBuilder._newModulePosition=l,FLBuilder.ajax({action:"render_new_module",parent_id:t,type:i,position:l,
4
- node_preview:1,widget:"undefined"==typeof o?"":o},FLBuilder._addModuleComplete)},_addModuleComplete:function(t){FLBuilder._showLightbox(),FLBuilder._moduleSettingsLoaded(t),e(".fl-builder-module-settings").data("new-module","1")},registerModuleHelper:function(t,i){var l={rules:{},init:function(){},submit:function(){return!0},preview:function(){}};FLBuilder._moduleHelpers[t]=e.extend({},l,i)},_registerModuleHelper:function(e,t){FLBuilder.registerModuleHelper(e,t)},_showNodeTemplateSettings:function(t){var i=e(".fl-builder-settings-lightbox .fl-builder-settings");FLBuilder._saveSettings(),FLBuilder.ajax({action:"render_node_template_settings",node_id:i.attr("data-node")},FLBuilder._nodeTemplateSettingsLoaded)},_nodeTemplateSettingsLoaded:function(e){var t=JSON.parse(e);FLBuilder._showLightbox(!1),FLBuilder._setSettingsFormContent(t.html),FLBuilder._initSettingsValidation({name:{required:!0}})},_saveNodeTemplate:function(){var t=e(".fl-builder-settings-lightbox .fl-builder-settings"),i=t.validate().form();i&&(FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"save_node_template",node_id:t.attr("data-node"),settings:FLBuilder._getSettings(t)},FLBuilder._saveNodeTemplateComplete),FLBuilder._lightbox.close())},_saveNodeTemplateComplete:function(t){var i=JSON.parse(t),l=e(".fl-builder-saved-"+i.type+"s"),o=l.find(".fl-builder-block"),s=null,r="",n=i.name.toLowerCase(),a=0,d=wp.template("fl-node-template-block");if("row"==i.type?FLBuilder.alert(FLBuilderStrings.rowTemplateSaved):"module"==i.type&&FLBuilder.alert(FLBuilderStrings.moduleTemplateSaved),i.layout&&FLBuilder._renderLayout(i.layout),0===o.length)l.append(d(i));else for(;a<o.length;a++){if(s=o.eq(a),r=s.text().toLowerCase().trim(),0===a&&n<r){l.prepend(d(i));break}if(n<r){s.before(d(i));break}if(o.length-1===a){l.append(d(i));break}}l.find(".fl-builder-block-no-node-templates").remove()},_nodeTemplateDragStop:function(e,t){var i=t.item,l=i.parent(),o=null,s=0,r="",n=null;FLBuilder._blockDragStop(e,t),i.hasClass("fl-builder-block-saved-row")||i.hasClass("fl-builder-block-row-template")?(s=l.children(".fl-row, .fl-builder-block").index(i),o=null,r="render_new_row",n=FLBuilder._addRowComplete,FLBuilder._newRowPosition=s):(i.hasClass("fl-builder-block-saved-module")||i.hasClass("fl-builder-block-module-template"))&&(r="render_new_module",n=FLBuilder._addModuleComplete,l.hasClass("fl-builder-content")?(s=l.children(".fl-row, .fl-builder-block").index(i),o=0):l.hasClass("fl-row-content")?(s=l.children(".fl-col-group, .fl-builder-block").index(i),o=i.closest(".fl-row").attr("data-node")):(s=l.children(".fl-module, .fl-builder-block").index(i),o=i.closest(".fl-col").attr("data-node")),FLBuilder._newModuleParent=l,FLBuilder._newModulePosition=s),FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:r,template_id:i.attr("data-id"),template_type:i.attr("data-type"),parent_id:o,position:s},n),i.remove()},_editNodeTemplateClicked:function(t){t.preventDefault(),t.stopPropagation(),window.open(e(this).attr("href"))},_deleteNodeTemplateClicked:function(t){var i=e(t.target),l=i.closest(".fl-builder-blocks-section"),o=l.find(".fl-builder-blocks-section-content"),s=o.find(".fl-builder-block"),r=i.closest(".fl-builder-block"),n=r.hasClass("fl-builder-block-global"),a=n?FLBuilder._updateLayout:void 0,d=n?FLBuilderStrings.deleteGlobalTemplate:FLBuilderStrings.deleteTemplate;confirm(d)&&(r.remove(),1===s.length&&(r.hasClass("fl-builder-block-saved-row")?o.append('<span class="fl-builder-block-no-node-templates">'+FLBuilderStrings.noSavedRows+"</span>"):o.append('<span class="fl-builder-block-no-node-templates">'+FLBuilderStrings.noSavedModules+"</span>")),FLBuilder.ajax({action:"delete_node_template",template_id:r.attr("data-id"),silent:!r.hasClass("fl-builder-block-global")},a))},_initSettingsForms:function(){FLBuilder._initColorPickers(),FLBuilder._initSelectFields(),FLBuilder._initMultipleFields(),FLBuilder._initAutoSuggestFields(),FLBuilder._initLinkFields(),FLBuilder._initFontFields(),FLBuilder.triggerHook("settings-form-init")},_setSettingsFormContent:function(e){FLBuilder._setLightboxContent(e),FLBuilder._initSettingsForms()},_settingsTabClicked:function(t){var i=e(this),l=i.closest(".fl-builder-settings"),o=i.attr("href").split("#").pop();l.find(".fl-builder-settings-tab").removeClass("fl-active"),l.find("#"+o).addClass("fl-active"),l.find(".fl-builder-settings-tabs .fl-active").removeClass("fl-active"),e(this).addClass("fl-active"),t.preventDefault()},_settingsCancelClicked:function(t){var i=e(".fl-builder-module-settings"),l=null,o=null,s=null,r=null;i.length>0&&"undefined"!=typeof i.data("new-module")?(l=e(FLBuilder.preview.state.html),o=e(".fl-node-"+i.data("node")),s=o.closest(".fl-col"),r=l.find(".fl-node-"+s.data("node")),r.length>0?FLBuilder._deleteModule(o):FLBuilder._deleteCol(s)):FLBuilder.preview&&FLBuilder.preview.revert(),FLBuilder.preview=null,FLLightbox.closeParent(this)},_initSettingsValidation:function(t,i){var l=e(".fl-builder-settings").last();l.validate({ignore:[],rules:t,messages:i,errorPlacement:FLBuilder._settingsErrorPlacement})},_settingsErrorPlacement:function(e,t){e.appendTo(t.parent())},_toggleSettingsTabErrors:function(){for(var t=e(".fl-builder-settings:visible"),i=t.find(".fl-builder-settings-tab"),l=null,o=null,s=0;s<i.length;s++)l=i.eq(s),o=l.find("label.error"),tabLink=t.find(".fl-builder-settings-tabs a[href*="+l.attr("id")+"]"),tabLink.find(".fl-error-icon").remove(),tabLink.removeClass("error"),o.length>0&&(tabLink.append('<span class="fl-error-icon"></span>'),tabLink.addClass("error"))},_getSettings:function(t){FLBuilder._updateEditorFields();var i=t.serializeArray(),l=0,o=0,s="",r="",n="",a=[],d=[],u={};for(l=0;l<i.length;l++)if(s=i[l].value.replace(/\r/gm,""),!(i[l].name.indexOf("flrich")>-1))if(i[l].name.indexOf("[")>-1){for(r=i[l].name.replace(/\[(.*)\]/,""),n=i[l].name.replace(r,""),a=[],d=n.match(/\[[^\]]*\]/g),o=0;o<d.length;o++)"[]"!=d[o]&&a.push(d[o].replace(/\[|\]/g,""));n.match(/\[\]\[[^\]]*\]\[[^\]]+\]/)?("undefined"==typeof u[r]&&(u[r]={}),"undefined"==typeof u[r][a[0]]&&(u[r][a[0]]={}),"undefined"==typeof u[r][a[0]][a[1]]&&(u[r][a[0]][a[1]]={}),u[r][a[0]][a[1]]=s):n.match(/\[\]\[[^\]]*\]\[\]/)?("undefined"==typeof u[r]&&(u[r]={}),"undefined"==typeof u[r][a[0]]&&(u[r][a[0]]=[]),u[r][a[0]].push(s)):n.match(/\[\]\[[^\]]*\]/)?("undefined"==typeof u[r]&&(u[r]={}),u[r][a[0]]=s):n.match(/\[\]/)&&("undefined"==typeof u[r]&&(u[r]=[]),u[r].push(s))}else u[i[l].name]=s;for(n in u)if("undefined"!=typeof u["as_values_"+n]){u[n]=e.grep(u["as_values_"+n].split(","),function(e){return""!==e}).join(",");try{delete u["as_values_"+n]}catch(c){}}return u},_saveSettings:function(){var t=e(".fl-builder-settings-lightbox .fl-builder-settings"),i=t.attr("data-node"),l=FLBuilder._getSettings(t);FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"save_settings",node_id:i,settings:l},FLBuilder._saveSettingsComplete),FLBuilder._lightbox.close()},_saveSettingsComplete:function(e){FLBuilder._renderLayout(e,function(){FLBuilder.preview&&(FLBuilder.preview.clear(),FLBuilder.preview=null)})},_showHelpTooltip:function(){e(this).siblings(".fl-help-tooltip-text").fadeIn()},_hideHelpTooltip:function(){e(this).siblings(".fl-help-tooltip-text").fadeOut()},_initAutoSuggestFields:function(){e(".fl-suggest-field").each(FLBuilder._initAutoSuggestField)},_initAutoSuggestField:function(){var t=e(this);t.autoSuggest(FLBuilder._ajaxUrl({fl_action:"fl_builder_autosuggest",fl_as_action:t.data("action"),fl_as_action_data:t.data("action-data"),_wpnonce:FLBuilderConfig.ajaxNonce}),e.extend({},{asHtmlID:t.attr("name"),selectedItemProp:"name",searchObjProps:"name",minChars:3,keyDelay:1e3,fadeOut:!1,usePlaceholder:!0,emptyText:FLBuilderStrings.noResultsFound,showResultListWhenNoMatch:!0,preFill:t.data("value"),queryParam:"fl_as_query",afterSelectionAdd:FLBuilder._updateAutoSuggestField,afterSelectionRemove:FLBuilder._updateAutoSuggestField,selectionLimit:t.data("limit")},t.data("args")))},_updateAutoSuggestField:function(t,i,l){e(this).siblings(".as-values").val(l.join(",")).trigger("change")},_initMultipleFields:function(){for(var t=e(".fl-builder-field-multiples"),i=null,l=null,o=0,s=FLBuilderConfig.isRtl?{left:10}:{right:10};o<t.length;o++)i=t.eq(o),l=i.find(".fl-builder-field-multiple"),1===l.length?l.eq(0).find(".fl-builder-field-actions").addClass("fl-builder-field-actions-single"):l.find(".fl-builder-field-actions").removeClass("fl-builder-field-actions-single");e(".fl-builder-field-multiples").sortable({items:".fl-builder-field-multiple",cursor:"move",cursorAt:s,distance:5,opacity:.5,helper:FLBuilder._fieldDragHelper,placeholder:"fl-builder-field-dd-zone",stop:FLBuilder._fieldDragStop,tolerance:"pointer"})},_addFieldClicked:function(){var t=e(this),i=t.attr("data-field"),l=t.closest("tr").siblings("tr[data-field="+i+"]").last(),o=l.clone(),s=parseInt(l.find("label span.fl-builder-field-index").html(),10)+1;o.find("th label span.fl-builder-field-index").html(s),o.find(".fl-form-field-preview-text").html(""),o.find("input, textarea, select").val(""),l.after(o),FLBuilder._initMultipleFields()},_copyFieldClicked:function(){var t=e(this),i=t.closest("tr"),l=i.clone(),o=parseInt(i.find("label span.fl-builder-field-index").html(),10)+1;l.find("th label span.fl-builder-field-index").html(o),i.after(l),FLBuilder._renumberFields(i.parent()),FLBuilder._initMultipleFields(),FLBuilder.preview.delayPreview()},_deleteFieldClicked:function(){var t=e(this).closest("tr"),i=t.parent(),l=confirm(FLBuilderStrings.deleteFieldMessage);l&&(t.remove(),FLBuilder._renumberFields(i),FLBuilder._initMultipleFields(),FLBuilder.preview.delayPreview())},_renumberFields:function(e){for(var t=e.find(".fl-builder-field-multiple"),i=0;i<t.length;i++)t.eq(i).find("th label span.fl-builder-field-index").html(i+1)},_fieldDragHelper:function(){return e('<div class="fl-builder-field-dd-helper"></div>')},_fieldDragStop:function(e,t){FLBuilder._renumberFields(t.item.parent()),FLBuilder.preview.delayPreview()},_initSelectFields:function(){e(".fl-builder-settings:visible").find(".fl-builder-settings-fields select").trigger("change")},_settingsSelectChanged:function(){var t=e(this),i=t.attr("data-toggle"),l=t.attr("data-hide"),o=t.attr("data-trigger"),s=t.val(),r=0;if("undefined"!=typeof i){i=JSON.parse(i);for(r in i)FLBuilder._settingsSelectToggle(i[r].fields,"hide","#fl-field-"),FLBuilder._settingsSelectToggle(i[r].sections,"hide","#fl-builder-settings-section-"),FLBuilder._settingsSelectToggle(i[r].tabs,"hide","a[href*=fl-builder-settings-tab-","]");"undefined"!=typeof i[s]&&(FLBuilder._settingsSelectToggle(i[s].fields,"show","#fl-field-"),FLBuilder._settingsSelectToggle(i[s].sections,"show","#fl-builder-settings-section-"),FLBuilder._settingsSelectToggle(i[s].tabs,"show","a[href*=fl-builder-settings-tab-","]"))}if("undefined"!=typeof l&&(l=JSON.parse(l),"undefined"!=typeof l[s]&&(FLBuilder._settingsSelectToggle(l[s].fields,"hide","#fl-field-"),FLBuilder._settingsSelectToggle(l[s].sections,"hide","#fl-builder-settings-section-"),FLBuilder._settingsSelectToggle(l[s].tabs,"hide","a[href*=fl-builder-settings-tab-","]"))),"undefined"!=typeof o&&(o=JSON.parse(o),"undefined"!=typeof o[s]&&"undefined"!=typeof o[s].fields))for(r=0;r<o[s].fields.length;r++)e("#fl-field-"+o[s].fields[r]).find("select").trigger("change")},_settingsSelectToggle:function(t,i,l,o){var s=0;if(o="undefined"==typeof o?"":o,"undefined"!=typeof t)for(;s<t.length;s++)e(l+t[s]+o)[i](),"#fl-field-"==l&&"code"==e(l+t[s]).data("type")&&e(l+t[s]).data("editor").resize()},_initColorPickers:function(){var t=FLBuilderConfig.colorPresets?FLBuilderConfig.colorPresets:[];FLBuilder.colorPicker=new FLBuilderColorPicker({mode:"hsv",elements:".fl-color-picker .fl-color-picker-value",presets:t,labels:{colorPresets:FLBuilderStrings.colorPresets,colorPicker:FLBuilderStrings.colorPicker,placeholder:FLBuilderStrings.placeholder,removePresetConfirm:FLBuilderStrings.removePresetConfirm,noneColorSelected:FLBuilderStrings.noneColorSelected,alreadySaved:FLBuilderStrings.alreadySaved,noPresets:FLBuilderStrings.noPresets,presetAdded:FLBuilderStrings.presetAdded}}),e(FLBuilder.colorPicker).on("presetRemoved presetAdded",function(e,t){FLBuilder.ajax({action:"save_color_presets",presets:t.presets})})},_initSinglePhotoSelector:function(){null===FLBuilder._singlePhotoSelector&&(FLBuilder._singlePhotoSelector=wp.media({title:FLBuilderStrings.selectPhoto,button:{text:FLBuilderStrings.selectPhoto},library:{type:"image"},multiple:!1}))},_selectSinglePhoto:function(){FLBuilder._initSinglePhotoSelector(),FLBuilder._singlePhotoSelector.once("open",e.proxy(FLBuilder._singlePhotoOpened,this)),FLBuilder._singlePhotoSelector.once("select",e.proxy(FLBuilder._singlePhotoSelected,this)),FLBuilder._singlePhotoSelector.open()},_singlePhotoOpened:function(){var t=FLBuilder._singlePhotoSelector.state().get("selection"),i=e(this).closest(".fl-photo-field"),l=i.find("input[type=hidden]"),o=l.val(),s=null;e(this).hasClass("fl-photo-replace")?(t.reset(),i.addClass("fl-photo-empty"),l.val("")):""!==o?(s=wp.media.attachment(o),s.fetch(),t.add(s?[s]:[])):t.reset()},_singlePhotoSelected:function(){var t=FLBuilder._singlePhotoSelector.state().get("selection").first().toJSON(),i=e(this).closest(".fl-photo-field"),l=i.find("input[type=hidden]"),o=i.find(".fl-photo-preview img"),s=i.find("select");l.val(t.id),o.attr("src",FLBuilder._getPhotoSrc(t)),i.removeClass("fl-photo-empty"),i.find("label.error").remove(),s.show(),s.html(FLBuilder._getPhotoSizeOptions(t)),s.trigger("change")},_singlePhotoRemoved:function(){FLBuilder._initSinglePhotoSelector();var t=FLBuilder._singlePhotoSelector.state(),i="undefined"!=typeof t?t.get("selection"):null,l=e(this).closest(".fl-photo-field"),o=l.find("input[type=hidden]"),s=l.find("select");i&&i.reset(),l.addClass("fl-photo-empty"),o.val(""),s.html(""),s.trigger("change")},_getPhotoSrc:function(e){return"undefined"==typeof e.sizes?e.url:"undefined"!=typeof e.sizes.thumbnail?e.sizes.thumbnail.url:e.sizes.full.url},_getPhotoSizeOptions:function(e){var t="",i=null,l=null,o="",s={full:FLBuilderStrings.fullSize,large:FLBuilderStrings.large,medium:FLBuilderStrings.medium,thumbnail:FLBuilderStrings.thumbnail};if("undefined"==typeof e.sizes)t+='<option value="'+e.url+'">'+FLBuilderStrings.fullSize+"</option>";else for(i in e.sizes)o="undefined"!=typeof s[i]?s[i]+" - ":"undefined"!=typeof FLBuilderConfig.customImageSizeTitles[i]?FLBuilderConfig.customImageSizeTitles[i]+" - ":"",l="full"==i?' selected="selected"':"",t+='<option value="'+e.sizes[i].url+'"'+l+">"+o+e.sizes[i].width+" x "+e.sizes[i].height+"</option>";return t},_selectMultiplePhotos:function(){var t=e(this).closest(".fl-multiple-photos-field"),i=t.find("input[type=hidden]"),l=i.val(),o=""===l?'[gallery ids="-1"]':'[gallery ids="'+JSON.parse(l).join()+'"]',s=wp.shortcode.next("gallery",o).shortcode,r=wp.media.gallery.defaults.id,n=null,a=null;_.isUndefined(s.get("id"))&&!_.isUndefined(r)&&s.set("id",r),n=wp.media.gallery.attachments(s),a=new wp.media.model.Selection(n.models,{props:n.props.toJSON(),multiple:!0}),a.gallery=n.gallery,a.more().done(function(){a.props.set({query:!1}),a.unmirror(),a.props.unset("orderby")}),FLBuilder._multiplePhotoSelector&&FLBuilder._multiplePhotoSelector.dispose(),FLBuilder._multiplePhotoSelector=wp.media({frame:"post",state:e(this).hasClass("fl-multiple-photos-edit")?"gallery-edit":"gallery-library",title:wp.media.view.l10n.editGalleryTitle,editing:!0,multiple:!0,selection:a}).open(),e(FLBuilder._multiplePhotoSelector.views.view.el).addClass("fl-multiple-photos-lightbox"),FLBuilder._multiplePhotoSelector.once("update",e.proxy(FLBuilder._multiplePhotosSelected,this))},_multiplePhotosSelected:function(t){for(var i=e(this).closest(".fl-multiple-photos-field"),l=i.find("input[type=hidden]"),o=i.find(".fl-multiple-photos-count"),s=[],r=0;r<t.models.length;r++)s.push(t.models[r].id);1==s.length?o.html("1 "+FLBuilderStrings.photoSelected):o.html(s.length+" "+FLBuilderStrings.photosSelected),i.removeClass("fl-multiple-photos-empty"),i.find("label.error").remove(),l.val(JSON.stringify(s)).trigger("change")},_selectSingleVideo:function(){null===FLBuilder._singleVideoSelector&&(FLBuilder._singleVideoSelector=wp.media({title:FLBuilderStrings.selectVideo,button:{text:FLBuilderStrings.selectVideo},library:{type:"video"},multiple:!1})),FLBuilder._singleVideoSelector.once("select",e.proxy(FLBuilder._singleVideoSelected,this)),FLBuilder._singleVideoSelector.open()},_singleVideoSelected:function(){var t=FLBuilder._singleVideoSelector.state().get("selection").first().toJSON(),i=e(this).closest(".fl-video-field"),l=i.find(".fl-video-preview-img img"),o=i.find(".fl-video-preview-filename"),s=i.find("input[type=hidden]");l.attr("src",t.icon),o.html(t.filename),i.removeClass("fl-video-empty"),i.find("label.error").remove(),s.val(t.id).trigger("change")},_selectMultipleAudios:function(){var t=e(this).closest(".fl-multiple-audios-field"),i=t.find("input[type=hidden]"),l=i.val(),o=""==l?'[playlist ids="-1"]':'[playlist ids="'+JSON.parse(l).join()+'"]',s=wp.shortcode.next("playlist",o).shortcode,r=wp.media.playlist.defaults.id,n=null,a=null;_.isUndefined(s.get("id"))&&!_.isUndefined(r)&&s.set("id",r),n=wp.media.playlist.attachments(s),a=new wp.media.model.Selection(n.models,{props:n.props.toJSON(),multiple:!0}),a.playlist=n.playlist,a.more().done(function(){a.props.set({query:!1}),a.unmirror(),a.props.unset("orderby")}),FLBuilder._multipleAudiosSelector&&FLBuilder._multipleAudiosSelector.dispose(),FLBuilder._multipleAudiosSelector=wp.media({frame:"post",state:e(this).hasClass("fl-multiple-audios-edit")?"playlist-edit":"playlist-library",title:wp.media.view.l10n.editPlaylistTitle,editing:!0,multiple:!0,selection:a}).open(),FLBuilder._multipleAudiosSelector.content.get("view").sidebar.unset("playlist"),FLBuilder._multipleAudiosSelector.on("content:render:browse",function(e){e&&e.sidebar.on("ready",function(){e.sidebar.unset("playlist")})}),FLBuilder._multipleAudiosSelector.once("update",e.proxy(FLBuilder._multipleAudiosSelected,this))},_multipleAudiosSelected:function(t){for(var i=e(this).closest(".fl-multiple-audios-field"),l=i.find(".fl-multiple-audios-count"),o=i.find("input[type=hidden]"),s=[],r=0;r<t.models.length;r++)s.push(t.models[r].id);1==s.length?l.html("1 "+FLBuilderStrings.audioSelected):l.html(s.length+" "+FLBuilderStrings.audiosSelected),o.val(JSON.stringify(s)).trigger("change"),i.removeClass("fl-multiple-audios-empty"),i.find("label.error").remove()},_selectIcon:function(){var e=this;FLIconSelector.open(function(t){FLBuilder._iconSelected.apply(e,[t])})},_iconSelected:function(t){var i=e(this).closest(".fl-icon-field"),l=i.find("input[type=hidden]"),o=i.find("i"),s=o.attr("data-icon");l.val(t).trigger("change"),o.removeClass(s),o.addClass(t),o.attr("data-icon",t),i.removeClass("fl-icon-empty"),i.find("label.error").remove()},_removeIcon:function(){var t=e(this).closest(".fl-icon-field"),i=t.find("input[type=hidden]"),l=t.find("i");i.val("").trigger("change"),l.removeClass(),l.attr("data-icon",""),t.addClass("fl-icon-empty")},_formFieldClicked:function(){var t=e(this),i=t.closest(".fl-lightbox-wrap").attr("data-instance-id"),l=FLLightbox._instances[i],o=l._node.find(".fl-lightbox").css("left"),s=l._node.find(".fl-lightbox").css("top"),r=t.closest(".fl-builder-settings"),n=t.attr("data-type"),a=t.siblings("input").val(),d=FLBuilder._moduleHelpers[n],u=new FLLightbox({className:"fl-builder-lightbox fl-form-field-settings",destroyOnClose:!0});t.closest(".fl-builder-lightbox").hide(),t.attr("id","fl-"+u._id),u.open('<div class="fl-builder-lightbox-loading"></div>'),u.draggable({handle:".fl-lightbox-header"}),e("body").undelegate(".fl-builder-settings-cancel","click",FLBuilder._settingsCancelClicked),u._node.find(".fl-lightbox").css({left:o,top:Number(parseInt(s)+233)+"px"}),FLBuilder.ajax({action:"render_settings_form",node_id:r.attr("data-node"),node_settings:FLBuilder._getSettings(r),type:n,settings:a.replace(/&#39;/g,"'")},function(e){var t=JSON.parse(e);u.setContent(t.html),u._node.find("form.fl-builder-settings").attr("data-type",n),u._node.find(".fl-builder-settings-cancel").on("click",FLBuilder._closeFormFieldLightbox),FLBuilder._initSettingsForms(),"undefined"!=typeof d&&(FLBuilder._initSettingsValidation(d.rules),d.init()),u._node.find(".fl-lightbox").css({left:o,top:s})})},_closeFormFieldLightbox:function(){var t=e(this).closest(".fl-lightbox-wrap").attr("data-instance-id"),i=FLLightbox._instances[t],l=e(".fl-builder-settings-lightbox"),o=l.find("form"),s=i._node.find(".fl-lightbox").css("left"),r=i._node.find(".fl-lightbox").css("top"),n=0,a=e(window),d=a.height();"undefined"!=typeof tinymce&&"undefined"!=typeof tinymce.EditorManager.activeEditor&&tinymce.EditorManager.activeEditor.remove(),i._node.find(".fl-lightbox-content").html('<div class="fl-builder-lightbox-loading"></div>'),n=i._node.find(".fl-lightbox").height(),d-80>n?i._node.find(".fl-lightbox").css("top",(d-n)/2-40+"px"):i._node.find(".fl-lightbox").css("top","0px"),i.on("close",function(){l.show(),l.find("label.error").remove(),o.validate().hideErrors(),FLBuilder._toggleSettingsTabErrors(),l.find(".fl-lightbox").css({left:s,top:r})}),setTimeout(function(){i.close(),e("body").delegate(".fl-builder-settings-cancel","click",FLBuilder._settingsCancelClicked)},500)},_saveFormFieldClicked:function(){var t=e(this).closest(".fl-builder-settings"),i=e(this).closest(".fl-lightbox-wrap").attr("data-instance-id"),l=t.attr("data-type"),o=FLBuilder._getSettings(t),s={},r=FLBuilder._moduleHelpers[l],n=e(".fl-builder-settings #fl-"+i),a=n.parent().attr("data-preview-text"),d=o[a],u=e('select[name="'+a+'"]'),c=document.createElement("div"),h=!0;return u.length>0&&(d=u.find('option[value="'+o[a]+'"]').text()),"undefined"!=typeof r&&(t.find("label.error").remove(),t.validate().hideErrors(),h=t.validate().form(),h&&(h=r.submit())),h?("undefined"!=typeof a&&"undefined"!=typeof d&&(d.indexOf("fa fa-")>-1?d='<i class="'+d+'"></i>':d.length>35&&(c.innerHTML=d,d=(c.textContent||c.innerText||"").replace(/^(.{35}[^\s]*).*/,"$1")+"..."),n.siblings(".fl-form-field-preview-text").html(d)),s=n.siblings("input").val().replace(/&#39;/g,"'"),""!=s&&(o=e.extend(JSON.parse(s),o)),n.siblings("input").val(JSON.stringify(o)).trigger("change"),FLBuilder._closeFormFieldLightbox.apply(this),!0):(FLBuilder._toggleSettingsTabErrors(),!1)},_layoutFieldClicked:function(){var t=e(this);t.siblings().removeClass("fl-layout-field-option-selected"),t.addClass("fl-layout-field-option-selected"),t.siblings("input").val(t.attr("data-value"))},_initLinkFields:function(){e(".fl-link-field").each(FLBuilder._initLinkField)},_initLinkField:function(){var t=e(this),i=t.find(".fl-link-field-search-input");i.autoSuggest(FLBuilder._ajaxUrl({fl_action:"fl_builder_autosuggest",fl_as_action:"fl_as_links",_wpnonce:FLBuilderConfig.ajaxNonce}),{asHtmlID:i.attr("name"),selectedItemProp:"name",searchObjProps:"name",minChars:3,keyDelay:1e3,fadeOut:!1,usePlaceholder:!0,emptyText:FLBuilderStrings.noResultsFound,showResultListWhenNoMatch:!0,queryParam:"fl_as_query",selectionLimit:1,afterSelectionAdd:FLBuilder._updateLinkField})},_updateLinkField:function(e,t,i){var l=e.closest(".fl-link-field"),o=l.find(".fl-link-field-search"),s=l.find(".fl-link-field-search-input"),r=l.find(".fl-link-field-input");r.val(t.value).trigger("keyup"),s.autoSuggest("remove",t.value),o.hide()},_linkFieldSelectClicked:function(){e(this).parent().find(".fl-link-field-search").show()},_linkFieldSelectCancelClicked:function(){e(this).parent().hide()},_initFontFields:function(){e(".fl-font-field").each(FLBuilder._initFontField)},_initFontField:function(){var t=e(this),i=t.find(".fl-font-field-font");i.on("change",function(){FLBuilder._getFontWeights(i)})},_getFontWeights:function(t){var i=t.next(".fl-font-field-weight"),l=t.val(),o={"default":"Default",regular:"Regular",100:"Thin 100",200:"Extra-Light 200",300:"Light 300",400:"Normal 400",500:"Medium 500",600:"Semi-Bold 600",700:"Bold 700",800:"Extra-Bold 800",900:"Ultra-Bold 900"},s={};i.html(""),s="undefined"!=typeof FLBuilderFontFamilies.system[l]?FLBuilderFontFamilies.system[l].weights:"undefined"!=typeof FLBuilderFontFamilies.google[l]?FLBuilderFontFamilies.google[l]:FLBuilderFontFamilies["default"][l],e.each(s,function(e,t){i.append('<option value="'+t+'">'+o[t]+"</option>")})},initEditorField:function(e){var t=tinyMCEPreInit.mceInit.flhiddeneditor;t.elements=e,tinyMCEPreInit.mceInit[e]=t},_updateEditorFields:function(){var t=e(".fl-builder-settings textarea.wp-editor-area");t.each(FLBuilder._updateEditorField)},_updateEditorField:function(){var t=e(this),i=t.closest(".fl-editor-field"),l=(t.closest(".fl-builder-settings"),t.closest(".wp-editor-wrap")),o=t.attr("id"),s=i.attr("id"),r="undefined"!=typeof tinyMCE&&tinyMCE.get(o),n=t.siblings('textarea[name="'+s+'"]'),a=i.data("wpautop");0===n.length&&(n=e('<textarea name="'+s+'"></textarea>').hide(),t.after(n)),a?r&&l.hasClass("tmce-active")?n.val(r.getContent()):"undefined"!=typeof switchEditors?n.val(switchEditors.wpautop(t.val())):n.val(t.val()):(r&&l.hasClass("tmce-active")&&r.save(),n.val(t.val()))},_loopBuilderPostTypeChange:function(){var t=e(this).val();e(".fl-loop-builder-filter").hide(),e(".fl-loop-builder-"+t+"-filter").show()},_textFieldAddValueSelectChange:function(){var t=e(this),i=e('input[name="'+t.data("target")+'"]'),l=i.val(),o=t.val(),s="";-1==l.indexOf(o)&&(s=(l.trim()+" "+o.trim()).trim(),i.val(s).trigger("change").trigger("keyup")),t.val("")},ajax:function(t,i){var l;if(FLBuilder._silentUpdate)return FLBuilder.showAjaxLoader(),void(FLBuilder._silentUpdateCallbackData=[t,i]);t.silent===!0&&(FLBuilder._silentUpdate=!0);for(l in t)"undefined"==typeof t[l]&&(t[l]=null);return t._wpnonce=FLBuilderConfig.ajaxNonce,t.post_id=e("#fl-post-id").val(),t.fl_builder=1,t.fl_action=t.action,"undefined"!=typeof t.settings&&(t.settings=FLBuilder._ajaxModSecFix(t.settings)),"undefined"!=typeof t.node_settings&&(t.node_settings=FLBuilder._ajaxModSecFix(t.node_settings)),t={fl_builder_data:t},e.post(FLBuilder._ajaxUrl(),t,function(e){FLBuilder._ajaxComplete(),"undefined"!=typeof i&&i.call(this,e)})},_ajaxComplete:function(){var e,t;FLBuilder._silentUpdate=!1,null!==FLBuilder._silentUpdateCallbackData?(FLBuilder.showAjaxLoader(),e=FLBuilder._silentUpdateCallbackData[0],t=FLBuilder._silentUpdateCallbackData[1],FLBuilder._silentUpdateCallbackData=null,FLBuilder.ajax(e,t)):FLBuilder.hideAjaxLoader()},_ajaxUrl:function(e){var t=window.location.href.split("#").shift(),i=null;if("undefined"!=typeof e)for(i in e)t+=t.indexOf("?")>-1?"&":"?",t+=i+"="+e[i];return t},showAjaxLoader:function(){0===e(".fl-builder-lightbox-loading").length&&e(".fl-builder-loading").show()},hideAjaxLoader:function(){e(".fl-builder-loading").hide()},_ajaxModSecFix:function(e){var t;if(FLBuilderConfig.modSecFix&&"undefined"!=typeof btoa)if("string"==typeof e)e=btoa(e);else for(t in e)"string"==typeof e[t]?e[t]=btoa(e[t]):"object"==typeof e[t]&&(e[t]=FLBuilder._ajaxModSecFix(e[t]));return e},_showLightbox:function(e){e="undefined"==typeof e||e,FLBuilder._lightbox.open('<div class="fl-builder-lightbox-loading"></div>'),e?FLBuilder._lightbox.draggable({handle:".fl-lightbox-header"}):FLBuilder._lightbox.draggable(!1),FLBuilder._removeAllOverlays(),FLBuilder._initLightboxScrollbars()},_setLightboxContent:function(e){FLBuilder._lightbox.setContent(e)},_initLightboxScrollbars:function(){FLBuilder._initScrollbars(),FLBuilder._lightboxScrollbarTimeout=setTimeout(FLBuilder._initLightboxScrollbars,500)},_lightboxClosed:function(){FLBuilder._lightbox.empty(),clearTimeout(FLBuilder._lightboxScrollbarTimeout)},_showActionsLightbox:function(e){var t=wp.template("fl-actions-lightbox");FLBuilder.triggerHook("actions-lightbox-settings",e),FLBuilder._actionsLightbox.open(t(e))},_resizeLightbox:function(){var t=e(this),i=t.hasClass("fa-expand")?"expand":"contract";FLBuilder._lightbox.renderResize(i),e(this).toggleClass("fa-expand").toggleClass("fa-compress")},alert:function(e){var t=new FLLightbox({className:"fl-builder-lightbox fl-builder-alert-lightbox",destroyOnClose:!0}),i=wp.template("fl-alert-lightbox");t.open(i({message:e}))},_alertClose:function(){FLLightbox.closeParent(this)},triggerHook:function(t,i){e("body").trigger("fl-builder."+t,i)},addHook:function(t,i){e("body").on("fl-builder."+t,i)},removeHook:function(t,i){e("body").off("fl-builder."+t,i)},log:function(e){"undefined"!=typeof window.console&&"undefined"!=typeof window.console.log&&console.log(e)},logError:function(e){var t=null;"undefined"!=typeof e&&("undefined"!=typeof e.stack?t=e.stack:"undefined"!=typeof e.message&&(t=e.message),t&&(FLBuilder.log("************************************************************************"),FLBuilder.log(FLBuilderStrings.errorMessage),FLBuilder.log(t),FLBuilder.log("************************************************************************")))},logGlobalError:function(e,t,i,l,o){FLBuilder.log("************************************************************************"),FLBuilder.log(FLBuilderStrings.errorMessage),FLBuilder.log(FLBuilderStrings.globalErrorMessage.replace("{message}",e).replace("{line}",i).replace("{file}",t)),"undefined"!=typeof o&&"undefined"!=typeof o.stack&&(FLBuilder.log(o.stack),FLBuilder.log("************************************************************************"))}},e(function(){FLBuilder._init()})}(jQuery);var FLBuilderColorPicker;!function(e,t){function i(){var t,i,l="backgroundImage";h?f="filter":(t=e('<div id="iris-gradtest" />'),i="linear-gradient(top,#fff,#000)",e.each(p,function(e,o){if(t.css(l,o+i),t.css(l).match("gradient"))return f=e,!1}),f===!1&&(t.css("background","-webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#000))"),t.css(this.bgImageString).match("gradient")&&(f="webkit")),t.remove())}function l(t,i){return t="top"===t?"top":"left",i=e.isArray(i)?i:Array.prototype.slice.call(arguments,1),"webkit"===f?s(t,i):p[f]+"linear-gradient("+t+", "+i.join(", ")+")"}function o(t,i){var l,o,s,n,a,d,u,c,h;t="top"===t?"top":"left",i=e.isArray(i)?i:Array.prototype.slice.call(arguments,1),l="top"===t?0:1,o=e(this),s=i.length-1,n="filter",a=1===l?"left":"top",d=1===l?"right":"bottom",u=1===l?"height":"width",c='<div class="iris-ie-gradient-shim" style="position:absolute;'+u+":100%;"+a+":%start%;"+d+":%end%;"+n+':%filter%;" data-color:"%color%"></div>',h="","static"===o.css("position")&&o.css({position:"relative"}),i=r(i),e.each(i,function(e,t){var o,r,n;return e!==s&&(o=i[e+1],void(t.stop!==o.stop&&(r=100-parseFloat(o.stop)+"%",t.octoHex=new Color(t.color).toIEOctoHex(),o.octoHex=new Color(o.color).toIEOctoHex(),n="progid:DXImageTransform.Microsoft.Gradient(GradientType="+l+", StartColorStr='"+t.octoHex+"', EndColorStr='"+o.octoHex+"')",h+=c.replace("%start%",t.stop).replace("%end%",r).replace("%filter%",n))))}),o.find(".iris-ie-gradient-shim").remove(),e(h).prependTo(o)}function s(t,i){var l=[];return t="top"===t?"0% 0%,0% 100%,":"0% 100%,100% 100%,",i=r(i),e.each(i,function(e,t){l.push("color-stop("+parseFloat(t.stop)/100+", "+t.color+")")}),"-webkit-gradient(linear,"+t+l.join(",")+")"}function r(t){var i=[],l=[],o=[],s=t.length-1;return e.each(t,function(e,t){var o=t,s=!1,r=t.match(/1?[0-9]{1,2}%$/);r&&(o=t.replace(/\s?1?[0-9]{1,2}%$/,""),s=r.shift()),i.push(o),l.push(s)}),l[0]===!1&&(l[0]="0%"),l[s]===!1&&(l[s]="100%"),l=n(l),e.each(l,function(e){o[e]={color:i[e],stop:l[e]}}),o}function n(t){var i,l,o,s,r=0,a=t.length-1,d=0,u=!1;if(t.length<=2||e.inArray(!1,t)<0)return t;for(;d<t.length-1;)u||t[d]!==!1?u&&t[d]!==!1&&(a=d,d=t.length):(r=d-1,u=!0),d++;for(l=a-r,s=parseInt(t[r].replace("%"),10),i=(parseFloat(t[a].replace("%"))-s)/l,d=r+1,o=1;d<a;)t[d]=s+o*i+"%",o++,d++;return n(t)}var a=[],d=navigator.userAgent.toLowerCase(),u="Microsoft Internet Explorer"===navigator.appName,c=u?parseFloat(d.match(/msie ([0-9]{1,}[\.0-9]{0,})/)[1]):0,h=u&&c<10,f=!1,p=["-moz-","-webkit-","-o-","-ms-"];e.fn.flBuilderColorPickerGradient=function(){
5
- var t=arguments;return this.each(function(){h?o.apply(this,t):e(this).css("backgroundImage",l.apply(this,t))})},e.fn.flBuilderColorPickerRaninbowGradient=function(t,i){var l,o,s,r;for(t=t||"top",l=e.extend({},{s:100,l:50},i),o="hsl(%h%,"+l.s+"%,"+l.l+"%)",s=0,r=[];s<=360;)r.push(o.replace("%h%",s)),s+=30;return this.each(function(){e(this).flBuilderColorPickerGradient(t,r)})},FLBuilderColorPicker=function(t){this._html='<div class="fl-color-picker-ui"><div class="iris-picker"><div class="iris-picker-inner"><div class="iris-square"><a class="iris-square-value" href="#"><span class="iris-square-handle ui-slider-handle"></span></a><div class="iris-square-inner iris-square-horiz"></div><div class="iris-square-inner iris-square-vert"></div></div><div class="iris-slider iris-strip"><div class="iris-slider-offset"></div></div></div></div></div>';var i={elements:null,color:"",mode:"hsl",controls:{horiz:"s",vert:"l",strip:"h"},target:!1,width:200,presets:[],labels:{colorPresets:"Color Presets",colorPicker:"Color Picker",placeholder:"Paste color here...",removePresetConfirm:"Are you sure?",noneColorSelected:"None color selected.",alreadySaved:"%s is already a saved preset.",noPresets:"Add a color preset first.",presetAdded:"%s added to presets!"}};this.options=e.extend({},i,t),(h===!1||h===!0&&c>7)&&this._init()},FLBuilderColorPicker.prototype={_html:"",_color:"",_currentElement:"",_inited:!1,_defaultHSLControls:{horiz:"s",vert:"l",strip:"h"},_defaultHSVControls:{horiz:"h",vert:"v",strip:"s"},_scale:{h:360,s:100,l:100,v:100},_init:function(){var t=this;e(t.options.elements);this._color=new Color("#000000").setHSpace(t.options.mode),a=this.options.presets,f===!1&&i(),e("html").hasClass("fl-color-picker-init")?t.picker=e(".fl-color-picker-ui"):t.picker=e(this._html).appendTo("body"),u?9===c?t.picker.addClass("iris-ie-9"):c<=8&&t.picker.addClass("iris-ie-lt9"):d.indexOf("compatible")<0&&d.indexOf("khtml")<0&&d.match(/mozilla/)&&t.picker.addClass("iris-mozilla"),t.controls={square:t.picker.find(".iris-square"),squareDrag:t.picker.find(".iris-square-value"),horiz:t.picker.find(".iris-square-horiz"),vert:t.picker.find(".iris-square-vert"),strip:t.picker.find(".iris-strip"),stripSlider:t.picker.find(".iris-strip .iris-slider-offset")},"hsv"===t.options.mode&&t._has("l",t.options.controls)?t.options.controls=t._defaultHSVControls:"hsl"===t.options.mode&&t._has("v",t.options.controls)&&(t.options.controls=t._defaultHSLControls),t.hue=t._color.h(),this._setTemplates(),this._ui=e(".fl-color-picker-ui"),this._iris=e(".iris-picker"),this._wrapper=e("body"),e("html").hasClass("fl-color-picker-init")||this._ui.prepend(this._hexHtml).append(this._presetsHtml),t.element=this._ui.find(".fl-color-picker-input"),t._initControls(),t.active="external",t._change(),t._addInputListeners(t.element),this._buildUI(),this._prepareColorFields(),this._pickerControls(),this._presetsControls(),e("html").addClass("fl-color-picker-init")},_prepareColorFields:function(){e(".fl-color-picker-value").each(function(){var t=e(this),i=t.parent().find(".fl-color-picker-color");t.val()&&i.css({backgroundColor:"#"+t.val().toString()})})},_setTemplates:function(){this._presetsHtml='<div class="fl-color-picker-presets"><div class="fl-color-picker-presets-toggle"><div class="fl-color-picker-presets-open-label fl-color-picker-active">'+this.options.labels.colorPresets+' <span class="fl-color-picker-icon-arrow-up"></span></div><div class="fl-color-picker-presets-close-label">'+this.options.labels.colorPicker+' <span class="fl-color-picker-icon-arrow-down"></span></div></div><ul class="fl-color-picker-presets-list"></ul></div>',this._hexHtml='<input type="text" class="fl-color-picker-input" maxlength="7" placeholder="'+this.options.labels.placeholder+'"><div class="fl-color-picker-preset-add"></div>',this._presetsTpl='<li class="fl-color-picker-preset"><span class="fl-color-picker-preset-color"></span> <span class="fl-color-picker-preset-label"></span> <span class="fl-color-picker-preset-remove fl-color-picker-icon-remove"></span></li>',this._noPresetsTpl='<li class="fl-color-picker-no-preset"><span class="fl-color-picker-preset-label">'+this.options.labels.noPresets+"</span></li>"},_has:function(t,i){var l=!1;return e.each(i,function(e,i){if(t===i)return l=!0,!1}),l},_buildUI:function(){var t=this;t._presetsList=this._ui.find(".fl-color-picker-presets-list"),t._presetsList.html(""),this.options.presets.length>0?e.each(this.options.presets,function(e,i){t._addPresetView(i)}):t._presetsList.append(this._noPresetsTpl)},_addPresetView:function(t){var i=this._presetsList.find(".fl-color-picker-no-preset");i.length>0&&i.remove();var l=e(this._presetsTpl),o=Color(t);l.attr("data-color",t).find(".fl-color-picker-preset-color").css({backgroundColor:o.toString()}).end().find(".fl-color-picker-preset-label").html(o.toString()),this._presetsList.append(l)},_addPresetFeedback:function(){this._ui.append('<div class="fl-color-picker-added"><div class="fl-color-picker-added-text"><div class="fl-color-picker-icon-check"></div> "'+this.options.labels.presetAdded.replace("%s",this._color.toString())+'"</div></div>'),this._ui.find(".fl-color-picker-added").hide().fadeIn(200).delay(2e3).fadeOut(200,function(){e(this).remove()})},_pickerControls:function(){var t=this;this._wrapper.on("click",".fl-color-picker-color",function(){var i=e(this);t._currentElement=i.parent().find(".fl-color-picker-value"),t._ui.position({my:"left top",at:"left bottom",of:i,collision:"flipfit",using:function(e,i){t._togglePicker(e)}})}).on("click",".fl-color-picker-clear",function(){var i=e(this);t._currentElement=i.parent().find(".fl-color-picker-value"),i.prev(".fl-color-picker-color").css({backgroundColor:"transparent"}).addClass("fl-color-picker-empty"),t._setColor(""),t.element.val(""),t._currentElement.val("").trigger("change")}),e(document).on("click",function(t){0===e(t.target).closest(".fl-color-picker-ui").length&&e(".fl-color-picker-ui.fl-color-picker-active").removeClass("fl-color-picker-active")})},_presetsControls:function(){var t=this,i=t._ui.find(".fl-color-picker-preset-add"),l=t._ui.find(".fl-color-picker-presets"),o=l.find(".fl-color-picker-presets-open-label"),s=l.find(".fl-color-picker-presets-close-label"),r=l.find(".fl-color-picker-presets-list");i.off("click").on("click",function(){t._addPreset(t.element.val())}),r.css({height:t.element.innerHeight()+t._iris.innerHeight()+14+"px"}).hide(),l.off("click").on("click",".fl-color-picker-presets-toggle",function(){o.toggleClass("fl-color-picker-active"),s.toggleClass("fl-color-picker-active"),r.slideToggle(500)}).on("click",".fl-color-picker-preset",function(i){var l=new Color(e(this).data("color").toString());t._setColor(l),t._currentElement.parent().find(".fl-color-picker-color").css({backgroundColor:l.toString()}).removeClass("fl-color-picker-empty"),o.toggleClass("fl-color-picker-active"),s.toggleClass("fl-color-picker-active"),r.slideToggle(500)}).on("click",".fl-color-picker-preset-remove",function(i){i.stopPropagation(),t._removePreset(e(this).parent().data("color"))})},_removePreset:function(t){if(confirm(this.options.labels.removePresetConfirm)){var i=t.toString(),l=a.indexOf(i);l>-1&&(a.splice(l,1),this.options.presets=a,this._presetsList.find('.fl-color-picker-preset[data-color="'+i+'"]').slideUp(function(){e(this).remove()})),a.length<1&&this._presetsList.append(this._noPresetsTpl),e(this).trigger("presetRemoved",{presets:a})}},_addPreset:function(t){var i=t.toString().replace(/^#/,"");""===i?alert(this.options.labels.noneColorSelected):a.indexOf(i)>-1?alert(this.options.labels.alreadySaved.replace("%s","#"+i)):(this._addPresetView(i),this._addPresetFeedback(),a.push(i),this.options.presets=a,e(this).trigger("presetAdded",{presets:a}))},_togglePicker:function(e){var t=this;this._ui.hasClass("fl-color-picker-active")?(this._ui.removeClass("fl-color-picker-active"),e&&setTimeout(function(){t._ui.css(e),t._ui.addClass("fl-color-picker-active"),t._setColor(t._currentElement.val())},200)):(e&&t._ui.css(e),setTimeout(function(){t._ui.addClass("fl-color-picker-active"),t._setColor(t._currentElement.val())},200))},_paint:function(){var e=this;e._paintDimension("right","strip"),e._paintDimension("top","vert"),e._paintDimension("left","horiz")},_paintDimension:function(e,t){var i,l=this,o=l._color,s=l.options.mode,r=l._getHSpaceColor(),n=l.controls[t],a=l.options.controls;if(t!==l.active&&("square"!==l.active||"strip"===t))switch(a[t]){case"h":if("hsv"===s){switch(r=o.clone(),t){case"horiz":r[a.vert](100);break;case"vert":r[a.horiz](100);break;case"strip":r.setHSpace("hsl")}i=r.toHsl()}else i="strip"===t?{s:r.s,l:r.l}:{s:100,l:r.l};n.flBuilderColorPickerRaninbowGradient(e,i);break;case"s":"hsv"===s?"vert"===t?i=[o.clone().a(0).s(0).toCSS("rgba"),o.clone().a(1).s(0).toCSS("rgba")]:"strip"===t?i=[o.clone().s(100).toCSS("hsl"),o.clone().s(0).toCSS("hsl")]:"horiz"===t&&(i=["#fff","hsl("+r.h+",100%,50%)"]):i="vert"===t&&"h"===l.options.controls.horiz?["hsla(0, 0%, "+r.l+"%, 0)","hsla(0, 0%, "+r.l+"%, 1)"]:["hsl("+r.h+",0%,50%)","hsl("+r.h+",100%,50%)"],n.flBuilderColorPickerGradient(e,i);break;case"l":i="strip"===t?["hsl("+r.h+",100%,100%)","hsl("+r.h+", "+r.s+"%,50%)","hsl("+r.h+",100%,0%)"]:["#fff","rgba(255,255,255,0) 50%","rgba(0,0,0,0) 50%","rgba(0,0,0,1)"],n.flBuilderColorPickerGradient(e,i);break;case"v":i="strip"===t?[o.clone().v(100).toCSS(),o.clone().v(0).toCSS()]:["rgba(0,0,0,0)","#000"],n.flBuilderColorPickerGradient(e,i)}},_getHSpaceColor:function(){return"hsv"===this.options.mode?this._color.toHsv():this._color.toHsl()},_addInputListeners:function(e){var t=this,i=100,l=function(i){var l=new Color(e.val()),o=e.val().replace(/^#/,"");if(e.removeClass("iris-error"),l.error)""!==o&&e.addClass("iris-error");else if(l.toString()!==t._color.toString())if("keyup"===i.type){if(o.match(/^[0-9a-fA-F]{3}$/))return;t._setColor(o),t._currentElement.parent().find(".fl-color-picker-color").css({backgroundColor:Color(o).toString()}).removeClass("fl-color-picker-empty"),t._currentElement.val(o).trigger("change")}else if("paste"===i.type)return o=i.originalEvent.clipboardData.getData("text").replace(/^#/,""),hex=Color(o).toString(),t._setColor(o),e.val(hex),t._currentElement.parent().find(".fl-color-picker-color").css({backgroundColor:hex}).removeClass("fl-color-picker-empty"),t._currentElement.val(o).trigger("change"),!1};e.on("change",l).on("keyup",t._debounce(l,i))},_initControls:function(){var t=this,i=t.controls,l=i.square,o=t.options.controls,s=t._scale[o.strip];i.stripSlider.slider({orientation:"horizontal",max:s,slide:function(e,i){t.active="strip","h"===o.strip&&(i.value=s-i.value),t._color[o.strip](i.value),t._change.apply(t,arguments)}}),i.squareDrag.draggable({containment:i.square.find(".iris-square-inner"),zIndex:1e3,cursor:"move",drag:function(e,i){t._squareDrag(e,i)},start:function(){l.addClass("iris-dragging"),e(this).addClass("ui-state-focus")},stop:function(){l.removeClass("iris-dragging"),e(this).removeClass("ui-state-focus")}}).on("mousedown mouseup",function(i){var l="ui-state-focus";i.preventDefault(),"mousedown"===i.type?(t.picker.find("."+l).removeClass(l).blur(),e(this).addClass(l).focus()):e(this).removeClass(l)}).on("keydown",function(e){var l=i.square,o=i.squareDrag,s=o.position(),r=2;switch(e.altKey&&(r*=10),e.keyCode){case 37:s.left-=r;break;case 38:s.top-=r;break;case 39:s.left+=r;break;case 40:s.top+=r;break;default:return!0}s.left=Math.max(0,Math.min(s.left,l.width())),s.top=Math.max(0,Math.min(s.top,l.height())),o.css(s),t._squareDrag(e,{position:s}),e.preventDefault()}),l.mousedown(function(i){var l,o;1===i.which&&e(i.target).is("div")&&(l=t.controls.square.offset(),o={top:i.pageY-l.top,left:i.pageX-l.left},i.preventDefault(),t._squareDrag(i,{position:o}),i.target=t.controls.squareDrag.get(0),t.controls.squareDrag.css(o).trigger(i))})},_squareDrag:function(e,t){var i=this,l=i.options.controls,o=i._squareDimensions(),s=Math.round((o.h-t.position.top)/o.h*i._scale[l.vert]),r=i._scale[l.horiz]-Math.round((o.w-t.position.left)/o.w*i._scale[l.horiz]);i._color[l.horiz](r)[l.vert](s),i.active="square",i._change.apply(i,arguments)},_setColor:function(e){var t,i,l=this,o=l.options.color;l.options.color=e,e=""+e,t=e.replace(/^#/,""),i=new Color(e).setHSpace(l.options.mode),i.error?l.options.color=o:(l._color=i,l.options.color=l._color.toString(),l.active="external",l._change())},_squareDimensions:function(e){var i,l,o=this.controls.square;return e!==t&&o.data("dimensions")?o.data("dimensions"):(l=this.controls.squareDrag,i={w:o.width(),h:o.height()},o.data("dimensions",i),i)},_isNonHueControl:function(e,t){return"square"===e&&"h"===this.options.controls.strip||"external"!==t&&("h"!==t||"strip"!==e)},_change:function(){var t=this,i=t.controls,l=t._getHSpaceColor(),o=["square","strip"],s=t.options.controls,r=s[t.active]||"external",n=t.hue;"strip"===t.active?o=[]:"external"!==t.active&&o.pop(),e.each(o,function(e,o){var r,n,a;if(o!==t.active)switch(o){case"strip":r="h"===s.strip?t._scale[s.strip]-l[s.strip]:l[s.strip],i.stripSlider.slider("value",r);break;case"square":n=t._squareDimensions(),a={left:l[s.horiz]/t._scale[s.horiz]*n.w,top:n.h-l[s.vert]/t._scale[s.vert]*n.h},t.controls.squareDrag.css(a)}}),l.h!==n&&t._isNonHueControl(t.active,r)&&t._color.h(n),t.hue=t._color.h(),t.options.color=t._color.toString(),t.element.is(":input")&&!t._color.error&&(t.element.removeClass("iris-error"),t.element.val()!==t._color.toString()&&(t.element.val(t._color.toString()),this._currentElement&&(this._currentElement.val(t._color.toString().replace(/^#/,"")).parent().find(".fl-color-picker-color").css({backgroundColor:t._color.toString()}).removeClass("fl-color-picker-empty"),this._currentElement.trigger("change")))),t._paint(),t._inited=!0,t.active=!1},_debounce:function(e,t,i){var l,o;return function(){var s,r,n=this,a=arguments;return s=function(){l=null,i||(o=e.apply(n,a))},r=i&&!l,clearTimeout(l),l=setTimeout(s,t),r&&(o=e.apply(n,a)),o}}}}(jQuery),function(e,t){var i=function(e,t){return this instanceof i?this._init(e,t):new i(e,t)};i.fn=i.prototype={_color:0,_alpha:1,error:!1,_hsl:{h:0,s:0,l:0},_hsv:{h:0,s:0,v:0},_hSpace:"hsl",_init:function(e){var i="noop";switch(typeof e){case"object":return e.a!==t&&this.a(e.a),i=e.r!==t?"fromRgb":e.l!==t?"fromHsl":e.v!==t?"fromHsv":i,this[i](e);case"string":return this.fromCSS(e);case"number":return this.fromInt(parseInt(e,10))}return this},_error:function(){return this.error=!0,this},clone:function(){for(var e=new i(this.toInt()),t=["_alpha","_hSpace","_hsl","_hsv","error"],l=t.length-1;l>=0;l--)e[t[l]]=this[t[l]];return e},setHSpace:function(e){return this._hSpace="hsv"===e?e:"hsl",this},noop:function(){return this},fromCSS:function(e){var t,i=/^(rgb|hs(l|v))a?\(/;if(this.error=!1,e=e.replace(/^\s+/,"").replace(/\s+$/,"").replace(/;$/,""),e.match(i)&&e.match(/\)$/)){if(t=e.replace(/(\s|%)/g,"").replace(i,"").replace(/,?\);?$/,"").split(","),t.length<3)return this._error();if(4===t.length&&(this.a(parseFloat(t.pop())),this.error))return this;for(var l=t.length-1;l>=0;l--)if(t[l]=parseInt(t[l],10),isNaN(t[l]))return this._error();return e.match(/^rgb/)?this.fromRgb({r:t[0],g:t[1],b:t[2]}):e.match(/^hsv/)?this.fromHsv({h:t[0],s:t[1],v:t[2]}):this.fromHsl({h:t[0],s:t[1],l:t[2]})}return this.fromHex(e)},fromRgb:function(e,i){return"object"!=typeof e||e.r===t||e.g===t||e.b===t?this._error():(this.error=!1,this.fromInt(parseInt((e.r<<16)+(e.g<<8)+e.b,10),i))},fromHex:function(e){return e=e.replace(/^#/,"").replace(/^0x/,""),3===e.length&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),this.error=!/^[0-9A-F]{6}$/i.test(e),this.fromInt(parseInt(e,16))},fromHsl:function(e){var i,l,o,s,r,n,a,d;return"object"!=typeof e||e.h===t||e.s===t||e.l===t?this._error():(this._hsl=e,this._hSpace="hsl",n=e.h/360,a=e.s/100,d=e.l/100,0===a?i=l=o=d:(s=d<.5?d*(1+a):d+a-d*a,r=2*d-s,i=this.hue2rgb(r,s,n+1/3),l=this.hue2rgb(r,s,n),o=this.hue2rgb(r,s,n-1/3)),this.fromRgb({r:255*i,g:255*l,b:255*o},!0))},fromHsv:function(e){var i,l,o,s,r,n,a,d,u,c,h;if("object"!=typeof e||e.h===t||e.s===t||e.v===t)return this._error();switch(this._hsv=e,this._hSpace="hsv",i=e.h/360,l=e.s/100,o=e.v/100,a=Math.floor(6*i),d=6*i-a,u=o*(1-l),c=o*(1-d*l),h=o*(1-(1-d)*l),a%6){case 0:s=o,r=h,n=u;break;case 1:s=c,r=o,n=u;break;case 2:s=u,r=o,n=h;break;case 3:s=u,r=c,n=o;break;case 4:s=h,r=u,n=o;break;case 5:s=o,r=u,n=c}return this.fromRgb({r:255*s,g:255*r,b:255*n},!0)},fromInt:function(e,i){return this._color=parseInt(e,10),isNaN(this._color)&&(this._color=0),this._color>16777215?this._color=16777215:this._color<0&&(this._color=0),i===t&&(this._hsv.h=this._hsv.s=this._hsl.h=this._hsl.s=0),this},hue2rgb:function(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e},toString:function(){var e=parseInt(this._color,10).toString(16);if(this.error)return"";if(e.length<6)for(var t=6-e.length-1;t>=0;t--)e="0"+e;return"#"+e},toCSS:function(e,t){switch(e=e||"hex",t=parseFloat(t||this._alpha),e){case"rgb":case"rgba":var i=this.toRgb();return t<1?"rgba( "+i.r+", "+i.g+", "+i.b+", "+t+" )":"rgb( "+i.r+", "+i.g+", "+i.b+" )";case"hsl":case"hsla":var l=this.toHsl();return t<1?"hsla( "+l.h+", "+l.s+"%, "+l.l+"%, "+t+" )":"hsl( "+l.h+", "+l.s+"%, "+l.l+"% )";default:return this.toString()}},toRgb:function(){return{r:255&this._color>>16,g:255&this._color>>8,b:255&this._color}},toHsl:function(){var e,t,i=this.toRgb(),l=i.r/255,o=i.g/255,s=i.b/255,r=Math.max(l,o,s),n=Math.min(l,o,s),a=(r+n)/2;if(r===n)e=t=0;else{var d=r-n;switch(t=a>.5?d/(2-r-n):d/(r+n),r){case l:e=(o-s)/d+(o<s?6:0);break;case o:e=(s-l)/d+2;break;case s:e=(l-o)/d+4}e/=6}return e=Math.round(360*e),0===e&&this._hsl.h!==e&&(e=this._hsl.h),t=Math.round(100*t),0===t&&this._hsl.s&&(t=this._hsl.s),{h:e,s:t,l:Math.round(100*a)}},toHsv:function(){var e,t,i=this.toRgb(),l=i.r/255,o=i.g/255,s=i.b/255,r=Math.max(l,o,s),n=Math.min(l,o,s),a=r,d=r-n;if(t=0===r?0:d/r,r===n)e=t=0;else{switch(r){case l:e=(o-s)/d+(o<s?6:0);break;case o:e=(s-l)/d+2;break;case s:e=(l-o)/d+4}e/=6}return e=Math.round(360*e),0===e&&this._hsv.h!==e&&(e=this._hsv.h),t=Math.round(100*t),0===t&&this._hsv.s&&(t=this._hsv.s),{h:e,s:t,v:Math.round(100*a)}},toInt:function(){return this._color},toIEOctoHex:function(){var e=this.toString(),t=parseInt(255*this._alpha,10).toString(16);return 1===t.length&&(t="0"+t),"#"+t+e.replace(/^#/,"")},toLuminosity:function(){var e=this.toRgb();return.2126*Math.pow(e.r/255,2.2)+.7152*Math.pow(e.g/255,2.2)+.0722*Math.pow(e.b/255,2.2)},getDistanceLuminosityFrom:function(e){if(!(e instanceof i))throw"getDistanceLuminosityFrom requires a Color object";var t=this.toLuminosity(),l=e.toLuminosity();return t>l?(t+.05)/(l+.05):(l+.05)/(t+.05)},getMaxContrastColor:function(){var e=this.toLuminosity(),t=e>=.5?"000000":"ffffff";return new i(t)},getReadableContrastingColor:function(e,l){if(!(e instanceof i))return this;var o=l===t?5:l,s=e.getDistanceLuminosityFrom(this),r=e.getMaxContrastColor(),n=r.getDistanceLuminosityFrom(e);if(n<=o)return r;if(s>=o)return this;for(var a=0===r.toInt()?-1:1;s<o&&(this.l(a,!0),s=this.getDistanceLuminosityFrom(e),0!==this._color&&16777215!==this._color););return this},a:function(e){if(e===t)return this._alpha;var i=parseFloat(e);return isNaN(i)?this._error():(this._alpha=i,this)},darken:function(e){return e=e||5,this.l(-e,!0)},lighten:function(e){return e=e||5,this.l(e,!0)},saturate:function(e){return e=e||15,this.s(e,!0)},desaturate:function(e){return e=e||15,this.s(-e,!0)},toGrayscale:function(){return this.setHSpace("hsl").s(0)},getComplement:function(){return this.h(180,!0)},getSplitComplement:function(e){e=e||1;var t=180+30*e;return this.h(t,!0)},getAnalog:function(e){e=e||1;var t=30*e;return this.h(t,!0)},getTetrad:function(e){e=e||1;var t=60*e;return this.h(t,!0)},getTriad:function(e){e=e||1;var t=120*e;return this.h(t,!0)},_partial:function(e){var i=l[e];return function(l,o){var s=this._spaceFunc("to",i.space);return l===t?s[e]:(o===!0&&(l=s[e]+l),i.mod&&(l%=i.mod),i.range&&(l=l<i.range[0]?i.range[0]:l>i.range[1]?i.range[1]:l),s[e]=l,this._spaceFunc("from",i.space,s))}},_spaceFunc:function(e,t,i){var l=t||this._hSpace,o=e+l.charAt(0).toUpperCase()+l.substr(1);return this[o](i)}};var l={h:{mod:360},s:{range:[0,100]},l:{space:"hsl",range:[0,100]},v:{space:"hsv",range:[0,100]},r:{space:"rgb",range:[0,255]},g:{space:"rgb",range:[0,255]},b:{space:"rgb",range:[0,255]}};for(var o in l)l.hasOwnProperty(o)&&(i.fn[o]=i.fn._partial(o));"object"==typeof exports?module.exports=i:e.Color=i}(this),function(e){FLIconSelector={_content:null,_lightbox:null,_rendered:!1,_filterText:"",open:function(e){FLIconSelector._rendered||FLIconSelector._render(),null===FLIconSelector._content?(FLIconSelector._lightbox.open('<div class="fl-builder-lightbox-loading"></div>'),FLBuilder.ajax({action:"render_icon_selector"},FLIconSelector._getContentComplete)):FLIconSelector._lightbox.open(),FLIconSelector._lightbox.on("icon-selected",function(t,i){FLIconSelector._lightbox.off("icon-selected"),FLIconSelector._lightbox.close(),e(i)})},_render:function(){FLIconSelector._lightbox=new FLLightbox({className:"fl-icon-selector"}),FLIconSelector._rendered=!0},_getContentComplete:function(t){var i=JSON.parse(t);FLIconSelector._content=i.html,FLIconSelector._lightbox.setContent(i.html),e(".fl-icons-filter-select").on("change",FLIconSelector._filter),e(".fl-icons-filter-text").on("keyup",FLIconSelector._filter),e(".fl-icons-list i").on("click",FLIconSelector._select),e(".fl-icon-selector-cancel").on("click",e.proxy(FLIconSelector._lightbox.close,FLIconSelector._lightbox))},_filter:function(){var t=e(".fl-icons-filter-select").val(),i=e(".fl-icons-filter-text").val();"all"==t?e(".fl-icons-section").show():(e(".fl-icons-section").hide(),e(".fl-"+t).show()),FLIconSelector._filterText=i,""!==i?e(".fl-icons-list i").each(FLIconSelector._filterIcon):e(".fl-icons-list i").show()},_filterIcon:function(){var t=e(this);-1==t.attr("class").indexOf(FLIconSelector._filterText)?t.hide():t.show()},_select:function(){var t=e(this).attr("class");FLIconSelector._lightbox.trigger("icon-selected",t)}}}(jQuery),function(e){FLLightbox=function(e){this._init(e),this._render(),this._bind()},FLLightbox.closeParent=function(t){var i=e(t).closest(".fl-lightbox-wrap").attr("data-instance-id");FLLightbox._instances[i].close()},FLLightbox._instances={},FLLightbox.prototype={_id:null,_node:null,_visible:!1,_resizeTimer:null,_draggable:!1,_defaults:{className:"",destroyOnClose:!1},open:function(e){this._node.show(),this._visible=!0,"undefined"!=typeof e?this.setContent(e):this._resize(),this.trigger("open")},close:function(){"undefined"!=typeof tinymce&&"undefined"!=typeof tinymce.EditorManager.activeEditor&&null!=tinymce.EditorManager.activeEditor&&tinymce.EditorManager.activeEditor.hide(),this._node.hide(),this._visible=!1,this.trigger("close"),this._defaults.destroyOnClose&&this.destroy()},setContent:function(e){this._node.find(".fl-lightbox-content").html(e),this._resize()},empty:function(){this._node.find(".fl-lightbox-content").empty(),this._node.find(".fl-lightbox").removeClass("fl-lightbox-expanded")},on:function(e,t){this._node.on(e,t)},off:function(e){this._node.off(e)},trigger:function(e,t){this._node.trigger(e,t)},draggable:function(e){var t=this._node.find(".fl-lightbox-mask"),i=this._node.find(".fl-lightbox");e="undefined"!=typeof e&&e,this._draggable&&i.draggable("destroy"),e?(this._unbind(),this._draggable=!0,t.hide(),i.draggable({cursor:"move",handle:e.handle||""})):(t.show(),this._bind(),this._draggable=!1),this._resize()},destroy:function(){e(window).off("resize.fl-lightbox-"+this._id),this._node.empty(),this._node.remove(),FLLightbox._instances[this._id]="undefined";try{delete FLLightbox._instances[this._id]}catch(t){}},renderResize:function(t){if("undefined"!=typeof t){var i=this._getActiveNode();if(lightbox=i.find(".fl-lightbox"),boxFields=lightbox.find(".fl-builder-settings-fields"),win=e(window),winHeight=win.height(),winWidth=win.width(),boxHeaderHeight=lightbox.find(".fl-lightbox-header").height(),boxTabsHeight=lightbox.find(".fl-builder-settings-tabs").height(),boxFooterHeight=lightbox.find(".fl-lightbox-footer").height(),boxFieldHeight=winHeight-(boxHeaderHeight+boxTabsHeight+boxFooterHeight+103),editor="undefined"!=typeof tinymce&&tinymce.EditorManager.activeEditor?tinymce:null,editorId=editor?editor.EditorManager.activeEditor.id:"flhiddeneditor",editorIframeEl=lightbox.find("#"+editorId+"_ifr"),editorTextarea=lightbox.find("#"+editorId),codeField=lightbox.find(".fl-code-field .ace_editor"),"expand"==t||"window_resize"==t){if("window_resize"==t&&!lightbox.hasClass("fl-lightbox-expanded"))return!1;boxFields.css("height",boxFieldHeight+"px"),"expand"==t&&(lightbox.addClass("fl-lightbox-expanded"),lightbox.draggable("disable")),editorIframeEl.length>0&&editorIframeEl.css("height",boxFieldHeight-145+"px"),editorTextarea.length>0&&editorTextarea.css("height",boxFieldHeight-145+"px"),codeField.length>0&&codeField.css("height",boxFieldHeight-30+"px")}else setTimeout(e.proxy(this._resize,this),250),lightbox.removeClass("fl-lightbox-expanded"),boxFields.removeAttr("style"),null!==editorId&&(editorIframeEl.css("height","232px"),editorTextarea.css("height","232px")),codeField.length>0&&codeField.css("height","380px"),lightbox.draggable("enable")}},_init:function(t){var i=0,l=null;for(l in FLLightbox._instances)i++;this._defaults=e.extend({},this._defaults,t),this._id=(new Date).getTime()+i,FLLightbox._instances[this._id]=this},_render:function(){this._node=e('<div class="fl-lightbox-wrap" data-instance-id="'+this._id+'"><div class="fl-lightbox-mask"></div><div class="fl-lightbox"><div class="fl-lightbox-content-wrap"><div class="fl-lightbox-content"></div></div></div></div>'),this._node.addClass(this._defaults.className),e("body").append(this._node)},_bind:function(){e(window).on("resize.fl-lightbox-"+this._id,e.proxy(this._delayedResize,this))},_unbind:function(){e(window).off("resize.fl-lightbox-"+this._id)},_delayedResize:function(){clearTimeout(this._resizeTimer),this._resizeTimer=setTimeout(e.proxy(this._resize,this),250),this.renderResize("window_resize")},_resize:function(){if(this._visible){var t=this._node.find(".fl-lightbox"),i=t.height(),l=t.width(),o=e(window),s=o.height(),r=o.width(),n="0px",a=(r-l)/2-30+"px";t.css({margin:"0px",top:"auto",left:"auto"}),s-80>i&&(n=(s-i)/2-40+"px"),this._draggable?(t.css("top",n),t.css("left",FLBuilderConfig.isRtl?"-"+a:a)):(t.css("margin-top",n),t.css("margin-left","auto"),t.css("margin-right","auto"))}},_onKeypress:function(e){27==e.which&&this._visible&&this.close()},_getActiveNode:function(){var t=this._node;return e.each(FLLightbox._instances,function(i,l){e(l._node).is(":visible")&&(t=e(l._node))}),t}}}(jQuery),function(e){FLStyleSheet=function(){},FLStyleSheet.prototype={_sheet:null,_sheetElement:null,updateRule:function(e,t,i){this._createSheet();for(var l=this._sheet.cssRules?this._sheet.cssRules:this._sheet.rules,o=null,s=0;s<l.length;s++)l[s].selectorText.toLowerCase()==e.toLowerCase()&&(o=l[s]);if(o)if("object"==typeof t)for(s in t)o.style[this._toCamelCase(s)]=t[s];else o.style[this._toCamelCase(t)]=i;else this.addRule(e,t,i)},addRule:function(e,t,i){this._createSheet();var l="",o="";if("object"==typeof t)for(o in t)l+=o+":"+t[o]+";";else l=t+":"+i+";";this._sheet.insertRule?this._sheet.insertRule(e+" { "+l+" }",this._sheet.cssRules.length):this._sheet.addRule(e,l)},remove:function(){this._sheetElement&&(this._sheetElement.remove(),this._sheetElement=null),this._sheet&&(this._sheet=null)},_createSheet:function(){this._sheet||(this._sheetElement=e('<style type="text/css"></style>'),e("body").append(this._sheetElement),this._sheet=this._sheetElement[0].sheet)},_toCamelCase:function(e){return e.toLowerCase().replace(/-(.)/g,function(e,t){return t.toUpperCase()})}}}(jQuery);
 
1
+ !function(e){FLBuilderAJAXLayout=function(t,l){this._data=e.extend({},this._defaults,"string"==typeof t?JSON.parse(t):t),this._callback=l,this._post=e("#fl-post-id").val(),this._head=e("head").eq(0),this._body=e("body").eq(0),this._data.css&&(this._loader=e('<img src="'+this._data.css+'" />'),this._oldCss=e('link[href*="/cache/'+this._post+'"]'),this._newCss=e('<link rel="stylesheet" id="fl-builder-layout-'+this._post+'-css" href="'+this._data.css+'" />')),this._data.partial?(this._data.js&&(this._oldJs=e("#fl-builder-partial-refresh-js"),this._newJs=e('<script type="text/javascript" id="fl-builder-partial-refresh-js">'+this._data.js+"</script>")),this._data.nodeId&&(this._data.oldNodeId?(this._oldScriptsStyles=e('.fl-builder-node-scripts-styles[data-node="'+this._data.oldNodeId+'"]'),this._content=e(".fl-node-"+this._data.oldNodeId)):(this._oldScriptsStyles=e('.fl-builder-node-scripts-styles[data-node="'+this._data.nodeId+'"]'),this._content=e(".fl-node-"+this._data.nodeId)))):(this._oldJs=e('script[src*="/cache/'+this._post+'"]'),this._newJs=e('<script src="'+this._data.js+'"></script>'),this._oldScriptsStyles=e(".fl-builder-layout-scripts-styles"),this._content=e(FLBuilder._contentClass)),this._init()},FLBuilderAJAXLayout.prototype={_defaults:{partial:!1,nodeId:null,nodeType:null,nodeParent:null,nodePosition:null,oldNodeId:null,html:null,scriptsStyles:null,css:null,js:null},_data:null,_callback:function(){},_post:null,_head:null,_body:null,_loader:null,_oldCss:null,_newCss:null,_oldJs:null,_newJs:null,_oldScriptsStyles:null,_content:null,_init:function(){this._body.height(this._body.height()),this._loader?(this._loader.on("error",e.proxy(this._loadNewCSSComplete,this)),this._body.append(this._loader)):this._finish()},_loadNewCSSComplete:function(){this._loader.remove(),this._oldCss.length>0?this._oldCss.after(this._newCss):this._head.append(this._newCss),setTimeout(e.proxy(this._finish,this),250)},_finish:function(){this._removeOldContentAndAssets(),this._cleanNewHTML(),this._cleanNewAssets(),this._addNewHTML(),this._addNewScriptsStyles(),this._addNewJS(),e(FLBuilder._contentClass).trigger("fl-builder.layout-rendered"),FLBuilder.hideAjaxLoader(),"undefined"!=typeof this._callback&&this._callback()},_removeOldContentAndAssets:function(){this._content&&this._content.empty(),this._oldCss&&this._oldCss.remove(),this._oldJs&&this._oldJs.remove(),this._oldScriptsStyles&&this._oldScriptsStyles.remove()},_cleanNewHTML:function(){if(this._data.scriptsStyles){var t=e("<div>"+this._data.html+"</div>"),l="fl-row",i=this._data.scriptsStyles,o="";this._data.partial&&(l="column-group"==this._data.nodeType?"fl-col-group":"column"==this._data.nodeType?"fl-col":"fl-"+this._data.nodeType),t.find("> *, script").each(function(){e(this).hasClass(l)||(o=e(this).remove(),i+=o[0].outerHTML)}),""!==i&&(i=this._data.partial?'<div class="fl-builder-node-scripts-styles" data-node="'+this._data.nodeId+'">'+i+"<div>":'<div class="fl-builder-node-scripts-styles">'+i+"<div>"),this._data.html=t.html(),this._data.scriptsStyles=i}},_addNewHTML:function(){var e;this._data.partial?this._data.nodeParent?(e=this._data.nodeParent.hasClass("fl-builder-content")?this._data.nodeParent.find(".fl-row"):this._data.nodeParent.hasClass("fl-row-content")?this._data.nodeParent.find(" > .fl-col-group"):this._data.nodeParent.find(" > .fl-col-group, > .fl-module"),0===e.length||e.length==this._data.nodePosition?this._data.nodeParent.append(this._data.html):e.eq(this._data.nodePosition).before(this._data.html)):(this._content.after(this._data.html),this._content.remove()):this._content.append(this._data.html)},_cleanNewAssets:function(){var t=this;this._data.html=this._removeDuplicateAssets(this._data.html),this._data.scriptsStyles&&""!==this._data.scriptsStyles&&(this._data.scriptsStyles=this._removeDuplicateAssets(this._data.scriptsStyles)),this._data.partial?e(".fl-builder-node-scripts-styles").each(function(){t._data.html.indexOf("fl-node-"+e(this).data("node"))>-1&&e(this).remove()}):(e("#fl-builder-partial-refresh-js").remove(),e(".fl-builder-node-scripts-styles").remove())},_removeDuplicateAssets:function(t){var l=e("<div>"+t+"</div>"),i="",o=null,s="",r=null,n=window.location,a=n.protocol+"//"+n.hostname+(n.port?":"+n.port:"");return l.find("script").each(function(){i=e(this).attr("src"),"undefined"!=typeof i&&(i=i.replace(a,""),o=e('script[src*="'+i+'"]'),o.length>0&&e(this).remove())}),l.find("link").each(function(){s=e(this).attr("href"),"undefined"!=typeof s&&(s=s.replace(a,""),r=e('link[href*="'+s+'"]'),r.length>0&&e(this).remove())}),l.html()},_addNewScriptsStyles:function(){this._data.scriptsStyles&&""!==this._data.scriptsStyles&&this._body.append(this._data.scriptsStyles)},_addNewJS:function(){setTimeout(e.proxy(function(){this._newJs&&this._head.append(this._newJs)},this),50)},_complete:function(){FLBuilder._setupEmptyLayout(),FLBuilder._highlightEmptyCols(),FLBuilder._initDropTargets(),FLBuilder._initSortables(),FLBuilder._resizeLayout(),FLBuilder._initMediaElements(),FLBuilderLayout.init(),FLBuilderResponsiveEditing.refreshPreview(),this._body.height("auto")}}}(jQuery),!function(e){"use strict";if(e.matchMedia&&e.matchMedia("all").addListener)return!1;var t=e.matchMedia,l=t("only all").matches,i=!1,o=0,s=[],r=function(l){e.clearTimeout(o),o=e.setTimeout(function(){for(var l=0,i=s.length;l<i;l++){var o=s[l].mql,r=s[l].listeners||[],n=t(o.media).matches;if(n!==o.matches){o.matches=n;for(var a=0,d=r.length;a<d;a++)r[a].call(e,o)}}},30)};e.matchMedia=function(o){var n=t(o),a=[],d=0;return n.addListener=function(t){l&&(i||(i=!0,e.addEventListener("resize",r,!0)),0===d&&(d=s.push({mql:n,listeners:a})),a.push(t))},n.removeListener=function(e){for(var t=0,l=a.length;t<l;t++)a[t]===e&&a.splice(t,1)},n}}(this),!function(e){"use strict";e.matchMedia=e.matchMedia||function(e,t){var l,i=e.documentElement,o=i.firstElementChild||i.firstChild,s=e.createElement("body"),r=e.createElement("div");return r.id="mq-test-1",r.style.cssText="position:absolute;top:-100em",s.style.background="none",s.appendChild(r),function(e){return r.innerHTML='&shy;<style media="'+e+'"> #mq-test-1 { width: 42px; }</style>',i.insertBefore(s,o),l=42===r.offsetWidth,i.removeChild(s),{matches:l,media:e}}}(e.document)}(this),function(e){FLBuilderForcedMediaQueries={_requestQueue:[],_xmlHttp:function(){var e=!1;try{e=new window.XMLHttpRequest}catch(t){e=new window.ActiveXObject("Microsoft.XMLHTTP")}return function(){return e}}(),_regex:{media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,comments:/\/\*[^*]*\*+([^\/][^*]*\*+)*\//gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,maxw:/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,minmaxwh:/\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,other:/\([^\)]*\)/g},_mediaStyles:[],_rules:[],_appendedEls:[],_parsedSheets:{},_emInPx:null,_width:null,_callback:null,update:function(e,t){var l=FLBuilderForcedMediaQueries,i=window.document,o=i.documentElement,s=i.getElementsByTagName("head")[0]||o,r=i.getElementsByTagName("base")[0],n=s.getElementsByTagName("link");l._mediaStyles=[],l._rules=[],"undefined"!=typeof e&&(l._width=e),"undefined"!=typeof t&&(l._callback=t);for(var a in l._parsedSheets)a.indexOf("-layout-draft.css?")>-1?l._parsedSheets[a].parsed=!1:a.indexOf("-layout-preview.css?")>-1&&(l._parsedSheets[a].parsed=!1);for(var d=0;d<n.length;d++){var a=n[d],u=a.href,c=a.media,f=a.rel&&"stylesheet"===a.rel.toLowerCase();if(u&&f){if(u.indexOf(FLBuilderConfig.pluginUrl)>-1)continue;"undefined"!=typeof l._parsedSheets[u]&&l._parsedSheets[u].parsed?l._translate(l._parsedSheets[u].styles,u,l._parsedSheets[u].media):a.styleSheet&&a.styleSheet.rawCssText?(l._translate(a.styleSheet.rawCssText,u,c),l._parsedSheets[u]=!0):(/^([a-zA-Z:]*\/\/)/.test(u)||r)&&u.replace(RegExp.$1,"").split("/")[0]!==window.location.host||("//"===u.substring(0,2)&&(u=window.location.protocol+u),l._requestQueue.push({href:u,media:c}))}}l._makeRequests()},applyMedia:function(e){var t=FLBuilderForcedMediaQueries,l="clientWidth",i=window.document,o=i.documentElement,s=(o[l],i.getElementsByTagName("head")[0]||o),r=s.getElementsByTagName("link"),n=r[r.length-1],a=((new Date).getTime(),{}),d=t._mediaStyles,u=t._appendedEls,c=t._emInPx;t._width=e;for(var f in d)if(d.hasOwnProperty(f)){var h=d[f],p=h.minw,g=h.maxw,_=null===p,m=null===g,b="em";p&&(p=parseFloat(p)*(p.indexOf(b)>-1?c||t.getEmPixelValue():1)),g&&(g=parseFloat(g)*(g.indexOf(b)>-1?c||t.getEmPixelValue():1)),h.hasQuery&&(_&&m||!(_||e>=p)||!(m||e<=g))||(a[h.media]||(a[h.media]=[]),a[h.media].push(t._rules[h.rules]))}for(var v in u)u.hasOwnProperty(v)&&u[v]&&u[v].parentNode===s&&s.removeChild(u[v]);t._appendedEls.length=0;for(var L in a)if(a.hasOwnProperty(L)){var F=i.createElement("style"),y=a[L].join("\n");F.type="text/css",F.media=L,s.insertBefore(F,n.nextSibling),F.styleSheet?F.styleSheet.cssText=y:F.appendChild(i.createTextNode(y)),t._appendedEls.push(F)}},isUnsupportedMediaQuery:function(e){var t=FLBuilderForcedMediaQueries._regex;return e.replace(t.minmaxwh,"").match(t.other)},getEmPixelValue:function(){var e=null,t=window.document,l=t.documentElement,i=t.body,o=t.createElement("div"),s=l.style.fontSize,r=i&&i.style.fontSize,n=!1;return o.style.cssText="position:absolute;font-size:1em;width:1em",i||(i=n=t.createElement("body"),i.style.background="none"),l.style.fontSize="100%",i.style.fontSize="100%",i.appendChild(o),n&&l.insertBefore(i,l.firstChild),e=o.offsetWidth,n?l.removeChild(i):i.removeChild(o),l.style.fontSize=s,r&&(i.style.fontSize=r),e=FLBuilderForcedMediaQueries._emInPx=parseFloat(e)},_translate:function(e,t,l){var i=FLBuilderForcedMediaQueries,o=i._regex,s=e.replace(o.comments,"").replace(o.keyframes,"").match(o.media),r=s&&s.length||0;t=t.substring(0,t.lastIndexOf("/"));var n=function(e){return e.replace(o.urls,"$1"+t+"$2$3")},a=!r&&l;t.length&&(t+="/"),a&&(r=1);for(var d=0;d<r;d++){var u,c,f,h;a?(u=l,i._rules.push(n(e))):(u=s[d].match(o.findStyles)&&RegExp.$1,i._rules.push(RegExp.$2&&n(RegExp.$2))),f=u.split(","),h=f.length;for(var p=0;p<h;p++)c=f[p],i.isUnsupportedMediaQuery(c)||i._mediaStyles.push({media:c.split("(")[0].match(o.only)&&RegExp.$2||"all",rules:i._rules.length-1,hasQuery:c.indexOf("(")>-1,minw:c.match(o.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:c.match(o.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}},_makeRequests:function(){var e=FLBuilderForcedMediaQueries;if(e._requestQueue.length){var t=e._requestQueue.shift();e._ajax(t.href,function(l){e._translate(l,t.href,t.media),e._parsedSheets[t.href]={parsed:!0,styles:l,media:t.media},window.setTimeout(function(){e._makeRequests()},0)})}else e._width&&(e.applyMedia(e._width),e._callback&&(e._callback(),e._callback=null))},_ajax:function(e,t){var l=FLBuilderForcedMediaQueries._xmlHttp();l&&(l.open("GET",e,!0),l.onreadystatechange=function(){4!==l.readyState||200!==l.status&&304!==l.status||t(l.responseText)},4!==l.readyState&&l.send(null))}}}(jQuery),function(e){FLBuilderPreview=function(t){this.type=t.type,"undefined"!=t.state&&t.state?this.state=t.state:this._saveState(),"undefined"!=t.layout&&t.layout?FLBuilder._renderLayout(t.layout,e.proxy(this._init,this)):this._init()},FLBuilderPreview._fontsList={},FLBuilderPreview.prototype={type:"",nodeId:null,classes:{},elements:{},state:null,_savedSettings:null,_styleSheet:null,_styleSheetMedium:null,_styleSheetResponsive:null,_timeout:null,_lastClassName:null,_xhr:null,_init:function(){switch(this.nodeId=e(".fl-builder-settings").data("node"),this._saveSettings(),this._initElementsAndClasses(),this._createSheets(),this._initResponsivePreviews(),this._initDefaultFieldPreviews(),this.type){case"row":this._initRow();break;case"col":this._initColumn();break;case"module":this._initModule()}},_saveSettings:function(){var t=e(".fl-builder-settings-lightbox .fl-builder-settings");this._savedSettings=FLBuilder._getSettings(t)},_settingsHaveChanged:function(){var t=e(".fl-builder-settings-lightbox .fl-builder-settings"),l=FLBuilder._getSettings(t);return JSON.stringify(this._savedSettings)!=JSON.stringify(l)},_initElementsAndClasses:function(){var t;t="row"==this.type?"> .fl-row-content-wrap":"> .fl-"+this.type+"-content",e.extend(this.classes,{settings:".fl-builder-"+this.type+"-settings",settingsHeader:".fl-builder-"+this.type+"-settings .fl-lightbox-header",node:FLBuilder._contentClass+" .fl-node-"+this.nodeId,content:FLBuilder._contentClass+" .fl-node-"+this.nodeId+" > "+t}),e.extend(this.elements,{settings:e(this.classes.settings),settingsHeader:e(this.classes.settingsHeader),node:e(this.classes.node),content:e(this.classes.content)})},_createSheets:function(){this._styleSheet||(this._styleSheet=new FLStyleSheet({id:"fl-builder-preview"})),this._styleSheetMedium||(this._styleSheetMedium=new FLStyleSheet({id:"fl-builder-preview-medium"})),this._styleSheetResponsive||(this._styleSheetResponsive=new FLStyleSheet({id:"fl-builder-preview-responsive"}))},_destroySheets:function(){this._styleSheet&&(this._styleSheet.destroy(),this._styleSheet=null),this._styleSheetMedium&&(this._styleSheetMedium.destroy(),this._styleSheetMedium=null),this._styleSheetResponsive&&(this._styleSheetResponsive.destroy(),this._styleSheetResponsive=null)},updateCSSRule:function(e,t,l){this._styleSheet.updateRule(e,t,l)},delay:function(e,t){this._cancelDelay(),this._timeout=setTimeout(t,e)},_cancelDelay:function(){null!==this._timeout&&clearTimeout(this._timeout)},hexToRgb:function(e){var t=parseInt(e,16),l=t>>16&255,i=t>>8&255,o=255&t;return[l,i,o]},parseFloat:function(e){return isNaN(parseFloat(e))?0:parseFloat(e)},_initResponsivePreviews:function(){FLBuilder.addHook("responsive-editing-switched",e.proxy(this._responsiveEditingSwitched,this))},_destroyResponsivePreviews:function(){FLBuilder.removeHook("responsive-editing-switched")},_responsiveEditingSwitched:function(e,t){"default"==t?(this._styleSheetMedium.disable(),this._styleSheetResponsive.disable()):"medium"==t?(this._styleSheetMedium.enable(),this._styleSheetResponsive.disable()):"responsive"==t&&(this._styleSheetMedium.disable(),this._styleSheetResponsive.enable())},updateResponsiveCSSRule:function(e,t,l){var i=FLBuilderResponsiveEditing._mode,o="default"==i?"":i.charAt(0).toUpperCase()+i.slice(1);this["_styleSheet"+o].updateRule(e,t,l)},_saveState:function(){var t=e("#fl-post-id").val(),l=e('link[href*="/cache/'+t+'"]').attr("href"),i=e('script[src*="/cache/'+t+'"]').attr("src"),o=e(FLBuilder._contentClass).html();this.state={css:l,js:i,html:o}},preview:function(){var t=e(".fl-builder-settings-lightbox .fl-builder-settings"),l=t.attr("data-node"),i=FLBuilder._getSettings(t);this._cancelPreview(),this._xhr=FLBuilder.ajax({action:"render_layout",node_id:l,node_preview:i},e.proxy(this._renderPreview,this))},delayPreview:function(t){var l="undefined"==typeof t?[]:e(t.target).closest("tr").find("th"),i=e(".fl-builder-widget-settings .fl-builder-settings-title"),o=e(".fl-builder-settings .fl-lightbox-header"),s=FLBuilderLayoutConfig.paths.pluginUrl+"img/ajax-loader-small.gif",r=e('<img class="fl-builder-preview-loader" src="'+s+'" />');e(".fl-builder-preview-loader").remove(),l.length>0?l.append(r):i.length>0?i.append(r):o.length>0&&o.append(r),this.delay(1e3,e.proxy(this.preview,this))},_cancelPreview:function(){this._xhr&&(this._xhr.abort(),this._xhr=null)},_renderPreview:function(t){this._xhr=null,FLBuilder._renderLayout(t,e.proxy(this._renderPreviewComplete,this))},_renderPreviewComplete:function(){this._initElementsAndClasses(),e(".fl-builder-preview-loader").remove(),e(FLBuilder._contentClass).trigger("fl-builder.preview-rendered")},revert:function(){this.clear(),this._settingsHaveChanged()&&FLBuilder._renderLayout(this.state)},clear:function(){this._cancelDelay(),this._cancelPreview(),this._destroySheets(),this._destroyResponsivePreviews()},_initNodeTextColor:function(){e.extend(this.elements,{textColor:e(this.classes.settings+" input[name=text_color]"),linkColor:e(this.classes.settings+" input[name=link_color]"),hoverColor:e(this.classes.settings+" input[name=hover_color]"),headingColor:e(this.classes.settings+" input[name=heading_color]")}),this.elements.textColor.on("change",e.proxy(this._textColorChange,this)),this.elements.linkColor.on("change",e.proxy(this._textColorChange,this)),this.elements.hoverColor.on("change",e.proxy(this._textColorChange,this)),this.elements.headingColor.on("change",e.proxy(this._textColorChange,this))},_textColorChange:function(t){var l=this.elements.textColor.val(),i=this.elements.linkColor.val(),o=this.elements.hoverColor.val(),s=this.elements.headingColor.val();i=""===i?l:i,o=""===o?l:o,s=""===s?l:s,this.delay(100,e.proxy(function(){""===l?this.updateCSSRule(this.classes.node,"color","inherit"):this.updateCSSRule(this.classes.node,"color","#"+l),""===i?this.updateCSSRule(this.classes.node+" a","color","inherit"):this.updateCSSRule(this.classes.node+" a","color","#"+i),""===o?this.updateCSSRule(this.classes.node+" a:hover","color","inherit"):this.updateCSSRule(this.classes.node+" a:hover","color","#"+o),""===s?(this.updateCSSRule(this.classes.node+" h1","color","inherit"),this.updateCSSRule(this.classes.node+" h2","color","inherit"),this.updateCSSRule(this.classes.node+" h3","color","inherit"),this.updateCSSRule(this.classes.node+" h4","color","inherit"),this.updateCSSRule(this.classes.node+" h5","color","inherit"),this.updateCSSRule(this.classes.node+" h6","color","inherit"),this.updateCSSRule(this.classes.node+" h1 a","color","inherit"),this.updateCSSRule(this.classes.node+" h2 a","color","inherit"),this.updateCSSRule(this.classes.node+" h3 a","color","inherit"),this.updateCSSRule(this.classes.node+" h4 a","color","inherit"),this.updateCSSRule(this.classes.node+" h5 a","color","inherit"),this.updateCSSRule(this.classes.node+" h6 a","color","inherit")):(this.updateCSSRule(this.classes.node+" h1","color","#"+s),this.updateCSSRule(this.classes.node+" h2","color","#"+s),this.updateCSSRule(this.classes.node+" h3","color","#"+s),this.updateCSSRule(this.classes.node+" h4","color","#"+s),this.updateCSSRule(this.classes.node+" h5","color","#"+s),this.updateCSSRule(this.classes.node+" h6","color","#"+s),this.updateCSSRule(this.classes.node+" h1 a","color","#"+s),this.updateCSSRule(this.classes.node+" h2 a","color","#"+s),this.updateCSSRule(this.classes.node+" h3 a","color","#"+s),this.updateCSSRule(this.classes.node+" h4 a","color","#"+s),this.updateCSSRule(this.classes.node+" h5 a","color","#"+s),this.updateCSSRule(this.classes.node+" h6 a","color","#"+s))},this))},_initNodeBg:function(){e.extend(this.elements,{bgType:e(this.classes.settings+" select[name=bg_type]"),bgColor:e(this.classes.settings+" input[name=bg_color]"),bgColorPicker:e(this.classes.settings+" .fl-picker-bg_color"),bgOpacity:e(this.classes.settings+" input[name=bg_opacity]"),bgImageSrc:e(this.classes.settings+" select[name=bg_image_src]"),bgRepeat:e(this.classes.settings+" select[name=bg_repeat]"),bgPosition:e(this.classes.settings+" select[name=bg_position]"),bgAttachment:e(this.classes.settings+" select[name=bg_attachment]"),bgSize:e(this.classes.settings+" select[name=bg_size]"),bgVideo:e(this.classes.settings+" input[name=bg_video]"),bgVideoFallbackSrc:e(this.classes.settings+" select[name=bg_video_fallback_src]"),bgSlideshowSource:e(this.classes.settings+" select[name=ss_source]"),bgSlideshowPhotos:e(this.classes.settings+" input[name=ss_photos]"),bgSlideshowFeedUrl:e(this.classes.settings+" input[name=ss_feed_url]"),bgSlideshowSpeed:e(this.classes.settings+" input[name=ss_speed]"),bgSlideshowTrans:e(this.classes.settings+" select[name=ss_transition]"),bgSlideshowTransSpeed:e(this.classes.settings+" input[name=ss_transitionDuration]"),bgParallaxImageSrc:e(this.classes.settings+" select[name=bg_parallax_image_src]"),bgOverlayColor:e(this.classes.settings+" input[name=bg_overlay_color]"),bgOverlayOpacity:e(this.classes.settings+" input[name=bg_overlay_opacity]")}),this.elements.bgType.on("change",e.proxy(this._bgTypeChange,this)),this.elements.bgColor.on("change",e.proxy(this._bgColorChange,this)),this.elements.bgOpacity.on("keyup",e.proxy(this._bgOpacityChange,this)),this.elements.bgImageSrc.on("change",e.proxy(this._bgPhotoChange,this)),this.elements.bgRepeat.on("change",e.proxy(this._bgPhotoChange,this)),this.elements.bgPosition.on("change",e.proxy(this._bgPhotoChange,this)),this.elements.bgAttachment.on("change",e.proxy(this._bgPhotoChange,this)),this.elements.bgSize.on("change",e.proxy(this._bgPhotoChange,this)),this.elements.bgSlideshowSource.on("change",e.proxy(this._bgSlideshowChange,this)),this.elements.bgSlideshowPhotos.on("change",e.proxy(this._bgSlideshowChange,this)),this.elements.bgSlideshowFeedUrl.on("keyup",e.proxy(this._bgSlideshowChange,this)),this.elements.bgSlideshowSpeed.on("keyup",e.proxy(this._bgSlideshowChange,this)),this.elements.bgSlideshowTrans.on("change",e.proxy(this._bgSlideshowChange,this)),this.elements.bgSlideshowTransSpeed.on("keyup",e.proxy(this._bgSlideshowChange,this)),this.elements.bgParallaxImageSrc.on("change",e.proxy(this._bgParallaxChange,this)),this.elements.bgOverlayColor.on("change",e.proxy(this._bgOverlayChange,this)),this.elements.bgOverlayOpacity.on("keyup",e.proxy(this._bgOverlayChange,this))},_bgTypeChange:function(e){var t=this.elements.bgType.val();this.elements.node.removeClass("fl-row-bg-video"),this.elements.node.removeClass("fl-row-bg-slideshow"),this.elements.node.removeClass("fl-row-bg-parallax"),this.elements.node.find(".fl-bg-video").remove(),this.elements.node.find(".fl-bg-slideshow").remove(),this.elements.content.css("background-image",""),this.updateCSSRule(this.classes.content,{"background-color":"transparent","background-image":"none"}),"none"==t?this._bgOverlayClear():"color"==t?(this.elements.bgColor.trigger("change"),this._bgOverlayClear()):"photo"==t?(this.elements.bgColor.trigger("change"),this.elements.bgImageSrc.trigger("change")):"video"==t?(this.elements.bgColor.trigger("change"),""!=this.elements.bgVideo.val()&&this.preview()):"slideshow"==t?(this.elements.bgColor.trigger("change"),this._bgSlideshowChange()):"parallax"==t&&(this.elements.bgColor.trigger("change"),this.elements.bgParallaxImageSrc.trigger("change"))},_bgColorChange:function(t){var l,i,o;""===this.elements.bgColor.val()||isNaN(this.elements.bgOpacity.val())?this.updateCSSRule(this.classes.content,"background-color","transparent"):(l=this.hexToRgb(this.elements.bgColor.val()),i=this.parseFloat(this.elements.bgOpacity.val())/100,o="rgba("+l.join()+", "+i+")",this.delay(100,e.proxy(function(){this.updateCSSRule(this.classes.content,"background-color",o)},this)))},_bgOpacityChange:function(e){this.elements.bgColor.trigger("change")},_bgPhotoChange:function(e){this.elements.bgImageSrc.val()?this.updateCSSRule(this.classes.content,{"background-image":"url("+this.elements.bgImageSrc.val()+")","background-repeat":this.elements.bgRepeat.val(),"background-position":this.elements.bgPosition.val(),"background-attachment":this.elements.bgAttachment.val(),"background-size":this.elements.bgSize.val()}):this.updateCSSRule(this.classes.content,{"background-image":"none"})},_bgSlideshowChange:function(t){var l=this.elements,i=l.bgSlideshowSource.val(),o=l.bgSlideshowPhotos.val(),s=l.bgSlideshowFeedUrl.val(),r=l.bgSlideshowSpeed.val(),n=l.bgSlideshowTransSpeed.val();"wordpress"==i&&""===o||"smugmug"==i&&""===s||isNaN(parseInt(r))||isNaN(parseInt(n))||this.delay(500,e.proxy(this.preview,this))},_bgParallaxChange:function(e){this.elements.bgParallaxImageSrc.val()&&this.updateCSSRule(this.classes.content,{"background-image":"url("+this.elements.bgParallaxImageSrc.val()+")","background-repeat":"no-repeat","background-position":"center center","background-attachment":"fixed","background-size":"cover"})},_bgOverlayChange:function(t){var l,i,o;""===this.elements.bgOverlayColor.val()||isNaN(this.elements.bgOverlayOpacity.val())?(this.elements.node.removeClass("fl-row-bg-overlay"),this.elements.node.removeClass("fl-col-bg-overlay"),this.updateCSSRule(this.classes.content+":after","background-color","transparent")):(l=this.hexToRgb(this.elements.bgOverlayColor.val()),i=this.parseFloat(this.elements.bgOverlayOpacity.val())/100,o="rgba("+l.join()+", "+i+")",this.delay(100,e.proxy(function(){this.elements.node.hasClass("fl-col")?this.elements.node.addClass("fl-col-bg-overlay"):this.elements.node.addClass("fl-row-bg-overlay"),this.updateCSSRule(this.classes.content+":after","background-color",o)},this)))},_bgOverlayClear:function(e){this.elements.bgOverlayColor.prev(".fl-color-picker-clear").trigger("click")},_initNodeBorder:function(){e.extend(this.elements,{borderType:e(this.classes.settings+" select[name=border_type]"),borderColor:e(this.classes.settings+" input[name=border_color]"),borderColorPicker:e(this.classes.settings+" .fl-picker-border_color"),borderOpacity:e(this.classes.settings+" input[name=border_opacity]")}),this.elements.borderType.on("change",e.proxy(this._borderTypeChange,this)),this.elements.borderColor.on("change",e.proxy(this._borderColorChange,this)),this.elements.borderOpacity.on("keyup",e.proxy(this._borderOpacityChange,this))},_borderTypeChange:function(e){var t=this.elements.borderType.val();this.updateCSSRule(this.classes.content,{"border-style":""===t?"none":t}),this.elements.borderColor.trigger("change"),this.elements.borderTop.trigger("keyup")},_borderColorChange:function(t){var l,i,o;""===this.elements.borderColor.val()||isNaN(this.elements.borderOpacity.val())?this.updateCSSRule(this.classes.content,"border-color","transparent"):(l=this.hexToRgb(this.elements.borderColor.val()),i=parseInt(this.elements.borderOpacity.val())/100,o="rgba("+l.join()+", "+i+")",this.delay(100,e.proxy(function(){this.updateCSSRule(this.classes.content,"border-color",o)},this)))},_borderOpacityChange:function(e){this.elements.borderColor.trigger("change")},_initNodeClassName:function(){e.extend(this.elements,{className:e(this.classes.settings+" input[name=class]")}),this.elements.className.on("keyup",e.proxy(this._classNameChange,this)),this._lastClassName=this.elements.className.val()},_classNameChange:function(e){var t=this.elements.className.val();null!==this._lastClassName&&this.elements.node.removeClass(this._lastClassName),this.elements.node.addClass(t),this._lastClassName=t},_initResponsiveDimensions:function(t){var l={},i=["Top","Bottom","Left","Right"],o=["","Medium","Responsive"],s=this.classes.settings,r="",n="",a=null,d=null;for(a=0;a<i.length;a++)for(d=0;d<o.length;d++)r=t+i[a]+o[d],n=t+"_"+i[a].toLowerCase(),""!=o[d]&&(n+="_"+o[d].toLowerCase()),l[r]=e(s+" input[name="+n+"]"),l[r].on("keyup",e.proxy(this._responsiveDimensionChange,this,t));e.extend(this.elements,l)},_getDimensions:function(e){for(var t=FLBuilderResponsiveEditing._mode,l=["Top","Bottom","Left","Right"],i="default"==t?"":t.charAt(0).toUpperCase()+t.slice(1),o={},s=0;s<l.length;s++)o[l[s].toLowerCase()]=this.elements[e+l[s]+i].val();return this._normalizeDimensionValues(o,e)},_responsiveDimensionChange:function(t){var l=this._getDimensions(t),i={},o="border"==t;e.each(l,function(e,l){i[t+"-"+e+(o?"-width":"")]=l}),this.updateResponsiveCSSRule(this.classes.content,i),this._positionAbsoluteBgs()},_normalizeDimensionValues:function(t,l){var i=this,o=FLBuilderResponsiveEditing._mode,s="default"==o?"":o.charAt(0).toUpperCase()+o.slice(1),l=l.split("-");return"undefined"==typeof l[1]?l[1]="":l[1]=l[1].charAt(0).toUpperCase()+l[1].slice(1),e.map(t,function(e,o){if(e=e.toLowerCase().replace(/[^a-z0-9%.\-]/g,""),""===e){var r=l[0]+o.charAt(0).toUpperCase()+o.slice(1)+l[1]+s,n=i.elements[r].attr("placeholder");n&&(e=n)}null===e||""===e||isNaN(e)||(e=parseFloat(e)+"px"),t[o]=e}),t},_positionAbsoluteBgs:function(){var t=this.elements.node.find(".fl-bg-slideshow"),l=this.elements.node.find(".fl-bg-video"),i=null,o=null,s={top:0,bottom:0,left:0,right:0};(t.length>0||l.length>0)&&(i=this._getDimensions("margin"),o=this._getDimensions("border"),e.map(s,function(e,t){i[t]&&o[t]?s[t]="calc("+i[t]+"+"+o[t]+")":i[t]?s[t]=i[t]:o[t]&&(s[t]=o[t])}),t.length>0&&(this.updateCSSRule(this.classes.node+" .fl-bg-slideshow",s),FLBuilder._resizeLayout()),l.length>0&&this.updateCSSRule(this.classes.node+" .fl-bg-video",s))},_initRow:function(){e.extend(this.elements,{width:e(this.classes.settings+" select[name=width]"),contentWidth:e(this.classes.settings+" select[name=content_width]"),height:e(this.classes.settings+" select[name=full_height]"),align:e(this.classes.settings+" select[name=content_alignment]")}),this.elements.width.on("change",e.proxy(this._rowWidthChange,this)),this.elements.contentWidth.on("change",e.proxy(this._rowContentWidthChange,this)),this.elements.height.on("change",e.proxy(this._rowHeightChange,this)),this.elements.align.on("change",e.proxy(this._rowHeightChange,this)),this._initNodeTextColor(),this._initNodeBg(),this._initNodeClassName(),this._initNodeBorder(),this._initResponsiveDimensions("border"),this._initResponsiveDimensions("margin"),this._initResponsiveDimensions("padding")},_rowWidthChange:function(e){var t=this.elements.node;"full"==this.elements.width.val()?(t.removeClass("fl-row-fixed-width"),t.addClass("fl-row-full-width")):(t.removeClass("fl-row-full-width"),t.addClass("fl-row-fixed-width"))},_rowHeightChange:function(e){var t=this.elements.node;t.removeClass("fl-row-align-top"),t.removeClass("fl-row-align-center"),"full"==this.elements.height.val()?(t.addClass("fl-row-full-height"),t.addClass("fl-row-align-"+this.elements.align.val())):t.removeClass("fl-row-full-height")},_rowContentWidthChange:function(e){var t=this.elements.content.find(".fl-row-content");"full"==this.elements.contentWidth.val()?(t.removeClass("fl-row-fixed-width"),t.addClass("fl-row-full-width")):(t.removeClass("fl-row-full-width"),t.addClass("fl-row-fixed-width"))},_initColumn:function(){e.extend(this.elements,{size:e(this.classes.settings+" input[name=size]"),columnHeight:e(this.classes.settings+" select[name=equal_height]"),columnAlign:e(this.classes.settings+" select[name=content_alignment]"),responsiveOrder:e(this.classes.settings+" select[name=responsive_order]")}),this.elements.size.on("keyup",e.proxy(this._colSizeChange,this)),this.elements.columnHeight.on("change",e.proxy(this._colHeightChange,this)),this.elements.columnAlign.on("change",e.proxy(this._colHeightChange,this)),this.elements.responsiveOrder.on("change",e.proxy(this._colResponsiveOrder,this)),this._initNodeTextColor(),this._initNodeBg(),this._initNodeClassName(),this._initNodeBorder(),this._initResponsiveDimensions("border"),this._initResponsiveDimensions("margin"),this._initResponsiveDimensions("padding")},_colSizeChange:function(){var t=8,l=100-t,i=parseFloat(this.elements.size.val()),o=this.elements.node.prev(".fl-col"),s=this.elements.node.next(".fl-col"),r=0===s.length?o:s,n=this.elements.node.siblings(".fl-col"),a=0;0===n.length||isNaN(i)||(n.each(function(){e(this).data("node")!=r.data("node")&&(l-=parseFloat(e(this)[0].style.width),a+=parseFloat(e(this)[0].style.width))}),i<t&&(i=t),i>l&&(i=l),r.css("width",100-a-i+"%"),this.elements.node.css("width",i+"%"))},_colHeightChange:function(){var e=this.elements.node.parent(".fl-col-group");e.removeClass("fl-col-group-align-top"),e.removeClass("fl-col-group-align-center"),e.removeClass("fl-col-group-align-bottom"),"yes"==this.elements.columnHeight.val()?(e.addClass("fl-col-group-equal-height"),e.addClass("fl-col-group-align-"+this.elements.columnAlign.val())):e.removeClass("fl-col-group-equal-height")},_colResponsiveOrder:function(){var e=this.elements.node.parent(".fl-col-group");"reversed"==this.elements.responsiveOrder.val()?e.addClass("fl-col-group-responsive-reversed"):e.removeClass("fl-col-group-responsive-reversed")},_initModule:function(){this._initNodeClassName(),this._initResponsiveDimensions("margin");
2
+ },_initDefaultFieldPreviews:function(){for(var e=this.elements.settings.find(".fl-field"),t=null,l=null,i=0;i<e.length;i++)t=e.eq(i),l=t.data("preview"),"refresh"==l.type&&this._initFieldRefreshPreview(t),"text"==l.type&&this._initFieldTextPreview(t),"css"==l.type&&this._initFieldCSSPreview(t),"widget"==l.type&&this._initFieldWidgetPreview(t),"font"==l.type&&this._initFieldFontPreview(t)},_initFieldRefreshPreview:function(t){var l=t.data("type"),i=t.data("preview"),o=e.proxy(this.delayPreview,this);switch(l){case"text":t.find("input[type=text]").on("keyup",o);break;case"textarea":t.find("textarea").on("keyup",o);break;case"select":t.find("select").on("change",o);break;case"color":t.find(".fl-color-picker-value").on("change",o);break;case"photo":t.find("select").on("change",o);break;case"multiple-photos":t.find("input").on("change",o);break;case"photo-sizes":t.find("select").on("change",o);break;case"video":t.find("input").on("change",o);break;case"multiple-audios":t.find("input").on("change",o);break;case"icon":t.find("input").on("change",o);break;case"form":t.delegate("input","change",o);break;case"editor":this._addTextEditorCallback(t,i);break;case"code":t.find("textarea").on("change",o);break;case"post-type":t.find("select").on("change",o);break;case"suggest":t.find(".as-values").on("change",o);break;case"unit":t.find("input[type=number]").on("keyup",o)}},_initFieldTextPreview:function(t){var l=t.data("type"),i=t.data("preview"),o=e.proxy(this._previewText,this,i);switch(l){case"text":t.find("input[type=text]").on("keyup",o);break;case"unit":t.find("input[type=number]").on("keyup",o);break;case"textarea":t.find("textarea").on("keyup",o);break;case"code":t.find("textarea").on("change",o);break;case"editor":this._addTextEditorCallback(t,i)}},_previewText:function(t,l){var i=this.elements.node.find(t.selector),o=e("<div>"+e(l.target).val()+"</div>");i.length>0&&(o.find("script").remove(),i.html(o.html()))},_previewTextEditor:function(t,l,i){var o=this.elements.node.find(t.selector),s="undefined"!=typeof tinyMCE?tinyMCE.get(l):null,r=e("#"+l),n="";o.length>0&&(n=e(s&&"none"==r.css("display")?"<div>"+s.getContent()+"</div>":"undefined"==typeof switchEditors||"undefined"==typeof switchEditors.wpautop?"<div>"+r.val()+"</div>":"<div>"+switchEditors.wpautop(r.val())+"</div>"),n.find("script").remove(),o.html(n.html()))},_addTextEditorCallback:function(t,l){var i=t.find("textarea.wp-editor-area").attr("id"),o=null;if("refresh"==l.type)o=e.proxy(this.delayPreview,this);else{if("text"!=l.type)return;o=e.proxy(this._previewTextEditor,this,l,i)}e("#"+i).on("keyup",o),"undefined"!=typeof tinyMCE&&(editor=tinyMCE.get(i),editor.on("change",o),editor.on("keyup",o))},_initFieldFontPreview:function(t){var l=t.data("type"),i=t.data("preview");i.id=t.attr("id");var o=e.proxy(this._previewFont,this,i);"font"==l&&t.find(".fl-font-field").on("change","select",o)},_previewFont:function(t,l){var i=e(l.delegateTarget),o=i.find(".fl-font-field-font"),s=e(o).find(":selected"),r=s.parent().attr("label"),n=i.find(".fl-font-field-weight"),a=t.id+"-"+this.nodeId,d=this._getPreviewSelector(this.classes.node,t.selector);"Google"==r&&this._buildFontStylesheet(a,o.val(),n.val()),"Default"==o.val()?(this.updateCSSRule(d,"font-family",""),this.updateCSSRule(d,"font-weight","")):(this.updateCSSRule(d,"font-family",o.val()),this.updateCSSRule(d,"font-weight",n.val()))},_buildFontStylesheet:function(t,l,i){var o=FLBuilderConfig.googleFontsUrl,s="",r={},n={};r[l]=[i],FLBuilderPreview._fontsList[t]=r,Object.keys(FLBuilderPreview._fontsList).forEach(function(e){var t=FLBuilderPreview._fontsList[e];Object.keys(t).forEach(function(e){var l=t[e];n[e]=n[e]||[],l=l.filter(function(t){return n[e].indexOf(t)<0}),n[e]=n[e].concat(l)})}),e.each(n,function(e,t){s+=e+":"+t.join()+"|"}),s=o+s.slice(0,-1).replace(" ","+"),e("#fl-builder-google-fonts-preview").length<1?e("<link>").attr("id","fl-builder-google-fonts-preview").attr("type","text/css").attr("rel","stylesheet").attr("href",s).appendTo("head"):e("#fl-builder-google-fonts-preview").attr("href",s)},_initFieldCSSPreview:function(e){var t=e.data("preview"),l=null;if("undefined"!=typeof t.rules)for(l in t.rules)this._initFieldCSSPreviewCallback(e,t.rules[l]);else this._initFieldCSSPreviewCallback(e,t)},_initFieldCSSPreviewCallback:function(t,l){switch(t.data("type")){case"text":t.find("input[type=text]").on("keyup",e.proxy(this._previewCSS,this,l));break;case"unit":t.find("input[type=number]").on("keyup",e.proxy(this._previewCSS,this,l));break;case"select":t.find("select").on("change",e.proxy(this._previewCSS,this,l));break;case"color":t.find(".fl-color-picker-value").on("change",e.proxy(this._previewColor,this,l))}},_previewCSS:function(t,l){var i=this._getPreviewSelector(this.classes.node,t.selector),o=t.property,s="undefined"==typeof t.unit?"":t.unit,r=e(l.target),n=r.val();"%"==s?n=parseInt(n)/100:n+=s,r.closest(".fl-field-responsive-setting").length?this.updateResponsiveCSSRule(i,o,n):this.updateCSSRule(i,o,n)},_previewColor:function(t,l){var i=this._getPreviewSelector(this.classes.node,t.selector),o=e(l.target),s=o.val(),r=""===s?"inherit":"#"+s;o.closest(".fl-field-responsive-setting").length?this.updateResponsiveCSSRule(i,t.property,r):this.updateCSSRule(i,t.property,r)},_initFieldWidgetPreview:function(t){var l=e.proxy(this.delayPreview,this);t.find("input").on("keyup",l),t.find("input[type=checkbox]").on("click",l),t.find("textarea").on("keyup",l),t.find("select").on("change",l)},_getPreviewSelector:function(e,t){for(var l="",i=t.split(","),o=0;o<i.length;o++)l+=e+" "+i[o],o!=i.length-1&&(l+=", ");return l}}}(jQuery),function(e){FLBuilderResponsiveEditing={_mode:"default",_fields:{},refreshPreview:function(){e(".fl-responsive-preview").length&&FLBuilderForcedMediaQueries.update()},_init:function(){this._bind()},_bind:function(){FLBuilder.addHook("responsive-editing-switched",this._previewSpacingFields),FLBuilder.addHook("settings-form-init",this._initSettingsForms),FLBuilder.addHook("settings-lightbox-closed",this._clearPreview),e("body").delegate(".fl-field-responsive-toggle","click",this._settingToggleClicked)},_switchTo:function(t,l){var i=e("body"),o=e(FLBuilder._contentClass),s=e(".fl-responsive-preview"),r=e(".fl-responsive-preview-mask"),n=e(".fl-content-placeholder"),a=null;if(FLBuilderResponsiveEditing._mode=t,"default"==t){if(0===n.length)return;n.after(o),n.remove(),s.remove(),r.remove()}else 0===s.length?(o.after('<div class="fl-content-placeholder"></div>'),i.prepend(wp.template("fl-responsive-preview")()),e(".fl-responsive-preview").addClass("fl-preview-"+t),e(".fl-responsive-preview-content").append(o)):(s.removeClass("fl-preview-responsive fl-preview-medium"),s.addClass("fl-preview-"+t));"responsive"==t?(a=FLBuilderConfig.global.responsive_breakpoint>=320?320:FLBuilderConfig.global.responsive_breakpoint,o.width(a),FLBuilderForcedMediaQueries.update(a,l)):"medium"==t?(a=FLBuilderConfig.global.medium_breakpoint>=769?769:FLBuilderConfig.global.medium_breakpoint,o.width(a),FLBuilderForcedMediaQueries.update(a,l)):(o.width(""),FLBuilderForcedMediaQueries.update(1e4,l)),this._setContentBackgroundColor(),FLBuilder._resizeLayout(),FLBuilder.triggerHook("responsive-editing-switched",t)},_setContentBackgroundColor:function(){var t=e(FLBuilder._contentClass),l=e(".fl-responsive-preview"),i=e(".fl-content-placeholder"),o=i.parents(),s="#fff",r=0;if(0===l.length)t.css("background-color","");else{for(;r<o.length&&(s=o.eq(r).css("background-color"),"rgba(0, 0, 0, 0)"==s);r++);t.css("background-color",s)}},_switchToAndScroll:function(t){var l=e(".fl-builder-settings").data("node"),i=void 0===l?void 0:e(".fl-node-"+l);FLBuilderResponsiveEditing._switchTo(t,function(){void 0!==i&&i&&setTimeout(function(){var t=e(window),l=e(".fl-responsive-preview-content");!l.length||t.height()<l.height()?e("html, body").animate({scrollTop:i.offset().top-100},250):scrollTo(0,0)},250)})},_clearPreview:function(){FLBuilderResponsiveEditing._switchToAndScroll("default")},_settingToggleClicked:function(){var t=e(this),l=t.data("mode");l="default"==l?"medium":"medium"==l?"responsive":"default",FLBuilderResponsiveEditing._switchAllSettingsTo(l),t.siblings(".fl-field-responsive-setting:visible").find("input").focus()},_switchAllSettingsTo:function(t){var l="dashicons-desktop dashicons-tablet dashicons-smartphone";e(".fl-field-responsive-toggle").removeClass(l),e(".fl-field-responsive-setting").hide(),l="default"==t?"dashicons-desktop":"medium"==t?"dashicons-tablet":"dashicons-smartphone",e(".fl-field-responsive-toggle").addClass(l).data("mode",t),e(".fl-field-responsive-setting-"+t).css("display","inline-block"),FLBuilderResponsiveEditing._switchToAndScroll(t)},_initSettingsForms:function(){var e=FLBuilderResponsiveEditing;Number(FLBuilderConfig.global.responsive_enabled)&&(FLBuilderResponsiveEditing._fields={},e._initFields("unit","input","keyup",e._spacingFieldKeyup,["margin_top","margin_bottom","margin_left","margin_right","padding_top","padding_bottom","padding_left","padding_right"]),e._initFields("unit","input","keyup",e._textFieldKeyup)),e._switchAllSettingsTo(e._mode)},_initFields:function(t,l,i,o,s){var r=e(".fl-builder-settings"),n=r.find(".fl-field").has(".fl-field-responsive-setting"),a=null,d=null,u=0,c=0;for("object"!=typeof this._fields[t]&&(this._fields[t]={});u<n.length;u++)if(a=n.eq(u),d=a.attr("id").replace("fl-field-",""),!("object"==typeof s&&e.inArray(d,s)<0)&&t==a.attr("data-type")&&void 0===a.attr("data-responsive-init")){this._fields[t][d]={"default":a.find(".fl-field-responsive-setting-default "+l),medium:a.find(".fl-field-responsive-setting-medium "+l),responsive:a.find(".fl-field-responsive-setting-responsive "+l)};for(c in this._fields[t][d])this._fields[t][d][c].on(i,o);this._fields[t][d]["default"].trigger(i),a.attr("data-responsive-init",1)}},_getFields:function(t){var l=e(t).closest(".fl-field");return type=l.attr("data-type"),name=l.attr("id").replace("fl-field-",""),this._fields[type][name]},_textFieldKeyup:function(){var e=FLBuilderResponsiveEditing._getFields(this),t=e["default"].attr("placeholder"),l=e["default"].val(),i=e.medium.val();""==l?e.medium.attr("placeholder",void 0===t?"":t):e.medium.attr("placeholder",l),""==i?e.responsive.attr("placeholder",e.medium.attr("placeholder")):e.responsive.attr("placeholder",i)},_spacingFieldKeyup:function(){var t=e(".fl-builder-settings"),l="row",i=e(this).closest(".fl-field").attr("id").replace("fl-field-","").split("_"),o=i[0],s=i[1],r=FLBuilderResponsiveEditing._fields.unit[o+"_"+s],n=FLBuilderConfig.global,a=null,d=r["default"].val(),u=null,c=r.medium.val(),f=null,h=(r.responsive.val(),null),p=null,g=null;t.hasClass("fl-builder-row-settings")?l="row":t.hasClass("fl-builder-col-settings")?l="col":t.hasClass("fl-builder-module-settings")&&(l="module"),e.extend(n,{col_margins:0,col_margins_medium:"",col_margins_responsive:"",col_padding:0,col_padding_medium:"",col_padding_responsive:""}),a=l+"_"+o+("margin"==o?"s":""),u=n[a],f=n[a+"_medium"],h=n[a+"_responsive"],""==f&&(""!=d?r.medium.attr("placeholder",d):""!=u&&r.medium.attr("placeholder",u)),""==h&&("module"==l&&Number(n.auto_spacing)?(p=""==f?Number(u):f,g=""==c?Number(d):c,""!=g&&(g>p||g<0)?r.responsive.attr("placeholder",p):""!=g?r.responsive.attr("placeholder",g):r.responsive.attr("placeholder",p)):(!Number(n.auto_spacing)||"padding"==o&&"top|bottom".indexOf(s)>-1)&&(""!=c?r.responsive.attr("placeholder",c):""!=f?r.responsive.attr("placeholder",f):""!=d?r.responsive.attr("placeholder",d):""!=u&&r.responsive.attr("placeholder",u)))},_previewSpacingFields:function(){var t=FLBuilderResponsiveEditing._mode,l=e(".fl-builder-settings"),i=null,o=null;if(0!==l.length&&void 0!==l.attr("data-node")){i=FLBuilderResponsiveEditing._fields.unit;for(o in i)i[o][t].trigger("keyup")}}},e(function(){FLBuilderResponsiveEditing._init()})}(jQuery),function(e){var t={init:function(){var t=e("body");t.delegate(".fl-builder-service-select","change",this._serviceChange),t.delegate(".fl-builder-service-connect-button","click",this._connectClicked),t.delegate(".fl-builder-service-account-select","change",this._accountChange),t.delegate(".fl-builder-service-account-delete","click",this._accountDeleteClicked),t.delegate(".fl-builder-campaign-monitor-client-select","change",this._campaignMonitorClientChange),t.delegate(".fl-builder-mailchimp-list-select","change",this._mailChimpListChange),t.delegate(".fl-builder-activecampaign-list_type-select","change",this._activeCampaignChange)},_startSettingsLoading:function(t){var l=e(".fl-builder-settings"),i=t.closest(".fl-builder-service-settings"),o=e(".fl-builder-service-error");l.append('<div class="fl-builder-loading"></div>'),i.addClass("fl-builder-service-settings-loading"),o.remove()},_finishSettingsLoading:function(){var t=e(".fl-builder-settings"),l=e(".fl-builder-service-settings-loading");t.find(".fl-builder-loading").remove(),l.removeClass("fl-builder-service-settings-loading")},_serviceChange:function(){var l=e(".fl-builder-settings").data("node"),i=e(this),o=i.closest("tr"),s=i.val();o.siblings("tr.fl-builder-service-account-row").remove(),o.siblings("tr.fl-builder-service-connect-row").remove(),o.siblings("tr.fl-builder-service-field-row").remove(),e(".fl-builder-service-error").remove(),""!==s&&(t._startSettingsLoading(i),FLBuilder.ajax({action:"render_service_settings",node_id:l,service:s},t._serviceChangeComplete))},_serviceChangeComplete:function(l){var i=JSON.parse(l),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-service-select-row");s.after(i.html),t._addAccountDelete(o),t._finishSettingsLoading()},_connectClicked:function(){for(var l=e(".fl-builder-settings").data("node"),i=e(this).closest(".fl-builder-service-settings"),o=i.find(".fl-builder-service-select"),s=i.find(".fl-builder-service-connect-row"),r=i.find(".fl-builder-service-connect-input"),n=null,a=null,d=0,u={action:"connect_service",node_id:l,service:o.val(),fields:{}};d<r.length;d++)n=r.eq(d),a=n.attr("name"),u.fields[a]=n.val();s.hide(),t._startSettingsLoading(o),FLBuilder.ajax(u,t._connectComplete)},_connectComplete:function(l){var i=JSON.parse(l),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-service-select-row"),r=o.find(".fl-builder-service-select"),n=o.find(".fl-builder-service-account-row"),a=o.find(".fl-builder-service-account-select"),d=o.find(".fl-builder-service-connect-row");i.error?(d.show(),0===a.length?r.after('<div class="fl-builder-service-error">'+i.error+"</div>"):a.after('<div class="fl-builder-service-error">'+i.error+"</div>")):(d.remove(),n.remove(),s.after(i.html)),t._addAccountDelete(o),t._finishSettingsLoading()},_accountChange:function(){var l=e(".fl-builder-settings").data("node"),i=e(this).closest(".fl-builder-service-settings"),o=i.find(".fl-builder-service-select"),s=i.find(".fl-builder-service-account-select"),r=i.find(".fl-builder-service-connect-row"),n=i.find("tr.fl-builder-service-field-row"),a=e(".fl-builder-service-error"),d=s.val(),u=null;r.remove(),n.remove(),a.remove(),"add_new_account"==d?u={action:"render_service_settings",node_id:l,service:o.val(),add_new:!0}:""!==d&&(u={action:"render_service_fields",node_id:l,service:o.val(),account:d}),u&&(t._startSettingsLoading(o),FLBuilder.ajax(u,t._accountChangeComplete)),t._addAccountDelete(i)},_accountChangeComplete:function(l){var i=JSON.parse(l),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-service-account-row");s.after(i.html),t._finishSettingsLoading()},_addAccountDelete:function(e){var t=e.find(".fl-builder-service-account-select");t.length>0&&(e.find(".fl-builder-service-account-delete").remove(),""!==t.val()&&"add_new_account"!=t.val()&&t.after('<a href="javascript:void(0);" class="fl-builder-service-account-delete">'+FLBuilderStrings.deleteAccount+"</a>"))},_accountDeleteClicked:function(){var l=e(this).closest(".fl-builder-service-settings"),i=l.find(".fl-builder-service-select"),o=l.find(".fl-builder-service-account-select");confirm(FLBuilderStrings.deleteAccountWarning)&&(FLBuilder.ajax({action:"delete_service_account",service:i.val(),account:o.val()},t._accountDeleteComplete),t._startSettingsLoading(o))},_accountDeleteComplete:function(){var l=e(".fl-builder-service-settings-loading"),i=l.find(".fl-builder-service-select");t._finishSettingsLoading(),i.trigger("change")},_campaignMonitorClientChange:function(){var l=e(".fl-builder-settings").data("node"),i=e(this).closest(".fl-builder-service-settings"),o=i.find(".fl-builder-service-select"),s=i.find(".fl-builder-service-account-select"),r=e(this),n=i.find(".fl-builder-service-list-select"),a=r.val();0!==n.length&&n.closest("tr").remove(),""!==a&&(t._startSettingsLoading(o),FLBuilder.ajax({action:"render_service_fields",node_id:l,service:o.val(),account:s.val(),client:a},t._campaignMonitorClientChangeComplete))},_campaignMonitorClientChangeComplete:function(l){var i=JSON.parse(l),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-campaign-monitor-client-select");s.closest("tr").after(i.html),t._finishSettingsLoading()},_mailChimpListChange:function(){var l=e(".fl-builder-settings").data("node"),i=e(this).closest(".fl-builder-service-settings"),o=i.find(".fl-builder-service-select"),s=i.find(".fl-builder-service-account-select"),r=i.find(".fl-builder-service-list-select");e(".fl-builder-mailchimp-group-select").closest("tr").remove(),""!==r.val()&&(t._startSettingsLoading(o),FLBuilder.ajax({action:"render_service_fields",node_id:l,service:o.val(),account:s.val(),list_id:r.val()},t._mailChimpListChangeComplete))},_mailChimpListChangeComplete:function(l){var i=JSON.parse(l),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-service-list-select");s.closest("tr").after(i.html),t._finishSettingsLoading()},_activeCampaignChange:function(){var l=e(".fl-builder-settings").data("node"),i=e(this).closest(".fl-builder-service-settings"),o=i.find(".fl-builder-service-select"),s=i.find(".fl-builder-service-account-select"),r=i.find(".fl-builder-service-list-select");list_type=i.find('select[name="list_type"]'),0!==r.length&&r.closest("tr").remove(),""!==list_type.val()&&(t._startSettingsLoading(o),FLBuilder.ajax({action:"render_service_fields",node_id:l,service:o.val(),account:s.val(),list_type:list_type.val()},t._activeCampaignTypeChangeComplete))},_activeCampaignTypeChangeComplete:function(l){var i=JSON.parse(l),o=e(".fl-builder-service-settings-loading"),s=o.find(".fl-builder-service-field-row");s.after(i.html),t._finishSettingsLoading()}};e(function(){t.init()})}(jQuery),function(e){FLBuilderTour={_tour:null,start:function(){FLBuilderTour._tour?FLBuilderTour._tour.restart():(FLBuilderTour._tour=new Tour(FLBuilderTour._config()),FLBuilderTour._tour.init()),FLBuilderTour._tour.start()},_config:function(){var t={storage:!1,onStart:FLBuilderTour._onStart,onPrev:FLBuilderTour._onPrev,onNext:FLBuilderTour._onNext,onEnd:FLBuilderTour._onEnd,template:'<div class="popover" role="tooltip"> <i class="fa fa-times" data-role="end"></i> <div class="arrow"></div> <h3 class="popover-title"></h3> <div class="popover-content"></div> <div class="popover-navigation clearfix"> <button class="fl-builder-button fl-builder-button-primary fl-builder-tour-next" data-role="next">'+FLBuilderStrings.tourNext+"</button> </div> </div>",steps:[{animation:!1,element:".fl-builder-bar",placement:"bottom",title:FLBuilderStrings.tourTemplatesTitle,content:FLBuilderStrings.tourTemplates,onShown:function(){0===e(".fl-template-selector").length?(e(".popover[class*=tour-]").css("visibility","hidden"),FLBuilder._showTemplateSelector()):FLBuilderTour._templateSelectorLoaded()}},{animation:!1,element:"#fl-builder-blocks-rows .fl-builder-blocks-section-title",placement:"left",title:FLBuilderStrings.tourAddRowsTitle,content:FLBuilderStrings.tourAddRows,onShow:function(){FLBuilderTour._dimSection("body"),FLBuilderTour._dimSection(".fl-builder-bar"),FLBuilder._showPanel(),e(".fl-template-selector .fl-builder-settings-cancel").trigger("click"),e("#fl-builder-blocks-rows .fl-builder-blocks-section-title").trigger("click")}},{animation:!1,element:"#fl-builder-blocks-basic .fl-builder-blocks-section-title",placement:"left",title:FLBuilderStrings.tourAddContentTitle,content:FLBuilderStrings.tourAddContent,onShow:function(){FLBuilderTour._dimSection("body"),FLBuilderTour._dimSection(".fl-builder-bar"),FLBuilder._showPanel(),e("#fl-builder-blocks-basic .fl-builder-blocks-section-title").trigger("click"),e(".fl-row").eq(0).trigger("mouseleave"),e(".fl-module").eq(0).trigger("mouseleave")}},{animation:!1,element:".fl-row:first-of-type",placement:"top",title:FLBuilderStrings.tourEditContentTitle,content:FLBuilderStrings.tourEditContent,onShow:function(){FLBuilderTour._dimSection(".fl-builder-bar"),FLBuilder._closePanel(),e(".fl-row").eq(0).trigger("mouseenter"),e(".fl-module").eq(0).trigger("mouseenter")}},{animation:!1,element:".fl-row:first-of-type .fl-module-overlay .fl-block-overlay-actions",placement:"top",title:FLBuilderStrings.tourEditContentTitle,content:FLBuilderStrings.tourEditContent2,onShow:function(){FLBuilderTour._dimSection(".fl-builder-bar"),FLBuilder._closePanel(),e(".fl-row").eq(0).trigger("mouseenter"),e(".fl-module").eq(0).trigger("mouseenter")}},{animation:!1,element:".fl-builder-add-content-button",placement:"bottom",title:FLBuilderStrings.tourAddContentButtonTitle,content:FLBuilderStrings.tourAddContentButton,onShow:function(){FLBuilderTour._dimSection("body"),e(".fl-row").eq(0).trigger("mouseleave"),e(".fl-module").eq(0).trigger("mouseleave")}},{animation:!1,element:".fl-builder-templates-button",placement:"bottom",title:FLBuilderStrings.tourTemplatesButtonTitle,content:FLBuilderStrings.tourTemplatesButton,onShow:function(){FLBuilderTour._dimSection("body")}},{animation:!1,element:".fl-builder-tools-button",placement:"bottom",title:FLBuilderStrings.tourToolsButtonTitle,content:FLBuilderStrings.tourToolsButton,onShow:function(){FLBuilderTour._dimSection("body")}},{animation:!1,element:".fl-builder-done-button",placement:"bottom",title:FLBuilderStrings.tourDoneButtonTitle,content:FLBuilderStrings.tourDoneButton,onShow:function(){FLBuilderTour._dimSection("body")}},{animation:!1,orphan:!0,backdrop:!0,title:FLBuilderStrings.tourFinishedTitle,content:FLBuilderStrings.tourFinished,template:'<div class="popover" role="tooltip"> <div class="arrow"></div> <i class="fa fa-times" data-role="end"></i> <h3 class="popover-title"></h3> <div class="popover-content"></div> <div class="popover-navigation clearfix"> <button class="fl-builder-button fl-builder-button-primary fl-builder-tour-next" data-role="end">'+FLBuilderStrings.tourEnd+"</button> </div> </div>"}]};return FLBuilderConfig.lite?t.steps.shift():"disabled"==FLBuilderConfig.enabledTemplates?t.steps.shift():"fl-builder-template"==FLBuilderConfig.postType&&t.steps.shift(),t},_onStart:function(){var t=e("body");t.append('<div class="fl-builder-tour-mask"></div>'),t.on("fl-builder.template-selector-loaded",FLBuilderTour._templateSelectorLoaded),0===e(".fl-row").length&&"module"!=FLBuilderConfig.userTemplateType&&(e(".fl-builder-content").append('<div class="fl-builder-tour-demo-content fl-row fl-row-fixed-width fl-row-bg-none"> <div class="fl-row-content-wrap"> <div class="fl-row-content fl-row-fixed-width fl-node-content"> <div class="fl-col-group"> <div class="fl-col" style="width:100%"> <div class="fl-col-content fl-node-content"> <div class="fl-module fl-module-rich-text" data-type="rich-text" data-name="Text Editor"> <div class="fl-module-content fl-node-content"> <div class="fl-rich-text"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pellentesque ut lorem non cursus. Sed mauris nunc, porttitor iaculis lorem a, sollicitudin lacinia sapien. Proin euismod orci lacus, et sollicitudin leo posuere ac. In hac habitasse platea dictumst. Maecenas elit magna, consequat in turpis suscipit, ultrices rhoncus arcu. Phasellus finibus sapien nec elit tempus venenatis. Maecenas tincidunt sapien non libero maximus, in aliquam felis tincidunt. Mauris mollis ultricies facilisis. Duis condimentum dignissim tortor sit amet facilisis. Aenean gravida lacus eu risus molestie egestas. Donec ut dolor dictum, fringilla metus malesuada, viverra nunc. Maecenas ut purus ac justo aliquet lacinia. Cras vestibulum elementum tincidunt. Maecenas mattis tortor neque, consectetur dignissim neque tempor nec.</p></div> </div> </div> </div> </div> </div> </div> </div> </div>'),FLBuilder._setupEmptyLayout(),FLBuilder._highlightEmptyCols())},_onPrev:function(){e(".fl-builder-tour-dimmed").remove()},_onNext:function(){e(".fl-builder-tour-dimmed").remove()},_onEnd:function(){e("body").off("fl-builder.template-selector-loaded"),e(".fl-builder-tour-mask").remove(),e(".fl-builder-tour-dimmed").remove(),e(".fl-builder-tour-demo-content").remove(),FLBuilder._setupEmptyLayout(),FLBuilder._highlightEmptyCols(),FLBuilder._showPanel(),FLBuilder._initTemplateSelector()},_dimSection:function(t){e(t).find(".fl-builder-tour-dimmed").remove(),e(t).append('<div class="fl-builder-tour-dimmed"></div>')},_templateSelectorLoaded:function(){var t=e(".fl-builder-settings-lightbox .fl-lightbox-header"),l=t.height(),i=t.offset().top+75;e(".popover[class*=tour-]").css({top:i+l+"px",visibility:"visible"})}}}(jQuery),function(e){FLBuilder={preview:null,_actionsLightbox:null,_addModuleAfterNodeRender:null,_colResizeData:null,_colResizing:!1,_contentClass:!1,_dragEnabled:!1,_dragging:!1,_dragInitialScrollTop:0,_exitUrl:null,_layout:null,_layoutSettingsCSSCache:null,_layoutSettingsCSSTimeout:null,_lightbox:null,_lightboxScrollbarTimeout:null,_loadedModuleAssets:[],_moduleHelpers:{},_multiplePhotoSelector:null,_newColGroupParent:null,_newColGroupPosition:0,_newModuleParent:null,_newModulePosition:0,_newRowPosition:0,_selectedTemplateId:null,_selectedTemplateType:null,_singlePhotoSelector:null,_singleVideoSelector:null,_multipleAudiosSelector:null,_silentUpdate:!1,_silentUpdateCallbackData:null,_init:function(){FLBuilder._initJQueryReadyFix(),FLBuilder._initGlobalErrorHandling(),FLBuilder._initPostLock(),FLBuilder._initClassNames(),FLBuilder._initMediaUploader(),FLBuilder._initOverflowFix(),FLBuilder._initScrollbars(),FLBuilder._initLightboxes(),FLBuilder._initDropTargets(),FLBuilder._initSortables(),FLBuilder._initStrings(),FLBuilder._initTipTips(),FLBuilder._bindEvents(),FLBuilder._bindOverlayEvents(),FLBuilder._setupEmptyLayout(),FLBuilder._highlightEmptyCols(),FLBuilder._showTourOrTemplates()},_initJQueryReadyFix:function(){FLBuilderConfig.debug||(jQuery.fn.oldReady=jQuery.fn.ready,jQuery.fn.ready=function(e){return jQuery.fn.oldReady(function(){try{"function"==typeof e&&e()}catch(t){FLBuilder.logError(t)}})})},_initGlobalErrorHandling:function(){FLBuilderConfig.debug||(window.onerror=function(e,t,l,i,o){return FLBuilder.logGlobalError(e,t,l,i,o),!0})},_initPostLock:function(){"undefined"!=typeof wp.heartbeat&&(wp.heartbeat.interval(30),wp.heartbeat.enqueue("fl_builder_post_lock",{post_id:e("#fl-post-id").val()}))},_initClassNames:function(){e("html").addClass("fl-builder-edit"),e("body").addClass("fl-builder"),FLBuilderConfig.simpleUi&&e("body").addClass("fl-builder-simple"),FLBuilder._contentClass=".fl-builder-content-"+FLBuilderConfig.postId},_initMediaUploader:function(){wp.media.model.settings.post.id=e("#fl-post-id").val()},_initOverflowFix:function(){e(FLBuilder._contentClass).parents().css("overflow","visible")},_initScrollbars:function(){e(".fl-nanoscroller").nanoScroller({alwaysVisible:!0,preventPageScrolling:!0,paneClass:"fl-nanoscroller-pane",sliderClass:"fl-nanoscroller-slider",contentClass:"fl-nanoscroller-content"})},_initLightboxes:function(){FLBuilder._lightbox=new FLLightbox({className:"fl-builder-lightbox fl-builder-settings-lightbox"}),FLBuilder._lightbox.on("close",FLBuilder._lightboxClosed),FLBuilder._actionsLightbox=new FLLightbox({className:"fl-builder-actions-lightbox"})},_initSortables:function(){var t={appendTo:"body",cursor:"move",cursorAt:{left:60,top:20},distance:1,helper:FLBuilder._blockDragHelper,start:FLBuilder._blockDragStart,sort:FLBuilder._blockDragSort,change:FLBuilder._blockDragChange,stop:FLBuilder._blockDragStop,placeholder:"fl-builder-drop-zone",tolerance:"intersect"},l="",i="";i="row"==FLBuilderConfig.userTemplateType?FLBuilder._contentClass+" .fl-col-group-drop-target, "+FLBuilder._contentClass+" .fl-col-drop-target, "+FLBuilder._contentClass+" .fl-col-content":FLBuilder._contentClass+" .fl-row-drop-target, "+FLBuilder._contentClass+" .fl-col-group-drop-target, "+FLBuilder._contentClass+" .fl-col-drop-target, "+FLBuilder._contentClass+" .fl-row:not(.fl-node-global) .fl-col-content",l=FLBuilderConfig.nestedColumns?i:"row"==FLBuilderConfig.userTemplateType?FLBuilder._contentClass+" .fl-col-group-drop-target, "+FLBuilder._contentClass+" .fl-col-drop-target":FLBuilder._contentClass+" .fl-row-drop-target, "+FLBuilder._contentClass+" .fl-col-group-drop-target, "+FLBuilder._contentClass+" .fl-col-drop-target",e(".fl-builder-rows").sortable(e.extend({},t,{connectWith:l,items:".fl-builder-block-row",stop:FLBuilder._rowDragStop})),e(".fl-builder-row-templates").sortable(e.extend({},t,{connectWith:FLBuilder._contentClass+" .fl-row-drop-target",items:".fl-builder-block-row-template",stop:FLBuilder._nodeTemplateDragStop})),e(".fl-builder-saved-rows").sortable(e.extend({},t,{cancel:".fl-builder-node-template-actions, .fl-builder-node-template-edit, .fl-builder-node-template-delete",connectWith:FLBuilder._contentClass+" .fl-row-drop-target",items:".fl-builder-block-saved-row",stop:FLBuilder._nodeTemplateDragStop})),e(".fl-builder-modules, .fl-builder-widgets").sortable(e.extend({},t,{connectWith:i,items:".fl-builder-block-module",stop:FLBuilder._moduleDragStop})),e(".fl-builder-module-templates").sortable(e.extend({},t,{connectWith:i,items:".fl-builder-block-module-template",stop:FLBuilder._nodeTemplateDragStop})),e(".fl-builder-saved-modules").sortable(e.extend({},t,{cancel:".fl-builder-node-template-actions, .fl-builder-node-template-edit, .fl-builder-node-template-delete",connectWith:i,items:".fl-builder-block-saved-module",stop:FLBuilder._nodeTemplateDragStop})),e(".fl-row-sortable-proxy").sortable(e.extend({},t,{connectWith:FLBuilder._contentClass+" .fl-row-drop-target",helper:FLBuilder._rowDragHelper,start:FLBuilder._rowDragStart,stop:FLBuilder._rowDragStop})),e(".fl-col-sortable-proxy").sortable(e.extend({},t,{connectWith:i,helper:FLBuilder._colDragHelper,start:FLBuilder._colDragStart,stop:FLBuilder._colDragStop})),e(FLBuilder._contentClass+" .fl-col-content").sortable(e.extend({},t,{connectWith:i,handle:".fl-module-overlay .fl-block-overlay-actions .fl-block-move",helper:FLBuilder._moduleDragHelper,items:".fl-module, .fl-col-group",start:FLBuilder._moduleDragStart,stop:FLBuilder._moduleDragStop})),e(FLBuilder._contentClass+" .fl-row-drop-target").sortable(t),e(FLBuilder._contentClass+" .fl-col-group-drop-target").sortable(t),e(FLBuilder._contentClass+" .fl-col-drop-target").sortable(t)},_initStrings:function(){e.validator.messages.required=FLBuilderStrings.validateRequiredMessage},_bindEvents:function(){e("a").on("click",FLBuilder._preventDefault),e(".fl-page-nav .nav a").on("click",FLBuilder._headerLinkClicked),e(document).on("heartbeat-tick",FLBuilder._initPostLock),e(window).on("beforeunload",FLBuilder._warnBeforeUnload),e("body").delegate(".fl-builder-has-submenu","click",FLBuilder._submenuParentClicked),e("body").delegate(".fl-builder-has-submenu a","click",FLBuilder._submenuChildClicked),e("body").delegate(".fl-builder-submenu","mouseenter",FLBuilder._submenuMouseenter),e("body").delegate(".fl-builder-submenu","mouseleave",FLBuilder._submenuMouseleave),e("body").delegate(".fl-builder-submenu .fl-builder-has-submenu","mouseenter",FLBuilder._submenuNestedParentMouseenter),e(".fl-builder-tools-button").on("click",FLBuilder._toolsClicked),e(".fl-builder-done-button").on("click",FLBuilder._doneClicked),e(".fl-builder-add-content-button").on("click",FLBuilder._showPanel),
3
+ e(".fl-builder-templates-button").on("click",FLBuilder._changeTemplateClicked),e(".fl-builder-buy-button").on("click",FLBuilder._upgradeClicked),e(".fl-builder-upgrade-button").on("click",FLBuilder._upgradeClicked),e(".fl-builder-help-button").on("click",FLBuilder._helpButtonClicked),e(".fl-builder-panel-actions .fl-builder-panel-close").on("click",FLBuilder._closePanel),e(".fl-builder-blocks-section-title").on("click",FLBuilder._blockSectionTitleClicked),e("body").delegate(".fl-builder-node-template-actions","mousedown",FLBuilder._stopPropagation),e("body").delegate(".fl-builder-node-template-edit","mousedown",FLBuilder._stopPropagation),e("body").delegate(".fl-builder-node-template-delete","mousedown",FLBuilder._stopPropagation),e("body").delegate(".fl-builder-node-template-edit","click",FLBuilder._editNodeTemplateClicked),e("body").delegate(".fl-builder-node-template-delete","click",FLBuilder._deleteNodeTemplateClicked),e("body").delegate(".fl-builder-block","mousedown",FLBuilder._blockDragInit),e("body").on("mouseup",FLBuilder._blockDragCancel),e("body").delegate(".fl-builder-actions .fl-builder-cancel-button","click",FLBuilder._cancelButtonClicked),e("body").delegate(".fl-lightbox-controls .fa","click",FLBuilder._resizeLightbox),e("body").delegate(".fl-builder-save-actions .fl-builder-publish-button","click",FLBuilder._publishButtonClicked),e("body").delegate(".fl-builder-save-actions .fl-builder-draft-button","click",FLBuilder._draftButtonClicked),e("body").delegate(".fl-builder-save-actions .fl-builder-discard-button","click",FLBuilder._discardButtonClicked),e("body").delegate(".fl-builder-save-user-template-button","click",FLBuilder._saveUserTemplateClicked),e("body").delegate(".fl-builder-duplicate-layout-button","click",FLBuilder._duplicateLayoutClicked),e("body").delegate(".fl-builder-layout-settings-button","click",FLBuilder._layoutSettingsClicked),e("body").delegate(".fl-builder-layout-settings .fl-builder-settings-save","click",FLBuilder._saveLayoutSettingsClicked),e("body").delegate(".fl-builder-layout-settings .fl-builder-settings-cancel","click",FLBuilder._cancelLayoutSettingsClicked),e("body").delegate(".fl-builder-global-settings-button","click",FLBuilder._globalSettingsClicked),e("body").delegate(".fl-builder-global-settings .fl-builder-settings-save","click",FLBuilder._saveGlobalSettingsClicked),e("body").delegate(".fl-builder-global-settings .fl-builder-settings-cancel","click",FLBuilder._cancelLayoutSettingsClicked),e("body").delegate(".fl-template-category-select","change",FLBuilder._templateCategoryChanged),e("body").delegate(".fl-template-preview","click",FLBuilder._templateClicked),e("body").delegate(".fl-user-template","click",FLBuilder._userTemplateClicked),e("body").delegate(".fl-user-template-edit","click",FLBuilder._editUserTemplateClicked),e("body").delegate(".fl-user-template-delete","click",FLBuilder._deleteUserTemplateClicked),e("body").delegate(".fl-builder-template-replace-button","click",FLBuilder._templateReplaceClicked),e("body").delegate(".fl-builder-template-append-button","click",FLBuilder._templateAppendClicked),e("body").delegate(".fl-builder-template-actions .fl-builder-cancel-button","click",FLBuilder._templateCancelClicked),e("body").delegate(".fl-builder-user-template-settings .fl-builder-settings-save","click",FLBuilder._saveUserTemplateSettings),e("body").delegate(".fl-builder-help-tour-button","click",FLBuilder._startHelpTour),e("body").delegate(".fl-builder-help-video-button","click",FLBuilder._watchVideoClicked),e("body").delegate(".fl-builder-knowledge-base-button","click",FLBuilder._viewKnowledgeBaseClicked),e("body").delegate(".fl-builder-forums-button","click",FLBuilder._visitForumsClicked),e("body").delegate(".fl-builder-no-tour-button","click",FLBuilder._noTourButtonClicked),e("body").delegate(".fl-builder-yes-tour-button","click",FLBuilder._yesTourButtonClicked),e("body").delegate(".fl-builder-alert-close","click",FLBuilder._alertClose),e("body").delegate(".fl-row-overlay .fl-block-remove","click",FLBuilder._deleteRowClicked),e("body").delegate(".fl-row-overlay .fl-block-copy","click",FLBuilder._rowCopyClicked),e("body").delegate(".fl-row-overlay .fl-block-move","mousedown",FLBuilder._rowDragInit),e("body").delegate(".fl-row-overlay .fl-block-settings","click",FLBuilder._rowSettingsClicked),e("body").delegate(".fl-row-overlay","click",FLBuilder._rowSettingsClicked),e("body").delegate(".fl-builder-row-settings .fl-builder-settings-save","click",FLBuilder._saveSettings),e("body").delegate(".fl-col-overlay .fl-block-move","mousedown",FLBuilder._colDragInit),e("body").delegate(".fl-col-overlay .fl-block-remove","click",FLBuilder._deleteColClicked),e("body").delegate(".fl-col-overlay","click",FLBuilder._colSettingsClicked),e("body").delegate(".fl-builder-col-settings .fl-builder-settings-save","click",FLBuilder._saveSettings),e("body").delegate(".fl-block-col-submenu .fl-block-col-move","mousedown",FLBuilder._colDragInit),e("body").delegate(".fl-block-col-submenu .fl-block-col-edit","click",FLBuilder._colSettingsClicked),e("body").delegate(".fl-block-col-submenu .fl-block-col-delete","click",FLBuilder._deleteColClicked),e("body").delegate(".fl-block-col-submenu .fl-block-col-reset","click",FLBuilder._resetColumnWidthsClicked),e("body").delegate(".fl-block-col-submenu li","mouseenter",FLBuilder._showColHighlightGuide),e("body").delegate(".fl-block-col-submenu li","mouseleave",FLBuilder._removeColHighlightGuides),e("body").delegate(".fl-block-col-submenu .fl-block-col-move-parent","mousedown",FLBuilder._colDragInit),e("body").delegate(".fl-block-col-submenu .fl-block-col-edit-parent","click",FLBuilder._colSettingsClicked),e("body").delegate(".fl-module-overlay .fl-block-remove","click",FLBuilder._deleteModuleClicked),e("body").delegate(".fl-module-overlay .fl-block-copy","click",FLBuilder._moduleCopyClicked),e("body").delegate(".fl-module-overlay .fl-block-move","mousedown",FLBuilder._blockDragInit),e("body").delegate(".fl-module-overlay .fl-block-settings","click",FLBuilder._moduleSettingsClicked),e("body").delegate(".fl-module-overlay","click",FLBuilder._moduleSettingsClicked),e("body").delegate(".fl-builder-module-settings .fl-builder-settings-save","click",FLBuilder._saveModuleClicked),e("body").delegate(".fl-builder-settings-save-as","click",FLBuilder._showNodeTemplateSettings),e("body").delegate(".fl-builder-node-template-settings .fl-builder-settings-save","click",FLBuilder._saveNodeTemplate),e("body").delegate(".fl-builder-settings-tabs a","click",FLBuilder._settingsTabClicked),e("body").delegate(".fl-builder-settings-cancel","click",FLBuilder._settingsCancelClicked),e("body").delegate(".fl-help-tooltip-icon","mouseover",FLBuilder._showHelpTooltip),e("body").delegate(".fl-help-tooltip-icon","mouseout",FLBuilder._hideHelpTooltip),e("body").delegate(".fl-builder-field-add","click",FLBuilder._addFieldClicked),e("body").delegate(".fl-builder-field-copy","click",FLBuilder._copyFieldClicked),e("body").delegate(".fl-builder-field-delete","click",FLBuilder._deleteFieldClicked),e("body").delegate(".fl-builder-settings-fields select","change",FLBuilder._settingsSelectChanged),e("body").delegate(".fl-photo-field .fl-photo-select","click",FLBuilder._selectSinglePhoto),e("body").delegate(".fl-photo-field .fl-photo-edit","click",FLBuilder._selectSinglePhoto),e("body").delegate(".fl-photo-field .fl-photo-replace","click",FLBuilder._selectSinglePhoto),e("body").delegate(".fl-photo-field .fl-photo-remove","click",FLBuilder._singlePhotoRemoved),e("body").delegate(".fl-multiple-photos-field .fl-multiple-photos-select","click",FLBuilder._selectMultiplePhotos),e("body").delegate(".fl-multiple-photos-field .fl-multiple-photos-edit","click",FLBuilder._selectMultiplePhotos),e("body").delegate(".fl-multiple-photos-field .fl-multiple-photos-add","click",FLBuilder._selectMultiplePhotos),e("body").delegate(".fl-video-field .fl-video-select","click",FLBuilder._selectSingleVideo),e("body").delegate(".fl-video-field .fl-video-replace","click",FLBuilder._selectSingleVideo),e("body").delegate(".fl-multiple-audios-field .fl-multiple-audios-select","click",FLBuilder._selectMultipleAudios),e("body").delegate(".fl-multiple-audios-field .fl-multiple-audios-edit","click",FLBuilder._selectMultipleAudios),e("body").delegate(".fl-multiple-audios-field .fl-multiple-audios-add","click",FLBuilder._selectMultipleAudios),e("body").delegate(".fl-icon-field .fl-icon-select","click",FLBuilder._selectIcon),e("body").delegate(".fl-icon-field .fl-icon-replace","click",FLBuilder._selectIcon),e("body").delegate(".fl-icon-field .fl-icon-remove","click",FLBuilder._removeIcon),e("body").delegate(".fl-form-field .fl-form-field-edit","click",FLBuilder._formFieldClicked),e("body").delegate(".fl-form-field-settings .fl-builder-settings-save","click",FLBuilder._saveFormFieldClicked),e("body").delegate(".fl-layout-field-option","click",FLBuilder._layoutFieldClicked),e("body").delegate(".fl-link-field-select","click",FLBuilder._linkFieldSelectClicked),e("body").delegate(".fl-link-field-search-cancel","click",FLBuilder._linkFieldSelectCancelClicked),e("body").delegate(".fl-loop-builder select[name=post_type]","change",FLBuilder._loopBuilderPostTypeChange),e("body").delegate(".fl-select-add-value","change",FLBuilder._textFieldAddValueSelectChange)},_bindOverlayEvents:function(){var t=e(FLBuilder._contentClass);t.delegate(".fl-row","mouseenter",FLBuilder._rowMouseenter),t.delegate(".fl-row","mouseleave",FLBuilder._rowMouseleave),t.delegate(".fl-row-overlay","mouseleave",FLBuilder._rowMouseleave),t.delegate(".fl-col","mouseenter",FLBuilder._colMouseenter),t.delegate(".fl-col","mouseleave",FLBuilder._colMouseleave),t.delegate(".fl-module","mouseenter",FLBuilder._moduleMouseenter),t.delegate(".fl-module","mouseleave",FLBuilder._moduleMouseleave)},_destroyOverlayEvents:function(){var t=e(FLBuilder._contentClass);t.undelegate(".fl-row","mouseenter",FLBuilder._rowMouseenter),t.undelegate(".fl-row","mouseleave",FLBuilder._rowMouseleave),t.undelegate(".fl-row-overlay","mouseleave",FLBuilder._rowMouseleave),t.undelegate(".fl-col","mouseenter",FLBuilder._colMouseenter),t.undelegate(".fl-col","mouseleave",FLBuilder._colMouseleave),t.undelegate(".fl-module","mouseenter",FLBuilder._moduleMouseenter),t.undelegate(".fl-module","mouseleave",FLBuilder._moduleMouseleave)},_preventDefault:function(e){e.preventDefault()},_stopPropagation:function(e){e.stopPropagation()},_headerLinkClicked:function(t){var l=e(this),i=l.attr("href");t.preventDefault(),FLBuilderConfig.isUserTemplate||(FLBuilder._exitUrl=i.indexOf("?")>-1?i:i+"?fl_builder",FLBuilder._doneClicked())},_warnBeforeUnload:function(){var t=e(".fl-builder-row-settings").length>0,l=e(".fl-builder-col-settings").length>0,i=e(".fl-builder-module-settings").length>0;if(t||l||i)return FLBuilderStrings.unloadWarning},_initTipTips:function(){e(".fl-tip:not(.fl-has-tip)").each(function(){var t=e(this);t.addClass("fl-has-tip"),void 0==t.attr("data-title")&&t.attr("data-title",t.attr("title"))}).tipTip({defaultPosition:"top",delay:1500})},_hideTipTips:function(){e("#tiptip_holder").stop().remove()},_submenuParentClicked:function(t){var l=e(this),i=l.find(".fl-builder-submenu");l.hasClass("fl-builder-submenu-open")?(l.removeClass("fl-builder-submenu-open"),l.removeClass("fl-builder-submenu-right")):(l.offset().left+i.width()>e(window).width()&&l.addClass("fl-builder-submenu-right"),l.addClass("fl-builder-submenu-open")),FLBuilder._hideTipTips(),t.preventDefault(),t.stopPropagation()},_submenuChildClicked:function(t){var l=e(this).parents(".fl-builder-has-submenu");l.parents(".fl-builder-has-submenu").length||l.removeClass("fl-builder-submenu-open")},_submenuMouseenter:function(t){var l=e(this),i=l.data("timeout");"undefined"!=typeof i&&clearTimeout(i)},_submenuMouseleave:function(t){var l=e(this),i=setTimeout(function(){l.closest(".fl-builder-has-submenu").removeClass("fl-builder-submenu-open")},500);l.data("timeout",i)},_submenuNestedParentMouseenter:function(t){var l=e(this),i=l.find(".fl-builder-submenu");l.width()+l.offset().left+i.width()>e(window).width()&&l.addClass("fl-builder-submenu-right")},_closeAllSubmenus:function(){e(".fl-builder-submenu-open").removeClass("fl-builder-submenu-open")},_toolsClicked:function(){var e=[],t=FLBuilderConfig.lite,l=FLBuilderConfig.enabledTemplates;t||FLBuilderConfig.isUserTemplate||"enabled"!=l&&"user"!=l||(e[10]={key:"save-user-template",label:FLBuilderStrings.saveTemplate}),FLBuilderConfig.isUserTemplate?"undefined"!=typeof window.opener&&window.opener||(e[20]={key:"duplicate-layout",label:FLBuilderStrings.duplicateLayout}):e[20]={key:"duplicate-layout",label:FLBuilderStrings.duplicateLayout},e[30]={key:"layout-settings",label:FLBuilderStrings.editLayoutSettings},e[40]={key:"global-settings",label:FLBuilderStrings.editGlobalSettings},FLBuilder._showActionsLightbox({className:"fl-builder-tools-actions",title:FLBuilderStrings.actionsLightboxTitle,buttons:e})},_doneClicked:function(){var e=[],t=FLBuilderStrings.publish;"publish"==FLBuilderConfig.postStatus||FLBuilderConfig.userCanPublish||(t=FLBuilderStrings.submitForReview),e[10]={key:"publish",label:t},e[20]={key:"draft",label:FLBuilderStrings.draft},e[30]={key:"discard",label:FLBuilderStrings.discard},FLBuilder._showActionsLightbox({className:"fl-builder-save-actions",title:FLBuilderStrings.actionsLightboxTitle,buttons:e})},_upgradeClicked:function(){window.open(FLBuilderConfig.upgradeUrl)},_helpButtonClicked:function(){var e={};FLBuilderConfig.help.tour&&(e[10]={key:"help-tour",label:FLBuilderStrings.takeHelpTour}),FLBuilderConfig.help.video&&(e[20]={key:"help-video",label:FLBuilderStrings.watchHelpVideo}),FLBuilderConfig.help.knowledge_base&&(e[30]={key:"knowledge-base",label:FLBuilderStrings.viewKnowledgeBase}),FLBuilderConfig.help.forums&&(e[40]={key:"forums",label:FLBuilderStrings.visitForums}),FLBuilder._showActionsLightbox({className:"fl-builder-help-actions",title:FLBuilderStrings.actionsLightboxTitle,buttons:e})},_closePanel:function(){e(".fl-builder-panel").stop(!0,!0).animate({right:"-350px"},500,function(){e(this).hide()}),e(".fl-builder-bar .fl-builder-add-content-button").stop(!0,!0).fadeIn()},_showPanel:function(){e(".fl-builder-bar .fl-builder-add-content-button").stop(!0,!0).fadeOut(),e(".fl-builder-panel").stop(!0,!0).show().animate({right:"0"},500)},_blockSectionTitleClicked:function(){var t=e(this),l=t.parent();l.hasClass("fl-active")?l.removeClass("fl-active"):(e(".fl-builder-blocks-section").removeClass("fl-active"),l.addClass("fl-active")),FLBuilder._initScrollbars()},_publishButtonClicked:function(){FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"save_layout"},FLBuilder._exit),FLBuilder._actionsLightbox.close()},_draftButtonClicked:function(){FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"save_draft"},FLBuilder._exit),FLBuilder._actionsLightbox.close()},_discardButtonClicked:function(){var e=confirm(FLBuilderStrings.discardMessage);e&&(FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"clear_draft_layout"},FLBuilder._exit),FLBuilder._actionsLightbox.close())},_cancelButtonClicked:function(){FLBuilder._exitUrl=null,FLBuilder._actionsLightbox.close()},_exit:function(){var e=window.location.href;FLBuilderConfig.isUserTemplate&&"undefined"!=typeof window.opener&&window.opener?("undefined"!=typeof window.opener.FLBuilder&&window.opener.FLBuilder._updateLayout(),window.close()):(FLBuilder._exitUrl?e=FLBuilder._exitUrl:(e=e.replace("?fl_builder&","?"),e=e.replace("?fl_builder",""),e=e.replace("&fl_builder","")),window.location.href=e)},_duplicateLayoutClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"duplicate_post"},FLBuilder._duplicateLayoutComplete)},_duplicateLayoutComplete:function(t){var l=e("#fl-admin-url").val();window.location.href=l+"post.php?post="+t+"&action=edit"},_layoutSettingsClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._showLightbox(),FLBuilder._closePanel(),FLBuilder.ajax({action:"render_layout_settings"},FLBuilder._layoutSettingsLoaded)},_layoutSettingsLoaded:function(e){var t=JSON.parse(e);FLBuilder._setSettingsFormContent(t.html),FLBuilder._layoutSettingsInitCSS()},_layoutSettingsInitCSS:function(){var t=e(".fl-builder-settings #fl-field-css textarea:not(.ace_text-input)");t.on("change",FLBuilder._layoutSettingsCSSChanged),FLBuilder._layoutSettingsCSSCache=t.val()},_layoutSettingsCSSChanged:function(){FLBuilder._layoutSettingsCSSTimeout&&clearTimeout(FLBuilder._layoutSettingsCSSTimeout),FLBuilder._layoutSettingsCSSTimeout=setTimeout(e.proxy(FLBuilder._layoutSettingsCSSDoChange,this),600)},_layoutSettingsCSSDoChange:function(){var t=e(".fl-builder-settings"),l=e(this),i=l.parents("#fl-field-css");i.find(".ace_error").length>0||(t.hasClass("fl-builder-layout-settings")?e("#fl-builder-layout-css").html(l.val()):e("#fl-builder-global-css").html(l.val()),FLBuilder._layoutSettingsCSSTimeout=null)},_saveLayoutSettingsClicked:function(){for(var t=e(this).closest(".fl-builder-settings"),l=t.serializeArray(),i={},o=0;o<l.length;o++)i[l[o].name]=l[o].value;FLBuilder.showAjaxLoader(),FLBuilder._lightbox.close(),FLBuilder._layoutSettingsCSSCache=null,FLBuilder.ajax({action:"save_layout_settings",settings:i},FLBuilder._updateLayout)},_cancelLayoutSettingsClicked:function(){var t=e(".fl-builder-settings");t.hasClass("fl-builder-layout-settings")?e("#fl-builder-layout-css").html(FLBuilder._layoutSettingsCSSCache):e("#fl-builder-global-css").html(FLBuilder._layoutSettingsCSSCache),FLBuilder._layoutSettingsCSSCache=null},_globalSettingsClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._showLightbox(),FLBuilder.ajax({action:"render_global_settings"},FLBuilder._globalSettingsLoaded)},_globalSettingsLoaded:function(e){var t=JSON.parse(e);FLBuilder._setSettingsFormContent(t.html),FLBuilder._layoutSettingsInitCSS(),FLBuilder._initSettingsValidation({row_width:{required:!0,number:!0},responsive_breakpoint:{required:!0,number:!0}})},_saveGlobalSettingsClicked:function(){var t=e(this).closest(".fl-builder-settings"),l=t.validate().form(),i=t.serializeArray(),o={},s=0;if(l){for(;s<i.length;s++)o[i[s].name]=i[s].value;FLBuilder.showAjaxLoader(),FLBuilder._layoutSettingsCSSCache=null,FLBuilder.ajax({action:"save_global_settings",settings:o},FLBuilder._saveGlobalSettingsComplete),FLBuilder._lightbox.close()}},_saveGlobalSettingsComplete:function(e){FLBuilderConfig.global=JSON.parse(e),FLBuilder._updateLayout()},_initTemplateSelector:function(){var t=e(FLBuilder._contentClass).find(".fl-row");0===t.length&&FLBuilder._showTemplateSelector()},_changeTemplateClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._showTemplateSelector()},_showTemplateSelector:function(){FLBuilderConfig.simpleUi||FLBuilderConfig.isUserTemplate||"disabled"!=FLBuilderConfig.enabledTemplates&&0!==e(".fl-builder-templates-button").length&&(FLBuilder._showLightbox(!1),FLBuilder.ajax({action:"render_template_selector"},FLBuilder._templateSelectorLoaded))},_templateSelectorLoaded:function(t){var l=JSON.parse(t),i=null,o=null;FLBuilder._setLightboxContent(l.html),i=e(".fl-template-category-select"),tabs=e(".fl-builder-settings-tab"),userTemplatesTab=e("#fl-builder-settings-tab-yours"),o=e(".fl-user-template"),("user"==FLBuilderConfig.enabledTemplates||o.length>0||userTemplatesTab.length>0&&1==tabs.length)&&(i.val("fl-builder-settings-tab-yours"),e(".fl-builder-settings-tab").removeClass("fl-active"),e("#fl-builder-settings-tab-yours").addClass("fl-active")),0===o.length&&e(".fl-user-templates-message").show(),e("body").trigger("fl-builder.template-selector-loaded")},_templateCategoryChanged:function(){e(".fl-template-selector .fl-builder-settings-tab").hide(),e("#"+e(this).val()).show()},_templateClicked:function(){var t=e(this),l=t.closest(".fl-template-preview").attr("data-id");e(FLBuilder._contentClass).children(".fl-row").length>0?0==l?confirm(FLBuilderStrings.changeTemplateMessage)&&(FLBuilder._lightbox._node.hide(),FLBuilder._applyTemplate(0,!1,"core")):(FLBuilder._selectedTemplateId=l,FLBuilder._selectedTemplateType="core",FLBuilder._showTemplateActions(),FLBuilder._lightbox._node.hide()):FLBuilder._applyTemplate(l,!1,"core")},_showTemplateActions:function(){var e=[];e[10]={key:"template-replace",label:FLBuilderStrings.templateReplace},e[20]={key:"template-append",label:FLBuilderStrings.templateAppend},FLBuilder._showActionsLightbox({className:"fl-builder-template-actions",title:FLBuilderStrings.actionsLightboxTitle,buttons:e})},_templateReplaceClicked:function(){confirm(FLBuilderStrings.changeTemplateMessage)&&(FLBuilder._actionsLightbox.close(),FLBuilder._applyTemplate(FLBuilder._selectedTemplateId,!1,FLBuilder._selectedTemplateType))},_templateAppendClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._applyTemplate(FLBuilder._selectedTemplateId,!0,FLBuilder._selectedTemplateType)},_templateCancelClicked:function(){FLBuilder._lightbox._node.show()},_applyTemplate:function(e,t,l){t="undefined"!=typeof t&&t?"1":"0",l="undefined"==typeof l?"core":l,FLBuilder._lightbox.close(),FLBuilder.showAjaxLoader(),"core"==l?FLBuilder.ajax({action:"apply_template",template_id:e,append:t},FLBuilder._updateLayout):FLBuilder.ajax({action:"apply_user_template",template_id:e,append:t},FLBuilder._updateLayout)},_saveUserTemplateClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._showLightbox(!1),FLBuilder.ajax({action:"render_user_template_settings"},FLBuilder._userTemplateSettingsLoaded)},_userTemplateSettingsLoaded:function(e){var t=JSON.parse(e);FLBuilder._setSettingsFormContent(t.html),FLBuilder._initSettingsValidation({name:{required:!0}})},_saveUserTemplateSettings:function(){var t=e(this).closest(".fl-builder-settings"),l=t.validate().form(),i=FLBuilder._getSettings(t);l&&(FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"save_user_template",settings:i},FLBuilder._saveUserTemplateSettingsComplete),FLBuilder._lightbox.close())},_saveUserTemplateSettingsComplete:function(){FLBuilder.alert(FLBuilderStrings.templateSaved)},_userTemplateClicked:function(){var t=e(this).attr("data-id");e(FLBuilder._contentClass).children(".fl-row").length>0?"blank"==t?confirm(FLBuilderStrings.changeTemplateMessage)&&(FLBuilder._lightbox._node.hide(),FLBuilder._applyTemplate("blank",!1,"user")):(FLBuilder._selectedTemplateId=t,FLBuilder._selectedTemplateType="user",FLBuilder._showTemplateActions(),FLBuilder._lightbox._node.hide()):FLBuilder._applyTemplate(t,!1,"user")},_editUserTemplateClicked:function(t){t.preventDefault(),t.stopPropagation(),window.open(e(this).attr("href"))},_deleteUserTemplateClicked:function(t){var l=e(this).closest(".fl-user-template"),i=l.attr("data-id"),o=e(".fl-user-template[data-id="+i+"]"),s=null;confirm(FLBuilderStrings.deleteTemplate)&&(FLBuilder.ajax({action:"delete_user_template",template_id:i}),o.fadeOut(function(){l=e(this),s=l.closest(".fl-user-template-category"),l.remove(),0===s.find(".fl-user-template").length&&s.remove(),1===e(".fl-user-template").length&&(e(".fl-user-templates").hide(),e(".fl-user-templates-message").show())})),t.stopPropagation()},_watchVideoClicked:function(){var e=wp.template("fl-video-lightbox");FLBuilder._actionsLightbox.close(),FLBuilder._lightbox.open(e({video:FLBuilderConfig.help.video_embed}))},_viewKnowledgeBaseClicked:function(){FLBuilder._actionsLightbox.close(),window.open(FLBuilderConfig.help.knowledge_base_url)},_visitForumsClicked:function(){FLBuilder._actionsLightbox.close(),window.open(FLBuilderConfig.help.forums_url)},_showTourOrTemplates:function(){FLBuilderConfig.simpleUi||FLBuilderConfig.isUserTemplate||(FLBuilderConfig.help.tour&&FLBuilderConfig.newUser?FLBuilder._showTourLightbox():FLBuilder._initTemplateSelector())},_showTourLightbox:function(){var e=wp.template("fl-tour-lightbox");FLBuilder._actionsLightbox.open(e())},_noTourButtonClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilder._initTemplateSelector()},_yesTourButtonClicked:function(){FLBuilder._actionsLightbox.close(),FLBuilderTour.start()},_startHelpTour:function(){FLBuilder._actionsLightbox.close(),FLBuilderTour.start()},_setupEmptyLayout:function(){var t=e(FLBuilder._contentClass);FLBuilderConfig.isUserTemplate&&"module"==FLBuilderConfig.userTemplateType||(t.removeClass("fl-builder-empty"),t.find(".fl-builder-empty-message").remove(),0===t.children(".fl-row").length&&(t.addClass("fl-builder-empty"),t.append('<span class="fl-builder-empty-message">'+FLBuilderStrings.emptyMessage+"</span>"),FLBuilder._initSortables()))},_updateLayout:function(){FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"render_layout"},FLBuilder._renderLayout)},_renderLayout:function(e,t){FLBuilder._layout=new FLBuilderAJAXLayout(e,t)},_renderLayoutComplete:function(){FLBuilder._layout&&(FLBuilder._layout._complete(),FLBuilder._layout=null)},_resizeLayout:function(){e(window).trigger("resize"),"undefined"!=typeof YUI&&YUI().use("node-event-simulate",function(e){e.one(window).simulate("resize")})},_initMediaElements:function(){var t={};"undefined"!=typeof e.fn.mediaelementplayer&&("undefined"!=typeof _wpmejsSettings&&(t.pluginPath=_wpmejsSettings.pluginPath),e(".wp-audio-shortcode, .wp-video-shortcode").not(".mejs-container").mediaelementplayer(t))},_initDropTargets:function(){var t="row"==FLBuilderConfig.userTemplateType?"":":not(.fl-node-global)",l=e(FLBuilder._contentClass+" .fl-row"),i=null,o=e(FLBuilder._contentClass+" .fl-row"+t).find(".fl-col-group"),s=null,r=null,n=0;for(e(".fl-col-drop-target").remove(),e(".fl-col-group-drop-target").remove(),e(".fl-row-drop-target").remove(),e(FLBuilder._contentClass).append('<div class="fl-drop-target fl-row-drop-target"></div>'),l.prepend('<div class="fl-drop-target fl-row-drop-target"></div>'),l.append('<div class="fl-drop-target fl-drop-target-last fl-row-drop-target fl-row-drop-target-last"></div>');n<l.length;n++)i=l.eq(n),0===i.find(".fl-col-group").length&&i.find(".fl-row-content").append('<div class="fl-drop-target fl-col-group-drop-target"></div>');for(n=0;n<o.length;n++)s=o.eq(n),r=s.find("> .fl-col"),s.hasClass("fl-col-group-nested")||(s.append('<div class="fl-drop-target fl-col-group-drop-target"></div>'),s.append('<div class="fl-drop-target fl-drop-target-last fl-col-group-drop-target fl-col-group-drop-target-last"></div>')),r.append('<div class="fl-drop-target fl-col-drop-target"></div>'),r.append('<div class="fl-drop-target fl-drop-target-last fl-col-drop-target fl-col-drop-target-last"></div>')},_blockDragHelper:function(e,t){var l=t.clone();return t.clone().insertAfter(t),l.addClass("fl-builder-block-drag-helper"),l},_blockDragInit:function(t){var l=e(t.currentTarget),i=null,o=e(window).scrollTop(),s=0;FLBuilder._dragEnabled=!0,FLBuilder._dragInitialScrollTop=o,l.closest("[data-node]").length>0?(i=l.closest("[data-node]"),i.addClass("fl-node-drag-init")):l.hasClass("fl-builder-block")&&e(".fl-row").each(function(){null===i&&e(this).offset().top-o>0&&(i=e(this))}),null!==i&&(s=i.offset().top-o),FLBuilder._highlightRowsAndColsForDrag(l),FLBuilder._adjustColHeightsForDrag(),FLBuilder._disableGlobalRows(),FLBuilder._closePanel(),FLBuilder._destroyOverlayEvents(),FLBuilder._removeAllOverlays(),FLBuilder._initSortables(),e("body").addClass("fl-builder-dragging"),e(".fl-builder-empty-message").hide(),e(".fl-sortable-disabled").removeClass("fl-sortable-disabled"),s>0&&scrollTo(0,i.offset().top-s)},_blockDragStart:function(t,l){FLBuilder._dragging=!0,e(".fl-node-drag-init").removeClass("fl-node-drag-init")},_blockDragSort:function(t,l){var i=l.placeholder.parent(),o=FLBuilderStrings.insert;FLBuilder._blockPreventSort(l.item,i)||(i.hasClass("fl-col-content")?o=l.item.hasClass("fl-builder-block-row")?l.item.find(".fl-builder-block-title").text():l.item.hasClass("fl-col-sortable-proxy-item")?FLBuilderStrings.column:l.item.hasClass("fl-builder-block-module")?l.item.find(".fl-builder-block-title").text():l.item.hasClass("fl-builder-block-saved-module")||l.item.hasClass("fl-builder-block-module-template")?l.item.find(".fl-builder-block-title").text():l.item.attr("data-name"):i.hasClass("fl-col-drop-target")?o="":i.hasClass("fl-col-group-drop-target")?o="":i.hasClass("fl-row-drop-target")&&(o=l.item.hasClass("fl-builder-block-row")?l.item.find(".fl-builder-block-title").text():l.item.hasClass("fl-builder-block-saved-row")?l.item.find(".fl-builder-block-title").text():l.item.hasClass("fl-row-sortable-proxy-item")?FLBuilderStrings.row:FLBuilderStrings.newRow),l.placeholder.html(o),l.item.hasClass("fl-node-global")||l.item.hasClass("fl-builder-block-global")||e(".fl-node-dragging").hasClass("fl-node-global")?l.placeholder.addClass("fl-builder-drop-zone-global"):l.placeholder.removeClass("fl-builder-drop-zone-global"))},_blockDragChange:function(e,t){t.placeholder.hide(),t.placeholder.fadeIn(100)},_blockPreventSort:function(t,l){var i=!1,o=t.hasClass("fl-builder-block-row"),s=t.hasClass("fl-col-sortable-proxy-item"),r=l.hasClass("fl-col-content"),n=l.hasClass("fl-col-drop-target"),a=l.parents(".fl-col-group:not(.fl-col-group-nested)"),d=l.parents(".fl-col-group-nested");return(o||s)&&r&&d.length>0&&(i=!0),r&&!l.find(".fl-module, .fl-col").length&&(o&&"1-col"==t.data("cols")?i=!0:s&&(i=!0)),o&&r&&e.inArray(t.data("cols"),["5-cols","6-cols"])>-1&&(i=!0),s&&e(".fl-node-dragging").find(".fl-col-group-nested").length>0&&(r||n&&d.length>0)&&(i=!0),n&&a.length>0&&0===d.length&&a.find("> .fl-col:visible").length>11&&(i=!0),n&&d.length>0&&d.find(".fl-col:visible").length>3&&(i=!0),i&&l.addClass("fl-sortable-disabled"),i},_blockDragStop:function(t,l){var i=e(window).scrollTop(),o=l.item.parent(),s=null;o.hasClass("fl-drop-target")&&o.closest("[data-node]").length?(o=o.closest("[data-node]"),s=o.offset().top-i):s=o.offset().top-i,o.hasClass("fl-builder-blocks-section-content")&&FLBuilder._showPanel(),FLBuilder._dragEnabled=!1,FLBuilder._dragging=!1,FLBuilder._bindOverlayEvents(),FLBuilder._highlightEmptyCols(),FLBuilder._enableGlobalRows(),FLBuilder._setupEmptyLayout(),e("body").removeClass("fl-builder-dragging"),scrollTo(0,o.offset().top-s)},_blockDragCancel:function(){FLBuilder._dragEnabled&&!FLBuilder._dragging&&(FLBuilder._dragEnabled=!1,FLBuilder._dragging=!1,FLBuilder._bindOverlayEvents(),FLBuilder._highlightEmptyCols(),FLBuilder._enableGlobalRows(),FLBuilder._setupEmptyLayout(),e("body").removeClass("fl-builder-dragging"),e(".fl-node-drag-init").removeClass("fl-node-drag-init"),e(".fl-node-dragging").removeClass("fl-node-dragging"),scrollTo(0,FLBuilder._dragInitialScrollTop))},_reorderNode:function(e,t){FLBuilder.ajax({action:"reorder_node",node_id:e,position:t,silent:!0})},_moveNode:function(e,t,l){FLBuilder.ajax({action:"move_node",new_parent:e,node_id:t,position:l,silent:!0})},_removeAllOverlays:function(){FLBuilder._removeRowOverlays(),FLBuilder._removeColOverlays(),FLBuilder._removeColHighlightGuides(),FLBuilder._removeModuleOverlays(),FLBuilder._hideTipTips()},_appendOverlay:function(e,t){var l=0,i=null,o=e.hasClass("fl-row"),s=o?e.find("> .fl-row-content-wrap"):e.find("> .fl-node-content"),r={top:parseInt(s.css("margin-top"),10),bottom:parseInt(s.css("margin-bottom"),10)};return e.append(t),e.addClass("fl-block-overlay-active"),FLBuilder._initTipTips(),i=e.find("> .fl-block-overlay"),r.top<0&&(l=parseInt(i.css("top"),10),l=isNaN(l)?0:l,i.css("top",r.top+l+"px")),r.bottom<0&&(l=parseInt(i.css("bottom"),10),l=isNaN(l)?0:l,i.css("bottom",r.bottom+l+"px")),i},_buildOverlayOverflowMenu:function(e){var t=e.find(".fl-block-overlay-actions"),l=t.data("original"),i=0,o=null,s=0,r=null,n=0,a=[],d=[],u=[],c=wp.template("fl-overlay-overflow-menu");for(void 0!=l&&(t.after(l),t.remove(),t=l),t.data("original",t.clone()),i=t[0].getBoundingClientRect().width,o=t.find(" > i, > span.fl-builder-has-submenu");n<o.length;n++)r=o.eq(n),s+=r.outerWidth(),s>i?(d.push(r),r.remove()):a.push(r);if(d.length>0){for(d.unshift(a.pop().remove()),n=0;n<d.length;n++)d[n].is(".fl-builder-has-submenu")?u.push({type:"submenu",label:d[n].find(".fa").data("title"),
4
+ submenu:d[n].find(".fl-builder-submenu")[0].outerHTML}):u.push({type:"action",label:d[n].data("title"),className:d[n].removeClass(function(e,t){return t.replace(/fl-block-([^\s]+)/,"")}).attr("class")});t.append(c(u)),FLBuilder._initTipTips()}},_removeRowOverlays:function(){e(".fl-row").removeClass("fl-block-overlay-active"),e(".fl-row-overlay").remove(),e(".fl-module").removeClass("fl-module-adjust-height")},_disableGlobalRows:function(){"row"!=FLBuilderConfig.userTemplateType&&e(".fl-row.fl-node-global").addClass("fl-node-disabled")},_enableGlobalRows:function(){"row"!=FLBuilderConfig.userTemplateType&&e(".fl-node-disabled").removeClass("fl-node-disabled")},_rowMouseenter:function(){var t=e(this),l=t.offset().top,i=null,o=null,s=wp.template("fl-row-overlay");t.hasClass("fl-block-overlay-active")||(o=FLBuilder._appendOverlay(t,s({global:t.hasClass("fl-node-global"),node:t.attr("data-node")})),t.find(".fl-node-content:visible").each(function(){var t=e(this).offset().top;i=null===i||i>t?t:i}),null!==i&&i<l&&o.css("top",i-l-30+"px"),o.offset().top<43&&o.addClass("fl-row-overlay-header-bottom"),t.find(".fl-module").each(function(){var t=e(this);t.outerHeight(!0)<20&&t.addClass("fl-module-adjust-height")}))},_rowMouseleave:function(t){var l=e(t.toElement)||e(t.relatedTarget),i=l.hasClass("fl-row-overlay"),o=l.closest(".fl-row-overlay").length>0,s=l.is("#tiptip_holder"),r=l.closest("#tiptip_holder").length>0;i||o||s||r||FLBuilder._removeRowOverlays()},_rowDragHelper:function(){return e('<div class="fl-builder-block-drag-helper">'+FLBuilderStrings.row+"</div>")},_rowDragInit:function(t){var l=e(t.target),i=e(".fl-row-sortable-proxy-item"),o=l.closest(".fl-row");o.addClass("fl-node-dragging"),FLBuilder._blockDragInit(t),t.target=i[0],i.trigger(t)},_rowDragStart:function(t,l){var i=e(FLBuilder._contentClass+" .fl-row"),o=e(".fl-node-dragging");1===i.length&&e(FLBuilder._contentClass).addClass("fl-builder-empty"),o.hide(),FLBuilder._blockDragStart(t,l)},_rowDragStop:function(t,l){var i=l.item,o=i.parent(),s=null,r=null,n=0;if(FLBuilder._blockDragStop(t,l),o.hasClass("fl-builder-rows"))return void i.remove();if(o.hasClass("fl-row-sortable-proxy"))return void e(".fl-node-dragging").removeClass("fl-node-dragging").show();if(i.hasClass("fl-builder-block")){if(o.hasClass("fl-sortable-disabled"))return i.remove(),void FLBuilder._showPanel();o.hasClass("fl-col-content")?FLBuilder._addColGroup(i.closest(".fl-col").attr("data-node"),i.attr("data-cols"),o.find("> .fl-module, .fl-col-group, .fl-builder-block").index(i)):o.hasClass("fl-col-drop-target")?FLBuilder._addCols(o.closest(".fl-col"),o.hasClass("fl-col-drop-target-last")?"after":"before",i.attr("data-cols"),o.closest(".fl-col-group-nested").length>0):o.hasClass("fl-col-group-drop-target")?(r=i.closest(".fl-col-group"),n=i.closest(".fl-row").find(".fl-row-content > .fl-col-group").index(r),FLBuilder._addColGroup(i.closest(".fl-row").attr("data-node"),i.attr("data-cols"),o.hasClass("fl-drop-target-last")?n+1:n)):(s=i.closest(".fl-row"),n=s.length?e(FLBuilder._contentClass+" .fl-row").index(s):0,FLBuilder._addRow(i.attr("data-cols"),o.hasClass("fl-drop-target-last")?n+1:n)),i.remove(),FLBuilder._showPanel(),e(".fl-builder-modules").siblings(".fl-builder-blocks-section-title").eq(0).trigger("click")}else s=e(".fl-node-dragging").removeClass("fl-node-dragging").show(),o.parent().hasClass("fl-builder-content")||(o.hasClass("fl-drop-target-last")?o.parent().after(s):o.parent().before(s),FLBuilder._reorderNode(s.attr("data-node"),s.index())),e(".fl-row-sortable-proxy").append(l.item)},_addRow:function(e,t){FLBuilder.showAjaxLoader(),FLBuilder._newRowPosition=t,FLBuilder.ajax({action:"render_new_row",cols:e,position:t},FLBuilder._addRowComplete)},_addRowComplete:function(t){var l=JSON.parse(t),i=e(FLBuilder._contentClass),o=e(l.html).data("node"),s=FLBuilder._addModuleAfterNodeRender;l.nodeParent=i,l.nodePosition=FLBuilder._newRowPosition,FLBuilder._renderLayout(l,function(){null!==s&&(e(".fl-node-"+o+" .fl-col-content").append(s),FLBuilder._reorderModule(s),FLBuilder._addModuleAfterNodeRender=null)})},_deleteRowClicked:function(t){var l=e(this).closest(".fl-row"),i=null;l.find(".fl-module").length?(i=confirm(FLBuilderStrings.deleteRowMessage),i&&FLBuilder._deleteRow(l)):FLBuilder._deleteRow(l),FLBuilder._removeAllOverlays(),t.stopPropagation()},_deleteRow:function(e){FLBuilder.ajax({action:"delete_node",node_id:e.attr("data-node"),silent:!0}),e.empty(),e.remove(),FLBuilder._setupEmptyLayout(),FLBuilder._removeRowOverlays()},_rowCopyClicked:function(t){var l=e(this).closest(".fl-row"),i=l.attr("data-node");FLBuilder.showAjaxLoader(),FLBuilder._removeAllOverlays(),FLBuilder._newRowPosition=l.index(".fl-row")+1,FLBuilder.ajax({action:"copy_row",node_id:i},FLBuilder._rowCopyComplete),t.stopPropagation()},_rowCopyComplete:function(t){var l=JSON.parse(t);l.nodeParent=e(FLBuilder._contentClass),l.nodePosition=FLBuilder._newRowPosition,FLBuilder._renderLayout(l)},_rowSettingsClicked:function(t){var l=e(this),i=l.closest(".fl-row").attr("data-node"),o=l.closest(".fl-block-overlay-global").length>0;o&&"row"!=FLBuilderConfig.userTemplateType?FLBuilderConfig.userCanEditGlobalTemplates&&window.open(e('.fl-row[data-node="'+i+'"]').attr("data-template-url")):l.hasClass("fl-block-settings")&&(FLBuilder._closePanel(),FLBuilder._showLightbox(),FLBuilder.ajax({action:"render_row_settings",node_id:i},FLBuilder._rowSettingsLoaded)),t.stopPropagation()},_rowSettingsLoaded:function(e){var t=JSON.parse(e);FLBuilder._setSettingsFormContent(t.settings),FLBuilder.preview=new FLBuilderPreview({type:"row",state:t.state})},_highlightEmptyCols:function(){var t="row"==FLBuilderConfig.userTemplateType?"":":not(.fl-node-global)",l=(e(FLBuilder._contentClass+" .fl-row"+t),e(FLBuilder._contentClass+" .fl-col"+t));e(".fl-row-highlight").removeClass("fl-row-highlight"),l.removeClass("fl-col-highlight").find(".fl-col-content").css("height",""),l.each(function(){var t=e(this);0===t.find(".fl-module, .fl-col").length&&t.addClass("fl-col-highlight")})},_highlightRowsAndColsForDrag:function(t){var l="row"==FLBuilderConfig.userTemplateType?"":":not(.fl-node-global)";e(FLBuilder._contentClass+" .fl-row").addClass("fl-row-highlight"),t.closest(".fl-row-overlay").length||e(FLBuilder._contentClass+" .fl-col"+l).addClass("fl-col-highlight")},_adjustColHeightsForDrag:function(){var t="row"==FLBuilderConfig.userTemplateType?"":".fl-row:not(.fl-node-global) ",l=e(FLBuilder._contentClass),i=l.find(t+".fl-col-group:not(.fl-col-group-nested) > .fl-col > .fl-col-content"),o=l.find(t+".fl-col-group-nested .fl-col-content"),s=0;for(e(".fl-node-drag-init").hide();s<o.length;s++)FLBuilder._adjustColHeightForDrag(o.eq(s));for(s=0;s<i.length;s++)FLBuilder._adjustColHeightForDrag(i.eq(s));e(".fl-node-drag-init").show()},_adjustColHeightForDrag:function(e){e.find(".fl-module:visible, .fl-col:visible").length&&e.height(e.height()+45)},_showColHighlightGuide:function(){var t=e(this),l=t.find("a"),i=t.closest(".fl-col"),o=i.parents(".fl-col"),s=e('<div class="fl-col-highlight-guide"></div>'),r=null,n=t.closest(".fl-block-overlay").offset().top;(l.hasClass("fl-block-col-move-parent")||l.hasClass("fl-block-col-edit-parent"))&&(i=o),i.hasClass("fl-col-highlight")||(i.find("> .fl-col-content").append(s),i.addClass("fl-col-has-highlight-guide"),r=s.offset().top,r>n&&s.css("top",n-r+4+"px"))},_removeColHighlightGuides:function(){e(".fl-col-has-highlight-guide").removeClass("fl-col-has-highlight-guide"),e(".fl-col-highlight-guide").remove()},_colMouseenter:function(){var t=e(this),l=t.closest(".fl-col-group"),i=t.hasClass("fl-node-global"),o=t.parents(".fl-node-global").length>0,s=t.closest(".fl-col-group").find("> .fl-col").length,r=l.find("> .fl-col").index(t),n=0===r,a=s===r+1,d=t.find(".fl-col").length>0,u=t.parents(".fl-col"),c=u.closest(".fl-col-group"),f=u.length>0,h=f?c.find("> .fl-col").length:0,p=c.find("> .fl-col").index(u),g=!!f&&0===p,_=!!f&&h===p+1,m=t.find("> .fl-col-content").width(),b=wp.template("fl-col-overlay"),v=null;FLBuilderConfig.simpleUi||i&&o&&"row"!=FLBuilderConfig.userTemplateType||t.find(".fl-module").length>0||t.find(".fl-col").length>0||(t.hasClass("fl-block-overlay-active")||(FLBuilder._removeColOverlays(),FLBuilder._removeModuleOverlays(),v=FLBuilder._appendOverlay(t,b({global:i,numCols:s,first:n,last:a,hasChildCols:d,hasParentCol:f,parentFirst:g,parentLast:_,numParentCols:h,contentWidth:m})),FLBuilder._buildOverlayOverflowMenu(v),FLBuilder._initColDragResizing()),e("body").addClass("fl-block-overlay-muted"))},_colMouseleave:function(t){var l=e(this),i=e(t.toElement)||e(t.relatedTarget),o=l.find(".fl-module").length>0,s=i.is("#tiptip_holder"),r=i.closest("#tiptip_holder").length>0;s||r||o||(FLBuilder._removeColOverlays(),FLBuilder._removeColHighlightGuides())},_removeColOverlays:function(){var t=e(".fl-col");t.removeClass("fl-block-overlay-active"),t.find(".fl-col-overlay").remove(),e("body").removeClass("fl-block-overlay-muted")},_colDragHelper:function(){return e('<div class="fl-builder-block-drag-helper">'+FLBuilderStrings.column+"</div>")},_colDragInit:function(t){var l=e(t.target),i=e(".fl-col-sortable-proxy-item"),o=l.closest(".fl-col");l.hasClass("fl-block-col-move-parent")&&(o=o.parents(".fl-col")),o.addClass("fl-node-dragging"),FLBuilder._blockDragInit(t),FLBuilder._removeColHighlightGuides(),t.target=i[0],i.trigger(t)},_colDragStart:function(t,l){var i=e(".fl-node-dragging");i.hide(),FLBuilder._resetColumnWidths(i.parent()),FLBuilder._blockDragStart(t,l)},_colDragStop:function(t,l){FLBuilder._blockDragStop(t,l);var i=e(".fl-node-dragging").removeClass("fl-node-dragging").show(),o=i.attr("data-node"),s=l.item.parent(),r=i.parent(),n=r.attr("data-node");newGroup=s.closest(".fl-col-group"),newGroupId=newGroup.attr("data-node"),newRow=s.closest(".fl-row"),position=0,s.hasClass("fl-sortable-disabled")?FLBuilder._resetColumnWidths(r):s.hasClass("fl-col-sortable-proxy")?FLBuilder._resetColumnWidths(r):s.hasClass("fl-col-content")?(i.remove(),0===r.find(".fl-col").length&&r.remove(),position=s.find(".fl-module, .fl-col-group, .fl-col-sortable-proxy-item").index(l.item),FLBuilder._addColGroup(s.closest(".fl-col").attr("data-node"),o,position)):s.hasClass("fl-col-drop-target")?(s.hasClass("fl-col-drop-target-last")?s.parent().after(i):s.parent().before(i),FLBuilder._resetColumnWidths(newGroup),n==newGroupId?FLBuilder.ajax({action:"reorder_col",node_id:o,position:i.index(),silent:!0}):FLBuilder.ajax({action:"move_col",node_id:o,new_parent:newGroupId,position:i.index(),resize:[n,newGroupId],silent:!0}),FLBuilder._resizeLayout()):s.hasClass("fl-col-group-drop-target")?(i.remove(),0===r.find(".fl-col").length&&r.remove(),position=newRow.find(".fl-row-content > .fl-col-group").index(newGroup),position=s.hasClass("fl-drop-target-last")?position+1:position,FLBuilder._addColGroup(newRow.attr("data-node"),o,position)):s.hasClass("fl-row-drop-target")&&(i.remove(),position=s.closest(".fl-builder-content").find(".fl-row").index(newRow),position=s.hasClass("fl-drop-target-last")?position+1:position,FLBuilder._addRow(o,position)),0===r.find(".fl-col").length&&r.remove(),e(".fl-col-sortable-proxy").append(l.item),FLBuilder._highlightEmptyCols(),FLBuilder._initDropTargets(),FLBuilder._initSortables()},_colSettingsClicked:function(t){var l=e(this),i=l.closest(".fl-col"),o=null;FLBuilder._colResizing||(o=l.hasClass("fl-block-col-edit-parent")?i.parents(".fl-col").data("node"):i.attr("data-node"),FLBuilder._closePanel(),FLBuilder._showLightbox(),FLBuilder.ajax({action:"render_column_settings",node_id:o},FLBuilder._colSettingsLoaded),t.stopPropagation())},_colSettingsLoaded:function(t){var l=JSON.parse(t),i=null,o=null,s=null,r=null;FLBuilder._setSettingsFormContent(l.settings),i=e(".fl-builder-col-settings"),o=i.data("node"),s=e('.fl-col[data-node="'+o+'"]'),r=s.find("> .fl-col-content"),0===s.siblings(".fl-col").length?e(i).find("#fl-builder-settings-section-general").css("display","none"):r.width()<=40&&e("#fl-field-size").hide(),FLBuilder.preview=new FLBuilderPreview({type:"col",state:l.state})},_deleteColClicked:function(t){var l=e(this),i=l.closest(".fl-col"),o=i.closest(".fl-col-group"),s=i.parents(".fl-col"),r=s.length>0,n=s.find("> .fl-col-content > .fl-module, > .fl-col-content > .fl-col-group"),a=i.siblings(".fl-col"),d=!0;i.find(".fl-module").length>0&&(d=confirm(FLBuilderStrings.deleteColumnMessage)),r&&1===n.length&&(0===a.length?i=s:1!==a.length||a.find(".fl-module").length||(i=o)),d&&(FLBuilder._deleteCol(i),FLBuilder._removeAllOverlays(),FLBuilder._highlightEmptyCols()),t.stopPropagation()},_deleteCol:function(e){var t=e.closest(".fl-row"),l=e.closest(".fl-col-group"),i=0;e.remove(),rowCols=t.find(".fl-row-content > .fl-col-group > .fl-col"),groupCols=l.find(" > .fl-col"),0===rowCols.length&&"row"!=FLBuilderConfig.userTemplateType?FLBuilder._deleteRow(t):(0===groupCols.length?l.remove():(i=6===groupCols.length?16.65:7===groupCols.length?14.28:Math.round(100/groupCols.length*100)/100,groupCols.css("width",i+"%")),FLBuilder.ajax({action:"delete_col",node_id:e.attr("data-node"),new_width:i,silent:!0}),FLBuilder._initDropTargets(),FLBuilder._initSortables())},_addCols:function(e,t,l,i){l="undefined"==typeof l?"1-col":l,i="undefined"!=typeof i&&i,FLBuilder.showAjaxLoader(),FLBuilder._removeAllOverlays(),FLBuilder.ajax({action:"render_new_columns",node_id:e.attr("data-node"),insert:t,type:l,nested:i?1:0},FLBuilder._addColsComplete)},_addColsComplete:function(t){var l=JSON.parse(t),i=null,o=FLBuilder._addModuleAfterNodeRender;FLBuilder._renderLayout(l,function(){null!==o&&(e('[data-node="'+o.module.data("node")+'"]').remove(),i=e('[data-node="'+o.colId+'"]'),"after"==o.position?i.next().find(".fl-col-content").append(o.module):i.prev().find(".fl-col-content").append(o.module),FLBuilder._reorderModule(o.module),FLBuilder._addModuleAfterNodeRender=null)})},_addColGroup:function(t,l,i){var o=e(".fl-node-"+t);FLBuilder.showAjaxLoader(),FLBuilder._newColGroupPosition=i,o.hasClass("fl-col")?FLBuilder._newColGroupParent=o.find(" > .fl-col-content"):FLBuilder._newColGroupParent=o.find(".fl-row-content"),FLBuilder.ajax({action:"render_new_column_group",cols:l,node_id:t,position:i},FLBuilder._addColGroupComplete)},_addColGroupComplete:function(t){var l=JSON.parse(t),i=e(l.html).find(".fl-col").data("node"),o=FLBuilder._addModuleAfterNodeRender;l.nodeParent=FLBuilder._newColGroupParent,l.nodePosition=FLBuilder._newColGroupPosition,FLBuilder._renderLayout(l,function(){l.nodeParent.hasClass("fl-col-content")&&l.nodeParent.parents(".fl-col").addClass("fl-col-has-cols"),null!==o&&(e(".fl-node-"+i+" .fl-col-content").append(o),FLBuilder._reorderModule(o),FLBuilder._addModuleAfterNodeRender=null)})},_initColDragResizing:function(){e(".fl-block-col-resize").draggable({axis:"x",start:FLBuilder._colDragResizeStart,drag:FLBuilder._colDragResize,stop:FLBuilder._colDragResizeStop})},_colDragResizeStart:function(t,l){var i=e(l.helper),o="",s=i.hasClass("fl-block-col-resize-parent"),r=s?i.closest(".fl-col").parents(".fl-col"):null,n=s?r.parents(".fl-col-group"):i.closest(".fl-col-group"),a=n.find("> .fl-col"),d=s?r:i.closest(".fl-col"),u=null,c=100,f=0;for(i.hasClass("fl-block-col-resize-e")?(o="e",u=d.next(".fl-col")):(o="w",u=d.prev(".fl-col"));f<a.length;f++)a.eq(f).data("node")!=d.data("node")&&a.eq(f).data("node")!=u.data("node")&&(c-=parseFloat(a.eq(f)[0].style.width));FLBuilder._colResizeData={handle:i,feedbackLeft:i.find(".fl-block-col-resize-feedback-left"),feedbackRight:i.find(".fl-block-col-resize-feedback-right"),direction:o,groupWidth:n.outerWidth(),col:d,colWidth:parseFloat(d[0].style.width)/100,sibling:u,offset:l.position.left,availWidth:c},FLBuilder._colResizing=!0,e("body").addClass("fl-builder-col-resizing"),FLBuilder._closePanel(),FLBuilder._destroyOverlayEvents(),FLBuilder.triggerHook("col-resize-start")},_colDragResize:function(e,t){var l=FLBuilder._colResizeData,i=(l.offset-t.position.left)/l.groupWidth,o="e"==l.direction?100*(l.colWidth-i):100*(l.colWidth+i),s=Math.round(100*o)/100,r=l.availWidth-o,n=Math.round(100*r)/100,a=8,d=Math.round(100*(l.availWidth-a))/100;s<a?(s=a,n=d):n<a&&(s=d,n=a),"e"==l.direction?(l.feedbackLeft.html(s.toFixed(1)+"%").show(),l.feedbackRight.html(n.toFixed(1)+"%").show()):(l.feedbackLeft.html(n.toFixed(1)+"%").show(),l.feedbackRight.html(s.toFixed(1)+"%").show()),l.col.css("width",s+"%"),l.sibling.css("width",n+"%"),FLBuilder.triggerHook("col-resize-drag")},_colDragResizeStop:function(t,l){var i=FLBuilder._colResizeData,o=FLBuilder._colResizeData.handle.closest(".fl-block-overlay");FLBuilder._colResizeData.feedbackLeft.hide(),FLBuilder._colResizeData.feedbackRight.hide(),FLBuilder.ajax({action:"resize_cols",col_id:i.col.data("node"),col_width:parseFloat(i.col[0].style.width),sibling_id:i.sibling.data("node"),sibling_width:parseFloat(i.sibling[0].style.width),silent:!0}),FLBuilder._buildOverlayOverflowMenu(o),FLBuilder._colResizeData=null,e("body").removeClass("fl-builder-col-resizing"),FLBuilder._bindOverlayEvents(),setTimeout(function(){FLBuilder._colResizing=!1},50),FLBuilder.triggerHook("col-resize-stop")},_resetColumnWidthsClicked:function(t){var l=e(this).parents(".fl-col-group").last(),i=[l.data("node")],o=l.find(".fl-col-group"),s=0;for(FLBuilder._resetColumnWidths(l);s<o.length;s++)FLBuilder._resetColumnWidths(o.eq(s)),i.push(o.eq(s).data("node"));FLBuilder.ajax({action:"reset_col_widths",group_id:i,silent:!0}),FLBuilder.triggerHook("col-reset-widths"),FLBuilder._closeAllSubmenus(),t.stopPropagation()},_resetColumnWidths:function(e){var t=e.find(" > .fl-col:visible"),l=0;l=6===t.length?16.65:7===t.length?14.28:Math.round(100/t.length*100)/100,t.css("width",l+"%")},_moduleMouseenter:function(){var t=e(this),l=t.attr("data-name"),i=t.hasClass("fl-node-global"),o=t.parents(".fl-node-global").length>0,s=t.closest(".fl-col-group").find("> .fl-col").length,r=t.closest(".fl-col"),n=0===r.index(),a=s===r.index()+1,d=r.parents(".fl-col"),u=d.length>0,c=u?d.closest(".fl-col-group").find("> .fl-col").length:0,f=!!u&&0===d.index(),h=!!u&&c===d.index()+1,p=r.find("> .fl-col-content").width(),g=wp.template("fl-module-overlay"),_=null;FLBuilder._removeColOverlays(),FLBuilder._removeModuleOverlays(),i&&o&&"row"!=FLBuilderConfig.userTemplateType||(t.hasClass("fl-block-overlay-active")||(_=FLBuilder._appendOverlay(t,g({global:i,moduleName:l,numCols:s,colFirst:n,colLast:a,hasParentCol:u,numParentCols:c,parentFirst:f,parentLast:h,contentWidth:p})),FLBuilder._buildOverlayOverflowMenu(_),FLBuilder._initColDragResizing()),e("body").addClass("fl-block-overlay-muted"))},_moduleMouseleave:function(t){var l=(e(this),e(t.toElement)||e(t.relatedTarget)),i=l.is("#tiptip_holder"),o=l.closest("#tiptip_holder").length>0;i||o||(FLBuilder._removeModuleOverlays(),FLBuilder._removeColHighlightGuides())},_removeModuleOverlays:function(){var t=e(".fl-module");t.removeClass("fl-block-overlay-active"),t.find(".fl-module-overlay").remove(),e("body").removeClass("fl-block-overlay-muted")},_moduleDragHelper:function(t,l){return e('<div class="fl-builder-block-drag-helper">'+l.attr("data-name")+"</div>")},_moduleDragStart:function(t,l){e(l.item).data("original-position",l.item.index()),FLBuilder._blockDragStart(t,l)},_moduleDragStop:function(t,l){FLBuilder._blockDragStop(t,l);var i=l.item,o=i.parent(),s=null,r=0,n=0;if(o.hasClass("fl-builder-modules")||o.hasClass("fl-builder-widgets"))return void i.remove();if(i.hasClass("fl-builder-block")){if(o.hasClass("fl-sortable-disabled"))return i.remove(),void FLBuilder._showPanel();o.hasClass("fl-row-drop-target")?(o=i.closest(".fl-builder-content"),n=0,s=i.closest(".fl-row"),r=o.find(".fl-row").index(s)):o.hasClass("fl-col-group-drop-target")?(o=i.closest(".fl-row-content"),n=o.closest(".fl-row").attr("data-node"),s=i.closest(".fl-col-group"),r=o.find(" > .fl-col-group").index(s)):o.hasClass("fl-col-drop-target")?(o=i.closest(".fl-col-group"),n=o.attr("data-node"),s=i.closest(".fl-col"),r=o.find(" > .fl-col").index(s)):(r=o.find("> .fl-module, .fl-col-group, .fl-builder-block").index(i),n=i.closest(".fl-col").attr("data-node")),i.closest(".fl-drop-target-last").length&&(r+=1),FLBuilder._addModule(o,n,i.attr("data-type"),r,i.attr("data-widget")),i.remove()}else{if(o.hasClass("fl-sortable-disabled"))return e(t.target).append(l.item),e(t.target).children().eq(l.item.data("original-position")).before(l.item),void FLBuilder._highlightEmptyCols();o.hasClass("fl-row-drop-target")?(s=i.closest(".fl-row"),r=i.closest(".fl-builder-content").children(".fl-row").index(s),r=i.closest(".fl-drop-target-last").length?r+1:r,FLBuilder._addModuleAfterNodeRender=i,FLBuilder._addRow("1-col",r),i.remove()):o.hasClass("fl-col-group-drop-target")?(s=i.closest(".fl-col-group"),r=i.closest(".fl-row-content ").find(" > .fl-col-group").index(s),r=i.closest(".fl-drop-target-last").length?r+1:r,FLBuilder._addModuleAfterNodeRender=i,FLBuilder._addColGroup(i.closest(".fl-row").attr("data-node"),"1-col",r),i.remove()):o.hasClass("fl-col-drop-target")?(s=i.closest(".fl-col"),r=i.closest(".fl-col-drop-target-last").length?"after":"before",FLBuilder._addModuleAfterNodeRender={module:i,colId:s.data("node"),position:r},FLBuilder._addCols(s,r,"1-col",i.closest(".fl-col-group-nested").length>0),i.remove()):FLBuilder._reorderModule(i)}FLBuilder._resizeLayout()},_reorderModule:function(e){var t=e.closest(".fl-col").attr("data-node"),l=e.attr("data-parent"),i=e.attr("data-node"),o=e.index();t==l?FLBuilder._reorderNode(i,o):(e.attr("data-parent",t),FLBuilder._moveNode(t,i,o))},_deleteModuleClicked:function(t){var l=e(this).closest(".fl-module"),i=confirm(FLBuilderStrings.deleteModuleMessage);i&&(FLBuilder._deleteModule(l),FLBuilder._removeAllOverlays()),t.stopPropagation()},_deleteModule:function(e){var t=e.closest(".fl-row");FLBuilder.ajax({action:"delete_node",node_id:e.attr("data-node"),silent:!0}),e.empty(),e.remove(),t.removeClass("fl-block-overlay-muted"),FLBuilder._highlightEmptyCols(),FLBuilder._removeAllOverlays()},_moduleCopyClicked:function(t){var l=e(this).closest(".fl-module");FLBuilder.showAjaxLoader(),FLBuilder._removeAllOverlays(),FLBuilder._newModuleParent=l.parent(),FLBuilder._newModulePosition=l.index()+1,FLBuilder.ajax({action:"copy_module",node_id:l.attr("data-node")},FLBuilder._moduleCopyComplete),t.stopPropagation()},_moduleCopyComplete:function(e){var t=JSON.parse(e);t.nodeParent=FLBuilder._newModuleParent,t.nodePosition=FLBuilder._newModulePosition,FLBuilder._renderLayout(t)},_moduleSettingsClicked:function(t){var l=e(this),i=l.closest(".fl-module").attr("data-node"),o=l.closest(".fl-col").attr("data-node"),s=l.closest(".fl-module").attr("data-type"),r=l.closest(".fl-block-overlay-global").length>0;t.stopPropagation(),FLBuilder._colResizing||r&&!FLBuilderConfig.userCanEditGlobalTemplates||FLBuilder._showModuleSettings(i,o,s)},_showModuleSettings:function(e,t,l){FLBuilder._closePanel(),FLBuilder._showLightbox(),FLBuilder.ajax({action:"render_module_settings",node_id:e,type:l,parent_id:t},FLBuilder._moduleSettingsLoaded)},_moduleSettingsLoaded:function(t){var l=JSON.parse(t),i=e("<div>"+l.settings+"</div>"),o=i.find("link.fl-builder-settings-css"),s=i.find("script.fl-builder-settings-js"),r=i.find(".fl-builder-settings"),n=r.attr("data-type"),a=null,d=null,u=null;e.inArray(n,FLBuilder._loadedModuleAssets)>-1?(o.remove(),s.remove()):(e("head").append(o),e("head").append(s),FLBuilder._loadedModuleAssets.push(n)),FLBuilder._setSettingsFormContent(i),"undefined"!=typeof l.layout&&(a=l.layout,a.nodeParent=FLBuilder._newModuleParent,a.nodePosition=FLBuilder._newModulePosition),"undefined"!=typeof l.state&&(d=l.state),FLBuilder.preview=new FLBuilderPreview({type:"module",layout:a,state:d}),u=FLBuilder._moduleHelpers[n],"undefined"!=typeof u&&(FLBuilder._initSettingsValidation(u.rules),u.init())},_saveModuleClicked:function(){var t=e(this).closest(".fl-builder-settings"),l=t.attr("data-type"),i=(t.attr("data-node"),FLBuilder._moduleHelpers[l]),o=!0;"undefined"!=typeof i&&(t.find("label.error").remove(),t.validate().hideErrors(),o=t.validate().form(),o&&(o=i.submit())),o?(FLBuilder._saveSettings(),FLBuilder._lightbox.close()):FLBuilder._toggleSettingsTabErrors()},_addModule:function(e,t,l,i,o){FLBuilder.showAjaxLoader(),e.hasClass("fl-col-group")?(FLBuilder._newModuleParent=null,FLBuilder._newModulePosition=0):(FLBuilder._newModuleParent=e,FLBuilder._newModulePosition=i),FLBuilder.ajax({action:"render_new_module",parent_id:t,type:l,position:i,node_preview:1,widget:"undefined"==typeof o?"":o},FLBuilder._addModuleComplete)},_addModuleComplete:function(t){FLBuilder._showLightbox(),FLBuilder._moduleSettingsLoaded(t),e(".fl-builder-module-settings").data("new-module","1")},registerModuleHelper:function(t,l){var i={rules:{},init:function(){},submit:function(){return!0},preview:function(){}};FLBuilder._moduleHelpers[t]=e.extend({},i,l)},_registerModuleHelper:function(e,t){FLBuilder.registerModuleHelper(e,t)},_showNodeTemplateSettings:function(t){var l=e(".fl-builder-settings-lightbox .fl-builder-settings");FLBuilder._saveSettings(),FLBuilder.ajax({action:"render_node_template_settings",node_id:l.attr("data-node")},FLBuilder._nodeTemplateSettingsLoaded)},_nodeTemplateSettingsLoaded:function(e){var t=JSON.parse(e);FLBuilder._showLightbox(!1),FLBuilder._setSettingsFormContent(t.html),FLBuilder._initSettingsValidation({name:{required:!0}})},_saveNodeTemplate:function(){var t=e(".fl-builder-settings-lightbox .fl-builder-settings"),l=t.validate().form();l&&(FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"save_node_template",node_id:t.attr("data-node"),settings:FLBuilder._getSettings(t)},FLBuilder._saveNodeTemplateComplete),FLBuilder._lightbox.close())},_saveNodeTemplateComplete:function(t){var l=JSON.parse(t),i=e(".fl-builder-saved-"+l.type+"s"),o=i.find(".fl-builder-block"),s=null,r="",n=l.name.toLowerCase(),a=0,d=wp.template("fl-node-template-block");if("row"==l.type?FLBuilder.alert(FLBuilderStrings.rowTemplateSaved):"module"==l.type&&FLBuilder.alert(FLBuilderStrings.moduleTemplateSaved),l.layout&&FLBuilder._renderLayout(l.layout),0===o.length)i.append(d(l));else for(;a<o.length;a++){if(s=o.eq(a),r=s.text().toLowerCase().trim(),0===a&&n<r){i.prepend(d(l));break}if(n<r){s.before(d(l));break}if(o.length-1===a){i.append(d(l));break}}i.find(".fl-builder-block-no-node-templates").remove()},_nodeTemplateDragStop:function(t,l){FLBuilder._blockDragStop(t,l);var i=l.item,o=i.parent(),s=null,r=0,n=null,a="",d=null;if(i.hasClass("fl-builder-block-saved-row")||i.hasClass("fl-builder-block-row-template"))n=i.closest(".fl-row"),r=n.length?e(FLBuilder._contentClass+" .fl-row").index(n):0,r=o.hasClass("fl-drop-target-last")?r+1:r,s=null,a="render_new_row",d=FLBuilder._addRowComplete,FLBuilder._newRowPosition=r;else if(i.hasClass("fl-builder-block-saved-module")||i.hasClass("fl-builder-block-module-template")){if(a="render_new_module",d=FLBuilder._addModuleComplete,o.hasClass("fl-sortable-disabled"))return i.remove(),void FLBuilder._showPanel();o.hasClass("fl-row-drop-target")?(o=i.closest(".fl-builder-content"),s=0,r=o.find(".fl-row").index(i.closest(".fl-row"))):o.hasClass("fl-col-group-drop-target")?(o=i.closest(".fl-row-content"),s=o.closest(".fl-row").attr("data-node"),r=o.find(" > .fl-col-group").index(i.closest(".fl-col-group"))):o.hasClass("fl-col-drop-target")?(o=i.closest(".fl-col-group"),r=o.children(".fl-col").index(i.closest(".fl-col")),s=o.attr("data-node")):(r=o.children(".fl-module, .fl-builder-block").index(i),s=i.closest(".fl-col").attr("data-node")),i.closest(".fl-drop-target-last").length&&(r+=1),o.hasClass("fl-col-group")?(FLBuilder._newModuleParent=null,FLBuilder._newModulePosition=0):(FLBuilder._newModuleParent=o,FLBuilder._newModulePosition=r)}FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:a,template_id:i.attr("data-id"),template_type:i.attr("data-type"),parent_id:s,position:r},d),i.remove()},_editNodeTemplateClicked:function(t){t.preventDefault(),t.stopPropagation(),window.open(e(this).attr("href"))},_deleteNodeTemplateClicked:function(t){var l=e(t.target),i=l.closest(".fl-builder-blocks-section"),o=i.find(".fl-builder-blocks-section-content"),s=o.find(".fl-builder-block"),r=l.closest(".fl-builder-block"),n=r.hasClass("fl-builder-block-global"),a=n?FLBuilder._updateLayout:void 0,d=n?FLBuilderStrings.deleteGlobalTemplate:FLBuilderStrings.deleteTemplate;confirm(d)&&(r.remove(),1===s.length&&(r.hasClass("fl-builder-block-saved-row")?o.append('<span class="fl-builder-block-no-node-templates">'+FLBuilderStrings.noSavedRows+"</span>"):o.append('<span class="fl-builder-block-no-node-templates">'+FLBuilderStrings.noSavedModules+"</span>")),FLBuilder.ajax({action:"delete_node_template",template_id:r.attr("data-id"),silent:!r.hasClass("fl-builder-block-global")},a))},_initSettingsForms:function(){FLBuilder._initColorPickers(),FLBuilder._initSelectFields(),FLBuilder._initMultipleFields(),FLBuilder._initAutoSuggestFields(),FLBuilder._initLinkFields(),FLBuilder._initFontFields(),FLBuilder.triggerHook("settings-form-init")},_setSettingsFormContent:function(e){FLBuilder._setLightboxContent(e),FLBuilder._initSettingsForms()},_settingsTabClicked:function(t){var l=e(this),i=l.closest(".fl-builder-settings"),o=l.attr("href").split("#").pop();i.find(".fl-builder-settings-tab").removeClass("fl-active"),i.find("#"+o).addClass("fl-active"),i.find(".fl-builder-settings-tabs .fl-active").removeClass("fl-active"),e(this).addClass("fl-active"),t.preventDefault()},_settingsCancelClicked:function(t){var l=e(".fl-builder-module-settings"),i=null,o=null,s=null,r=null;l.length>0&&"undefined"!=typeof l.data("new-module")?(i=e(FLBuilder.preview.state.html),o=e(".fl-node-"+l.data("node")),s=o.closest(".fl-col"),r=i.find(".fl-node-"+s.data("node")),r.length>0?FLBuilder._deleteModule(o):FLBuilder._deleteCol(s)):FLBuilder.preview&&FLBuilder.preview.revert(),FLBuilder.preview=null,FLLightbox.closeParent(this)},_initSettingsValidation:function(t,l){var i=e(".fl-builder-settings").last();i.validate({ignore:[],rules:t,messages:l,errorPlacement:FLBuilder._settingsErrorPlacement})},_settingsErrorPlacement:function(e,t){e.appendTo(t.parent())},_toggleSettingsTabErrors:function(){for(var t=e(".fl-builder-settings:visible"),l=t.find(".fl-builder-settings-tab"),i=null,o=null,s=0;s<l.length;s++)i=l.eq(s),o=i.find("label.error"),tabLink=t.find(".fl-builder-settings-tabs a[href*="+i.attr("id")+"]"),tabLink.find(".fl-error-icon").remove(),tabLink.removeClass("error"),o.length>0&&(tabLink.append('<span class="fl-error-icon"></span>'),tabLink.addClass("error"))},_getSettings:function(t){FLBuilder._updateEditorFields();var l=t.serializeArray(),i=0,o=0,s="",r="",n="",a=[],d=[],u={};for(i=0;i<l.length;i++)if(s=l[i].value.replace(/\r/gm,""),!(l[i].name.indexOf("flrich")>-1))if(l[i].name.indexOf("[")>-1){for(r=l[i].name.replace(/\[(.*)\]/,""),n=l[i].name.replace(r,""),a=[],d=n.match(/\[[^\]]*\]/g),o=0;o<d.length;o++)"[]"!=d[o]&&a.push(d[o].replace(/\[|\]/g,""));n.match(/\[\]\[[^\]]*\]\[[^\]]+\]/)?("undefined"==typeof u[r]&&(u[r]={}),"undefined"==typeof u[r][a[0]]&&(u[r][a[0]]={}),"undefined"==typeof u[r][a[0]][a[1]]&&(u[r][a[0]][a[1]]={}),u[r][a[0]][a[1]]=s):n.match(/\[\]\[[^\]]*\]\[\]/)?("undefined"==typeof u[r]&&(u[r]={}),"undefined"==typeof u[r][a[0]]&&(u[r][a[0]]=[]),u[r][a[0]].push(s)):n.match(/\[\]\[[^\]]*\]/)?("undefined"==typeof u[r]&&(u[r]={}),u[r][a[0]]=s):n.match(/\[\]/)&&("undefined"==typeof u[r]&&(u[r]=[]),u[r].push(s))}else u[l[i].name]=s;for(n in u)if("undefined"!=typeof u["as_values_"+n]){u[n]=e.grep(u["as_values_"+n].split(","),function(e){return""!==e}).join(",");try{delete u["as_values_"+n]}catch(c){}}return u},_saveSettings:function(){var t=e(".fl-builder-settings-lightbox .fl-builder-settings"),l=t.attr("data-node"),i=FLBuilder._getSettings(t);FLBuilder.showAjaxLoader(),FLBuilder.ajax({action:"save_settings",node_id:l,settings:i},FLBuilder._saveSettingsComplete),FLBuilder._lightbox.close()},_saveSettingsComplete:function(e){FLBuilder._renderLayout(e,function(){
5
+ FLBuilder.preview&&(FLBuilder.preview.clear(),FLBuilder.preview=null)})},_showHelpTooltip:function(){e(this).siblings(".fl-help-tooltip-text").fadeIn()},_hideHelpTooltip:function(){e(this).siblings(".fl-help-tooltip-text").fadeOut()},_initAutoSuggestFields:function(){e(".fl-suggest-field").each(FLBuilder._initAutoSuggestField)},_initAutoSuggestField:function(){var t=e(this);t.autoSuggest(FLBuilder._ajaxUrl({fl_action:"fl_builder_autosuggest",fl_as_action:t.data("action"),fl_as_action_data:t.data("action-data"),_wpnonce:FLBuilderConfig.ajaxNonce}),e.extend({},{asHtmlID:t.attr("name"),selectedItemProp:"name",searchObjProps:"name",minChars:3,keyDelay:1e3,fadeOut:!1,usePlaceholder:!0,emptyText:FLBuilderStrings.noResultsFound,showResultListWhenNoMatch:!0,preFill:t.data("value"),queryParam:"fl_as_query",afterSelectionAdd:FLBuilder._updateAutoSuggestField,afterSelectionRemove:FLBuilder._updateAutoSuggestField,selectionLimit:t.data("limit")},t.data("args")))},_updateAutoSuggestField:function(t,l,i){e(this).siblings(".as-values").val(i.join(",")).trigger("change")},_initMultipleFields:function(){for(var t=e(".fl-builder-field-multiples"),l=null,i=null,o=0,s=FLBuilderConfig.isRtl?{left:10}:{right:10};o<t.length;o++)l=t.eq(o),i=l.find(".fl-builder-field-multiple"),1===i.length?i.eq(0).find(".fl-builder-field-actions").addClass("fl-builder-field-actions-single"):i.find(".fl-builder-field-actions").removeClass("fl-builder-field-actions-single");e(".fl-builder-field-multiples").sortable({items:".fl-builder-field-multiple",cursor:"move",cursorAt:s,distance:5,opacity:.5,helper:FLBuilder._fieldDragHelper,placeholder:"fl-builder-field-dd-zone",stop:FLBuilder._fieldDragStop,tolerance:"pointer"})},_addFieldClicked:function(){var t=e(this),l=t.attr("data-field"),i=t.closest("tr").siblings("tr[data-field="+l+"]").last(),o=i.clone(),s=parseInt(i.find("label span.fl-builder-field-index").html(),10)+1;o.find("th label span.fl-builder-field-index").html(s),o.find(".fl-form-field-preview-text").html(""),o.find("input, textarea, select").val(""),i.after(o),FLBuilder._initMultipleFields()},_copyFieldClicked:function(){var t=e(this),l=t.closest("tr"),i=l.clone(),o=parseInt(l.find("label span.fl-builder-field-index").html(),10)+1;i.find("th label span.fl-builder-field-index").html(o),l.after(i),FLBuilder._renumberFields(l.parent()),FLBuilder._initMultipleFields(),FLBuilder.preview.delayPreview()},_deleteFieldClicked:function(){var t=e(this).closest("tr"),l=t.parent(),i=confirm(FLBuilderStrings.deleteFieldMessage);i&&(t.remove(),FLBuilder._renumberFields(l),FLBuilder._initMultipleFields(),FLBuilder.preview.delayPreview())},_renumberFields:function(e){for(var t=e.find(".fl-builder-field-multiple"),l=0;l<t.length;l++)t.eq(l).find("th label span.fl-builder-field-index").html(l+1)},_fieldDragHelper:function(){return e('<div class="fl-builder-field-dd-helper"></div>')},_fieldDragStop:function(e,t){FLBuilder._renumberFields(t.item.parent()),FLBuilder.preview.delayPreview()},_initSelectFields:function(){e(".fl-builder-settings:visible").find(".fl-builder-settings-fields select").trigger("change")},_settingsSelectChanged:function(){var t=e(this),l=t.attr("data-toggle"),i=t.attr("data-hide"),o=t.attr("data-trigger"),s=t.val(),r=0;if("undefined"!=typeof l){l=JSON.parse(l);for(r in l)FLBuilder._settingsSelectToggle(l[r].fields,"hide","#fl-field-"),FLBuilder._settingsSelectToggle(l[r].sections,"hide","#fl-builder-settings-section-"),FLBuilder._settingsSelectToggle(l[r].tabs,"hide","a[href*=fl-builder-settings-tab-","]");"undefined"!=typeof l[s]&&(FLBuilder._settingsSelectToggle(l[s].fields,"show","#fl-field-"),FLBuilder._settingsSelectToggle(l[s].sections,"show","#fl-builder-settings-section-"),FLBuilder._settingsSelectToggle(l[s].tabs,"show","a[href*=fl-builder-settings-tab-","]"))}if("undefined"!=typeof i&&(i=JSON.parse(i),"undefined"!=typeof i[s]&&(FLBuilder._settingsSelectToggle(i[s].fields,"hide","#fl-field-"),FLBuilder._settingsSelectToggle(i[s].sections,"hide","#fl-builder-settings-section-"),FLBuilder._settingsSelectToggle(i[s].tabs,"hide","a[href*=fl-builder-settings-tab-","]"))),"undefined"!=typeof o&&(o=JSON.parse(o),"undefined"!=typeof o[s]&&"undefined"!=typeof o[s].fields))for(r=0;r<o[s].fields.length;r++)e("#fl-field-"+o[s].fields[r]).find("select").trigger("change")},_settingsSelectToggle:function(t,l,i,o){var s=0;if(o="undefined"==typeof o?"":o,"undefined"!=typeof t)for(;s<t.length;s++)e(i+t[s]+o)[l](),"#fl-field-"==i&&"code"==e(i+t[s]).data("type")&&e(i+t[s]).data("editor").resize()},_initColorPickers:function(){var t=FLBuilderConfig.colorPresets?FLBuilderConfig.colorPresets:[];FLBuilder.colorPicker=new FLBuilderColorPicker({mode:"hsv",elements:".fl-color-picker .fl-color-picker-value",presets:t,labels:{colorPresets:FLBuilderStrings.colorPresets,colorPicker:FLBuilderStrings.colorPicker,placeholder:FLBuilderStrings.placeholder,removePresetConfirm:FLBuilderStrings.removePresetConfirm,noneColorSelected:FLBuilderStrings.noneColorSelected,alreadySaved:FLBuilderStrings.alreadySaved,noPresets:FLBuilderStrings.noPresets,presetAdded:FLBuilderStrings.presetAdded},mode:"hsv"}),e(FLBuilder.colorPicker).on("presetRemoved presetAdded",function(e,t){FLBuilder.ajax({action:"save_color_presets",presets:t.presets})})},_initSinglePhotoSelector:function(){null===FLBuilder._singlePhotoSelector&&(FLBuilder._singlePhotoSelector=wp.media({title:FLBuilderStrings.selectPhoto,button:{text:FLBuilderStrings.selectPhoto},library:{type:"image"},multiple:!1}))},_selectSinglePhoto:function(){FLBuilder._initSinglePhotoSelector(),FLBuilder._singlePhotoSelector.once("open",e.proxy(FLBuilder._singlePhotoOpened,this)),FLBuilder._singlePhotoSelector.once("select",e.proxy(FLBuilder._singlePhotoSelected,this)),FLBuilder._singlePhotoSelector.open()},_singlePhotoOpened:function(){var t=FLBuilder._singlePhotoSelector.state().get("selection"),l=e(this).closest(".fl-photo-field"),i=l.find("input[type=hidden]"),o=i.val(),s=null;e(this).hasClass("fl-photo-replace")?(t.reset(),l.addClass("fl-photo-empty"),i.val("")):""!==o?(s=wp.media.attachment(o),s.fetch(),t.add(s?[s]:[])):t.reset()},_singlePhotoSelected:function(){var t=FLBuilder._singlePhotoSelector.state().get("selection").first().toJSON(),l=e(this).closest(".fl-photo-field"),i=l.find("input[type=hidden]"),o=l.find(".fl-photo-preview img"),s=l.find("select");i.val(t.id),o.attr("src",FLBuilder._getPhotoSrc(t)),l.removeClass("fl-photo-empty"),l.find("label.error").remove(),s.show(),s.html(FLBuilder._getPhotoSizeOptions(t)),s.trigger("change")},_singlePhotoRemoved:function(){FLBuilder._initSinglePhotoSelector();var t=FLBuilder._singlePhotoSelector.state(),l="undefined"!=typeof t?t.get("selection"):null,i=e(this).closest(".fl-photo-field"),o=i.find("input[type=hidden]"),s=i.find("select");l&&l.reset(),i.addClass("fl-photo-empty"),o.val(""),s.html('<option value="" selected></option>'),s.trigger("change")},_getPhotoSrc:function(e){return"undefined"==typeof e.sizes?e.url:"undefined"!=typeof e.sizes.thumbnail?e.sizes.thumbnail.url:e.sizes.full.url},_getPhotoSizeOptions:function(e){var t="",l=null,i=null,o="",s={full:FLBuilderStrings.fullSize,large:FLBuilderStrings.large,medium:FLBuilderStrings.medium,thumbnail:FLBuilderStrings.thumbnail};if("undefined"==typeof e.sizes)t+='<option value="'+e.url+'">'+FLBuilderStrings.fullSize+"</option>";else for(l in e.sizes)o="undefined"!=typeof s[l]?s[l]+" - ":"undefined"!=typeof FLBuilderConfig.customImageSizeTitles[l]?FLBuilderConfig.customImageSizeTitles[l]+" - ":"",i="full"==l?' selected="selected"':"",t+='<option value="'+e.sizes[l].url+'"'+i+">"+o+e.sizes[l].width+" x "+e.sizes[l].height+"</option>";return t},_selectMultiplePhotos:function(){var t=e(this).closest(".fl-multiple-photos-field"),l=t.find("input[type=hidden]"),i=l.val(),o=""===i?'[gallery ids="-1"]':'[gallery ids="'+JSON.parse(i).join()+'"]',s=wp.shortcode.next("gallery",o).shortcode,r=wp.media.gallery.defaults.id,n=null,a=null;_.isUndefined(s.get("id"))&&!_.isUndefined(r)&&s.set("id",r),n=wp.media.gallery.attachments(s),a=new wp.media.model.Selection(n.models,{props:n.props.toJSON(),multiple:!0}),a.gallery=n.gallery,a.more().done(function(){a.props.set({query:!1}),a.unmirror(),a.props.unset("orderby")}),FLBuilder._multiplePhotoSelector&&FLBuilder._multiplePhotoSelector.dispose(),FLBuilder._multiplePhotoSelector=wp.media({frame:"post",state:e(this).hasClass("fl-multiple-photos-edit")?"gallery-edit":"gallery-library",title:wp.media.view.l10n.editGalleryTitle,editing:!0,multiple:!0,selection:a}).open(),e(FLBuilder._multiplePhotoSelector.views.view.el).addClass("fl-multiple-photos-lightbox"),FLBuilder._multiplePhotoSelector.once("update",e.proxy(FLBuilder._multiplePhotosSelected,this))},_multiplePhotosSelected:function(t){for(var l=e(this).closest(".fl-multiple-photos-field"),i=l.find("input[type=hidden]"),o=l.find(".fl-multiple-photos-count"),s=[],r=0;r<t.models.length;r++)s.push(t.models[r].id);1==s.length?o.html("1 "+FLBuilderStrings.photoSelected):o.html(s.length+" "+FLBuilderStrings.photosSelected),l.removeClass("fl-multiple-photos-empty"),l.find("label.error").remove(),i.val(JSON.stringify(s)).trigger("change")},_selectSingleVideo:function(){null===FLBuilder._singleVideoSelector&&(FLBuilder._singleVideoSelector=wp.media({title:FLBuilderStrings.selectVideo,button:{text:FLBuilderStrings.selectVideo},library:{type:"video"},multiple:!1})),FLBuilder._singleVideoSelector.once("select",e.proxy(FLBuilder._singleVideoSelected,this)),FLBuilder._singleVideoSelector.open()},_singleVideoSelected:function(){var t=FLBuilder._singleVideoSelector.state().get("selection").first().toJSON(),l=e(this).closest(".fl-video-field"),i=l.find(".fl-video-preview-img img"),o=l.find(".fl-video-preview-filename"),s=l.find("input[type=hidden]");i.attr("src",t.icon),o.html(t.filename),l.removeClass("fl-video-empty"),l.find("label.error").remove(),s.val(t.id).trigger("change")},_selectMultipleAudios:function(){var t=e(this).closest(".fl-multiple-audios-field"),l=t.find("input[type=hidden]"),i=l.val(),o=""==i?'[playlist ids="-1"]':'[playlist ids="'+JSON.parse(i).join()+'"]',s=wp.shortcode.next("playlist",o).shortcode,r=wp.media.playlist.defaults.id,n=null,a=null;_.isUndefined(s.get("id"))&&!_.isUndefined(r)&&s.set("id",r),n=wp.media.playlist.attachments(s),a=new wp.media.model.Selection(n.models,{props:n.props.toJSON(),multiple:!0}),a.playlist=n.playlist,a.more().done(function(){a.props.set({query:!1}),a.unmirror(),a.props.unset("orderby")}),FLBuilder._multipleAudiosSelector&&FLBuilder._multipleAudiosSelector.dispose(),FLBuilder._multipleAudiosSelector=wp.media({frame:"post",state:e(this).hasClass("fl-multiple-audios-edit")?"playlist-edit":"playlist-library",title:wp.media.view.l10n.editPlaylistTitle,editing:!0,multiple:!0,selection:a}).open(),FLBuilder._multipleAudiosSelector.content.get("view").sidebar.unset("playlist"),FLBuilder._multipleAudiosSelector.on("content:render:browse",function(e){e&&e.sidebar.on("ready",function(){e.sidebar.unset("playlist")})}),FLBuilder._multipleAudiosSelector.once("update",e.proxy(FLBuilder._multipleAudiosSelected,this))},_multipleAudiosSelected:function(t){for(var l=e(this).closest(".fl-multiple-audios-field"),i=l.find(".fl-multiple-audios-count"),o=l.find("input[type=hidden]"),s=[],r=0;r<t.models.length;r++)s.push(t.models[r].id);1==s.length?i.html("1 "+FLBuilderStrings.audioSelected):i.html(s.length+" "+FLBuilderStrings.audiosSelected),o.val(JSON.stringify(s)).trigger("change"),l.removeClass("fl-multiple-audios-empty"),l.find("label.error").remove()},_selectIcon:function(){var e=this;FLIconSelector.open(function(t){FLBuilder._iconSelected.apply(e,[t])})},_iconSelected:function(t){var l=e(this).closest(".fl-icon-field"),i=l.find("input[type=hidden]"),o=l.find("i"),s=o.attr("data-icon");i.val(t).trigger("change"),o.removeClass(s),o.addClass(t),o.attr("data-icon",t),l.removeClass("fl-icon-empty"),l.find("label.error").remove()},_removeIcon:function(){var t=e(this).closest(".fl-icon-field"),l=t.find("input[type=hidden]"),i=t.find("i");l.val("").trigger("change"),i.removeClass(),i.attr("data-icon",""),t.addClass("fl-icon-empty")},_formFieldClicked:function(){var t=e(this),l=t.closest(".fl-lightbox-wrap").attr("data-instance-id"),i=FLLightbox._instances[l],o=i._node.find(".fl-lightbox").css("left"),s=i._node.find(".fl-lightbox").css("top"),r=t.closest(".fl-builder-settings"),n=t.attr("data-type"),a=t.siblings("input").val(),d=FLBuilder._moduleHelpers[n],u=new FLLightbox({className:"fl-builder-lightbox fl-form-field-settings",destroyOnClose:!0});t.closest(".fl-builder-lightbox").hide(),t.attr("id","fl-"+u._id),u.open('<div class="fl-builder-lightbox-loading"></div>'),u.draggable({handle:".fl-lightbox-header"}),e("body").undelegate(".fl-builder-settings-cancel","click",FLBuilder._settingsCancelClicked),u._node.find(".fl-lightbox").css({left:o,top:Number(parseInt(s)+233)+"px"}),FLBuilder.ajax({action:"render_settings_form",node_id:r.attr("data-node"),node_settings:FLBuilder._getSettings(r),type:n,settings:a.replace(/&#39;/g,"'")},function(e){var t=JSON.parse(e);u.setContent(t.html),u._node.find("form.fl-builder-settings").attr("data-type",n),u._node.find(".fl-builder-settings-cancel").on("click",FLBuilder._closeFormFieldLightbox),FLBuilder._initSettingsForms(),"undefined"!=typeof d&&(FLBuilder._initSettingsValidation(d.rules),d.init()),u._node.find(".fl-lightbox").css({left:o,top:s})})},_closeFormFieldLightbox:function(){var t=e(this).closest(".fl-lightbox-wrap").attr("data-instance-id"),l=FLLightbox._instances[t],i=e(".fl-builder-settings-lightbox"),o=i.find("form"),s=l._node.find(".fl-lightbox").css("left"),r=l._node.find(".fl-lightbox").css("top"),n=0,a=e(window),d=a.height();"undefined"!=typeof tinymce&&"undefined"!=typeof tinymce.EditorManager.activeEditor&&tinymce.EditorManager.activeEditor.remove(),l._node.find(".fl-lightbox-content").html('<div class="fl-builder-lightbox-loading"></div>'),n=l._node.find(".fl-lightbox").height(),d-80>n?l._node.find(".fl-lightbox").css("top",(d-n)/2-40+"px"):l._node.find(".fl-lightbox").css("top","0px"),l.on("close",function(){i.show(),i.find("label.error").remove(),o.validate().hideErrors(),FLBuilder._toggleSettingsTabErrors(),i.find(".fl-lightbox").css({left:s,top:r})}),setTimeout(function(){l.close(),e("body").delegate(".fl-builder-settings-cancel","click",FLBuilder._settingsCancelClicked)},500)},_saveFormFieldClicked:function(){var t=e(this).closest(".fl-builder-settings"),l=e(this).closest(".fl-lightbox-wrap").attr("data-instance-id"),i=t.attr("data-type"),o=FLBuilder._getSettings(t),s={},r=FLBuilder._moduleHelpers[i],n=e(".fl-builder-settings #fl-"+l),a=n.parent().attr("data-preview-text"),d=o[a],u=e('select[name="'+a+'"]'),c=document.createElement("div"),f=!0;return u.length>0&&(d=u.find('option[value="'+o[a]+'"]').text()),"undefined"!=typeof r&&(t.find("label.error").remove(),t.validate().hideErrors(),f=t.validate().form(),f&&(f=r.submit())),f?("undefined"!=typeof a&&"undefined"!=typeof d&&(d.indexOf("fa fa-")>-1?d='<i class="'+d+'"></i>':d.length>35&&(c.innerHTML=d,d=(c.textContent||c.innerText||"").replace(/^(.{35}[^\s]*).*/,"$1")+"..."),n.siblings(".fl-form-field-preview-text").html(d)),s=n.siblings("input").val().replace(/&#39;/g,"'"),""!=s&&(o=e.extend(JSON.parse(s),o)),n.siblings("input").val(JSON.stringify(o)).trigger("change"),FLBuilder._closeFormFieldLightbox.apply(this),!0):(FLBuilder._toggleSettingsTabErrors(),!1)},_layoutFieldClicked:function(){var t=e(this);t.siblings().removeClass("fl-layout-field-option-selected"),t.addClass("fl-layout-field-option-selected"),t.siblings("input").val(t.attr("data-value"))},_initLinkFields:function(){e(".fl-link-field").each(FLBuilder._initLinkField)},_initLinkField:function(){var t=e(this),l=t.find(".fl-link-field-search-input");l.autoSuggest(FLBuilder._ajaxUrl({fl_action:"fl_builder_autosuggest",fl_as_action:"fl_as_links",_wpnonce:FLBuilderConfig.ajaxNonce}),{asHtmlID:l.attr("name"),selectedItemProp:"name",searchObjProps:"name",minChars:3,keyDelay:1e3,fadeOut:!1,usePlaceholder:!0,emptyText:FLBuilderStrings.noResultsFound,showResultListWhenNoMatch:!0,queryParam:"fl_as_query",selectionLimit:1,afterSelectionAdd:FLBuilder._updateLinkField})},_updateLinkField:function(e,t,l){var i=e.closest(".fl-link-field"),o=i.find(".fl-link-field-search"),s=i.find(".fl-link-field-search-input"),r=i.find(".fl-link-field-input");r.val(t.value).trigger("keyup"),s.autoSuggest("remove",t.value),o.hide()},_linkFieldSelectClicked:function(){e(this).parent().find(".fl-link-field-search").show()},_linkFieldSelectCancelClicked:function(){e(this).parent().hide()},_initFontFields:function(){e(".fl-font-field").each(FLBuilder._initFontField)},_initFontField:function(){var t=e(this),l=t.find(".fl-font-field-font");l.on("change",function(){FLBuilder._getFontWeights(l)})},_getFontWeights:function(t){var l=t.next(".fl-font-field-weight"),i=t.val(),o={"default":"Default",regular:"Regular",100:"Thin 100",200:"Extra-Light 200",300:"Light 300",400:"Normal 400",500:"Medium 500",600:"Semi-Bold 600",700:"Bold 700",800:"Extra-Bold 800",900:"Ultra-Bold 900"},s={};l.html(""),s="undefined"!=typeof FLBuilderFontFamilies.system[i]?FLBuilderFontFamilies.system[i].weights:"undefined"!=typeof FLBuilderFontFamilies.google[i]?FLBuilderFontFamilies.google[i]:FLBuilderFontFamilies["default"][i],e.each(s,function(e,t){l.append('<option value="'+t+'">'+o[t]+"</option>")})},initEditorField:function(e){var t=tinyMCEPreInit.mceInit.flhiddeneditor;t.elements=e,tinyMCEPreInit.mceInit[e]=t},_updateEditorFields:function(){var t=e(".fl-builder-settings textarea.wp-editor-area");t.each(FLBuilder._updateEditorField)},_updateEditorField:function(){var t=e(this),l=t.closest(".fl-editor-field"),i=(t.closest(".fl-builder-settings"),t.closest(".wp-editor-wrap")),o=t.attr("id"),s=l.attr("id"),r="undefined"!=typeof tinyMCE&&tinyMCE.get(o),n=t.siblings('textarea[name="'+s+'"]'),a=l.data("wpautop");0===n.length&&(n=e('<textarea name="'+s+'"></textarea>').hide(),t.after(n)),a?r&&i.hasClass("tmce-active")?n.val(r.getContent()):"undefined"!=typeof switchEditors?n.val(switchEditors.wpautop(t.val())):n.val(t.val()):(r&&i.hasClass("tmce-active")&&r.save(),n.val(t.val()))},_loopBuilderPostTypeChange:function(){var t=e(this).val();e(".fl-loop-builder-filter").hide(),e(".fl-loop-builder-"+t+"-filter").show()},_textFieldAddValueSelectChange:function(){var t=e(this),l=e('input[name="'+t.data("target")+'"]'),i=l.val(),o=t.val(),s="";-1==i.indexOf(o)&&(s=(i.trim()+" "+o.trim()).trim(),l.val(s).trigger("change").trigger("keyup")),t.val("")},ajax:function(t,l){var i;if(FLBuilder._silentUpdate)return FLBuilder.showAjaxLoader(),void(FLBuilder._silentUpdateCallbackData=[t,l]);t.silent===!0&&(FLBuilder._silentUpdate=!0);for(i in t)"undefined"==typeof t[i]&&(t[i]=null);return t._wpnonce=FLBuilderConfig.ajaxNonce,t.post_id=e("#fl-post-id").val(),t.fl_builder=1,t.fl_action=t.action,"undefined"!=typeof t.settings&&(t.settings=FLBuilder._ajaxModSecFix(t.settings)),"undefined"!=typeof t.node_settings&&(t.node_settings=FLBuilder._ajaxModSecFix(t.node_settings)),t={fl_builder_data:t},e.post(FLBuilder._ajaxUrl(),t,function(e){FLBuilder._ajaxComplete(),"undefined"!=typeof l&&l.call(this,e)})},_ajaxComplete:function(){var e,t;FLBuilder._silentUpdate=!1,null!==FLBuilder._silentUpdateCallbackData?(FLBuilder.showAjaxLoader(),e=FLBuilder._silentUpdateCallbackData[0],t=FLBuilder._silentUpdateCallbackData[1],FLBuilder._silentUpdateCallbackData=null,FLBuilder.ajax(e,t)):FLBuilder.hideAjaxLoader()},_ajaxUrl:function(e){var t=window.location.href.split("#").shift(),l=null;if("undefined"!=typeof e)for(l in e)t+=t.indexOf("?")>-1?"&":"?",t+=l+"="+e[l];return t},showAjaxLoader:function(){0===e(".fl-builder-lightbox-loading").length&&e(".fl-builder-loading").show()},hideAjaxLoader:function(){e(".fl-builder-loading").hide()},_ajaxModSecFix:function(e){var t;if(FLBuilderConfig.modSecFix&&"undefined"!=typeof btoa)if("string"==typeof e)e=btoa(e);else for(t in e)"string"==typeof e[t]?e[t]=btoa(e[t]):"object"==typeof e[t]&&(e[t]=FLBuilder._ajaxModSecFix(e[t]));return e},_showLightbox:function(e){e="undefined"==typeof e||e,FLBuilder._lightbox.open('<div class="fl-builder-lightbox-loading"></div>'),e?FLBuilder._lightbox.draggable({handle:".fl-lightbox-header"}):FLBuilder._lightbox.draggable(!1),FLBuilder._removeAllOverlays(),FLBuilder._initLightboxScrollbars()},_setLightboxContent:function(e){FLBuilder._lightbox.setContent(e)},_initLightboxScrollbars:function(){FLBuilder._initScrollbars(),FLBuilder._lightboxScrollbarTimeout=setTimeout(FLBuilder._initLightboxScrollbars,500)},_lightboxClosed:function(){FLBuilder.triggerHook("settings-lightbox-closed"),FLBuilder._lightbox.empty(),clearTimeout(FLBuilder._lightboxScrollbarTimeout)},_showActionsLightbox:function(e){var t=wp.template("fl-actions-lightbox");FLBuilder.triggerHook("actions-lightbox-settings",e),FLBuilder._actionsLightbox.open(t(e))},_resizeLightbox:function(){var t=e(this),l=t.hasClass("fa-expand")?"expand":"contract";FLBuilder._lightbox.renderResize(l),e(this).toggleClass("fa-expand").toggleClass("fa-compress")},alert:function(e){var t=new FLLightbox({className:"fl-builder-lightbox fl-builder-alert-lightbox",destroyOnClose:!0}),l=wp.template("fl-alert-lightbox");t.open(l({message:e}))},_alertClose:function(){FLLightbox.closeParent(this)},triggerHook:function(t,l){e("body").trigger("fl-builder."+t,l)},addHook:function(t,l){e("body").on("fl-builder."+t,l)},removeHook:function(t,l){e("body").off("fl-builder."+t,l)},log:function(e){"undefined"!=typeof window.console&&"undefined"!=typeof window.console.log&&console.log(e)},logError:function(e){var t=null;"undefined"!=typeof e&&("undefined"!=typeof e.stack?t=e.stack:"undefined"!=typeof e.message&&(t=e.message),t&&(FLBuilder.log("************************************************************************"),FLBuilder.log(FLBuilderStrings.errorMessage),FLBuilder.log(t),FLBuilder.log("************************************************************************")))},logGlobalError:function(e,t,l,i,o){FLBuilder.log("************************************************************************"),FLBuilder.log(FLBuilderStrings.errorMessage),FLBuilder.log(FLBuilderStrings.globalErrorMessage.replace("{message}",e).replace("{line}",l).replace("{file}",t)),"undefined"!=typeof o&&"undefined"!=typeof o.stack&&(FLBuilder.log(o.stack),FLBuilder.log("************************************************************************"))}},e(function(){FLBuilder._init()})}(jQuery);var FLBuilderColorPicker;!function(e,t){function l(){var t,l,i="backgroundImage";f?h="filter":(t=e('<div id="iris-gradtest" />'),l="linear-gradient(top,#fff,#000)",e.each(p,function(e,o){if(t.css(i,o+l),t.css(i).match("gradient"))return h=e,!1}),h===!1&&(t.css("background","-webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#000))"),t.css(this.bgImageString).match("gradient")&&(h="webkit")),t.remove())}function i(t,l){return t="top"===t?"top":"left",l=e.isArray(l)?l:Array.prototype.slice.call(arguments,1),"webkit"===h?s(t,l):p[h]+"linear-gradient("+t+", "+l.join(", ")+")"}function o(t,l){var i,o,s,n,a,d,u,c,f;t="top"===t?"top":"left",l=e.isArray(l)?l:Array.prototype.slice.call(arguments,1),i="top"===t?0:1,o=e(this),s=l.length-1,n="filter",a=1===i?"left":"top",d=1===i?"right":"bottom",u=1===i?"height":"width",c='<div class="iris-ie-gradient-shim" style="position:absolute;'+u+":100%;"+a+":%start%;"+d+":%end%;"+n+':%filter%;" data-color:"%color%"></div>',f="","static"===o.css("position")&&o.css({position:"relative"}),l=r(l),e.each(l,function(e,t){var o,r,n;return e!==s&&(o=l[e+1],void(t.stop!==o.stop&&(r=100-parseFloat(o.stop)+"%",t.octoHex=new Color(t.color).toIEOctoHex(),o.octoHex=new Color(o.color).toIEOctoHex(),n="progid:DXImageTransform.Microsoft.Gradient(GradientType="+i+", StartColorStr='"+t.octoHex+"', EndColorStr='"+o.octoHex+"')",f+=c.replace("%start%",t.stop).replace("%end%",r).replace("%filter%",n))))}),o.find(".iris-ie-gradient-shim").remove(),e(f).prependTo(o)}function s(t,l){var i=[];return t="top"===t?"0% 0%,0% 100%,":"0% 100%,100% 100%,",l=r(l),e.each(l,function(e,t){i.push("color-stop("+parseFloat(t.stop)/100+", "+t.color+")")}),"-webkit-gradient(linear,"+t+i.join(",")+")"}function r(t){var l=[],i=[],o=[],s=t.length-1;return e.each(t,function(e,t){var o=t,s=!1,r=t.match(/1?[0-9]{1,2}%$/);r&&(o=t.replace(/\s?1?[0-9]{1,2}%$/,""),s=r.shift()),l.push(o),i.push(s)}),i[0]===!1&&(i[0]="0%"),i[s]===!1&&(i[s]="100%"),i=n(i),e.each(i,function(e){o[e]={color:l[e],stop:i[e]}}),o}function n(t){var l,i,o,s,r=0,a=t.length-1,d=0,u=!1;if(t.length<=2||e.inArray(!1,t)<0)return t;for(;d<t.length-1;)u||t[d]!==!1?u&&t[d]!==!1&&(a=d,d=t.length):(r=d-1,u=!0),d++;for(i=a-r,s=parseInt(t[r].replace("%"),10),l=(parseFloat(t[a].replace("%"))-s)/i,d=r+1,o=1;d<a;)t[d]=s+o*l+"%",o++,d++;return n(t)}var a=[],d=navigator.userAgent.toLowerCase(),u="Microsoft Internet Explorer"===navigator.appName,c=u?parseFloat(d.match(/msie ([0-9]{1,}[\.0-9]{0,})/)[1]):0,f=u&&c<10,h=!1,p=["-moz-","-webkit-","-o-","-ms-"];flBuilderParseColorValue=function(e){var t=e.replace(/\s+/g,""),l=t.indexOf("rgba")!==-1?parseFloat(100*t.replace(/^.*,(.+)\)/,"$1")):100,i=l<100;return{value:t,alpha:l,rgba:i}},e.fn.flBuilderColorPickerGradient=function(){var t=arguments;return this.each(function(){f?o.apply(this,t):e(this).css("backgroundImage",i.apply(this,t))})},e.fn.flBuilderColorPickerRaninbowGradient=function(t,l){var i,o,s,r;for(t=t||"top",i=e.extend({},{s:100,l:50},l),o="hsl(%h%,"+i.s+"%,"+i.l+"%)",s=0,r=[];s<=360;)r.push(o.replace("%h%",s)),s+=30;return this.each(function(){e(this).flBuilderColorPickerGradient(t,r)})},FLBuilderColorPicker=function(t){this._html='<div class="fl-color-picker-ui"><div class="iris-picker"><div class="iris-picker-inner"><div class="iris-square"><a class="iris-square-value" href="#"><span class="iris-square-handle ui-slider-handle"></span></a><div class="iris-square-inner iris-square-horiz"></div><div class="iris-square-inner iris-square-vert"></div></div><div class="iris-slider iris-strip"><div class="iris-slider-offset"></div></div></div></div></div>';var l={elements:null,color:"",mode:"hsl",controls:{horiz:"s",vert:"l",strip:"h"},target:!1,width:200,presets:[],labels:{colorPresets:"Color Presets",colorPicker:"Color Picker",placeholder:"Paste color here...",removePresetConfirm:"Are you sure?",noneColorSelected:"None color selected.",alreadySaved:"%s is already a saved preset.",noPresets:"Add a color preset first.",presetAdded:"%s added to presets!"}};this.options=e.extend({},l,t),(f===!1||f===!0&&c>7)&&this._init()},FLBuilderColorPicker.prototype={_html:"",_color:"",_currentElement:"",_inited:!1,_defaultHSLControls:{horiz:"s",vert:"l",strip:"h"},_defaultHSVControls:{horiz:"h",vert:"v",strip:"s"},_scale:{h:360,s:100,l:100,v:100},_init:function(){var t=this;e(t.options.elements);this._color=new Color("#ff0000").setHSpace(t.options.mode),a=this.options.presets,h===!1&&l(),e("html").hasClass("fl-color-picker-init")?t.picker=e(".fl-color-picker-ui"):t.picker=e(this._html).appendTo("body"),u?9===c?t.picker.addClass("iris-ie-9"):c<=8&&t.picker.addClass("iris-ie-lt9"):d.indexOf("compatible")<0&&d.indexOf("khtml")<0&&d.match(/mozilla/)&&t.picker.addClass("iris-mozilla"),t.controls={square:t.picker.find(".iris-square"),squareDrag:t.picker.find(".iris-square-value"),horiz:t.picker.find(".iris-square-horiz"),vert:t.picker.find(".iris-square-vert"),strip:t.picker.find(".iris-strip"),stripSlider:t.picker.find(".iris-strip .iris-slider-offset")},"hsv"===t.options.mode&&t._has("l",t.options.controls)?t.options.controls=t._defaultHSVControls:"hsl"===t.options.mode&&t._has("v",t.options.controls)&&(t.options.controls=t._defaultHSLControls),t.hue=t._color.h(),this._setTemplates(),this._ui=e(".fl-color-picker-ui"),this._iris=e(".iris-picker"),this._wrapper=e("body"),e("html").hasClass("fl-color-picker-init")||this._ui.prepend(this._hexHtml).append(this._presetsHtml),t.element=this._ui.find(".fl-color-picker-input"),t._initControls(),t.active="external",t._change(),t._addInputListeners(t.element),this._buildUI(),this._prepareColorFields(),this._pickerControls(),this._presetsControls(),this._buildAlphaUI(),e("html").addClass("fl-color-picker-init")},_prepareColorFields:function(){var t=this;e(".fl-color-picker-value").each(function(){var l=e(this),i=l.val(),o=l.parent().find(".fl-color-picker-color"),s=flBuilderParseColorValue(i),r="";if(i){if(o.hasClass("fl-color-picker-alpha-enabled")&&s.rgba)r=l.val().toString();else if(!o.hasClass("fl-color-picker-alpha-enabled")&&s.rgba){var n=i.replace("rgba","rgb");n=n.substr(0,n.lastIndexOf(","))+")",t._color._alpha=1,r=n,l.val(n)}else r="#"+l.val().toString();o.css({backgroundColor:r})}})},_setTemplates:function(){this._alphaHtml='<div class="fl-alpha-wrap"><div class="fl-alpha-slider"></div><div class="fl-alpha-slider-offset"></div><div class="fl-alpha-text"></div></div>',this._presetsHtml='<div class="fl-color-picker-presets"><div class="fl-color-picker-presets-toggle"><div class="fl-color-picker-presets-open-label fl-color-picker-active">'+this.options.labels.colorPresets+' <span class="fl-color-picker-icon-arrow-up"></span></div><div class="fl-color-picker-presets-close-label">'+this.options.labels.colorPicker+' <span class="fl-color-picker-icon-arrow-down"></span></div></div><ul class="fl-color-picker-presets-list"></ul></div>',this._hexHtml='<input type="text" class="fl-color-picker-input" maxlength="7" placeholder="'+this.options.labels.placeholder+'"><div class="fl-color-picker-preset-add"></div>',this._presetsTpl='<li class="fl-color-picker-preset"><span class="fl-color-picker-preset-color"></span> <span class="fl-color-picker-preset-label"></span> <span class="fl-color-picker-preset-remove fl-color-picker-icon-remove"></span></li>',this._noPresetsTpl='<li class="fl-color-picker-no-preset"><span class="fl-color-picker-preset-label">'+this.options.labels.noPresets+"</span></li>"},_has:function(t,l){var i=!1;return e.each(l,function(e,l){if(t===l)return i=!0,!1}),i},_buildUI:function(){var t=this;t._presetsList=this._ui.find(".fl-color-picker-presets-list"),t._presetsList.html(""),this.options.presets.length>0?e.each(this.options.presets,function(e,l){t._addPresetView(l)}):t._presetsList.append(this._noPresetsTpl)},_addPresetView:function(t){var l=this._presetsList.find(".fl-color-picker-no-preset");l.length>0&&l.remove();var i=e(this._presetsTpl),o=Color(t);i.attr("data-color",t).find(".fl-color-picker-preset-color").css({backgroundColor:o.toString()}).end().find(".fl-color-picker-preset-label").html(o.toString()),this._presetsList.append(i)},_addPresetFeedback:function(){this._ui.append('<div class="fl-color-picker-added"><div class="fl-color-picker-added-text"><div class="fl-color-picker-icon-check"></div> "'+this.options.labels.presetAdded.replace("%s",this._color.toString())+'"</div></div>'),this._ui.find(".fl-color-picker-added").hide().fadeIn(200).delay(2e3).fadeOut(200,function(){e(this).remove()})},_pickerControls:function(){var t=this;this._wrapper.on("click",".fl-color-picker-color",function(){var l=e(this);t._currentElement=l.parent().find(".fl-color-picker-value"),t._ui.position({my:"left top",at:"left bottom",of:l,collision:"flipfit",using:function(e,l){t._togglePicker(e)}})}).on("click",".fl-color-picker-clear",function(){var l=e(this);t._currentElement=l.parent().find(".fl-color-picker-value"),l.prev(".fl-color-picker-color").css({backgroundColor:"transparent"}).addClass("fl-color-picker-empty"),t._setColor(""),t.element.val(""),t._currentElement.val("").trigger("change")}),e(document).on("click",function(t){0===e(t.target).closest(".fl-color-picker-ui").length&&e(".fl-color-picker-ui.fl-color-picker-active").removeClass("fl-color-picker-active")})},_presetsControls:function(){var t=this,l=t._ui.find(".fl-color-picker-preset-add"),i=t._ui.find(".fl-color-picker-presets"),o=i.find(".fl-color-picker-presets-open-label"),s=i.find(".fl-color-picker-presets-close-label"),r=i.find(".fl-color-picker-presets-list");
6
+ l.off("click").on("click",function(){t._addPreset(t.element.val())}),r.css({height:t.element.innerHeight()+t._iris.innerHeight()+14+"px"}).hide(),i.off("click").on("click",".fl-color-picker-presets-toggle",function(){o.toggleClass("fl-color-picker-active"),s.toggleClass("fl-color-picker-active"),r.slideToggle(500)}).on("click",".fl-color-picker-preset",function(l){var i=new Color(e(this).data("color").toString());t._setColor(i),t._currentElement.parent().find(".fl-color-picker-color").css({backgroundColor:i.toString()}).removeClass("fl-color-picker-empty"),o.toggleClass("fl-color-picker-active"),s.toggleClass("fl-color-picker-active"),r.slideToggle(500)}).on("click",".fl-color-picker-preset-remove",function(l){l.stopPropagation(),t._removePreset(e(this).parent().data("color"))})},_removePreset:function(t){if(confirm(this.options.labels.removePresetConfirm)){var l=t.toString(),i=a.indexOf(l);i>-1&&(a.splice(i,1),this.options.presets=a,this._presetsList.find('.fl-color-picker-preset[data-color="'+l+'"]').slideUp(function(){e(this).remove()})),a.length<1&&this._presetsList.append(this._noPresetsTpl),e(this).trigger("presetRemoved",{presets:a})}},_addPreset:function(t){var l=t.toString().replace(/^#/,"");""===l?alert(this.options.labels.noneColorSelected):a.indexOf(l)>-1?alert(this.options.labels.alreadySaved.replace("%s","#"+l)):(this._addPresetView(l),this._addPresetFeedback(),a.push(l),this.options.presets=a,e(this).trigger("presetAdded",{presets:a}))},_togglePicker:function(e){var t=this;this._ui.hasClass("fl-color-picker-active")?(this._ui.removeClass("fl-color-picker-active"),e&&setTimeout(function(){t._ui.css(e),t._ui.addClass("fl-color-picker-active"),t._setColor(t._currentElement.val())},200)):(e&&t._ui.css(e),setTimeout(function(){t._ui.addClass("fl-color-picker-active"),t._setColor(t._currentElement.val())},200))},_paint:function(){var e=this;e._paintDimension("right","strip"),e._paintDimension("top","vert"),e._paintDimension("left","horiz")},_paintDimension:function(e,t){var l,i=this,o=i._color,s=i.options.mode,r=i._getHSpaceColor(),n=i.controls[t],a=i.options.controls;if(t!==i.active&&("square"!==i.active||"strip"===t))switch(a[t]){case"h":if("hsv"===s){switch(r=o.clone(),t){case"horiz":r[a.vert](100);break;case"vert":r[a.horiz](100);break;case"strip":r.setHSpace("hsl")}l=r.toHsl()}else l="strip"===t?{s:r.s,l:r.l}:{s:100,l:r.l};n.flBuilderColorPickerRaninbowGradient(e,l);break;case"s":"hsv"===s?"vert"===t?l=[o.clone().a(0).s(0).toCSS("rgba"),o.clone().a(1).s(0).toCSS("rgba")]:"strip"===t?l=[o.clone().s(100).toCSS("hsl"),o.clone().s(0).toCSS("hsl")]:"horiz"===t&&(l=["#fff","hsl("+r.h+",100%,50%)"]):l="vert"===t&&"h"===i.options.controls.horiz?["hsla(0, 0%, "+r.l+"%, 0)","hsla(0, 0%, "+r.l+"%, 1)"]:["hsl("+r.h+",0%,50%)","hsl("+r.h+",100%,50%)"],n.flBuilderColorPickerGradient(e,l);break;case"l":l="strip"===t?["hsl("+r.h+",100%,100%)","hsl("+r.h+", "+r.s+"%,50%)","hsl("+r.h+",100%,0%)"]:["#fff","rgba(255,255,255,0) 50%","rgba(0,0,0,0) 50%","rgba(0,0,0,1)"],n.flBuilderColorPickerGradient(e,l);break;case"v":l="strip"===t?[o.clone().v(100).toCSS(),o.clone().v(0).toCSS()]:["rgba(0,0,0,0)","#000"],n.flBuilderColorPickerGradient(e,l)}},_getHSpaceColor:function(){return"hsv"===this.options.mode?this._color.toHsv():this._color.toHsl()},_dimensions:function(e){var t,l=this,i=l.options,o=l.controls,s=o.square,r=l.picker.find(".iris-strip"),n="77.5%",a="12%",d=20,u=i.border?i.width-d:i.width;if(e&&(s.css("width",""),r.css("width",""),l.picker.css({width:"",height:""})),n=u*(parseFloat(n)/100),a=u*(parseFloat(a)/100),t=i.border?n+d:n,s.width(n).height(n),r.height(n).width(a),l.picker.css({width:i.width,height:t}),!i.palettes)return l.picker.css("paddingBottom","")},_addInputListeners:function(e){var t=this,l=100,i=function(l){var i=new Color(e.val()),o=e.val().replace(/^#/,"");if(e.removeClass("iris-error"),i.error)""!==o&&e.addClass("iris-error");else if(i.toString()!==t._color.toString())if("keyup"===l.type){if(o.match(/^[0-9a-fA-F]{3}$/))return;t._setColor(o),t._currentElement.parent().find(".fl-color-picker-color").css({backgroundColor:Color(o).toString()}).removeClass("fl-color-picker-empty"),t._currentElement.val(o).trigger("change")}else if("paste"===l.type)return o=l.originalEvent.clipboardData.getData("text").replace(/^#/,""),hex=Color(o).toString(),t._setColor(o),e.val(hex),t._currentElement.parent().find(".fl-color-picker-color").css({backgroundColor:hex}).removeClass("fl-color-picker-empty"),t._currentElement.val(o).trigger("change"),!1};e.on("change",i).on("keyup",t._debounce(i,l))},_initControls:function(){var t=this,l=t.controls,i=l.square,o=t.options.controls,s=t._scale[o.strip];l.stripSlider.slider({orientation:"horizontal",max:s,slide:function(e,l){t.active="strip","h"===o.strip&&(l.value=s-l.value),t._color[o.strip](l.value),t._change.apply(t,arguments)}}),l.squareDrag.draggable({containment:l.square.find(".iris-square-inner"),zIndex:1e3,cursor:"move",drag:function(e,l){t._squareDrag(e,l)},start:function(){i.addClass("iris-dragging"),e(this).addClass("ui-state-focus")},stop:function(){i.removeClass("iris-dragging"),e(this).removeClass("ui-state-focus")}}).on("mousedown mouseup",function(l){var i="ui-state-focus";l.preventDefault(),"mousedown"===l.type?(t.picker.find("."+i).removeClass(i).blur(),e(this).addClass(i).focus()):e(this).removeClass(i)}).on("keydown",function(e){var i=l.square,o=l.squareDrag,s=o.position(),r=2;switch(e.altKey&&(r*=10),e.keyCode){case 37:s.left-=r;break;case 38:s.top-=r;break;case 39:s.left+=r;break;case 40:s.top+=r;break;default:return!0}s.left=Math.max(0,Math.min(s.left,i.width())),s.top=Math.max(0,Math.min(s.top,i.height())),o.css(s),t._squareDrag(e,{position:s}),e.preventDefault()}),i.mousedown(function(l){var i,o;1===l.which&&e(l.target).is("div")&&(i=t.controls.square.offset(),o={top:l.pageY-i.top,left:l.pageX-i.left},l.preventDefault(),t._squareDrag(l,{position:o}),l.target=t.controls.squareDrag.get(0),t.controls.squareDrag.css(o).trigger(l))})},_squareDrag:function(e,t){var l=this,i=l.options.controls,o=l._squareDimensions(),s=Math.round((o.h-t.position.top)/o.h*l._scale[i.vert]),r=l._scale[i.horiz]-Math.round((o.w-t.position.left)/o.w*l._scale[i.horiz]);l._color[i.horiz](r)[i.vert](s),l.active="square",l._change.apply(l,arguments)},_setColor:function(e){var t,l,i=this,o=i.options.color;i.options.color=e,e=""+e,t=e.replace(/^#/,""),l=new Color(e).setHSpace(i.options.mode),l.error?i.options.color=o:(i._color=l,i.options.color=i._color.toString(),i.active="external",i._change())},_squareDimensions:function(e){var l,i,o=this.controls.square;return e!==t&&o.data("dimensions")?o.data("dimensions"):(i=this.controls.squareDrag,l={w:o.width(),h:o.height()},o.data("dimensions",l),l)},_isNonHueControl:function(e,t){return"square"===e&&"h"===this.options.controls.strip||"external"!==t&&("h"!==t||"strip"!==e)},_change:function(){var t=this,l=t.controls,i=t._getHSpaceColor(),o=["square","strip"],s=t.options.controls,r=s[t.active]||"external",n=t.hue;"strip"===t.active?o=[]:"external"!==t.active&&o.pop(),e.each(o,function(e,o){var r,n,a;if(o!==t.active)switch(o){case"strip":r="h"===s.strip?t._scale[s.strip]-i[s.strip]:i[s.strip],l.stripSlider.slider("value",r);break;case"square":n=t._squareDimensions(),a={left:i[s.horiz]/t._scale[s.horiz]*n.w,top:n.h-i[s.vert]/t._scale[s.vert]*n.h},t.controls.squareDrag.css(a)}}),i.h!==n&&t._isNonHueControl(t.active,r)&&t._color.h(n),t.hue=t._color.h(),t.options.color=t._color.toString(),t.element.is(":input")&&!t._color.error&&(t.element.removeClass("iris-error"),t.element.val()!==t._color.toString()&&(t.element.val(t._color.toString()),this._currentElement&&(this._currentElement.val(t._color.toString().replace(/^#/,"")).parent().find(".fl-color-picker-color").css({backgroundColor:t._color.toString()}).removeClass("fl-color-picker-empty"),t._wrapper.find(".fl-alpha-slider-offset").css("background-color",t._color.toString()),this._currentElement.trigger("change")))),t._paint(),t._inited=!0,t.active=!1},_debounce:function(e,t,l){var i,o;return function(){var s,r,n=this,a=arguments;return s=function(){i=null,l||(o=e.apply(n,a))},r=l&&!i,clearTimeout(i),i=setTimeout(s,t),r&&(o=e.apply(n,a)),o}},_buildAlphaUI:function(){var t=this;t._wrapper.on("click",".fl-color-picker-color",function(){var l=e(this);t._currentElement.val();l.hasClass("fl-color-picker-alpha-enabled")?(t._ui.find(".fl-alpha-wrap").length<=0&&e(t._alphaHtml).insertAfter(t._iris),t._pickerAlphaControls()):t._ui.find(".fl-alpha-wrap").remove()})},_pickerAlphaControls:function(){var e=this,t=e._currentElement,l=flBuilderParseColorValue(t.val()),i=parseFloat(l.alpha/100),o=e._wrapper,s=e._ui,r=s.find(".fl-alpha-wrap"),n=r.find(".fl-alpha-slider"),a=r.find(".fl-alpha-text"),d=r.find(".fl-alpha-slider-offset");alphaHandle=r.find(".ui-slider-handle"),a.text(i<1?i:""),n.slider({orientation:"vertical",slide:function(t,l){var i=parseFloat(l.value/100);e._color._alpha=i,a.text(i<1?i:""),e._change.apply(e,arguments)},create:function(){d.css({backgroundColor:l.value}),o.on("click",".fl-color-picker-clear",function(){e._color._alpha=1,a.text(""),n.slider("value",100).trigger("slide")})},value:l.alpha,step:1,min:1,max:100})}}}(jQuery),function(e,t){var l=function(e,t){return this instanceof l?this._init(e,t):new l(e,t)};l.fn=l.prototype={_color:0,_alpha:1,error:!1,_hsl:{h:0,s:0,l:0},_hsv:{h:0,s:0,v:0},_hSpace:"hsl",_init:function(e){var l="noop";switch(typeof e){case"object":return e.a!==t&&this.a(e.a),l=e.r!==t?"fromRgb":e.l!==t?"fromHsl":e.v!==t?"fromHsv":l,this[l](e);case"string":return this.fromCSS(e);case"number":return this.fromInt(parseInt(e,10))}return this},_error:function(){return this.error=!0,this},clone:function(){for(var e=new l(this.toInt()),t=["_alpha","_hSpace","_hsl","_hsv","error"],i=t.length-1;i>=0;i--)e[t[i]]=this[t[i]];return e},setHSpace:function(e){return this._hSpace="hsv"===e?e:"hsl",this},noop:function(){return this},fromCSS:function(e){var t,l=/^(rgb|hs(l|v))a?\(/;if(this.error=!1,e=e.replace(/^\s+/,"").replace(/\s+$/,"").replace(/;$/,""),e.match(l)&&e.match(/\)$/)){if(t=e.replace(/(\s|%)/g,"").replace(l,"").replace(/,?\);?$/,"").split(","),t.length<3)return this._error();if(4===t.length&&(this.a(parseFloat(t.pop())),this.error))return this;for(var i=t.length-1;i>=0;i--)if(t[i]=parseInt(t[i],10),isNaN(t[i]))return this._error();return e.match(/^rgb/)?this.fromRgb({r:t[0],g:t[1],b:t[2]}):e.match(/^hsv/)?this.fromHsv({h:t[0],s:t[1],v:t[2]}):this.fromHsl({h:t[0],s:t[1],l:t[2]})}return this.fromHex(e)},fromRgb:function(e,l){return"object"!=typeof e||e.r===t||e.g===t||e.b===t?this._error():(this.error=!1,this.fromInt(parseInt((e.r<<16)+(e.g<<8)+e.b,10),l))},fromHex:function(e){return e=e.replace(/^#/,"").replace(/^0x/,""),3===e.length&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),this.error=!/^[0-9A-F]{6}$/i.test(e),this.fromInt(parseInt(e,16))},fromHsl:function(e){var l,i,o,s,r,n,a,d;return"object"!=typeof e||e.h===t||e.s===t||e.l===t?this._error():(this._hsl=e,this._hSpace="hsl",n=e.h/360,a=e.s/100,d=e.l/100,0===a?l=i=o=d:(s=d<.5?d*(1+a):d+a-d*a,r=2*d-s,l=this.hue2rgb(r,s,n+1/3),i=this.hue2rgb(r,s,n),o=this.hue2rgb(r,s,n-1/3)),this.fromRgb({r:255*l,g:255*i,b:255*o},!0))},fromHsv:function(e){var l,i,o,s,r,n,a,d,u,c,f;if("object"!=typeof e||e.h===t||e.s===t||e.v===t)return this._error();switch(this._hsv=e,this._hSpace="hsv",l=e.h/360,i=e.s/100,o=e.v/100,a=Math.floor(6*l),d=6*l-a,u=o*(1-i),c=o*(1-d*i),f=o*(1-(1-d)*i),a%6){case 0:s=o,r=f,n=u;break;case 1:s=c,r=o,n=u;break;case 2:s=u,r=o,n=f;break;case 3:s=u,r=c,n=o;break;case 4:s=f,r=u,n=o;break;case 5:s=o,r=u,n=c}return this.fromRgb({r:255*s,g:255*r,b:255*n},!0)},fromInt:function(e,l){return this._color=parseInt(e,10),isNaN(this._color)&&(this._color=0),this._color>16777215?this._color=16777215:this._color<0&&(this._color=0),l===t&&(this._hsv.h=this._hsv.s=this._hsl.h=this._hsl.s=0),this},hue2rgb:function(e,t,l){return l<0&&(l+=1),l>1&&(l-=1),l<1/6?e+6*(t-e)*l:l<.5?t:l<2/3?e+(t-e)*(2/3-l)*6:e},toString:function(){if(this._alpha<1)return this.toCSS("rgba",this._alpha).replace(/\s+/g,"");var e=parseInt(this._color,10).toString(16);if(this.error)return"";if(e.length<6)for(var t=6-e.length-1;t>=0;t--)e="0"+e;return"#"+e},toCSS:function(e,t){switch(e=e||"hex",t=parseFloat(t||this._alpha),e){case"rgb":case"rgba":var l=this.toRgb();return t<1?"rgba( "+l.r+", "+l.g+", "+l.b+", "+t+" )":"rgb( "+l.r+", "+l.g+", "+l.b+" )";case"hsl":case"hsla":var i=this.toHsl();return t<1?"hsla( "+i.h+", "+i.s+"%, "+i.l+"%, "+t+" )":"hsl( "+i.h+", "+i.s+"%, "+i.l+"% )";default:return this.toString()}},toRgb:function(){return{r:255&this._color>>16,g:255&this._color>>8,b:255&this._color}},toHsl:function(){var e,t,l=this.toRgb(),i=l.r/255,o=l.g/255,s=l.b/255,r=Math.max(i,o,s),n=Math.min(i,o,s),a=(r+n)/2;if(r===n)e=t=0;else{var d=r-n;switch(t=a>.5?d/(2-r-n):d/(r+n),r){case i:e=(o-s)/d+(o<s?6:0);break;case o:e=(s-i)/d+2;break;case s:e=(i-o)/d+4}e/=6}return e=Math.round(360*e),0===e&&this._hsl.h!==e&&(e=this._hsl.h),t=Math.round(100*t),0===t&&this._hsl.s&&(t=this._hsl.s),{h:e,s:t,l:Math.round(100*a)}},toHsv:function(){var e,t,l=this.toRgb(),i=l.r/255,o=l.g/255,s=l.b/255,r=Math.max(i,o,s),n=Math.min(i,o,s),a=r,d=r-n;if(t=0===r?0:d/r,r===n)e=t=0;else{switch(r){case i:e=(o-s)/d+(o<s?6:0);break;case o:e=(s-i)/d+2;break;case s:e=(i-o)/d+4}e/=6}return e=Math.round(360*e),0===e&&this._hsv.h!==e&&(e=this._hsv.h),t=Math.round(100*t),0===t&&this._hsv.s&&(t=this._hsv.s),{h:e,s:t,v:Math.round(100*a)}},toInt:function(){return this._color},toIEOctoHex:function(){var e=this.toString(),t=parseInt(255*this._alpha,10).toString(16);return 1===t.length&&(t="0"+t),"#"+t+e.replace(/^#/,"")},toLuminosity:function(){var e=this.toRgb();return.2126*Math.pow(e.r/255,2.2)+.7152*Math.pow(e.g/255,2.2)+.0722*Math.pow(e.b/255,2.2)},getDistanceLuminosityFrom:function(e){if(!(e instanceof l))throw"getDistanceLuminosityFrom requires a Color object";var t=this.toLuminosity(),i=e.toLuminosity();return t>i?(t+.05)/(i+.05):(i+.05)/(t+.05)},getMaxContrastColor:function(){var e=this.toLuminosity(),t=e>=.5?"000000":"ffffff";return new l(t)},getReadableContrastingColor:function(e,i){if(!(e instanceof l))return this;var o=i===t?5:i,s=e.getDistanceLuminosityFrom(this),r=e.getMaxContrastColor(),n=r.getDistanceLuminosityFrom(e);if(n<=o)return r;if(s>=o)return this;for(var a=0===r.toInt()?-1:1;s<o&&(this.l(a,!0),s=this.getDistanceLuminosityFrom(e),0!==this._color&&16777215!==this._color););return this},a:function(e){if(e===t)return this._alpha;var l=parseFloat(e);return isNaN(l)?this._error():(this._alpha=l,this)},darken:function(e){return e=e||5,this.l(-e,!0)},lighten:function(e){return e=e||5,this.l(e,!0)},saturate:function(e){return e=e||15,this.s(e,!0)},desaturate:function(e){return e=e||15,this.s(-e,!0)},toGrayscale:function(){return this.setHSpace("hsl").s(0)},getComplement:function(){return this.h(180,!0)},getSplitComplement:function(e){e=e||1;var t=180+30*e;return this.h(t,!0)},getAnalog:function(e){e=e||1;var t=30*e;return this.h(t,!0)},getTetrad:function(e){e=e||1;var t=60*e;return this.h(t,!0)},getTriad:function(e){e=e||1;var t=120*e;return this.h(t,!0)},_partial:function(e){var l=i[e];return function(i,o){var s=this._spaceFunc("to",l.space);return i===t?s[e]:(o===!0&&(i=s[e]+i),l.mod&&(i%=l.mod),l.range&&(i=i<l.range[0]?l.range[0]:i>l.range[1]?l.range[1]:i),s[e]=i,this._spaceFunc("from",l.space,s))}},_spaceFunc:function(e,t,l){var i=t||this._hSpace,o=e+i.charAt(0).toUpperCase()+i.substr(1);return this[o](l)}};var i={h:{mod:360},s:{range:[0,100]},l:{space:"hsl",range:[0,100]},v:{space:"hsv",range:[0,100]},r:{space:"rgb",range:[0,255]},g:{space:"rgb",range:[0,255]},b:{space:"rgb",range:[0,255]}};for(var o in i)i.hasOwnProperty(o)&&(l.fn[o]=l.fn._partial(o));"object"==typeof exports?module.exports=l:e.Color=l}(this),function(e){FLIconSelector={_content:null,_lightbox:null,_rendered:!1,_filterText:"",open:function(e){FLIconSelector._rendered||FLIconSelector._render(),null===FLIconSelector._content?(FLIconSelector._lightbox.open('<div class="fl-builder-lightbox-loading"></div>'),FLBuilder.ajax({action:"render_icon_selector"},FLIconSelector._getContentComplete)):FLIconSelector._lightbox.open(),FLIconSelector._lightbox.on("icon-selected",function(t,l){FLIconSelector._lightbox.off("icon-selected"),FLIconSelector._lightbox.close(),e(l)})},_render:function(){FLIconSelector._lightbox=new FLLightbox({className:"fl-icon-selector"}),FLIconSelector._rendered=!0},_getContentComplete:function(t){var l=JSON.parse(t);FLIconSelector._content=l.html,FLIconSelector._lightbox.setContent(l.html),e(".fl-icons-filter-select").on("change",FLIconSelector._filter),e(".fl-icons-filter-text").on("keyup",FLIconSelector._filter),e(".fl-icons-list i").on("click",FLIconSelector._select),e(".fl-icon-selector-cancel").on("click",e.proxy(FLIconSelector._lightbox.close,FLIconSelector._lightbox))},_filter:function(){var t=e(".fl-icons-filter-select").val(),l=e(".fl-icons-filter-text").val();"all"==t?e(".fl-icons-section").show():(e(".fl-icons-section").hide(),e(".fl-"+t).show()),FLIconSelector._filterText=l,""!==l?e(".fl-icons-list i").each(FLIconSelector._filterIcon):e(".fl-icons-list i").show()},_filterIcon:function(){var t=e(this);-1==t.attr("class").indexOf(FLIconSelector._filterText)?t.hide():t.show()},_select:function(){var t=e(this).attr("class");FLIconSelector._lightbox.trigger("icon-selected",t)}}}(jQuery),function(e){FLLightbox=function(e){this._init(e),this._render(),this._bind()},FLLightbox.closeParent=function(t){var l=e(t).closest(".fl-lightbox-wrap").attr("data-instance-id");FLLightbox._instances[l].close()},FLLightbox._instances={},FLLightbox.prototype={_id:null,_node:null,_visible:!1,_resizeTimer:null,_draggable:!1,_defaults:{className:"",destroyOnClose:!1},open:function(e){this._node.find(".fl-lightbox").attr("style",""),this._node.show(),this._visible=!0,"undefined"!=typeof e?this.setContent(e):this._resize(),this.trigger("open")},close:function(){"undefined"!=typeof tinymce&&"undefined"!=typeof tinymce.EditorManager.activeEditor&&null!=tinymce.EditorManager.activeEditor&&tinymce.EditorManager.activeEditor.hide(),this._node.hide(),this._visible=!1,this.trigger("close"),this._defaults.destroyOnClose&&this.destroy()},setContent:function(e){this._node.find(".fl-lightbox-content").html(e),this._resize()},empty:function(){this._node.find(".fl-lightbox-content").empty(),this._node.find(".fl-lightbox").removeClass("fl-lightbox-expanded")},on:function(e,t){this._node.on(e,t)},off:function(e){this._node.off(e)},trigger:function(e,t){this._node.trigger(e,t)},draggable:function(e){var t=this._node.find(".fl-lightbox-mask"),l=this._node.find(".fl-lightbox");e="undefined"!=typeof e&&e,this._draggable&&l.draggable("destroy"),e?(this._unbind(),this._draggable=!0,t.hide(),l.draggable({cursor:"move",handle:e.handle||""})):(t.show(),this._bind(),this._draggable=!1),this._resize()},destroy:function(){e(window).off("resize.fl-lightbox-"+this._id),this._node.empty(),this._node.remove(),FLLightbox._instances[this._id]="undefined";try{delete FLLightbox._instances[this._id]}catch(t){}},renderResize:function(t){if("undefined"!=typeof t){var l=this._getActiveNode();if(lightbox=l.find(".fl-lightbox"),boxFields=lightbox.find(".fl-builder-settings-fields"),win=e(window),winHeight=win.height(),winWidth=win.width(),boxHeaderHeight=lightbox.find(".fl-lightbox-header").height(),boxTabsHeight=lightbox.find(".fl-builder-settings-tabs").height(),boxFooterHeight=lightbox.find(".fl-lightbox-footer").height(),boxFieldHeight=winHeight-(boxHeaderHeight+boxTabsHeight+boxFooterHeight+103),editor="undefined"!=typeof tinymce&&tinymce.EditorManager.activeEditor?tinymce:null,editorId=editor?editor.EditorManager.activeEditor.id:"flhiddeneditor",editorIframeEl=lightbox.find("#"+editorId+"_ifr"),editorTextarea=lightbox.find("#"+editorId),codeField=lightbox.find(".fl-code-field .ace_editor"),"expand"==t||"window_resize"==t){if("window_resize"==t&&!lightbox.hasClass("fl-lightbox-expanded"))return!1;boxFields.css("height",boxFieldHeight+"px"),"expand"==t&&(lightbox.addClass("fl-lightbox-expanded"),lightbox.draggable("disable")),editorIframeEl.length>0&&editorIframeEl.css("height",boxFieldHeight-145+"px"),editorTextarea.length>0&&editorTextarea.css("height",boxFieldHeight-145+"px"),codeField.length>0&&codeField.css("height",boxFieldHeight-30+"px")}else setTimeout(e.proxy(this._resize,this),250),lightbox.removeClass("fl-lightbox-expanded"),boxFields.removeAttr("style"),null!==editorId&&(editorIframeEl.css("height","232px"),editorTextarea.css("height","232px")),codeField.length>0&&codeField.css("height","380px"),lightbox.draggable("enable")}},_init:function(t){var l=0,i=null;for(i in FLLightbox._instances)l++;this._defaults=e.extend({},this._defaults,t),this._id=(new Date).getTime()+l,FLLightbox._instances[this._id]=this},_render:function(){this._node=e('<div class="fl-lightbox-wrap" data-instance-id="'+this._id+'"><div class="fl-lightbox-mask"></div><div class="fl-lightbox"><div class="fl-lightbox-content-wrap"><div class="fl-lightbox-content"></div></div></div></div>'),this._node.addClass(this._defaults.className),e("body").append(this._node)},_bind:function(){e(window).on("resize.fl-lightbox-"+this._id,e.proxy(this._delayedResize,this))},_unbind:function(){e(window).off("resize.fl-lightbox-"+this._id)},_delayedResize:function(){clearTimeout(this._resizeTimer),this._resizeTimer=setTimeout(e.proxy(this._resize,this),250),this.renderResize("window_resize")},_resize:function(){if(this._visible){var t=this._node.find(".fl-lightbox"),l=t.height(),i=t.width(),o=e(window),s=o.height(),r=o.width(),n="0px",a=(r-i)/2-30+"px";t.css({margin:"0px",top:"auto",left:"auto"}),s-80>l&&(n=(s-l)/2-40+"px"),this._draggable?(t.css("top",n),t.css("left",FLBuilderConfig.isRtl?"-"+a:a)):(t.css("margin-top",n),t.css("margin-left","auto"),t.css("margin-right","auto"))}},_onKeypress:function(e){27==e.which&&this._visible&&this.close()},_getActiveNode:function(){var t=this._node;return e.each(FLLightbox._instances,function(l,i){e(i._node).is(":visible")&&(t=e(i._node))}),t}}}(jQuery),function(e){FLStyleSheet=function(t){"object"==typeof t&&e.extend(this,t),this._createSheet()},FLStyleSheet.prototype={id:null,_sheet:null,_sheetElement:null,updateRule:function(e,t,l){for(var i=this._sheet.cssRules?this._sheet.cssRules:this._sheet.rules,o=null,s=0;s<i.length;s++)i[s].selectorText.toLowerCase()==e.toLowerCase()&&(o=i[s]);if(o)if("object"==typeof t)for(s in t)o.style[this._toCamelCase(s)]=t[s];else o.style[this._toCamelCase(t)]=l;else this.addRule(e,t,l)},addRule:function(e,t,l){var i="",o="";if("object"==typeof t)for(o in t)i+=o+":"+t[o]+";";else i=t+":"+l+";";this._sheet.insertRule?this._sheet.insertRule(e+" { "+i+" }",this._sheet.cssRules.length):this._sheet.addRule(e,i)},destroy:function(){this._sheetElement&&(this._sheetElement.remove(),this._sheetElement=null),this._sheet&&(this._sheet=null)},disable:function(){this._sheet.disabled=!0},enable:function(){this._sheet.disabled=!1},_createSheet:function(){var t=this.id?' id="'+this.id+'"':"";this._sheet||(this._sheetElement=e('<style type="text/css"'+t+"></style>"),e("body").append(this._sheetElement),this._sheet=this._sheetElement[0].sheet)},_toCamelCase:function(e){return e.toLowerCase().replace(/-(.)/g,function(e,t){return t.toUpperCase()})}}}(jQuery);
js/fl-color-picker.js CHANGED
@@ -261,6 +261,19 @@ var FLBuilderColorPicker;
261
  return backFillColorStops( stops );
262
  }
263
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  /**
265
  * @since 1.6.4
266
  * @method $.fn.flBuilderColorPickerGradient
@@ -439,7 +452,7 @@ var FLBuilderColorPicker;
439
  var self = this,
440
  el = $( self.options.elements );
441
 
442
- this._color = new Color( '#000000' ).setHSpace( self.options.mode );
443
 
444
  // Set picker color presets
445
  FLBuilderColorPresets = this.options.presets;
@@ -506,6 +519,7 @@ var FLBuilderColorPicker;
506
  self.element = this._ui.find( '.fl-color-picker-input' );
507
  self._initControls();
508
  self.active = 'external';
 
509
  self._change();
510
 
511
  // binds listeners to all color picker instances
@@ -523,6 +537,9 @@ var FLBuilderColorPicker;
523
  // bind presets control events
524
  this._presetsControls();
525
 
 
 
 
526
  // now we know that the picker is already added to the body
527
  $('html').addClass( 'fl-color-picker-init' );
528
 
@@ -539,12 +556,30 @@ var FLBuilderColorPicker;
539
  // append presets initial html and trigger that toggles the picker
540
  $('.fl-color-picker-value').each( function(){
541
 
542
- var $this = $( this );
543
- var $colorTrigger = $this.parent().find( '.fl-color-picker-color' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
544
 
545
- if( $this.val() ){
546
- // set initial color
547
- $colorTrigger.css({ backgroundColor: '#' + $this.val().toString() });
548
  }
549
  });
550
  },
@@ -557,6 +592,12 @@ var FLBuilderColorPicker;
557
  */
558
  _setTemplates: function(){
559
 
 
 
 
 
 
 
560
  this._presetsHtml = '<div class="fl-color-picker-presets">' +
561
  '<div class="fl-color-picker-presets-toggle">' +
562
  '<div class="fl-color-picker-presets-open-label fl-color-picker-active">' + this.options.labels.colorPresets + ' <span class="fl-color-picker-icon-arrow-up"></span></div>' +
@@ -567,7 +608,7 @@ var FLBuilderColorPicker;
567
 
568
  this._hexHtml = '<input type="text" class="fl-color-picker-input" maxlength="7" placeholder="' + this.options.labels.placeholder + '">' +
569
  '<div class="fl-color-picker-preset-add"></div>';
570
-
571
  this._presetsTpl = '<li class="fl-color-picker-preset"><span class="fl-color-picker-preset-color"></span> <span class="fl-color-picker-preset-label"></span> <span class="fl-color-picker-preset-remove fl-color-picker-icon-remove"></span></li>';
572
 
573
  this._noPresetsTpl = '<li class="fl-color-picker-no-preset"><span class="fl-color-picker-preset-label">' + this.options.labels.noPresets + '</span></li>';
@@ -981,6 +1022,60 @@ var FLBuilderColorPicker;
981
  return ( this.options.mode === 'hsv' ) ? this._color.toHsv() : this._color.toHsl();
982
  },
983
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
984
  /**
985
  * Logic to listen to events from the main color input and to bind it to the current color field.
986
  *
@@ -1308,7 +1403,8 @@ var FLBuilderColorPicker;
1308
  .find( '.fl-color-picker-color' )
1309
  .css({ backgroundColor: self._color.toString() })
1310
  .removeClass( 'fl-color-picker-empty' );
1311
-
 
1312
  this._currentElement.trigger( 'change' );
1313
  }
1314
 
@@ -1349,7 +1445,96 @@ var FLBuilderColorPicker;
1349
  }
1350
  return result;
1351
  };
1352
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1353
  };
1354
 
1355
  }( jQuery ));
@@ -1603,6 +1788,11 @@ var FLBuilderColorPicker;
1603
  },
1604
 
1605
  toString: function() {
 
 
 
 
 
1606
  var hex = parseInt( this._color, 10 ).toString( 16 );
1607
  if ( this.error )
1608
  return '';
261
  return backFillColorStops( stops );
262
  }
263
 
264
+ /**
265
+ * @since 1.8.4
266
+ * @method flBuilderParseColorValue
267
+ * @return {Array}
268
+ */
269
+ flBuilderParseColorValue = function( val ) {
270
+ var value = val.replace(/\s+/g, ''),
271
+ alpha = ( value.indexOf('rgba') !== -1 ) ? parseFloat( value.replace(/^.*,(.+)\)/, '$1') * 100 ) : 100,
272
+ rgba = ( alpha < 100 ) ? true : false;
273
+
274
+ return { value: value, alpha: alpha, rgba: rgba };
275
+ }
276
+
277
  /**
278
  * @since 1.6.4
279
  * @method $.fn.flBuilderColorPickerGradient
452
  var self = this,
453
  el = $( self.options.elements );
454
 
455
+ this._color = new Color( '#ff0000' ).setHSpace( self.options.mode );
456
 
457
  // Set picker color presets
458
  FLBuilderColorPresets = this.options.presets;
519
  self.element = this._ui.find( '.fl-color-picker-input' );
520
  self._initControls();
521
  self.active = 'external';
522
+ //self._dimensions();
523
  self._change();
524
 
525
  // binds listeners to all color picker instances
537
  // bind presets control events
538
  this._presetsControls();
539
 
540
+ // adds opacity/alpha support
541
+ this._buildAlphaUI();
542
+
543
  // now we know that the picker is already added to the body
544
  $('html').addClass( 'fl-color-picker-init' );
545
 
556
  // append presets initial html and trigger that toggles the picker
557
  $('.fl-color-picker-value').each( function(){
558
 
559
+ var $this = $( this ),
560
+ $colorValue = $this.val(),
561
+ $colorTrigger = $this.parent().find( '.fl-color-picker-color' ),
562
+ $parsedValue = flBuilderParseColorValue( $colorValue ),
563
+ $bgColor = '';
564
+
565
+ if( $colorValue ){
566
+ // set initial color, check for alpha support
567
+ if ( $colorTrigger.hasClass('fl-color-picker-alpha-enabled') && $parsedValue.rgba ) {
568
+ $bgColor = $this.val().toString();
569
+ }
570
+ else if ( !$colorTrigger.hasClass('fl-color-picker-alpha-enabled') && $parsedValue.rgba ) {
571
+ var $newColorValue = $colorValue.replace('rgba', 'rgb')
572
+ $newColorValue = $newColorValue.substr(0, $newColorValue.lastIndexOf(",")) + ')';
573
+
574
+ self._color._alpha = 1;
575
+ $bgColor = $newColorValue;
576
+ $this.val($newColorValue);
577
+ }
578
+ else {
579
+ $bgColor = '#' + $this.val().toString();
580
+ }
581
 
582
+ $colorTrigger.css({ backgroundColor: $bgColor });
 
 
583
  }
584
  });
585
  },
592
  */
593
  _setTemplates: function(){
594
 
595
+ this._alphaHtml = '<div class="fl-alpha-wrap">' +
596
+ '<div class="fl-alpha-slider"></div>' +
597
+ '<div class="fl-alpha-slider-offset"></div>' +
598
+ '<div class="fl-alpha-text"></div>' +
599
+ '</div>';
600
+
601
  this._presetsHtml = '<div class="fl-color-picker-presets">' +
602
  '<div class="fl-color-picker-presets-toggle">' +
603
  '<div class="fl-color-picker-presets-open-label fl-color-picker-active">' + this.options.labels.colorPresets + ' <span class="fl-color-picker-icon-arrow-up"></span></div>' +
608
 
609
  this._hexHtml = '<input type="text" class="fl-color-picker-input" maxlength="7" placeholder="' + this.options.labels.placeholder + '">' +
610
  '<div class="fl-color-picker-preset-add"></div>';
611
+
612
  this._presetsTpl = '<li class="fl-color-picker-preset"><span class="fl-color-picker-preset-color"></span> <span class="fl-color-picker-preset-label"></span> <span class="fl-color-picker-preset-remove fl-color-picker-icon-remove"></span></li>';
613
 
614
  this._noPresetsTpl = '<li class="fl-color-picker-no-preset"><span class="fl-color-picker-preset-label">' + this.options.labels.noPresets + '</span></li>';
1022
  return ( this.options.mode === 'hsv' ) ? this._color.toHsv() : this._color.toHsl();
1023
  },
1024
 
1025
+ /**
1026
+ * @since 1.6.4
1027
+ * @method _dimensions
1028
+ * @return {Boolean}
1029
+ */
1030
+ _dimensions: function( reset ) {
1031
+ // whatever size
1032
+ var self = this,
1033
+ opts = self.options,
1034
+ controls = self.controls,
1035
+ square = controls.square,
1036
+ strip = self.picker.find( '.iris-strip' ),
1037
+ squareWidth = '77.5%',
1038
+ stripWidth = '12%',
1039
+ totalPadding = 20,
1040
+ innerWidth = opts.border ? opts.width - totalPadding : opts.width,
1041
+ controlsHeight;
1042
+ //paletteCount = $.isArray( opts.palettes ) ? opts.palettes.length : self._palettes.length,
1043
+ //paletteMargin, paletteWidth, paletteContainerWidth;
1044
+
1045
+ if ( reset ) {
1046
+ square.css( 'width', '' );
1047
+ strip.css( 'width', '' );
1048
+ self.picker.css( {width: '', height: ''} );
1049
+ }
1050
+
1051
+ squareWidth = innerWidth * ( parseFloat( squareWidth ) / 100 );
1052
+ stripWidth = innerWidth * ( parseFloat( stripWidth ) / 100 );
1053
+ controlsHeight = opts.border ? squareWidth + totalPadding : squareWidth;
1054
+
1055
+ square.width( squareWidth ).height( squareWidth );
1056
+ strip.height( squareWidth ).width( stripWidth );
1057
+ self.picker.css( { width: opts.width, height: controlsHeight } );
1058
+
1059
+ if ( ! opts.palettes ) {
1060
+ return self.picker.css( 'paddingBottom', '' );
1061
+ }
1062
+
1063
+ // single margin at 2%
1064
+ /*paletteMargin = squareWidth * 2 / 100;
1065
+ paletteContainerWidth = squareWidth - ( ( paletteCount - 1 ) * paletteMargin );
1066
+ paletteWidth = paletteContainerWidth / paletteCount;
1067
+ self.picker.find('.iris-palette').each( function( i ) {
1068
+ var margin = i === 0 ? 0 : paletteMargin;
1069
+ $( this ).css({
1070
+ width: paletteWidth,
1071
+ height: paletteWidth,
1072
+ marginLeft: margin
1073
+ });
1074
+ });
1075
+ self.picker.css( 'paddingBottom', paletteWidth + paletteMargin );
1076
+ strip.height( paletteWidth + paletteMargin + squareWidth );*/
1077
+ },
1078
+
1079
  /**
1080
  * Logic to listen to events from the main color input and to bind it to the current color field.
1081
  *
1403
  .find( '.fl-color-picker-color' )
1404
  .css({ backgroundColor: self._color.toString() })
1405
  .removeClass( 'fl-color-picker-empty' );
1406
+
1407
+ self._wrapper.find('.fl-alpha-slider-offset').css('background-color', self._color.toString());
1408
  this._currentElement.trigger( 'change' );
1409
  }
1410
 
1445
  }
1446
  return result;
1447
  };
1448
+ },
1449
+
1450
+ /**
1451
+ * Show an alpha UI when it is enabled
1452
+ *
1453
+ * @since 1.8.5
1454
+ * @method _buildAlphaUI
1455
+ */
1456
+ _buildAlphaUI: function() {
1457
+ var self = this;
1458
+
1459
+ self._wrapper.on( 'click', '.fl-color-picker-color', function(){
1460
+ var $this = $(this),
1461
+ $currentColor = self._currentElement.val();
1462
+
1463
+ if ( $this.hasClass('fl-color-picker-alpha-enabled') ) {
1464
+
1465
+ // Add alpha if not exists
1466
+ if (self._ui.find('.fl-alpha-wrap').length <= 0) {
1467
+ $(self._alphaHtml).insertAfter( self._iris );
1468
+ }
1469
+
1470
+ self._pickerAlphaControls();
1471
+ }
1472
+ else {
1473
+ self._ui.find('.fl-alpha-wrap').remove();
1474
+ }
1475
+ });
1476
+ },
1477
+
1478
+ /**
1479
+ * Enable the opacity/alpha to color picker
1480
+ * Credits to https://github.com/Codestar/codestar-wp-color-picker
1481
+ *
1482
+ * @since 1.8.5
1483
+ * @method _pickerAlphaControls
1484
+ */
1485
+ _pickerAlphaControls: function() {
1486
+ var self = this,
1487
+ el = self._currentElement,
1488
+ picker = flBuilderParseColorValue( el.val() ),
1489
+ floatValue = parseFloat( picker.alpha / 100 ),
1490
+ wrapper = self._wrapper,
1491
+ container = self._ui,
1492
+ alphaWrap = container.find('.fl-alpha-wrap'),
1493
+ alphaSlider = alphaWrap.find('.fl-alpha-slider'),
1494
+ alphaText = alphaWrap.find('.fl-alpha-text'),
1495
+ alphaOffset = alphaWrap.find('.fl-alpha-slider-offset');
1496
+ alphaHandle = alphaWrap.find('.ui-slider-handle');
1497
+
1498
+ // Set alpha text value
1499
+ alphaText.text(floatValue < 1 ? floatValue : '');
1500
+
1501
+ // alpha slider
1502
+ alphaSlider.slider({
1503
+ orientation: "vertical",
1504
+
1505
+ // slider: slide
1506
+ slide: function( event, ui ) {
1507
+
1508
+ var slideValue = parseFloat( ui.value / 100 );
1509
+
1510
+ // update iris data alpha && color option && alpha text
1511
+ self._color._alpha = slideValue;
1512
+ alphaText.text( ( slideValue < 1 ? slideValue : '' ) );
1513
+ self._change.apply( self, arguments );
1514
+ },
1515
+
1516
+ // slider: create
1517
+ create: function() {
1518
+
1519
+ // Initializes alpha values
1520
+ alphaOffset.css({ backgroundColor: picker.value });
1521
+
1522
+ // Clear alpha values
1523
+ wrapper.on('click', '.fl-color-picker-clear', function() {
1524
+ self._color._alpha = 1;
1525
+ alphaText.text('');
1526
+ alphaSlider.slider('value', 100).trigger('slide');
1527
+ });
1528
+ },
1529
+
1530
+ // slider: options
1531
+ value: picker.alpha,
1532
+ step: 1,
1533
+ min: 1,
1534
+ max: 100
1535
+ });
1536
+ },
1537
+
1538
  };
1539
 
1540
  }( jQuery ));
1788
  },
1789
 
1790
  toString: function() {
1791
+
1792
+ if ( this._alpha < 1 ) {
1793
+ return this.toCSS('rgba', this._alpha).replace(/\s+/g, '');
1794
+ }
1795
+
1796
  var hex = parseInt( this._color, 10 ).toString( 16 );
1797
  if ( this.error )
1798
  return '';
js/fl-lightbox.js CHANGED
@@ -119,6 +119,7 @@
119
  */
120
  open: function(content)
121
  {
 
122
  this._node.show();
123
  this._visible = true;
124
 
119
  */
120
  open: function(content)
121
  {
122
+ this._node.find('.fl-lightbox').attr( 'style', '' );
123
  this._node.show();
124
  this._visible = true;
125
 
js/fl-stylesheet.js CHANGED
@@ -7,7 +7,14 @@
7
  * @class FLStyleSheet
8
  * @since 1.3.3
9
  */
10
- FLStyleSheet = function() {};
 
 
 
 
 
 
 
11
 
12
  /**
13
  * Prototype for new instances.
@@ -17,6 +24,14 @@
17
  */
18
  FLStyleSheet.prototype = {
19
 
 
 
 
 
 
 
 
 
20
  /**
21
  * A reference to the stylesheet object.
22
  *
@@ -46,8 +61,6 @@
46
  */
47
  updateRule: function(selector, property, value)
48
  {
49
- this._createSheet();
50
-
51
  var rules = this._sheet.cssRules ? this._sheet.cssRules : this._sheet.rules,
52
  rule = null,
53
  i = 0;
@@ -91,8 +104,6 @@
91
  */
92
  addRule: function(selector, property, value)
93
  {
94
- this._createSheet();
95
-
96
  var styles = '',
97
  i = '';
98
 
@@ -115,13 +126,14 @@
115
  },
116
 
117
  /**
118
- * Remove the stylesheet element from the DOM
119
- * and the stored object reference.
 
120
  *
121
- * @since 1.3.3
122
- * @method remove
123
  */
124
- remove: function()
125
  {
126
  if(this._sheetElement) {
127
  this._sheetElement.remove();
@@ -132,6 +144,28 @@
132
  }
133
  },
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  /**
136
  * Create the style element, add it to the DOM
137
  * and save references.
@@ -142,11 +176,13 @@
142
  */
143
  _createSheet: function()
144
  {
145
- if(!this._sheet) {
 
 
146
 
147
- this._sheetElement = $('<style type="text/css"></style>');
148
 
149
- $('body').append(this._sheetElement);
150
 
151
  this._sheet = this._sheetElement[0].sheet;
152
  }
7
  * @class FLStyleSheet
8
  * @since 1.3.3
9
  */
10
+ FLStyleSheet = function( o )
11
+ {
12
+ if ( 'object' == typeof o ) {
13
+ $.extend( this, o );
14
+ }
15
+
16
+ this._createSheet();
17
+ };
18
 
19
  /**
20
  * Prototype for new instances.
24
  */
25
  FLStyleSheet.prototype = {
26
 
27
+ /**
28
+ * An ID for the stylesheet element.
29
+ *
30
+ * @since 1.9
31
+ * @property {String} id
32
+ */
33
+ id : null,
34
+
35
  /**
36
  * A reference to the stylesheet object.
37
  *
61
  */
62
  updateRule: function(selector, property, value)
63
  {
 
 
64
  var rules = this._sheet.cssRules ? this._sheet.cssRules : this._sheet.rules,
65
  rule = null,
66
  i = 0;
104
  */
105
  addRule: function(selector, property, value)
106
  {
 
 
107
  var styles = '',
108
  i = '';
109
 
126
  },
127
 
128
  /**
129
+ * Completely destroys the sheet by removing the
130
+ * stylesheet element from the DOM and making the
131
+ * stored object reference null.
132
  *
133
+ * @since 1.9
134
+ * @method destroy
135
  */
136
+ destroy: function()
137
  {
138
  if(this._sheetElement) {
139
  this._sheetElement.remove();
144
  }
145
  },
146
 
147
+ /**
148
+ * Disables the sheet by removing it from the DOM.
149
+ *
150
+ * @since 1.9
151
+ * @method disable
152
+ */
153
+ disable: function()
154
+ {
155
+ this._sheet.disabled = true;
156
+ },
157
+
158
+ /**
159
+ * Enables the sheet by adding it to the DOM.
160
+ *
161
+ * @since 1.9
162
+ * @method enable
163
+ */
164
+ enable: function()
165
+ {
166
+ this._sheet.disabled = false;
167
+ },
168
+
169
  /**
170
  * Create the style element, add it to the DOM
171
  * and save references.
176
  */
177
  _createSheet: function()
178
  {
179
+ var id = this.id ? ' id="' + this.id + '"' : '';
180
+
181
+ if ( ! this._sheet ) {
182
 
183
+ this._sheetElement = $( '<style type="text/css"' + id + '></style>' );
184
 
185
+ $( 'body' ).append( this._sheetElement );
186
 
187
  this._sheet = this._sheetElement[0].sheet;
188
  }
languages/af.mo CHANGED
Binary file
languages/ar.mo CHANGED
Binary file
languages/cs_CZ.mo CHANGED
Binary file
languages/da_DK.mo CHANGED
Binary file
languages/de_DE.mo CHANGED
Binary file
languages/el.mo CHANGED
Binary file
languages/es_ES.mo CHANGED
Binary file
languages/es_MX.mo CHANGED
Binary file
languages/fa_IR.mo CHANGED
Binary file
languages/fi.mo CHANGED
Binary file
languages/fr_CA.mo CHANGED
Binary file
languages/fr_FR.mo CHANGED
Binary file
languages/he_IL.mo CHANGED
Binary file
languages/hi.mo CHANGED
Binary file
languages/hr.mo CHANGED
Binary file
languages/hu_HU.mo CHANGED
Binary file
languages/id_ID.mo CHANGED
Binary file
languages/it_IT.mo CHANGED
Binary file
languages/ja.mo CHANGED
Binary file
languages/ko_KR.mo CHANGED
Binary file
languages/mr.mo CHANGED
Binary file
languages/ms_MY.mo CHANGED
Binary file
languages/nb.mo CHANGED
Binary file
languages/nl_NL.mo CHANGED
Binary file
languages/no_NO.mo CHANGED
Binary file
languages/pl_PL.mo CHANGED
Binary file
languages/pt_BR.mo CHANGED
Binary file
languages/pt_PT.mo CHANGED
Binary file
languages/ru_RU.mo CHANGED
Binary file
languages/sk_SK.mo CHANGED
Binary file
languages/sl_SL.mo CHANGED
Binary file
languages/sv_SE.mo CHANGED
Binary file
languages/th.mo CHANGED
Binary file
languages/tl.mo CHANGED
Binary file
languages/tr_TR.mo CHANGED
Binary file
languages/uk.mo CHANGED
Binary file
languages/vi.mo CHANGED
Binary file
languages/zh_CN.mo CHANGED
Binary file
languages/zh_TW.mo CHANGED
Binary file
readme.txt CHANGED
@@ -2,7 +2,7 @@
2
  Contributors: justinbusa, RobbyMcCullough, billyyoung, hinampaksh, diegoliv, webmandesign, eugenealegiojo, helgatheviking, ozancanakli, brentjettgmailcom, jproffitt71, brainstormforce, ideaboxcreations
3
  Tags: beaver builder, page builder, page builder plugin, design, wysiwyg, home page builder, template builder, layout builder, landing page builder, website builder, site builder, front-end builder, drag and drop builder, editor, front-end editor, page layout, visual builder
4
  Requires at least: 3.6
5
- Tested up to: 4.6.1
6
  Stable tag: trunk
7
  License: GPL2+
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
2
  Contributors: justinbusa, RobbyMcCullough, billyyoung, hinampaksh, diegoliv, webmandesign, eugenealegiojo, helgatheviking, ozancanakli, brentjettgmailcom, jproffitt71, brainstormforce, ideaboxcreations
3
  Tags: beaver builder, page builder, page builder plugin, design, wysiwyg, home page builder, template builder, layout builder, landing page builder, website builder, site builder, front-end builder, drag and drop builder, editor, front-end editor, page layout, visual builder
4
  Requires at least: 3.6
5
+ Tested up to: 4.7
6
  Stable tag: trunk
7
  License: GPL2+
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html