Clever Fox - Version 2.7

Version Description

  • Heading Control Added
  • Removed Tabs & Select Control
Download this release

Release Info

Developer nayrathemes
Plugin Icon 128x128 Clever Fox
Version 2.7
Comparing to
See all releases

Code changes from version 2.6 to 2.7

Files changed (46) hide show
  1. clever-fox.php +2 -5
  2. inc/avail/avail.php +3 -3
  3. inc/avail/features/avril-cta.php +336 -0
  4. inc/avail/images/cta-image.png +0 -0
  5. inc/avail/sections/section-cta-2.php +6 -2
  6. inc/avail/sections/section-slider.php +85 -0
  7. inc/azwa/features/azwa-header.php +152 -4
  8. inc/azwa/features/azwa-slider.php +65 -23
  9. inc/conceptly/dynamic-style.php +1 -1
  10. inc/conceptly/features/conceptly-call-to-action.php +64 -0
  11. inc/conceptly/features/conceptly-features.php +62 -2
  12. inc/conceptly/features/conceptly-header.php +150 -3
  13. inc/conceptly/features/conceptly-info.php +85 -0
  14. inc/conceptly/features/conceptly-navigation.php +125 -460
  15. inc/conceptly/features/conceptly-service.php +62 -2
  16. inc/conceptly/features/conceptly-slider.php +66 -27
  17. inc/conceptly/features/conceptly-sponsers.php +63 -3
  18. inc/custom-controls/Tabs/class/cleverfox-customize-control-tabs.php +0 -198
  19. inc/custom-controls/Tabs/css/style.css +0 -60
  20. inc/custom-controls/Tabs/js/customizer-addon-script.js +0 -30
  21. inc/custom-controls/Tabs/js/script.js +0 -72
  22. inc/custom-controls/controls/icon-picker/README.md +0 -48
  23. inc/custom-controls/controls/icon-picker/assets/js/icon-picker-control.js +0 -27
  24. inc/custom-controls/controls/icon-picker/assets/js/jquery.ddslick.js +0 -331
  25. inc/custom-controls/controls/icon-picker/assets/js/jquery.ddslick.min.js +0 -1
  26. inc/custom-controls/controls/icon-picker/icon-picker-control.php +0 -65
  27. inc/custom-controls/controls/icon-picker/inc/dashicons-icons.php +0 -66
  28. inc/custom-controls/controls/icon-picker/inc/fa-icons.php +0 -645
  29. inc/custom-controls/controls/icon-picker/inc/genericons-icons.php +0 -160
  30. inc/custom-controls/controls/select/assets/js/select-control.js +0 -17
  31. inc/custom-controls/controls/select/assets/js/selectize.js +0 -3667
  32. inc/custom-controls/controls/select/assets/js/selectize.min.js +0 -3
  33. inc/custom-controls/controls/select/select-control.php +0 -35
  34. inc/custom-controls/controls/select/selectize.default.css +0 -387
  35. inc/envira/features/funfact-section.php +0 -48
  36. inc/hantus/features/navigation.php +214 -206
  37. inc/hantus/features/section-info.php +91 -72
  38. inc/hantus/features/section-service.php +62 -50
  39. inc/hantus/features/section-slider.php +54 -7
  40. inc/hantus/features/section-testimonial.php +63 -50
  41. inc/startkit/features/navigation.php +213 -428
  42. inc/startkit/features/section-info.php +90 -6
  43. inc/startkit/features/section-service.php +66 -5
  44. inc/startkit/features/section-slider.php +45 -3
  45. inc/startkit/features/section-testimonial.php +67 -5
  46. readme.txt +4 -0
clever-fox.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Clever Fox
4
  Plugin URI:
5
  Description: The Clever Fox plugin adds sections functionality to the Startkit theme and Others Nayra's Themes. This plugin for only startkit themes. Clever Fox is a plugin build to enhance the functionality of WordPress Theme made by Nayra Themes.
6
- Version: 2.6
7
  Author: nayrathemes
8
  Author URI: https://nayrathemes.com
9
  Text Domain: clever-fox
@@ -20,8 +20,6 @@ function cleverfox_activate() {
20
  define( 'CLEVERFOX_DIRECTORY_URI', plugin_dir_url( __FILE__ ) . '/inc/custom-controls/' );
21
  if ( class_exists( 'WP_Customize_Control' ) ) {
22
  require_once('inc/custom-controls/controls/range-validator/range-control.php');
23
- require_once('inc/custom-controls/controls/select/select-control.php');
24
- require_once('inc/custom-controls/Tabs/class/cleverfox-customize-control-tabs.php');
25
  }
26
 
27
  $theme = wp_get_theme(); // gets the current theme
@@ -95,5 +93,4 @@ function cleverfox_admin_notice() {
95
  </div>
96
  <?php
97
  }
98
- add_action( 'admin_notices', 'cleverfox_admin_notice' );
99
- ?>
3
  Plugin Name: Clever Fox
4
  Plugin URI:
5
  Description: The Clever Fox plugin adds sections functionality to the Startkit theme and Others Nayra's Themes. This plugin for only startkit themes. Clever Fox is a plugin build to enhance the functionality of WordPress Theme made by Nayra Themes.
6
+ Version: 2.7
7
  Author: nayrathemes
8
  Author URI: https://nayrathemes.com
9
  Text Domain: clever-fox
20
  define( 'CLEVERFOX_DIRECTORY_URI', plugin_dir_url( __FILE__ ) . '/inc/custom-controls/' );
21
  if ( class_exists( 'WP_Customize_Control' ) ) {
22
  require_once('inc/custom-controls/controls/range-validator/range-control.php');
 
 
23
  }
24
 
25
  $theme = wp_get_theme(); // gets the current theme
93
  </div>
94
  <?php
95
  }
96
+ add_action( 'admin_notices', 'cleverfox_admin_notice' );
 
inc/avail/avail.php CHANGED
@@ -7,15 +7,15 @@ require CLEVERFOX_PLUGIN_DIR . 'inc/avril/extras.php';
7
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/dynamic-style.php';
8
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/sections/above-header.php';
9
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/features/avril-header.php';
10
- require CLEVERFOX_PLUGIN_DIR . 'inc/avril/features/avril-cta.php';
11
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/features/avril-features.php';
12
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/features/avril-service.php';
13
- require CLEVERFOX_PLUGIN_DIR . 'inc/avril/features/avril-slider.php';
14
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/features/avril-typography.php';
15
 
16
  if ( ! function_exists( 'cleverfox_avril_frontpage_sections' ) ) :
17
  function cleverfox_avril_frontpage_sections() {
18
- require CLEVERFOX_PLUGIN_DIR . 'inc/avril/sections/section-slider.php';
19
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/sections/section-service.php';
20
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/sections/section-features.php';
21
  require CLEVERFOX_PLUGIN_DIR . 'inc/avail/sections/section-cta-2.php';
7
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/dynamic-style.php';
8
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/sections/above-header.php';
9
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/features/avril-header.php';
10
+ require CLEVERFOX_PLUGIN_DIR . 'inc/avail/features/avril-cta.php';
11
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/features/avril-features.php';
12
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/features/avril-service.php';
13
+ require CLEVERFOX_PLUGIN_DIR . 'inc/aera/features/aera-slider.php';
14
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/features/avril-typography.php';
15
 
16
  if ( ! function_exists( 'cleverfox_avril_frontpage_sections' ) ) :
17
  function cleverfox_avril_frontpage_sections() {
18
+ require CLEVERFOX_PLUGIN_DIR . 'inc/avail/sections/section-slider.php';
19
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/sections/section-service.php';
20
  require CLEVERFOX_PLUGIN_DIR . 'inc/avril/sections/section-features.php';
21
  require CLEVERFOX_PLUGIN_DIR . 'inc/avail/sections/section-cta-2.php';
inc/avail/features/avril-cta.php ADDED
@@ -0,0 +1,336 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ function avril_cta_setting( $wp_customize ) {
3
+ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' : 'refresh';
4
+ /*=========================================
5
+ CTA Section
6
+ =========================================*/
7
+ $wp_customize->add_section(
8
+ 'cta_setting', array(
9
+ 'title' => esc_html__( 'Call to Action Section', 'avril' ),
10
+ 'priority' => 12,
11
+ 'panel' => 'avril_frontpage_sections',
12
+ )
13
+ );
14
+
15
+ // CTA Setting
16
+ $wp_customize->add_setting(
17
+ 'cta_setting_head'
18
+ ,array(
19
+ 'capability' => 'edit_theme_options',
20
+ 'sanitize_callback' => 'avril_sanitize_text',
21
+ 'priority' => 2,
22
+ )
23
+ );
24
+
25
+ $wp_customize->add_control(
26
+ 'cta_setting_head',
27
+ array(
28
+ 'type' => 'hidden',
29
+ 'label' => __('Setting','avril'),
30
+ 'section' => 'cta_setting',
31
+ )
32
+ );
33
+
34
+ $wp_customize->add_setting(
35
+ 'hs_cta' ,
36
+ array(
37
+ 'default' => '1',
38
+ 'sanitize_callback' => 'avril_sanitize_checkbox',
39
+ 'capability' => 'edit_theme_options',
40
+ 'priority' => 2,
41
+ )
42
+ );
43
+
44
+ $wp_customize->add_control(
45
+ 'hs_cta',
46
+ array(
47
+ 'label' => esc_html__( 'Hide / Show Section', 'avril' ),
48
+ 'section' => 'cta_setting',
49
+ 'type' => 'checkbox'
50
+ )
51
+ );
52
+
53
+ // CTA Content Section //
54
+ $wp_customize->add_setting(
55
+ 'cta_contents'
56
+ ,array(
57
+ 'capability' => 'edit_theme_options',
58
+ 'sanitize_callback' => 'avril_sanitize_text',
59
+ 'priority' => 3,
60
+ )
61
+ );
62
+
63
+ $wp_customize->add_control(
64
+ 'cta_contents',
65
+ array(
66
+ 'type' => 'hidden',
67
+ 'label' => __('Content','avril'),
68
+ 'section' => 'cta_setting',
69
+ )
70
+ );
71
+
72
+ // CTA Image //
73
+ $wp_customize->add_setting(
74
+ 'cta_image' ,
75
+ array(
76
+ 'default' => CLEVERFOX_PLUGIN_URL . '/inc/avail/images/cta-image.png',
77
+ 'capability' => 'edit_theme_options',
78
+ 'sanitize_callback' => 'avril_sanitize_url',
79
+ 'priority' => 3,
80
+ )
81
+ );
82
+
83
+ $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize , 'cta_image' ,
84
+ array(
85
+ 'label' => __( 'Image', 'avril' ),
86
+ 'section' => 'cta_setting',
87
+ )
88
+ ));
89
+
90
+ // CTA Title //
91
+ $wp_customize->add_setting(
92
+ 'cta_title',
93
+ array(
94
+ 'default' => __('We work in partnership with all the major <span class="primary-color"><em>technology</em></span> solutions','avril'),
95
+ 'capability' => 'edit_theme_options',
96
+ 'sanitize_callback' => 'avril_sanitize_html',
97
+ 'transport' => $selective_refresh,
98
+ 'priority' => 4,
99
+ )
100
+ );
101
+
102
+ $wp_customize->add_control(
103
+ 'cta_title',
104
+ array(
105
+ 'label' => __('Title','avril'),
106
+ 'section' => 'cta_setting',
107
+ 'type' => 'textarea',
108
+ )
109
+ );
110
+
111
+ // CTA Description //
112
+ $wp_customize->add_setting(
113
+ 'cta_description',
114
+ array(
115
+ 'default' => __('There are many variations of passages of lorem Ipsum available, but the majority','avril'),
116
+ 'capability' => 'edit_theme_options',
117
+ 'sanitize_callback' => 'avril_sanitize_text',
118
+ 'transport' => $selective_refresh,
119
+ 'priority' => 6,
120
+ )
121
+ );
122
+
123
+ $wp_customize->add_control(
124
+ 'cta_description',
125
+ array(
126
+ 'label' => __('Description','avril'),
127
+ 'section' => 'cta_setting',
128
+ 'type' => 'textarea',
129
+ )
130
+ );
131
+
132
+ // Button First //
133
+ $wp_customize->add_setting(
134
+ 'cta_btn_first'
135
+ ,array(
136
+ 'capability' => 'edit_theme_options',
137
+ 'sanitize_callback' => 'avril_sanitize_text',
138
+ 'priority' => 7,
139
+ )
140
+ );
141
+
142
+ $wp_customize->add_control(
143
+ 'cta_btn_first',
144
+ array(
145
+ 'type' => 'hidden',
146
+ 'label' => __('Button First','avril'),
147
+ 'section' => 'cta_setting',
148
+ )
149
+ );
150
+
151
+ $wp_customize->add_setting(
152
+ 'cta_btn_lbl1',
153
+ array(
154
+ 'default' => __('Purchase Now','avril'),
155
+ 'capability' => 'edit_theme_options',
156
+ 'sanitize_callback' => 'avril_sanitize_html',
157
+ 'transport' => $selective_refresh,
158
+ 'priority' => 8,
159
+ )
160
+ );
161
+
162
+ $wp_customize->add_control(
163
+ 'cta_btn_lbl1',
164
+ array(
165
+ 'label' => __('Button Label','avril'),
166
+ 'section' => 'cta_setting',
167
+ 'type' => 'text',
168
+ )
169
+ );
170
+
171
+ $wp_customize->add_setting(
172
+ 'cta_btn_link1',
173
+ array(
174
+ 'capability' => 'edit_theme_options',
175
+ 'sanitize_callback' => 'avril_sanitize_url',
176
+ 'priority' => 9,
177
+ )
178
+ );
179
+
180
+ $wp_customize->add_control(
181
+ 'cta_btn_link1',
182
+ array(
183
+ 'label' => __('Link','avril'),
184
+ 'section' => 'cta_setting',
185
+ 'type' => 'text',
186
+ )
187
+ );
188
+
189
+ // Button Second //
190
+ $wp_customize->add_setting(
191
+ 'cta_btn_second'
192
+ ,array(
193
+ 'capability' => 'edit_theme_options',
194
+ 'sanitize_callback' => 'avril_sanitize_text',
195
+ 'priority' => 10,
196
+ )
197
+ );
198
+
199
+ $wp_customize->add_control(
200
+ 'cta_btn_second',
201
+ array(
202
+ 'type' => 'hidden',
203
+ 'label' => __('Button Second','avril'),
204
+ 'section' => 'cta_setting',
205
+ )
206
+ );
207
+
208
+ $wp_customize->add_setting(
209
+ 'cta_btn_second_ttl'
210
+ ,array(
211
+ 'default' => __('Get Quick Support','avril'),
212
+ 'capability' => 'edit_theme_options',
213
+ 'sanitize_callback' => 'avril_sanitize_text',
214
+ 'transport' => $selective_refresh,
215
+ 'priority' => 10,
216
+ )
217
+ );
218
+
219
+ $wp_customize->add_control(
220
+ 'cta_btn_second_ttl',
221
+ array(
222
+ 'type' => 'text',
223
+ 'label' => __('Title','avril'),
224
+ 'section' => 'cta_setting',
225
+ )
226
+ );
227
+
228
+ $wp_customize->add_setting(
229
+ 'cta_btn_lbl2',
230
+ array(
231
+ 'default' => __('+22 24588-55069','avril'),
232
+ 'capability' => 'edit_theme_options',
233
+ 'sanitize_callback' => 'avril_sanitize_html',
234
+ 'transport' => $selective_refresh,
235
+ 'priority' => 11,
236
+ )
237
+ );
238
+
239
+ $wp_customize->add_control(
240
+ 'cta_btn_lbl2',
241
+ array(
242
+ 'label' => __('Label','avril'),
243
+ 'section' => 'cta_setting',
244
+ 'type' => 'text',
245
+ )
246
+ );
247
+
248
+ $wp_customize->add_setting(
249
+ 'cta_btn_link2',
250
+ array(
251
+ 'capability' => 'edit_theme_options',
252
+ 'sanitize_callback' => 'avril_sanitize_url',
253
+ 'priority' => 12,
254
+ )
255
+ );
256
+
257
+ $wp_customize->add_control(
258
+ 'cta_btn_link2',
259
+ array(
260
+ 'label' => __('Link','avril'),
261
+ 'section' => 'cta_setting',
262
+ 'type' => 'text',
263
+ )
264
+ );
265
+ }
266
+
267
+ add_action( 'customize_register', 'avril_cta_setting' );
268
+
269
+ // CTA selective refresh
270
+ function avril_ata_section_partials( $wp_customize ){
271
+
272
+ // cta_title
273
+ $wp_customize->selective_refresh->add_partial( 'cta_title', array(
274
+ 'selector' => '.home-cta .cta-content h4',
275
+ 'settings' => 'cta_title',
276
+ 'render_callback' => 'avril_cta_title_render_callback',
277
+
278
+ ) );
279
+
280
+ // cta_description
281
+ $wp_customize->selective_refresh->add_partial( 'cta_description', array(
282
+ 'selector' => '.home-cta .cta-content p',
283
+ 'settings' => 'cta_description',
284
+ 'render_callback' => 'avril_cta_description_render_callback',
285
+ ) );
286
+
287
+ // cta_btn_lbl1
288
+ $wp_customize->selective_refresh->add_partial( 'cta_btn_lbl1', array(
289
+ 'selector' => '.home-cta a.av-btn-white',
290
+ 'settings' => 'cta_btn_lbl1',
291
+ 'render_callback' => 'avril_cta_btn_lbl1_render_callback',
292
+ ) );
293
+
294
+ // cta_btn_lbl2
295
+ $wp_customize->selective_refresh->add_partial( 'cta_btn_lbl2', array(
296
+ 'selector' => '.home-cta span.cta-label-dis',
297
+ 'settings' => 'cta_btn_lbl2',
298
+ 'render_callback' => 'avril_cta_btn_lbl2_render_callback',
299
+ ) );
300
+
301
+ // cta_btn_second_ttl
302
+ $wp_customize->selective_refresh->add_partial( 'cta_btn_second_ttl', array(
303
+ 'selector' => '.home-cta span.cta-label-title',
304
+ 'settings' => 'cta_btn_second_ttl',
305
+ 'render_callback' => 'avril_cta_btn_second_ttl_render_callback',
306
+ ) );
307
+
308
+ }
309
+
310
+ add_action( 'customize_register', 'avril_ata_section_partials' );
311
+
312
+ // cta_title
313
+ function avril_cta_title_render_callback() {
314
+ return get_theme_mod( 'cta_title' );
315
+ }
316
+
317
+
318
+ // cta_description
319
+ function avril_cta_description_render_callback() {
320
+ return get_theme_mod( 'cta_description' );
321
+ }
322
+
323
+ // cta_btn_lbl1
324
+ function avril_cta_btn_lbl1_render_callback() {
325
+ return get_theme_mod( 'cta_btn_lbl1' );
326
+ }
327
+
328
+ // cta_btn_lbl2
329
+ function avril_cta_btn_lbl2_render_callback() {
330
+ return get_theme_mod( 'cta_btn_lbl2' );
331
+ }
332
+
333
+ // cta_btn_second_ttl
334
+ function avril_cta_btn_second_ttl_render_callback() {
335
+ return get_theme_mod( 'cta_btn_second_ttl' );
336
+ }
inc/avail/images/cta-image.png ADDED
Binary file
inc/avail/sections/section-cta-2.php CHANGED
@@ -6,8 +6,10 @@ if ( ! function_exists( 'avril_lite_cta' ) ) :
6
  $cta_description = get_theme_mod('cta_description','There are many variations of passages of lorem Ipsum available, but the majority');
7
  $cta_btn_lbl1 = get_theme_mod('cta_btn_lbl1','Purchase Now');
8
  $cta_btn_link1 = get_theme_mod('cta_btn_link1');
 
9
  $cta_btn_lbl2 = get_theme_mod('cta_btn_lbl2','+22 24588-55069');
10
  $cta_btn_link2 = get_theme_mod('cta_btn_link2');
 
11
  if($hs_cta == '1') {
12
  ?>
13
  <section id="cta-section" class="cta-section cta-3 cta-bg-image home-cta">
@@ -16,7 +18,9 @@ if($hs_cta == '1') {
16
  <div class="av-column-12">
17
  <div class="cta-wrapper">
18
  <div class="cta-content">
19
- <div class="cta-img"><img src="https://www.diffchecker.com/static/images/text.png"></div>
 
 
20
  <div class="cta-text">
21
  <?php if ( ! empty( $cta_title ) ) : ?>
22
  <h4><?php echo wp_kses_post($cta_title); ?></h4>
@@ -28,7 +32,7 @@ if($hs_cta == '1') {
28
  </div>
29
  <div class="cta-btn-wrap text-av-right text-center">
30
  <?php if ( ! empty( $cta_btn_lbl2 ) ) : ?>
31
- <a class="cta-more" href="<?php echo esc_url($cta_btn_link2); ?>"><div class="cta-icon"><i class="fa fa-phone"></i></div><div class="cta-label"><span class="cta-label-title">Get Quick Support</span><span class="cta-label-dis"><?php echo esc_html($cta_btn_lbl2); ?></span></div></a>
32
  <?php endif;?>
33
  <?php if ( ! empty( $cta_btn_lbl1 ) ) : ?>
34
  <a href="<?php echo esc_url($cta_btn_link1); ?>" class="av-btn av-btn-white" data-text="Contact With Us"><?php echo esc_html($cta_btn_lbl1); ?></a>
6
  $cta_description = get_theme_mod('cta_description','There are many variations of passages of lorem Ipsum available, but the majority');
7
  $cta_btn_lbl1 = get_theme_mod('cta_btn_lbl1','Purchase Now');
8
  $cta_btn_link1 = get_theme_mod('cta_btn_link1');
9
+ $cta_btn_second_ttl = get_theme_mod('cta_btn_second_ttl','Get Quick Support');
10
  $cta_btn_lbl2 = get_theme_mod('cta_btn_lbl2','+22 24588-55069');
11
  $cta_btn_link2 = get_theme_mod('cta_btn_link2');
12
+ $cta_image = get_theme_mod('cta_image',CLEVERFOX_PLUGIN_URL . '/inc/avail/images/cta-image.png');
13
  if($hs_cta == '1') {
14
  ?>
15
  <section id="cta-section" class="cta-section cta-3 cta-bg-image home-cta">
18
  <div class="av-column-12">
19
  <div class="cta-wrapper">
20
  <div class="cta-content">
21
+ <?php if ( ! empty( $cta_image ) ) : ?>
22
+ <div class="cta-img"><img src="<?php echo esc_url($cta_image); ?>"></div>
23
+ <?php endif; ?>
24
  <div class="cta-text">
25
  <?php if ( ! empty( $cta_title ) ) : ?>
26
  <h4><?php echo wp_kses_post($cta_title); ?></h4>
32
  </div>
33
  <div class="cta-btn-wrap text-av-right text-center">
34
  <?php if ( ! empty( $cta_btn_lbl2 ) ) : ?>
35
+ <a class="cta-more" href="<?php echo esc_url($cta_btn_link2); ?>"><div class="cta-icon"><i class="fa fa-phone"></i></div><div class="cta-label"><span class="cta-label-title"><?php if ( ! empty( $cta_btn_second_ttl ) ) : echo esc_html($cta_btn_second_ttl); endif; ?></span><span class="cta-label-dis"><?php echo esc_html($cta_btn_lbl2); ?></span></div></a>
36
  <?php endif;?>
37
  <?php if ( ! empty( $cta_btn_lbl1 ) ) : ?>
38
  <a href="<?php echo esc_url($cta_btn_link1); ?>" class="av-btn av-btn-white" data-text="Contact With Us"><?php echo esc_html($cta_btn_lbl1); ?></a>
inc/avail/sections/section-slider.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!--===// Start: Slider
2
+ =================================-->
3
+ <?php
4
+ if ( ! function_exists( 'avril_lite_slider' ) ) :
5
+ function avril_lite_slider() {
6
+ $slider = get_theme_mod('slider',avril_get_slider_default());
7
+ ?>
8
+ <style type="text/css">
9
+ .theme-slider:after {
10
+ background: #d61523;
11
+ }
12
+ </style>
13
+ <section id="slider-section" class="slider-wrapper">
14
+ <div class="main-slider owl-carousel owl-theme">
15
+ <?php
16
+ if ( ! empty( $slider ) ) {
17
+ $slider = json_decode( $slider );
18
+ foreach ( $slider as $slide_item ) {
19
+ $avril_slide_title = ! empty( $slide_item->title ) ? apply_filters( 'avril_translate_single_string', $slide_item->title, 'slider section' ) : '';
20
+ $subtitle = ! empty( $slide_item->subtitle ) ? apply_filters( 'avril_translate_single_string', $slide_item->subtitle, 'slider section' ) : '';
21
+ $text = ! empty( $slide_item->text ) ? apply_filters( 'avril_translate_single_string', $slide_item->text, 'slider section' ) : '';
22
+ $button = ! empty( $slide_item->text2) ? apply_filters( 'avril_translate_single_string', $slide_item->text2,'slider section' ) : '';
23
+ $link = ! empty( $slide_item->link ) ? apply_filters( 'avril_translate_single_string', $slide_item->link, 'slider section' ) : '';
24
+ $image = ! empty( $slide_item->image_url ) ? apply_filters( 'avril_translate_single_string', $slide_item->image_url, 'slider section' ) : '';
25
+ $image2 = ! empty( $slide_item->image_url2 ) ? apply_filters( 'avril_translate_single_string', $slide_item->image_url2, 'slider section' ) : '';
26
+ $open_new_tab = ! empty( $slide_item->open_new_tab ) ? apply_filters( 'avril_translate_single_string', $slide_item->open_new_tab, 'slider section' ) : '';
27
+ //$align = $slide_item->slide_align;
28
+ $align = ! empty( $slide_item->slide_align ) ? apply_filters( 'avril_translate_single_string', $slide_item->slide_align, 'slider section' ) : '';
29
+ ?>
30
+ <?php if ( ! empty( $image ) ) : ?>
31
+ <div class="item" style="background-image:url('<?php echo esc_url( $image ); ?>')">
32
+ <?php else : ?>
33
+ <div class="item">
34
+ <?php endif; ?>
35
+ <div class="theme-slider">
36
+ <div class="theme-table">
37
+ <div class="theme-table-cell">
38
+ <div class="av-container">
39
+ <div class="av-columns-area theme-content text-<?php echo esc_attr($align); ?>">
40
+ <?php if ( ! empty( $image2 ) ) { ?>
41
+ <div class="av-column-7 my-auto">
42
+ <?php } else { ?>
43
+ <div class="av-column-12">
44
+ <?php } ?>
45
+ <?php if ( ! empty( $avril_slide_title ) ) : ?>
46
+ <h3 data-animation="fadeInUp" data-delay="150ms"><?php echo esc_html( $avril_slide_title ); ?></h3>
47
+ <?php endif; ?>
48
+
49
+ <?php if ( ! empty( $subtitle ) ) : ?>
50
+ <h1 data-animation="fadeInUp" data-delay="200ms"><span><?php echo esc_html( $subtitle ); ?></span></h1>
51
+ <?php endif; ?>
52
+
53
+ <?php if ( ! empty( $text ) ) : ?>
54
+ <p data-animation="fadeInUp" data-delay="500ms"><?php echo esc_html( $text ); ?></p>
55
+ <?php endif; ?>
56
+ <?php if ( ! empty( $button ) ) : ?>
57
+ <a data-animation="fadeInUp" data-delay="800ms" href="<?php echo esc_url( $link ); ?>" <?php if($open_new_tab== 'yes' || $open_new_tab== '1') { echo "target='_blank'"; } ?> class="av-btn av-btn-primary"><?php echo esc_html( $button ); ?></a>
58
+ <?php endif; ?>
59
+ </div>
60
+ <?php if ( ! empty( $image2 ) ) : ?>
61
+ <div class="av-column-5 mb-av-0 mx-auto my-auto">
62
+ <div class="aera-img">
63
+ <img src="<?php echo esc_url( $image2 ); ?>" data-img-url="<?php echo esc_url( $image2 ); ?>" <?php if ( ! empty( $avril_slide_title ) ) : ?> alt="<?php echo esc_attr( $avril_slide_title ); ?>" title="<?php echo esc_attr( $avril_slide_title ); ?>" <?php endif; ?> />
64
+ </div>
65
+ </div>
66
+ <?php endif; ?>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ </div>
72
+ </div>
73
+ <?php } } ?>
74
+ </div>
75
+ </section>
76
+ <?php
77
+ }
78
+ endif;
79
+ if ( function_exists( 'avril_lite_slider' ) ) {
80
+ $section_priority = apply_filters( 'avril_section_priority', 11, 'avril_lite_slider' );
81
+ add_action( 'avril_sections', 'avril_lite_slider', absint( $section_priority ) );
82
+ }
83
+ ?>
84
+ <!-- End: Slider
85
+ =================================-->
inc/azwa/features/azwa-header.php CHANGED
@@ -14,6 +14,25 @@ function conceptly_lite_header_setting( $wp_customize ){
14
  )
15
  );
16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  //Header Contact Hide/Show Setting //
18
  $wp_customize->add_setting(
19
  'hide_show_contact_infot' ,
@@ -22,6 +41,7 @@ function conceptly_lite_header_setting( $wp_customize ){
22
  'capability' => 'edit_theme_options',
23
  'sanitize_callback' => 'sanitize_text_field',
24
  'transport' => $selective_refresh,
 
25
  )
26
  );
27
 
@@ -44,6 +64,7 @@ function conceptly_lite_header_setting( $wp_customize ){
44
  'default' => __('fa-phone','conceptly-pro'),
45
  'sanitize_callback' => 'conceptly_sanitize_text',
46
  'capability' => 'edit_theme_options',
 
47
  )
48
  );
49
 
@@ -62,7 +83,8 @@ function conceptly_lite_header_setting( $wp_customize ){
62
  array(
63
  'default' => __('Call Us: (210) 123-451','conceptly-pro'),
64
  'sanitize_callback' => 'conceptly_sanitize_text',
65
- 'capability' => 'edit_theme_options'
 
66
  )
67
  );
68
 
@@ -81,7 +103,8 @@ function conceptly_lite_header_setting( $wp_customize ){
81
  array(
82
  'default' => __('+1 231-214-3567','conceptly-pro'),
83
  'sanitize_callback' => 'conceptly_sanitize_text',
84
- 'capability' => 'edit_theme_options'
 
85
  )
86
  );
87
 
@@ -94,6 +117,25 @@ function conceptly_lite_header_setting( $wp_customize ){
94
  )
95
  );
96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  //Header Email Hide/Show Setting //
98
  $wp_customize->add_setting(
99
  'hide_show_email_infot' ,
@@ -102,6 +144,7 @@ function conceptly_lite_header_setting( $wp_customize ){
102
  'capability' => 'edit_theme_options',
103
  'sanitize_callback' => 'sanitize_text_field',
104
  'transport' => $selective_refresh,
 
105
  )
106
  );
107
 
@@ -122,6 +165,7 @@ function conceptly_lite_header_setting( $wp_customize ){
122
  'default' => __('fa-envelope','conceptly-pro'),
123
  'sanitize_callback' => 'conceptly_sanitize_text',
124
  'capability' => 'edit_theme_options',
 
125
  )
126
  );
127
 
@@ -142,6 +186,7 @@ function conceptly_lite_header_setting( $wp_customize ){
142
  'default' => __('380 St Kilda Road','conceptly-pro'),
143
  'sanitize_callback' => 'conceptly_sanitize_text',
144
  'capability' => 'edit_theme_options',
 
145
  )
146
  );
147
 
@@ -161,6 +206,7 @@ function conceptly_lite_header_setting( $wp_customize ){
161
  'default' => __('example@example.com','conceptly-pro'),
162
  'sanitize_callback' => 'conceptly_sanitize_text',
163
  'capability' => 'edit_theme_options',
 
164
  )
165
  );
166
 
@@ -173,6 +219,25 @@ function conceptly_lite_header_setting( $wp_customize ){
173
  )
174
  );
175
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  //Header FAQ Hide/Show Setting //
177
  $wp_customize->add_setting(
178
  'hide_show_faq' ,
@@ -181,6 +246,7 @@ function conceptly_lite_header_setting( $wp_customize ){
181
  'capability' => 'edit_theme_options',
182
  'sanitize_callback' => 'sanitize_text_field',
183
  'transport' => $selective_refresh,
 
184
  )
185
  );
186
 
@@ -201,6 +267,7 @@ function conceptly_lite_header_setting( $wp_customize ){
201
  'default' => __('fa-user','conceptly-pro'),
202
  'sanitize_callback' => 'conceptly_sanitize_text',
203
  'capability' => 'edit_theme_options',
 
204
  )
205
  );
206
 
@@ -220,6 +287,7 @@ function conceptly_lite_header_setting( $wp_customize ){
220
  'default' => __('Ask Your Question','conceptly-pro'),
221
  'sanitize_callback' => 'conceptly_sanitize_text',
222
  'capability' => 'edit_theme_options',
 
223
  )
224
  );
225
 
@@ -239,6 +307,7 @@ function conceptly_lite_header_setting( $wp_customize ){
239
  'default' => __('On Azwa','conceptly-pro'),
240
  'sanitize_callback' => 'conceptly_sanitize_text',
241
  'capability' => 'edit_theme_options',
 
242
  )
243
  );
244
 
@@ -264,6 +333,26 @@ function conceptly_lite_header_setting( $wp_customize ){
264
  'panel' => 'header_section',
265
  )
266
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
267
  // Social Icons Hide/Show Setting //
268
  $wp_customize->add_setting(
269
  'hide_show_social_icon' ,
@@ -272,6 +361,7 @@ function conceptly_lite_header_setting( $wp_customize ){
272
  'capability' => 'edit_theme_options',
273
  'sanitize_callback' => 'sanitize_text_field',
274
  'transport' => $selective_refresh,
 
275
  )
276
  );
277
 
@@ -284,13 +374,34 @@ function conceptly_lite_header_setting( $wp_customize ){
284
  'type' => 'ios', // light, ios, flat
285
  )
286
  ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
  /**
288
  * Customizer Repeater
289
  */
290
  $wp_customize->add_setting( 'social_icons',
291
  array(
292
  'default' => conceptly_get_social_icon_default(),
293
- 'sanitize_callback' => 'conceptly_repeater_sanitize',
 
294
  )
295
  );
296
 
@@ -300,7 +411,6 @@ function conceptly_lite_header_setting( $wp_customize ){
300
  array(
301
  'label' => esc_html__('Social Icons','conceptly-pro'),
302
  'section' => 'header_setting',
303
- 'priority' => 2,
304
  'customizer_repeater_icon_control' => true,
305
  'customizer_repeater_link_control' => true,
306
  )
@@ -386,6 +496,44 @@ function conceptly_lite_header_setting( $wp_customize ){
386
  ) )
387
  );
388
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
389
  };
390
  add_action( 'customize_register', 'conceptly_lite_header_setting' );
391
 
14
  )
15
  );
16
 
17
+ // Phone
18
+ $wp_customize->add_setting(
19
+ 'hdr_top_phone'
20
+ ,array(
21
+ 'capability' => 'edit_theme_options',
22
+ 'sanitize_callback' => 'conceptly_sanitize_text',
23
+ 'priority' => 1,
24
+ )
25
+ );
26
+
27
+ $wp_customize->add_control(
28
+ 'hdr_top_phone',
29
+ array(
30
+ 'type' => 'hidden',
31
+ 'label' => __('Phone','conceptly'),
32
+ 'section' => 'header_contact',
33
+ )
34
+ );
35
+
36
  //Header Contact Hide/Show Setting //
37
  $wp_customize->add_setting(
38
  'hide_show_contact_infot' ,
41
  'capability' => 'edit_theme_options',
42
  'sanitize_callback' => 'sanitize_text_field',
43
  'transport' => $selective_refresh,
44
+ 'priority' => 2,
45
  )
46
  );
47
 
64
  'default' => __('fa-phone','conceptly-pro'),
65
  'sanitize_callback' => 'conceptly_sanitize_text',
66
  'capability' => 'edit_theme_options',
67
+ 'priority' => 3,
68
  )
69
  );
70
 
83
  array(
84
  'default' => __('Call Us: (210) 123-451','conceptly-pro'),
85
  'sanitize_callback' => 'conceptly_sanitize_text',
86
+ 'capability' => 'edit_theme_options',
87
+ 'priority' => 4,
88
  )
89
  );
90
 
103
  array(
104
  'default' => __('+1 231-214-3567','conceptly-pro'),
105
  'sanitize_callback' => 'conceptly_sanitize_text',
106
+ 'capability' => 'edit_theme_options',
107
+ 'priority' => 5,
108
  )
109
  );
110
 
117
  )
118
  );
119
 
120
+ // Email
121
+ $wp_customize->add_setting(
122
+ 'hdr_top_email'
123
+ ,array(
124
+ 'capability' => 'edit_theme_options',
125
+ 'sanitize_callback' => 'conceptly_sanitize_text',
126
+ 'priority' => 7,
127
+ )
128
+ );
129
+
130
+ $wp_customize->add_control(
131
+ 'hdr_top_email',
132
+ array(
133
+ 'type' => 'hidden',
134
+ 'label' => __('Email','conceptly'),
135
+ 'section' => 'header_contact',
136
+ )
137
+ );
138
+
139
  //Header Email Hide/Show Setting //
140
  $wp_customize->add_setting(
141
  'hide_show_email_infot' ,
144
  'capability' => 'edit_theme_options',
145
  'sanitize_callback' => 'sanitize_text_field',
146
  'transport' => $selective_refresh,
147
+ 'priority' => 8,
148
  )
149
  );
150
 
165
  'default' => __('fa-envelope','conceptly-pro'),
166
  'sanitize_callback' => 'conceptly_sanitize_text',
167
  'capability' => 'edit_theme_options',
168
+ 'priority' => 9,
169
  )
170
  );
171
 
186
  'default' => __('380 St Kilda Road','conceptly-pro'),
187
  'sanitize_callback' => 'conceptly_sanitize_text',
188
  'capability' => 'edit_theme_options',
189
+ 'priority' => 10,
190
  )
191
  );
192
 
206
  'default' => __('example@example.com','conceptly-pro'),
207
  'sanitize_callback' => 'conceptly_sanitize_text',
208
  'capability' => 'edit_theme_options',
209
+ 'priority' => 11,
210
  )
211
  );
212
 
219
  )
220
  );
221
 
222
+ // FAQ
223
+ $wp_customize->add_setting(
224
+ 'hdr_top_faq'
225
+ ,array(
226
+ 'capability' => 'edit_theme_options',
227
+ 'sanitize_callback' => 'conceptly_sanitize_text',
228
+ 'priority' => 13,
229
+ )
230
+ );
231
+
232
+ $wp_customize->add_control(
233
+ 'hdr_top_faq',
234
+ array(
235
+ 'type' => 'hidden',
236
+ 'label' => __('FAQ','conceptly'),
237
+ 'section' => 'header_contact',
238
+ )
239
+ );
240
+
241
  //Header FAQ Hide/Show Setting //
242
  $wp_customize->add_setting(
243
  'hide_show_faq' ,
246
  'capability' => 'edit_theme_options',
247
  'sanitize_callback' => 'sanitize_text_field',
248
  'transport' => $selective_refresh,
249
+ 'priority' => 14,
250
  )
251
  );
252
 
267
  'default' => __('fa-user','conceptly-pro'),
268
  'sanitize_callback' => 'conceptly_sanitize_text',
269
  'capability' => 'edit_theme_options',
270
+ 'priority' => 15,
271
  )
272
  );
273
 
287
  'default' => __('Ask Your Question','conceptly-pro'),
288
  'sanitize_callback' => 'conceptly_sanitize_text',
289
  'capability' => 'edit_theme_options',
290
+ 'priority' => 16,
291
  )
292
  );
293
 
307
  'default' => __('On Azwa','conceptly-pro'),
308
  'sanitize_callback' => 'conceptly_sanitize_text',
309
  'capability' => 'edit_theme_options',
310
+ 'priority' => 17,
311
  )
312
  );
313
 
333
  'panel' => 'header_section',
334
  )
335
  );
336
+
337
+ // Setting Head
338
+ $wp_customize->add_setting(
339
+ 'hdr_social_setting_head'
340
+ ,array(
341
+ 'capability' => 'edit_theme_options',
342
+ 'sanitize_callback' => 'conceptly_sanitize_text',
343
+ 'priority' => 1,
344
+ )
345
+ );
346
+
347
+ $wp_customize->add_control(
348
+ 'hdr_social_setting_head',
349
+ array(
350
+ 'type' => 'hidden',
351
+ 'label' => __('Setting','conceptly'),
352
+ 'section' => 'header_setting',
353
+ )
354
+ );
355
+
356
  // Social Icons Hide/Show Setting //
357
  $wp_customize->add_setting(
358
  'hide_show_social_icon' ,
361
  'capability' => 'edit_theme_options',
362
  'sanitize_callback' => 'sanitize_text_field',
363
  'transport' => $selective_refresh,
364
+ 'priority' => 2,
365
  )
366
  );
367
 
374
  'type' => 'ios', // light, ios, flat
375
  )
376
  ));
377
+
378
+ // Content Head
379
+ $wp_customize->add_setting(
380
+ 'hdr_social_content_head'
381
+ ,array(
382
+ 'capability' => 'edit_theme_options',
383
+ 'sanitize_callback' => 'conceptly_sanitize_text',
384
+ 'priority' => 3,
385
+ )
386
+ );
387
+
388
+ $wp_customize->add_control(
389
+ 'hdr_social_content_head',
390
+ array(
391
+ 'type' => 'hidden',
392
+ 'label' => __('Social-Icon','conceptly'),
393
+ 'section' => 'header_setting',
394
+ )
395
+ );
396
+
397
  /**
398
  * Customizer Repeater
399
  */
400
  $wp_customize->add_setting( 'social_icons',
401
  array(
402
  'default' => conceptly_get_social_icon_default(),
403
+ 'sanitize_callback' => 'conceptly_repeater_sanitize',
404
+ 'priority' => 4,
405
  )
406
  );
407
 
411
  array(
412
  'label' => esc_html__('Social Icons','conceptly-pro'),
413
  'section' => 'header_setting',
 
414
  'customizer_repeater_icon_control' => true,
415
  'customizer_repeater_link_control' => true,
416
  )
496
  ) )
497
  );
498
  }
499
+
500
+ // Header Button Setting Head
501
+ $wp_customize->add_setting(
502
+ 'hdr_btn_setting_head'
503
+ ,array(
504
+ 'capability' => 'edit_theme_options',
505
+ 'sanitize_callback' => 'conceptly_sanitize_text',
506
+ )
507
+ );
508
+
509
+ $wp_customize->add_control(
510
+ 'hdr_btn_setting_head',
511
+ array(
512
+ 'type' => 'hidden',
513
+ 'label' => __('Setting','conceptly'),
514
+ 'section' => 'header_get_button',
515
+ 'priority' => 1,
516
+ )
517
+ );
518
+
519
+ // Header Button Content Head
520
+ $wp_customize->add_setting(
521
+ 'hdr_btn_content_head'
522
+ ,array(
523
+ 'capability' => 'edit_theme_options',
524
+ 'sanitize_callback' => 'conceptly_sanitize_text',
525
+ )
526
+ );
527
+
528
+ $wp_customize->add_control(
529
+ 'hdr_btn_content_head',
530
+ array(
531
+ 'type' => 'hidden',
532
+ 'label' => __('Button','conceptly'),
533
+ 'section' => 'header_get_button',
534
+ 'priority' => 5,
535
+ )
536
+ );
537
  };
538
  add_action( 'customize_register', 'conceptly_lite_header_setting' );
539
 
inc/azwa/features/azwa-slider.php CHANGED
@@ -12,6 +12,67 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
12
  )
13
  );
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  /**
16
  * Customizer Repeater for add slides
17
  */
@@ -19,8 +80,8 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
19
  $wp_customize->add_setting( 'slider',
20
  array(
21
  'sanitize_callback' => 'conceptly_repeater_sanitize',
22
- //'transport' => $selective_refresh,
23
- 'default' => conceptly_get_slides_default()
24
  )
25
  );
26
 
@@ -32,7 +93,6 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
32
  'section' => 'slider_setting',
33
  'add_field_label' => esc_html__( 'Add New Slider', 'conceptly-pro' ),
34
  'item_name' => esc_html__( 'Slider', 'conceptly-pro' ),
35
- 'priority' => 2,
36
 
37
  'customizer_repeater_icon_control' => false,
38
  'customizer_repeater_title_control' => true,
@@ -71,6 +131,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
71
  $wp_customize->add_setting( 'conceptly_slider_upgrade_to_pro', array(
72
  'capability' => 'edit_theme_options',
73
  'sanitize_callback' => 'wp_filter_nohtml_kses',
 
74
  ));
75
  $wp_customize->add_control(
76
  new Conceptly_slider__section_upgrade(
@@ -83,26 +144,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
83
  )
84
  );
85
 
86
- // Slider Hide/ Show Setting //
87
- $wp_customize->add_setting(
88
- 'hide_show_slider' ,
89
- array(
90
- 'default' => esc_html__( '1', 'conceptly-pro' ),
91
- 'capability' => 'edit_theme_options',
92
- 'sanitize_callback' => 'sanitize_text_field',
93
- 'transport' => $selective_refresh,
94
- )
95
- );
96
 
97
- $wp_customize->add_control( new Conceptly_Customizer_Toggle_Control( $wp_customize,
98
- 'hide_show_slider',
99
- array(
100
- 'label' => esc_html__( 'Hide / Show Section', 'conceptly-pro' ),
101
- 'section' => 'slider_setting',
102
- 'settings' => 'hide_show_slider',
103
- 'type' => 'ios', // light, ios, flat
104
- )
105
- ));
106
 
107
 
108
 
@@ -114,7 +156,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
114
  array(
115
  'default' => '',
116
  'capability' => 'edit_theme_options',
117
- //'sanitize_callback' => 'sanitize_text_field',
118
  )
119
  );
120
 
12
  )
13
  );
14
 
15
+ // Slider Setting Head
16
+ $wp_customize->add_setting(
17
+ 'slider_setting_head'
18
+ ,array(
19
+ 'capability' => 'edit_theme_options',
20
+ 'sanitize_callback' => 'conceptly_sanitize_text',
21
+ 'priority' => 1,
22
+ )
23
+ );
24
+
25
+ $wp_customize->add_control(
26
+ 'slider_setting_head',
27
+ array(
28
+ 'type' => 'hidden',
29
+ 'label' => __('setting','conceptly'),
30
+ 'section' => 'slider_setting',
31
+ )
32
+ );
33
+
34
+
35
+ // Slider Hide/ Show Setting //
36
+ $wp_customize->add_setting(
37
+ 'hide_show_slider' ,
38
+ array(
39
+ 'default' => esc_html__( '1', 'conceptly-pro' ),
40
+ 'capability' => 'edit_theme_options',
41
+ 'sanitize_callback' => 'sanitize_text_field',
42
+ 'transport' => $selective_refresh,
43
+ 'priority' => 2,
44
+ )
45
+ );
46
+
47
+ $wp_customize->add_control( new Conceptly_Customizer_Toggle_Control( $wp_customize,
48
+ 'hide_show_slider',
49
+ array(
50
+ 'label' => esc_html__( 'Hide / Show Section', 'conceptly-pro' ),
51
+ 'section' => 'slider_setting',
52
+ 'settings' => 'hide_show_slider',
53
+ 'type' => 'ios', // light, ios, flat
54
+ )
55
+ ));
56
+
57
+ // Slider Content Head
58
+ $wp_customize->add_setting(
59
+ 'slider_content_head'
60
+ ,array(
61
+ 'capability' => 'edit_theme_options',
62
+ 'sanitize_callback' => 'conceptly_sanitize_text',
63
+ 'priority' => 5,
64
+ )
65
+ );
66
+
67
+ $wp_customize->add_control(
68
+ 'slider_content_head',
69
+ array(
70
+ 'type' => 'hidden',
71
+ 'label' => __('Content','conceptly'),
72
+ 'section' => 'slider_setting',
73
+ )
74
+ );
75
+
76
  /**
77
  * Customizer Repeater for add slides
78
  */
80
  $wp_customize->add_setting( 'slider',
81
  array(
82
  'sanitize_callback' => 'conceptly_repeater_sanitize',
83
+ 'default' => conceptly_get_slides_default(),
84
+ 'priority' => 6,
85
  )
86
  );
87
 
93
  'section' => 'slider_setting',
94
  'add_field_label' => esc_html__( 'Add New Slider', 'conceptly-pro' ),
95
  'item_name' => esc_html__( 'Slider', 'conceptly-pro' ),
 
96
 
97
  'customizer_repeater_icon_control' => false,
98
  'customizer_repeater_title_control' => true,
131
  $wp_customize->add_setting( 'conceptly_slider_upgrade_to_pro', array(
132
  'capability' => 'edit_theme_options',
133
  'sanitize_callback' => 'wp_filter_nohtml_kses',
134
+ 'priority' => 7,
135
  ));
136
  $wp_customize->add_control(
137
  new Conceptly_slider__section_upgrade(
144
  )
145
  );
146
 
 
 
 
 
 
 
 
 
 
 
147
 
 
 
 
 
 
 
 
 
 
148
 
149
 
150
 
156
  array(
157
  'default' => '',
158
  'capability' => 'edit_theme_options',
159
+ 'priority' => 8,
160
  )
161
  );
162
 
inc/conceptly/dynamic-style.php CHANGED
@@ -59,7 +59,7 @@ if( ! function_exists( 'cleverfox_conceptly_dynamic_styles' ) ):
59
  $menu_font_weight = get_theme_mod('menu_font_weight','normal');
60
  $menu_font_size = get_theme_mod('menu_font_size','15');
61
  $menu_line_height = get_theme_mod('menu_line_height','1.6');
62
- $output_css .=" .main-menu li a{
63
  text-transform:" .esc_attr($menu_text_transform). ";
64
  font-size: " .esc_attr($menu_font_size). "px;
65
  line-height: " .esc_attr($menu_line_height). ";
59
  $menu_font_weight = get_theme_mod('menu_font_weight','normal');
60
  $menu_font_size = get_theme_mod('menu_font_size','15');
61
  $menu_line_height = get_theme_mod('menu_line_height','1.6');
62
+ $output_css .=" .menubar .menu-wrap > li > a{
63
  text-transform:" .esc_attr($menu_text_transform). ";
64
  font-size: " .esc_attr($menu_font_size). "px;
65
  line-height: " .esc_attr($menu_line_height). ";
inc/conceptly/features/conceptly-call-to-action.php CHANGED
@@ -17,6 +17,24 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
17
  Call Action Settings Section
18
  =========================================*/
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
  $wp_customize->add_setting(
22
  'hide_show_cta' ,
@@ -25,6 +43,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
25
  'capability' => 'edit_theme_options',
26
  'sanitize_callback' => 'sanitize_text_field',
27
  'transport' => $selective_refresh,
 
28
  )
29
  );
30
 
@@ -40,6 +59,24 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
40
 
41
  // Call Action Settings Section //
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
  // Call to action title //
45
  $wp_customize->add_setting(
@@ -49,6 +86,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
49
  'capability' => 'edit_theme_options',
50
  'sanitize_callback' => 'conceptly_sanitize_html',
51
  'transport' => $selective_refresh,
 
52
  )
53
  );
54
 
@@ -70,6 +108,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
70
  'capability' => 'edit_theme_options',
71
  'sanitize_callback' => 'conceptly_sanitize_text',
72
  'transport' => $selective_refresh,
 
73
  )
74
  );
75
 
@@ -94,6 +133,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
94
  'sanitize_callback' => 'conceptly_sanitize_text',
95
  'capability' => 'edit_theme_options',
96
  'transport' => $selective_refresh,
 
97
  )
98
  );
99
 
@@ -114,6 +154,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
114
  'capability' => 'edit_theme_options',
115
  'sanitize_callback' => 'conceptly_sanitize_text',
116
  'transport' => $selective_refresh,
 
117
  )
118
  );
119
 
@@ -134,6 +175,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
134
  'default' => __('#','conceptly-pro'),
135
  'capability' => 'edit_theme_options',
136
  'sanitize_callback' => 'conceptly_sanitize_url',
 
137
  )
138
  );
139
 
@@ -153,6 +195,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
153
  ,array(
154
  'capability' => 'edit_theme_options',
155
  'sanitize_callback' => 'conceptly_sanitize_text',
 
156
  )
157
  );
158
 
@@ -169,6 +212,25 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
169
 
170
  // Call Action Background Section //
171
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  // Background Image //
173
  $wp_customize->add_setting(
174
  'call_action_background_setting' ,
@@ -176,6 +238,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
176
  'default' => CLEVERFOX_PLUGIN_URL . 'inc/conceptly/images/bg/cta-bg.jpg',
177
  'capability' => 'edit_theme_options',
178
  'sanitize_callback' => 'conceptly_sanitize_url',
 
179
 
180
  )
181
  );
@@ -193,6 +256,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
193
  'default' => __( 'scroll', 'conceptly-pro' ),
194
  'capability' => 'edit_theme_options',
195
  'sanitize_callback' => 'conceptly_sanitize_select',
 
196
  )
197
  );
198
 
17
  Call Action Settings Section
18
  =========================================*/
19
 
20
+ // cta Setting Head
21
+ $wp_customize->add_setting(
22
+ 'cta_setting_head'
23
+ ,array(
24
+ 'capability' => 'edit_theme_options',
25
+ 'sanitize_callback' => 'conceptly_sanitize_text',
26
+ 'priority' => 1,
27
+ )
28
+ );
29
+
30
+ $wp_customize->add_control(
31
+ 'cta_setting_head',
32
+ array(
33
+ 'type' => 'hidden',
34
+ 'label' => __('Setting','conceptly'),
35
+ 'section' => 'call_action_setting',
36
+ )
37
+ );
38
 
39
  $wp_customize->add_setting(
40
  'hide_show_cta' ,
43
  'capability' => 'edit_theme_options',
44
  'sanitize_callback' => 'sanitize_text_field',
45
  'transport' => $selective_refresh,
46
+ 'priority' => 2,
47
  )
48
  );
49
 
59
 
60
  // Call Action Settings Section //
61
 
62
+ // cta Content Head
63
+ $wp_customize->add_setting(
64
+ 'cta_content_head'
65
+ ,array(
66
+ 'capability' => 'edit_theme_options',
67
+ 'sanitize_callback' => 'conceptly_sanitize_text',
68
+ 'priority' => 5,
69
+ )
70
+ );
71
+
72
+ $wp_customize->add_control(
73
+ 'cta_content_head',
74
+ array(
75
+ 'type' => 'hidden',
76
+ 'label' => __('Content','conceptly'),
77
+ 'section' => 'call_action_setting',
78
+ )
79
+ );
80
 
81
  // Call to action title //
82
  $wp_customize->add_setting(
86
  'capability' => 'edit_theme_options',
87
  'sanitize_callback' => 'conceptly_sanitize_html',
88
  'transport' => $selective_refresh,
89
+ 'priority' => 6,
90
  )
91
  );
92
 
108
  'capability' => 'edit_theme_options',
109
  'sanitize_callback' => 'conceptly_sanitize_text',
110
  'transport' => $selective_refresh,
111
+ 'priority' => 7,
112
  )
113
  );
114
 
133
  'sanitize_callback' => 'conceptly_sanitize_text',
134
  'capability' => 'edit_theme_options',
135
  'transport' => $selective_refresh,
136
+ 'priority' => 8,
137
  )
138
  );
139
 
154
  'capability' => 'edit_theme_options',
155
  'sanitize_callback' => 'conceptly_sanitize_text',
156
  'transport' => $selective_refresh,
157
+ 'priority' => 9,
158
  )
159
  );
160
 
175
  'default' => __('#','conceptly-pro'),
176
  'capability' => 'edit_theme_options',
177
  'sanitize_callback' => 'conceptly_sanitize_url',
178
+ 'priority' => 10,
179
  )
180
  );
181
 
195
  ,array(
196
  'capability' => 'edit_theme_options',
197
  'sanitize_callback' => 'conceptly_sanitize_text',
198
+ 'priority' => 11,
199
  )
200
  );
201
 
212
 
213
  // Call Action Background Section //
214
 
215
+ // cta Background Head
216
+ $wp_customize->add_setting(
217
+ 'cta_bg_head'
218
+ ,array(
219
+ 'capability' => 'edit_theme_options',
220
+ 'sanitize_callback' => 'conceptly_sanitize_text',
221
+ 'priority' => 15,
222
+ )
223
+ );
224
+
225
+ $wp_customize->add_control(
226
+ 'cta_bg_head',
227
+ array(
228
+ 'type' => 'hidden',
229
+ 'label' => __('Bg','conceptly'),
230
+ 'section' => 'call_action_setting',
231
+ )
232
+ );
233
+
234
  // Background Image //
235
  $wp_customize->add_setting(
236
  'call_action_background_setting' ,
238
  'default' => CLEVERFOX_PLUGIN_URL . 'inc/conceptly/images/bg/cta-bg.jpg',
239
  'capability' => 'edit_theme_options',
240
  'sanitize_callback' => 'conceptly_sanitize_url',
241
+ 'priority' => 16,
242
 
243
  )
244
  );
256
  'default' => __( 'scroll', 'conceptly-pro' ),
257
  'capability' => 'edit_theme_options',
258
  'sanitize_callback' => 'conceptly_sanitize_select',
259
+ 'priority' => 17,
260
  )
261
  );
262
 
inc/conceptly/features/conceptly-features.php CHANGED
@@ -11,6 +11,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
11
  'priority' => apply_filters( 'conceptly_section_priority',30 , 'conceptly_feature' ),
12
  )
13
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  // Feature Hide/ Show Setting //
15
  $wp_customize->add_setting(
16
  'hide_show_feature' ,
@@ -19,6 +39,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
19
  'capability' => 'edit_theme_options',
20
  'sanitize_callback' => 'sanitize_text_field',
21
  'transport' => $selective_refresh,
 
22
  )
23
  );
24
 
@@ -34,6 +55,24 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
34
 
35
  // Features Header Section //
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
  // feature Title //
39
  $wp_customize->add_setting(
@@ -43,6 +82,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
43
  'capability' => 'edit_theme_options',
44
  'sanitize_callback' => 'conceptly_sanitize_html',
45
  'transport' => $selective_refresh,
 
46
  )
47
  );
48
 
@@ -64,6 +104,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
64
  'capability' => 'edit_theme_options',
65
  'sanitize_callback' => 'conceptly_sanitize_text',
66
  'transport' => $selective_refresh,
 
67
  )
68
  );
69
 
@@ -79,6 +120,24 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
79
 
80
  // Features content Section //
81
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
  /**
84
  * Customizer Repeater for add features
@@ -86,7 +145,8 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
86
  $wp_customize->add_setting( 'feature_content',
87
  array(
88
  'sanitize_callback' => 'conceptly_repeater_sanitize',
89
- 'default' => conceptly_get_feature_default()
 
90
  )
91
  );
92
 
@@ -98,7 +158,6 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
98
  'section' => 'features_setting',
99
  'add_field_label' => esc_html__( 'Add New Feature', 'conceptly-pro' ),
100
  'item_name' => esc_html__( 'Feature', 'conceptly-pro' ),
101
- 'priority' => 1,
102
  'customizer_repeater_title_control' => true,
103
  'customizer_repeater_text_control' => true,
104
  'customizer_repeater_icon_control' => true,
@@ -129,6 +188,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
129
  $wp_customize->add_setting( 'conceptly_feature_upgrade_to_pro', array(
130
  'capability' => 'edit_theme_options',
131
  'sanitize_callback' => 'wp_filter_nohtml_kses',
 
132
  ));
133
  $wp_customize->add_control(
134
  new Conceptly_feature__section_upgrade(
11
  'priority' => apply_filters( 'conceptly_section_priority',30 , 'conceptly_feature' ),
12
  )
13
  );
14
+
15
+ // Feature Setting Head
16
+ $wp_customize->add_setting(
17
+ 'feature_setting_head'
18
+ ,array(
19
+ 'capability' => 'edit_theme_options',
20
+ 'sanitize_callback' => 'conceptly_sanitize_text',
21
+ 'priority' => 1,
22
+ )
23
+ );
24
+
25
+ $wp_customize->add_control(
26
+ 'feature_setting_head',
27
+ array(
28
+ 'type' => 'hidden',
29
+ 'label' => __('Setting','conceptly'),
30
+ 'section' => 'features_setting',
31
+ )
32
+ );
33
+
34
  // Feature Hide/ Show Setting //
35
  $wp_customize->add_setting(
36
  'hide_show_feature' ,
39
  'capability' => 'edit_theme_options',
40
  'sanitize_callback' => 'sanitize_text_field',
41
  'transport' => $selective_refresh,
42
+ 'priority' => 2,
43
  )
44
  );
45
 
55
 
56
  // Features Header Section //
57
 
58
+ // Feature Head
59
+ $wp_customize->add_setting(
60
+ 'feature_head'
61
+ ,array(
62
+ 'capability' => 'edit_theme_options',
63
+ 'sanitize_callback' => 'conceptly_sanitize_text',
64
+ 'priority' => 5,
65
+ )
66
+ );
67
+
68
+ $wp_customize->add_control(
69
+ 'feature_head',
70
+ array(
71
+ 'type' => 'hidden',
72
+ 'label' => __('Header','conceptly'),
73
+ 'section' => 'features_setting',
74
+ )
75
+ );
76
 
77
  // feature Title //
78
  $wp_customize->add_setting(
82
  'capability' => 'edit_theme_options',
83
  'sanitize_callback' => 'conceptly_sanitize_html',
84
  'transport' => $selective_refresh,
85
+ 'priority' => 6,
86
  )
87
  );
88
 
104
  'capability' => 'edit_theme_options',
105
  'sanitize_callback' => 'conceptly_sanitize_text',
106
  'transport' => $selective_refresh,
107
+ 'priority' => 7,
108
  )
109
  );
110
 
120
 
121
  // Features content Section //
122
 
123
+ // Feature Content Head
124
+ $wp_customize->add_setting(
125
+ 'feature_content_head'
126
+ ,array(
127
+ 'capability' => 'edit_theme_options',
128
+ 'sanitize_callback' => 'conceptly_sanitize_text',
129
+ 'priority' => 8,
130
+ )
131
+ );
132
+
133
+ $wp_customize->add_control(
134
+ 'feature_content_head',
135
+ array(
136
+ 'type' => 'hidden',
137
+ 'label' => __('Content','conceptly'),
138
+ 'section' => 'features_setting',
139
+ )
140
+ );
141
 
142
  /**
143
  * Customizer Repeater for add features
145
  $wp_customize->add_setting( 'feature_content',
146
  array(
147
  'sanitize_callback' => 'conceptly_repeater_sanitize',
148
+ 'default' => conceptly_get_feature_default(),
149
+ 'priority' => 9,
150
  )
151
  );
152
 
158
  'section' => 'features_setting',
159
  'add_field_label' => esc_html__( 'Add New Feature', 'conceptly-pro' ),
160
  'item_name' => esc_html__( 'Feature', 'conceptly-pro' ),
 
161
  'customizer_repeater_title_control' => true,
162
  'customizer_repeater_text_control' => true,
163
  'customizer_repeater_icon_control' => true,
188
  $wp_customize->add_setting( 'conceptly_feature_upgrade_to_pro', array(
189
  'capability' => 'edit_theme_options',
190
  'sanitize_callback' => 'wp_filter_nohtml_kses',
191
+ 'priority' => 10,
192
  ));
193
  $wp_customize->add_control(
194
  new Conceptly_feature__section_upgrade(
inc/conceptly/features/conceptly-header.php CHANGED
@@ -14,6 +14,25 @@ function conceptly_lite_header_setting( $wp_customize ){
14
  )
15
  );
16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  //Header Contact Hide/Show Setting //
18
  $wp_customize->add_setting(
19
  'hide_show_contact_infot' ,
@@ -22,6 +41,7 @@ function conceptly_lite_header_setting( $wp_customize ){
22
  'capability' => 'edit_theme_options',
23
  'sanitize_callback' => 'sanitize_text_field',
24
  'transport' => $selective_refresh,
 
25
  )
26
  );
27
 
@@ -44,6 +64,7 @@ function conceptly_lite_header_setting( $wp_customize ){
44
  'default' => __('fa-phone','conceptly-pro'),
45
  'sanitize_callback' => 'conceptly_sanitize_text',
46
  'capability' => 'edit_theme_options',
 
47
  )
48
  );
49
 
@@ -62,7 +83,8 @@ function conceptly_lite_header_setting( $wp_customize ){
62
  array(
63
  'default' => __('+1 514-286-4242','conceptly-pro'),
64
  'sanitize_callback' => 'conceptly_sanitize_text',
65
- 'capability' => 'edit_theme_options'
 
66
  )
67
  );
68
 
@@ -76,6 +98,26 @@ function conceptly_lite_header_setting( $wp_customize ){
76
  )
77
  );
78
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  //Header Email Hide/Show Setting //
80
  $wp_customize->add_setting(
81
  'hide_show_email_infot' ,
@@ -84,6 +126,7 @@ function conceptly_lite_header_setting( $wp_customize ){
84
  'capability' => 'edit_theme_options',
85
  'sanitize_callback' => 'sanitize_text_field',
86
  'transport' => $selective_refresh,
 
87
  )
88
  );
89
 
@@ -104,6 +147,7 @@ function conceptly_lite_header_setting( $wp_customize ){
104
  'default' => __('fa-envelope','conceptly-pro'),
105
  'sanitize_callback' => 'conceptly_sanitize_text',
106
  'capability' => 'edit_theme_options',
 
107
  )
108
  );
109
 
@@ -124,6 +168,7 @@ function conceptly_lite_header_setting( $wp_customize ){
124
  'default' => __('example@example.com','conceptly-pro'),
125
  'sanitize_callback' => 'conceptly_sanitize_text',
126
  'capability' => 'edit_theme_options',
 
127
  )
128
  );
129
 
@@ -137,6 +182,26 @@ function conceptly_lite_header_setting( $wp_customize ){
137
  )
138
  );
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  //Header FAQ Hide/Show Setting //
141
  $wp_customize->add_setting(
142
  'hide_show_faq' ,
@@ -145,6 +210,7 @@ function conceptly_lite_header_setting( $wp_customize ){
145
  'capability' => 'edit_theme_options',
146
  'sanitize_callback' => 'sanitize_text_field',
147
  'transport' => $selective_refresh,
 
148
  )
149
  );
150
 
@@ -165,6 +231,7 @@ function conceptly_lite_header_setting( $wp_customize ){
165
  'default' => __('fa-user','conceptly-pro'),
166
  'sanitize_callback' => 'conceptly_sanitize_text',
167
  'capability' => 'edit_theme_options',
 
168
  )
169
  );
170
 
@@ -184,6 +251,7 @@ function conceptly_lite_header_setting( $wp_customize ){
184
  'default' => __('Ask Your Question','conceptly-pro'),
185
  'sanitize_callback' => 'conceptly_sanitize_text',
186
  'capability' => 'edit_theme_options',
 
187
  )
188
  );
189
 
@@ -211,6 +279,26 @@ function conceptly_lite_header_setting( $wp_customize ){
211
  'panel' => 'header_section',
212
  )
213
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
  // Social Icons Hide/Show Setting //
215
  $wp_customize->add_setting(
216
  'hide_show_social_icon' ,
@@ -219,6 +307,7 @@ function conceptly_lite_header_setting( $wp_customize ){
219
  'capability' => 'edit_theme_options',
220
  'sanitize_callback' => 'sanitize_text_field',
221
  'transport' => $selective_refresh,
 
222
  )
223
  );
224
 
@@ -231,13 +320,34 @@ function conceptly_lite_header_setting( $wp_customize ){
231
  'type' => 'ios', // light, ios, flat
232
  )
233
  ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  /**
235
  * Customizer Repeater
236
  */
237
  $wp_customize->add_setting( 'social_icons',
238
  array(
239
  'default' => conceptly_get_social_icon_default(),
240
- 'sanitize_callback' => 'conceptly_repeater_sanitize',
 
241
  )
242
  );
243
 
@@ -247,7 +357,6 @@ function conceptly_lite_header_setting( $wp_customize ){
247
  array(
248
  'label' => esc_html__('Social Icons','conceptly-pro'),
249
  'section' => 'header_setting',
250
- 'priority' => 2,
251
  'customizer_repeater_icon_control' => true,
252
  'customizer_repeater_link_control' => true,
253
  )
@@ -333,6 +442,44 @@ function conceptly_lite_header_setting( $wp_customize ){
333
  ) )
334
  );
335
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
336
  };
337
  add_action( 'customize_register', 'conceptly_lite_header_setting' );
338
 
14
  )
15
  );
16
 
17
+ // Phone
18
+ $wp_customize->add_setting(
19
+ 'hdr_top_phone'
20
+ ,array(
21
+ 'capability' => 'edit_theme_options',
22
+ 'sanitize_callback' => 'conceptly_sanitize_text',
23
+ 'priority' => 1,
24
+ )
25
+ );
26
+
27
+ $wp_customize->add_control(
28
+ 'hdr_top_phone',
29
+ array(
30
+ 'type' => 'hidden',
31
+ 'label' => __('Phone','conceptly'),
32
+ 'section' => 'header_contact',
33
+ )
34
+ );
35
+
36
  //Header Contact Hide/Show Setting //
37
  $wp_customize->add_setting(
38
  'hide_show_contact_infot' ,
41
  'capability' => 'edit_theme_options',
42
  'sanitize_callback' => 'sanitize_text_field',
43
  'transport' => $selective_refresh,
44
+ 'priority' => 2,
45
  )
46
  );
47
 
64
  'default' => __('fa-phone','conceptly-pro'),
65
  'sanitize_callback' => 'conceptly_sanitize_text',
66
  'capability' => 'edit_theme_options',
67
+ 'priority' => 3,
68
  )
69
  );
70
 
83
  array(
84
  'default' => __('+1 514-286-4242','conceptly-pro'),
85
  'sanitize_callback' => 'conceptly_sanitize_text',
86
+ 'capability' => 'edit_theme_options',
87
+ 'priority' => 4,
88
  )
89
  );
90
 
98
  )
99
  );
100
 
101
+
102
+ // Email
103
+ $wp_customize->add_setting(
104
+ 'hdr_top_email'
105
+ ,array(
106
+ 'capability' => 'edit_theme_options',
107
+ 'sanitize_callback' => 'conceptly_sanitize_text',
108
+ 'priority' => 7,
109
+ )
110
+ );
111
+
112
+ $wp_customize->add_control(
113
+ 'hdr_top_email',
114
+ array(
115
+ 'type' => 'hidden',
116
+ 'label' => __('Email','conceptly'),
117
+ 'section' => 'header_contact',
118
+ )
119
+ );
120
+
121
  //Header Email Hide/Show Setting //
122
  $wp_customize->add_setting(
123
  'hide_show_email_infot' ,
126
  'capability' => 'edit_theme_options',
127
  'sanitize_callback' => 'sanitize_text_field',
128
  'transport' => $selective_refresh,
129
+ 'priority' => 8,
130
  )
131
  );
132
 
147
  'default' => __('fa-envelope','conceptly-pro'),
148
  'sanitize_callback' => 'conceptly_sanitize_text',
149
  'capability' => 'edit_theme_options',
150
+ 'priority' => 9,
151
  )
152
  );
153
 
168
  'default' => __('example@example.com','conceptly-pro'),
169
  'sanitize_callback' => 'conceptly_sanitize_text',
170
  'capability' => 'edit_theme_options',
171
+ 'priority' => 10,
172
  )
173
  );
174
 
182
  )
183
  );
184
 
185
+
186
+ // FAQ
187
+ $wp_customize->add_setting(
188
+ 'hdr_top_faq'
189
+ ,array(
190
+ 'capability' => 'edit_theme_options',
191
+ 'sanitize_callback' => 'conceptly_sanitize_text',
192
+ 'priority' => 13,
193
+ )
194
+ );
195
+
196
+ $wp_customize->add_control(
197
+ 'hdr_top_faq',
198
+ array(
199
+ 'type' => 'hidden',
200
+ 'label' => __('FAQ','conceptly'),
201
+ 'section' => 'header_contact',
202
+ )
203
+ );
204
+
205
  //Header FAQ Hide/Show Setting //
206
  $wp_customize->add_setting(
207
  'hide_show_faq' ,
210
  'capability' => 'edit_theme_options',
211
  'sanitize_callback' => 'sanitize_text_field',
212
  'transport' => $selective_refresh,
213
+ 'priority' => 14,
214
  )
215
  );
216
 
231
  'default' => __('fa-user','conceptly-pro'),
232
  'sanitize_callback' => 'conceptly_sanitize_text',
233
  'capability' => 'edit_theme_options',
234
+ 'priority' => 15,
235
  )
236
  );
237
 
251
  'default' => __('Ask Your Question','conceptly-pro'),
252
  'sanitize_callback' => 'conceptly_sanitize_text',
253
  'capability' => 'edit_theme_options',
254
+ 'priority' => 16,
255
  )
256
  );
257
 
279
  'panel' => 'header_section',
280
  )
281
  );
282
+
283
+ // Setting Head
284
+ $wp_customize->add_setting(
285
+ 'hdr_social_setting_head'
286
+ ,array(
287
+ 'capability' => 'edit_theme_options',
288
+ 'sanitize_callback' => 'conceptly_sanitize_text',
289
+ 'priority' => 1,
290
+ )
291
+ );
292
+
293
+ $wp_customize->add_control(
294
+ 'hdr_social_setting_head',
295
+ array(
296
+ 'type' => 'hidden',
297
+ 'label' => __('Setting','conceptly'),
298
+ 'section' => 'header_setting',
299
+ )
300
+ );
301
+
302
  // Social Icons Hide/Show Setting //
303
  $wp_customize->add_setting(
304
  'hide_show_social_icon' ,
307
  'capability' => 'edit_theme_options',
308
  'sanitize_callback' => 'sanitize_text_field',
309
  'transport' => $selective_refresh,
310
+ 'priority' => 2,
311
  )
312
  );
313
 
320
  'type' => 'ios', // light, ios, flat
321
  )
322
  ));
323
+
324
+ // Content Head
325
+ $wp_customize->add_setting(
326
+ 'hdr_social_content_head'
327
+ ,array(
328
+ 'capability' => 'edit_theme_options',
329
+ 'sanitize_callback' => 'conceptly_sanitize_text',
330
+ 'priority' => 3,
331
+ )
332
+ );
333
+
334
+ $wp_customize->add_control(
335
+ 'hdr_social_content_head',
336
+ array(
337
+ 'type' => 'hidden',
338
+ 'label' => __('Social-Icon','conceptly'),
339
+ 'section' => 'header_setting',
340
+ )
341
+ );
342
+
343
  /**
344
  * Customizer Repeater
345
  */
346
  $wp_customize->add_setting( 'social_icons',
347
  array(
348
  'default' => conceptly_get_social_icon_default(),
349
+ 'sanitize_callback' => 'conceptly_repeater_sanitize',
350
+ 'priority' => 4,
351
  )
352
  );
353
 
357
  array(
358
  'label' => esc_html__('Social Icons','conceptly-pro'),
359
  'section' => 'header_setting',
 
360
  'customizer_repeater_icon_control' => true,
361
  'customizer_repeater_link_control' => true,
362
  )
442
  ) )
443
  );
444
  }
445
+
446
+ // Header Button Setting Head
447
+ $wp_customize->add_setting(
448
+ 'hdr_btn_setting_head'
449
+ ,array(
450
+ 'capability' => 'edit_theme_options',
451
+ 'sanitize_callback' => 'conceptly_sanitize_text',
452
+ )
453
+ );
454
+
455
+ $wp_customize->add_control(
456
+ 'hdr_btn_setting_head',
457
+ array(
458
+ 'type' => 'hidden',
459
+ 'label' => __('Setting','conceptly'),
460
+ 'section' => 'header_get_button',
461
+ 'priority' => 1,
462
+ )
463
+ );
464
+
465
+ // Header Button Content Head
466
+ $wp_customize->add_setting(
467
+ 'hdr_btn_content_head'
468
+ ,array(
469
+ 'capability' => 'edit_theme_options',
470
+ 'sanitize_callback' => 'conceptly_sanitize_text',
471
+ )
472
+ );
473
+
474
+ $wp_customize->add_control(
475
+ 'hdr_btn_content_head',
476
+ array(
477
+ 'type' => 'hidden',
478
+ 'label' => __('Button','conceptly'),
479
+ 'section' => 'header_get_button',
480
+ 'priority' => 5,
481
+ )
482
+ );
483
  };
484
  add_action( 'customize_register', 'conceptly_lite_header_setting' );
485
 
inc/conceptly/features/conceptly-info.php CHANGED
@@ -12,6 +12,25 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
12
  'priority' => apply_filters( 'conceptly_section_priority', 10, 'conceptly_info' ),
13
  )
14
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  // info Hide/ Show Setting //
16
  $wp_customize->add_setting(
17
  'hide_show_info' ,
@@ -20,6 +39,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
20
  'capability' => 'edit_theme_options',
21
  'sanitize_callback' => 'sanitize_text_field',
22
  'transport' => $selective_refresh,
 
23
  )
24
  );
25
 
@@ -35,6 +55,24 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
35
  /*=========================================
36
  Info contents Section first
37
  =========================================*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  // info icon //
39
 
40
  $wp_customize->add_setting(
@@ -43,6 +81,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
43
  'default' => 'fa-envelope',
44
  'sanitize_callback' => 'sanitize_text_field',
45
  'capability' => 'edit_theme_options',
 
46
  )
47
  );
48
 
@@ -64,6 +103,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
64
  'capability' => 'edit_theme_options',
65
  'sanitize_callback' => 'sanitize_text_field',
66
  'transport' => $selective_refresh,
 
67
  )
68
  );
69
 
@@ -85,6 +125,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
85
  'capability' => 'edit_theme_options',
86
  'sanitize_callback' => 'sanitize_text_field',
87
  'transport' => $selective_refresh,
 
88
  )
89
  );
90
 
@@ -101,6 +142,25 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
101
  /*=========================================
102
  Info contents Section second
103
  =========================================*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  // info icon //
105
 
106
  $wp_customize->add_setting(
@@ -109,6 +169,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
109
  'default' => 'fa-life-ring',
110
  'sanitize_callback' => 'sanitize_text_field',
111
  'capability' => 'edit_theme_options',
 
112
  )
113
  );
114
 
@@ -130,6 +191,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
130
  'capability' => 'edit_theme_options',
131
  'sanitize_callback' => 'sanitize_text_field',
132
  'transport' => $selective_refresh,
 
133
  )
134
  );
135
 
@@ -151,6 +213,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
151
  'capability' => 'edit_theme_options',
152
  'sanitize_callback' => 'sanitize_text_field',
153
  'transport' => $selective_refresh,
 
154
  )
155
  );
156
 
@@ -167,6 +230,25 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
167
  /*=========================================
168
  Info contents Section third
169
  =========================================*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  // info icon //
171
 
172
  $wp_customize->add_setting(
@@ -175,6 +257,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
175
  'default' => 'fa-map-marker',
176
  'sanitize_callback' => 'sanitize_text_field',
177
  'capability' => 'edit_theme_options',
 
178
  )
179
  );
180
 
@@ -196,6 +279,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
196
  'capability' => 'edit_theme_options',
197
  'sanitize_callback' => 'sanitize_text_field',
198
  'transport' => $selective_refresh,
 
199
  )
200
  );
201
 
@@ -217,6 +301,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
217
  'capability' => 'edit_theme_options',
218
  'sanitize_callback' => 'sanitize_text_field',
219
  'transport' => $selective_refresh,
 
220
  )
221
  );
222
 
12
  'priority' => apply_filters( 'conceptly_section_priority', 10, 'conceptly_info' ),
13
  )
14
  );
15
+ // Info Setting Head
16
+ $wp_customize->add_setting(
17
+ 'info_setting_head'
18
+ ,array(
19
+ 'capability' => 'edit_theme_options',
20
+ 'sanitize_callback' => 'conceptly_sanitize_text',
21
+ 'priority' => 1,
22
+ )
23
+ );
24
+
25
+ $wp_customize->add_control(
26
+ 'info_setting_head',
27
+ array(
28
+ 'type' => 'hidden',
29
+ 'label' => __('Setting','conceptly'),
30
+ 'section' => 'info_setting',
31
+ )
32
+ );
33
+
34
  // info Hide/ Show Setting //
35
  $wp_customize->add_setting(
36
  'hide_show_info' ,
39
  'capability' => 'edit_theme_options',
40
  'sanitize_callback' => 'sanitize_text_field',
41
  'transport' => $selective_refresh,
42
+ 'priority' => 2,
43
  )
44
  );
45
 
55
  /*=========================================
56
  Info contents Section first
57
  =========================================*/
58
+ // Info First Content Head
59
+ $wp_customize->add_setting(
60
+ 'info_first_content_head'
61
+ ,array(
62
+ 'capability' => 'edit_theme_options',
63
+ 'sanitize_callback' => 'conceptly_sanitize_text',
64
+ 'priority' => 5,
65
+ )
66
+ );
67
+
68
+ $wp_customize->add_control(
69
+ 'info_first_content_head',
70
+ array(
71
+ 'type' => 'hidden',
72
+ 'label' => __('Info First','conceptly'),
73
+ 'section' => 'info_setting',
74
+ )
75
+ );
76
  // info icon //
77
 
78
  $wp_customize->add_setting(
81
  'default' => 'fa-envelope',
82
  'sanitize_callback' => 'sanitize_text_field',
83
  'capability' => 'edit_theme_options',
84
+ 'priority' => 6,
85
  )
86
  );
87
 
103
  'capability' => 'edit_theme_options',
104
  'sanitize_callback' => 'sanitize_text_field',
105
  'transport' => $selective_refresh,
106
+ 'priority' => 7,
107
  )
108
  );
109
 
125
  'capability' => 'edit_theme_options',
126
  'sanitize_callback' => 'sanitize_text_field',
127
  'transport' => $selective_refresh,
128
+ 'priority' => 8,
129
  )
130
  );
131
 
142
  /*=========================================
143
  Info contents Section second
144
  =========================================*/
145
+ // Info Second Content Head
146
+ $wp_customize->add_setting(
147
+ 'info_second_content_head'
148
+ ,array(
149
+ 'capability' => 'edit_theme_options',
150
+ 'sanitize_callback' => 'conceptly_sanitize_text',
151
+ 'priority' => 12,
152
+ )
153
+ );
154
+
155
+ $wp_customize->add_control(
156
+ 'info_second_content_head',
157
+ array(
158
+ 'type' => 'hidden',
159
+ 'label' => __('Info Second','conceptly'),
160
+ 'section' => 'info_setting',
161
+ )
162
+ );
163
+
164
  // info icon //
165
 
166
  $wp_customize->add_setting(
169
  'default' => 'fa-life-ring',
170
  'sanitize_callback' => 'sanitize_text_field',
171
  'capability' => 'edit_theme_options',
172
+ 'priority' => 13,
173
  )
174
  );
175
 
191
  'capability' => 'edit_theme_options',
192
  'sanitize_callback' => 'sanitize_text_field',
193
  'transport' => $selective_refresh,
194
+ 'priority' => 14,
195
  )
196
  );
197
 
213
  'capability' => 'edit_theme_options',
214
  'sanitize_callback' => 'sanitize_text_field',
215
  'transport' => $selective_refresh,
216
+ 'priority' => 15,
217
  )
218
  );
219
 
230
  /*=========================================
231
  Info contents Section third
232
  =========================================*/
233
+ // Info Third Content Head
234
+ $wp_customize->add_setting(
235
+ 'info_third_content_head'
236
+ ,array(
237
+ 'capability' => 'edit_theme_options',
238
+ 'sanitize_callback' => 'conceptly_sanitize_text',
239
+ 'priority' => 18,
240
+ )
241
+ );
242
+
243
+ $wp_customize->add_control(
244
+ 'info_third_content_head',
245
+ array(
246
+ 'type' => 'hidden',
247
+ 'label' => __('Info Third','conceptly'),
248
+ 'section' => 'info_setting',
249
+ )
250
+ );
251
+
252
  // info icon //
253
 
254
  $wp_customize->add_setting(
257
  'default' => 'fa-map-marker',
258
  'sanitize_callback' => 'sanitize_text_field',
259
  'capability' => 'edit_theme_options',
260
+ 'priority' => 19,
261
  )
262
  );
263
 
279
  'capability' => 'edit_theme_options',
280
  'sanitize_callback' => 'sanitize_text_field',
281
  'transport' => $selective_refresh,
282
+ 'priority' => 20,
283
  )
284
  );
285
 
301
  'capability' => 'edit_theme_options',
302
  'sanitize_callback' => 'sanitize_text_field',
303
  'transport' => $selective_refresh,
304
+ 'priority' => 21,
305
  )
306
  );
307
 
inc/conceptly/features/conceptly-navigation.php CHANGED
@@ -1,478 +1,143 @@
1
  <?php
2
  // Customizer tabs
3
 
4
- function Cleverfox_conceptly_tabs_customize_register( $wp_customize ) {
5
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
6
-
7
- // feature Tables Tabs
8
- $wp_customize->add_setting(
9
- 'conceptly_feature_tabs', array(
10
- 'sanitize_callback' => 'sanitize_text_field',
11
- )
12
- );
13
-
14
- $wp_customize->add_control(
15
- new Cleverfox_Customize_Control_Tabs(
16
- $wp_customize, 'conceptly_feature_tabs', array(
17
- 'section' => 'features_setting',
18
- 'tabs' => array(
19
- 'general' => array(
20
- 'nicename' => esc_html__( 'Setting', 'conceptly-pro' ),
21
- 'icon' => 'cogs',
22
- 'controls' => array(
23
- 'hide_show_feature'
24
- ),
25
- ),
26
- 'first' => array(
27
- 'nicename' => esc_html__( 'Header', 'conceptly-pro' ),
28
- 'icon' => 'header',
29
- 'controls' => array(
30
- 'features_title',
31
- 'features_description',
32
- ),
33
- ),
34
- 'second' => array(
35
- 'nicename' => esc_html__( 'Content', 'conceptly-pro' ),
36
- 'icon' => 'info',
37
- 'controls' => array(
38
- 'feature_content',
39
- 'conceptly_feature_upgrade_to_pro'
40
- ),
41
- )
42
- ),
43
- )
44
- )
45
- );
46
 
47
- // info section Tabs
48
- $wp_customize->add_setting(
49
- 'conceptly_info_tabs', array(
50
- 'sanitize_callback' => 'sanitize_text_field',
51
- )
52
- );
 
 
53
 
54
- $wp_customize->add_control(
55
- new Cleverfox_Customize_Control_Tabs(
56
- $wp_customize, 'conceptly_info_tabs', array(
57
- 'section' => 'info_setting',
58
- 'tabs' => array(
59
- 'general' => array(
60
- 'nicename' => esc_html__( 'Setting', 'conceptly-pro' ),
61
- 'icon' => 'cogs',
62
- 'controls' => array(
63
- 'hide_show_info',
64
- ),
65
- ),
66
- 'first' => array(
67
- 'nicename' => esc_html__( 'First', 'conceptly-pro' ),
68
- 'icon' => 'info',
69
- 'controls' => array(
70
- 'infos_first_icon_setting',
71
- 'info_title',
72
- 'info_description',
73
- ),
74
- ),
75
- 'second' => array(
76
- 'nicename' => esc_html__( 'Second', 'conceptly-pro' ),
77
- 'icon' => 'info',
78
- 'controls' => array(
79
- 'infos_second_icon_setting',
80
- 'info_title2',
81
- 'info_description2',
82
- ),
83
- ),
84
- 'third' => array(
85
- 'nicename' => esc_html__( 'Third', 'conceptly-pro' ),
86
- 'icon' => 'info',
87
- 'controls' => array(
88
- 'infos_third_icon_setting',
89
- 'info_title3',
90
- 'info_description3',
91
- ),
92
- ),
93
- ),
94
- )
95
- )
96
- );
97
-
98
- // CTA Tables Tabs
99
- $wp_customize->add_setting(
100
- 'conceptly_call_tabs', array(
101
- 'sanitize_callback' => 'sanitize_text_field',
102
- )
103
- );
104
-
105
- $wp_customize->add_control(
106
- new Cleverfox_Customize_Control_Tabs(
107
- $wp_customize, 'conceptly_call_tabs', array(
108
- 'section' => 'call_action_setting',
109
- 'tabs' => array(
110
- 'general' => array(
111
- 'nicename' => esc_html__( 'Setting', 'conceptly-pro' ),
112
- 'icon' => 'cogs',
113
- 'controls' => array(
114
- 'hide_show_cta',
115
- ),
116
- ),
117
- 'first' => array(
118
- 'nicename' => esc_html__( 'Content', 'conceptly-pro' ),
119
- 'icon' => 'header',
120
- 'controls' => array(
121
- 'call_to_action_title',
122
- 'call_to_action_description',
123
- 'cta_icon',
124
- 'call_action_button_label',
125
- 'call_action_button_link',
126
- 'call_action_button_target',
127
- ),
128
- ),
129
- 'third' => array(
130
- 'nicename' => esc_html__( 'Bg', 'conceptly-pro' ),
131
- 'icon' => 'history',
132
- 'controls' => array(
133
- 'call_action_background_setting',
134
- 'cta_background_position'
135
- ),
136
- ),
137
-
138
- ),
139
- )
140
- )
141
- );
142
-
143
- // Service Tabs
144
- $wp_customize->add_setting(
145
- 'conceptly_servicess_tabs', array(
146
- 'sanitize_callback' => 'sanitize_text_field',
147
- )
148
- );
149
-
150
- $wp_customize->add_control(
151
- new Cleverfox_Customize_Control_Tabs(
152
- $wp_customize, 'conceptly_servicess_tabs', array(
153
- 'section' => 'service_setting',
154
- 'tabs' => array(
155
- 'general' => array(
156
- 'nicename' => esc_html__( 'Setting', 'conceptly-pro' ),
157
- 'icon' => 'cogs',
158
- 'controls' => array(
159
- 'hide_show_service',
160
- ),
161
- ),
162
- 'first' => array(
163
- 'nicename' => esc_html__( 'Header', 'conceptly-pro' ),
164
- 'icon' => 'header',
165
- 'controls' => array(
166
- 'service_title',
167
- 'service_description',
168
- ),
169
- ),
170
- 'second' => array(
171
- 'nicename' => esc_html__( 'Content', 'conceptly-pro' ),
172
- 'icon' => 'info',
173
- 'controls' => array(
174
- 'service_contents',
175
- 'conceptly_service_upgrade_to_pro'
176
- ),
177
- ),
178
-
179
- ),
180
- )
181
- )
182
- );
183
-
184
- // Slider Tabs
185
- $wp_customize->add_setting(
186
- 'conceptly_slider_tabs', array(
187
- 'sanitize_callback' => 'sanitize_text_field',
188
- )
189
- );
190
 
191
- $wp_customize->add_control(
192
- new Cleverfox_Customize_Control_Tabs(
193
- $wp_customize, 'conceptly_slider_tabs', array(
194
- 'section' => 'slider_setting',
195
- 'tabs' => array(
196
- 'general' => array(
197
- 'nicename' => esc_html__( 'setting', 'conceptly-pro' ),
198
- 'icon' => 'cogs',
199
- 'controls' => array(
200
- 'hide_show_slider',
201
-
202
- ),
203
- ),
204
- 'Content' => array(
205
- 'nicename' => esc_html__( 'Default', 'conceptly-pro' ),
206
- 'icon' => 'table',
207
- 'controls' => array(
208
- 'slider',
209
- 'conceptly_slider_upgrade_to_pro',
210
- 'slider_opacity'
211
- ),
212
- ),
213
- ),
214
-
215
- )
216
- )
217
- );
218
-
219
- // Sponsers Tabs
220
- $wp_customize->add_setting(
221
- 'conceptly_sponser_tabs', array(
222
- 'sanitize_callback' => 'sanitize_text_field',
223
- )
224
- );
225
 
226
- $wp_customize->add_control(
227
- new Cleverfox_Customize_Control_Tabs(
228
- $wp_customize, 'conceptly_sponser_tabs', array(
229
- 'section' => 'sponsers_setting',
230
- 'tabs' => array(
231
- 'general' => array(
232
- 'nicename' => esc_html__( 'Setting', 'conceptly-pro' ),
233
- 'icon' => 'cogs',
234
- 'controls' => array(
235
- 'hide_show_sponser',
236
- ),
237
- ),
238
- 'first' => array(
239
- 'nicename' => esc_html__( 'Content', 'conceptly-pro' ),
240
- 'icon' => 'info',
241
- 'controls' => array(
242
- 'sponser_contents',
243
- 'conceptly_sponsor_upgrade_to_pro'
244
- ),
245
- ),
246
- 'second' => array(
247
- 'nicename' => esc_html__( 'Background', 'conceptly-pro' ),
248
- 'icon' => 'histry',
249
- 'controls' => array(
250
- 'sponsers_background_setting',
251
- 'sponsers_background_position',
252
- ),
253
- ),
254
- ),
255
- )
256
- )
257
- );
258
 
259
- //Latest News Tabs
260
- $wp_customize->add_setting(
261
- 'conceptly_blog_tabs', array(
262
- 'sanitize_callback' => 'sanitize_text_field',
263
- )
264
- );
 
 
265
 
266
- $wp_customize->add_control(
267
- new Cleverfox_Customize_Control_Tabs(
268
- $wp_customize, 'conceptly_blog_tabs', array(
269
- 'section' => 'blog_setting',
270
- 'tabs' => array(
271
- 'general' => array(
272
- 'nicename' => esc_html__( 'Setting', 'conceptly-pro' ),
273
- 'icon' => 'cogs',
274
- 'controls' => array(
275
- 'hide_show_blog',
276
- ),
277
- ),
278
- 'first' => array(
279
- 'nicename' => esc_html__( 'Header', 'conceptly-pro' ),
280
- 'icon' => 'header',
281
- 'controls' => array(
282
- 'blog_title',
283
- 'blog_description',
284
- ),
285
- ),
286
- 'second' => array(
287
- 'nicename' => esc_html__( 'Content', 'conceptly-pro' ),
288
- 'icon' => 'info',
289
- 'controls' => array(
290
- 'blog_category_id',
291
- 'blog_display_num',
292
- 'blog_display_col'
293
- ),
294
- ),
295
- ),
296
- )
297
- )
298
- );
299
-
300
- // Footer copyright section Tabs
301
- $wp_customize->add_setting(
302
- 'conceptly_copyrights_tabs', array(
303
- 'sanitize_callback' => 'sanitize_text_field',
304
- )
305
- );
306
 
307
- $wp_customize->add_control(
308
- new Cleverfox_Customize_Control_Tabs(
309
- $wp_customize, 'conceptly_copyrights_tabs', array(
310
- 'section' => 'footer_copyright',
311
- 'tabs' => array(
312
- 'general' => array(
313
- 'nicename' => esc_html__( 'Settings', 'conceptly-pro' ),
314
- 'icon' => 'cogs',
315
- 'controls' => array(
316
- 'hide_show_copyright',
317
-
318
- ),
319
- ),
320
- 'first' => array(
321
- 'nicename' => esc_html__( 'Content', 'conceptly-pro' ),
322
- 'icon' => 'table',
323
- 'controls' => array(
324
- 'copyright_content',
325
- ),
326
- ),
327
- ),
328
-
329
- )
330
- )
331
- );
332
-
333
- // footer payment Tabs
334
- $wp_customize->add_setting(
335
- 'conceptly_copyright_tabs', array(
336
- 'sanitize_callback' => 'sanitize_text_field',
337
- )
338
- );
339
 
340
- $wp_customize->add_control(
341
- new Cleverfox_Customize_Control_Tabs(
342
- $wp_customize, 'conceptly_copyright_tabs', array(
343
- 'section' => 'footer_icon',
344
- 'tabs' => array(
345
- 'general' => array(
346
- 'nicename' => esc_html__( 'Settings', 'conceptly-pro' ),
347
- 'icon' => 'cogs',
348
- 'controls' => array(
349
- 'hide_show_payment',
350
- ),
351
- ),
352
- 'first' => array(
353
- 'nicename' => esc_html__( 'Content', 'conceptly-pro' ),
354
- 'icon' => 'table',
355
- 'controls' => array(
356
- 'footer_Payment_icon',
357
- ),
358
- ),
359
-
360
-
361
- ),
362
- )
363
- )
364
- );
365
-
366
- $wp_customize->add_setting(
367
- 'conceptly_contacts_tabs', array(
368
- 'sanitize_callback' => 'sanitize_text_field',
369
- )
370
- );
371
 
372
- $wp_customize->add_control(
373
- new Cleverfox_Customize_Control_Tabs(
374
- $wp_customize, 'conceptly_contacts_tabs', array(
375
- 'section' => 'header_contact',
376
- 'tabs' => array(
377
- 'general' => array(
378
- 'nicename' => esc_html__( 'Phone', 'conceptly-pro' ),
379
- 'icon' => 'table',
380
- 'controls' => array(
381
- 'hide_show_contact_infot',
382
- 'header_phone_icon',
383
- 'header_phone_number',
384
- 'header_phone_sub',
385
- ),
386
- ),
387
-
388
- 'first' => array(
389
- 'nicename' => esc_html__( 'Email', 'conceptly-pro' ),
390
- 'icon' => 'table',
391
- 'controls' => array(
392
- 'hide_show_email_infot',
393
- 'header_email_icon',
394
- 'header_email',
395
- 'header_email_sub'
396
- ),
397
- ),
398
- 'second' => array(
399
- 'nicename' => esc_html__( 'FAQ', 'conceptly-pro' ),
400
- 'icon' => 'table',
401
- 'controls' => array(
402
- 'hide_show_faq',
403
- 'header_faq_icon',
404
- 'header_faq',
405
- 'header_faq_sub'
406
- ),
407
- ),
408
- ),
409
- )
410
- )
411
- );
412
-
413
- $wp_customize->add_setting(
414
- 'conceptly_social_tabs', array(
415
- 'sanitize_callback' => 'sanitize_text_field',
416
- )
417
- );
418
 
419
- $wp_customize->add_control(
420
- new Cleverfox_Customize_Control_Tabs(
421
- $wp_customize, 'conceptly_social_tabs', array(
422
- 'section' => 'header_setting',
423
- 'tabs' => array(
424
- 'general' => array(
425
- 'nicename' => esc_html__( 'Setting', 'conceptly-pro' ),
426
- 'icon' => 'cogs',
427
- 'controls' => array(
428
- 'hide_show_social_icon',
429
- ),
430
- ),
431
- 'first' => array(
432
- 'nicename' => esc_html__( 'Social-Icon', 'conceptly-pro' ),
433
- 'icon' => 'table',
434
- 'controls' => array(
435
- 'social_icons',
436
- ),
437
- ),
438
-
439
- ),
440
- )
441
- )
442
- );
443
 
444
- $wp_customize->add_setting(
445
- 'conceptly_get_btn_tabs', array(
446
- 'sanitize_callback' => 'sanitize_text_field',
447
- )
448
- );
 
 
 
449
 
450
- $wp_customize->add_control(
451
- new Cleverfox_Customize_Control_Tabs(
452
- $wp_customize, 'conceptly_get_btn_tabs', array(
453
- 'section' => 'header_get_button',
454
- 'tabs' => array(
455
- 'general' => array(
456
- 'nicename' => esc_html__( 'Setting', 'conceptly-pro' ),
457
- 'icon' => 'table',
458
- 'controls' => array(
459
- 'hide_show_get_button',
460
- ),
461
- ),
462
- 'first' => array(
463
- 'nicename' => esc_html__( 'Button', 'conceptly-pro' ),
464
- 'icon' => 'table',
465
- 'controls' => array(
466
- 'header_get',
467
- 'header_btn_link'
468
- ),
469
- ),
470
-
471
- ),
472
- )
473
- )
474
- );
475
- }
476
  }
477
 
478
  add_action( 'customize_register', 'Cleverfox_conceptly_tabs_customize_register' );
1
  <?php
2
  // Customizer tabs
3
 
4
+ function Cleverfox_conceptly_tabs_customize_register( $wp_customize ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
 
6
+ // Blog Setting Head
7
+ $wp_customize->add_setting(
8
+ 'blog_setting_head'
9
+ ,array(
10
+ 'capability' => 'edit_theme_options',
11
+ 'sanitize_callback' => 'conceptly_sanitize_text',
12
+ )
13
+ );
14
 
15
+ $wp_customize->add_control(
16
+ 'blog_setting_head',
17
+ array(
18
+ 'type' => 'hidden',
19
+ 'label' => __('Setting','conceptly'),
20
+ 'section' => 'blog_setting',
21
+ 'priority' => 1,
22
+ )
23
+ );
24
+
25
+ // Blog Head
26
+ $wp_customize->add_setting(
27
+ 'blog_head'
28
+ ,array(
29
+ 'capability' => 'edit_theme_options',
30
+ 'sanitize_callback' => 'conceptly_sanitize_text',
31
+ )
32
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
+ $wp_customize->add_control(
35
+ 'blog_head',
36
+ array(
37
+ 'type' => 'hidden',
38
+ 'label' => __('Header','conceptly'),
39
+ 'section' => 'blog_setting',
40
+ 'priority' => 4,
41
+ )
42
+ );
43
+
44
+ // Blog Content Head
45
+ $wp_customize->add_setting(
46
+ 'blog_content_head'
47
+ ,array(
48
+ 'capability' => 'edit_theme_options',
49
+ 'sanitize_callback' => 'conceptly_sanitize_text',
50
+ )
51
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
 
53
+ $wp_customize->add_control(
54
+ 'blog_content_head',
55
+ array(
56
+ 'type' => 'hidden',
57
+ 'label' => __('Content','conceptly'),
58
+ 'section' => 'blog_setting',
59
+ 'priority' => 9,
60
+ )
61
+ );
62
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
 
64
+ // Copyright Setting Head
65
+ $wp_customize->add_setting(
66
+ 'copyright_setting_head'
67
+ ,array(
68
+ 'capability' => 'edit_theme_options',
69
+ 'sanitize_callback' => 'conceptly_sanitize_text',
70
+ )
71
+ );
72
 
73
+ $wp_customize->add_control(
74
+ 'copyright_setting_head',
75
+ array(
76
+ 'type' => 'hidden',
77
+ 'label' => __('Setting','conceptly'),
78
+ 'section' => 'footer_copyright',
79
+ 'priority' => 1,
80
+ )
81
+ );
82
+
83
+ // Copyright Content Head
84
+ $wp_customize->add_setting(
85
+ 'copyright_content_head'
86
+ ,array(
87
+ 'capability' => 'edit_theme_options',
88
+ 'sanitize_callback' => 'conceptly_sanitize_text',
89
+ )
90
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
 
92
+ $wp_customize->add_control(
93
+ 'copyright_content_head',
94
+ array(
95
+ 'type' => 'hidden',
96
+ 'label' => __('Content','conceptly'),
97
+ 'section' => 'footer_copyright',
98
+ 'priority' => 4,
99
+ )
100
+ );
101
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
 
104
+ // Payment Setting Head
105
+ $wp_customize->add_setting(
106
+ 'payment_setting_head'
107
+ ,array(
108
+ 'capability' => 'edit_theme_options',
109
+ 'sanitize_callback' => 'conceptly_sanitize_text',
110
+ )
111
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
 
113
+ $wp_customize->add_control(
114
+ 'payment_setting_head',
115
+ array(
116
+ 'type' => 'hidden',
117
+ 'label' => __('Setting','conceptly'),
118
+ 'section' => 'footer_icon',
119
+ 'priority' => 1,
120
+ )
121
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
 
123
+ // Payment Content Head
124
+ $wp_customize->add_setting(
125
+ 'payment_content_head'
126
+ ,array(
127
+ 'capability' => 'edit_theme_options',
128
+ 'sanitize_callback' => 'conceptly_sanitize_text',
129
+ )
130
+ );
131
 
132
+ $wp_customize->add_control(
133
+ 'payment_content_head',
134
+ array(
135
+ 'type' => 'hidden',
136
+ 'label' => __('Content','conceptly'),
137
+ 'section' => 'footer_icon',
138
+ 'priority' => 4,
139
+ )
140
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  }
142
 
143
  add_action( 'customize_register', 'Cleverfox_conceptly_tabs_customize_register' );
inc/conceptly/features/conceptly-service.php CHANGED
@@ -11,6 +11,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
11
  'panel' => 'conceptly_frontpage_sections',
12
  )
13
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  // service Hide/ Show Setting //
15
  $wp_customize->add_setting(
16
  'hide_show_service' ,
@@ -19,6 +39,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
19
  'sanitize_callback' => 'sanitize_text_field',
20
  'capability' => 'edit_theme_options',
21
  'transport' => $selective_refresh,
 
22
  )
23
  );
24
 
@@ -34,6 +55,24 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
34
 
35
  // Service Header Section //
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
  // Service Title //
39
  $wp_customize->add_setting(
@@ -43,6 +82,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
43
  'capability' => 'edit_theme_options',
44
  'sanitize_callback' => 'conceptly_sanitize_html',
45
  'transport' => $selective_refresh,
 
46
  )
47
  );
48
 
@@ -65,6 +105,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
65
  'capability' => 'edit_theme_options',
66
  'sanitize_callback' => 'conceptly_sanitize_text',
67
  'transport' => $selective_refresh,
 
68
  )
69
  );
70
 
@@ -80,6 +121,24 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
80
 
81
  // Service content Section //
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
 
84
  /**
85
  * Customizer Repeater for add service
@@ -89,7 +148,8 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
89
  array(
90
  'sanitize_callback' => 'conceptly_repeater_sanitize',
91
  'transport' => $selective_refresh,
92
- 'default' => conceptly_get_service_default()
 
93
  )
94
  );
95
 
@@ -101,7 +161,6 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
101
  'section' => 'service_setting',
102
  'add_field_label' => esc_html__( 'Add New Service', 'conceptly-pro' ),
103
  'item_name' => esc_html__( 'Service', 'conceptly-pro' ),
104
- 'priority' => 1,
105
  'customizer_repeater_icon_control' => true,
106
  'customizer_repeater_title_control' => true,
107
  'customizer_repeater_subtitle_control' => true,
@@ -136,6 +195,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
136
  $wp_customize->add_setting( 'conceptly_service_upgrade_to_pro', array(
137
  'capability' => 'edit_theme_options',
138
  'sanitize_callback' => 'wp_filter_nohtml_kses',
 
139
  ));
140
  $wp_customize->add_control(
141
  new Conceptly_service__section_upgrade(
11
  'panel' => 'conceptly_frontpage_sections',
12
  )
13
  );
14
+
15
+ // Service Settings Head
16
+ $wp_customize->add_setting(
17
+ 'service_setting_head'
18
+ ,array(
19
+ 'capability' => 'edit_theme_options',
20
+ 'sanitize_callback' => 'conceptly_sanitize_text',
21
+ 'priority' => 1,
22
+ )
23
+ );
24
+
25
+ $wp_customize->add_control(
26
+ 'service_setting_head',
27
+ array(
28
+ 'type' => 'hidden',
29
+ 'label' => __('Setting','conceptly'),
30
+ 'section' => 'service_setting',
31
+ )
32
+ );
33
+
34
  // service Hide/ Show Setting //
35
  $wp_customize->add_setting(
36
  'hide_show_service' ,
39
  'sanitize_callback' => 'sanitize_text_field',
40
  'capability' => 'edit_theme_options',
41
  'transport' => $selective_refresh,
42
+ 'priority' => 2,
43
  )
44
  );
45
 
55
 
56
  // Service Header Section //
57
 
58
+ // Service Head
59
+ $wp_customize->add_setting(
60
+ 'service_head'
61
+ ,array(
62
+ 'capability' => 'edit_theme_options',
63
+ 'sanitize_callback' => 'conceptly_sanitize_text',
64
+ 'priority' => 3,
65
+ )
66
+ );
67
+
68
+ $wp_customize->add_control(
69
+ 'service_head',
70
+ array(
71
+ 'type' => 'hidden',
72
+ 'label' => __('Header','conceptly'),
73
+ 'section' => 'service_setting',
74
+ )
75
+ );
76
 
77
  // Service Title //
78
  $wp_customize->add_setting(
82
  'capability' => 'edit_theme_options',
83
  'sanitize_callback' => 'conceptly_sanitize_html',
84
  'transport' => $selective_refresh,
85
+ 'priority' => 4,
86
  )
87
  );
88
 
105
  'capability' => 'edit_theme_options',
106
  'sanitize_callback' => 'conceptly_sanitize_text',
107
  'transport' => $selective_refresh,
108
+ 'priority' => 5,
109
  )
110
  );
111
 
121
 
122
  // Service content Section //
123
 
124
+ // Service Content Head
125
+ $wp_customize->add_setting(
126
+ 'service_content_head'
127
+ ,array(
128
+ 'capability' => 'edit_theme_options',
129
+ 'sanitize_callback' => 'conceptly_sanitize_text',
130
+ 'priority' => 8,
131
+ )
132
+ );
133
+
134
+ $wp_customize->add_control(
135
+ 'service_content_head',
136
+ array(
137
+ 'type' => 'hidden',
138
+ 'label' => __('Content','conceptly'),
139
+ 'section' => 'service_setting',
140
+ )
141
+ );
142
 
143
  /**
144
  * Customizer Repeater for add service
148
  array(
149
  'sanitize_callback' => 'conceptly_repeater_sanitize',
150
  'transport' => $selective_refresh,
151
+ 'default' => conceptly_get_service_default(),
152
+ 'priority' => 9,
153
  )
154
  );
155
 
161
  'section' => 'service_setting',
162
  'add_field_label' => esc_html__( 'Add New Service', 'conceptly-pro' ),
163
  'item_name' => esc_html__( 'Service', 'conceptly-pro' ),
 
164
  'customizer_repeater_icon_control' => true,
165
  'customizer_repeater_title_control' => true,
166
  'customizer_repeater_subtitle_control' => true,
195
  $wp_customize->add_setting( 'conceptly_service_upgrade_to_pro', array(
196
  'capability' => 'edit_theme_options',
197
  'sanitize_callback' => 'wp_filter_nohtml_kses',
198
+ 'priority' => 10,
199
  ));
200
  $wp_customize->add_control(
201
  new Conceptly_service__section_upgrade(
inc/conceptly/features/conceptly-slider.php CHANGED
@@ -11,6 +11,67 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
11
  'priority' => apply_filters( 'conceptly_section_priority', 1, 'slider_setting' ),
12
  )
13
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
  /**
16
  * Customizer Repeater for add slides
@@ -19,8 +80,8 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
19
  $wp_customize->add_setting( 'slider',
20
  array(
21
  'sanitize_callback' => 'conceptly_repeater_sanitize',
22
- //'transport' => $selective_refresh,
23
- 'default' => conceptly_get_slides_default()
24
  )
25
  );
26
 
@@ -32,7 +93,6 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
32
  'section' => 'slider_setting',
33
  'add_field_label' => esc_html__( 'Add New Slider', 'conceptly-pro' ),
34
  'item_name' => esc_html__( 'Slider', 'conceptly-pro' ),
35
- 'priority' => 2,
36
 
37
  'customizer_repeater_icon_control' => false,
38
  'customizer_repeater_title_control' => true,
@@ -70,6 +130,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
70
  $wp_customize->add_setting( 'conceptly_slider_upgrade_to_pro', array(
71
  'capability' => 'edit_theme_options',
72
  'sanitize_callback' => 'wp_filter_nohtml_kses',
 
73
  ));
74
  $wp_customize->add_control(
75
  new Conceptly_slider__section_upgrade(
@@ -82,29 +143,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
82
  )
83
  );
84
 
85
- // Slider Hide/ Show Setting //
86
- $wp_customize->add_setting(
87
- 'hide_show_slider' ,
88
- array(
89
- 'default' => esc_html__( '1', 'conceptly-pro' ),
90
- 'capability' => 'edit_theme_options',
91
- 'sanitize_callback' => 'sanitize_text_field',
92
- 'transport' => $selective_refresh,
93
- )
94
- );
95
-
96
- $wp_customize->add_control( new Conceptly_Customizer_Toggle_Control( $wp_customize,
97
- 'hide_show_slider',
98
- array(
99
- 'label' => esc_html__( 'Hide / Show Section', 'conceptly-pro' ),
100
- 'section' => 'slider_setting',
101
- 'settings' => 'hide_show_slider',
102
- 'type' => 'ios', // light, ios, flat
103
- )
104
- ));
105
-
106
-
107
-
108
  //slider opacity
109
 
110
  // Slider Text Caption //
@@ -113,7 +152,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
113
  array(
114
  'default' => '0.5',
115
  'capability' => 'edit_theme_options',
116
- //'sanitize_callback' => 'sanitize_text_field',
117
  )
118
  );
119
 
11
  'priority' => apply_filters( 'conceptly_section_priority', 1, 'slider_setting' ),
12
  )
13
  );
14
+
15
+ // Slider Setting Head
16
+ $wp_customize->add_setting(
17
+ 'slider_setting_head'
18
+ ,array(
19
+ 'capability' => 'edit_theme_options',
20
+ 'sanitize_callback' => 'conceptly_sanitize_text',
21
+ 'priority' => 1,
22
+ )
23
+ );
24
+
25
+ $wp_customize->add_control(
26
+ 'slider_setting_head',
27
+ array(
28
+ 'type' => 'hidden',
29
+ 'label' => __('setting','conceptly'),
30
+ 'section' => 'slider_setting',
31
+ )
32
+ );
33
+
34
+ // Slider Hide/ Show Setting //
35
+ $wp_customize->add_setting(
36
+ 'hide_show_slider' ,
37
+ array(
38
+ 'default' => esc_html__( '1', 'conceptly-pro' ),
39
+ 'capability' => 'edit_theme_options',
40
+ 'sanitize_callback' => 'sanitize_text_field',
41
+ 'transport' => $selective_refresh,
42
+ 'priority' => 2,
43
+ )
44
+ );
45
+
46
+ $wp_customize->add_control( new Conceptly_Customizer_Toggle_Control( $wp_customize,
47
+ 'hide_show_slider',
48
+ array(
49
+ 'label' => esc_html__( 'Hide / Show Section', 'conceptly-pro' ),
50
+ 'section' => 'slider_setting',
51
+ 'settings' => 'hide_show_slider',
52
+ 'type' => 'ios', // light, ios, flat
53
+ )
54
+ ));
55
+
56
+
57
+ // Slider Content Head
58
+ $wp_customize->add_setting(
59
+ 'slider_content_head'
60
+ ,array(
61
+ 'capability' => 'edit_theme_options',
62
+ 'sanitize_callback' => 'conceptly_sanitize_text',
63
+ 'priority' => 5,
64
+ )
65
+ );
66
+
67
+ $wp_customize->add_control(
68
+ 'slider_content_head',
69
+ array(
70
+ 'type' => 'hidden',
71
+ 'label' => __('Content','conceptly'),
72
+ 'section' => 'slider_setting',
73
+ )
74
+ );
75
 
76
  /**
77
  * Customizer Repeater for add slides
80
  $wp_customize->add_setting( 'slider',
81
  array(
82
  'sanitize_callback' => 'conceptly_repeater_sanitize',
83
+ 'default' => conceptly_get_slides_default(),
84
+ 'priority' => 6,
85
  )
86
  );
87
 
93
  'section' => 'slider_setting',
94
  'add_field_label' => esc_html__( 'Add New Slider', 'conceptly-pro' ),
95
  'item_name' => esc_html__( 'Slider', 'conceptly-pro' ),
 
96
 
97
  'customizer_repeater_icon_control' => false,
98
  'customizer_repeater_title_control' => true,
130
  $wp_customize->add_setting( 'conceptly_slider_upgrade_to_pro', array(
131
  'capability' => 'edit_theme_options',
132
  'sanitize_callback' => 'wp_filter_nohtml_kses',
133
+ 'priority' => 7,
134
  ));
135
  $wp_customize->add_control(
136
  new Conceptly_slider__section_upgrade(
143
  )
144
  );
145
 
146
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  //slider opacity
148
 
149
  // Slider Text Caption //
152
  array(
153
  'default' => '0.5',
154
  'capability' => 'edit_theme_options',
155
+ 'priority' => 8,
156
  )
157
  );
158
 
inc/conceptly/features/conceptly-sponsers.php CHANGED
@@ -15,6 +15,25 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
15
  /*=========================================
16
  Sponsers Settings Section
17
  =========================================*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  // Slider Hide/ Show Setting //
19
  $wp_customize->add_setting(
20
  'hide_show_sponser' ,
@@ -23,6 +42,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
23
  'capability' => 'edit_theme_options',
24
  'sanitize_callback' => 'sanitize_text_field',
25
  'transport' => $selective_refresh,
 
26
  )
27
  );
28
 
@@ -38,6 +58,24 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
38
 
39
  // Sponsers content Section //
40
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
 
42
  /**
43
  * Customizer Repeater for add Sponsers
@@ -46,7 +84,8 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
46
  array(
47
  'sanitize_callback' => 'conceptly_repeater_sanitize',
48
  'transport' => $selective_refresh,
49
- 'default' => conceptly_get_sponsers_default()
 
50
  )
51
  );
52
 
@@ -58,7 +97,6 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
58
  'section' => 'sponsers_setting',
59
  'add_field_label' => esc_html__( 'Add New Sponsor', 'conceptly-pro' ),
60
  'item_name' => esc_html__( 'Sponsor', 'conceptly-pro' ),
61
- 'priority' => 1,
62
  'customizer_repeater_image_control' => true,
63
  'customizer_repeater_link_control' => true,
64
  )
@@ -87,6 +125,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
87
  $wp_customize->add_setting( 'conceptly_sponsor_upgrade_to_pro', array(
88
  'capability' => 'edit_theme_options',
89
  'sanitize_callback' => 'wp_filter_nohtml_kses',
 
90
  ));
91
  $wp_customize->add_control(
92
  new Conceptly_sponsors__section_upgrade(
@@ -100,13 +139,33 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
100
  );
101
 
102
  // Sponsers Background Section //
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  // Background Image //
104
  $wp_customize->add_setting(
105
  'sponsers_background_setting' ,
106
  array(
107
  'default' => CLEVERFOX_PLUGIN_URL .'inc/conceptly/images/bg/partner-bg.jpg',
108
  'capability' => 'edit_theme_options',
109
- 'sanitize_callback' => 'conceptly_sanitize_url',
 
110
  )
111
  );
112
 
@@ -126,6 +185,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
126
  'default' => __( 'scroll', 'conceptly-pro' ),
127
  'capability' => 'edit_theme_options',
128
  'sanitize_callback' => 'conceptly_sanitize_select',
 
129
  )
130
  );
131
 
15
  /*=========================================
16
  Sponsers Settings Section
17
  =========================================*/
18
+ // Sponsor Setting Head
19
+ $wp_customize->add_setting(
20
+ 'sponsor_setting_head'
21
+ ,array(
22
+ 'capability' => 'edit_theme_options',
23
+ 'sanitize_callback' => 'conceptly_sanitize_text',
24
+ 'priority' => 1,
25
+ )
26
+ );
27
+
28
+ $wp_customize->add_control(
29
+ 'sponsor_setting_head',
30
+ array(
31
+ 'type' => 'hidden',
32
+ 'label' => __('Setting','conceptly'),
33
+ 'section' => 'sponsers_setting',
34
+ )
35
+ );
36
+
37
  // Slider Hide/ Show Setting //
38
  $wp_customize->add_setting(
39
  'hide_show_sponser' ,
42
  'capability' => 'edit_theme_options',
43
  'sanitize_callback' => 'sanitize_text_field',
44
  'transport' => $selective_refresh,
45
+ 'priority' => 2,
46
  )
47
  );
48
 
58
 
59
  // Sponsers content Section //
60
 
61
+ // Sponsor Content Head
62
+ $wp_customize->add_setting(
63
+ 'sponsor_content_head'
64
+ ,array(
65
+ 'capability' => 'edit_theme_options',
66
+ 'sanitize_callback' => 'conceptly_sanitize_text',
67
+ 'priority' => 4,
68
+ )
69
+ );
70
+
71
+ $wp_customize->add_control(
72
+ 'sponsor_content_head',
73
+ array(
74
+ 'type' => 'hidden',
75
+ 'label' => __('Content','conceptly'),
76
+ 'section' => 'sponsers_setting',
77
+ )
78
+ );
79
 
80
  /**
81
  * Customizer Repeater for add Sponsers
84
  array(
85
  'sanitize_callback' => 'conceptly_repeater_sanitize',
86
  'transport' => $selective_refresh,
87
+ 'default' => conceptly_get_sponsers_default(),
88
+ 'priority' => 5,
89
  )
90
  );
91
 
97
  'section' => 'sponsers_setting',
98
  'add_field_label' => esc_html__( 'Add New Sponsor', 'conceptly-pro' ),
99
  'item_name' => esc_html__( 'Sponsor', 'conceptly-pro' ),
 
100
  'customizer_repeater_image_control' => true,
101
  'customizer_repeater_link_control' => true,
102
  )
125
  $wp_customize->add_setting( 'conceptly_sponsor_upgrade_to_pro', array(
126
  'capability' => 'edit_theme_options',
127
  'sanitize_callback' => 'wp_filter_nohtml_kses',
128
+ 'priority' => 6,
129
  ));
130
  $wp_customize->add_control(
131
  new Conceptly_sponsors__section_upgrade(
139
  );
140
 
141
  // Sponsers Background Section //
142
+ // Sponsor Background Head
143
+ $wp_customize->add_setting(
144
+ 'sponsor_bg_head'
145
+ ,array(
146
+ 'capability' => 'edit_theme_options',
147
+ 'sanitize_callback' => 'conceptly_sanitize_text',
148
+ 'priority' => 7,
149
+ )
150
+ );
151
+
152
+ $wp_customize->add_control(
153
+ 'sponsor_bg_head',
154
+ array(
155
+ 'type' => 'hidden',
156
+ 'label' => __('Background','conceptly'),
157
+ 'section' => 'sponsers_setting',
158
+ )
159
+ );
160
+
161
  // Background Image //
162
  $wp_customize->add_setting(
163
  'sponsers_background_setting' ,
164
  array(
165
  'default' => CLEVERFOX_PLUGIN_URL .'inc/conceptly/images/bg/partner-bg.jpg',
166
  'capability' => 'edit_theme_options',
167
+ 'sanitize_callback' => 'conceptly_sanitize_url',
168
+ 'priority' => 8,
169
  )
170
  );
171
 
185
  'default' => __( 'scroll', 'conceptly-pro' ),
186
  'capability' => 'edit_theme_options',
187
  'sanitize_callback' => 'conceptly_sanitize_select',
188
+ 'priority' => 9,
189
  )
190
  );
191
 
inc/custom-controls/Tabs/class/cleverfox-customize-control-tabs.php DELETED
@@ -1,198 +0,0 @@
1
- <?php
2
- /**
3
- * The tabs customize control extends the WP_Customize_Control class. This class allows
4
- * developers to create tabs and hide the sections' settings easily.
5
- *
6
- * @package Cleverfox
7
- */
8
-
9
- if ( ! class_exists( 'WP_Customize_Control' ) ) {
10
- return;
11
- }
12
-
13
- class Cleverfox_Customize_Control_Tabs extends WP_Customize_Control {
14
-
15
- /**
16
- * cleverfox_Customize_Control_Tabs constructor.
17
- *
18
- * @param WP_Customize_Manager $manager wp_customize manager.
19
- * @param string $id control id.
20
- * @param array $args public parameters for control.
21
- */
22
- public function __construct( WP_Customize_Manager $manager, $id, array $args = array() ) {
23
- parent::__construct( $manager, $id, $args );
24
-
25
- add_action( 'customize_preview_init', array( $this, 'partials_helper_script_enqueue' ) );
26
-
27
- if ( ! empty( $this->tabs ) ) {
28
- foreach ( $this->tabs as $value => $args ) {
29
- $this->controls[ $value ] = $args['controls'];
30
- }
31
- }
32
- }
33
-
34
- /**
35
- * Controls array from tabs.
36
- *
37
- * @var array
38
- */
39
- public $controls = array();
40
-
41
- /**
42
- * The type of customize control being rendered.
43
- *
44
- * @since 1.1.45
45
- * @var string
46
- */
47
- public $type = 'interface-tabs';
48
-
49
- /**
50
- * The type refresh being used.
51
- *
52
- * @since 1.1.45
53
- * @var string
54
- */
55
- public $transport = 'postMessage';
56
-
57
- /**
58
- * The priority of the control.
59
- *
60
- * @since 1.1.45
61
- * @var string
62
- */
63
- public $priority = -10;
64
-
65
- /**
66
- * The tabs with keys of the controls that are under each tab.
67
- *
68
- * @since 1.1.45
69
- * @var array
70
- */
71
- public $tabs;
72
-
73
- /**
74
- * Displays the control content.
75
- *
76
- * @since 1.1.45
77
- * @access public
78
- * @return void
79
- */
80
- public function render_content() {
81
- /* If no tabs are provided, bail. */
82
- if ( empty( $this->tabs ) || ! $this->more_than_one_valid_tab() ) {
83
- return;
84
- }
85
-
86
- $output = '';
87
- $i = 0;
88
-
89
- $output .= '<div class="cleverfox-tabs-control" id="input_' . esc_attr( $this->id ) . '">';
90
- foreach ( $this->tabs as $value => $args ) {
91
- if ( ! empty( $args['controls'] ) && ( $this->tab_has_controls( $args['controls'] ) ) ) {
92
- $controls_attribute = json_encode( $args['controls'] );
93
-
94
- $output .= '<div class="cleverfox-customizer-tab">';
95
-
96
- $output .= '<input type="radio"';
97
- $output .= 'value="' . esc_attr( $value ) . '" ';
98
- $output .= 'name="' . esc_attr( "_customize-radio-{$this->id}" ) . '" ';
99
- $output .= 'id="' . esc_attr( "{$this->id}-{$value}" ) . '" ';
100
- $output .= 'data-controls="' . esc_attr( $controls_attribute ) . '" ';
101
- if ( $i === 0 ) {
102
- $output .= 'checked="true" ';
103
- }
104
- $i ++;
105
- $output .= '/><!-- /input -->';
106
-
107
- $label_classes = '';
108
- foreach ( $args['controls'] as $control_id ) {
109
- $label_classes .= esc_attr( $control_id . ' ' );
110
- }
111
-
112
- $output .= '<label class = "' . $label_classes . '" ';
113
- $output .= 'for="' . esc_attr( "{$this->id}-{$value}" ) . '">';
114
- if ( ! empty( $args['nicename'] ) ) {
115
- $output .= '<span class="screen-reader-text">' . esc_html( $args['nicename'] ) . '</span>';
116
- }
117
- if ( ! empty( $args['icon'] ) ) {
118
- $output .= '<i class="fa fa-' . esc_attr( $args['icon'] ) . '"></i>';
119
- }
120
- if ( ! empty( $args['nicename'] ) ) {
121
- $output .= $args['nicename'];
122
- }
123
- $output .= '</label>';
124
- $output .= '</div><!-- /.cleverfox-customizer-tab -->';
125
- }
126
- }
127
- $output .= '</div><!-- /.cleverfox-tabs-control -->';
128
-
129
- echo $output;
130
- }
131
- /**
132
- * Loads the scripts and hooks our custom styles in.
133
- *
134
- * @since 1.1.45
135
- * @access public
136
- * @return void
137
- */
138
- public function enqueue() {
139
-
140
- if ( empty( $this->tabs ) || ! $this->more_than_one_valid_tab() ) {
141
- return;
142
- }
143
-
144
- wp_enqueue_script( 'cleverfox-tabs-control-script', CLEVERFOX_PLUGIN_URL . '/inc/custom-controls/Tabs/js/script.js', array( 'jquery' ), 'cleverfox', true );
145
- wp_enqueue_style( 'cleverfox-tabs-control-style', CLEVERFOX_PLUGIN_URL . '/inc/custom-controls/Tabs/css/style.css', null,'cleverfox');
146
-
147
- }
148
-
149
- /**
150
- * Enqueue the partials handler script that works synchronously with the cleverfox-tabs-control-script
151
- */
152
- public function partials_helper_script_enqueue() {
153
- wp_enqueue_script( 'cleverfox-tabs-addon-script', CLEVERFOX_PLUGIN_URL . '/inc/custom-controls/Tabs/js/customizer-addon-script.js', array( 'jquery' ),true );
154
- }
155
-
156
- /**
157
- * Verify if the tab has valid controls.
158
- *
159
- * Meant to foolproof the control if a tab has no valid controls.
160
- * Returns false if there are no valid controls inside the tab.
161
- *
162
- * @param controls array $controls_array the array of controls.
163
- *
164
- * @return bool
165
- */
166
- protected final function tab_has_controls( $controls_array ) {
167
- $i = 0;
168
- foreach ( $controls_array as $control ) {
169
- $setting = $this->manager->get_setting( $control );
170
- if ( ! empty( $setting ) ) {
171
- $i++;
172
- }
173
- }
174
- if ( $i === 0 ) {
175
- return false;
176
- }
177
- return true;
178
- }
179
-
180
- /**
181
- * Verify if there's more than one valid tab.
182
- *
183
- * @return bool
184
- */
185
- protected final function more_than_one_valid_tab() {
186
- $i = 0;
187
- foreach ( $this->tabs as $tab ) {
188
- if ( $this->tab_has_controls( $tab['controls'] ) ) {
189
- $i++;
190
- }
191
- }
192
- if ( $i > 1 ) {
193
- return true;
194
- }
195
- return false;
196
- }
197
- }
198
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/Tabs/css/style.css DELETED
@@ -1,60 +0,0 @@
1
-
2
- .customize-control-interface-tabs {
3
- display: list-item !important;
4
- }
5
-
6
- .cleverfox-tabs-control {
7
- border-bottom: 1px solid #ddd;
8
- width: calc(100% + 28px);
9
- margin: -15px 0 0 -12px;
10
- table-layout: fixed;
11
- display: table;
12
- }
13
-
14
- .cleverfox-tabs-control .cleverfox-customizer-tab {
15
- border-right: 1px solid #ddd;
16
- display: table-cell;
17
- text-align: center;
18
- width: 100%;
19
- }
20
-
21
- .cleverfox-tabs-control .cleverfox-customizer-tab:last-child {
22
- border-right: none;
23
- }
24
-
25
- .cleverfox-tabs-control .cleverfox-customizer-tab label{
26
- text-transform: capitalize;
27
- background: #fff;
28
- box-shadow: inset 0 0 0 0 #0085ba;
29
- transition: all .3s ease;
30
- display: block;
31
- width: 100%;
32
- padding: 10px 0;
33
- text-decoration: none;
34
- font-weight: 600;
35
- color: #333;
36
- }
37
-
38
- .cleverfox-tabs-control .cleverfox-customizer-tab label i {
39
- color: #333;
40
- margin-right: 4px;
41
- }
42
-
43
- .cleverfox-tabs-control .cleverfox-customizer-tab label:hover {
44
- color: #0085ba;
45
- background: #f3f3f5;
46
- }
47
-
48
- .cleverfox-tabs-control .cleverfox-customizer-tab label:hover i {
49
- color: #333;
50
- }
51
-
52
- .cleverfox-tabs-control .cleverfox-customizer-tab input[type="radio"]:checked ~ label {
53
- box-shadow: inset 0 -3px 0 0 #0085ba;
54
- color: #0085ba;
55
- background-color: #fff;
56
- }
57
-
58
- .cleverfox-tabs-control input[type="radio"] {
59
- display: none !important;
60
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/Tabs/js/customizer-addon-script.js DELETED
@@ -1,30 +0,0 @@
1
- /**
2
- *
3
- *
4
- * @package hantus
5
- *
6
- * @author Nayra Theme
7
- */
8
- var hantus_customize_tabs_focus = function ($) {
9
- 'use strict';
10
- $( function () {
11
- var customize = wp.customize;
12
- $( document ).on( 'DOMNodeInserted', '.customize-partial-edit-shortcut', function () {
13
- $( this ).one( 'click', function() {
14
- var controlId = $( this ).attr( 'class' );
15
- var tabToActivate = '';
16
-
17
- if ( controlId.indexOf( 'widget' ) !== -1 ) {
18
- tabToActivate = $( '.cleverfox-customizer-tab>.widgets' );
19
- } else {
20
- var controlFinalId = controlId.split( ' ' ).pop().split( '-' ).pop();
21
- tabToActivate = $( '.cleverfox-customizer-tab>.' + controlFinalId );
22
- }
23
-
24
- customize.preview.send( 'tab-previewer-edit', tabToActivate );
25
- } );
26
- } );
27
- } );
28
- };
29
-
30
- hantus_customize_tabs_focus( jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/Tabs/js/script.js DELETED
@@ -1,72 +0,0 @@
1
-
2
-
3
- /**
4
- *
5
- *
6
- * @package Cleverfox
7
- *
8
- * @author Nayra Theme
9
- */
10
- var cleverfox_customize_control_tabs = function ( $ ) {
11
- 'use strict';
12
-
13
- $( function () {
14
- var customize = wp.customize;
15
-
16
- // Switch tab based on customizer partial edit links.
17
- customize.previewer.bind( 'tab-previewer-edit', function( data ) {
18
- $( data.selector ).trigger( 'click' );
19
- } );
20
-
21
- // Hide all controls
22
- $( '.cleverfox-tabs-control' ).each( function () {
23
- var customizerSection = $( this ).closest( '.accordion-section' );
24
- //Hide all controls in section.
25
- hideAllExceptCurrent( customizerSection );
26
-
27
- //Show controls under first radio button.
28
- var shownCtrls = $( this ).find( '.cleverfox-customizer-tab > input:checked' ).data( 'controls' );
29
- showControls( customizerSection, shownCtrls );
30
- } );
31
-
32
- $( '.cleverfox-customizer-tab > label' ).on( 'click', function () {
33
- var customizerSection = $( this ).closest( '.accordion-section' );
34
- var controls = $( this ).prev().data( 'controls' );
35
-
36
- //Hide all controls in section
37
- hideAllExceptCurrent( customizerSection );
38
- showControls( customizerSection, controls );
39
- } );
40
- } );
41
- };
42
-
43
- cleverfox_customize_control_tabs( jQuery );
44
-
45
- /**
46
- * Handles showing the controls when the tab is clicked.
47
- *
48
- * @param customizerSection
49
- * @param controlsToShowArray
50
- */
51
- function showControls( customizerSection, controlsToShowArray ) {
52
- 'use strict';
53
- jQuery.each( controlsToShowArray, function ( index, controlId ) {
54
- var parentSection = customizerSection[ 0 ];
55
- if ( controlId === 'widgets' ) {
56
- jQuery( parentSection ).children( 'li[class*="widget"]' ).css( 'display', 'list-item' );
57
- return true;
58
- }
59
- jQuery( '#customize-control-' + controlId ).css( 'display', 'list-item' );
60
- } );
61
- }
62
-
63
- /**
64
- * Utility function that hides all the controls in the panel except the tabs control.
65
- *
66
- * @param customizerSection
67
- * @param controlId
68
- */
69
- function hideAllExceptCurrent( customizerSection ) {
70
- 'use strict';
71
- jQuery( customizerSection ).children( 'li.customize-control' ).css( 'display', 'none' );
72
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/controls/icon-picker/README.md DELETED
@@ -1,48 +0,0 @@
1
- # Icon Picker control for WordPress
2
-
3
- ## Installing and Setting up
4
-
5
- - [Download and Install O2 on your theme](../../README.md). If you have installed that, then you may proceed for further steps.
6
-
7
- ## Icon Picker For WordPress Customizer
8
-
9
- Install the Icon-Picker toolkit by adding this line of code to functions.php file.
10
- ```
11
- require get_template_directory() . '/inc/o2/controls/icon-picker/icon-picker-control.php';
12
- ```
13
- And that’s all you need to do.
14
-
15
- You can add it to your customizer by dumping this code into the `inc/customizer.php` or `functions.php` if you don't have customizer.php file:
16
- ```
17
- $wp_customize->add_setting( 'o2_fa_icon_picker', array(
18
- 'default' => 'fa-facebook',
19
- 'capability' => 'edit_theme_options'
20
- ));
21
-
22
- $wp_customize->add_control(new Hantus_Icon_Picker_Control($wp_customize, 'o2_fa_icon_picker', array(
23
- 'label' => __('Icons', 'textdomain'),
24
- 'description' => __('Choose an icon', 'textdomain'),
25
- 'iconset' => 'fa',
26
- 'section' => 'your_section',
27
- 'priority' => 5,
28
- 'settings' => 'o2_fa_icon_picker'
29
- )));
30
- ```
31
- It will a list of all the icons. If only want to list few icons then you can do it like this:
32
- ```
33
- $wp_customize->add_control(new Hantus_Icon_Picker_Control($wp_customize, 'o2_fa_icon_picker', array(
34
- 'label' => __('Icons', 'textdomain'),
35
- 'description' => __('Choose an icon', 'textdomain'),
36
- 'iconset' => 'fa',
37
- 'section' => 'your_section',
38
- 'priority' => 5,
39
- 'settings' => 'o2_fa_icon_picker',
40
- 'choices' => array(
41
- 'fa-facebook' => __('Facebook', 'textdomain'),
42
- 'fa-twitter' => __('Twitter', 'textdomain'),
43
- 'fa-dribbble' => __('Dribbble', 'textdomain'),
44
- 'fa-wordpress' => __('WordPress', 'textdomain'),
45
- 'fa-github' => __('Github', 'textdomain'),
46
- )
47
- )));
48
- ```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/controls/icon-picker/assets/js/icon-picker-control.js DELETED
@@ -1,27 +0,0 @@
1
- wp.customize.controlConstructor['hantus-icon-picker'] = wp.customize.Control.extend({
2
-
3
- ready: function() {
4
- 'use strict';
5
-
6
- var control = this,
7
- element = control.id,
8
- icons = control.params.iconset;
9
-
10
- if ( control.params.iconset === 'fontawesome' ) {
11
- icons = 'fa';
12
- } else if ( control.params.iconset === 'genericons' ) {
13
- icons = 'genericon';
14
- } else if ( control.params.iconset === 'dashicon' ) {
15
- icons = 'dashicons';
16
- }
17
-
18
- jQuery( '#' + element ).ddslick({
19
- iconset:icons
20
- });
21
- jQuery( '#' + element ).on( 'click', function() {
22
- var value = jQuery( this ).find( '.dd-selected-value' ).val();
23
- control.setting.set( value );
24
- });
25
- }
26
-
27
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/controls/icon-picker/assets/js/jquery.ddslick.js DELETED
@@ -1,331 +0,0 @@
1
- /*
2
- Title: A custom DDSlick for O2
3
- Documentation: http://designwithpc.com/Plugins/ddslick
4
- Author: PC, Hardeep Asrani
5
- Website: http://designwithpc.com
6
- Twitter: http://twitter.com/chaudharyp
7
- */
8
-
9
- (function ($) {
10
-
11
- $.fn.ddslick = function (method) {
12
- if (methods[method]) {
13
- return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
14
- } else if (typeof method === 'object' || !method) {
15
- return methods.init.apply(this, arguments);
16
- } else {
17
- $.error('Method ' + method + ' does not exists.');
18
- }
19
- };
20
-
21
- var methods = {},
22
-
23
- //Set defauls for the control
24
- defaults = {
25
- data: [],
26
- keepJSONItemsOnTop: false,
27
- width: 260,
28
- height: null,
29
- background: "#eee",
30
- selectText: "",
31
- defaultSelectedIndex: null,
32
- truncateDescription: true,
33
- iconPosition: "left",
34
- showSelectedHTML: true,
35
- clickOffToClose: true,
36
- iconset: "fa",
37
- onSelected: function () { }
38
- },
39
-
40
- ddSelectHtml = '<div class="dd-select"><input class="dd-selected-value" type="hidden" /><a class="dd-selected"></a><span class="dd-pointer dd-pointer-down"></span></div>',
41
- ddOptionsHtml = '<ul class="dd-options"></ul>',
42
-
43
- //CSS for ddSlick
44
- ddslickCSS = '<style id="css-ddslick" type="text/css">' +
45
- '.dd-select{ border-radius:2px; border:solid 1px #ccc; position:relative; cursor:pointer;}' +
46
- '.dd-desc { color:#aaa; display:block; overflow: hidden; font-weight:normal; line-height: 1.4em; }' +
47
- '.dd-selected{ overflow:hidden; display:block; padding:10px; font-weight:bold;}' +
48
- '.dd-pointer{ width:0; height:0; position:absolute; right:10px; top:50%; margin-top:-3px;}' +
49
- '.dd-pointer-down{ border:solid 5px transparent; border-top:solid 5px #000; }' +
50
- '.dd-pointer-up{border:solid 5px transparent !important; border-bottom:solid 5px #000 !important; margin-top:-8px;}' +
51
- '.dd-options{ border:solid 1px #ccc; border-top:none; list-style:none; box-shadow:0px 1px 5px #ddd; display:none; position:absolute; z-index:2000; margin:0; padding:0;background:#fff; overflow:auto;}' +
52
- '.dd-option{ padding:10px; display:block; border-bottom:solid 1px #ddd; overflow:hidden; text-decoration:none; color:#333; cursor:pointer;-webkit-transition: all 0.25s ease-in-out; -moz-transition: all 0.25s ease-in-out;-o-transition: all 0.25s ease-in-out;-ms-transition: all 0.25s ease-in-out; }' +
53
- '.dd-options > li:last-child > .dd-option{ border-bottom:none;}' +
54
- '.dd-option:hover{ background:#f3f3f3; color:#000;}' +
55
- '.dd-selected-description-truncated { text-overflow: ellipsis; white-space:nowrap; }' +
56
- '.dd-option-selected { background:#f6f6f6; }' +
57
- '.dd-option-icon, .dd-selected-icon { width:36px; text-align:center; vertical-align:middle; float:left; margin-right:10px; font-size:34px;}' +
58
- '.dd-icon-right { float:right; margin-right:15px; margin-left:5px;}' +
59
- '.dd-container{ position:relative;}​ .dd-selected-text { font-weight:bold}​</style>';
60
-
61
- //CSS styles are only added once.
62
- if ($('#css-ddslick').length <= 0) {
63
- $(ddslickCSS).appendTo('head');
64
- }
65
-
66
- //Public methods
67
- methods.init = function (options) {
68
- //Preserve the original defaults by passing an empty object as the target
69
- options = $.extend({}, defaults, options);
70
-
71
- //Apply on all selected elements
72
- return this.each(function () {
73
- var obj = $(this),
74
- data = obj.data('ddslick');
75
- //If the plugin has not been initialized yet
76
- if (!data) {
77
-
78
- var ddSelect = [], ddJson = options.data;
79
-
80
- //Get data from HTML select options
81
- obj.find('option').each(function () {
82
- var $this = $(this), thisData = $this.data();
83
- ddSelect.push({
84
- text: $.trim($this.text()),
85
- value: $this.val(),
86
- selected: $this.is(':selected'),
87
- description: thisData.description,
88
- iconSrc: thisData.iconsrc //keep it lowercase for HTML5 data-attributes
89
- });
90
- });
91
-
92
- //Update Plugin data merging both HTML select data and JSON data for the dropdown
93
- if (options.keepJSONItemsOnTop)
94
- $.merge(options.data, ddSelect);
95
- else options.data = $.merge(ddSelect, options.data);
96
-
97
- //Replace HTML select with empty placeholder, keep the original
98
- var original = obj, placeholder = $('<div id="' + obj.attr('id') + '"></div>');
99
- obj.replaceWith(placeholder);
100
- obj = placeholder;
101
-
102
- //Add classes and append ddSelectHtml & ddOptionsHtml to the container
103
- obj.addClass('dd-container').append(ddSelectHtml).append(ddOptionsHtml);
104
-
105
- //Get newly created ddOptions and ddSelect to manipulate
106
- ddSelect = obj.find('.dd-select');
107
- ddOptions = obj.find('.dd-options');
108
-
109
- //Set widths
110
- ddOptions.css({ width: options.width });
111
- ddSelect.css({ width: options.width, background: options.background });
112
- obj.css({ width: options.width });
113
-
114
- //Set height
115
- if (options.height != null)
116
- ddOptions.css({ height: options.height, overflow: 'auto' });
117
-
118
- //Add ddOptions to the container. Replace with template engine later.
119
- $.each(options.data, function (index, item) {
120
- if (item.selected) options.defaultSelectedIndex = index;
121
- ddOptions.append('<li>' +
122
- '<a class="dd-option">' +
123
- (item.value ? ' <input class="dd-option-value" type="hidden" value="' + item.value + '" />' : '') +
124
- (item.iconSrc ? ' <i class="dd-option-icon' + (options.iconPosition == "right" ? ' dd-icon-right' : '') + ' ' + options.iconset + ' ' + item.iconSrc + '" ></i>' : '') +
125
- (item.text ? ' <label class="dd-option-text">' + item.text + '</label>' : '') +
126
- (item.description ? ' <small class="dd-option-description dd-desc">' + item.description + '</small>' : '') +
127
- '</a>' +
128
- '</li>');
129
- });
130
-
131
- //Save plugin data.
132
- var pluginData = {
133
- settings: options,
134
- original: original,
135
- selectedIndex: -1,
136
- selectedItem: null,
137
- selectedData: null
138
- };
139
- obj.data('ddslick', pluginData);
140
-
141
- //Check if needs to show the select text, otherwise show selected or default selection
142
- if (options.selectText.length > 0 && options.defaultSelectedIndex == null) {
143
- obj.find('.dd-selected').html(options.selectText);
144
- }
145
- else {
146
- var index = (options.defaultSelectedIndex != null && options.defaultSelectedIndex >= 0 && options.defaultSelectedIndex < options.data.length) ? options.defaultSelectedIndex
147
- : 0;
148
- selectIndex(obj, index);
149
- }
150
-
151
- //EVENTS
152
- //Displaying options
153
- obj.find('.dd-select').on('click.ddslick', function () {
154
- open(obj);
155
- });
156
-
157
- //Selecting an option
158
- obj.find('.dd-option').on('click.ddslick', function () {
159
- selectIndex(obj, $(this).closest('li').index());
160
- });
161
-
162
- //Click anywhere to close
163
- if (options.clickOffToClose) {
164
- ddOptions.addClass('dd-click-off-close');
165
- obj.on('click.ddslick', function (e) { e.stopPropagation(); });
166
- $('body').on('click', function () {
167
- $('.dd-click-off-close').slideUp(50).siblings('.dd-select').find('.dd-pointer').removeClass('dd-pointer-up');
168
- });
169
- }
170
- }
171
- });
172
- };
173
-
174
- //Public method to select an option by its index
175
- methods.select = function (options) {
176
- return this.each(function () {
177
- if (options.index)
178
- selectIndex($(this), options.index);
179
- });
180
- };
181
-
182
- //Public method to open drop down
183
- methods.open = function () {
184
- return this.each(function () {
185
- var $this = $(this),
186
- pluginData = $this.data('ddslick');
187
-
188
- //Check if plugin is initialized
189
- if (pluginData)
190
- open($this);
191
- });
192
- };
193
-
194
- //Public method to close drop down
195
- methods.close = function () {
196
- return this.each(function () {
197
- var $this = $(this),
198
- pluginData = $this.data('ddslick');
199
-
200
- //Check if plugin is initialized
201
- if (pluginData)
202
- close($this);
203
- });
204
- };
205
-
206
- //Public method to destroy. Unbind all events and restore the original Html select/options
207
- methods.destroy = function () {
208
- return this.each(function () {
209
- var $this = $(this),
210
- pluginData = $this.data('ddslick');
211
-
212
- //Check if already destroyed
213
- if (pluginData) {
214
- var originalElement = pluginData.original;
215
- $this.removeData('ddslick').unbind('.ddslick').replaceWith(originalElement);
216
- }
217
- });
218
- };
219
-
220
- //Private: Select index
221
- function selectIndex(obj, index) {
222
-
223
- //Get plugin data
224
- var pluginData = obj.data('ddslick');
225
-
226
- //Get required elements
227
- var ddSelected = obj.find('.dd-selected'),
228
- ddSelectedValue = ddSelected.siblings('.dd-selected-value'),
229
- ddOptions = obj.find('.dd-options'),
230
- ddPointer = ddSelected.siblings('.dd-pointer'),
231
- selectedOption = obj.find('.dd-option').eq(index),
232
- selectedLiItem = selectedOption.closest('li'),
233
- settings = pluginData.settings,
234
- selectedData = pluginData.settings.data[index];
235
-
236
- //Highlight selected option
237
- obj.find('.dd-option').removeClass('dd-option-selected');
238
- selectedOption.addClass('dd-option-selected');
239
-
240
- //Update or Set plugin data with new selection
241
- pluginData.selectedIndex = index;
242
- pluginData.selectedItem = selectedLiItem;
243
- pluginData.selectedData = selectedData;
244
-
245
- //If set to display to full html, add html
246
- if (settings.showSelectedHTML) {
247
- ddSelected.html(
248
- (selectedData.iconSrc ? '<i class="dd-selected-icon' + (settings.iconPosition == "right" ? ' dd-icon-right' : '') + ' ' + settings.iconset + ' ' + selectedData.iconSrc + '" ></i>' : '') +
249
- (selectedData.text ? '<label class="dd-selected-text">' + selectedData.text + '</label>' : '') +
250
- (selectedData.description ? '<small class="dd-selected-description dd-desc' + (settings.truncateDescription ? ' dd-selected-description-truncated' : '') + '" >' + selectedData.description + '</small>' : '')
251
- );
252
-
253
- }
254
- //Else only display text as selection
255
- else ddSelected.html(selectedData.text);
256
-
257
- //Updating selected option value
258
- ddSelectedValue.val(selectedData.value);
259
-
260
- //BONUS! Update the original element attribute with the new selection
261
- pluginData.original.val(selectedData.value);
262
- obj.data('ddslick', pluginData);
263
-
264
- //Close options on selection
265
- close(obj);
266
-
267
- //Adjust appearence for selected option
268
- adjustSelectedHeight(obj);
269
-
270
- //Callback function on selection
271
- if (typeof settings.onSelected == 'function') {
272
- settings.onSelected.call(this, pluginData);
273
- }
274
- }
275
-
276
- //Private: Close the drop down options
277
- function open(obj) {
278
-
279
- var $this = obj.find('.dd-select'),
280
- ddOptions = $this.siblings('.dd-options'),
281
- ddPointer = $this.find('.dd-pointer'),
282
- wasOpen = ddOptions.is(':visible');
283
-
284
- //Close all open options (multiple plugins) on the page
285
- $('.dd-click-off-close').not(ddOptions).slideUp(50);
286
- $('.dd-pointer').removeClass('dd-pointer-up');
287
-
288
- if (wasOpen) {
289
- ddOptions.slideUp('fast');
290
- ddPointer.removeClass('dd-pointer-up');
291
- }
292
- else {
293
- ddOptions.slideDown('fast');
294
- ddPointer.addClass('dd-pointer-up');
295
- }
296
-
297
- //Fix text height (i.e. display title in center), if there is no description
298
- adjustOptionsHeight(obj);
299
- }
300
-
301
- //Private: Close the drop down options
302
- function close(obj) {
303
- //Close drop down and adjust pointer direction
304
- obj.find('.dd-options').slideUp(50);
305
- obj.find('.dd-pointer').removeClass('dd-pointer-up').removeClass('dd-pointer-up');
306
- }
307
-
308
- //Private: Adjust appearence for drop down options (move title to middle), when no desripction
309
- function adjustOptionsHeight(obj) {
310
- obj.find('.dd-option').each(function () {
311
- var $this = $(this);
312
- var descriptionOption = $this.find('.dd-option-description');
313
- var imgOption = obj.find('.dd-option-icon');
314
- if (descriptionOption.length <= 0 && imgOption.length > 0) {
315
- $this.find('.dd-option-text').css('lineHeight', '34px');
316
- }
317
- });
318
- }
319
-
320
- function adjustSelectedHeight(obj) {
321
- obj.find('.dd-selected').each(function () {
322
- var $this = $(this);
323
- var descriptionSelected = $this.find('.dd-selected-description');
324
- var imgSelected = obj.find('.dd-selected-icon');
325
- if (descriptionSelected.length <= 0 && imgSelected.length > 0) {
326
- $this.find('.dd-selected-text').css('lineHeight', '34px');
327
- }
328
- });
329
- }
330
-
331
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/controls/icon-picker/assets/js/jquery.ddslick.min.js DELETED
@@ -1 +0,0 @@
1
- !function(e){function d(e,d){var t=e.data("ddslick"),n=e.find(".dd-selected"),s=n.siblings(".dd-selected-value"),l=(e.find(".dd-options"),n.siblings(".dd-pointer"),e.find(".dd-option").eq(d)),c=l.closest("li"),a=t.settings,r=t.settings.data[d];e.find(".dd-option").removeClass("dd-option-selected"),l.addClass("dd-option-selected"),t.selectedIndex=d,t.selectedItem=c,t.selectedData=r,a.showSelectedHTML?n.html((r.iconSrc?'<i class="dd-selected-icon'+("right"==a.iconPosition?" dd-icon-right":"")+" "+a.iconset+" "+r.iconSrc+'" ></i>':"")+(r.text?'<label class="dd-selected-text">'+r.text+"</label>":"")+(r.description?'<small class="dd-selected-description dd-desc'+(a.truncateDescription?" dd-selected-description-truncated":"")+'" >'+r.description+"</small>":"")):n.html(r.text),s.val(r.value),t.original.val(r.value),e.data("ddslick",t),i(e),o(e),"function"==typeof a.onSelected&&a.onSelected.call(this,t)}function t(d){var t=d.find(".dd-select"),i=t.siblings(".dd-options"),o=t.find(".dd-pointer"),s=i.is(":visible");e(".dd-click-off-close").not(i).slideUp(50),e(".dd-pointer").removeClass("dd-pointer-up"),s?(i.slideUp("fast"),o.removeClass("dd-pointer-up")):(i.slideDown("fast"),o.addClass("dd-pointer-up")),n(d)}function i(e){e.find(".dd-options").slideUp(50),e.find(".dd-pointer").removeClass("dd-pointer-up").removeClass("dd-pointer-up")}function n(d){d.find(".dd-option").each(function(){var t=e(this),i=t.find(".dd-option-description"),n=d.find(".dd-option-icon");i.length<=0&&n.length>0&&t.find(".dd-option-text").css("lineHeight","34px")})}function o(d){d.find(".dd-selected").each(function(){var t=e(this),i=t.find(".dd-selected-description"),n=d.find(".dd-selected-icon");i.length<=0&&n.length>0&&t.find(".dd-selected-text").css("lineHeight","34px")})}e.fn.ddslick=function(d){return s[d]?s[d].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof d&&d?void e.error("Method "+d+" does not exists."):s.init.apply(this,arguments)};var s={},l={data:[],keepJSONItemsOnTop:!1,width:260,height:null,background:"#eee",selectText:"",defaultSelectedIndex:null,truncateDescription:!0,iconPosition:"left",showSelectedHTML:!0,clickOffToClose:!0,iconset:"fa",onSelected:function(){}};e("#css-ddslick").length<=0&&e('<style id="css-ddslick" type="text/css">.dd-select{ border-radius:2px; border:solid 1px #ccc; position:relative; cursor:pointer;}.dd-desc { color:#aaa; display:block; overflow: hidden; font-weight:normal; line-height: 1.4em; }.dd-selected{ overflow:hidden; display:block; padding:10px; font-weight:bold;}.dd-pointer{ width:0; height:0; position:absolute; right:10px; top:50%; margin-top:-3px;}.dd-pointer-down{ border:solid 5px transparent; border-top:solid 5px #000; }.dd-pointer-up{border:solid 5px transparent !important; border-bottom:solid 5px #000 !important; margin-top:-8px;}.dd-options{ border:solid 1px #ccc; border-top:none; list-style:none; box-shadow:0px 1px 5px #ddd; display:none; position:absolute; z-index:2000; margin:0; padding:0;background:#fff; overflow:auto;}.dd-option{ padding:10px; display:block; border-bottom:solid 1px #ddd; overflow:hidden; text-decoration:none; color:#333; cursor:pointer;-webkit-transition: all 0.25s ease-in-out; -moz-transition: all 0.25s ease-in-out;-o-transition: all 0.25s ease-in-out;-ms-transition: all 0.25s ease-in-out; }.dd-options > li:last-child > .dd-option{ border-bottom:none;}.dd-option:hover{ background:#f3f3f3; color:#000;}.dd-selected-description-truncated { text-overflow: ellipsis; white-space:nowrap; }.dd-option-selected { background:#f6f6f6; }.dd-option-icon, .dd-selected-icon { width:36px; text-align:center; vertical-align:middle; float:left; margin-right:10px; font-size:34px;}.dd-icon-right { float:right; margin-right:15px; margin-left:5px;}.dd-container{ position:relative;}​ .dd-selected-text { font-weight:bold}​</style>').appendTo("head"),s.init=function(i){return i=e.extend({},l,i),this.each(function(){var n=e(this);if(!n.data("ddslick")){var o=[];i.data;n.find("option").each(function(){var d=e(this),t=d.data();o.push({text:e.trim(d.text()),value:d.val(),selected:d.is(":selected"),description:t.description,iconSrc:t.iconsrc})}),i.keepJSONItemsOnTop?e.merge(i.data,o):i.data=e.merge(o,i.data);var s=n,l=e('<div id="'+n.attr("id")+'"></div>');n.replaceWith(l),(n=l).addClass("dd-container").append('<div class="dd-select"><input class="dd-selected-value" type="hidden" /><a class="dd-selected"></a><span class="dd-pointer dd-pointer-down"></span></div>').append('<ul class="dd-options"></ul>'),o=n.find(".dd-select"),ddOptions=n.find(".dd-options"),ddOptions.css({width:i.width}),o.css({width:i.width,background:i.background}),n.css({width:i.width}),null!=i.height&&ddOptions.css({height:i.height,overflow:"auto"}),e.each(i.data,function(e,d){d.selected&&(i.defaultSelectedIndex=e),ddOptions.append('<li><a class="dd-option">'+(d.value?' <input class="dd-option-value" type="hidden" value="'+d.value+'" />':"")+(d.iconSrc?' <i class="dd-option-icon'+("right"==i.iconPosition?" dd-icon-right":"")+" "+i.iconset+" "+d.iconSrc+'" ></i>':"")+(d.text?' <label class="dd-option-text">'+d.text+"</label>":"")+(d.description?' <small class="dd-option-description dd-desc">'+d.description+"</small>":"")+"</a></li>")});var c={settings:i,original:s,selectedIndex:-1,selectedItem:null,selectedData:null};if(n.data("ddslick",c),i.selectText.length>0&&null==i.defaultSelectedIndex)n.find(".dd-selected").html(i.selectText);else{var a=null!=i.defaultSelectedIndex&&i.defaultSelectedIndex>=0&&i.defaultSelectedIndex<i.data.length?i.defaultSelectedIndex:0;d(n,a)}n.find(".dd-select").on("click.ddslick",function(){t(n)}),n.find(".dd-option").on("click.ddslick",function(){d(n,e(this).closest("li").index())}),i.clickOffToClose&&(ddOptions.addClass("dd-click-off-close"),n.on("click.ddslick",function(e){e.stopPropagation()}),e("body").on("click",function(){e(".dd-click-off-close").slideUp(50).siblings(".dd-select").find(".dd-pointer").removeClass("dd-pointer-up")}))}})},s.select=function(t){return this.each(function(){t.index&&d(e(this),t.index)})},s.open=function(){return this.each(function(){var d=e(this);d.data("ddslick")&&t(d)})},s.close=function(){return this.each(function(){var d=e(this);d.data("ddslick")&&i(d)})},s.destroy=function(){return this.each(function(){var d=e(this),t=d.data("ddslick");if(t){var i=t.original;d.removeData("ddslick").unbind(".ddslick").replaceWith(i)}})}}(jQuery);
 
inc/custom-controls/controls/icon-picker/icon-picker-control.php DELETED
@@ -1,65 +0,0 @@
1
- <?php
2
- /**
3
- * hantus icon picker
4
- */
5
- if ( ! class_exists( 'WP_Customize_Control' ) ) {
6
- return;
7
- }
8
- class Hantus_Icon_Picker_Control extends WP_Customize_Control {
9
-
10
- public $type = 'hantus-icon-picker';
11
-
12
- public $iconset = array();
13
-
14
- public function to_json() {
15
- if ( empty( $this->iconset ) ) {
16
- $this->iconset = 'fa';
17
- }
18
- $iconset = $this->iconset;
19
- $this->json['iconset'] = $iconset;
20
- parent::to_json();
21
- }
22
-
23
- public function enqueue() {
24
- wp_enqueue_script( 'hantus-icon-picker-ddslick-min', CLEVERFOX_DIRECTORY_URI . 'controls/icon-picker/assets/js/jquery.ddslick.min.js', array( 'jquery' ) );
25
- wp_enqueue_script( 'hantus-icon-picker-control', CLEVERFOX_DIRECTORY_URI . 'controls/icon-picker/assets/js/icon-picker-control.js', array( 'jquery', 'hantus-icon-picker-ddslick-min' ), '', true );
26
- if ( in_array( $this->iconset, array( 'genericon', 'genericons' ) ) ) {
27
- wp_enqueue_style( 'genericons', CLEVERFOX_DIRECTORY_URI . 'assets/genericons/genericons.css' );
28
- } elseif ( in_array( $this->iconset, array( 'dashicon', 'dashicons' ) ) ) {
29
- wp_enqueue_style( 'dashicons' );
30
- } else {
31
- wp_enqueue_style( 'font-awesome', CLEVERFOX_DIRECTORY_URI . 'assets/font-awesome/css/font-awesome.min.css' );
32
- }
33
- }
34
-
35
- public function render_content() {
36
- if ( empty( $this->choices ) ) {
37
- if ( in_array( $this->iconset, array( 'genericon', 'genericons' ) ) ) {
38
- require_once CLEVERFOX_DIRECTORY . 'controls/icon-picker/inc/genericons-icons.php';
39
- $this->choices = hantus_genericons_list();
40
- } elseif ( in_array( $this->iconset, array( 'dashicon', 'dashicons' ) ) ) {
41
- require_once CLEVERFOX_DIRECTORY . 'controls/icon-picker/inc/dashicons-icons.php';
42
- $this->choices = hantus_dashicons_list();
43
- } else {
44
- require_once CLEVERFOX_DIRECTORY . 'controls/icon-picker/inc/fa-icons.php';
45
- $this->choices = hantus_font_awesome_list();
46
- }
47
- }
48
- ?>
49
- <label>
50
- <?php if ( ! empty( $this->label ) ) : ?>
51
- <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
52
- <?php endif;
53
- if ( ! empty( $this->description ) ) : ?>
54
- <span class="description customize-control-description"><?php echo esc_html( $this->description ); ?></span>
55
- <?php endif; ?>
56
- <select class="startkit-icon-picker-icon-control" id="<?php echo esc_attr( $this->id ); ?>">
57
- <?php foreach ( $this->choices as $value => $label ) : ?>
58
- <option value="<?php echo esc_attr( $value ); ?>" <?php echo selected( $this->value(), $value, false ); ?> data-iconsrc="<?php echo esc_attr( $value ); ?>"><?php echo esc_html( $label ); ?></option>
59
- <?php endforeach; ?>
60
- </select>
61
- </label>
62
- <?php }
63
-
64
- }
65
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/controls/icon-picker/inc/dashicons-icons.php DELETED
@@ -1,66 +0,0 @@
1
- <?php
2
- /**
3
- * This is a list of all the Dashiconss icons.
4
- *
5
- * @package O2 Customizer Library
6
- * @subpackage Icon Picker
7
- * @since 0.1
8
- */
9
- function hantus_dashicons_list() {
10
- $icons = array(
11
- 'dashicons-menu' => 'dashicons-menu',
12
- 'dashicons-admin-site' => 'dashicons-admin-site',
13
- 'dashicons-dashboard' => 'dashicons-dashboard',
14
- 'dashicons-admin-media' => 'dashicons-admin-media',
15
- 'dashicons-admin-page' => 'dashicons-admin-page',
16
- 'dashicons-admin-comments' => 'dashicons-admin-comments',
17
- 'dashicons-admin-appearance' => 'dashicons-admin-appearance',
18
- 'dashicons-admin-plugins' => 'dashicons-admin-plugins',
19
- 'dashicons-admin-users' => 'dashicons-admin-users',
20
- 'dashicons-admin-tools' => 'dashicons-admin-tools',
21
- 'dashicons-admin-settings' => 'dashicons-admin-settings',
22
- 'dashicons-admin-network' => 'dashicons-admin-network',
23
- 'dashicons-admin-generic' => 'dashicons-admin-generic',
24
- 'dashicons-admin-home' => 'dashicons-admin-home',
25
- 'dashicons-admin-collapse' => 'dashicons-admin-collapse',
26
- 'dashicons-filter' => 'dashicons-filter',
27
- 'dashicons-admin-customizer' => 'dashicons-admin-customizer',
28
- 'dashicons-admin-multisite' => 'dashicons-admin-multisite',
29
- 'dashicons-format-links' => 'dashicons-format-links',
30
- 'dashicons-format-standard' => 'dashicons-format-standard',
31
- 'dashicons-format-image' => 'dashicons-format-image',
32
- 'dashicons-format-gallery' => 'dashicons-format-gallery',
33
- 'dashicons-format-audio' => 'dashicons-format-audio',
34
- 'dashicons-format-video' => 'dashicons-format-video',
35
- 'dashicons-format-chat' => 'dashicons-format-chat',
36
- 'dashicons-format-status' => 'dashicons-format-status',
37
- 'dashicons-format-aside' => 'dashicons-format-aside',
38
- 'dashicons-format-quote' => 'dashicons-format-quote',
39
- 'dashicons-welcome-edit-page' => 'dashicons-welcome-edit-page',
40
- 'dashicons-welcome-add-page' => 'dashicons-welcome-add-page',
41
- 'dashicons-welcome-view-site' => 'dashicons-welcome-view-site',
42
- 'dashicons-welcome-widgets-menus' => 'dashicons-welcome-widgets-menus',
43
- 'dashicons-welcome-comments' => 'dashicons-welcome-comments',
44
- 'dashicons-welcome-learn-more' => 'dashicons-welcome-learn-more',
45
- 'dashicons-image-crop' => 'dashicons-image-crop',
46
- 'dashicons-image-rotate' => 'dashicons-image-rotate',
47
- 'dashicons-image-rotate-left' => 'dashicons-image-rotate-left',
48
- 'dashicons-image-rotate-right' => 'dashicons-image-rotate-right',
49
- 'dashicons-image-flip-vertical' => 'dashicons-image-flip-vertical',
50
- 'dashicons-image-flip-horizontal' => 'dashicons-image-flip-horizontal',
51
- 'dashicons-image-filter' => 'dashicons-image-filter',
52
- 'dashicons-undo' => 'dashicons-undo',
53
- 'dashicons-redo' => 'dashicons-redo',
54
- 'dashicons-editor-bold' => 'dashicons-editor-bold',
55
- 'dashicons-editor-italic' => 'dashicons-editor-italic',
56
- 'dashicons-editor-ul' => 'dashicons-editor-ul',
57
- 'dashicons-editor-ol' => 'dashicons-editor-ol',
58
- 'dashicons-editor-quote' => 'dashicons-editor-quote',
59
- 'dashicons-editor-alignleft' => 'dashicons-editor-alignleft',
60
- 'dashicons-editor-aligncenter' => 'dashicons-editor-aligncenter',
61
- 'dashicons-editor-alignright' => 'dashicons-editor-alignright',
62
- 'dashicons-editor-insertmore' => 'dashicons-editor-insertmore',
63
- 'dashicons-editor-spellcheck' => 'dashicons-editor-spellcheck'
64
- );
65
- return $icons;
66
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/controls/icon-picker/inc/fa-icons.php DELETED
@@ -1,645 +0,0 @@
1
- <?php
2
- /**
3
- * This is a list of all the Font Awesome icons.
4
- *
5
- * @package O2 Customizer Library
6
- * @subpackage Icon Picker
7
- * @since 0.1
8
- */
9
- function hantus_font_awesome_list() {
10
- $icons = array(
11
- 'fa-glass' => 'fa-glass',
12
- 'fa-music' => 'fa-music',
13
- 'fa-search' => 'fa-search',
14
- 'fa-envelope-o' => 'fa-envelope-o',
15
- 'fa-heart' => 'fa-heart',
16
- 'fa-star' => 'fa-star',
17
- 'fa-star-o' => 'fa-star-o',
18
- 'fa-user' => 'fa-user',
19
- 'fa-film' => 'fa-film',
20
- 'fa-th-large' => 'fa-th-large',
21
- 'fa-th' => 'fa-th',
22
- 'fa-th-list' => 'fa-th-list',
23
- 'fa-check' => 'fa-check',
24
- 'fa-times' => 'fa-times',
25
- 'fa-search-plus' => 'fa-search-plus',
26
- 'fa-search-minus' => 'fa-search-minus',
27
- 'fa-power-off' => 'fa-power-off',
28
- 'fa-signal' => 'fa-signal',
29
- 'fa-cog' => 'fa-cog',
30
- 'fa-trash-o' => 'fa-trash-o',
31
- 'fa-home' => 'fa-home',
32
- 'fa-file-o' => 'fa-file-o',
33
- 'fa-clock-o' => 'fa-clock-o',
34
- 'fa-road' => 'fa-road',
35
- 'fa-download' => 'fa-download',
36
- 'fa-arrow-circle-o-down' => 'fa-arrow-circle-o-down',
37
- 'fa-arrow-circle-o-up' => 'fa-arrow-circle-o-up',
38
- 'fa-inbox' => 'fa-inbox',
39
- 'fa-play-circle-o' => 'fa-play-circle-o',
40
- 'fa-repeat' => 'fa-repeat',
41
- 'fa-refresh' => 'fa-refresh',
42
- 'fa-list-alt' => 'fa-list-alt',
43
- 'fa-lock' => 'fa-lock',
44
- 'fa-flag' => 'fa-flag',
45
- 'fa-headphones' => 'fa-headphones',
46
- 'fa-volume-off' => 'fa-volume-off',
47
- 'fa-volume-down' => 'fa-volume-down',
48
- 'fa-volume-up' => 'fa-volume-up',
49
- 'fa-qrcode' => 'fa-qrcode',
50
- 'fa-barcode' => 'fa-barcode',
51
- 'fa-tag' => 'fa-tag',
52
- 'fa-tags' => 'fa-tags',
53
- 'fa-book' => 'fa-book',
54
- 'fa-bookmark' => 'fa-bookmark',
55
- 'fa-print' => 'fa-print',
56
- 'fa-camera' => 'fa-camera',
57
- 'fa-font' => 'fa-font',
58
- 'fa-bold' => 'fa-bold',
59
- 'fa-italic' => 'fa-italic',
60
- 'fa-text-height' => 'fa-text-height',
61
- 'fa-text-width' => 'fa-text-width',
62
- 'fa-align-left' => 'fa-align-left',
63
- 'fa-align-center' => 'fa-align-center',
64
- 'fa-align-right' => 'fa-align-right',
65
- 'fa-align-justify' => 'fa-align-justify',
66
- 'fa-list' => 'fa-list',
67
- 'fa-outdent' => 'fa-outdent',
68
- 'fa-indent' => 'fa-indent',
69
- 'fa-video-camera' => 'fa-video-camera',
70
- 'fa-picture-o' => 'fa-picture-o',
71
- 'fa-pencil' => 'fa-pencil',
72
- 'fa-map-marker' => 'fa-map-marker',
73
- 'fa-adjust' => 'fa-adjust',
74
- 'fa-tint' => 'fa-tint',
75
- 'fa-pencil-square-o' => 'fa-pencil-square-o',
76
- 'fa-share-square-o' => 'fa-share-square-o',
77
- 'fa-check-square-o' => 'fa-check-square-o',
78
- 'fa-arrows' => 'fa-arrows',
79
- 'fa-step-backward' => 'fa-step-backward',
80
- 'fa-fast-backward' => 'fa-fast-backward',
81
- 'fa-backward' => 'fa-backward',
82
- 'fa-play' => 'fa-play',
83
- 'fa-pause' => 'fa-pause',
84
- 'fa-stop' => 'fa-stop',
85
- 'fa-forward' => 'fa-forward',
86
- 'fa-fast-forward' => 'fa-fast-forward',
87
- 'fa-step-forward' => 'fa-step-forward',
88
- 'fa-eject' => 'fa-eject',
89
- 'fa-chevron-left' => 'fa-chevron-left',
90
- 'fa-chevron-right' => 'fa-chevron-right',
91
- 'fa-plus-circle' => 'fa-plus-circle',
92
- 'fa-minus-circle' => 'fa-minus-circle',
93
- 'fa-times-circle' => 'fa-times-circle',
94
- 'fa-check-circle' => 'fa-check-circle',
95
- 'fa-question-circle' => 'fa-question-circle',
96
- 'fa-info-circle' => 'fa-info-circle',
97
- 'fa-crosshairs' => 'fa-crosshairs',
98
- 'fa-times-circle-o' => 'fa-times-circle-o',
99
- 'fa-check-circle-o' => 'fa-check-circle-o',
100
- 'fa-ban' => 'fa-ban',
101
- 'fa-arrow-left' => 'fa-arrow-left',
102
- 'fa-arrow-right' => 'fa-arrow-right',
103
- 'fa-arrow-up' => 'fa-arrow-up',
104
- 'fa-arrow-down' => 'fa-arrow-down',
105
- 'fa-share' => 'fa-share',
106
- 'fa-expand' => 'fa-expand',
107
- 'fa-compress' => 'fa-compress',
108
- 'fa-plus' => 'fa-plus',
109
- 'fa-minus' => 'fa-minus',
110
- 'fa-asterisk' => 'fa-asterisk',
111
- 'fa-exclamation-circle' => 'fa-exclamation-circle',
112
- 'fa-gift' => 'fa-gift',
113
- 'fa-leaf' => 'fa-leaf',
114
- 'fa-fire' => 'fa-fire',
115
- 'fa-eye' => 'fa-eye',
116
- 'fa-eye-slash' => 'fa-eye-slash',
117
- 'fa-exclamation-triangle' => 'fa-exclamation-triangle',
118
- 'fa-plane' => 'fa-plane',
119
- 'fa-calendar' => 'fa-calendar',
120
- 'fa-random' => 'fa-random',
121
- 'fa-comment' => 'fa-comment',
122
- 'fa-magnet' => 'fa-magnet',
123
- 'fa-chevron-up' => 'fa-chevron-up',
124
- 'fa-chevron-down' => 'fa-chevron-down',
125
- 'fa-retweet' => 'fa-retweet',
126
- 'fa-shopping-cart' => 'fa-shopping-cart',
127
- 'fa-folder' => 'fa-folder',
128
- 'fa-folder-open' => 'fa-folder-open',
129
- 'fa-arrows-v' => 'fa-arrows-v',
130
- 'fa-arrows-h' => 'fa-arrows-h',
131
- 'fa-bar-chart' => 'fa-bar-chart',
132
- 'fa-twitter-square' => 'fa-twitter-square',
133
- 'fa-facebook-square' => 'fa-facebook-square',
134
- 'fa-camera-retro' => 'fa-camera-retro',
135
- 'fa-key' => 'fa-key',
136
- 'fa-cogs' => 'fa-cogs',
137
- 'fa-comments' => 'fa-comments',
138
- 'fa-thumbs-o-up' => 'fa-thumbs-o-up',
139
- 'fa-thumbs-o-down' => 'fa-thumbs-o-down',
140
- 'fa-star-half' => 'fa-star-half',
141
- 'fa-heart-o' => 'fa-heart-o',
142
- 'fa-sign-out' => 'fa-sign-out',
143
- 'fa-linkedin-square' => 'fa-linkedin-square',
144
- 'fa-thumb-tack' => 'fa-thumb-tack',
145
- 'fa-external-link' => 'fa-external-link',
146
- 'fa-sign-in' => 'fa-sign-in',
147
- 'fa-trophy' => 'fa-trophy',
148
- 'fa-github-square' => 'fa-github-square',
149
- 'fa-upload' => 'fa-upload',
150
- 'fa-lemon-o' => 'fa-lemon-o',
151
- 'fa-phone' => 'fa-phone',
152
- 'fa-square-o' => 'fa-square-o',
153
- 'fa-bookmark-o' => 'fa-bookmark-o',
154
- 'fa-phone-square' => 'fa-phone-square',
155
- 'fa-twitter' => 'fa-twitter',
156
- 'fa-facebook' => 'fa-facebook',
157
- 'fa-github' => 'fa-github',
158
- 'fa-unlock' => 'fa-unlock',
159
- 'fa-credit-card' => 'fa-credit-card',
160
- 'fa-rss' => 'fa-rss',
161
- 'fa-hdd-o' => 'fa-hdd-o',
162
- 'fa-bullhorn' => 'fa-bullhorn',
163
- 'fa-bell' => 'fa-bell',
164
- 'fa-certificate' => 'fa-certificate',
165
- 'fa-hand-o-right' => 'fa-hand-o-right',
166
- 'fa-hand-o-left' => 'fa-hand-o-left',
167
- 'fa-hand-o-up' => 'fa-hand-o-up',
168
- 'fa-hand-o-down' => 'fa-hand-o-down',
169
- 'fa-arrow-circle-left' => 'fa-arrow-circle-left',
170
- 'fa-arrow-circle-right' => 'fa-arrow-circle-right',
171
- 'fa-arrow-circle-up' => 'fa-arrow-circle-up',
172
- 'fa-arrow-circle-down' => 'fa-arrow-circle-down',
173
- 'fa-globe' => 'fa-globe',
174
- 'fa-wrench' => 'fa-wrench',
175
- 'fa-tasks' => 'fa-tasks',
176
- 'fa-filter' => 'fa-filter',
177
- 'fa-briefcase' => 'fa-briefcase',
178
- 'fa-arrows-alt' => 'fa-arrows-alt',
179
- 'fa-users' => 'fa-users',
180
- 'fa-link' => 'fa-link',
181
- 'fa-cloud' => 'fa-cloud',
182
- 'fa-flask' => 'fa-flask',
183
- 'fa-scissors' => 'fa-scissors',
184
- 'fa-files-o' => 'fa-files-o',
185
- 'fa-paperclip' => 'fa-paperclip',
186
- 'fa-floppy-o' => 'fa-floppy-o',
187
- 'fa-square' => 'fa-square',
188
- 'fa-bars' => 'fa-bars',
189
- 'fa-list-ul' => 'fa-list-ul',
190
- 'fa-list-ol' => 'fa-list-ol',
191
- 'fa-strikethrough' => 'fa-strikethrough',
192
- 'fa-underline' => 'fa-underline',
193
- 'fa-table' => 'fa-table',
194
- 'fa-magic' => 'fa-magic',
195
- 'fa-truck' => 'fa-truck',
196
- 'fa-pinterest' => 'fa-pinterest',
197
- 'fa-pinterest-square' => 'fa-pinterest-square',
198
- 'fa-google-plus-square' => 'fa-google-plus-square',
199
- 'fa-google-plus' => 'fa-google-plus',
200
- 'fa-money' => 'fa-money',
201
- 'fa-caret-down' => 'fa-caret-down',
202
- 'fa-caret-up' => 'fa-caret-up',
203
- 'fa-caret-left' => 'fa-caret-left',
204
- 'fa-caret-right' => 'fa-caret-right',
205
- 'fa-columns' => 'fa-columns',
206
- 'fa-sort' => 'fa-sort',
207
- 'fa-sort-desc' => 'fa-sort-desc',
208
- 'fa-sort-asc' => 'fa-sort-asc',
209
- 'fa-envelope' => 'fa-envelope',
210
- 'fa-linkedin' => 'fa-linkedin',
211
- 'fa-undo' => 'fa-undo',
212
- 'fa-gavel' => 'fa-gavel',
213
- 'fa-tachometer' => 'fa-tachometer',
214
- 'fa-comment-o' => 'fa-comment-o',
215
- 'fa-comments-o' => 'fa-comments-o',
216
- 'fa-bolt' => 'fa-bolt',
217
- 'fa-sitemap' => 'fa-sitemap',
218
- 'fa-umbrella' => 'fa-umbrella',
219
- 'fa-clipboard' => 'fa-clipboard',
220
- 'fa-lightbulb-o' => 'fa-lightbulb-o',
221
- 'fa-exchange' => 'fa-exchange',
222
- 'fa-cloud-download' => 'fa-cloud-download',
223
- 'fa-cloud-upload' => 'fa-cloud-upload',
224
- 'fa-user-md' => 'fa-user-md',
225
- 'fa-stethoscope' => 'fa-stethoscope',
226
- 'fa-suitcase' => 'fa-suitcase',
227
- 'fa-bell-o' => 'fa-bell-o',
228
- 'fa-coffee' => 'fa-coffee',
229
- 'fa-cutlery' => 'fa-cutlery',
230
- 'fa-file-text-o' => 'fa-file-text-o',
231
- 'fa-building-o' => 'fa-building-o',
232
- 'fa-hospital-o' => 'fa-hospital-o',
233
- 'fa-ambulance' => 'fa-ambulance',
234
- 'fa-medkit' => 'fa-medkit',
235
- 'fa-fighter-jet' => 'fa-fighter-jet',
236
- 'fa-beer' => 'fa-beer',
237
- 'fa-h-square' => 'fa-h-square',
238
- 'fa-plus-square' => 'fa-plus-square',
239
- 'fa-angle-double-left' => 'fa-angle-double-left',
240
- 'fa-angle-double-right' => 'fa-angle-double-right',
241
- 'fa-angle-double-up' => 'fa-angle-double-up',
242
- 'fa-angle-double-down' => 'fa-angle-double-down',
243
- 'fa-angle-left' => 'fa-angle-left',
244
- 'fa-angle-right' => 'fa-angle-right',
245
- 'fa-angle-up' => 'fa-angle-up',
246
- 'fa-angle-down' => 'fa-angle-down',
247
- 'fa-desktop' => 'fa-desktop',
248
- 'fa-laptop' => 'fa-laptop',
249
- 'fa-tablet' => 'fa-tablet',
250
- 'fa-mobile' => 'fa-mobile',
251
- 'fa-circle-o' => 'fa-circle-o',
252
- 'fa-quote-left' => 'fa-quote-left',
253
- 'fa-quote-right' => 'fa-quote-right',
254
- 'fa-spinner' => 'fa-spinner',
255
- 'fa-circle' => 'fa-circle',
256
- 'fa-reply' => 'fa-reply',
257
- 'fa-github-alt' => 'fa-github-alt',
258
- 'fa-folder-o' => 'fa-folder-o',
259
- 'fa-folder-open-o' => 'fa-folder-open-o',
260
- 'fa-smile-o' => 'fa-smile-o',
261
- 'fa-frown-o' => 'fa-frown-o',
262
- 'fa-meh-o' => 'fa-meh-o',
263
- 'fa-gamepad' => 'fa-gamepad',
264
- 'fa-keyboard-o' => 'fa-keyboard-o',
265
- 'fa-flag-o' => 'fa-flag-o',
266
- 'fa-flag-checkered' => 'fa-flag-checkered',
267
- 'fa-terminal' => 'fa-terminal',
268
- 'fa-code' => 'fa-code',
269
- 'fa-reply-all' => 'fa-reply-all',
270
- 'fa-star-half-o' => 'fa-star-half-o',
271
- 'fa-location-arrow' => 'fa-location-arrow',
272
- 'fa-crop' => 'fa-crop',
273
- 'fa-code-fork' => 'fa-code-fork',
274
- 'fa-chain-broken' => 'fa-chain-broken',
275
- 'fa-question' => 'fa-question',
276
- 'fa-info' => 'fa-info',
277
- 'fa-exclamation' => 'fa-exclamation',
278
- 'fa-superscript' => 'fa-superscript',
279
- 'fa-subscript' => 'fa-subscript',
280
- 'fa-eraser' => 'fa-eraser',
281
- 'fa-puzzle-piece' => 'fa-puzzle-piece',
282
- 'fa-microphone' => 'fa-microphone',
283
- 'fa-microphone-slash' => 'fa-microphone-slash',
284
- 'fa-shield' => 'fa-shield',
285
- 'fa-calendar-o' => 'fa-calendar-o',
286
- 'fa-fire-extinguisher' => 'fa-fire-extinguisher',
287
- 'fa-rocket' => 'fa-rocket',
288
- 'fa-maxcdn' => 'fa-maxcdn',
289
- 'fa-chevron-circle-left' => 'fa-chevron-circle-left',
290
- 'fa-chevron-circle-right' => 'fa-chevron-circle-right',
291
- 'fa-chevron-circle-up' => 'fa-chevron-circle-up',
292
- 'fa-chevron-circle-down' => 'fa-chevron-circle-down',
293
- 'fa-html5' => 'fa-html5',
294
- 'fa-css3' => 'fa-css3',
295
- 'fa-anchor' => 'fa-anchor',
296
- 'fa-unlock-alt' => 'fa-unlock-alt',
297
- 'fa-bullseye' => 'fa-bullseye',
298
- 'fa-ellipsis-h' => 'fa-ellipsis-h',
299
- 'fa-ellipsis-v' => 'fa-ellipsis-v',
300
- 'fa-rss-square' => 'fa-rss-square',
301
- 'fa-play-circle' => 'fa-play-circle',
302
- 'fa-ticket' => 'fa-ticket',
303
- 'fa-minus-square' => 'fa-minus-square',
304
- 'fa-minus-square-o' => 'fa-minus-square-o',
305
- 'fa-level-up' => 'fa-level-up',
306
- 'fa-level-down' => 'fa-level-down',
307
- 'fa-check-square' => 'fa-check-square',
308
- 'fa-pencil-square' => 'fa-pencil-square',
309
- 'fa-external-link-square' => 'fa-external-link-square',
310
- 'fa-share-square' => 'fa-share-square',
311
- 'fa-compass' => 'fa-compass',
312
- 'fa-caret-square-o-down' => 'fa-caret-square-o-down',
313
- 'fa-caret-square-o-up' => 'fa-caret-square-o-up',
314
- 'fa-caret-square-o-right' => 'fa-caret-square-o-right',
315
- 'fa-eur' => 'fa-eur',
316
- 'fa-gbp' => 'fa-gbp',
317
- 'fa-usd' => 'fa-usd',
318
- 'fa-inr' => 'fa-inr',
319
- 'fa-jpy' => 'fa-jpy',
320
- 'fa-rub' => 'fa-rub',
321
- 'fa-krw' => 'fa-krw',
322
- 'fa-btc' => 'fa-btc',
323
- 'fa-file' => 'fa-file',
324
- 'fa-file-text' => 'fa-file-text',
325
- 'fa-sort-alpha-asc' => 'fa-sort-alpha-asc',
326
- 'fa-sort-alpha-desc' => 'fa-sort-alpha-desc',
327
- 'fa-sort-amount-asc' => 'fa-sort-amount-asc',
328
- 'fa-sort-amount-desc' => 'fa-sort-amount-desc',
329
- 'fa-sort-numeric-asc' => 'fa-sort-numeric-asc',
330
- 'fa-sort-numeric-desc' => 'fa-sort-numeric-desc',
331
- 'fa-thumbs-up' => 'fa-thumbs-up',
332
- 'fa-thumbs-down' => 'fa-thumbs-down',
333
- 'fa-youtube-square' => 'fa-youtube-square',
334
- 'fa-youtube' => 'fa-youtube',
335
- 'fa-xing' => 'fa-xing',
336
- 'fa-xing-square' => 'fa-xing-square',
337
- 'fa-youtube-play' => 'fa-youtube-play',
338
- 'fa-dropbox' => 'fa-dropbox',
339
- 'fa-stack-overflow' => 'fa-stack-overflow',
340
- 'fa-instagram' => 'fa-instagram',
341
- 'fa-flickr' => 'fa-flickr',
342
- 'fa-adn' => 'fa-adn',
343
- 'fa-bitbucket' => 'fa-bitbucket',
344
- 'fa-bitbucket-square' => 'fa-bitbucket-square',
345
- 'fa-tumblr' => 'fa-tumblr',
346
- 'fa-tumblr-square' => 'fa-tumblr-square',
347
- 'fa-long-arrow-down' => 'fa-long-arrow-down',
348
- 'fa-long-arrow-up' => 'fa-long-arrow-up',
349
- 'fa-long-arrow-left' => 'fa-long-arrow-left',
350
- 'fa-long-arrow-right' => 'fa-long-arrow-right',
351
- 'fa-apple' => 'fa-apple',
352
- 'fa-windows' => 'fa-windows',
353
- 'fa-android' => 'fa-android',
354
- 'fa-linux' => 'fa-linux',
355
- 'fa-dribbble' => 'fa-dribbble',
356
- 'fa-skype' => 'fa-skype',
357
- 'fa-foursquare' => 'fa-foursquare',
358
- 'fa-trello' => 'fa-trello',
359
- 'fa-female' => 'fa-female',
360
- 'fa-male' => 'fa-male',
361
- 'fa-gratipay' => 'fa-gratipay',
362
- 'fa-sun-o' => 'fa-sun-o',
363
- 'fa-moon-o' => 'fa-moon-o',
364
- 'fa-archive' => 'fa-archive',
365
- 'fa-bug' => 'fa-bug',
366
- 'fa-vk' => 'fa-vk',
367
- 'fa-weibo' => 'fa-weibo',
368
- 'fa-renren' => 'fa-renren',
369
- 'fa-pagelines' => 'fa-pagelines',
370
- 'fa-stack-exchange' => 'fa-stack-exchange',
371
- 'fa-arrow-circle-o-right' => 'fa-arrow-circle-o-right',
372
- 'fa-arrow-circle-o-left' => 'fa-arrow-circle-o-left',
373
- 'fa-caret-square-o-left' => 'fa-caret-square-o-left',
374
- 'fa-dot-circle-o' => 'fa-dot-circle-o',
375
- 'fa-wheelchair' => 'fa-wheelchair',
376
- 'fa-vimeo-square' => 'fa-vimeo-square',
377
- 'fa-try' => 'fa-try',
378
- 'fa-plus-square-o' => 'fa-plus-square-o',
379
- 'fa-space-shuttle' => 'fa-space-shuttle',
380
- 'fa-slack' => 'fa-slack',
381
- 'fa-envelope-square' => 'fa-envelope-square',
382
- 'fa-wordpress' => 'fa-wordpress',
383
- 'fa-openid' => 'fa-openid',
384
- 'fa-university' => 'fa-university',
385
- 'fa-graduation-cap' => 'fa-graduation-cap',
386
- 'fa-yahoo' => 'fa-yahoo',
387
- 'fa-google' => 'fa-google',
388
- 'fa-reddit' => 'fa-reddit',
389
- 'fa-reddit-square' => 'fa-reddit-square',
390
- 'fa-stumbleupon-circle' => 'fa-stumbleupon-circle',
391
- 'fa-stumbleupon' => 'fa-stumbleupon',
392
- 'fa-delicious' => 'fa-delicious',
393
- 'fa-digg' => 'fa-digg',
394
- 'fa-pied-piper-pp' => 'fa-pied-piper-pp',
395
- 'fa-pied-piper-alt' => 'fa-pied-piper-alt',
396
- 'fa-drupal' => 'fa-drupal',
397
- 'fa-joomla' => 'fa-joomla',
398
- 'fa-language' => 'fa-language',
399
- 'fa-fax' => 'fa-fax',
400
- 'fa-building' => 'fa-building',
401
- 'fa-child' => 'fa-child',
402
- 'fa-paw' => 'fa-paw',
403
- 'fa-spoon' => 'fa-spoon',
404
- 'fa-cube' => 'fa-cube',
405
- 'fa-cubes' => 'fa-cubes',
406
- 'fa-behance' => 'fa-behance',
407
- 'fa-behance-square' => 'fa-behance-square',
408
- 'fa-steam' => 'fa-steam',
409
- 'fa-steam-square' => 'fa-steam-square',
410
- 'fa-recycle' => 'fa-recycle',
411
- 'fa-car' => 'fa-car',
412
- 'fa-taxi' => 'fa-taxi',
413
- 'fa-tree' => 'fa-tree',
414
- 'fa-spotify' => 'fa-spotify',
415
- 'fa-deviantart' => 'fa-deviantart',
416
- 'fa-soundcloud' => 'fa-soundcloud',
417
- 'fa-database' => 'fa-database',
418
- 'fa-file-pdf-o' => 'fa-file-pdf-o',
419
- 'fa-file-word-o' => 'fa-file-word-o',
420
- 'fa-file-excel-o' => 'fa-file-excel-o',
421
- 'fa-file-powerpoint-o' => 'fa-file-powerpoint-o',
422
- 'fa-file-image-o' => 'fa-file-image-o',
423
- 'fa-file-archive-o' => 'fa-file-archive-o',
424
- 'fa-file-audio-o' => 'fa-file-audio-o',
425
- 'fa-file-video-o' => 'fa-file-video-o',
426
- 'fa-file-code-o' => 'fa-file-code-o',
427
- 'fa-vine' => 'fa-vine',
428
- 'fa-codepen' => 'fa-codepen',
429
- 'fa-jsfiddle' => 'fa-jsfiddle',
430
- 'fa-life-ring' => 'fa-life-ring',
431
- 'fa-circle-o-notch' => 'fa-circle-o-notch',
432
- 'fa-rebel' => 'fa-rebel',
433
- 'fa-empire' => 'fa-empire',
434
- 'fa-git-square' => 'fa-git-square',
435
- 'fa-git' => 'fa-git',
436
- 'fa-hacker-news' => 'fa-hacker-news',
437
- 'fa-tencent-weibo' => 'fa-tencent-weibo',
438
- 'fa-qq' => 'fa-qq',
439
- 'fa-weixin' => 'fa-weixin',
440
- 'fa-paper-plane' => 'fa-paper-plane',
441
- 'fa-paper-plane-o' => 'fa-paper-plane-o',
442
- 'fa-history' => 'fa-history',
443
- 'fa-circle-thin' => 'fa-circle-thin',
444
- 'fa-header' => 'fa-header',
445
- 'fa-paragraph' => 'fa-paragraph',
446
- 'fa-sliders' => 'fa-sliders',
447
- 'fa-share-alt' => 'fa-share-alt',
448
- 'fa-share-alt-square' => 'fa-share-alt-square',
449
- 'fa-bomb' => 'fa-bomb',
450
- 'fa-futbol-o' => 'fa-futbol-o',
451
- 'fa-tty' => 'fa-tty',
452
- 'fa-binoculars' => 'fa-binoculars',
453
- 'fa-plug' => 'fa-plug',
454
- 'fa-slideshare' => 'fa-slideshare',
455
- 'fa-twitch' => 'fa-twitch',
456
- 'fa-yelp' => 'fa-yelp',
457
- 'fa-newspaper-o' => 'fa-newspaper-o',
458
- 'fa-wifi' => 'fa-wifi',
459
- 'fa-calculator' => 'fa-calculator',
460
- 'fa-paypal' => 'fa-paypal',
461
- 'fa-google-wallet' => 'fa-google-wallet',
462
- 'fa-cc-visa' => 'fa-cc-visa',
463
- 'fa-cc-mastercard' => 'fa-cc-mastercard',
464
- 'fa-cc-discover' => 'fa-cc-discover',
465
- 'fa-cc-amex' => 'fa-cc-amex',
466
- 'fa-cc-paypal' => 'fa-cc-paypal',
467
- 'fa-cc-stripe' => 'fa-cc-stripe',
468
- 'fa-bell-slash' => 'fa-bell-slash',
469
- 'fa-bell-slash-o' => 'fa-bell-slash-o',
470
- 'fa-trash' => 'fa-trash',
471
- 'fa-copyright' => 'fa-copyright',
472
- 'fa-at' => 'fa-at',
473
- 'fa-eyedropper' => 'fa-eyedropper',
474
- 'fa-paint-brush' => 'fa-paint-brush',
475
- 'fa-birthday-cake' => 'fa-birthday-cake',
476
- 'fa-area-chart' => 'fa-area-chart',
477
- 'fa-pie-chart' => 'fa-pie-chart',
478
- 'fa-line-chart' => 'fa-line-chart',
479
- 'fa-lastfm' => 'fa-lastfm',
480
- 'fa-lastfm-square' => 'fa-lastfm-square',
481
- 'fa-toggle-off' => 'fa-toggle-off',
482
- 'fa-toggle-on' => 'fa-toggle-on',
483
- 'fa-bicycle' => 'fa-bicycle',
484
- 'fa-bus' => 'fa-bus',
485
- 'fa-ioxhost' => 'fa-ioxhost',
486
- 'fa-angellist' => 'fa-angellist',
487
- 'fa-cc' => 'fa-cc',
488
- 'fa-ils' => 'fa-ils',
489
- 'fa-meanpath' => 'fa-meanpath',
490
- 'fa-buysellads' => 'fa-buysellads',
491
- 'fa-connectdevelop' => 'fa-connectdevelop',
492
- 'fa-dashcube' => 'fa-dashcube',
493
- 'fa-forumbee' => 'fa-forumbee',
494
- 'fa-leanpub' => 'fa-leanpub',
495
- 'fa-sellsy' => 'fa-sellsy',
496
- 'fa-shirtsinbulk' => 'fa-shirtsinbulk',
497
- 'fa-simplybuilt' => 'fa-simplybuilt',
498
- 'fa-skyatlas' => 'fa-skyatlas',
499
- 'fa-cart-plus' => 'fa-cart-plus',
500
- 'fa-cart-arrow-down' => 'fa-cart-arrow-down',
501
- 'fa-diamond' => 'fa-diamond',
502
- 'fa-ship' => 'fa-ship',
503
- 'fa-user-secret' => 'fa-user-secret',
504
- 'fa-motorcycle' => 'fa-motorcycle',
505
- 'fa-street-view' => 'fa-street-view',
506
- 'fa-heartbeat' => 'fa-heartbeat',
507
- 'fa-venus' => 'fa-venus',
508
- 'fa-mars' => 'fa-mars',
509
- 'fa-mercury' => 'fa-mercury',
510
- 'fa-transgender' => 'fa-transgender',
511
- 'fa-transgender-alt' => 'fa-transgender-alt',
512
- 'fa-venus-double' => 'fa-venus-double',
513
- 'fa-mars-double' => 'fa-mars-double',
514
- 'fa-venus-mars' => 'fa-venus-mars',
515
- 'fa-mars-stroke' => 'fa-mars-stroke',
516
- 'fa-mars-stroke-v' => 'fa-mars-stroke-v',
517
- 'fa-mars-stroke-h' => 'fa-mars-stroke-h',
518
- 'fa-neuter' => 'fa-neuter',
519
- 'fa-genderless' => 'fa-genderless',
520
- 'fa-facebook-official' => 'fa-facebook-official',
521
- 'fa-pinterest-p' => 'fa-pinterest-p',
522
- 'fa-whatsapp' => 'fa-whatsapp',
523
- 'fa-server' => 'fa-server',
524
- 'fa-user-plus' => 'fa-user-plus',
525
- 'fa-user-times' => 'fa-user-times',
526
- 'fa-bed' => 'fa-bed',
527
- 'fa-viacoin' => 'fa-viacoin',
528
- 'fa-train' => 'fa-train',
529
- 'fa-subway' => 'fa-subway',
530
- 'fa-medium' => 'fa-medium',
531
- 'fa-y-combinator' => 'fa-y-combinator',
532
- 'fa-optin-monster' => 'fa-optin-monster',
533
- 'fa-opencart' => 'fa-opencart',
534
- 'fa-expeditedssl' => 'fa-expeditedssl',
535
- 'fa-battery-full' => 'fa-battery-full',
536
- 'fa-battery-three-quarters' => 'fa-battery-three-quarters',
537
- 'fa-battery-half' => 'fa-battery-half',
538
- 'fa-battery-quarter' => 'fa-battery-quarter',
539
- 'fa-battery-empty' => 'fa-battery-empty',
540
- 'fa-mouse-pointer' => 'fa-mouse-pointer',
541
- 'fa-i-cursor' => 'fa-i-cursor',
542
- 'fa-object-group' => 'fa-object-group',
543
- 'fa-object-ungroup' => 'fa-object-ungroup',
544
- 'fa-sticky-note' => 'fa-sticky-note',
545
- 'fa-sticky-note-o' => 'fa-sticky-note-o',
546
- 'fa-cc-jcb' => 'fa-cc-jcb',
547
- 'fa-cc-diners-club' => 'fa-cc-diners-club',
548
- 'fa-clone' => 'fa-clone',
549
- 'fa-balance-scale' => 'fa-balance-scale',
550
- 'fa-hourglass-o' => 'fa-hourglass-o',
551
- 'fa-hourglass-start' => 'fa-hourglass-start',
552
- 'fa-hourglass-half' => 'fa-hourglass-half',
553
- 'fa-hourglass-end' => 'fa-hourglass-end',
554
- 'fa-hourglass' => 'fa-hourglass',
555
- 'fa-hand-rock-o' => 'fa-hand-rock-o',
556
- 'fa-hand-paper-o' => 'fa-hand-paper-o',
557
- 'fa-hand-scissors-o' => 'fa-hand-scissors-o',
558
- 'fa-hand-lizard-o' => 'fa-hand-lizard-o',
559
- 'fa-hand-spock-o' => 'fa-hand-spock-o',
560
- 'fa-hand-pointer-o' => 'fa-hand-pointer-o',
561
- 'fa-hand-peace-o' => 'fa-hand-peace-o',
562
- 'fa-trademark' => 'fa-trademark',
563
- 'fa-registered' => 'fa-registered',
564
- 'fa-creative-commons' => 'fa-creative-commons',
565
- 'fa-gg' => 'fa-gg',
566
- 'fa-gg-circle' => 'fa-gg-circle',
567
- 'fa-tripadvisor' => 'fa-tripadvisor',
568
- 'fa-odnoklassniki' => 'fa-odnoklassniki',
569
- 'fa-odnoklassniki-square' => 'fa-odnoklassniki-square',
570
- 'fa-get-pocket' => 'fa-get-pocket',
571
- 'fa-wikipedia-w' => 'fa-wikipedia-w',
572
- 'fa-safari' => 'fa-safari',
573
- 'fa-chrome' => 'fa-chrome',
574
- 'fa-firefox' => 'fa-firefox',
575
- 'fa-opera' => 'fa-opera',
576
- 'fa-internet-explorer' => 'fa-internet-explorer',
577
- 'fa-television' => 'fa-television',
578
- 'fa-contao' => 'fa-contao',
579
- 'fa-500px' => 'fa-500px',
580
- 'fa-amazon' => 'fa-amazon',
581
- 'fa-calendar-plus-o' => 'fa-calendar-plus-o',
582
- 'fa-calendar-minus-o' => 'fa-calendar-minus-o',
583
- 'fa-calendar-times-o' => 'fa-calendar-times-o',
584
- 'fa-calendar-check-o' => 'fa-calendar-check-o',
585
- 'fa-industry' => 'fa-industry',
586
- 'fa-map-pin' => 'fa-map-pin',
587
- 'fa-map-signs' => 'fa-map-signs',
588
- 'fa-map-o' => 'fa-map-o',
589
- 'fa-map' => 'fa-map',
590
- 'fa-commenting' => 'fa-commenting',
591
- 'fa-commenting-o' => 'fa-commenting-o',
592
- 'fa-houzz' => 'fa-houzz',
593
- 'fa-vimeo' => 'fa-vimeo',
594
- 'fa-black-tie' => 'fa-black-tie',
595
- 'fa-fonticons' => 'fa-fonticons',
596
- 'fa-reddit-alien' => 'fa-reddit-alien',
597
- 'fa-edge' => 'fa-edge',
598
- 'fa-credit-card-alt' => 'fa-credit-card-alt',
599
- 'fa-codiepie' => 'fa-codiepie',
600
- 'fa-modx' => 'fa-modx',
601
- 'fa-fort-awesome' => 'fa-fort-awesome',
602
- 'fa-usb' => 'fa-usb',
603
- 'fa-product-hunt' => 'fa-product-hunt',
604
- 'fa-mixcloud' => 'fa-mixcloud',
605
- 'fa-scribd' => 'fa-scribd',
606
- 'fa-pause-circle' => 'fa-pause-circle',
607
- 'fa-pause-circle-o' => 'fa-pause-circle-o',
608
- 'fa-stop-circle' => 'fa-stop-circle',
609
- 'fa-stop-circle-o' => 'fa-stop-circle-o',
610
- 'fa-shopping-bag' => 'fa-shopping-bag',
611
- 'fa-shopping-basket' => 'fa-shopping-basket',
612
- 'fa-hashtag' => 'fa-hashtag',
613
- 'fa-bluetooth' => 'fa-bluetooth',
614
- 'fa-bluetooth-b' => 'fa-bluetooth-b',
615
- 'fa-percent' => 'fa-percent',
616
- 'fa-gitlab' => 'fa-gitlab',
617
- 'fa-wpbeginner' => 'fa-wpbeginner',
618
- 'fa-wpforms' => 'fa-wpforms',
619
- 'fa-envira' => 'fa-envira',
620
- 'fa-universal-access' => 'fa-universal-access',
621
- 'fa-wheelchair-alt' => 'fa-wheelchair-alt',
622
- 'fa-question-circle-o' => 'fa-question-circle-o',
623
- 'fa-blind' => 'fa-blind',
624
- 'fa-audio-description' => 'fa-audio-description',
625
- 'fa-volume-control-phone' => 'fa-volume-control-phone',
626
- 'fa-braille' => 'fa-braille',
627
- 'fa-assistive-listening-systems' => 'fa-assistive-listening-systems',
628
- 'fa-american-sign-language-interpreting' => 'fa-american-sign-language-interpreting',
629
- 'fa-deaf' => 'fa-deaf',
630
- 'fa-glide' => 'fa-glide',
631
- 'fa-glide-g' => 'fa-glide-g',
632
- 'fa-sign-language' => 'fa-sign-language',
633
- 'fa-low-vision' => 'fa-low-vision',
634
- 'fa-viadeo' => 'fa-viadeo',
635
- 'fa-viadeo-square' => 'fa-viadeo-square',
636
- 'fa-snapchat' => 'fa-snapchat',
637
- 'fa-snapchat-ghost' => 'fa-snapchat-ghost',
638
- 'fa-snapchat-square' => 'fa-snapchat-square',
639
- 'fa-pied-piper' => 'fa-pied-piper',
640
- 'fa-first-order' => 'fa-first-order',
641
- 'fa-yoast' => 'fa-yoast',
642
- 'fa-themeisle' => 'fa-themeisle'
643
- );
644
- return $icons;
645
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/controls/icon-picker/inc/genericons-icons.php DELETED
@@ -1,160 +0,0 @@
1
- <?php
2
- /**
3
- * This is a list of all the Genericons icons.
4
- *
5
- * @package O2 Customizer Library
6
- * @subpackage Icon Picker
7
- * @since 0.1
8
- */
9
- function startkit_genericons_list() {
10
- $icons = array(
11
- 'genericon-404' => 'genericon-404',
12
- 'genericon-activity' => 'genericon-activity',
13
- 'genericon-anchor' => 'genericon-anchor',
14
- 'genericon-aside' => 'genericon-aside',
15
- 'genericon-attachment' => 'genericon-attachment',
16
- 'genericon-audio' => 'genericon-audio',
17
- 'genericon-bold' => 'genericon-bold',
18
- 'genericon-book' => 'genericon-book',
19
- 'genericon-bug' => 'genericon-bug',
20
- 'genericon-cart' => 'genericon-cart',
21
- 'genericon-category' => 'genericon-category',
22
- 'genericon-chat' => 'genericon-chat',
23
- 'genericon-checkmark' => 'genericon-checkmark',
24
- 'genericon-close' => 'genericon-close',
25
- 'genericon-close-alt' => 'genericon-close-alt',
26
- 'genericon-cloud' => 'genericon-cloud',
27
- 'genericon-cloud-download' => 'genericon-cloud-download',
28
- 'genericon-cloud-upload' => 'genericon-cloud-upload',
29
- 'genericon-code' => 'genericon-code',
30
- 'genericon-codepen' => 'genericon-codepen',
31
- 'genericon-cog' => 'genericon-cog',
32
- 'genericon-collapse' => 'genericon-collapse',
33
- 'genericon-comment' => 'genericon-comment',
34
- 'genericon-day' => 'genericon-day',
35
- 'genericon-digg' => 'genericon-digg',
36
- 'genericon-document' => 'genericon-document',
37
- 'genericon-dot' => 'genericon-dot',
38
- 'genericon-downarrow' => 'genericon-downarrow',
39
- 'genericon-download' => 'genericon-download',
40
- 'genericon-draggable' => 'genericon-draggable',
41
- 'genericon-dribbble' => 'genericon-dribbble',
42
- 'genericon-dropbox' => 'genericon-dropbox',
43
- 'genericon-dropdown' => 'genericon-dropdown',
44
- 'genericon-dropdown-left' => 'genericon-dropdown-left',
45
- 'genericon-edit' => 'genericon-edit',
46
- 'genericon-ellipsis' => 'genericon-ellipsis',
47
- 'genericon-expand' => 'genericon-expand',
48
- 'genericon-external' => 'genericon-external',
49
- 'genericon-facebook' => 'genericon-facebook',
50
- 'genericon-facebook-alt' => 'genericon-facebook-alt',
51
- 'genericon-fastforward' => 'genericon-fastforward',
52
- 'genericon-feed' => 'genericon-feed',
53
- 'genericon-flag' => 'genericon-flag',
54
- 'genericon-flickr' => 'genericon-flickr',
55
- 'genericon-foursquare' => 'genericon-foursquare',
56
- 'genericon-fullscreen' => 'genericon-fullscreen',
57
- 'genericon-gallery' => 'genericon-gallery',
58
- 'genericon-github' => 'genericon-github',
59
- 'genericon-googleplus' => 'genericon-googleplus',
60
- 'genericon-googleplus-alt' => 'genericon-googleplus-alt',
61
- 'genericon-handset' => 'genericon-handset',
62
- 'genericon-heart' => 'genericon-heart',
63
- 'genericon-help' => 'genericon-help',
64
- 'genericon-hide' => 'genericon-hide',
65
- 'genericon-hierarchy' => 'genericon-hierarchy',
66
- 'genericon-home' => 'genericon-home',
67
- 'genericon-image' => 'genericon-image',
68
- 'genericon-info' => 'genericon-info',
69
- 'genericon-instagram' => 'genericon-instagram',
70
- 'genericon-italic' => 'genericon-italic',
71
- 'genericon-key' => 'genericon-key',
72
- 'genericon-leftarrow' => 'genericon-leftarrow',
73
- 'genericon-link' => 'genericon-link',
74
- 'genericon-linkedin' => 'genericon-linkedin',
75
- 'genericon-linkedin-alt' => 'genericon-linkedin-alt',
76
- 'genericon-location' => 'genericon-location',
77
- 'genericon-lock' => 'genericon-lock',
78
- 'genericon-mail' => 'genericon-mail',
79
- 'genericon-maximize' => 'genericon-maximize',
80
- 'genericon-menu' => 'genericon-menu',
81
- 'genericon-microphone' => 'genericon-microphone',
82
- 'genericon-minimize' => 'genericon-minimize',
83
- 'genericon-minus' => 'genericon-minus',
84
- 'genericon-month' => 'genericon-month',
85
- 'genericon-move' => 'genericon-move',
86
- 'genericon-next' => 'genericon-next',
87
- 'genericon-notice' => 'genericon-notice',
88
- 'genericon-paintbrush' => 'genericon-paintbrush',
89
- 'genericon-path' => 'genericon-path',
90
- 'genericon-pause' => 'genericon-pause',
91
- 'genericon-phone' => 'genericon-phone',
92
- 'genericon-picture' => 'genericon-picture',
93
- 'genericon-pinned' => 'genericon-pinned',
94
- 'genericon-pinterest' => 'genericon-pinterest',
95
- 'genericon-pinterest-alt' => 'genericon-pinterest-alt',
96
- 'genericon-play' => 'genericon-play',
97
- 'genericon-plugin' => 'genericon-plugin',
98
- 'genericon-plus' => 'genericon-plus',
99
- 'genericon-pocket' => 'genericon-pocket',
100
- 'genericon-polldaddy' => 'genericon-polldaddy',
101
- 'genericon-portfolio' => 'genericon-portfolio',
102
- 'genericon-previous' => 'genericon-previous',
103
- 'genericon-print' => 'genericon-print',
104
- 'genericon-quote' => 'genericon-quote',
105
- 'genericon-rating-empty' => 'genericon-rating-empty',
106
- 'genericon-rating-full' => 'genericon-rating-full',
107
- 'genericon-rating-half' => 'genericon-rating-half',
108
- 'genericon-reddit' => 'genericon-reddit',
109
- 'genericon-refresh' => 'genericon-refresh',
110
- 'genericon-reply' => 'genericon-reply',
111
- 'genericon-reply-alt' => 'genericon-reply-alt',
112
- 'genericon-reply-single' => 'genericon-reply-single',
113
- 'genericon-rewind' => 'genericon-rewind',
114
- 'genericon-rightarrow' => 'genericon-rightarrow',
115
- 'genericon-search' => 'genericon-search',
116
- 'genericon-send-to-phone' => 'genericon-send-to-phone',
117
- 'genericon-send-to-tablet' => 'genericon-send-to-tablet',
118
- 'genericon-share' => 'genericon-share',
119
- 'genericon-show' => 'genericon-show',
120
- 'genericon-shuffle' => 'genericon-shuffle',
121
- 'genericon-sitemap' => 'genericon-sitemap',
122
- 'genericon-skip-ahead' => 'genericon-skip-ahead',
123
- 'genericon-skip-back' => 'genericon-skip-back',
124
- 'genericon-skype' => 'genericon-skype',
125
- 'genericon-spam' => 'genericon-spam',
126
- 'genericon-spotify' => 'genericon-spotify',
127
- 'genericon-standard' => 'genericon-standard',
128
- 'genericon-star' => 'genericon-star',
129
- 'genericon-status' => 'genericon-status',
130
- 'genericon-stop' => 'genericon-stop',
131
- 'genericon-stumbleupon' => 'genericon-stumbleupon',
132
- 'genericon-subscribe' => 'genericon-subscribe',
133
- 'genericon-subscribed' => 'genericon-subscribed',
134
- 'genericon-summary' => 'genericon-summary',
135
- 'genericon-tablet' => 'genericon-tablet',
136
- 'genericon-tag' => 'genericon-tag',
137
- 'genericon-time' => 'genericon-time',
138
- 'genericon-top' => 'genericon-top',
139
- 'genericon-trash' => 'genericon-trash',
140
- 'genericon-tumblr' => 'genericon-tumblr',
141
- 'genericon-twitch' => 'genericon-twitch',
142
- 'genericon-twitter' => 'genericon-twitter',
143
- 'genericon-unapprove' => 'genericon-unapprove',
144
- 'genericon-unsubscribe' => 'genericon-unsubscribe',
145
- 'genericon-unzoom' => 'genericon-unzoom',
146
- 'genericon-uparrow' => 'genericon-uparrow',
147
- 'genericon-user' => 'genericon-user',
148
- 'genericon-video' => 'genericon-video',
149
- 'genericon-videocamera' => 'genericon-videocamera',
150
- 'genericon-vimeo' => 'genericon-vimeo',
151
- 'genericon-warning' => 'genericon-warning',
152
- 'genericon-website' => 'genericon-website',
153
- 'genericon-week' => 'genericon-week',
154
- 'genericon-wordpress' => 'genericon-wordpress',
155
- 'genericon-xpost' => 'genericon-xpost',
156
- 'genericon-youtube' => 'genericon-youtube',
157
- 'genericon-zoom' => 'genericon-zoom'
158
- );
159
- return $icons;
160
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/controls/select/assets/js/select-control.js DELETED
@@ -1,17 +0,0 @@
1
- wp.customize.controlConstructor['hantus-select'] = wp.customize.Control.extend({
2
-
3
- ready: function() {
4
- 'use strict';
5
-
6
- var control = this,
7
- element = this.container.find( 'select' );
8
-
9
- jQuery( element ).selectize();
10
-
11
- this.container.on( 'change', 'select', function() {
12
- selectValue = jQuery( this ).val();
13
- control.setting.set( selectValue );
14
- });
15
- }
16
-
17
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/controls/select/assets/js/selectize.js DELETED
@@ -1,3667 +0,0 @@
1
- /**
2
- * sifter.js
3
- * Copyright (c) 2013 Brian Reavis & contributors
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
6
- * file except in compliance with the License. You may obtain a copy of the License at:
7
- * http://www.apache.org/licenses/LICENSE-2.0
8
- *
9
- * Unless required by applicable law or agreed to in writing, software distributed under
10
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- * ANY KIND, either express or implied. See the License for the specific language
12
- * governing permissions and limitations under the License.
13
- *
14
- * @author Brian Reavis <brian@thirdroute.com>
15
- */
16
-
17
- (function(root, factory) {
18
- if (typeof define === 'function' && define.amd) {
19
- define('sifter', factory);
20
- } else if (typeof exports === 'object') {
21
- module.exports = factory();
22
- } else {
23
- root.Sifter = factory();
24
- }
25
- }(this, function() {
26
-
27
- /**
28
- * Textually searches arrays and hashes of objects
29
- * by property (or multiple properties). Designed
30
- * specifically for autocomplete.
31
- *
32
- * @constructor
33
- * @param {array|object} items
34
- * @param {object} items
35
- */
36
- var Sifter = function(items, settings) {
37
- this.items = items;
38
- this.settings = settings || {diacritics: true};
39
- };
40
-
41
- /**
42
- * Splits a search string into an array of individual
43
- * regexps to be used to match results.
44
- *
45
- * @param {string} query
46
- * @returns {array}
47
- */
48
- Sifter.prototype.tokenize = function(query) {
49
- query = trim(String(query || '').toLowerCase());
50
- if (!query || !query.length) return [];
51
-
52
- var i, n, regex, letter;
53
- var tokens = [];
54
- var words = query.split(/ +/);
55
-
56
- for (i = 0, n = words.length; i < n; i++) {
57
- regex = escape_regex(words[i]);
58
- if (this.settings.diacritics) {
59
- for (letter in DIACRITICS) {
60
- if (DIACRITICS.hasOwnProperty(letter)) {
61
- regex = regex.replace(new RegExp(letter, 'g'), DIACRITICS[letter]);
62
- }
63
- }
64
- }
65
- tokens.push({
66
- string : words[i],
67
- regex : new RegExp(regex, 'i')
68
- });
69
- }
70
-
71
- return tokens;
72
- };
73
-
74
- /**
75
- * Iterates over arrays and hashes.
76
- *
77
- * ```
78
- * this.iterator(this.items, function(item, id) {
79
- * // invoked for each item
80
- * });
81
- * ```
82
- *
83
- * @param {array|object} object
84
- */
85
- Sifter.prototype.iterator = function(object, callback) {
86
- var iterator;
87
- if (is_array(object)) {
88
- iterator = Array.prototype.forEach || function(callback) {
89
- for (var i = 0, n = this.length; i < n; i++) {
90
- callback(this[i], i, this);
91
- }
92
- };
93
- } else {
94
- iterator = function(callback) {
95
- for (var key in this) {
96
- if (this.hasOwnProperty(key)) {
97
- callback(this[key], key, this);
98
- }
99
- }
100
- };
101
- }
102
-
103
- iterator.apply(object, [callback]);
104
- };
105
-
106
- /**
107
- * Returns a function to be used to score individual results.
108
- *
109
- * Good matches will have a higher score than poor matches.
110
- * If an item is not a match, 0 will be returned by the function.
111
- *
112
- * @param {object|string} search
113
- * @param {object} options (optional)
114
- * @returns {function}
115
- */
116
- Sifter.prototype.getScoreFunction = function(search, options) {
117
- var self, fields, tokens, token_count;
118
-
119
- self = this;
120
- search = self.prepareSearch(search, options);
121
- tokens = search.tokens;
122
- fields = search.options.fields;
123
- token_count = tokens.length;
124
-
125
- /**
126
- * Calculates how close of a match the
127
- * given value is against a search token.
128
- *
129
- * @param {mixed} value
130
- * @param {object} token
131
- * @return {number}
132
- */
133
- var scoreValue = function(value, token) {
134
- var score, pos;
135
-
136
- if (!value) return 0;
137
- value = String(value || '');
138
- pos = value.search(token.regex);
139
- if (pos === -1) return 0;
140
- score = token.string.length / value.length;
141
- if (pos === 0) score += 0.5;
142
- return score;
143
- };
144
-
145
- /**
146
- * Calculates the score of an object
147
- * against the search query.
148
- *
149
- * @param {object} token
150
- * @param {object} data
151
- * @return {number}
152
- */
153
- var scoreObject = (function() {
154
- var field_count = fields.length;
155
- if (!field_count) {
156
- return function() { return 0; };
157
- }
158
- if (field_count === 1) {
159
- return function(token, data) {
160
- return scoreValue(data[fields[0]], token);
161
- };
162
- }
163
- return function(token, data) {
164
- for (var i = 0, sum = 0; i < field_count; i++) {
165
- sum += scoreValue(data[fields[i]], token);
166
- }
167
- return sum / field_count;
168
- };
169
- })();
170
-
171
- if (!token_count) {
172
- return function() { return 0; };
173
- }
174
- if (token_count === 1) {
175
- return function(data) {
176
- return scoreObject(tokens[0], data);
177
- };
178
- }
179
-
180
- if (search.options.conjunction === 'and') {
181
- return function(data) {
182
- var score;
183
- for (var i = 0, sum = 0; i < token_count; i++) {
184
- score = scoreObject(tokens[i], data);
185
- if (score <= 0) return 0;
186
- sum += score;
187
- }
188
- return sum / token_count;
189
- };
190
- } else {
191
- return function(data) {
192
- for (var i = 0, sum = 0; i < token_count; i++) {
193
- sum += scoreObject(tokens[i], data);
194
- }
195
- return sum / token_count;
196
- };
197
- }
198
- };
199
-
200
- /**
201
- * Returns a function that can be used to compare two
202
- * results, for sorting purposes. If no sorting should
203
- * be performed, `null` will be returned.
204
- *
205
- * @param {string|object} search
206
- * @param {object} options
207
- * @return function(a,b)
208
- */
209
- Sifter.prototype.getSortFunction = function(search, options) {
210
- var i, n, self, field, fields, fields_count, multiplier, multipliers, get_field, implicit_score, sort;
211
-
212
- self = this;
213
- search = self.prepareSearch(search, options);
214
- sort = (!search.query && options.sort_empty) || options.sort;
215
-
216
- /**
217
- * Fetches the specified sort field value
218
- * from a search result item.
219
- *
220
- * @param {string} name
221
- * @param {object} result
222
- * @return {mixed}
223
- */
224
- get_field = function(name, result) {
225
- if (name === '$score') return result.score;
226
- return self.items[result.id][name];
227
- };
228
-
229
- // parse options
230
- fields = [];
231
- if (sort) {
232
- for (i = 0, n = sort.length; i < n; i++) {
233
- if (search.query || sort[i].field !== '$score') {
234
- fields.push(sort[i]);
235
- }
236
- }
237
- }
238
-
239
- // the "$score" field is implied to be the primary
240
- // sort field, unless it's manually specified
241
- if (search.query) {
242
- implicit_score = true;
243
- for (i = 0, n = fields.length; i < n; i++) {
244
- if (fields[i].field === '$score') {
245
- implicit_score = false;
246
- break;
247
- }
248
- }
249
- if (implicit_score) {
250
- fields.unshift({field: '$score', direction: 'desc'});
251
- }
252
- } else {
253
- for (i = 0, n = fields.length; i < n; i++) {
254
- if (fields[i].field === '$score') {
255
- fields.splice(i, 1);
256
- break;
257
- }
258
- }
259
- }
260
-
261
- multipliers = [];
262
- for (i = 0, n = fields.length; i < n; i++) {
263
- multipliers.push(fields[i].direction === 'desc' ? -1 : 1);
264
- }
265
-
266
- // build function
267
- fields_count = fields.length;
268
- if (!fields_count) {
269
- return null;
270
- } else if (fields_count === 1) {
271
- field = fields[0].field;
272
- multiplier = multipliers[0];
273
- return function(a, b) {
274
- return multiplier * cmp(
275
- get_field(field, a),
276
- get_field(field, b)
277
- );
278
- };
279
- } else {
280
- return function(a, b) {
281
- var i, result, a_value, b_value, field;
282
- for (i = 0; i < fields_count; i++) {
283
- field = fields[i].field;
284
- result = multipliers[i] * cmp(
285
- get_field(field, a),
286
- get_field(field, b)
287
- );
288
- if (result) return result;
289
- }
290
- return 0;
291
- };
292
- }
293
- };
294
-
295
- /**
296
- * Parses a search query and returns an object
297
- * with tokens and fields ready to be populated
298
- * with results.
299
- *
300
- * @param {string} query
301
- * @param {object} options
302
- * @returns {object}
303
- */
304
- Sifter.prototype.prepareSearch = function(query, options) {
305
- if (typeof query === 'object') return query;
306
-
307
- options = extend({}, options);
308
-
309
- var option_fields = options.fields;
310
- var option_sort = options.sort;
311
- var option_sort_empty = options.sort_empty;
312
-
313
- if (option_fields && !is_array(option_fields)) options.fields = [option_fields];
314
- if (option_sort && !is_array(option_sort)) options.sort = [option_sort];
315
- if (option_sort_empty && !is_array(option_sort_empty)) options.sort_empty = [option_sort_empty];
316
-
317
- return {
318
- options : options,
319
- query : String(query || '').toLowerCase(),
320
- tokens : this.tokenize(query),
321
- total : 0,
322
- items : []
323
- };
324
- };
325
-
326
- /**
327
- * Searches through all items and returns a sorted array of matches.
328
- *
329
- * The `options` parameter can contain:
330
- *
331
- * - fields {string|array}
332
- * - sort {array}
333
- * - score {function}
334
- * - filter {bool}
335
- * - limit {integer}
336
- *
337
- * Returns an object containing:
338
- *
339
- * - options {object}
340
- * - query {string}
341
- * - tokens {array}
342
- * - total {int}
343
- * - items {array}
344
- *
345
- * @param {string} query
346
- * @param {object} options
347
- * @returns {object}
348
- */
349
- Sifter.prototype.search = function(query, options) {
350
- var self = this, value, score, search, calculateScore;
351
- var fn_sort;
352
- var fn_score;
353
-
354
- search = this.prepareSearch(query, options);
355
- options = search.options;
356
- query = search.query;
357
-
358
- // generate result scoring function
359
- fn_score = options.score || self.getScoreFunction(search);
360
-
361
- // perform search and sort
362
- if (query.length) {
363
- self.iterator(self.items, function(item, id) {
364
- score = fn_score(item);
365
- if (options.filter === false || score > 0) {
366
- search.items.push({'score': score, 'id': id});
367
- }
368
- });
369
- } else {
370
- self.iterator(self.items, function(item, id) {
371
- search.items.push({'score': 1, 'id': id});
372
- });
373
- }
374
-
375
- fn_sort = self.getSortFunction(search, options);
376
- if (fn_sort) search.items.sort(fn_sort);
377
-
378
- // apply limits
379
- search.total = search.items.length;
380
- if (typeof options.limit === 'number') {
381
- search.items = search.items.slice(0, options.limit);
382
- }
383
-
384
- return search;
385
- };
386
-
387
- // utilities
388
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
389
-
390
- var cmp = function(a, b) {
391
- if (typeof a === 'number' && typeof b === 'number') {
392
- return a > b ? 1 : (a < b ? -1 : 0);
393
- }
394
- a = asciifold(String(a || ''));
395
- b = asciifold(String(b || ''));
396
- if (a > b) return 1;
397
- if (b > a) return -1;
398
- return 0;
399
- };
400
-
401
- var extend = function(a, b) {
402
- var i, n, k, object;
403
- for (i = 1, n = arguments.length; i < n; i++) {
404
- object = arguments[i];
405
- if (!object) continue;
406
- for (k in object) {
407
- if (object.hasOwnProperty(k)) {
408
- a[k] = object[k];
409
- }
410
- }
411
- }
412
- return a;
413
- };
414
-
415
- var trim = function(str) {
416
- return (str + '').replace(/^\s+|\s+$|/g, '');
417
- };
418
-
419
- var escape_regex = function(str) {
420
- return (str + '').replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
421
- };
422
-
423
- var is_array = Array.isArray || ($ && $.isArray) || function(object) {
424
- return Object.prototype.toString.call(object) === '[object Array]';
425
- };
426
-
427
- var DIACRITICS = {
428
- 'a': '[aÀÁÂÃÄÅàáâãäåĀāąĄ]',
429
- 'c': '[cÇçćĆčČ]',
430
- 'd': '[dđĐďĎ]',
431
- 'e': '[eÈÉÊËèéêëěĚĒēęĘ]',
432
- 'i': '[iÌÍÎÏìíîïĪī]',
433
- 'l': '[lłŁ]',
434
- 'n': '[nÑñňŇńŃ]',
435
- 'o': '[oÒÓÔÕÕÖØòóôõöøŌō]',
436
- 'r': '[rřŘ]',
437
- 's': '[sŠšśŚ]',
438
- 't': '[tťŤ]',
439
- 'u': '[uÙÚÛÜùúûüůŮŪū]',
440
- 'y': '[yŸÿýÝ]',
441
- 'z': '[zŽžżŻźŹ]'
442
- };
443
-
444
- var asciifold = (function() {
445
- var i, n, k, chunk;
446
- var foreignletters = '';
447
- var lookup = {};
448
- for (k in DIACRITICS) {
449
- if (DIACRITICS.hasOwnProperty(k)) {
450
- chunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1);
451
- foreignletters += chunk;
452
- for (i = 0, n = chunk.length; i < n; i++) {
453
- lookup[chunk.charAt(i)] = k;
454
- }
455
- }
456
- }
457
- var regexp = new RegExp('[' + foreignletters + ']', 'g');
458
- return function(str) {
459
- return str.replace(regexp, function(foreignletter) {
460
- return lookup[foreignletter];
461
- }).toLowerCase();
462
- };
463
- })();
464
-
465
-
466
- // export
467
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
468
-
469
- return Sifter;
470
- }));
471
-
472
-
473
-
474
- /**
475
- * microplugin.js
476
- * Copyright (c) 2013 Brian Reavis & contributors
477
- *
478
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
479
- * file except in compliance with the License. You may obtain a copy of the License at:
480
- * http://www.apache.org/licenses/LICENSE-2.0
481
- *
482
- * Unless required by applicable law or agreed to in writing, software distributed under
483
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
484
- * ANY KIND, either express or implied. See the License for the specific language
485
- * governing permissions and limitations under the License.
486
- *
487
- * @author Brian Reavis <brian@thirdroute.com>
488
- */
489
-
490
- (function(root, factory) {
491
- if (typeof define === 'function' && define.amd) {
492
- define('microplugin', factory);
493
- } else if (typeof exports === 'object') {
494
- module.exports = factory();
495
- } else {
496
- root.MicroPlugin = factory();
497
- }
498
- }(this, function() {
499
- var MicroPlugin = {};
500
-
501
- MicroPlugin.mixin = function(Interface) {
502
- Interface.plugins = {};
503
-
504
- /**
505
- * Initializes the listed plugins (with options).
506
- * Acceptable formats:
507
- *
508
- * List (without options):
509
- * ['a', 'b', 'c']
510
- *
511
- * List (with options):
512
- * [{'name': 'a', options: {}}, {'name': 'b', options: {}}]
513
- *
514
- * Hash (with options):
515
- * {'a': { ... }, 'b': { ... }, 'c': { ... }}
516
- *
517
- * @param {mixed} plugins
518
- */
519
- Interface.prototype.initializePlugins = function(plugins) {
520
- var i, n, key;
521
- var self = this;
522
- var queue = [];
523
-
524
- self.plugins = {
525
- names : [],
526
- settings : {},
527
- requested : {},
528
- loaded : {}
529
- };
530
-
531
- if (utils.isArray(plugins)) {
532
- for (i = 0, n = plugins.length; i < n; i++) {
533
- if (typeof plugins[i] === 'string') {
534
- queue.push(plugins[i]);
535
- } else {
536
- self.plugins.settings[plugins[i].name] = plugins[i].options;
537
- queue.push(plugins[i].name);
538
- }
539
- }
540
- } else if (plugins) {
541
- for (key in plugins) {
542
- if (plugins.hasOwnProperty(key)) {
543
- self.plugins.settings[key] = plugins[key];
544
- queue.push(key);
545
- }
546
- }
547
- }
548
-
549
- while (queue.length) {
550
- self.require(queue.shift());
551
- }
552
- };
553
-
554
- Interface.prototype.loadPlugin = function(name) {
555
- var self = this;
556
- var plugins = self.plugins;
557
- var plugin = Interface.plugins[name];
558
-
559
- if (!Interface.plugins.hasOwnProperty(name)) {
560
- throw new Error('Unable to find "' + name + '" plugin');
561
- }
562
-
563
- plugins.requested[name] = true;
564
- plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);
565
- plugins.names.push(name);
566
- };
567
-
568
- /**
569
- * Initializes a plugin.
570
- *
571
- * @param {string} name
572
- */
573
- Interface.prototype.require = function(name) {
574
- var self = this;
575
- var plugins = self.plugins;
576
-
577
- if (!self.plugins.loaded.hasOwnProperty(name)) {
578
- if (plugins.requested[name]) {
579
- throw new Error('Plugin has circular dependency ("' + name + '")');
580
- }
581
- self.loadPlugin(name);
582
- }
583
-
584
- return plugins.loaded[name];
585
- };
586
-
587
- /**
588
- * Registers a plugin.
589
- *
590
- * @param {string} name
591
- * @param {function} fn
592
- */
593
- Interface.define = function(name, fn) {
594
- Interface.plugins[name] = {
595
- 'name' : name,
596
- 'fn' : fn
597
- };
598
- };
599
- };
600
-
601
- var utils = {
602
- isArray: Array.isArray || function(vArg) {
603
- return Object.prototype.toString.call(vArg) === '[object Array]';
604
- }
605
- };
606
-
607
- return MicroPlugin;
608
- }));
609
-
610
- /**
611
- * selectize.js (v0.12.1)
612
- * Copyright (c) 2013–2015 Brian Reavis & contributors
613
- *
614
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
615
- * file except in compliance with the License. You may obtain a copy of the License at:
616
- * http://www.apache.org/licenses/LICENSE-2.0
617
- *
618
- * Unless required by applicable law or agreed to in writing, software distributed under
619
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
620
- * ANY KIND, either express or implied. See the License for the specific language
621
- * governing permissions and limitations under the License.
622
- *
623
- * @author Brian Reavis <brian@thirdroute.com>
624
- */
625
-
626
- /*jshint curly:false */
627
- /*jshint browser:true */
628
-
629
- (function(root, factory) {
630
- if (typeof define === 'function' && define.amd) {
631
- define('selectize', ['jquery','sifter','microplugin'], factory);
632
- } else if (typeof exports === 'object') {
633
- module.exports = factory(require('jquery'), require('sifter'), require('microplugin'));
634
- } else {
635
- root.Selectize = factory(root.jQuery, root.Sifter, root.MicroPlugin);
636
- }
637
- }(this, function($, Sifter, MicroPlugin) {
638
- 'use strict';
639
-
640
- var highlight = function($element, pattern) {
641
- if (typeof pattern === 'string' && !pattern.length) return;
642
- var regex = (typeof pattern === 'string') ? new RegExp(pattern, 'i') : pattern;
643
-
644
- var highlight = function(node) {
645
- var skip = 0;
646
- if (node.nodeType === 3) {
647
- var pos = node.data.search(regex);
648
- if (pos >= 0 && node.data.length > 0) {
649
- var match = node.data.match(regex);
650
- var spannode = document.createElement('span');
651
- spannode.className = 'highlight';
652
- var middlebit = node.splitText(pos);
653
- var endbit = middlebit.splitText(match[0].length);
654
- var middleclone = middlebit.cloneNode(true);
655
- spannode.appendChild(middleclone);
656
- middlebit.parentNode.replaceChild(spannode, middlebit);
657
- skip = 1;
658
- }
659
- } else if (node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
660
- for (var i = 0; i < node.childNodes.length; ++i) {
661
- i += highlight(node.childNodes[i]);
662
- }
663
- }
664
- return skip;
665
- };
666
-
667
- return $element.each(function() {
668
- highlight(this);
669
- });
670
- };
671
-
672
- var MicroEvent = function() {};
673
- MicroEvent.prototype = {
674
- on: function(event, fct){
675
- this._events = this._events || {};
676
- this._events[event] = this._events[event] || [];
677
- this._events[event].push(fct);
678
- },
679
- off: function(event, fct){
680
- var n = arguments.length;
681
- if (n === 0) return delete this._events;
682
- if (n === 1) return delete this._events[event];
683
-
684
- this._events = this._events || {};
685
- if (event in this._events === false) return;
686
- this._events[event].splice(this._events[event].indexOf(fct), 1);
687
- },
688
- trigger: function(event /* , args... */){
689
- this._events = this._events || {};
690
- if (event in this._events === false) return;
691
- for (var i = 0; i < this._events[event].length; i++){
692
- this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1));
693
- }
694
- }
695
- };
696
-
697
- /**
698
- * Mixin will delegate all MicroEvent.js function in the destination object.
699
- *
700
- * - MicroEvent.mixin(Foobar) will make Foobar able to use MicroEvent
701
- *
702
- * @param {object} the object which will support MicroEvent
703
- */
704
- MicroEvent.mixin = function(destObject){
705
- var props = ['on', 'off', 'trigger'];
706
- for (var i = 0; i < props.length; i++){
707
- destObject.prototype[props[i]] = MicroEvent.prototype[props[i]];
708
- }
709
- };
710
-
711
- var IS_MAC = /Mac/.test(navigator.userAgent);
712
-
713
- var KEY_A = 65;
714
- var KEY_COMMA = 188;
715
- var KEY_RETURN = 13;
716
- var KEY_ESC = 27;
717
- var KEY_LEFT = 37;
718
- var KEY_UP = 38;
719
- var KEY_P = 80;
720
- var KEY_RIGHT = 39;
721
- var KEY_DOWN = 40;
722
- var KEY_N = 78;
723
- var KEY_BACKSPACE = 8;
724
- var KEY_DELETE = 46;
725
- var KEY_SHIFT = 16;
726
- var KEY_CMD = IS_MAC ? 91 : 17;
727
- var KEY_CTRL = IS_MAC ? 18 : 17;
728
- var KEY_TAB = 9;
729
-
730
- var TAG_SELECT = 1;
731
- var TAG_INPUT = 2;
732
-
733
- // for now, android support in general is too spotty to support validity
734
- var SUPPORTS_VALIDITY_API = !/android/i.test(window.navigator.userAgent) && !!document.createElement('form').validity;
735
-
736
- var isset = function(object) {
737
- return typeof object !== 'undefined';
738
- };
739
-
740
- /**
741
- * Converts a scalar to its best string representation
742
- * for hash keys and HTML attribute values.
743
- *
744
- * Transformations:
745
- * 'str' -> 'str'
746
- * null -> ''
747
- * undefined -> ''
748
- * true -> '1'
749
- * false -> '0'
750
- * 0 -> '0'
751
- * 1 -> '1'
752
- *
753
- * @param {string} value
754
- * @returns {string|null}
755
- */
756
- var hash_key = function(value) {
757
- if (typeof value === 'undefined' || value === null) return null;
758
- if (typeof value === 'boolean') return value ? '1' : '0';
759
- return value + '';
760
- };
761
-
762
- /**
763
- * Escapes a string for use within HTML.
764
- *
765
- * @param {string} str
766
- * @returns {string}
767
- */
768
- var escape_html = function(str) {
769
- return (str + '')
770
- .replace(/&/g, '&amp;')
771
- .replace(/</g, '&lt;')
772
- .replace(/>/g, '&gt;')
773
- .replace(/"/g, '&quot;');
774
- };
775
-
776
- /**
777
- * Escapes "$" characters in replacement strings.
778
- *
779
- * @param {string} str
780
- * @returns {string}
781
- */
782
- var escape_replace = function(str) {
783
- return (str + '').replace(/\$/g, '$$$$');
784
- };
785
-
786
- var hook = {};
787
-
788
- /**
789
- * Wraps `method` on `self` so that `fn`
790
- * is invoked before the original method.
791
- *
792
- * @param {object} self
793
- * @param {string} method
794
- * @param {function} fn
795
- */
796
- hook.before = function(self, method, fn) {
797
- var original = self[method];
798
- self[method] = function() {
799
- fn.apply(self, arguments);
800
- return original.apply(self, arguments);
801
- };
802
- };
803
-
804
- /**
805
- * Wraps `method` on `self` so that `fn`
806
- * is invoked after the original method.
807
- *
808
- * @param {object} self
809
- * @param {string} method
810
- * @param {function} fn
811
- */
812
- hook.after = function(self, method, fn) {
813
- var original = self[method];
814
- self[method] = function() {
815
- var result = original.apply(self, arguments);
816
- fn.apply(self, arguments);
817
- return result;
818
- };
819
- };
820
-
821
- /**
822
- * Wraps `fn` so that it can only be invoked once.
823
- *
824
- * @param {function} fn
825
- * @returns {function}
826
- */
827
- var once = function(fn) {
828
- var called = false;
829
- return function() {
830
- if (called) return;
831
- called = true;
832
- fn.apply(this, arguments);
833
- };
834
- };
835
-
836
- /**
837
- * Wraps `fn` so that it can only be called once
838
- * every `delay` milliseconds (invoked on the falling edge).
839
- *
840
- * @param {function} fn
841
- * @param {int} delay
842
- * @returns {function}
843
- */
844
- var debounce = function(fn, delay) {
845
- var timeout;
846
- return function() {
847
- var self = this;
848
- var args = arguments;
849
- window.clearTimeout(timeout);
850
- timeout = window.setTimeout(function() {
851
- fn.apply(self, args);
852
- }, delay);
853
- };
854
- };
855
-
856
- /**
857
- * Debounce all fired events types listed in `types`
858
- * while executing the provided `fn`.
859
- *
860
- * @param {object} self
861
- * @param {array} types
862
- * @param {function} fn
863
- */
864
- var debounce_events = function(self, types, fn) {
865
- var type;
866
- var trigger = self.trigger;
867
- var event_args = {};
868
-
869
- // override trigger method
870
- self.trigger = function() {
871
- var type = arguments[0];
872
- if (types.indexOf(type) !== -1) {
873
- event_args[type] = arguments;
874
- } else {
875
- return trigger.apply(self, arguments);
876
- }
877
- };
878
-
879
- // invoke provided function
880
- fn.apply(self, []);
881
- self.trigger = trigger;
882
-
883
- // trigger queued events
884
- for (type in event_args) {
885
- if (event_args.hasOwnProperty(type)) {
886
- trigger.apply(self, event_args[type]);
887
- }
888
- }
889
- };
890
-
891
- /**
892
- * A workaround for http://bugs.jquery.com/ticket/6696
893
- *
894
- * @param {object} $parent - Parent element to listen on.
895
- * @param {string} event - Event name.
896
- * @param {string} selector - Descendant selector to filter by.
897
- * @param {function} fn - Event handler.
898
- */
899
- var watchChildEvent = function($parent, event, selector, fn) {
900
- $parent.on(event, selector, function(e) {
901
- var child = e.target;
902
- while (child && child.parentNode !== $parent[0]) {
903
- child = child.parentNode;
904
- }
905
- e.currentTarget = child;
906
- return fn.apply(this, [e]);
907
- });
908
- };
909
-
910
- /**
911
- * Determines the current selection within a text input control.
912
- * Returns an object containing:
913
- * - start
914
- * - length
915
- *
916
- * @param {object} input
917
- * @returns {object}
918
- */
919
- var getSelection = function(input) {
920
- var result = {};
921
- if ('selectionStart' in input) {
922
- result.start = input.selectionStart;
923
- result.length = input.selectionEnd - result.start;
924
- } else if (document.selection) {
925
- input.focus();
926
- var sel = document.selection.createRange();
927
- var selLen = document.selection.createRange().text.length;
928
- sel.moveStart('character', -input.value.length);
929
- result.start = sel.text.length - selLen;
930
- result.length = selLen;
931
- }
932
- return result;
933
- };
934
-
935
- /**
936
- * Copies CSS properties from one element to another.
937
- *
938
- * @param {object} $from
939
- * @param {object} $to
940
- * @param {array} properties
941
- */
942
- var transferStyles = function($from, $to, properties) {
943
- var i, n, styles = {};
944
- if (properties) {
945
- for (i = 0, n = properties.length; i < n; i++) {
946
- styles[properties[i]] = $from.css(properties[i]);
947
- }
948
- } else {
949
- styles = $from.css();
950
- }
951
- $to.css(styles);
952
- };
953
-
954
- /**
955
- * Measures the width of a string within a
956
- * parent element (in pixels).
957
- *
958
- * @param {string} str
959
- * @param {object} $parent
960
- * @returns {int}
961
- */
962
- var measureString = function(str, $parent) {
963
- if (!str) {
964
- return 0;
965
- }
966
-
967
- var $test = $('<test>').css({
968
- position: 'absolute',
969
- top: -99999,
970
- left: -99999,
971
- width: 'auto',
972
- padding: 0,
973
- whiteSpace: 'pre'
974
- }).text(str).appendTo('body');
975
-
976
- transferStyles($parent, $test, [
977
- 'letterSpacing',
978
- 'fontSize',
979
- 'fontFamily',
980
- 'fontWeight',
981
- 'textTransform'
982
- ]);
983
-
984
- var width = $test.width();
985
- $test.remove();
986
-
987
- return width;
988
- };
989
-
990
- /**
991
- * Sets up an input to grow horizontally as the user
992
- * types. If the value is changed manually, you can
993
- * trigger the "update" handler to resize:
994
- *
995
- * $input.trigger('update');
996
- *
997
- * @param {object} $input
998
- */
999
- var autoGrow = function($input) {
1000
- var currentWidth = null;
1001
-
1002
- var update = function(e, options) {
1003
- var value, keyCode, printable, placeholder, width;
1004
- var shift, character, selection;
1005
- e = e || window.event || {};
1006
- options = options || {};
1007
-
1008
- if (e.metaKey || e.altKey) return;
1009
- if (!options.force && $input.data('grow') === false) return;
1010
-
1011
- value = $input.val();
1012
- if (e.type && e.type.toLowerCase() === 'keydown') {
1013
- keyCode = e.keyCode;
1014
- printable = (
1015
- (keyCode >= 97 && keyCode <= 122) || // a-z
1016
- (keyCode >= 65 && keyCode <= 90) || // A-Z
1017
- (keyCode >= 48 && keyCode <= 57) || // 0-9
1018
- keyCode === 32 // space
1019
- );
1020
-
1021
- if (keyCode === KEY_DELETE || keyCode === KEY_BACKSPACE) {
1022
- selection = getSelection($input[0]);
1023
- if (selection.length) {
1024
- value = value.substring(0, selection.start) + value.substring(selection.start + selection.length);
1025
- } else if (keyCode === KEY_BACKSPACE && selection.start) {
1026
- value = value.substring(0, selection.start - 1) + value.substring(selection.start + 1);
1027
- } else if (keyCode === KEY_DELETE && typeof selection.start !== 'undefined') {
1028
- value = value.substring(0, selection.start) + value.substring(selection.start + 1);
1029
- }
1030
- } else if (printable) {
1031
- shift = e.shiftKey;
1032
- character = String.fromCharCode(e.keyCode);
1033
- if (shift) character = character.toUpperCase();
1034
- else character = character.toLowerCase();
1035
- value += character;
1036
- }
1037
- }
1038
-
1039
- placeholder = $input.attr('placeholder');
1040
- if (!value && placeholder) {
1041
- value = placeholder;
1042
- }
1043
-
1044
- width = measureString(value, $input) + 4;
1045
- if (width !== currentWidth) {
1046
- currentWidth = width;
1047
- $input.width(width);
1048
- $input.triggerHandler('resize');
1049
- }
1050
- };
1051
-
1052
- $input.on('keydown keyup update blur', update);
1053
- update();
1054
- };
1055
-
1056
- var Selectize = function($input, settings) {
1057
- var key, i, n, dir, input, self = this;
1058
- input = $input[0];
1059
- input.selectize = self;
1060
-
1061
- // detect rtl environment
1062
- var computedStyle = window.getComputedStyle && window.getComputedStyle(input, null);
1063
- dir = computedStyle ? computedStyle.getPropertyValue('direction') : input.currentStyle && input.currentStyle.direction;
1064
- dir = dir || $input.parents('[dir]:first').attr('dir') || '';
1065
-
1066
- // setup default state
1067
- $.extend(self, {
1068
- order : 0,
1069
- settings : settings,
1070
- $input : $input,
1071
- tabIndex : $input.attr('tabindex') || '',
1072
- tagType : input.tagName.toLowerCase() === 'select' ? TAG_SELECT : TAG_INPUT,
1073
- rtl : /rtl/i.test(dir),
1074
-
1075
- eventNS : '.selectize' + (++Selectize.count),
1076
- highlightedValue : null,
1077
- isOpen : false,
1078
- isDisabled : false,
1079
- isRequired : $input.is('[required]'),
1080
- isInvalid : false,
1081
- isLocked : false,
1082
- isFocused : false,
1083
- isInputHidden : false,
1084
- isSetup : false,
1085
- isShiftDown : false,
1086
- isCmdDown : false,
1087
- isCtrlDown : false,
1088
- ignoreFocus : false,
1089
- ignoreBlur : false,
1090
- ignoreHover : false,
1091
- hasOptions : false,
1092
- currentResults : null,
1093
- lastValue : '',
1094
- caretPos : 0,
1095
- loading : 0,
1096
- loadedSearches : {},
1097
-
1098
- $activeOption : null,
1099
- $activeItems : [],
1100
-
1101
- optgroups : {},
1102
- options : {},
1103
- userOptions : {},
1104
- items : [],
1105
- renderCache : {},
1106
- onSearchChange : settings.loadThrottle === null ? self.onSearchChange : debounce(self.onSearchChange, settings.loadThrottle)
1107
- });
1108
-
1109
- // search system
1110
- self.sifter = new Sifter(this.options, {diacritics: settings.diacritics});
1111
-
1112
- // build options table
1113
- if (self.settings.options) {
1114
- for (i = 0, n = self.settings.options.length; i < n; i++) {
1115
- self.registerOption(self.settings.options[i]);
1116
- }
1117
- delete self.settings.options;
1118
- }
1119
-
1120
- // build optgroup table
1121
- if (self.settings.optgroups) {
1122
- for (i = 0, n = self.settings.optgroups.length; i < n; i++) {
1123
- self.registerOptionGroup(self.settings.optgroups[i]);
1124
- }
1125
- delete self.settings.optgroups;
1126
- }
1127
-
1128
- // option-dependent defaults
1129
- self.settings.mode = self.settings.mode || (self.settings.maxItems === 1 ? 'single' : 'multi');
1130
- if (typeof self.settings.hideSelected !== 'boolean') {
1131
- self.settings.hideSelected = self.settings.mode === 'multi';
1132
- }
1133
-
1134
- self.initializePlugins(self.settings.plugins);
1135
- self.setupCallbacks();
1136
- self.setupTemplates();
1137
- self.setup();
1138
- };
1139
-
1140
- // mixins
1141
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1142
-
1143
- MicroEvent.mixin(Selectize);
1144
- MicroPlugin.mixin(Selectize);
1145
-
1146
- // methods
1147
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1148
-
1149
- $.extend(Selectize.prototype, {
1150
-
1151
- /**
1152
- * Creates all elements and sets up event bindings.
1153
- */
1154
- setup: function() {
1155
- var self = this;
1156
- var settings = self.settings;
1157
- var eventNS = self.eventNS;
1158
- var $window = $(window);
1159
- var $document = $(document);
1160
- var $input = self.$input;
1161
-
1162
- var $wrapper;
1163
- var $control;
1164
- var $control_input;
1165
- var $dropdown;
1166
- var $dropdown_content;
1167
- var $dropdown_parent;
1168
- var inputMode;
1169
- var timeout_blur;
1170
- var timeout_focus;
1171
- var classes;
1172
- var classes_plugins;
1173
-
1174
- inputMode = self.settings.mode;
1175
- classes = $input.attr('class') || '';
1176
-
1177
- $wrapper = $('<div>').addClass(settings.wrapperClass).addClass(classes).addClass(inputMode);
1178
- $control = $('<div>').addClass(settings.inputClass).addClass('items').appendTo($wrapper);
1179
- $control_input = $('<input type="text" autocomplete="off" />').appendTo($control).attr('tabindex', $input.is(':disabled') ? '-1' : self.tabIndex);
1180
- $dropdown_parent = $(settings.dropdownParent || $wrapper);
1181
- $dropdown = $('<div>').addClass(settings.dropdownClass).addClass(inputMode).hide().appendTo($dropdown_parent);
1182
- $dropdown_content = $('<div>').addClass(settings.dropdownContentClass).appendTo($dropdown);
1183
-
1184
- if(self.settings.copyClassesToDropdown) {
1185
- $dropdown.addClass(classes);
1186
- }
1187
-
1188
- $wrapper.css({
1189
- width: $input[0].style.width
1190
- });
1191
-
1192
- if (self.plugins.names.length) {
1193
- classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-');
1194
- $wrapper.addClass(classes_plugins);
1195
- $dropdown.addClass(classes_plugins);
1196
- }
1197
-
1198
- if ((settings.maxItems === null || settings.maxItems > 1) && self.tagType === TAG_SELECT) {
1199
- $input.attr('multiple', 'multiple');
1200
- }
1201
-
1202
- if (self.settings.placeholder) {
1203
- $control_input.attr('placeholder', settings.placeholder);
1204
- }
1205
-
1206
- // if splitOn was not passed in, construct it from the delimiter to allow pasting universally
1207
- if (!self.settings.splitOn && self.settings.delimiter) {
1208
- var delimiterEscaped = self.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
1209
- self.settings.splitOn = new RegExp('\\s*' + delimiterEscaped + '+\\s*');
1210
- }
1211
-
1212
- if ($input.attr('autocorrect')) {
1213
- $control_input.attr('autocorrect', $input.attr('autocorrect'));
1214
- }
1215
-
1216
- if ($input.attr('autocapitalize')) {
1217
- $control_input.attr('autocapitalize', $input.attr('autocapitalize'));
1218
- }
1219
-
1220
- self.$wrapper = $wrapper;
1221
- self.$control = $control;
1222
- self.$control_input = $control_input;
1223
- self.$dropdown = $dropdown;
1224
- self.$dropdown_content = $dropdown_content;
1225
-
1226
- $dropdown.on('mouseenter', '[data-selectable]', function() { return self.onOptionHover.apply(self, arguments); });
1227
- $dropdown.on('mousedown click', '[data-selectable]', function() { return self.onOptionSelect.apply(self, arguments); });
1228
- watchChildEvent($control, 'mousedown', '*:not(input)', function() { return self.onItemSelect.apply(self, arguments); });
1229
- autoGrow($control_input);
1230
-
1231
- $control.on({
1232
- mousedown : function() { return self.onMouseDown.apply(self, arguments); },
1233
- click : function() { return self.onClick.apply(self, arguments); }
1234
- });
1235
-
1236
- $control_input.on({
1237
- mousedown : function(e) { e.stopPropagation(); },
1238
- keydown : function() { return self.onKeyDown.apply(self, arguments); },
1239
- keyup : function() { return self.onKeyUp.apply(self, arguments); },
1240
- keypress : function() { return self.onKeyPress.apply(self, arguments); },
1241
- resize : function() { self.positionDropdown.apply(self, []); },
1242
- blur : function() { return self.onBlur.apply(self, arguments); },
1243
- focus : function() { self.ignoreBlur = false; return self.onFocus.apply(self, arguments); },
1244
- paste : function() { return self.onPaste.apply(self, arguments); }
1245
- });
1246
-
1247
- $document.on('keydown' + eventNS, function(e) {
1248
- self.isCmdDown = e[IS_MAC ? 'metaKey' : 'ctrlKey'];
1249
- self.isCtrlDown = e[IS_MAC ? 'altKey' : 'ctrlKey'];
1250
- self.isShiftDown = e.shiftKey;
1251
- });
1252
-
1253
- $document.on('keyup' + eventNS, function(e) {
1254
- if (e.keyCode === KEY_CTRL) self.isCtrlDown = false;
1255
- if (e.keyCode === KEY_SHIFT) self.isShiftDown = false;
1256
- if (e.keyCode === KEY_CMD) self.isCmdDown = false;
1257
- });
1258
-
1259
- $document.on('mousedown' + eventNS, function(e) {
1260
- if (self.isFocused) {
1261
- // prevent events on the dropdown scrollbar from causing the control to blur
1262
- if (e.target === self.$dropdown[0] || e.target.parentNode === self.$dropdown[0]) {
1263
- return false;
1264
- }
1265
- // blur on click outside
1266
- if (!self.$control.has(e.target).length && e.target !== self.$control[0]) {
1267
- self.blur(e.target);
1268
- }
1269
- }
1270
- });
1271
-
1272
- $window.on(['scroll' + eventNS, 'resize' + eventNS].join(' '), function() {
1273
- if (self.isOpen) {
1274
- self.positionDropdown.apply(self, arguments);
1275
- }
1276
- });
1277
- $window.on('mousemove' + eventNS, function() {
1278
- self.ignoreHover = false;
1279
- });
1280
-
1281
- // store original children and tab index so that they can be
1282
- // restored when the destroy() method is called.
1283
- this.revertSettings = {
1284
- $children : $input.children().detach(),
1285
- tabindex : $input.attr('tabindex')
1286
- };
1287
-
1288
- $input.attr('tabindex', -1).hide().after(self.$wrapper);
1289
-
1290
- if ($.isArray(settings.items)) {
1291
- self.setValue(settings.items);
1292
- delete settings.items;
1293
- }
1294
-
1295
- // feature detect for the validation API
1296
- if (SUPPORTS_VALIDITY_API) {
1297
- $input.on('invalid' + eventNS, function(e) {
1298
- e.preventDefault();
1299
- self.isInvalid = true;
1300
- self.refreshState();
1301
- });
1302
- }
1303
-
1304
- self.updateOriginalInput();
1305
- self.refreshItems();
1306
- self.refreshState();
1307
- self.updatePlaceholder();
1308
- self.isSetup = true;
1309
-
1310
- if ($input.is(':disabled')) {
1311
- self.disable();
1312
- }
1313
-
1314
- self.on('change', this.onChange);
1315
-
1316
- $input.data('selectize', self);
1317
- $input.addClass('selectized');
1318
- self.trigger('initialize');
1319
-
1320
- // preload options
1321
- if (settings.preload === true) {
1322
- self.onSearchChange('');
1323
- }
1324
-
1325
- },
1326
-
1327
- /**
1328
- * Sets up default rendering functions.
1329
- */
1330
- setupTemplates: function() {
1331
- var self = this;
1332
- var field_label = self.settings.labelField;
1333
- var field_optgroup = self.settings.optgroupLabelField;
1334
-
1335
- var templates = {
1336
- 'optgroup': function(data) {
1337
- return '<div class="optgroup">' + data.html + '</div>';
1338
- },
1339
- 'optgroup_header': function(data, escape) {
1340
- return '<div class="optgroup-header">' + escape(data[field_optgroup]) + '</div>';
1341
- },
1342
- 'option': function(data, escape) {
1343
- return '<div class="option">' + escape(data[field_label]) + '</div>';
1344
- },
1345
- 'item': function(data, escape) {
1346
- return '<div class="item">' + escape(data[field_label]) + '</div>';
1347
- },
1348
- 'option_create': function(data, escape) {
1349
- return '<div class="create">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>';
1350
- }
1351
- };
1352
-
1353
- self.settings.render = $.extend({}, templates, self.settings.render);
1354
- },
1355
-
1356
- /**
1357
- * Maps fired events to callbacks provided
1358
- * in the settings used when creating the control.
1359
- */
1360
- setupCallbacks: function() {
1361
- var key, fn, callbacks = {
1362
- 'initialize' : 'onInitialize',
1363
- 'change' : 'onChange',
1364
- 'item_add' : 'onItemAdd',
1365
- 'item_remove' : 'onItemRemove',
1366
- 'clear' : 'onClear',
1367
- 'option_add' : 'onOptionAdd',
1368
- 'option_remove' : 'onOptionRemove',
1369
- 'option_clear' : 'onOptionClear',
1370
- 'optgroup_add' : 'onOptionGroupAdd',
1371
- 'optgroup_remove' : 'onOptionGroupRemove',
1372
- 'optgroup_clear' : 'onOptionGroupClear',
1373
- 'dropdown_open' : 'onDropdownOpen',
1374
- 'dropdown_close' : 'onDropdownClose',
1375
- 'type' : 'onType',
1376
- 'load' : 'onLoad',
1377
- 'focus' : 'onFocus',
1378
- 'blur' : 'onBlur'
1379
- };
1380
-
1381
- for (key in callbacks) {
1382
- if (callbacks.hasOwnProperty(key)) {
1383
- fn = this.settings[callbacks[key]];
1384
- if (fn) this.on(key, fn);
1385
- }
1386
- }
1387
- },
1388
-
1389
- /**
1390
- * Triggered when the main control element
1391
- * has a click event.
1392
- *
1393
- * @param {object} e
1394
- * @return {boolean}
1395
- */
1396
- onClick: function(e) {
1397
- var self = this;
1398
-
1399
- // necessary for mobile webkit devices (manual focus triggering
1400
- // is ignored unless invoked within a click event)
1401
- if (!self.isFocused) {
1402
- self.focus();
1403
- e.preventDefault();
1404
- }
1405
- },
1406
-
1407
- /**
1408
- * Triggered when the main control element
1409
- * has a mouse down event.
1410
- *
1411
- * @param {object} e
1412
- * @return {boolean}
1413
- */
1414
- onMouseDown: function(e) {
1415
- var self = this;
1416
- var defaultPrevented = e.isDefaultPrevented();
1417
- var $target = $(e.target);
1418
-
1419
- if (self.isFocused) {
1420
- // retain focus by preventing native handling. if the
1421
- // event target is the input it should not be modified.
1422
- // otherwise, text selection within the input won't work.
1423
- if (e.target !== self.$control_input[0]) {
1424
- if (self.settings.mode === 'single') {
1425
- // toggle dropdown
1426
- self.isOpen ? self.close() : self.open();
1427
- } else if (!defaultPrevented) {
1428
- self.setActiveItem(null);
1429
- }
1430
- return false;
1431
- }
1432
- } else {
1433
- // give control focus
1434
- if (!defaultPrevented) {
1435
- window.setTimeout(function() {
1436
- self.focus();
1437
- }, 0);
1438
- }
1439
- }
1440
- },
1441
-
1442
- /**
1443
- * Triggered when the value of the control has been changed.
1444
- * This should propagate the event to the original DOM
1445
- * input / select element.
1446
- */
1447
- onChange: function() {
1448
- this.$input.trigger('change');
1449
- },
1450
-
1451
- /**
1452
- * Triggered on <input> paste.
1453
- *
1454
- * @param {object} e
1455
- * @returns {boolean}
1456
- */
1457
- onPaste: function(e) {
1458
- var self = this;
1459
- if (self.isFull() || self.isInputHidden || self.isLocked) {
1460
- e.preventDefault();
1461
- } else {
1462
- // If a regex or string is included, this will split the pasted
1463
- // input and create Items for each separate value
1464
- if (self.settings.splitOn) {
1465
- setTimeout(function() {
1466
- var splitInput = $.trim(self.$control_input.val() || '').split(self.settings.splitOn);
1467
- for (var i = 0, n = splitInput.length; i < n; i++) {
1468
- self.createItem(splitInput[i]);
1469
- }
1470
- }, 0);
1471
- }
1472
- }
1473
- },
1474
-
1475
- /**
1476
- * Triggered on <input> keypress.
1477
- *
1478
- * @param {object} e
1479
- * @returns {boolean}
1480
- */
1481
- onKeyPress: function(e) {
1482
- if (this.isLocked) return e && e.preventDefault();
1483
- var character = String.fromCharCode(e.keyCode || e.which);
1484
- if (this.settings.create && this.settings.mode === 'multi' && character === this.settings.delimiter) {
1485
- this.createItem();
1486
- e.preventDefault();
1487
- return false;
1488
- }
1489
- },
1490
-
1491
- /**
1492
- * Triggered on <input> keydown.
1493
- *
1494
- * @param {object} e
1495
- * @returns {boolean}
1496
- */
1497
- onKeyDown: function(e) {
1498
- var isInput = e.target === this.$control_input[0];
1499
- var self = this;
1500
-
1501
- if (self.isLocked) {
1502
- if (e.keyCode !== KEY_TAB) {
1503
- e.preventDefault();
1504
- }
1505
- return;
1506
- }
1507
-
1508
- switch (e.keyCode) {
1509
- case KEY_A:
1510
- if (self.isCmdDown) {
1511
- self.selectAll();
1512
- return;
1513
- }
1514
- break;
1515
- case KEY_ESC:
1516
- if (self.isOpen) {
1517
- e.preventDefault();
1518
- e.stopPropagation();
1519
- self.close();
1520
- }
1521
- return;
1522
- case KEY_N:
1523
- if (!e.ctrlKey || e.altKey) break;
1524
- case KEY_DOWN:
1525
- if (!self.isOpen && self.hasOptions) {
1526
- self.open();
1527
- } else if (self.$activeOption) {
1528
- self.ignoreHover = true;
1529
- var $next = self.getAdjacentOption(self.$activeOption, 1);
1530
- if ($next.length) self.setActiveOption($next, true, true);
1531
- }
1532
- e.preventDefault();
1533
- return;
1534
- case KEY_P:
1535
- if (!e.ctrlKey || e.altKey) break;
1536
- case KEY_UP:
1537
- if (self.$activeOption) {
1538
- self.ignoreHover = true;
1539
- var $prev = self.getAdjacentOption(self.$activeOption, -1);
1540
- if ($prev.length) self.setActiveOption($prev, true, true);
1541
- }
1542
- e.preventDefault();
1543
- return;
1544
- case KEY_RETURN:
1545
- if (self.isOpen && self.$activeOption) {
1546
- self.onOptionSelect({currentTarget: self.$activeOption});
1547
- e.preventDefault();
1548
- }
1549
- return;
1550
- case KEY_LEFT:
1551
- self.advanceSelection(-1, e);
1552
- return;
1553
- case KEY_RIGHT:
1554
- self.advanceSelection(1, e);
1555
- return;
1556
- case KEY_TAB:
1557
- if (self.settings.selectOnTab && self.isOpen && self.$activeOption) {
1558
- self.onOptionSelect({currentTarget: self.$activeOption});
1559
-
1560
- // Default behaviour is to jump to the next field, we only want this
1561
- // if the current field doesn't accept any more entries
1562
- if (!self.isFull()) {
1563
- e.preventDefault();
1564
- }
1565
- }
1566
- if (self.settings.create && self.createItem()) {
1567
- e.preventDefault();
1568
- }
1569
- return;
1570
- case KEY_BACKSPACE:
1571
- case KEY_DELETE:
1572
- self.deleteSelection(e);
1573
- return;
1574
- }
1575
-
1576
- if ((self.isFull() || self.isInputHidden) && !(IS_MAC ? e.metaKey : e.ctrlKey)) {
1577
- e.preventDefault();
1578
- return;
1579
- }
1580
- },
1581
-
1582
- /**
1583
- * Triggered on <input> keyup.
1584
- *
1585
- * @param {object} e
1586
- * @returns {boolean}
1587
- */
1588
- onKeyUp: function(e) {
1589
- var self = this;
1590
-
1591
- if (self.isLocked) return e && e.preventDefault();
1592
- var value = self.$control_input.val() || '';
1593
- if (self.lastValue !== value) {
1594
- self.lastValue = value;
1595
- self.onSearchChange(value);
1596
- self.refreshOptions();
1597
- self.trigger('type', value);
1598
- }
1599
- },
1600
-
1601
- /**
1602
- * Invokes the user-provide option provider / loader.
1603
- *
1604
- * Note: this function is debounced in the Selectize
1605
- * constructor (by `settings.loadDelay` milliseconds)
1606
- *
1607
- * @param {string} value
1608
- */
1609
- onSearchChange: function(value) {
1610
- var self = this;
1611
- var fn = self.settings.load;
1612
- if (!fn) return;
1613
- if (self.loadedSearches.hasOwnProperty(value)) return;
1614
- self.loadedSearches[value] = true;
1615
- self.load(function(callback) {
1616
- fn.apply(self, [value, callback]);
1617
- });
1618
- },
1619
-
1620
- /**
1621
- * Triggered on <input> focus.
1622
- *
1623
- * @param {object} e (optional)
1624
- * @returns {boolean}
1625
- */
1626
- onFocus: function(e) {
1627
- var self = this;
1628
- var wasFocused = self.isFocused;
1629
-
1630
- if (self.isDisabled) {
1631
- self.blur();
1632
- e && e.preventDefault();
1633
- return false;
1634
- }
1635
-
1636
- if (self.ignoreFocus) return;
1637
- self.isFocused = true;
1638
- if (self.settings.preload === 'focus') self.onSearchChange('');
1639
-
1640
- if (!wasFocused) self.trigger('focus');
1641
-
1642
- if (!self.$activeItems.length) {
1643
- self.showInput();
1644
- self.setActiveItem(null);
1645
- self.refreshOptions(!!self.settings.openOnFocus);
1646
- }
1647
-
1648
- self.refreshState();
1649
- },
1650
-
1651
- /**
1652
- * Triggered on <input> blur.
1653
- *
1654
- * @param {object} e
1655
- * @param {Element} dest
1656
- */
1657
- onBlur: function(e, dest) {
1658
- var self = this;
1659
- if (!self.isFocused) return;
1660
- self.isFocused = false;
1661
-
1662
- if (self.ignoreFocus) {
1663
- return;
1664
- } else if (!self.ignoreBlur && document.activeElement === self.$dropdown_content[0]) {
1665
- // necessary to prevent IE closing the dropdown when the scrollbar is clicked
1666
- self.ignoreBlur = true;
1667
- self.onFocus(e);
1668
- return;
1669
- }
1670
-
1671
- var deactivate = function() {
1672
- self.close();
1673
- self.setTextboxValue('');
1674
- self.setActiveItem(null);
1675
- self.setActiveOption(null);
1676
- self.setCaret(self.items.length);
1677
- self.refreshState();
1678
-
1679
- // IE11 bug: element still marked as active
1680
- (dest || document.body).focus();
1681
-
1682
- self.ignoreFocus = false;
1683
- self.trigger('blur');
1684
- };
1685
-
1686
- self.ignoreFocus = true;
1687
- if (self.settings.create && self.settings.createOnBlur) {
1688
- self.createItem(null, false, deactivate);
1689
- } else {
1690
- deactivate();
1691
- }
1692
- },
1693
-
1694
- /**
1695
- * Triggered when the user rolls over
1696
- * an option in the autocomplete dropdown menu.
1697
- *
1698
- * @param {object} e
1699
- * @returns {boolean}
1700
- */
1701
- onOptionHover: function(e) {
1702
- if (this.ignoreHover) return;
1703
- this.setActiveOption(e.currentTarget, false);
1704
- },
1705
-
1706
- /**
1707
- * Triggered when the user clicks on an option
1708
- * in the autocomplete dropdown menu.
1709
- *
1710
- * @param {object} e
1711
- * @returns {boolean}
1712
- */
1713
- onOptionSelect: function(e) {
1714
- var value, $target, $option, self = this;
1715
-
1716
- if (e.preventDefault) {
1717
- e.preventDefault();
1718
- e.stopPropagation();
1719
- }
1720
-
1721
- $target = $(e.currentTarget);
1722
- if ($target.hasClass('create')) {
1723
- self.createItem(null, function() {
1724
- if (self.settings.closeAfterSelect) {
1725
- self.close();
1726
- }
1727
- });
1728
- } else {
1729
- value = $target.attr('data-value');
1730
- if (typeof value !== 'undefined') {
1731
- self.lastQuery = null;
1732
- self.setTextboxValue('');
1733
- self.addItem(value);
1734
- if (self.settings.closeAfterSelect) {
1735
- self.close();
1736
- } else if (!self.settings.hideSelected && e.type && /mouse/.test(e.type)) {
1737
- self.setActiveOption(self.getOption(value));
1738
- }
1739
- }
1740
- }
1741
- },
1742
-
1743
- /**
1744
- * Triggered when the user clicks on an item
1745
- * that has been selected.
1746
- *
1747
- * @param {object} e
1748
- * @returns {boolean}
1749
- */
1750
- onItemSelect: function(e) {
1751
- var self = this;
1752
-
1753
- if (self.isLocked) return;
1754
- if (self.settings.mode === 'multi') {
1755
- e.preventDefault();
1756
- self.setActiveItem(e.currentTarget, e);
1757
- }
1758
- },
1759
-
1760
- /**
1761
- * Invokes the provided method that provides
1762
- * results to a callback---which are then added
1763
- * as options to the control.
1764
- *
1765
- * @param {function} fn
1766
- */
1767
- load: function(fn) {
1768
- var self = this;
1769
- var $wrapper = self.$wrapper.addClass(self.settings.loadingClass);
1770
-
1771
- self.loading++;
1772
- fn.apply(self, [function(results) {
1773
- self.loading = Math.max(self.loading - 1, 0);
1774
- if (results && results.length) {
1775
- self.addOption(results);
1776
- self.refreshOptions(self.isFocused && !self.isInputHidden);
1777
- }
1778
- if (!self.loading) {
1779
- $wrapper.removeClass(self.settings.loadingClass);
1780
- }
1781
- self.trigger('load', results);
1782
- }]);
1783
- },
1784
-
1785
- /**
1786
- * Sets the input field of the control to the specified value.
1787
- *
1788
- * @param {string} value
1789
- */
1790
- setTextboxValue: function(value) {
1791
- var $input = this.$control_input;
1792
- var changed = $input.val() !== value;
1793
- if (changed) {
1794
- $input.val(value).triggerHandler('update');
1795
- this.lastValue = value;
1796
- }
1797
- },
1798
-
1799
- /**
1800
- * Returns the value of the control. If multiple items
1801
- * can be selected (e.g. <select multiple>), this returns
1802
- * an array. If only one item can be selected, this
1803
- * returns a string.
1804
- *
1805
- * @returns {mixed}
1806
- */
1807
- getValue: function() {
1808
- if (this.tagType === TAG_SELECT && this.$input.attr('multiple')) {
1809
- return this.items;
1810
- } else {
1811
- return this.items.join(this.settings.delimiter);
1812
- }
1813
- },
1814
-
1815
- /**
1816
- * Resets the selected items to the given value.
1817
- *
1818
- * @param {mixed} value
1819
- */
1820
- setValue: function(value, silent) {
1821
- var events = silent ? [] : ['change'];
1822
-
1823
- debounce_events(this, events, function() {
1824
- this.clear(silent);
1825
- this.addItems(value, silent);
1826
- });
1827
- },
1828
-
1829
- /**
1830
- * Sets the selected item.
1831
- *
1832
- * @param {object} $item
1833
- * @param {object} e (optional)
1834
- */
1835
- setActiveItem: function($item, e) {
1836
- var self = this;
1837
- var eventName;
1838
- var i, idx, begin, end, item, swap;
1839
- var $last;
1840
-
1841
- if (self.settings.mode === 'single') return;
1842
- $item = $($item);
1843
-
1844
- // clear the active selection
1845
- if (!$item.length) {
1846
- $(self.$activeItems).removeClass('active');
1847
- self.$activeItems = [];
1848
- if (self.isFocused) {
1849
- self.showInput();
1850
- }
1851
- return;
1852
- }
1853
-
1854
- // modify selection
1855
- eventName = e && e.type.toLowerCase();
1856
-
1857
- if (eventName === 'mousedown' && self.isShiftDown && self.$activeItems.length) {
1858
- $last = self.$control.children('.active:last');
1859
- begin = Array.prototype.indexOf.apply(self.$control[0].childNodes, [$last[0]]);
1860
- end = Array.prototype.indexOf.apply(self.$control[0].childNodes, [$item[0]]);
1861
- if (begin > end) {
1862
- swap = begin;
1863
- begin = end;
1864
- end = swap;
1865
- }
1866
- for (i = begin; i <= end; i++) {
1867
- item = self.$control[0].childNodes[i];
1868
- if (self.$activeItems.indexOf(item) === -1) {
1869
- $(item).addClass('active');
1870
- self.$activeItems.push(item);
1871
- }
1872
- }
1873
- e.preventDefault();
1874
- } else if ((eventName === 'mousedown' && self.isCtrlDown) || (eventName === 'keydown' && this.isShiftDown)) {
1875
- if ($item.hasClass('active')) {
1876
- idx = self.$activeItems.indexOf($item[0]);
1877
- self.$activeItems.splice(idx, 1);
1878
- $item.removeClass('active');
1879
- } else {
1880
- self.$activeItems.push($item.addClass('active')[0]);
1881
- }
1882
- } else {
1883
- $(self.$activeItems).removeClass('active');
1884
- self.$activeItems = [$item.addClass('active')[0]];
1885
- }
1886
-
1887
- // ensure control has focus
1888
- self.hideInput();
1889
- if (!this.isFocused) {
1890
- self.focus();
1891
- }
1892
- },
1893
-
1894
- /**
1895
- * Sets the selected item in the dropdown menu
1896
- * of available options.
1897
- *
1898
- * @param {object} $object
1899
- * @param {boolean} scroll
1900
- * @param {boolean} animate
1901
- */
1902
- setActiveOption: function($option, scroll, animate) {
1903
- var height_menu, height_item, y;
1904
- var scroll_top, scroll_bottom;
1905
- var self = this;
1906
-
1907
- if (self.$activeOption) self.$activeOption.removeClass('active');
1908
- self.$activeOption = null;
1909
-
1910
- $option = $($option);
1911
- if (!$option.length) return;
1912
-
1913
- self.$activeOption = $option.addClass('active');
1914
-
1915
- if (scroll || !isset(scroll)) {
1916
-
1917
- height_menu = self.$dropdown_content.height();
1918
- height_item = self.$activeOption.outerHeight(true);
1919
- scroll = self.$dropdown_content.scrollTop() || 0;
1920
- y = self.$activeOption.offset().top - self.$dropdown_content.offset().top + scroll;
1921
- scroll_top = y;
1922
- scroll_bottom = y - height_menu + height_item;
1923
-
1924
- if (y + height_item > height_menu + scroll) {
1925
- self.$dropdown_content.stop().animate({scrollTop: scroll_bottom}, animate ? self.settings.scrollDuration : 0);
1926
- } else if (y < scroll) {
1927
- self.$dropdown_content.stop().animate({scrollTop: scroll_top}, animate ? self.settings.scrollDuration : 0);
1928
- }
1929
-
1930
- }
1931
- },
1932
-
1933
- /**
1934
- * Selects all items (CTRL + A).
1935
- */
1936
- selectAll: function() {
1937
- var self = this;
1938
- if (self.settings.mode === 'single') return;
1939
-
1940
- self.$activeItems = Array.prototype.slice.apply(self.$control.children(':not(input)').addClass('active'));
1941
- if (self.$activeItems.length) {
1942
- self.hideInput();
1943
- self.close();
1944
- }
1945
- self.focus();
1946
- },
1947
-
1948
- /**
1949
- * Hides the input element out of view, while
1950
- * retaining its focus.
1951
- */
1952
- hideInput: function() {
1953
- var self = this;
1954
-
1955
- self.setTextboxValue('');
1956
- self.$control_input.css({opacity: 0, position: 'absolute', left: self.rtl ? 10000 : -10000});
1957
- self.isInputHidden = true;
1958
- },
1959
-
1960
- /**
1961
- * Restores input visibility.
1962
- */
1963
- showInput: function() {
1964
- this.$control_input.css({opacity: 1, position: 'relative', left: 0});
1965
- this.isInputHidden = false;
1966
- },
1967
-
1968
- /**
1969
- * Gives the control focus.
1970
- */
1971
- focus: function() {
1972
- var self = this;
1973
- if (self.isDisabled) return;
1974
-
1975
- self.ignoreFocus = true;
1976
- self.$control_input[0].focus();
1977
- window.setTimeout(function() {
1978
- self.ignoreFocus = false;
1979
- self.onFocus();
1980
- }, 0);
1981
- },
1982
-
1983
- /**
1984
- * Forces the control out of focus.
1985
- *
1986
- * @param {Element} dest
1987
- */
1988
- blur: function(dest) {
1989
- this.$control_input[0].blur();
1990
- this.onBlur(null, dest);
1991
- },
1992
-
1993
- /**
1994
- * Returns a function that scores an object
1995
- * to show how good of a match it is to the
1996
- * provided query.
1997
- *
1998
- * @param {string} query
1999
- * @param {object} options
2000
- * @return {function}
2001
- */
2002
- getScoreFunction: function(query) {
2003
- return this.sifter.getScoreFunction(query, this.getSearchOptions());
2004
- },
2005
-
2006
- /**
2007
- * Returns search options for sifter (the system
2008
- * for scoring and sorting results).
2009
- *
2010
- * @see https://github.com/brianreavis/sifter.js
2011
- * @return {object}
2012
- */
2013
- getSearchOptions: function() {
2014
- var settings = this.settings;
2015
- var sort = settings.sortField;
2016
- if (typeof sort === 'string') {
2017
- sort = [{field: sort}];
2018
- }
2019
-
2020
- return {
2021
- fields : settings.searchField,
2022
- conjunction : settings.searchConjunction,
2023
- sort : sort
2024
- };
2025
- },
2026
-
2027
- /**
2028
- * Searches through available options and returns
2029
- * a sorted array of matches.
2030
- *
2031
- * Returns an object containing:
2032
- *
2033
- * - query {string}
2034
- * - tokens {array}
2035
- * - total {int}
2036
- * - items {array}
2037
- *
2038
- * @param {string} query
2039
- * @returns {object}
2040
- */
2041
- search: function(query) {
2042
- var i, value, score, result, calculateScore;
2043
- var self = this;
2044
- var settings = self.settings;
2045
- var options = this.getSearchOptions();
2046
-
2047
- // validate user-provided result scoring function
2048
- if (settings.score) {
2049
- calculateScore = self.settings.score.apply(this, [query]);
2050
- if (typeof calculateScore !== 'function') {
2051
- throw new Error('Selectize "score" setting must be a function that returns a function');
2052
- }
2053
- }
2054
-
2055
- // perform search
2056
- if (query !== self.lastQuery) {
2057
- self.lastQuery = query;
2058
- result = self.sifter.search(query, $.extend(options, {score: calculateScore}));
2059
- self.currentResults = result;
2060
- } else {
2061
- result = $.extend(true, {}, self.currentResults);
2062
- }
2063
-
2064
- // filter out selected items
2065
- if (settings.hideSelected) {
2066
- for (i = result.items.length - 1; i >= 0; i--) {
2067
- if (self.items.indexOf(hash_key(result.items[i].id)) !== -1) {
2068
- result.items.splice(i, 1);
2069
- }
2070
- }
2071
- }
2072
-
2073
- return result;
2074
- },
2075
-
2076
- /**
2077
- * Refreshes the list of available options shown
2078
- * in the autocomplete dropdown menu.
2079
- *
2080
- * @param {boolean} triggerDropdown
2081
- */
2082
- refreshOptions: function(triggerDropdown) {
2083
- var i, j, k, n, groups, groups_order, option, option_html, optgroup, optgroups, html, html_children, has_create_option;
2084
- var $active, $active_before, $create;
2085
-
2086
- if (typeof triggerDropdown === 'undefined') {
2087
- triggerDropdown = true;
2088
- }
2089
-
2090
- var self = this;
2091
- var query = $.trim(self.$control_input.val());
2092
- var results = self.search(query);
2093
- var $dropdown_content = self.$dropdown_content;
2094
- var active_before = self.$activeOption && hash_key(self.$activeOption.attr('data-value'));
2095
-
2096
- // build markup
2097
- n = results.items.length;
2098
- if (typeof self.settings.maxOptions === 'number') {
2099
- n = Math.min(n, self.settings.maxOptions);
2100
- }
2101
-
2102
- // render and group available options individually
2103
- groups = {};
2104
- groups_order = [];
2105
-
2106
- for (i = 0; i < n; i++) {
2107
- option = self.options[results.items[i].id];
2108
- option_html = self.render('option', option);
2109
- optgroup = option[self.settings.optgroupField] || '';
2110
- optgroups = $.isArray(optgroup) ? optgroup : [optgroup];
2111
-
2112
- for (j = 0, k = optgroups && optgroups.length; j < k; j++) {
2113
- optgroup = optgroups[j];
2114
- if (!self.optgroups.hasOwnProperty(optgroup)) {
2115
- optgroup = '';
2116
- }
2117
- if (!groups.hasOwnProperty(optgroup)) {
2118
- groups[optgroup] = [];
2119
- groups_order.push(optgroup);
2120
- }
2121
- groups[optgroup].push(option_html);
2122
- }
2123
- }
2124
-
2125
- // sort optgroups
2126
- if (this.settings.lockOptgroupOrder) {
2127
- groups_order.sort(function(a, b) {
2128
- var a_order = self.optgroups[a].$order || 0;
2129
- var b_order = self.optgroups[b].$order || 0;
2130
- return a_order - b_order;
2131
- });
2132
- }
2133
-
2134
- // render optgroup headers & join groups
2135
- html = [];
2136
- for (i = 0, n = groups_order.length; i < n; i++) {
2137
- optgroup = groups_order[i];
2138
- if (self.optgroups.hasOwnProperty(optgroup) && groups[optgroup].length) {
2139
- // render the optgroup header and options within it,
2140
- // then pass it to the wrapper template
2141
- html_children = self.render('optgroup_header', self.optgroups[optgroup]) || '';
2142
- html_children += groups[optgroup].join('');
2143
- html.push(self.render('optgroup', $.extend({}, self.optgroups[optgroup], {
2144
- html: html_children
2145
- })));
2146
- } else {
2147
- html.push(groups[optgroup].join(''));
2148
- }
2149
- }
2150
-
2151
- $dropdown_content.html(html.join(''));
2152
-
2153
- // highlight matching terms inline
2154
- if (self.settings.highlight && results.query.length && results.tokens.length) {
2155
- for (i = 0, n = results.tokens.length; i < n; i++) {
2156
- highlight($dropdown_content, results.tokens[i].regex);
2157
- }
2158
- }
2159
-
2160
- // add "selected" class to selected options
2161
- if (!self.settings.hideSelected) {
2162
- for (i = 0, n = self.items.length; i < n; i++) {
2163
- self.getOption(self.items[i]).addClass('selected');
2164
- }
2165
- }
2166
-
2167
- // add create option
2168
- has_create_option = self.canCreate(query);
2169
- if (has_create_option) {
2170
- $dropdown_content.prepend(self.render('option_create', {input: query}));
2171
- $create = $($dropdown_content[0].childNodes[0]);
2172
- }
2173
-
2174
- // activate
2175
- self.hasOptions = results.items.length > 0 || has_create_option;
2176
- if (self.hasOptions) {
2177
- if (results.items.length > 0) {
2178
- $active_before = active_before && self.getOption(active_before);
2179
- if ($active_before && $active_before.length) {
2180
- $active = $active_before;
2181
- } else if (self.settings.mode === 'single' && self.items.length) {
2182
- $active = self.getOption(self.items[0]);
2183
- }
2184
- if (!$active || !$active.length) {
2185
- if ($create && !self.settings.addPrecedence) {
2186
- $active = self.getAdjacentOption($create, 1);
2187
- } else {
2188
- $active = $dropdown_content.find('[data-selectable]:first');
2189
- }
2190
- }
2191
- } else {
2192
- $active = $create;
2193
- }
2194
- self.setActiveOption($active);
2195
- if (triggerDropdown && !self.isOpen) { self.open(); }
2196
- } else {
2197
- self.setActiveOption(null);
2198
- if (triggerDropdown && self.isOpen) { self.close(); }
2199
- }
2200
- },
2201
-
2202
- /**
2203
- * Adds an available option. If it already exists,
2204
- * nothing will happen. Note: this does not refresh
2205
- * the options list dropdown (use `refreshOptions`
2206
- * for that).
2207
- *
2208
- * Usage:
2209
- *
2210
- * this.addOption(data)
2211
- *
2212
- * @param {object|array} data
2213
- */
2214
- addOption: function(data) {
2215
- var i, n, value, self = this;
2216
-
2217
- if ($.isArray(data)) {
2218
- for (i = 0, n = data.length; i < n; i++) {
2219
- self.addOption(data[i]);
2220
- }
2221
- return;
2222
- }
2223
-
2224
- if (value = self.registerOption(data)) {
2225
- self.userOptions[value] = true;
2226
- self.lastQuery = null;
2227
- self.trigger('option_add', value, data);
2228
- }
2229
- },
2230
-
2231
- /**
2232
- * Registers an option to the pool of options.
2233
- *
2234
- * @param {object} data
2235
- * @return {boolean|string}
2236
- */
2237
- registerOption: function(data) {
2238
- var key = hash_key(data[this.settings.valueField]);
2239
- if (!key || this.options.hasOwnProperty(key)) return false;
2240
- data.$order = data.$order || ++this.order;
2241
- this.options[key] = data;
2242
- return key;
2243
- },
2244
-
2245
- /**
2246
- * Registers an option group to the pool of option groups.
2247
- *
2248
- * @param {object} data
2249
- * @return {boolean|string}
2250
- */
2251
- registerOptionGroup: function(data) {
2252
- var key = hash_key(data[this.settings.optgroupValueField]);
2253
- if (!key) return false;
2254
-
2255
- data.$order = data.$order || ++this.order;
2256
- this.optgroups[key] = data;
2257
- return key;
2258
- },
2259
-
2260
- /**
2261
- * Registers a new optgroup for options
2262
- * to be bucketed into.
2263
- *
2264
- * @param {string} id
2265
- * @param {object} data
2266
- */
2267
- addOptionGroup: function(id, data) {
2268
- data[this.settings.optgroupValueField] = id;
2269
- if (id = this.registerOptionGroup(data)) {
2270
- this.trigger('optgroup_add', id, data);
2271
- }
2272
- },
2273
-
2274
- /**
2275
- * Removes an existing option group.
2276
- *
2277
- * @param {string} id
2278
- */
2279
- removeOptionGroup: function(id) {
2280
- if (this.optgroups.hasOwnProperty(id)) {
2281
- delete this.optgroups[id];
2282
- this.renderCache = {};
2283
- this.trigger('optgroup_remove', id);
2284
- }
2285
- },
2286
-
2287
- /**
2288
- * Clears all existing option groups.
2289
- */
2290
- clearOptionGroups: function() {
2291
- this.optgroups = {};
2292
- this.renderCache = {};
2293
- this.trigger('optgroup_clear');
2294
- },
2295
-
2296
- /**
2297
- * Updates an option available for selection. If
2298
- * it is visible in the selected items or options
2299
- * dropdown, it will be re-rendered automatically.
2300
- *
2301
- * @param {string} value
2302
- * @param {object} data
2303
- */
2304
- updateOption: function(value, data) {
2305
- var self = this;
2306
- var $item, $item_new;
2307
- var value_new, index_item, cache_items, cache_options, order_old;
2308
-
2309
- value = hash_key(value);
2310
- value_new = hash_key(data[self.settings.valueField]);
2311
-
2312
- // sanity checks
2313
- if (value === null) return;
2314
- if (!self.options.hasOwnProperty(value)) return;
2315
- if (typeof value_new !== 'string') throw new Error('Value must be set in option data');
2316
-
2317
- order_old = self.options[value].$order;
2318
-
2319
- // update references
2320
- if (value_new !== value) {
2321
- delete self.options[value];
2322
- index_item = self.items.indexOf(value);
2323
- if (index_item !== -1) {
2324
- self.items.splice(index_item, 1, value_new);
2325
- }
2326
- }
2327
- data.$order = data.$order || order_old;
2328
- self.options[value_new] = data;
2329
-
2330
- // invalidate render cache
2331
- cache_items = self.renderCache['item'];
2332
- cache_options = self.renderCache['option'];
2333
-
2334
- if (cache_items) {
2335
- delete cache_items[value];
2336
- delete cache_items[value_new];
2337
- }
2338
- if (cache_options) {
2339
- delete cache_options[value];
2340
- delete cache_options[value_new];
2341
- }
2342
-
2343
- // update the item if it's selected
2344
- if (self.items.indexOf(value_new) !== -1) {
2345
- $item = self.getItem(value);
2346
- $item_new = $(self.render('item', data));
2347
- if ($item.hasClass('active')) $item_new.addClass('active');
2348
- $item.replaceWith($item_new);
2349
- }
2350
-
2351
- // invalidate last query because we might have updated the sortField
2352
- self.lastQuery = null;
2353
-
2354
- // update dropdown contents
2355
- if (self.isOpen) {
2356
- self.refreshOptions(false);
2357
- }
2358
- },
2359
-
2360
- /**
2361
- * Removes a single option.
2362
- *
2363
- * @param {string} value
2364
- * @param {boolean} silent
2365
- */
2366
- removeOption: function(value, silent) {
2367
- var self = this;
2368
- value = hash_key(value);
2369
-
2370
- var cache_items = self.renderCache['item'];
2371
- var cache_options = self.renderCache['option'];
2372
- if (cache_items) delete cache_items[value];
2373
- if (cache_options) delete cache_options[value];
2374
-
2375
- delete self.userOptions[value];
2376
- delete self.options[value];
2377
- self.lastQuery = null;
2378
- self.trigger('option_remove', value);
2379
- self.removeItem(value, silent);
2380
- },
2381
-
2382
- /**
2383
- * Clears all options.
2384
- */
2385
- clearOptions: function() {
2386
- var self = this;
2387
-
2388
- self.loadedSearches = {};
2389
- self.userOptions = {};
2390
- self.renderCache = {};
2391
- self.options = self.sifter.items = {};
2392
- self.lastQuery = null;
2393
- self.trigger('option_clear');
2394
- self.clear();
2395
- },
2396
-
2397
- /**
2398
- * Returns the jQuery element of the option
2399
- * matching the given value.
2400
- *
2401
- * @param {string} value
2402
- * @returns {object}
2403
- */
2404
- getOption: function(value) {
2405
- return this.getElementWithValue(value, this.$dropdown_content.find('[data-selectable]'));
2406
- },
2407
-
2408
- /**
2409
- * Returns the jQuery element of the next or
2410
- * previous selectable option.
2411
- *
2412
- * @param {object} $option
2413
- * @param {int} direction can be 1 for next or -1 for previous
2414
- * @return {object}
2415
- */
2416
- getAdjacentOption: function($option, direction) {
2417
- var $options = this.$dropdown.find('[data-selectable]');
2418
- var index = $options.index($option) + direction;
2419
-
2420
- return index >= 0 && index < $options.length ? $options.eq(index) : $();
2421
- },
2422
-
2423
- /**
2424
- * Finds the first element with a "data-value" attribute
2425
- * that matches the given value.
2426
- *
2427
- * @param {mixed} value
2428
- * @param {object} $els
2429
- * @return {object}
2430
- */
2431
- getElementWithValue: function(value, $els) {
2432
- value = hash_key(value);
2433
-
2434
- if (typeof value !== 'undefined' && value !== null) {
2435
- for (var i = 0, n = $els.length; i < n; i++) {
2436
- if ($els[i].getAttribute('data-value') === value) {
2437
- return $($els[i]);
2438
- }
2439
- }
2440
- }
2441
-
2442
- return $();
2443
- },
2444
-
2445
- /**
2446
- * Returns the jQuery element of the item
2447
- * matching the given value.
2448
- *
2449
- * @param {string} value
2450
- * @returns {object}
2451
- */
2452
- getItem: function(value) {
2453
- return this.getElementWithValue(value, this.$control.children());
2454
- },
2455
-
2456
- /**
2457
- * "Selects" multiple items at once. Adds them to the list
2458
- * at the current caret position.
2459
- *
2460
- * @param {string} value
2461
- * @param {boolean} silent
2462
- */
2463
- addItems: function(values, silent) {
2464
- var items = $.isArray(values) ? values : [values];
2465
- for (var i = 0, n = items.length; i < n; i++) {
2466
- this.isPending = (i < n - 1);
2467
- this.addItem(items[i], silent);
2468
- }
2469
- },
2470
-
2471
- /**
2472
- * "Selects" an item. Adds it to the list
2473
- * at the current caret position.
2474
- *
2475
- * @param {string} value
2476
- * @param {boolean} silent
2477
- */
2478
- addItem: function(value, silent) {
2479
- var events = silent ? [] : ['change'];
2480
-
2481
- debounce_events(this, events, function() {
2482
- var $item, $option, $options;
2483
- var self = this;
2484
- var inputMode = self.settings.mode;
2485
- var i, active, value_next, wasFull;
2486
- value = hash_key(value);
2487
-
2488
- if (self.items.indexOf(value) !== -1) {
2489
- if (inputMode === 'single') self.close();
2490
- return;
2491
- }
2492
-
2493
- if (!self.options.hasOwnProperty(value)) return;
2494
- if (inputMode === 'single') self.clear(silent);
2495
- if (inputMode === 'multi' && self.isFull()) return;
2496
-
2497
- $item = $(self.render('item', self.options[value]));
2498
- wasFull = self.isFull();
2499
- self.items.splice(self.caretPos, 0, value);
2500
- self.insertAtCaret($item);
2501
- if (!self.isPending || (!wasFull && self.isFull())) {
2502
- self.refreshState();
2503
- }
2504
-
2505
- if (self.isSetup) {
2506
- $options = self.$dropdown_content.find('[data-selectable]');
2507
-
2508
- // update menu / remove the option (if this is not one item being added as part of series)
2509
- if (!self.isPending) {
2510
- $option = self.getOption(value);
2511
- value_next = self.getAdjacentOption($option, 1).attr('data-value');
2512
- self.refreshOptions(self.isFocused && inputMode !== 'single');
2513
- if (value_next) {
2514
- self.setActiveOption(self.getOption(value_next));
2515
- }
2516
- }
2517
-
2518
- // hide the menu if the maximum number of items have been selected or no options are left
2519
- if (!$options.length || self.isFull()) {
2520
- self.close();
2521
- } else {
2522
- self.positionDropdown();
2523
- }
2524
-
2525
- self.updatePlaceholder();
2526
- self.trigger('item_add', value, $item);
2527
- self.updateOriginalInput({silent: silent});
2528
- }
2529
- });
2530
- },
2531
-
2532
- /**
2533
- * Removes the selected item matching
2534
- * the provided value.
2535
- *
2536
- * @param {string} value
2537
- */
2538
- removeItem: function(value, silent) {
2539
- var self = this;
2540
- var $item, i, idx;
2541
-
2542
- $item = (typeof value === 'object') ? value : self.getItem(value);
2543
- value = hash_key($item.attr('data-value'));
2544
- i = self.items.indexOf(value);
2545
-
2546
- if (i !== -1) {
2547
- $item.remove();
2548
- if ($item.hasClass('active')) {
2549
- idx = self.$activeItems.indexOf($item[0]);
2550
- self.$activeItems.splice(idx, 1);
2551
- }
2552
-
2553
- self.items.splice(i, 1);
2554
- self.lastQuery = null;
2555
- if (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {
2556
- self.removeOption(value, silent);
2557
- }
2558
-
2559
- if (i < self.caretPos) {
2560
- self.setCaret(self.caretPos - 1);
2561
- }
2562
-
2563
- self.refreshState();
2564
- self.updatePlaceholder();
2565
- self.updateOriginalInput({silent: silent});
2566
- self.positionDropdown();
2567
- self.trigger('item_remove', value, $item);
2568
- }
2569
- },
2570
-
2571
- /**
2572
- * Invokes the `create` method provided in the
2573
- * selectize options that should provide the data
2574
- * for the new item, given the user input.
2575
- *
2576
- * Once this completes, it will be added
2577
- * to the item list.
2578
- *
2579
- * @param {string} value
2580
- * @param {boolean} [triggerDropdown]
2581
- * @param {function} [callback]
2582
- * @return {boolean}
2583
- */
2584
- createItem: function(input, triggerDropdown) {
2585
- var self = this;
2586
- var caret = self.caretPos;
2587
- input = input || $.trim(self.$control_input.val() || '');
2588
-
2589
- var callback = arguments[arguments.length - 1];
2590
- if (typeof callback !== 'function') callback = function() {};
2591
-
2592
- if (typeof triggerDropdown !== 'boolean') {
2593
- triggerDropdown = true;
2594
- }
2595
-
2596
- if (!self.canCreate(input)) {
2597
- callback();
2598
- return false;
2599
- }
2600
-
2601
- self.lock();
2602
-
2603
- var setup = (typeof self.settings.create === 'function') ? this.settings.create : function(input) {
2604
- var data = {};
2605
- data[self.settings.labelField] = input;
2606
- data[self.settings.valueField] = input;
2607
- return data;
2608
- };
2609
-
2610
- var create = once(function(data) {
2611
- self.unlock();
2612
-
2613
- if (!data || typeof data !== 'object') return callback();
2614
- var value = hash_key(data[self.settings.valueField]);
2615
- if (typeof value !== 'string') return callback();
2616
-
2617
- self.setTextboxValue('');
2618
- self.addOption(data);
2619
- self.setCaret(caret);
2620
- self.addItem(value);
2621
- self.refreshOptions(triggerDropdown && self.settings.mode !== 'single');
2622
- callback(data);
2623
- });
2624
-
2625
- var output = setup.apply(this, [input, create]);
2626
- if (typeof output !== 'undefined') {
2627
- create(output);
2628
- }
2629
-
2630
- return true;
2631
- },
2632
-
2633
- /**
2634
- * Re-renders the selected item lists.
2635
- */
2636
- refreshItems: function() {
2637
- this.lastQuery = null;
2638
-
2639
- if (this.isSetup) {
2640
- this.addItem(this.items);
2641
- }
2642
-
2643
- this.refreshState();
2644
- this.updateOriginalInput();
2645
- },
2646
-
2647
- /**
2648
- * Updates all state-dependent attributes
2649
- * and CSS classes.
2650
- */
2651
- refreshState: function() {
2652
- var invalid, self = this;
2653
- if (self.isRequired) {
2654
- if (self.items.length) self.isInvalid = false;
2655
- self.$control_input.prop('required', invalid);
2656
- }
2657
- self.refreshClasses();
2658
- },
2659
-
2660
- /**
2661
- * Updates all state-dependent CSS classes.
2662
- */
2663
- refreshClasses: function() {
2664
- var self = this;
2665
- var isFull = self.isFull();
2666
- var isLocked = self.isLocked;
2667
-
2668
- self.$wrapper
2669
- .toggleClass('rtl', self.rtl);
2670
-
2671
- self.$control
2672
- .toggleClass('focus', self.isFocused)
2673
- .toggleClass('disabled', self.isDisabled)
2674
- .toggleClass('required', self.isRequired)
2675
- .toggleClass('invalid', self.isInvalid)
2676
- .toggleClass('locked', isLocked)
2677
- .toggleClass('full', isFull).toggleClass('not-full', !isFull)
2678
- .toggleClass('input-active', self.isFocused && !self.isInputHidden)
2679
- .toggleClass('dropdown-active', self.isOpen)
2680
- .toggleClass('has-options', !$.isEmptyObject(self.options))
2681
- .toggleClass('has-items', self.items.length > 0);
2682
-
2683
- self.$control_input.data('grow', !isFull && !isLocked);
2684
- },
2685
-
2686
- /**
2687
- * Determines whether or not more items can be added
2688
- * to the control without exceeding the user-defined maximum.
2689
- *
2690
- * @returns {boolean}
2691
- */
2692
- isFull: function() {
2693
- return this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;
2694
- },
2695
-
2696
- /**
2697
- * Refreshes the original <select> or <input>
2698
- * element to reflect the current state.
2699
- */
2700
- updateOriginalInput: function(opts) {
2701
- var i, n, options, label, self = this;
2702
- opts = opts || {};
2703
-
2704
- if (self.tagType === TAG_SELECT) {
2705
- options = [];
2706
- for (i = 0, n = self.items.length; i < n; i++) {
2707
- label = self.options[self.items[i]][self.settings.labelField] || '';
2708
- options.push('<option value="' + escape_html(self.items[i]) + '" selected="selected">' + escape_html(label) + '</option>');
2709
- }
2710
- if (!options.length && !this.$input.attr('multiple')) {
2711
- options.push('<option value="" selected="selected"></option>');
2712
- }
2713
- self.$input.html(options.join(''));
2714
- } else {
2715
- self.$input.val(self.getValue());
2716
- self.$input.attr('value',self.$input.val());
2717
- }
2718
-
2719
- if (self.isSetup) {
2720
- if (!opts.silent) {
2721
- self.trigger('change', self.$input.val());
2722
- }
2723
- }
2724
- },
2725
-
2726
- /**
2727
- * Shows/hide the input placeholder depending
2728
- * on if there items in the list already.
2729
- */
2730
- updatePlaceholder: function() {
2731
- if (!this.settings.placeholder) return;
2732
- var $input = this.$control_input;
2733
-
2734
- if (this.items.length) {
2735
- $input.removeAttr('placeholder');
2736
- } else {
2737
- $input.attr('placeholder', this.settings.placeholder);
2738
- }
2739
- $input.triggerHandler('update', {force: true});
2740
- },
2741
-
2742
- /**
2743
- * Shows the autocomplete dropdown containing
2744
- * the available options.
2745
- */
2746
- open: function() {
2747
- var self = this;
2748
-
2749
- if (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return;
2750
- self.focus();
2751
- self.isOpen = true;
2752
- self.refreshState();
2753
- self.$dropdown.css({visibility: 'hidden', display: 'block'});
2754
- self.positionDropdown();
2755
- self.$dropdown.css({visibility: 'visible'});
2756
- self.trigger('dropdown_open', self.$dropdown);
2757
- },
2758
-
2759
- /**
2760
- * Closes the autocomplete dropdown menu.
2761
- */
2762
- close: function() {
2763
- var self = this;
2764
- var trigger = self.isOpen;
2765
-
2766
- if (self.settings.mode === 'single' && self.items.length) {
2767
- self.hideInput();
2768
- }
2769
-
2770
- self.isOpen = false;
2771
- self.$dropdown.hide();
2772
- self.setActiveOption(null);
2773
- self.refreshState();
2774
-
2775
- if (trigger) self.trigger('dropdown_close', self.$dropdown);
2776
- },
2777
-
2778
- /**
2779
- * Calculates and applies the appropriate
2780
- * position of the dropdown.
2781
- */
2782
- positionDropdown: function() {
2783
- var $control = this.$control;
2784
- var offset = this.settings.dropdownParent === 'body' ? $control.offset() : $control.position();
2785
- offset.top += $control.outerHeight(true);
2786
-
2787
- this.$dropdown.css({
2788
- width : $control.outerWidth(),
2789
- top : offset.top,
2790
- left : offset.left
2791
- });
2792
- },
2793
-
2794
- /**
2795
- * Resets / clears all selected items
2796
- * from the control.
2797
- *
2798
- * @param {boolean} silent
2799
- */
2800
- clear: function(silent) {
2801
- var self = this;
2802
-
2803
- if (!self.items.length) return;
2804
- self.$control.children(':not(input)').remove();
2805
- self.items = [];
2806
- self.lastQuery = null;
2807
- self.setCaret(0);
2808
- self.setActiveItem(null);
2809
- self.updatePlaceholder();
2810
- self.updateOriginalInput({silent: silent});
2811
- self.refreshState();
2812
- self.showInput();
2813
- self.trigger('clear');
2814
- },
2815
-
2816
- /**
2817
- * A helper method for inserting an element
2818
- * at the current caret position.
2819
- *
2820
- * @param {object} $el
2821
- */
2822
- insertAtCaret: function($el) {
2823
- var caret = Math.min(this.caretPos, this.items.length);
2824
- if (caret === 0) {
2825
- this.$control.prepend($el);
2826
- } else {
2827
- $(this.$control[0].childNodes[caret]).before($el);
2828
- }
2829
- this.setCaret(caret + 1);
2830
- },
2831
-
2832
- /**
2833
- * Removes the current selected item(s).
2834
- *
2835
- * @param {object} e (optional)
2836
- * @returns {boolean}
2837
- */
2838
- deleteSelection: function(e) {
2839
- var i, n, direction, selection, values, caret, option_select, $option_select, $tail;
2840
- var self = this;
2841
-
2842
- direction = (e && e.keyCode === KEY_BACKSPACE) ? -1 : 1;
2843
- selection = getSelection(self.$control_input[0]);
2844
-
2845
- if (self.$activeOption && !self.settings.hideSelected) {
2846
- option_select = self.getAdjacentOption(self.$activeOption, -1).attr('data-value');
2847
- }
2848
-
2849
- // determine items that will be removed
2850
- values = [];
2851
-
2852
- if (self.$activeItems.length) {
2853
- $tail = self.$control.children('.active:' + (direction > 0 ? 'last' : 'first'));
2854
- caret = self.$control.children(':not(input)').index($tail);
2855
- if (direction > 0) { caret++; }
2856
-
2857
- for (i = 0, n = self.$activeItems.length; i < n; i++) {
2858
- values.push($(self.$activeItems[i]).attr('data-value'));
2859
- }
2860
- if (e) {
2861
- e.preventDefault();
2862
- e.stopPropagation();
2863
- }
2864
- } else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {
2865
- if (direction < 0 && selection.start === 0 && selection.length === 0) {
2866
- values.push(self.items[self.caretPos - 1]);
2867
- } else if (direction > 0 && selection.start === self.$control_input.val().length) {
2868
- values.push(self.items[self.caretPos]);
2869
- }
2870
- }
2871
-
2872
- // allow the callback to abort
2873
- if (!values.length || (typeof self.settings.onDelete === 'function' && self.settings.onDelete.apply(self, [values]) === false)) {
2874
- return false;
2875
- }
2876
-
2877
- // perform removal
2878
- if (typeof caret !== 'undefined') {
2879
- self.setCaret(caret);
2880
- }
2881
- while (values.length) {
2882
- self.removeItem(values.pop());
2883
- }
2884
-
2885
- self.showInput();
2886
- self.positionDropdown();
2887
- self.refreshOptions(true);
2888
-
2889
- // select previous option
2890
- if (option_select) {
2891
- $option_select = self.getOption(option_select);
2892
- if ($option_select.length) {
2893
- self.setActiveOption($option_select);
2894
- }
2895
- }
2896
-
2897
- return true;
2898
- },
2899
-
2900
- /**
2901
- * Selects the previous / next item (depending
2902
- * on the `direction` argument).
2903
- *
2904
- * > 0 - right
2905
- * < 0 - left
2906
- *
2907
- * @param {int} direction
2908
- * @param {object} e (optional)
2909
- */
2910
- advanceSelection: function(direction, e) {
2911
- var tail, selection, idx, valueLength, cursorAtEdge, $tail;
2912
- var self = this;
2913
-
2914
- if (direction === 0) return;
2915
- if (self.rtl) direction *= -1;
2916
-
2917
- tail = direction > 0 ? 'last' : 'first';
2918
- selection = getSelection(self.$control_input[0]);
2919
-
2920
- if (self.isFocused && !self.isInputHidden) {
2921
- valueLength = self.$control_input.val().length;
2922
- cursorAtEdge = direction < 0
2923
- ? selection.start === 0 && selection.length === 0
2924
- : selection.start === valueLength;
2925
-
2926
- if (cursorAtEdge && !valueLength) {
2927
- self.advanceCaret(direction, e);
2928
- }
2929
- } else {
2930
- $tail = self.$control.children('.active:' + tail);
2931
- if ($tail.length) {
2932
- idx = self.$control.children(':not(input)').index($tail);
2933
- self.setActiveItem(null);
2934
- self.setCaret(direction > 0 ? idx + 1 : idx);
2935
- }
2936
- }
2937
- },
2938
-
2939
- /**
2940
- * Moves the caret left / right.
2941
- *
2942
- * @param {int} direction
2943
- * @param {object} e (optional)
2944
- */
2945
- advanceCaret: function(direction, e) {
2946
- var self = this, fn, $adj;
2947
-
2948
- if (direction === 0) return;
2949
-
2950
- fn = direction > 0 ? 'next' : 'prev';
2951
- if (self.isShiftDown) {
2952
- $adj = self.$control_input[fn]();
2953
- if ($adj.length) {
2954
- self.hideInput();
2955
- self.setActiveItem($adj);
2956
- e && e.preventDefault();
2957
- }
2958
- } else {
2959
- self.setCaret(self.caretPos + direction);
2960
- }
2961
- },
2962
-
2963
- /**
2964
- * Moves the caret to the specified index.
2965
- *
2966
- * @param {int} i
2967
- */
2968
- setCaret: function(i) {
2969
- var self = this;
2970
-
2971
- if (self.settings.mode === 'single') {
2972
- i = self.items.length;
2973
- } else {
2974
- i = Math.max(0, Math.min(self.items.length, i));
2975
- }
2976
-
2977
- if(!self.isPending) {
2978
- // the input must be moved by leaving it in place and moving the
2979
- // siblings, due to the fact that focus cannot be restored once lost
2980
- // on mobile webkit devices
2981
- var j, n, fn, $children, $child;
2982
- $children = self.$control.children(':not(input)');
2983
- for (j = 0, n = $children.length; j < n; j++) {
2984
- $child = $($children[j]).detach();
2985
- if (j < i) {
2986
- self.$control_input.before($child);
2987
- } else {
2988
- self.$control.append($child);
2989
- }
2990
- }
2991
- }
2992
-
2993
- self.caretPos = i;
2994
- },
2995
-
2996
- /**
2997
- * Disables user input on the control. Used while
2998
- * items are being asynchronously created.
2999
- */
3000
- lock: function() {
3001
- this.close();
3002
- this.isLocked = true;
3003
- this.refreshState();
3004
- },
3005
-
3006
- /**
3007
- * Re-enables user input on the control.
3008
- */
3009
- unlock: function() {
3010
- this.isLocked = false;
3011
- this.refreshState();
3012
- },
3013
-
3014
- /**
3015
- * Disables user input on the control completely.
3016
- * While disabled, it cannot receive focus.
3017
- */
3018
- disable: function() {
3019
- var self = this;
3020
- self.$input.prop('disabled', true);
3021
- self.$control_input.prop('disabled', true).prop('tabindex', -1);
3022
- self.isDisabled = true;
3023
- self.lock();
3024
- },
3025
-
3026
- /**
3027
- * Enables the control so that it can respond
3028
- * to focus and user input.
3029
- */
3030
- enable: function() {
3031
- var self = this;
3032
- self.$input.prop('disabled', false);
3033
- self.$control_input.prop('disabled', false).prop('tabindex', self.tabIndex);
3034
- self.isDisabled = false;
3035
- self.unlock();
3036
- },
3037
-
3038
- /**
3039
- * Completely destroys the control and
3040
- * unbinds all event listeners so that it can
3041
- * be garbage collected.
3042
- */
3043
- destroy: function() {
3044
- var self = this;
3045
- var eventNS = self.eventNS;
3046
- var revertSettings = self.revertSettings;
3047
-
3048
- self.trigger('destroy');
3049
- self.off();
3050
- self.$wrapper.remove();
3051
- self.$dropdown.remove();
3052
-
3053
- self.$input
3054
- .html('')
3055
- .append(revertSettings.$children)
3056
- .removeAttr('tabindex')
3057
- .removeClass('selectized')
3058
- .attr({tabindex: revertSettings.tabindex})
3059
- .show();
3060
-
3061
- self.$control_input.removeData('grow');
3062
- self.$input.removeData('selectize');
3063
-
3064
- $(window).off(eventNS);
3065
- $(document).off(eventNS);
3066
- $(document.body).off(eventNS);
3067
-
3068
- delete self.$input[0].selectize;
3069
- },
3070
-
3071
- /**
3072
- * A helper method for rendering "item" and
3073
- * "option" templates, given the data.
3074
- *
3075
- * @param {string} templateName
3076
- * @param {object} data
3077
- * @returns {string}
3078
- */
3079
- render: function(templateName, data) {
3080
- var value, id, label;
3081
- var html = '';
3082
- var cache = false;
3083
- var self = this;
3084
- var regex_tag = /^[\t \r\n]*<([a-z][a-z0-9\-_]*(?:\:[a-z][a-z0-9\-_]*)?)/i;
3085
-
3086
- if (templateName === 'option' || templateName === 'item') {
3087
- value = hash_key(data[self.settings.valueField]);
3088
- cache = !!value;
3089
- }
3090
-
3091
- // pull markup from cache if it exists
3092
- if (cache) {
3093
- if (!isset(self.renderCache[templateName])) {
3094
- self.renderCache[templateName] = {};
3095
- }
3096
- if (self.renderCache[templateName].hasOwnProperty(value)) {
3097
- return self.renderCache[templateName][value];
3098
- }
3099
- }
3100
-
3101
- // render markup
3102
- html = self.settings.render[templateName].apply(this, [data, escape_html]);
3103
-
3104
- // add mandatory attributes
3105
- if (templateName === 'option' || templateName === 'option_create') {
3106
- html = html.replace(regex_tag, '<$1 data-selectable');
3107
- }
3108
- if (templateName === 'optgroup') {
3109
- id = data[self.settings.optgroupValueField] || '';
3110
- html = html.replace(regex_tag, '<$1 data-group="' + escape_replace(escape_html(id)) + '"');
3111
- }
3112
- if (templateName === 'option' || templateName === 'item') {
3113
- html = html.replace(regex_tag, '<$1 data-value="' + escape_replace(escape_html(value || '')) + '"');
3114
- }
3115
-
3116
- // update cache
3117
- if (cache) {
3118
- self.renderCache[templateName][value] = html;
3119
- }
3120
-
3121
- return html;
3122
- },
3123
-
3124
- /**
3125
- * Clears the render cache for a template. If
3126
- * no template is given, clears all render
3127
- * caches.
3128
- *
3129
- * @param {string} templateName
3130
- */
3131
- clearCache: function(templateName) {
3132
- var self = this;
3133
- if (typeof templateName === 'undefined') {
3134
- self.renderCache = {};
3135
- } else {
3136
- delete self.renderCache[templateName];
3137
- }
3138
- },
3139
-
3140
- /**
3141
- * Determines whether or not to display the
3142
- * create item prompt, given a user input.
3143
- *
3144
- * @param {string} input
3145
- * @return {boolean}
3146
- */
3147
- canCreate: function(input) {
3148
- var self = this;
3149
- if (!self.settings.create) return false;
3150
- var filter = self.settings.createFilter;
3151
- return input.length
3152
- && (typeof filter !== 'function' || filter.apply(self, [input]))
3153
- && (typeof filter !== 'string' || new RegExp(filter).test(input))
3154
- && (!(filter instanceof RegExp) || filter.test(input));
3155
- }
3156
-
3157
- });
3158
-
3159
-
3160
- Selectize.count = 0;
3161
- Selectize.defaults = {
3162
- options: [],
3163
- optgroups: [],
3164
-
3165
- plugins: [],
3166
- delimiter: ',',
3167
- splitOn: null, // regexp or string for splitting up values from a paste command
3168
- persist: true,
3169
- diacritics: true,
3170
- create: false,
3171
- createOnBlur: false,
3172
- createFilter: null,
3173
- highlight: true,
3174
- openOnFocus: true,
3175
- maxOptions: 1000,
3176
- maxItems: null,
3177
- hideSelected: null,
3178
- addPrecedence: false,
3179
- selectOnTab: false,
3180
- preload: false,
3181
- allowEmptyOption: false,
3182
- closeAfterSelect: false,
3183
-
3184
- scrollDuration: 60,
3185
- loadThrottle: 300,
3186
- loadingClass: 'loading',
3187
-
3188
- dataAttr: 'data-data',
3189
- optgroupField: 'optgroup',
3190
- valueField: 'value',
3191
- labelField: 'text',
3192
- optgroupLabelField: 'label',
3193
- optgroupValueField: 'value',
3194
- lockOptgroupOrder: false,
3195
-
3196
- sortField: '$order',
3197
- searchField: ['text'],
3198
- searchConjunction: 'and',
3199
-
3200
- mode: null,
3201
- wrapperClass: 'selectize-control',
3202
- inputClass: 'selectize-input',
3203
- dropdownClass: 'selectize-dropdown',
3204
- dropdownContentClass: 'selectize-dropdown-content',
3205
-
3206
- dropdownParent: null,
3207
-
3208
- copyClassesToDropdown: true,
3209
-
3210
- /*
3211
- load : null, // function(query, callback) { ... }
3212
- score : null, // function(search) { ... }
3213
- onInitialize : null, // function() { ... }
3214
- onChange : null, // function(value) { ... }
3215
- onItemAdd : null, // function(value, $item) { ... }
3216
- onItemRemove : null, // function(value) { ... }
3217
- onClear : null, // function() { ... }
3218
- onOptionAdd : null, // function(value, data) { ... }
3219
- onOptionRemove : null, // function(value) { ... }
3220
- onOptionClear : null, // function() { ... }
3221
- onOptionGroupAdd : null, // function(id, data) { ... }
3222
- onOptionGroupRemove : null, // function(id) { ... }
3223
- onOptionGroupClear : null, // function() { ... }
3224
- onDropdownOpen : null, // function($dropdown) { ... }
3225
- onDropdownClose : null, // function($dropdown) { ... }
3226
- onType : null, // function(str) { ... }
3227
- onDelete : null, // function(values) { ... }
3228
- */
3229
-
3230
- render: {
3231
- /*
3232
- item: null,
3233
- optgroup: null,
3234
- optgroup_header: null,
3235
- option: null,
3236
- option_create: null
3237
- */
3238
- }
3239
- };
3240
-
3241
-
3242
- $.fn.selectize = function(settings_user) {
3243
- var defaults = $.fn.selectize.defaults;
3244
- var settings = $.extend({}, defaults, settings_user);
3245
- var attr_data = settings.dataAttr;
3246
- var field_label = settings.labelField;
3247
- var field_value = settings.valueField;
3248
- var field_optgroup = settings.optgroupField;
3249
- var field_optgroup_label = settings.optgroupLabelField;
3250
- var field_optgroup_value = settings.optgroupValueField;
3251
-
3252
- /**
3253
- * Initializes selectize from a <input type="text"> element.
3254
- *
3255
- * @param {object} $input
3256
- * @param {object} settings_element
3257
- */
3258
- var init_textbox = function($input, settings_element) {
3259
- var i, n, values, option;
3260
-
3261
- var data_raw = $input.attr(attr_data);
3262
-
3263
- if (!data_raw) {
3264
- var value = $.trim($input.val() || '');
3265
- if (!settings.allowEmptyOption && !value.length) return;
3266
- values = value.split(settings.delimiter);
3267
- for (i = 0, n = values.length; i < n; i++) {
3268
- option = {};
3269
- option[field_label] = values[i];
3270
- option[field_value] = values[i];
3271
- settings_element.options.push(option);
3272
- }
3273
- settings_element.items = values;
3274
- } else {
3275
- settings_element.options = JSON.parse(data_raw);
3276
- for (i = 0, n = settings_element.options.length; i < n; i++) {
3277
- settings_element.items.push(settings_element.options[i][field_value]);
3278
- }
3279
- }
3280
- };
3281
-
3282
- /**
3283
- * Initializes selectize from a <select> element.
3284
- *
3285
- * @param {object} $input
3286
- * @param {object} settings_element
3287
- */
3288
- var init_select = function($input, settings_element) {
3289
- var i, n, tagName, $children, order = 0;
3290
- var options = settings_element.options;
3291
- var optionsMap = {};
3292
-
3293
- var readData = function($el) {
3294
- var data = attr_data && $el.attr(attr_data);
3295
- if (typeof data === 'string' && data.length) {
3296
- return JSON.parse(data);
3297
- }
3298
- return null;
3299
- };
3300
-
3301
- var addOption = function($option, group) {
3302
- $option = $($option);
3303
-
3304
- var value = hash_key($option.attr('value'));
3305
- if (!value && !settings.allowEmptyOption) return;
3306
-
3307
- // if the option already exists, it's probably been
3308
- // duplicated in another optgroup. in this case, push
3309
- // the current group to the "optgroup" property on the
3310
- // existing option so that it's rendered in both places.
3311
- if (optionsMap.hasOwnProperty(value)) {
3312
- if (group) {
3313
- var arr = optionsMap[value][field_optgroup];
3314
- if (!arr) {
3315
- optionsMap[value][field_optgroup] = group;
3316
- } else if (!$.isArray(arr)) {
3317
- optionsMap[value][field_optgroup] = [arr, group];
3318
- } else {
3319
- arr.push(group);
3320
- }
3321
- }
3322
- return;
3323
- }
3324
-
3325
- var option = readData($option) || {};
3326
- option[field_label] = option[field_label] || $option.text();
3327
- option[field_value] = option[field_value] || value;
3328
- option[field_optgroup] = option[field_optgroup] || group;
3329
-
3330
- optionsMap[value] = option;
3331
- options.push(option);
3332
-
3333
- if ($option.is(':selected')) {
3334
- settings_element.items.push(value);
3335
- }
3336
- };
3337
-
3338
- var addGroup = function($optgroup) {
3339
- var i, n, id, optgroup, $options;
3340
-
3341
- $optgroup = $($optgroup);
3342
- id = $optgroup.attr('label');
3343
-
3344
- if (id) {
3345
- optgroup = readData($optgroup) || {};
3346
- optgroup[field_optgroup_label] = id;
3347
- optgroup[field_optgroup_value] = id;
3348
- settings_element.optgroups.push(optgroup);
3349
- }
3350
-
3351
- $options = $('option', $optgroup);
3352
- for (i = 0, n = $options.length; i < n; i++) {
3353
- addOption($options[i], id);
3354
- }
3355
- };
3356
-
3357
- settings_element.maxItems = $input.attr('multiple') ? null : 1;
3358
-
3359
- $children = $input.children();
3360
- for (i = 0, n = $children.length; i < n; i++) {
3361
- tagName = $children[i].tagName.toLowerCase();
3362
- if (tagName === 'optgroup') {
3363
- addGroup($children[i]);
3364
- } else if (tagName === 'option') {
3365
- addOption($children[i]);
3366
- }
3367
- }
3368
- };
3369
-
3370
- return this.each(function() {
3371
- if (this.selectize) return;
3372
-
3373
- var instance;
3374
- var $input = $(this);
3375
- var tag_name = this.tagName.toLowerCase();
3376
- var placeholder = $input.attr('placeholder') || $input.attr('data-placeholder');
3377
- if (!placeholder && !settings.allowEmptyOption) {
3378
- placeholder = $input.children('option[value=""]').text();
3379
- }
3380
-
3381
- var settings_element = {
3382
- 'placeholder' : placeholder,
3383
- 'options' : [],
3384
- 'optgroups' : [],
3385
- 'items' : []
3386
- };
3387
-
3388
- if (tag_name === 'select') {
3389
- init_select($input, settings_element);
3390
- } else {
3391
- init_textbox($input, settings_element);
3392
- }
3393
-
3394
- instance = new Selectize($input, $.extend(true, {}, defaults, settings_element, settings_user));
3395
- });
3396
- };
3397
-
3398
- $.fn.selectize.defaults = Selectize.defaults;
3399
- $.fn.selectize.support = {
3400
- validity: SUPPORTS_VALIDITY_API
3401
- };
3402
-
3403
-
3404
- Selectize.define('drag_drop', function(options) {
3405
- if (!$.fn.sortable) throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".');
3406
- if (this.settings.mode !== 'multi') return;
3407
- var self = this;
3408
-
3409
- self.lock = (function() {
3410
- var original = self.lock;
3411
- return function() {
3412
- var sortable = self.$control.data('sortable');
3413
- if (sortable) sortable.disable();
3414
- return original.apply(self, arguments);
3415
- };
3416
- })();
3417
-
3418
- self.unlock = (function() {
3419
- var original = self.unlock;
3420
- return function() {
3421
- var sortable = self.$control.data('sortable');
3422
- if (sortable) sortable.enable();
3423
- return original.apply(self, arguments);
3424
- };
3425
- })();
3426
-
3427
- self.setup = (function() {
3428
- var original = self.setup;
3429
- return function() {
3430
- original.apply(this, arguments);
3431
-
3432
- var $control = self.$control.sortable({
3433
- items: '[data-value]',
3434
- forcePlaceholderSize: true,
3435
- disabled: self.isLocked,
3436
- start: function(e, ui) {
3437
- ui.placeholder.css('width', ui.helper.css('width'));
3438
- $control.css({overflow: 'visible'});
3439
- },
3440
- stop: function() {
3441
- $control.css({overflow: 'hidden'});
3442
- var active = self.$activeItems ? self.$activeItems.slice() : null;
3443
- var values = [];
3444
- $control.children('[data-value]').each(function() {
3445
- values.push($(this).attr('data-value'));
3446
- });
3447
- self.setValue(values);
3448
- self.setActiveItem(active);
3449
- }
3450
- });
3451
- };
3452
- })();
3453
-
3454
- });
3455
-
3456
- Selectize.define('dropdown_header', function(options) {
3457
- var self = this;
3458
-
3459
- options = $.extend({
3460
- title : 'Untitled',
3461
- headerClass : 'selectize-dropdown-header',
3462
- titleRowClass : 'selectize-dropdown-header-title',
3463
- labelClass : 'selectize-dropdown-header-label',
3464
- closeClass : 'selectize-dropdown-header-close',
3465
-
3466
- html: function(data) {
3467
- return (
3468
- '<div class="' + data.headerClass + '">' +
3469
- '<div class="' + data.titleRowClass + '">' +
3470
- '<span class="' + data.labelClass + '">' + data.title + '</span>' +
3471
- '<a href="javascript:void(0)" class="' + data.closeClass + '">&times;</a>' +
3472
- '</div>' +
3473
- '</div>'
3474
- );
3475
- }
3476
- }, options);
3477
-
3478
- self.setup = (function() {
3479
- var original = self.setup;
3480
- return function() {
3481
- original.apply(self, arguments);
3482
- self.$dropdown_header = $(options.html(options));
3483
- self.$dropdown.prepend(self.$dropdown_header);
3484
- };
3485
- })();
3486
-
3487
- });
3488
-
3489
- Selectize.define('optgroup_columns', function(options) {
3490
- var self = this;
3491
-
3492
- options = $.extend({
3493
- equalizeWidth : true,
3494
- equalizeHeight : true
3495
- }, options);
3496
-
3497
- this.getAdjacentOption = function($option, direction) {
3498
- var $options = $option.closest('[data-group]').find('[data-selectable]');
3499
- var index = $options.index($option) + direction;
3500
-
3501
- return index >= 0 && index < $options.length ? $options.eq(index) : $();
3502
- };
3503
-
3504
- this.onKeyDown = (function() {
3505
- var original = self.onKeyDown;
3506
- return function(e) {
3507
- var index, $option, $options, $optgroup;
3508
-
3509
- if (this.isOpen && (e.keyCode === KEY_LEFT || e.keyCode === KEY_RIGHT)) {
3510
- self.ignoreHover = true;
3511
- $optgroup = this.$activeOption.closest('[data-group]');
3512
- index = $optgroup.find('[data-selectable]').index(this.$activeOption);
3513
-
3514
- if(e.keyCode === KEY_LEFT) {
3515
- $optgroup = $optgroup.prev('[data-group]');
3516
- } else {
3517
- $optgroup = $optgroup.next('[data-group]');
3518
- }
3519
-
3520
- $options = $optgroup.find('[data-selectable]');
3521
- $option = $options.eq(Math.min($options.length - 1, index));
3522
- if ($option.length) {
3523
- this.setActiveOption($option);
3524
- }
3525
- return;
3526
- }
3527
-
3528
- return original.apply(this, arguments);
3529
- };
3530
- })();
3531
-
3532
- var getScrollbarWidth = function() {
3533
- var div;
3534
- var width = getScrollbarWidth.width;
3535
- var doc = document;
3536
-
3537
- if (typeof width === 'undefined') {
3538
- div = doc.createElement('div');
3539
- div.innerHTML = '<div style="width:50px;height:50px;position:absolute;left:-50px;top:-50px;overflow:auto;"><div style="width:1px;height:100px;"></div></div>';
3540
- div = div.firstChild;
3541
- doc.body.appendChild(div);
3542
- width = getScrollbarWidth.width = div.offsetWidth - div.clientWidth;
3543
- doc.body.removeChild(div);
3544
- }
3545
- return width;
3546
- };
3547
-
3548
- var equalizeSizes = function() {
3549
- var i, n, height_max, width, width_last, width_parent, $optgroups;
3550
-
3551
- $optgroups = $('[data-group]', self.$dropdown_content);
3552
- n = $optgroups.length;
3553
- if (!n || !self.$dropdown_content.width()) return;
3554
-
3555
- if (options.equalizeHeight) {
3556
- height_max = 0;
3557
- for (i = 0; i < n; i++) {
3558
- height_max = Math.max(height_max, $optgroups.eq(i).height());
3559
- }
3560
- $optgroups.css({height: height_max});
3561
- }
3562
-
3563
- if (options.equalizeWidth) {
3564
- width_parent = self.$dropdown_content.innerWidth() - getScrollbarWidth();
3565
- width = Math.round(width_parent / n);
3566
- $optgroups.css({width: width});
3567
- if (n > 1) {
3568
- width_last = width_parent - width * (n - 1);
3569
- $optgroups.eq(n - 1).css({width: width_last});
3570
- }
3571
- }
3572
- };
3573
-
3574
- if (options.equalizeHeight || options.equalizeWidth) {
3575
- hook.after(this, 'positionDropdown', equalizeSizes);
3576
- hook.after(this, 'refreshOptions', equalizeSizes);
3577
- }
3578
-
3579
-
3580
- });
3581
-
3582
- Selectize.define('remove_button', function(options) {
3583
- if (this.settings.mode === 'single') return;
3584
-
3585
- options = $.extend({
3586
- label : '&times;',
3587
- title : 'Remove',
3588
- className : 'remove',
3589
- append : true
3590
- }, options);
3591
-
3592
- var self = this;
3593
- var html = '<a href="javascript:void(0)" class="' + options.className + '" tabindex="-1" title="' + escape_html(options.title) + '">' + options.label + '</a>';
3594
-
3595
- /**
3596
- * Appends an element as a child (with raw HTML).
3597
- *
3598
- * @param {string} html_container
3599
- * @param {string} html_element
3600
- * @return {string}
3601
- */
3602
- var append = function(html_container, html_element) {
3603
- var pos = html_container.search(/(<\/[^>]+>\s*)$/);
3604
- return html_container.substring(0, pos) + html_element + html_container.substring(pos);
3605
- };
3606
-
3607
- this.setup = (function() {
3608
- var original = self.setup;
3609
- return function() {
3610
- // override the item rendering method to add the button to each
3611
- if (options.append) {
3612
- var render_item = self.settings.render.item;
3613
- self.settings.render.item = function(data) {
3614
- return append(render_item.apply(this, arguments), html);
3615
- };
3616
- }
3617
-
3618
- original.apply(this, arguments);
3619
-
3620
- // add event listener
3621
- this.$control.on('click', '.' + options.className, function(e) {
3622
- e.preventDefault();
3623
- if (self.isLocked) return;
3624
-
3625
- var $item = $(e.currentTarget).parent();
3626
- self.setActiveItem($item);
3627
- if (self.deleteSelection()) {
3628
- self.setCaret(self.items.length);
3629
- }
3630
- });
3631
-
3632
- };
3633
- })();
3634
-
3635
- });
3636
-
3637
- Selectize.define('restore_on_backspace', function(options) {
3638
- var self = this;
3639
-
3640
- options.text = options.text || function(option) {
3641
- return option[this.settings.labelField];
3642
- };
3643
-
3644
- this.onKeyDown = (function() {
3645
- var original = self.onKeyDown;
3646
- return function(e) {
3647
- var index, option;
3648
- if (e.keyCode === KEY_BACKSPACE && this.$control_input.val() === '' && !this.$activeItems.length) {
3649
- index = this.caretPos - 1;
3650
- if (index >= 0 && index < this.items.length) {
3651
- option = this.options[this.items[index]];
3652
- if (this.deleteSelection(e)) {
3653
- this.setTextboxValue(options.text.apply(this, [option]));
3654
- this.refreshOptions(true);
3655
- }
3656
- e.preventDefault();
3657
- return;
3658
- }
3659
- }
3660
- return original.apply(this, arguments);
3661
- };
3662
- })();
3663
- });
3664
-
3665
-
3666
- return Selectize;
3667
- }));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/controls/select/assets/js/selectize.min.js DELETED
@@ -1,3 +0,0 @@
1
- /*! selectize.js - v0.12.1 | https://github.com/brianreavis/selectize.js | Apache License (v2) */
2
- !function(a,b){"function"==typeof define&&define.amd?define("sifter",b):"object"==typeof exports?module.exports=b():a.Sifter=b()}(this,function(){var a=function(a,b){this.items=a,this.settings=b||{diacritics:!0}};a.prototype.tokenize=function(a){if(a=d(String(a||"").toLowerCase()),!a||!a.length)return[];var b,c,f,h,i=[],j=a.split(/ +/);for(b=0,c=j.length;c>b;b++){if(f=e(j[b]),this.settings.diacritics)for(h in g)g.hasOwnProperty(h)&&(f=f.replace(new RegExp(h,"g"),g[h]));i.push({string:j[b],regex:new RegExp(f,"i")})}return i},a.prototype.iterator=function(a,b){var c;c=f(a)?Array.prototype.forEach||function(a){for(var b=0,c=this.length;c>b;b++)a(this[b],b,this)}:function(a){for(var b in this)this.hasOwnProperty(b)&&a(this[b],b,this)},c.apply(a,[b])},a.prototype.getScoreFunction=function(a,b){var c,d,e,f;c=this,a=c.prepareSearch(a,b),e=a.tokens,d=a.options.fields,f=e.length;var g=function(a,b){var c,d;return a?(a=String(a||""),d=a.search(b.regex),-1===d?0:(c=b.string.length/a.length,0===d&&(c+=.5),c)):0},h=function(){var a=d.length;return a?1===a?function(a,b){return g(b[d[0]],a)}:function(b,c){for(var e=0,f=0;a>e;e++)f+=g(c[d[e]],b);return f/a}:function(){return 0}}();return f?1===f?function(a){return h(e[0],a)}:"and"===a.options.conjunction?function(a){for(var b,c=0,d=0;f>c;c++){if(b=h(e[c],a),0>=b)return 0;d+=b}return d/f}:function(a){for(var b=0,c=0;f>b;b++)c+=h(e[b],a);return c/f}:function(){return 0}},a.prototype.getSortFunction=function(a,c){var d,e,f,g,h,i,j,k,l,m,n;if(f=this,a=f.prepareSearch(a,c),n=!a.query&&c.sort_empty||c.sort,l=function(a,b){return"$score"===a?b.score:f.items[b.id][a]},h=[],n)for(d=0,e=n.length;e>d;d++)(a.query||"$score"!==n[d].field)&&h.push(n[d]);if(a.query){for(m=!0,d=0,e=h.length;e>d;d++)if("$score"===h[d].field){m=!1;break}m&&h.unshift({field:"$score",direction:"desc"})}else for(d=0,e=h.length;e>d;d++)if("$score"===h[d].field){h.splice(d,1);break}for(k=[],d=0,e=h.length;e>d;d++)k.push("desc"===h[d].direction?-1:1);return i=h.length,i?1===i?(g=h[0].field,j=k[0],function(a,c){return j*b(l(g,a),l(g,c))}):function(a,c){var d,e,f;for(d=0;i>d;d++)if(f=h[d].field,e=k[d]*b(l(f,a),l(f,c)))return e;return 0}:null},a.prototype.prepareSearch=function(a,b){if("object"==typeof a)return a;b=c({},b);var d=b.fields,e=b.sort,g=b.sort_empty;return d&&!f(d)&&(b.fields=[d]),e&&!f(e)&&(b.sort=[e]),g&&!f(g)&&(b.sort_empty=[g]),{options:b,query:String(a||"").toLowerCase(),tokens:this.tokenize(a),total:0,items:[]}},a.prototype.search=function(a,b){var c,d,e,f,g=this;return d=this.prepareSearch(a,b),b=d.options,a=d.query,f=b.score||g.getScoreFunction(d),a.length?g.iterator(g.items,function(a,e){c=f(a),(b.filter===!1||c>0)&&d.items.push({score:c,id:e})}):g.iterator(g.items,function(a,b){d.items.push({score:1,id:b})}),e=g.getSortFunction(d,b),e&&d.items.sort(e),d.total=d.items.length,"number"==typeof b.limit&&(d.items=d.items.slice(0,b.limit)),d};var b=function(a,b){return"number"==typeof a&&"number"==typeof b?a>b?1:b>a?-1:0:(a=h(String(a||"")),b=h(String(b||"")),a>b?1:b>a?-1:0)},c=function(a){var b,c,d,e;for(b=1,c=arguments.length;c>b;b++)if(e=arguments[b])for(d in e)e.hasOwnProperty(d)&&(a[d]=e[d]);return a},d=function(a){return(a+"").replace(/^\s+|\s+$|/g,"")},e=function(a){return(a+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")},f=Array.isArray||$&&$.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},g={a:"[aÀÁÂÃÄÅàáâãäåĀāąĄ]",c:"[cÇçćĆčČ]",d:"[dđĐďĎ]",e:"[eÈÉÊËèéêëěĚĒēęĘ]",i:"[iÌÍÎÏìíîïĪī]",l:"[lłŁ]",n:"[nÑñňŇńŃ]",o:"[oÒÓÔÕÕÖØòóôõöøŌō]",r:"[rřŘ]",s:"[sŠšśŚ]",t:"[tťŤ]",u:"[uÙÚÛÜùúûüůŮŪū]",y:"[yŸÿýÝ]",z:"[zŽžżŻźŹ]"},h=function(){var a,b,c,d,e="",f={};for(c in g)if(g.hasOwnProperty(c))for(d=g[c].substring(2,g[c].length-1),e+=d,a=0,b=d.length;b>a;a++)f[d.charAt(a)]=c;var h=new RegExp("["+e+"]","g");return function(a){return a.replace(h,function(a){return f[a]}).toLowerCase()}}();return a}),function(a,b){"function"==typeof define&&define.amd?define("microplugin",b):"object"==typeof exports?module.exports=b():a.MicroPlugin=b()}(this,function(){var a={};a.mixin=function(a){a.plugins={},a.prototype.initializePlugins=function(a){var c,d,e,f=this,g=[];if(f.plugins={names:[],settings:{},requested:{},loaded:{}},b.isArray(a))for(c=0,d=a.length;d>c;c++)"string"==typeof a[c]?g.push(a[c]):(f.plugins.settings[a[c].name]=a[c].options,g.push(a[c].name));else if(a)for(e in a)a.hasOwnProperty(e)&&(f.plugins.settings[e]=a[e],g.push(e));for(;g.length;)f.require(g.shift())},a.prototype.loadPlugin=function(b){var c=this,d=c.plugins,e=a.plugins[b];if(!a.plugins.hasOwnProperty(b))throw new Error('Unable to find "'+b+'" plugin');d.requested[b]=!0,d.loaded[b]=e.fn.apply(c,[c.plugins.settings[b]||{}]),d.names.push(b)},a.prototype.require=function(a){var b=this,c=b.plugins;if(!b.plugins.loaded.hasOwnProperty(a)){if(c.requested[a])throw new Error('Plugin has circular dependency ("'+a+'")');b.loadPlugin(a)}return c.loaded[a]},a.define=function(b,c){a.plugins[b]={name:b,fn:c}}};var b={isArray:Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)}};return a}),function(a,b){"function"==typeof define&&define.amd?define("selectize",["jquery","sifter","microplugin"],b):"object"==typeof exports?module.exports=b(require("jquery"),require("sifter"),require("microplugin")):a.Selectize=b(a.jQuery,a.Sifter,a.MicroPlugin)}(this,function(a,b,c){"use strict";var d=function(a,b){if("string"!=typeof b||b.length){var c="string"==typeof b?new RegExp(b,"i"):b,d=function(a){var b=0;if(3===a.nodeType){var e=a.data.search(c);if(e>=0&&a.data.length>0){var f=a.data.match(c),g=document.createElement("span");g.className="highlight";var h=a.splitText(e),i=(h.splitText(f[0].length),h.cloneNode(!0));g.appendChild(i),h.parentNode.replaceChild(g,h),b=1}}else if(1===a.nodeType&&a.childNodes&&!/(script|style)/i.test(a.tagName))for(var j=0;j<a.childNodes.length;++j)j+=d(a.childNodes[j]);return b};return a.each(function(){d(this)})}},e=function(){};e.prototype={on:function(a,b){this._events=this._events||{},this._events[a]=this._events[a]||[],this._events[a].push(b)},off:function(a,b){var c=arguments.length;return 0===c?delete this._events:1===c?delete this._events[a]:(this._events=this._events||{},void(a in this._events!=!1&&this._events[a].splice(this._events[a].indexOf(b),1)))},trigger:function(a){if(this._events=this._events||{},a in this._events!=!1)for(var b=0;b<this._events[a].length;b++)this._events[a][b].apply(this,Array.prototype.slice.call(arguments,1))}},e.mixin=function(a){for(var b=["on","off","trigger"],c=0;c<b.length;c++)a.prototype[b[c]]=e.prototype[b[c]]};var f=/Mac/.test(navigator.userAgent),g=65,h=13,i=27,j=37,k=38,l=80,m=39,n=40,o=78,p=8,q=46,r=16,s=f?91:17,t=f?18:17,u=9,v=1,w=2,x=!/android/i.test(window.navigator.userAgent)&&!!document.createElement("form").validity,y=function(a){return"undefined"!=typeof a},z=function(a){return"undefined"==typeof a||null===a?null:"boolean"==typeof a?a?"1":"0":a+""},A=function(a){return(a+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},B=function(a){return(a+"").replace(/\$/g,"$$$$")},C={};C.before=function(a,b,c){var d=a[b];a[b]=function(){return c.apply(a,arguments),d.apply(a,arguments)}},C.after=function(a,b,c){var d=a[b];a[b]=function(){var b=d.apply(a,arguments);return c.apply(a,arguments),b}};var D=function(a){var b=!1;return function(){b||(b=!0,a.apply(this,arguments))}},E=function(a,b){var c;return function(){var d=this,e=arguments;window.clearTimeout(c),c=window.setTimeout(function(){a.apply(d,e)},b)}},F=function(a,b,c){var d,e=a.trigger,f={};a.trigger=function(){var c=arguments[0];return-1===b.indexOf(c)?e.apply(a,arguments):void(f[c]=arguments)},c.apply(a,[]),a.trigger=e;for(d in f)f.hasOwnProperty(d)&&e.apply(a,f[d])},G=function(a,b,c,d){a.on(b,c,function(b){for(var c=b.target;c&&c.parentNode!==a[0];)c=c.parentNode;return b.currentTarget=c,d.apply(this,[b])})},H=function(a){var b={};if("selectionStart"in a)b.start=a.selectionStart,b.length=a.selectionEnd-b.start;else if(document.selection){a.focus();var c=document.selection.createRange(),d=document.selection.createRange().text.length;c.moveStart("character",-a.value.length),b.start=c.text.length-d,b.length=d}return b},I=function(a,b,c){var d,e,f={};if(c)for(d=0,e=c.length;e>d;d++)f[c[d]]=a.css(c[d]);else f=a.css();b.css(f)},J=function(b,c){if(!b)return 0;var d=a("<test>").css({position:"absolute",top:-99999,left:-99999,width:"auto",padding:0,whiteSpace:"pre"}).text(b).appendTo("body");I(c,d,["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"]);var e=d.width();return d.remove(),e},K=function(a){var b=null,c=function(c,d){var e,f,g,h,i,j,k,l;c=c||window.event||{},d=d||{},c.metaKey||c.altKey||(d.force||a.data("grow")!==!1)&&(e=a.val(),c.type&&"keydown"===c.type.toLowerCase()&&(f=c.keyCode,g=f>=97&&122>=f||f>=65&&90>=f||f>=48&&57>=f||32===f,f===q||f===p?(l=H(a[0]),l.length?e=e.substring(0,l.start)+e.substring(l.start+l.length):f===p&&l.start?e=e.substring(0,l.start-1)+e.substring(l.start+1):f===q&&"undefined"!=typeof l.start&&(e=e.substring(0,l.start)+e.substring(l.start+1))):g&&(j=c.shiftKey,k=String.fromCharCode(c.keyCode),k=j?k.toUpperCase():k.toLowerCase(),e+=k)),h=a.attr("placeholder"),!e&&h&&(e=h),i=J(e,a)+4,i!==b&&(b=i,a.width(i),a.triggerHandler("resize")))};a.on("keydown keyup update blur",c),c()},L=function(c,d){var e,f,g,h,i=this;h=c[0],h.selectize=i;var j=window.getComputedStyle&&window.getComputedStyle(h,null);if(g=j?j.getPropertyValue("direction"):h.currentStyle&&h.currentStyle.direction,g=g||c.parents("[dir]:first").attr("dir")||"",a.extend(i,{order:0,settings:d,$input:c,tabIndex:c.attr("tabindex")||"",tagType:"select"===h.tagName.toLowerCase()?v:w,rtl:/rtl/i.test(g),eventNS:".selectize"+ ++L.count,highlightedValue:null,isOpen:!1,isDisabled:!1,isRequired:c.is("[required]"),isInvalid:!1,isLocked:!1,isFocused:!1,isInputHidden:!1,isSetup:!1,isShiftDown:!1,isCmdDown:!1,isCtrlDown:!1,ignoreFocus:!1,ignoreBlur:!1,ignoreHover:!1,hasOptions:!1,currentResults:null,lastValue:"",caretPos:0,loading:0,loadedSearches:{},$activeOption:null,$activeItems:[],optgroups:{},options:{},userOptions:{},items:[],renderCache:{},onSearchChange:null===d.loadThrottle?i.onSearchChange:E(i.onSearchChange,d.loadThrottle)}),i.sifter=new b(this.options,{diacritics:d.diacritics}),i.settings.options){for(e=0,f=i.settings.options.length;f>e;e++)i.registerOption(i.settings.options[e]);delete i.settings.options}if(i.settings.optgroups){for(e=0,f=i.settings.optgroups.length;f>e;e++)i.registerOptionGroup(i.settings.optgroups[e]);delete i.settings.optgroups}i.settings.mode=i.settings.mode||(1===i.settings.maxItems?"single":"multi"),"boolean"!=typeof i.settings.hideSelected&&(i.settings.hideSelected="multi"===i.settings.mode),i.initializePlugins(i.settings.plugins),i.setupCallbacks(),i.setupTemplates(),i.setup()};return e.mixin(L),c.mixin(L),a.extend(L.prototype,{setup:function(){var b,c,d,e,g,h,i,j,k,l=this,m=l.settings,n=l.eventNS,o=a(window),p=a(document),q=l.$input;if(i=l.settings.mode,j=q.attr("class")||"",b=a("<div>").addClass(m.wrapperClass).addClass(j).addClass(i),c=a("<div>").addClass(m.inputClass).addClass("items").appendTo(b),d=a('<input type="text" autocomplete="off" />').appendTo(c).attr("tabindex",q.is(":disabled")?"-1":l.tabIndex),h=a(m.dropdownParent||b),e=a("<div>").addClass(m.dropdownClass).addClass(i).hide().appendTo(h),g=a("<div>").addClass(m.dropdownContentClass).appendTo(e),l.settings.copyClassesToDropdown&&e.addClass(j),b.css({width:q[0].style.width}),l.plugins.names.length&&(k="plugin-"+l.plugins.names.join(" plugin-"),b.addClass(k),e.addClass(k)),(null===m.maxItems||m.maxItems>1)&&l.tagType===v&&q.attr("multiple","multiple"),l.settings.placeholder&&d.attr("placeholder",m.placeholder),!l.settings.splitOn&&l.settings.delimiter){var u=l.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");l.settings.splitOn=new RegExp("\\s*"+u+"+\\s*")}q.attr("autocorrect")&&d.attr("autocorrect",q.attr("autocorrect")),q.attr("autocapitalize")&&d.attr("autocapitalize",q.attr("autocapitalize")),l.$wrapper=b,l.$control=c,l.$control_input=d,l.$dropdown=e,l.$dropdown_content=g,e.on("mouseenter","[data-selectable]",function(){return l.onOptionHover.apply(l,arguments)}),e.on("mousedown click","[data-selectable]",function(){return l.onOptionSelect.apply(l,arguments)}),G(c,"mousedown","*:not(input)",function(){return l.onItemSelect.apply(l,arguments)}),K(d),c.on({mousedown:function(){return l.onMouseDown.apply(l,arguments)},click:function(){return l.onClick.apply(l,arguments)}}),d.on({mousedown:function(a){a.stopPropagation()},keydown:function(){return l.onKeyDown.apply(l,arguments)},keyup:function(){return l.onKeyUp.apply(l,arguments)},keypress:function(){return l.onKeyPress.apply(l,arguments)},resize:function(){l.positionDropdown.apply(l,[])},blur:function(){return l.onBlur.apply(l,arguments)},focus:function(){return l.ignoreBlur=!1,l.onFocus.apply(l,arguments)},paste:function(){return l.onPaste.apply(l,arguments)}}),p.on("keydown"+n,function(a){l.isCmdDown=a[f?"metaKey":"ctrlKey"],l.isCtrlDown=a[f?"altKey":"ctrlKey"],l.isShiftDown=a.shiftKey}),p.on("keyup"+n,function(a){a.keyCode===t&&(l.isCtrlDown=!1),a.keyCode===r&&(l.isShiftDown=!1),a.keyCode===s&&(l.isCmdDown=!1)}),p.on("mousedown"+n,function(a){if(l.isFocused){if(a.target===l.$dropdown[0]||a.target.parentNode===l.$dropdown[0])return!1;l.$control.has(a.target).length||a.target===l.$control[0]||l.blur(a.target)}}),o.on(["scroll"+n,"resize"+n].join(" "),function(){l.isOpen&&l.positionDropdown.apply(l,arguments)}),o.on("mousemove"+n,function(){l.ignoreHover=!1}),this.revertSettings={$children:q.children().detach(),tabindex:q.attr("tabindex")},q.attr("tabindex",-1).hide().after(l.$wrapper),a.isArray(m.items)&&(l.setValue(m.items),delete m.items),x&&q.on("invalid"+n,function(a){a.preventDefault(),l.isInvalid=!0,l.refreshState()}),l.updateOriginalInput(),l.refreshItems(),l.refreshState(),l.updatePlaceholder(),l.isSetup=!0,q.is(":disabled")&&l.disable(),l.on("change",this.onChange),q.data("selectize",l),q.addClass("selectized"),l.trigger("initialize"),m.preload===!0&&l.onSearchChange("")},setupTemplates:function(){var b=this,c=b.settings.labelField,d=b.settings.optgroupLabelField,e={optgroup:function(a){return'<div class="optgroup">'+a.html+"</div>"},optgroup_header:function(a,b){return'<div class="optgroup-header">'+b(a[d])+"</div>"},option:function(a,b){return'<div class="option">'+b(a[c])+"</div>"},item:function(a,b){return'<div class="item">'+b(a[c])+"</div>"},option_create:function(a,b){return'<div class="create">Add <strong>'+b(a.input)+"</strong>&hellip;</div>"}};b.settings.render=a.extend({},e,b.settings.render)},setupCallbacks:function(){var a,b,c={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(a in c)c.hasOwnProperty(a)&&(b=this.settings[c[a]],b&&this.on(a,b))},onClick:function(a){var b=this;b.isFocused||(b.focus(),a.preventDefault())},onMouseDown:function(b){{var c=this,d=b.isDefaultPrevented();a(b.target)}if(c.isFocused){if(b.target!==c.$control_input[0])return"single"===c.settings.mode?c.isOpen?c.close():c.open():d||c.setActiveItem(null),!1}else d||window.setTimeout(function(){c.focus()},0)},onChange:function(){this.$input.trigger("change")},onPaste:function(b){var c=this;c.isFull()||c.isInputHidden||c.isLocked?b.preventDefault():c.settings.splitOn&&setTimeout(function(){for(var b=a.trim(c.$control_input.val()||"").split(c.settings.splitOn),d=0,e=b.length;e>d;d++)c.createItem(b[d])},0)},onKeyPress:function(a){if(this.isLocked)return a&&a.preventDefault();var b=String.fromCharCode(a.keyCode||a.which);return this.settings.create&&"multi"===this.settings.mode&&b===this.settings.delimiter?(this.createItem(),a.preventDefault(),!1):void 0},onKeyDown:function(a){var b=(a.target===this.$control_input[0],this);if(b.isLocked)return void(a.keyCode!==u&&a.preventDefault());switch(a.keyCode){case g:if(b.isCmdDown)return void b.selectAll();break;case i:return void(b.isOpen&&(a.preventDefault(),a.stopPropagation(),b.close()));case o:if(!a.ctrlKey||a.altKey)break;case n:if(!b.isOpen&&b.hasOptions)b.open();else if(b.$activeOption){b.ignoreHover=!0;var c=b.getAdjacentOption(b.$activeOption,1);c.length&&b.setActiveOption(c,!0,!0)}return void a.preventDefault();case l:if(!a.ctrlKey||a.altKey)break;case k:if(b.$activeOption){b.ignoreHover=!0;var d=b.getAdjacentOption(b.$activeOption,-1);d.length&&b.setActiveOption(d,!0,!0)}return void a.preventDefault();case h:return void(b.isOpen&&b.$activeOption&&(b.onOptionSelect({currentTarget:b.$activeOption}),a.preventDefault()));case j:return void b.advanceSelection(-1,a);case m:return void b.advanceSelection(1,a);case u:return b.settings.selectOnTab&&b.isOpen&&b.$activeOption&&(b.onOptionSelect({currentTarget:b.$activeOption}),b.isFull()||a.preventDefault()),void(b.settings.create&&b.createItem()&&a.preventDefault());case p:case q:return void b.deleteSelection(a)}return!b.isFull()&&!b.isInputHidden||(f?a.metaKey:a.ctrlKey)?void 0:void a.preventDefault()},onKeyUp:function(a){var b=this;if(b.isLocked)return a&&a.preventDefault();var c=b.$control_input.val()||"";b.lastValue!==c&&(b.lastValue=c,b.onSearchChange(c),b.refreshOptions(),b.trigger("type",c))},onSearchChange:function(a){var b=this,c=b.settings.load;c&&(b.loadedSearches.hasOwnProperty(a)||(b.loadedSearches[a]=!0,b.load(function(d){c.apply(b,[a,d])})))},onFocus:function(a){var b=this,c=b.isFocused;return b.isDisabled?(b.blur(),a&&a.preventDefault(),!1):void(b.ignoreFocus||(b.isFocused=!0,"focus"===b.settings.preload&&b.onSearchChange(""),c||b.trigger("focus"),b.$activeItems.length||(b.showInput(),b.setActiveItem(null),b.refreshOptions(!!b.settings.openOnFocus)),b.refreshState()))},onBlur:function(a,b){var c=this;if(c.isFocused&&(c.isFocused=!1,!c.ignoreFocus)){if(!c.ignoreBlur&&document.activeElement===c.$dropdown_content[0])return c.ignoreBlur=!0,void c.onFocus(a);var d=function(){c.close(),c.setTextboxValue(""),c.setActiveItem(null),c.setActiveOption(null),c.setCaret(c.items.length),c.refreshState(),(b||document.body).focus(),c.ignoreFocus=!1,c.trigger("blur")};c.ignoreFocus=!0,c.settings.create&&c.settings.createOnBlur?c.createItem(null,!1,d):d()}},onOptionHover:function(a){this.ignoreHover||this.setActiveOption(a.currentTarget,!1)},onOptionSelect:function(b){var c,d,e=this;b.preventDefault&&(b.preventDefault(),b.stopPropagation()),d=a(b.currentTarget),d.hasClass("create")?e.createItem(null,function(){e.settings.closeAfterSelect&&e.close()}):(c=d.attr("data-value"),"undefined"!=typeof c&&(e.lastQuery=null,e.setTextboxValue(""),e.addItem(c),e.settings.closeAfterSelect?e.close():!e.settings.hideSelected&&b.type&&/mouse/.test(b.type)&&e.setActiveOption(e.getOption(c))))},onItemSelect:function(a){var b=this;b.isLocked||"multi"===b.settings.mode&&(a.preventDefault(),b.setActiveItem(a.currentTarget,a))},load:function(a){var b=this,c=b.$wrapper.addClass(b.settings.loadingClass);b.loading++,a.apply(b,[function(a){b.loading=Math.max(b.loading-1,0),a&&a.length&&(b.addOption(a),b.refreshOptions(b.isFocused&&!b.isInputHidden)),b.loading||c.removeClass(b.settings.loadingClass),b.trigger("load",a)}])},setTextboxValue:function(a){var b=this.$control_input,c=b.val()!==a;c&&(b.val(a).triggerHandler("update"),this.lastValue=a)},getValue:function(){return this.tagType===v&&this.$input.attr("multiple")?this.items:this.items.join(this.settings.delimiter)},setValue:function(a,b){var c=b?[]:["change"];F(this,c,function(){this.clear(b),this.addItems(a,b)})},setActiveItem:function(b,c){var d,e,f,g,h,i,j,k,l=this;if("single"!==l.settings.mode){if(b=a(b),!b.length)return a(l.$activeItems).removeClass("active"),l.$activeItems=[],void(l.isFocused&&l.showInput());if(d=c&&c.type.toLowerCase(),"mousedown"===d&&l.isShiftDown&&l.$activeItems.length){for(k=l.$control.children(".active:last"),g=Array.prototype.indexOf.apply(l.$control[0].childNodes,[k[0]]),h=Array.prototype.indexOf.apply(l.$control[0].childNodes,[b[0]]),g>h&&(j=g,g=h,h=j),e=g;h>=e;e++)i=l.$control[0].childNodes[e],-1===l.$activeItems.indexOf(i)&&(a(i).addClass("active"),l.$activeItems.push(i));c.preventDefault()}else"mousedown"===d&&l.isCtrlDown||"keydown"===d&&this.isShiftDown?b.hasClass("active")?(f=l.$activeItems.indexOf(b[0]),l.$activeItems.splice(f,1),b.removeClass("active")):l.$activeItems.push(b.addClass("active")[0]):(a(l.$activeItems).removeClass("active"),l.$activeItems=[b.addClass("active")[0]]);l.hideInput(),this.isFocused||l.focus()}},setActiveOption:function(b,c,d){var e,f,g,h,i,j=this;j.$activeOption&&j.$activeOption.removeClass("active"),j.$activeOption=null,b=a(b),b.length&&(j.$activeOption=b.addClass("active"),(c||!y(c))&&(e=j.$dropdown_content.height(),f=j.$activeOption.outerHeight(!0),c=j.$dropdown_content.scrollTop()||0,g=j.$activeOption.offset().top-j.$dropdown_content.offset().top+c,h=g,i=g-e+f,g+f>e+c?j.$dropdown_content.stop().animate({scrollTop:i},d?j.settings.scrollDuration:0):c>g&&j.$dropdown_content.stop().animate({scrollTop:h},d?j.settings.scrollDuration:0)))},selectAll:function(){var a=this;"single"!==a.settings.mode&&(a.$activeItems=Array.prototype.slice.apply(a.$control.children(":not(input)").addClass("active")),a.$activeItems.length&&(a.hideInput(),a.close()),a.focus())},hideInput:function(){var a=this;a.setTextboxValue(""),a.$control_input.css({opacity:0,position:"absolute",left:a.rtl?1e4:-1e4}),a.isInputHidden=!0},showInput:function(){this.$control_input.css({opacity:1,position:"relative",left:0}),this.isInputHidden=!1},focus:function(){var a=this;a.isDisabled||(a.ignoreFocus=!0,a.$control_input[0].focus(),window.setTimeout(function(){a.ignoreFocus=!1,a.onFocus()},0))},blur:function(a){this.$control_input[0].blur(),this.onBlur(null,a)},getScoreFunction:function(a){return this.sifter.getScoreFunction(a,this.getSearchOptions())},getSearchOptions:function(){var a=this.settings,b=a.sortField;return"string"==typeof b&&(b=[{field:b}]),{fields:a.searchField,conjunction:a.searchConjunction,sort:b}},search:function(b){var c,d,e,f=this,g=f.settings,h=this.getSearchOptions();if(g.score&&(e=f.settings.score.apply(this,[b]),"function"!=typeof e))throw new Error('Selectize "score" setting must be a function that returns a function');if(b!==f.lastQuery?(f.lastQuery=b,d=f.sifter.search(b,a.extend(h,{score:e})),f.currentResults=d):d=a.extend(!0,{},f.currentResults),g.hideSelected)for(c=d.items.length-1;c>=0;c--)-1!==f.items.indexOf(z(d.items[c].id))&&d.items.splice(c,1);return d},refreshOptions:function(b){var c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;"undefined"==typeof b&&(b=!0);var t=this,u=a.trim(t.$control_input.val()),v=t.search(u),w=t.$dropdown_content,x=t.$activeOption&&z(t.$activeOption.attr("data-value"));for(g=v.items.length,"number"==typeof t.settings.maxOptions&&(g=Math.min(g,t.settings.maxOptions)),h={},i=[],c=0;g>c;c++)for(j=t.options[v.items[c].id],k=t.render("option",j),l=j[t.settings.optgroupField]||"",m=a.isArray(l)?l:[l],e=0,f=m&&m.length;f>e;e++)l=m[e],t.optgroups.hasOwnProperty(l)||(l=""),h.hasOwnProperty(l)||(h[l]=[],i.push(l)),h[l].push(k);for(this.settings.lockOptgroupOrder&&i.sort(function(a,b){var c=t.optgroups[a].$order||0,d=t.optgroups[b].$order||0;return c-d}),n=[],c=0,g=i.length;g>c;c++)l=i[c],t.optgroups.hasOwnProperty(l)&&h[l].length?(o=t.render("optgroup_header",t.optgroups[l])||"",o+=h[l].join(""),n.push(t.render("optgroup",a.extend({},t.optgroups[l],{html:o})))):n.push(h[l].join(""));if(w.html(n.join("")),t.settings.highlight&&v.query.length&&v.tokens.length)for(c=0,g=v.tokens.length;g>c;c++)d(w,v.tokens[c].regex);if(!t.settings.hideSelected)for(c=0,g=t.items.length;g>c;c++)t.getOption(t.items[c]).addClass("selected");p=t.canCreate(u),p&&(w.prepend(t.render("option_create",{input:u})),s=a(w[0].childNodes[0])),t.hasOptions=v.items.length>0||p,t.hasOptions?(v.items.length>0?(r=x&&t.getOption(x),r&&r.length?q=r:"single"===t.settings.mode&&t.items.length&&(q=t.getOption(t.items[0])),q&&q.length||(q=s&&!t.settings.addPrecedence?t.getAdjacentOption(s,1):w.find("[data-selectable]:first"))):q=s,t.setActiveOption(q),b&&!t.isOpen&&t.open()):(t.setActiveOption(null),b&&t.isOpen&&t.close())},addOption:function(b){var c,d,e,f=this;if(a.isArray(b))for(c=0,d=b.length;d>c;c++)f.addOption(b[c]);else(e=f.registerOption(b))&&(f.userOptions[e]=!0,f.lastQuery=null,f.trigger("option_add",e,b))},registerOption:function(a){var b=z(a[this.settings.valueField]);return!b||this.options.hasOwnProperty(b)?!1:(a.$order=a.$order||++this.order,this.options[b]=a,b)},registerOptionGroup:function(a){var b=z(a[this.settings.optgroupValueField]);return b?(a.$order=a.$order||++this.order,this.optgroups[b]=a,b):!1},addOptionGroup:function(a,b){b[this.settings.optgroupValueField]=a,(a=this.registerOptionGroup(b))&&this.trigger("optgroup_add",a,b)},removeOptionGroup:function(a){this.optgroups.hasOwnProperty(a)&&(delete this.optgroups[a],this.renderCache={},this.trigger("optgroup_remove",a))},clearOptionGroups:function(){this.optgroups={},this.renderCache={},this.trigger("optgroup_clear")},updateOption:function(b,c){var d,e,f,g,h,i,j,k=this;if(b=z(b),f=z(c[k.settings.valueField]),null!==b&&k.options.hasOwnProperty(b)){if("string"!=typeof f)throw new Error("Value must be set in option data");j=k.options[b].$order,f!==b&&(delete k.options[b],g=k.items.indexOf(b),-1!==g&&k.items.splice(g,1,f)),c.$order=c.$order||j,k.options[f]=c,h=k.renderCache.item,i=k.renderCache.option,h&&(delete h[b],delete h[f]),i&&(delete i[b],delete i[f]),-1!==k.items.indexOf(f)&&(d=k.getItem(b),e=a(k.render("item",c)),d.hasClass("active")&&e.addClass("active"),d.replaceWith(e)),k.lastQuery=null,k.isOpen&&k.refreshOptions(!1)}},removeOption:function(a,b){var c=this;a=z(a);var d=c.renderCache.item,e=c.renderCache.option;d&&delete d[a],e&&delete e[a],delete c.userOptions[a],delete c.options[a],c.lastQuery=null,c.trigger("option_remove",a),c.removeItem(a,b)},clearOptions:function(){var a=this;a.loadedSearches={},a.userOptions={},a.renderCache={},a.options=a.sifter.items={},a.lastQuery=null,a.trigger("option_clear"),a.clear()},getOption:function(a){return this.getElementWithValue(a,this.$dropdown_content.find("[data-selectable]"))},getAdjacentOption:function(b,c){var d=this.$dropdown.find("[data-selectable]"),e=d.index(b)+c;return e>=0&&e<d.length?d.eq(e):a()},getElementWithValue:function(b,c){if(b=z(b),"undefined"!=typeof b&&null!==b)for(var d=0,e=c.length;e>d;d++)if(c[d].getAttribute("data-value")===b)return a(c[d]);return a()},getItem:function(a){return this.getElementWithValue(a,this.$control.children())},addItems:function(b,c){for(var d=a.isArray(b)?b:[b],e=0,f=d.length;f>e;e++)this.isPending=f-1>e,this.addItem(d[e],c)},addItem:function(b,c){var d=c?[]:["change"];F(this,d,function(){var d,e,f,g,h,i=this,j=i.settings.mode;return b=z(b),-1!==i.items.indexOf(b)?void("single"===j&&i.close()):void(i.options.hasOwnProperty(b)&&("single"===j&&i.clear(c),"multi"===j&&i.isFull()||(d=a(i.render("item",i.options[b])),h=i.isFull(),i.items.splice(i.caretPos,0,b),i.insertAtCaret(d),(!i.isPending||!h&&i.isFull())&&i.refreshState(),i.isSetup&&(f=i.$dropdown_content.find("[data-selectable]"),i.isPending||(e=i.getOption(b),g=i.getAdjacentOption(e,1).attr("data-value"),i.refreshOptions(i.isFocused&&"single"!==j),g&&i.setActiveOption(i.getOption(g))),!f.length||i.isFull()?i.close():i.positionDropdown(),i.updatePlaceholder(),i.trigger("item_add",b,d),i.updateOriginalInput({silent:c})))))})},removeItem:function(a,b){var c,d,e,f=this;c="object"==typeof a?a:f.getItem(a),a=z(c.attr("data-value")),d=f.items.indexOf(a),-1!==d&&(c.remove(),c.hasClass("active")&&(e=f.$activeItems.indexOf(c[0]),f.$activeItems.splice(e,1)),f.items.splice(d,1),f.lastQuery=null,!f.settings.persist&&f.userOptions.hasOwnProperty(a)&&f.removeOption(a,b),d<f.caretPos&&f.setCaret(f.caretPos-1),f.refreshState(),f.updatePlaceholder(),f.updateOriginalInput({silent:b}),f.positionDropdown(),f.trigger("item_remove",a,c))},createItem:function(b,c){var d=this,e=d.caretPos;b=b||a.trim(d.$control_input.val()||"");var f=arguments[arguments.length-1];if("function"!=typeof f&&(f=function(){}),"boolean"!=typeof c&&(c=!0),!d.canCreate(b))return f(),!1;d.lock();var g="function"==typeof d.settings.create?this.settings.create:function(a){var b={};return b[d.settings.labelField]=a,b[d.settings.valueField]=a,b},h=D(function(a){if(d.unlock(),!a||"object"!=typeof a)return f();var b=z(a[d.settings.valueField]);return"string"!=typeof b?f():(d.setTextboxValue(""),d.addOption(a),d.setCaret(e),d.addItem(b),d.refreshOptions(c&&"single"!==d.settings.mode),void f(a))}),i=g.apply(this,[b,h]);return"undefined"!=typeof i&&h(i),!0},refreshItems:function(){this.lastQuery=null,this.isSetup&&this.addItem(this.items),this.refreshState(),this.updateOriginalInput()},refreshState:function(){var a,b=this;b.isRequired&&(b.items.length&&(b.isInvalid=!1),b.$control_input.prop("required",a)),b.refreshClasses()},refreshClasses:function(){var b=this,c=b.isFull(),d=b.isLocked;b.$wrapper.toggleClass("rtl",b.rtl),b.$control.toggleClass("focus",b.isFocused).toggleClass("disabled",b.isDisabled).toggleClass("required",b.isRequired).toggleClass("invalid",b.isInvalid).toggleClass("locked",d).toggleClass("full",c).toggleClass("not-full",!c).toggleClass("input-active",b.isFocused&&!b.isInputHidden).toggleClass("dropdown-active",b.isOpen).toggleClass("has-options",!a.isEmptyObject(b.options)).toggleClass("has-items",b.items.length>0),b.$control_input.data("grow",!c&&!d)},isFull:function(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(a){var b,c,d,e,f=this;if(a=a||{},f.tagType===v){for(d=[],b=0,c=f.items.length;c>b;b++)e=f.options[f.items[b]][f.settings.labelField]||"",d.push('<option value="'+A(f.items[b])+'" selected="selected">'+A(e)+"</option>");d.length||this.$input.attr("multiple")||d.push('<option value="" selected="selected"></option>'),f.$input.html(d.join(""))}else f.$input.val(f.getValue()),f.$input.attr("value",f.$input.val());f.isSetup&&(a.silent||f.trigger("change",f.$input.val()))},updatePlaceholder:function(){if(this.settings.placeholder){var a=this.$control_input;this.items.length?a.removeAttr("placeholder"):a.attr("placeholder",this.settings.placeholder),a.triggerHandler("update",{force:!0})}},open:function(){var a=this;a.isLocked||a.isOpen||"multi"===a.settings.mode&&a.isFull()||(a.focus(),a.isOpen=!0,a.refreshState(),a.$dropdown.css({visibility:"hidden",display:"block"}),a.positionDropdown(),a.$dropdown.css({visibility:"visible"}),a.trigger("dropdown_open",a.$dropdown))},close:function(){var a=this,b=a.isOpen;"single"===a.settings.mode&&a.items.length&&a.hideInput(),a.isOpen=!1,a.$dropdown.hide(),a.setActiveOption(null),a.refreshState(),b&&a.trigger("dropdown_close",a.$dropdown)},positionDropdown:function(){var a=this.$control,b="body"===this.settings.dropdownParent?a.offset():a.position();b.top+=a.outerHeight(!0),this.$dropdown.css({width:a.outerWidth(),top:b.top,left:b.left})},clear:function(a){var b=this;b.items.length&&(b.$control.children(":not(input)").remove(),b.items=[],b.lastQuery=null,b.setCaret(0),b.setActiveItem(null),b.updatePlaceholder(),b.updateOriginalInput({silent:a}),b.refreshState(),b.showInput(),b.trigger("clear"))},insertAtCaret:function(b){var c=Math.min(this.caretPos,this.items.length);0===c?this.$control.prepend(b):a(this.$control[0].childNodes[c]).before(b),this.setCaret(c+1)},deleteSelection:function(b){var c,d,e,f,g,h,i,j,k,l=this;if(e=b&&b.keyCode===p?-1:1,f=H(l.$control_input[0]),l.$activeOption&&!l.settings.hideSelected&&(i=l.getAdjacentOption(l.$activeOption,-1).attr("data-value")),g=[],l.$activeItems.length){for(k=l.$control.children(".active:"+(e>0?"last":"first")),h=l.$control.children(":not(input)").index(k),e>0&&h++,c=0,d=l.$activeItems.length;d>c;c++)g.push(a(l.$activeItems[c]).attr("data-value"));
3
- b&&(b.preventDefault(),b.stopPropagation())}else(l.isFocused||"single"===l.settings.mode)&&l.items.length&&(0>e&&0===f.start&&0===f.length?g.push(l.items[l.caretPos-1]):e>0&&f.start===l.$control_input.val().length&&g.push(l.items[l.caretPos]));if(!g.length||"function"==typeof l.settings.onDelete&&l.settings.onDelete.apply(l,[g])===!1)return!1;for("undefined"!=typeof h&&l.setCaret(h);g.length;)l.removeItem(g.pop());return l.showInput(),l.positionDropdown(),l.refreshOptions(!0),i&&(j=l.getOption(i),j.length&&l.setActiveOption(j)),!0},advanceSelection:function(a,b){var c,d,e,f,g,h,i=this;0!==a&&(i.rtl&&(a*=-1),c=a>0?"last":"first",d=H(i.$control_input[0]),i.isFocused&&!i.isInputHidden?(f=i.$control_input.val().length,g=0>a?0===d.start&&0===d.length:d.start===f,g&&!f&&i.advanceCaret(a,b)):(h=i.$control.children(".active:"+c),h.length&&(e=i.$control.children(":not(input)").index(h),i.setActiveItem(null),i.setCaret(a>0?e+1:e))))},advanceCaret:function(a,b){var c,d,e=this;0!==a&&(c=a>0?"next":"prev",e.isShiftDown?(d=e.$control_input[c](),d.length&&(e.hideInput(),e.setActiveItem(d),b&&b.preventDefault())):e.setCaret(e.caretPos+a))},setCaret:function(b){var c=this;if(b="single"===c.settings.mode?c.items.length:Math.max(0,Math.min(c.items.length,b)),!c.isPending){var d,e,f,g;for(f=c.$control.children(":not(input)"),d=0,e=f.length;e>d;d++)g=a(f[d]).detach(),b>d?c.$control_input.before(g):c.$control.append(g)}c.caretPos=b},lock:function(){this.close(),this.isLocked=!0,this.refreshState()},unlock:function(){this.isLocked=!1,this.refreshState()},disable:function(){var a=this;a.$input.prop("disabled",!0),a.$control_input.prop("disabled",!0).prop("tabindex",-1),a.isDisabled=!0,a.lock()},enable:function(){var a=this;a.$input.prop("disabled",!1),a.$control_input.prop("disabled",!1).prop("tabindex",a.tabIndex),a.isDisabled=!1,a.unlock()},destroy:function(){var b=this,c=b.eventNS,d=b.revertSettings;b.trigger("destroy"),b.off(),b.$wrapper.remove(),b.$dropdown.remove(),b.$input.html("").append(d.$children).removeAttr("tabindex").removeClass("selectized").attr({tabindex:d.tabindex}).show(),b.$control_input.removeData("grow"),b.$input.removeData("selectize"),a(window).off(c),a(document).off(c),a(document.body).off(c),delete b.$input[0].selectize},render:function(a,b){var c,d,e="",f=!1,g=this,h=/^[\t \r\n]*<([a-z][a-z0-9\-_]*(?:\:[a-z][a-z0-9\-_]*)?)/i;return("option"===a||"item"===a)&&(c=z(b[g.settings.valueField]),f=!!c),f&&(y(g.renderCache[a])||(g.renderCache[a]={}),g.renderCache[a].hasOwnProperty(c))?g.renderCache[a][c]:(e=g.settings.render[a].apply(this,[b,A]),("option"===a||"option_create"===a)&&(e=e.replace(h,"<$1 data-selectable")),"optgroup"===a&&(d=b[g.settings.optgroupValueField]||"",e=e.replace(h,'<$1 data-group="'+B(A(d))+'"')),("option"===a||"item"===a)&&(e=e.replace(h,'<$1 data-value="'+B(A(c||""))+'"')),f&&(g.renderCache[a][c]=e),e)},clearCache:function(a){var b=this;"undefined"==typeof a?b.renderCache={}:delete b.renderCache[a]},canCreate:function(a){var b=this;if(!b.settings.create)return!1;var c=b.settings.createFilter;return!(!a.length||"function"==typeof c&&!c.apply(b,[a])||"string"==typeof c&&!new RegExp(c).test(a)||c instanceof RegExp&&!c.test(a))}}),L.count=0,L.defaults={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:!1,createOnBlur:!1,createFilter:null,highlight:!0,openOnFocus:!0,maxOptions:1e3,maxItems:null,hideSelected:null,addPrecedence:!1,selectOnTab:!1,preload:!1,allowEmptyOption:!1,closeAfterSelect:!1,scrollDuration:60,loadThrottle:300,loadingClass:"loading",dataAttr:"data-data",optgroupField:"optgroup",valueField:"value",labelField:"text",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"selectize-control",inputClass:"selectize-input",dropdownClass:"selectize-dropdown",dropdownContentClass:"selectize-dropdown-content",dropdownParent:null,copyClassesToDropdown:!0,render:{}},a.fn.selectize=function(b){var c=a.fn.selectize.defaults,d=a.extend({},c,b),e=d.dataAttr,f=d.labelField,g=d.valueField,h=d.optgroupField,i=d.optgroupLabelField,j=d.optgroupValueField,k=function(b,c){var h,i,j,k,l=b.attr(e);if(l)for(c.options=JSON.parse(l),h=0,i=c.options.length;i>h;h++)c.items.push(c.options[h][g]);else{var m=a.trim(b.val()||"");if(!d.allowEmptyOption&&!m.length)return;for(j=m.split(d.delimiter),h=0,i=j.length;i>h;h++)k={},k[f]=j[h],k[g]=j[h],c.options.push(k);c.items=j}},l=function(b,c){var k,l,m,n,o=c.options,p={},q=function(a){var b=e&&a.attr(e);return"string"==typeof b&&b.length?JSON.parse(b):null},r=function(b,e){b=a(b);var i=z(b.attr("value"));if(i||d.allowEmptyOption)if(p.hasOwnProperty(i)){if(e){var j=p[i][h];j?a.isArray(j)?j.push(e):p[i][h]=[j,e]:p[i][h]=e}}else{var k=q(b)||{};k[f]=k[f]||b.text(),k[g]=k[g]||i,k[h]=k[h]||e,p[i]=k,o.push(k),b.is(":selected")&&c.items.push(i)}},s=function(b){var d,e,f,g,h;for(b=a(b),f=b.attr("label"),f&&(g=q(b)||{},g[i]=f,g[j]=f,c.optgroups.push(g)),h=a("option",b),d=0,e=h.length;e>d;d++)r(h[d],f)};for(c.maxItems=b.attr("multiple")?null:1,n=b.children(),k=0,l=n.length;l>k;k++)m=n[k].tagName.toLowerCase(),"optgroup"===m?s(n[k]):"option"===m&&r(n[k])};return this.each(function(){if(!this.selectize){var e,f=a(this),g=this.tagName.toLowerCase(),h=f.attr("placeholder")||f.attr("data-placeholder");h||d.allowEmptyOption||(h=f.children('option[value=""]').text());var i={placeholder:h,options:[],optgroups:[],items:[]};"select"===g?l(f,i):k(f,i),e=new L(f,a.extend(!0,{},c,i,b))}})},a.fn.selectize.defaults=L.defaults,a.fn.selectize.support={validity:x},L.define("drag_drop",function(){if(!a.fn.sortable)throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".');if("multi"===this.settings.mode){var b=this;b.lock=function(){var a=b.lock;return function(){var c=b.$control.data("sortable");return c&&c.disable(),a.apply(b,arguments)}}(),b.unlock=function(){var a=b.unlock;return function(){var c=b.$control.data("sortable");return c&&c.enable(),a.apply(b,arguments)}}(),b.setup=function(){var c=b.setup;return function(){c.apply(this,arguments);var d=b.$control.sortable({items:"[data-value]",forcePlaceholderSize:!0,disabled:b.isLocked,start:function(a,b){b.placeholder.css("width",b.helper.css("width")),d.css({overflow:"visible"})},stop:function(){d.css({overflow:"hidden"});var c=b.$activeItems?b.$activeItems.slice():null,e=[];d.children("[data-value]").each(function(){e.push(a(this).attr("data-value"))}),b.setValue(e),b.setActiveItem(c)}})}}()}}),L.define("dropdown_header",function(b){var c=this;b=a.extend({title:"Untitled",headerClass:"selectize-dropdown-header",titleRowClass:"selectize-dropdown-header-title",labelClass:"selectize-dropdown-header-label",closeClass:"selectize-dropdown-header-close",html:function(a){return'<div class="'+a.headerClass+'"><div class="'+a.titleRowClass+'"><span class="'+a.labelClass+'">'+a.title+'</span><a href="javascript:void(0)" class="'+a.closeClass+'">&times;</a></div></div>'}},b),c.setup=function(){var d=c.setup;return function(){d.apply(c,arguments),c.$dropdown_header=a(b.html(b)),c.$dropdown.prepend(c.$dropdown_header)}}()}),L.define("optgroup_columns",function(b){var c=this;b=a.extend({equalizeWidth:!0,equalizeHeight:!0},b),this.getAdjacentOption=function(b,c){var d=b.closest("[data-group]").find("[data-selectable]"),e=d.index(b)+c;return e>=0&&e<d.length?d.eq(e):a()},this.onKeyDown=function(){var a=c.onKeyDown;return function(b){var d,e,f,g;return!this.isOpen||b.keyCode!==j&&b.keyCode!==m?a.apply(this,arguments):(c.ignoreHover=!0,g=this.$activeOption.closest("[data-group]"),d=g.find("[data-selectable]").index(this.$activeOption),g=b.keyCode===j?g.prev("[data-group]"):g.next("[data-group]"),f=g.find("[data-selectable]"),e=f.eq(Math.min(f.length-1,d)),void(e.length&&this.setActiveOption(e)))}}();var d=function(){var a,b=d.width,c=document;return"undefined"==typeof b&&(a=c.createElement("div"),a.innerHTML='<div style="width:50px;height:50px;position:absolute;left:-50px;top:-50px;overflow:auto;"><div style="width:1px;height:100px;"></div></div>',a=a.firstChild,c.body.appendChild(a),b=d.width=a.offsetWidth-a.clientWidth,c.body.removeChild(a)),b},e=function(){var e,f,g,h,i,j,k;if(k=a("[data-group]",c.$dropdown_content),f=k.length,f&&c.$dropdown_content.width()){if(b.equalizeHeight){for(g=0,e=0;f>e;e++)g=Math.max(g,k.eq(e).height());k.css({height:g})}b.equalizeWidth&&(j=c.$dropdown_content.innerWidth()-d(),h=Math.round(j/f),k.css({width:h}),f>1&&(i=j-h*(f-1),k.eq(f-1).css({width:i})))}};(b.equalizeHeight||b.equalizeWidth)&&(C.after(this,"positionDropdown",e),C.after(this,"refreshOptions",e))}),L.define("remove_button",function(b){if("single"!==this.settings.mode){b=a.extend({label:"&times;",title:"Remove",className:"remove",append:!0},b);var c=this,d='<a href="javascript:void(0)" class="'+b.className+'" tabindex="-1" title="'+A(b.title)+'">'+b.label+"</a>",e=function(a,b){var c=a.search(/(<\/[^>]+>\s*)$/);return a.substring(0,c)+b+a.substring(c)};this.setup=function(){var f=c.setup;return function(){if(b.append){var g=c.settings.render.item;c.settings.render.item=function(){return e(g.apply(this,arguments),d)}}f.apply(this,arguments),this.$control.on("click","."+b.className,function(b){if(b.preventDefault(),!c.isLocked){var d=a(b.currentTarget).parent();c.setActiveItem(d),c.deleteSelection()&&c.setCaret(c.items.length)}})}}()}}),L.define("restore_on_backspace",function(a){var b=this;a.text=a.text||function(a){return a[this.settings.labelField]},this.onKeyDown=function(){var c=b.onKeyDown;return function(b){var d,e;return b.keyCode===p&&""===this.$control_input.val()&&!this.$activeItems.length&&(d=this.caretPos-1,d>=0&&d<this.items.length)?(e=this.options[this.items[d]],this.deleteSelection(b)&&(this.setTextboxValue(a.text.apply(this,[e])),this.refreshOptions(!0)),void b.preventDefault()):c.apply(this,arguments)}}()}),L});
 
 
 
inc/custom-controls/controls/select/select-control.php DELETED
@@ -1,35 +0,0 @@
1
- <?php
2
- /**
3
- * cleverfox select control
4
- */
5
- if ( ! class_exists( 'WP_Customize_Control' ) ) {
6
- return;
7
- }
8
- class Cleverfox_Customizer_Select_Control extends WP_Customize_Control {
9
-
10
- public $type = 'hantus-select';
11
-
12
- public function enqueue() {
13
- wp_enqueue_script( 'selectize-js', CLEVERFOX_DIRECTORY_URI . 'controls/select/assets/js/selectize.min.js', array( 'jquery' ) );
14
- wp_enqueue_script( 'cleverfox-select-control', CLEVERFOX_DIRECTORY_URI . 'controls/select/assets/js/select-control.js', array( 'jquery', 'selectize-js' ), '', true );
15
- wp_enqueue_style( 'selectize-css', CLEVERFOX_DIRECTORY_URI . 'controls/select/selectize.default.css' );
16
- }
17
-
18
- public function render_content() {
19
- ?>
20
- <label>
21
- <?php if ( ! empty( $this->label ) ) : ?>
22
- <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
23
- <?php endif;
24
- if ( ! empty( $this->description ) ) : ?>
25
- <span class="description customize-control-description"><?php echo esc_html( $this->description ); ?></span>
26
- <?php endif; ?>
27
- <select <?php $this->link(); ?> class="hantus-select-control">
28
- <?php foreach ( $this->choices as $value => $label ) : ?>
29
- <option value="<?php echo esc_attr( $value ); ?>" <?php echo selected( $this->value(), $value, false ); ?> ><?php echo esc_html( $label ); ?></option>
30
- <?php endforeach; ?>
31
- </select>
32
- </label>
33
- <?php }
34
-
35
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/custom-controls/controls/select/selectize.default.css DELETED
@@ -1,387 +0,0 @@
1
- /**
2
- * selectize.default.css (v0.12.1) - Default Theme
3
- * Copyright (c) 2013–2015 Brian Reavis & contributors
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
6
- * file except in compliance with the License. You may obtain a copy of the License at:
7
- * http://www.apache.org/licenses/LICENSE-2.0
8
- *
9
- * Unless required by applicable law or agreed to in writing, software distributed under
10
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- * ANY KIND, either express or implied. See the License for the specific language
12
- * governing permissions and limitations under the License.
13
- *
14
- * @author Brian Reavis <brian@thirdroute.com>
15
- */
16
- .selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder {
17
- visibility: visible !important;
18
- background: #f2f2f2 !important;
19
- background: rgba(0, 0, 0, 0.06) !important;
20
- border: 0 none !important;
21
- -webkit-box-shadow: inset 0 0 12px 4px #ffffff;
22
- box-shadow: inset 0 0 12px 4px #ffffff;
23
- }
24
- .selectize-control.plugin-drag_drop .ui-sortable-placeholder::after {
25
- content: '!';
26
- visibility: hidden;
27
- }
28
- .selectize-control.plugin-drag_drop .ui-sortable-helper {
29
- -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
30
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
31
- }
32
- .selectize-dropdown-header {
33
- position: relative;
34
- padding: 5px 8px;
35
- border-bottom: 1px solid #d0d0d0;
36
- background: #f8f8f8;
37
- -webkit-border-radius: 3px 3px 0 0;
38
- -moz-border-radius: 3px 3px 0 0;
39
- border-radius: 3px 3px 0 0;
40
- }
41
- .selectize-dropdown-header-close {
42
- position: absolute;
43
- right: 8px;
44
- top: 50%;
45
- color: #303030;
46
- opacity: 0.4;
47
- margin-top: -12px;
48
- line-height: 20px;
49
- font-size: 20px !important;
50
- }
51
- .selectize-dropdown-header-close:hover {
52
- color: #000000;
53
- }
54
- .selectize-dropdown.plugin-optgroup_columns .optgroup {
55
- border-right: 1px solid #f2f2f2;
56
- border-top: 0 none;
57
- float: left;
58
- -webkit-box-sizing: border-box;
59
- -moz-box-sizing: border-box;
60
- box-sizing: border-box;
61
- }
62
- .selectize-dropdown.plugin-optgroup_columns .optgroup:last-child {
63
- border-right: 0 none;
64
- }
65
- .selectize-dropdown.plugin-optgroup_columns .optgroup:before {
66
- display: none;
67
- }
68
- .selectize-dropdown.plugin-optgroup_columns .optgroup-header {
69
- border-top: 0 none;
70
- }
71
- .selectize-control.plugin-remove_button [data-value] {
72
- position: relative;
73
- padding-right: 24px !important;
74
- }
75
- .selectize-control.plugin-remove_button [data-value] .remove {
76
- z-index: 1;
77
- /* fixes ie bug (see #392) */
78
- position: absolute;
79
- top: 0;
80
- right: 0;
81
- bottom: 0;
82
- width: 17px;
83
- text-align: center;
84
- font-weight: bold;
85
- font-size: 12px;
86
- color: inherit;
87
- text-decoration: none;
88
- vertical-align: middle;
89
- display: inline-block;
90
- padding: 2px 0 0 0;
91
- border-left: 1px solid #0073bb;
92
- -webkit-border-radius: 0 2px 2px 0;
93
- -moz-border-radius: 0 2px 2px 0;
94
- border-radius: 0 2px 2px 0;
95
- -webkit-box-sizing: border-box;
96
- -moz-box-sizing: border-box;
97
- box-sizing: border-box;
98
- }
99
- .selectize-control.plugin-remove_button [data-value] .remove:hover {
100
- background: rgba(0, 0, 0, 0.05);
101
- }
102
- .selectize-control.plugin-remove_button [data-value].active .remove {
103
- border-left-color: #00578d;
104
- }
105
- .selectize-control.plugin-remove_button .disabled [data-value] .remove:hover {
106
- background: none;
107
- }
108
- .selectize-control.plugin-remove_button .disabled [data-value] .remove {
109
- border-left-color: #aaaaaa;
110
- }
111
- .selectize-control {
112
- position: relative;
113
- }
114
- .selectize-dropdown,
115
- .selectize-input,
116
- .selectize-input input {
117
- color: #303030;
118
- font-family: inherit;
119
- font-size: 13px;
120
- line-height: 18px;
121
- -webkit-font-smoothing: inherit;
122
- }
123
- .selectize-input,
124
- .selectize-control.single .selectize-input.input-active {
125
- background: #ffffff;
126
- cursor: text;
127
- display: inline-block;
128
- }
129
- .selectize-input {
130
- border: 1px solid #d0d0d0;
131
- padding: 8px 8px;
132
- display: inline-block;
133
- width: 100%;
134
- overflow: hidden;
135
- position: relative;
136
- z-index: 1;
137
- -webkit-box-sizing: border-box;
138
- -moz-box-sizing: border-box;
139
- box-sizing: border-box;
140
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
141
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
142
- -webkit-border-radius: 3px;
143
- -moz-border-radius: 3px;
144
- border-radius: 3px;
145
- }
146
- .selectize-control.multi .selectize-input.has-items {
147
- padding: 5px 8px 2px;
148
- }
149
- .selectize-input.full {
150
- background-color: #ffffff;
151
- }
152
- .selectize-input.disabled,
153
- .selectize-input.disabled * {
154
- cursor: default !important;
155
- }
156
- .selectize-input.focus {
157
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
158
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
159
- }
160
- .selectize-input.dropdown-active {
161
- -webkit-border-radius: 3px 3px 0 0;
162
- -moz-border-radius: 3px 3px 0 0;
163
- border-radius: 3px 3px 0 0;
164
- }
165
- .selectize-input > * {
166
- vertical-align: baseline;
167
- display: -moz-inline-stack;
168
- display: inline-block;
169
- zoom: 1;
170
- *display: inline;
171
- }
172
- .selectize-control.multi .selectize-input > div {
173
- cursor: pointer;
174
- margin: 0 3px 3px 0;
175
- padding: 2px 6px;
176
- background: #1da7ee;
177
- color: #ffffff;
178
- border: 1px solid #0073bb;
179
- }
180
- .selectize-control.multi .selectize-input > div.active {
181
- background: #92c836;
182
- color: #ffffff;
183
- border: 1px solid #00578d;
184
- }
185
- .selectize-control.multi .selectize-input.disabled > div,
186
- .selectize-control.multi .selectize-input.disabled > div.active {
187
- color: #ffffff;
188
- background: #d2d2d2;
189
- border: 1px solid #aaaaaa;
190
- }
191
- .selectize-input > input {
192
- display: inline-block !important;
193
- padding: 0 !important;
194
- min-height: 0 !important;
195
- max-height: none !important;
196
- max-width: 100% !important;
197
- margin: 0 1px !important;
198
- text-indent: 0 !important;
199
- border: 0 none !important;
200
- background: none !important;
201
- line-height: inherit !important;
202
- -webkit-user-select: auto !important;
203
- -webkit-box-shadow: none !important;
204
- box-shadow: none !important;
205
- }
206
- .selectize-input > input::-ms-clear {
207
- display: none;
208
- }
209
- .selectize-input > input:focus {
210
- outline: none !important;
211
- }
212
- .selectize-input::after {
213
- content: ' ';
214
- display: block;
215
- clear: left;
216
- }
217
- .selectize-input.dropdown-active::before {
218
- content: ' ';
219
- display: block;
220
- position: absolute;
221
- background: #f0f0f0;
222
- height: 1px;
223
- bottom: 0;
224
- left: 0;
225
- right: 0;
226
- }
227
- .selectize-dropdown {
228
- position: absolute;
229
- z-index: 10;
230
- border: 1px solid #d0d0d0;
231
- background: #ffffff;
232
- margin: -1px 0 0 0;
233
- border-top: 0 none;
234
- -webkit-box-sizing: border-box;
235
- -moz-box-sizing: border-box;
236
- box-sizing: border-box;
237
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
238
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
239
- -webkit-border-radius: 0 0 3px 3px;
240
- -moz-border-radius: 0 0 3px 3px;
241
- border-radius: 0 0 3px 3px;
242
- }
243
- .selectize-dropdown [data-selectable] {
244
- cursor: pointer;
245
- overflow: hidden;
246
- }
247
- .selectize-dropdown [data-selectable] .highlight {
248
- background: rgba(125, 168, 208, 0.2);
249
- -webkit-border-radius: 1px;
250
- -moz-border-radius: 1px;
251
- border-radius: 1px;
252
- }
253
- .selectize-dropdown [data-selectable],
254
- .selectize-dropdown .optgroup-header {
255
- padding: 5px 8px;
256
- }
257
- .selectize-dropdown .optgroup:first-child .optgroup-header {
258
- border-top: 0 none;
259
- }
260
- .selectize-dropdown .optgroup-header {
261
- color: #303030;
262
- background: #ffffff;
263
- cursor: default;
264
- }
265
- .selectize-dropdown .active {
266
- background-color: #f5fafd;
267
- color: #495c68;
268
- }
269
- .selectize-dropdown .active.create {
270
- color: #495c68;
271
- }
272
- .selectize-dropdown .create {
273
- color: rgba(48, 48, 48, 0.5);
274
- }
275
- .selectize-dropdown-content {
276
- overflow-y: auto;
277
- overflow-x: hidden;
278
- max-height: 200px;
279
- }
280
- .selectize-control.single .selectize-input,
281
- .selectize-control.single .selectize-input input {
282
- cursor: pointer;
283
- }
284
- .selectize-control.single .selectize-input.input-active,
285
- .selectize-control.single .selectize-input.input-active input {
286
- cursor: text;
287
- }
288
- .selectize-control.single .selectize-input:after {
289
- content: ' ';
290
- display: block;
291
- position: absolute;
292
- top: 50%;
293
- right: 15px;
294
- margin-top: -3px;
295
- width: 0;
296
- height: 0;
297
- border-style: solid;
298
- border-width: 5px 5px 0 5px;
299
- border-color: #808080 transparent transparent transparent;
300
- }
301
- .selectize-control.single .selectize-input.dropdown-active:after {
302
- margin-top: -4px;
303
- border-width: 0 5px 5px 5px;
304
- border-color: transparent transparent #808080 transparent;
305
- }
306
- .selectize-control.rtl.single .selectize-input:after {
307
- left: 15px;
308
- right: auto;
309
- }
310
- .selectize-control.rtl .selectize-input > input {
311
- margin: 0 4px 0 -2px !important;
312
- }
313
- .selectize-control .selectize-input.disabled {
314
- opacity: 0.5;
315
- background-color: #fafafa;
316
- }
317
- .selectize-control.multi .selectize-input.has-items {
318
- padding-left: 5px;
319
- padding-right: 5px;
320
- }
321
- .selectize-control.multi .selectize-input.disabled [data-value] {
322
- color: #999;
323
- text-shadow: none;
324
- background: none;
325
- -webkit-box-shadow: none;
326
- box-shadow: none;
327
- }
328
- .selectize-control.multi .selectize-input.disabled [data-value],
329
- .selectize-control.multi .selectize-input.disabled [data-value] .remove {
330
- border-color: #e6e6e6;
331
- }
332
- .selectize-control.multi .selectize-input.disabled [data-value] .remove {
333
- background: none;
334
- }
335
- .selectize-control.multi .selectize-input [data-value] {
336
- text-shadow: 0 1px 0 rgba(0, 51, 83, 0.3);
337
- -webkit-border-radius: 3px;
338
- -moz-border-radius: 3px;
339
- border-radius: 3px;
340
- background-color: #1b9dec;
341
- background-image: -moz-linear-gradient(top, #1da7ee, #178ee9);
342
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#1da7ee), to(#178ee9));
343
- background-image: -webkit-linear-gradient(top, #1da7ee, #178ee9);
344
- background-image: -o-linear-gradient(top, #1da7ee, #178ee9);
345
- background-image: linear-gradient(to bottom, #1da7ee, #178ee9);
346
- background-repeat: repeat-x;
347
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1da7ee', endColorstr='#ff178ee9', GradientType=0);
348
- -webkit-box-shadow: 0 1px 0 rgba(0,0,0,0.2),inset 0 1px rgba(255,255,255,0.03);
349
- box-shadow: 0 1px 0 rgba(0,0,0,0.2),inset 0 1px rgba(255,255,255,0.03);
350
- }
351
- .selectize-control.multi .selectize-input [data-value].active {
352
- background-color: #0085d4;
353
- background-image: -moz-linear-gradient(top, #008fd8, #0075cf);
354
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#008fd8), to(#0075cf));
355
- background-image: -webkit-linear-gradient(top, #008fd8, #0075cf);
356
- background-image: -o-linear-gradient(top, #008fd8, #0075cf);
357
- background-image: linear-gradient(to bottom, #008fd8, #0075cf);
358
- background-repeat: repeat-x;
359
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff008fd8', endColorstr='#ff0075cf', GradientType=0);
360
- }
361
- .selectize-control.single .selectize-input {
362
- -webkit-box-shadow: 0 1px 0 rgba(0,0,0,0.05), inset 0 1px 0 rgba(255,255,255,0.8);
363
- box-shadow: 0 1px 0 rgba(0,0,0,0.05), inset 0 1px 0 rgba(255,255,255,0.8);
364
- background-color: #f9f9f9;
365
- background-image: -moz-linear-gradient(top, #fefefe, #f2f2f2);
366
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fefefe), to(#f2f2f2));
367
- background-image: -webkit-linear-gradient(top, #fefefe, #f2f2f2);
368
- background-image: -o-linear-gradient(top, #fefefe, #f2f2f2);
369
- background-image: linear-gradient(to bottom, #fefefe, #f2f2f2);
370
- background-repeat: repeat-x;
371
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffefefe', endColorstr='#fff2f2f2', GradientType=0);
372
- }
373
- .selectize-control.single .selectize-input,
374
- .selectize-dropdown.single {
375
- border-color: #b8b8b8;
376
- }
377
- .selectize-dropdown .optgroup-header {
378
- padding-top: 7px;
379
- font-weight: bold;
380
- font-size: 0.85em;
381
- }
382
- .selectize-dropdown .optgroup {
383
- border-top: 1px solid #f0f0f0;
384
- }
385
- .selectize-dropdown .optgroup:first-child {
386
- border-top: 0 none;
387
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/envira/features/funfact-section.php CHANGED
@@ -173,55 +173,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
173
  }
174
  add_action( 'customize_register', 'startkit_funfact_setting' );
175
  endif;
176
- ?>
177
- <?php
178
- // Customizer tabs
179
-
180
- function startkit_funfact_customize_register( $wp_customize ) {
181
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
182
-
183
- // Pricing Tables Tabs
184
- $wp_customize->add_setting(
185
- 'startkit_funfact_tabs', array(
186
- 'sanitize_callback' => 'sanitize_text_field',
187
- )
188
- );
189
 
190
- $wp_customize->add_control(
191
- new Cleverfox_Customize_Control_Tabs(
192
- $wp_customize, 'startkit_funfact_tabs', array(
193
- 'section' => 'Funfact_setting',
194
- 'tabs' => array(
195
- 'general' => array(
196
- 'nicename' => esc_html__( 'Setting', 'startkit' ),
197
- 'icon' => 'cogs',
198
- 'controls' => array(
199
- 'hide_show_funfact',
200
- ),
201
- ),
202
- 'first' => array(
203
- 'nicename' => esc_html__( 'Content', 'startkit' ),
204
- 'icon' => 'info',
205
- 'controls' => array(
206
- 'funfact_contents',
207
- 'startkit_funfact_upgrade_to_pro',
208
- ),
209
- ),
210
- 'second' => array(
211
- 'nicename' => esc_html__( 'Background', 'startkit' ),
212
- 'icon' => 'history',
213
- 'controls' => array(
214
- 'funfact_background_setting',
215
- 'funfact_background_position',
216
- ),
217
- ),
218
- ),
219
- )
220
- )
221
- );
222
- }
223
- }
224
- add_action( 'customize_register', 'startkit_funfact_customize_register' );
225
  // funfact selective refresh
226
  function startkit_home_funfact_section_partials( $wp_customize ){
227
  // hide show feature
173
  }
174
  add_action( 'customize_register', 'startkit_funfact_setting' );
175
  endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
176
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  // funfact selective refresh
178
  function startkit_home_funfact_section_partials( $wp_customize ){
179
  // hide show feature
inc/hantus/features/navigation.php CHANGED
@@ -2,211 +2,219 @@
2
  // Customizer tabs for slider section
3
  if ( ! function_exists( 'hantus_slider_manager_customize_register' ) ) :
4
  function hantus_slider_manager_customize_register( $wp_customize ) {
5
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
6
-
7
- // Pricing Tables Tabs
8
- $wp_customize->add_setting(
9
- 'hantus_slider_tabs', array(
10
- 'sanitize_callback' => 'sanitize_text_field',
11
- )
12
- );
13
-
14
- $wp_customize->add_control(
15
- new Cleverfox_Customize_Control_Tabs(
16
- $wp_customize, 'hantus_slider_tabs', array(
17
- 'section' => 'slider_setting',
18
- 'tabs' => array(
19
- 'general' => array(
20
- 'nicename' => esc_html__( 'setting', 'startkit' ),
21
- 'icon' => 'cogs',
22
- 'controls' => array(
23
- 'hide_show_slider',
24
-
25
- ),
26
- ),
27
- 'Content' => array(
28
- 'nicename' => esc_html__( 'Default', 'startkit' ),
29
- 'icon' => 'table',
30
- 'controls' => array(
31
- 'slider',
32
- 'hantus_slider_upgrade_to_pro',
33
- 'slider_opacity',
34
- 'slider_overlay_enable',
35
- 'slide_overlay_color',
36
- 'slide_title_color',
37
- 'slide_sbtitle_color',
38
- 'slide_desc_color',
39
- ),
40
- ),
41
- ),
42
-
43
- )
44
- )
45
- );
46
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  }
48
  add_action( 'customize_register', 'hantus_slider_manager_customize_register' );
49
- endif;
50
-
51
-
52
- // Customizer tabs blogs
53
- function hantus_blog_customize_register( $wp_customize ) {
54
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
55
-
56
- // Pricing Tables Tabs
57
- $wp_customize->add_setting(
58
- 'hantus_blog_tabs', array(
59
- 'sanitize_callback' => 'sanitize_text_field',
60
- )
61
- );
62
-
63
- $wp_customize->add_control(
64
- new Cleverfox_Customize_Control_Tabs(
65
- $wp_customize, 'hantus_blog_tabs', array(
66
- 'section' => 'blog_setting',
67
- 'tabs' => array(
68
- 'general' => array(
69
- 'nicename' => esc_html__( 'Setting', 'hantus' ),
70
- 'icon' => 'cogs',
71
- 'controls' => array(
72
- 'hide_show_blog',
73
- ),
74
- ),
75
- 'first' => array(
76
- 'nicename' => esc_html__( 'Header', 'hantus' ),
77
- 'icon' => 'header',
78
- 'controls' => array(
79
- 'blog_title',
80
- 'blog_description',
81
- ),
82
- ),
83
- 'second' => array(
84
- 'nicename' => esc_html__( 'Content', 'hantus' ),
85
- 'icon' => 'info',
86
- 'controls' => array(
87
- 'blog_display_num',
88
- ),
89
- ),
90
- ),
91
- )
92
- )
93
- );
94
- }
95
- }
96
-
97
- add_action( 'customize_register', 'hantus_blog_customize_register' );
98
-
99
- // Customizer tabs for header Search & cart
100
- function hantus_search_customize_register( $wp_customize ) {
101
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
102
- $wp_customize->add_setting(
103
- 'hantus_search_tabs', array(
104
- 'sanitize_callback' => 'sanitize_text_field',
105
- )
106
- );
107
- $wp_customize->add_control(
108
- new Cleverfox_Customize_Control_Tabs(
109
- $wp_customize, 'hantus_search_tabs', array(
110
- 'section' => 'header_contact_cart',
111
- 'tabs' => array(
112
- 'general' => array(
113
- 'nicename' => esc_html__( 'Setting', 'hantus' ),
114
- 'icon' => 'cogs',
115
- 'controls' => array(
116
- 'search_header_setting',
117
- ),
118
- ),
119
- 'first' => array(
120
- 'nicename' => esc_html__( 'Search', 'hantus' ),
121
- 'icon' => 'table',
122
- 'controls' => array(
123
- 'header_search',
124
- ),
125
- ),
126
- ),
127
- )
128
- )
129
- );
130
- }
131
- }
132
- add_action( 'customize_register', 'hantus_search_customize_register' );
133
-
134
- // Customizer tabs for copyright_content
135
-
136
- function hantus_copyright_content_customize_register( $wp_customize ) {
137
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
138
-
139
- // Pricing Tables Tabs
140
- $wp_customize->add_setting(
141
- 'hantus_copyrights_tabs', array(
142
- 'sanitize_callback' => 'sanitize_text_field',
143
- )
144
- );
145
-
146
- $wp_customize->add_control(
147
- new Cleverfox_Customize_Control_Tabs(
148
- $wp_customize, 'hantus_copyrights_tabs', array(
149
- 'section' => 'footer_copyright',
150
- 'tabs' => array(
151
- 'general' => array(
152
- 'nicename' => esc_html__( 'Settings', 'hantus' ),
153
- 'icon' => 'cogs',
154
- 'controls' => array(
155
- 'hide_show_copyright',
156
- ),
157
- ),
158
- 'first' => array(
159
- 'nicename' => esc_html__( 'Content', 'hantus' ),
160
- 'icon' => 'table',
161
- 'controls' => array(
162
- 'copyright_content'
163
- ),
164
- ),
165
- ),
166
- )
167
- )
168
- );
169
- }
170
- }
171
- add_action( 'customize_register', 'hantus_copyright_content_customize_register' );
172
-
173
-
174
- // Customizer tabs for Payment
175
- function hantus_payment_content_customize_register( $wp_customize ) {
176
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
177
-
178
- // Pricing Tables Tabs
179
- $wp_customize->add_setting(
180
- 'hantus_payment_tabs', array(
181
- 'sanitize_callback' => 'sanitize_text_field',
182
- )
183
- );
184
-
185
- $wp_customize->add_control(
186
- new Cleverfox_Customize_Control_Tabs(
187
- $wp_customize, 'hantus_payment_tabs', array(
188
- 'section' => 'footer_icon',
189
- 'tabs' => array(
190
- 'general' => array(
191
- 'nicename' => esc_html__( 'Settings', 'hantus' ),
192
- 'icon' => 'cogs',
193
- 'controls' => array(
194
- 'hide_show_payment',
195
- ),
196
- ),
197
- 'first' => array(
198
- 'nicename' => esc_html__( 'Content', 'hantus' ),
199
- 'icon' => 'table',
200
- 'controls' => array(
201
- 'footer_Payment_icon',
202
- ),
203
- ),
204
- ),
205
- )
206
- )
207
- );
208
- }
209
- }
210
-
211
- add_action( 'customize_register', 'hantus_payment_content_customize_register' );
212
- ?>
2
  // Customizer tabs for slider section
3
  if ( ! function_exists( 'hantus_slider_manager_customize_register' ) ) :
4
  function hantus_slider_manager_customize_register( $wp_customize ) {
5
+
6
+ // Setting Head
7
+ $wp_customize->add_setting(
8
+ 'hdr_search_setting_head'
9
+ ,array(
10
+ 'capability' => 'edit_theme_options',
11
+ 'sanitize_callback' => 'hantus_sanitize_text',
12
+ )
13
+ );
14
+
15
+ $wp_customize->add_control(
16
+ 'hdr_search_setting_head',
17
+ array(
18
+ 'type' => 'hidden',
19
+ 'label' => __('Setting','hantus'),
20
+ 'section' => 'header_contact_cart',
21
+ 'priority' => 1,
22
+ )
23
+ );
24
+
25
+ // Search Head
26
+ $wp_customize->add_setting(
27
+ 'hdr_search_head'
28
+ ,array(
29
+ 'capability' => 'edit_theme_options',
30
+ 'sanitize_callback' => 'hantus_sanitize_text',
31
+ )
32
+ );
33
+
34
+ $wp_customize->add_control(
35
+ 'hdr_search_head',
36
+ array(
37
+ 'type' => 'hidden',
38
+ 'label' => __('Search','hantus'),
39
+ 'section' => 'header_contact_cart',
40
+ 'priority' => 3,
41
+ )
42
+ );
43
+
44
+ // Setting Head
45
+ $wp_customize->add_setting(
46
+ 'menu_contact_setting_head'
47
+ ,array(
48
+ 'capability' => 'edit_theme_options',
49
+ 'sanitize_callback' => 'hantus_sanitize_text',
50
+ )
51
+ );
52
+
53
+ $wp_customize->add_control(
54
+ 'menu_contact_setting_head',
55
+ array(
56
+ 'type' => 'hidden',
57
+ 'label' => __('Setting','hantus'),
58
+ 'section' => 'header_menu_contact',
59
+ 'priority' => 1,
60
+ )
61
+ );
62
+
63
+ // Contact Head
64
+ $wp_customize->add_setting(
65
+ 'menu_contact_head'
66
+ ,array(
67
+ 'capability' => 'edit_theme_options',
68
+ 'sanitize_callback' => 'hantus_sanitize_text',
69
+ )
70
+ );
71
+
72
+ $wp_customize->add_control(
73
+ 'menu_contact_head',
74
+ array(
75
+ 'type' => 'hidden',
76
+ 'label' => __('Content','hantus'),
77
+ 'section' => 'header_menu_contact',
78
+ 'priority' => 3,
79
+ )
80
+ );
81
+
82
+ // Setting Head
83
+ $wp_customize->add_setting(
84
+ 'blog_setting_head'
85
+ ,array(
86
+ 'capability' => 'edit_theme_options',
87
+ 'sanitize_callback' => 'hantus_sanitize_text',
88
+ )
89
+ );
90
+
91
+ $wp_customize->add_control(
92
+ 'blog_setting_head',
93
+ array(
94
+ 'type' => 'hidden',
95
+ 'label' => __('Setting','hantus'),
96
+ 'section' => 'blog_setting',
97
+ 'priority' => 1,
98
+ )
99
+ );
100
+
101
+ // Setting Head
102
+ $wp_customize->add_setting(
103
+ 'blog_head'
104
+ ,array(
105
+ 'capability' => 'edit_theme_options',
106
+ 'sanitize_callback' => 'hantus_sanitize_text',
107
+ )
108
+ );
109
+
110
+ $wp_customize->add_control(
111
+ 'blog_head',
112
+ array(
113
+ 'type' => 'hidden',
114
+ 'label' => __('Header','hantus'),
115
+ 'section' => 'blog_setting',
116
+ 'priority' => 5,
117
+ )
118
+ );
119
+
120
+
121
+ // Content Head
122
+ $wp_customize->add_setting(
123
+ 'blog_content_head'
124
+ ,array(
125
+ 'capability' => 'edit_theme_options',
126
+ 'sanitize_callback' => 'hantus_sanitize_text',
127
+ )
128
+ );
129
+
130
+ $wp_customize->add_control(
131
+ 'blog_content_head',
132
+ array(
133
+ 'type' => 'hidden',
134
+ 'label' => __('Content','hantus'),
135
+ 'section' => 'blog_setting',
136
+ 'priority' => 9,
137
+ )
138
+ );
139
+
140
+
141
+ // Setting Head
142
+ $wp_customize->add_setting(
143
+ 'copyright_setting_head'
144
+ ,array(
145
+ 'capability' => 'edit_theme_options',
146
+ 'sanitize_callback' => 'hantus_sanitize_text',
147
+ )
148
+ );
149
+
150
+ $wp_customize->add_control(
151
+ 'copyright_setting_head',
152
+ array(
153
+ 'type' => 'hidden',
154
+ 'label' => __('Setting','hantus'),
155
+ 'section' => 'footer_copyright',
156
+ 'priority' => 1,
157
+ )
158
+ );
159
+
160
+ // Content Head
161
+ $wp_customize->add_setting(
162
+ 'copyright_content_head'
163
+ ,array(
164
+ 'capability' => 'edit_theme_options',
165
+ 'sanitize_callback' => 'hantus_sanitize_text',
166
+ )
167
+ );
168
+
169
+ $wp_customize->add_control(
170
+ 'copyright_content_head',
171
+ array(
172
+ 'type' => 'hidden',
173
+ 'label' => __('Content','hantus'),
174
+ 'section' => 'footer_copyright',
175
+ 'priority' => 5,
176
+ )
177
+ );
178
+
179
+
180
+ // Setting Head
181
+ $wp_customize->add_setting(
182
+ 'footer_payment_setting_head'
183
+ ,array(
184
+ 'capability' => 'edit_theme_options',
185
+ 'sanitize_callback' => 'hantus_sanitize_text',
186
+ )
187
+ );
188
+
189
+ $wp_customize->add_control(
190
+ 'footer_payment_setting_head',
191
+ array(
192
+ 'type' => 'hidden',
193
+ 'label' => __('Setting','hantus'),
194
+ 'section' => 'footer_icon',
195
+ 'priority' => 1,
196
+ )
197
+ );
198
+
199
+ // Content Head
200
+ $wp_customize->add_setting(
201
+ 'footer_payment_content_head'
202
+ ,array(
203
+ 'capability' => 'edit_theme_options',
204
+ 'sanitize_callback' => 'hantus_sanitize_text',
205
+ )
206
+ );
207
+
208
+ $wp_customize->add_control(
209
+ 'footer_payment_content_head',
210
+ array(
211
+ 'type' => 'hidden',
212
+ 'label' => __('Content','hantus'),
213
+ 'section' => 'footer_icon',
214
+ 'priority' => 5,
215
+ )
216
+ );
217
+
218
  }
219
  add_action( 'customize_register', 'hantus_slider_manager_customize_register' );
220
+ endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/hantus/features/section-info.php CHANGED
@@ -12,6 +12,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
12
  'priority' => apply_filters( 'hantus_section_priority', 12, 'hantus_info' ),
13
  )
14
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  // info Hide/ Show Setting //
16
  if ( class_exists( 'Hantus_Customizer_Toggle_Control' ) ) {
17
  $wp_customize->add_setting(
@@ -31,13 +51,32 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
31
  'section' => 'info_setting',
32
  'settings' => 'hide_show_info',
33
  'type' => 'ios', // light, ios, flat
 
34
  )
35
  ));
36
  }
37
  /*=========================================
38
  Info contents Section first
39
  =========================================*/
 
 
 
 
 
 
 
 
40
 
 
 
 
 
 
 
 
 
 
 
41
  // Image //
42
  $wp_customize->add_setting(
43
  'info_first_img_setting' ,
@@ -53,6 +92,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
53
  'label' => __( 'Image', 'hantus' ),
54
  'section' => 'info_setting',
55
  'settings' => 'info_first_img_setting',
 
56
  )
57
  ));
58
 
@@ -74,7 +114,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
74
  'section' => 'info_setting',
75
  'settings'=> 'info_title',
76
  'type' => 'text',
77
- 'description' => __('', 'hantus' ),
78
  )
79
  );
80
 
@@ -96,7 +136,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
96
  'section' => 'info_setting',
97
  'settings'=> 'info_description',
98
  'type' => 'text',
99
- 'description' => __('', 'hantus' ),
100
  )
101
  );
102
 
@@ -116,6 +156,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
116
  'label' => __('Button Label','hantus'),
117
  'section' => 'info_setting',
118
  'type' => 'text',
 
119
  )
120
  );
121
 
@@ -135,13 +176,32 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
135
  'label' => __('Button Link','hantus'),
136
  'section' => 'info_setting',
137
  'type' => 'text',
 
138
  )
139
  );
140
 
141
  /*=========================================
142
  Info contents Section second
143
  =========================================*/
 
 
 
 
 
 
 
 
144
 
 
 
 
 
 
 
 
 
 
 
145
  // Image //
146
  $wp_customize->add_setting(
147
  'info_second_img_setting' ,
@@ -157,6 +217,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
157
  'label' => __( 'Image', 'hantus' ),
158
  'section' => 'info_setting',
159
  'settings' => 'info_second_img_setting',
 
160
  )
161
  ));
162
  // info title //
@@ -177,7 +238,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
177
  'section' => 'info_setting',
178
  'settings'=> 'info_title2',
179
  'type' => 'text',
180
- 'description' => __('', 'hantus' ),
181
  )
182
  );
183
 
@@ -199,7 +260,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
199
  'section' => 'info_setting',
200
  'settings'=> 'info_description2',
201
  'type' => 'text',
202
- 'description' => __('', 'hantus' ),
203
  )
204
  );
205
 
@@ -219,6 +280,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
219
  'label' => __('Button Label','hantus'),
220
  'section' => 'info_setting',
221
  'type' => 'text',
 
222
  )
223
  );
224
 
@@ -238,13 +300,33 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
238
  'label' => __('Button Link','hantus'),
239
  'section' => 'info_setting',
240
  'type' => 'text',
 
241
  )
242
  );
243
 
244
  /*=========================================
245
  Info contents Section third
246
  =========================================*/
 
 
 
 
 
 
 
 
 
247
 
 
 
 
 
 
 
 
 
 
 
248
  // Image //
249
  $wp_customize->add_setting(
250
  'info_third_img_setting' ,
@@ -260,6 +342,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
260
  'label' => __( 'Image', 'hantus' ),
261
  'section' => 'info_setting',
262
  'settings' => 'info_third_img_setting',
 
263
  )
264
  ));
265
  // info title //
@@ -280,7 +363,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
280
  'section' => 'info_setting',
281
  'settings'=> 'info_title3',
282
  'type' => 'text',
283
- 'description' => __('', 'hantus' ),
284
  )
285
  );
286
 
@@ -302,7 +385,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
302
  'section' => 'info_setting',
303
  'settings'=> 'info_description3',
304
  'type' => 'text',
305
- 'description' => __('', 'hantus' ),
306
  )
307
  );
308
 
@@ -322,6 +405,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
322
  'label' => __('Button Label','hantus'),
323
  'section' => 'info_setting',
324
  'type' => 'text',
 
325
  )
326
  );
327
 
@@ -341,78 +425,13 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
341
  'label' => __('Button Link','hantus'),
342
  'section' => 'info_setting',
343
  'type' => 'text',
 
344
  )
345
  );
346
 
347
  }
348
  add_action( 'customize_register', 'hantus_info_setting' );
349
- ?>
350
- <?php
351
- // Customizer tabs
352
-
353
- function hantus_info_customize_register( $wp_customize ) {
354
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
355
-
356
- // Pricing Tables Tabs
357
- $wp_customize->add_setting(
358
- 'hantus_info_tabs', array(
359
- 'sanitize_callback' => 'sanitize_text_field',
360
- )
361
- );
362
-
363
- $wp_customize->add_control(
364
- new Cleverfox_Customize_Control_Tabs(
365
- $wp_customize, 'hantus_info_tabs', array(
366
- 'section' => 'info_setting',
367
- 'tabs' => array(
368
- 'general' => array(
369
- 'nicename' => esc_html__( 'Setting', 'hantus' ),
370
- 'icon' => 'cogs',
371
- 'controls' => array(
372
- 'hide_show_info',
373
- ),
374
- ),
375
- 'first' => array(
376
- 'nicename' => esc_html__( 'First', 'hantus' ),
377
- 'icon' => 'info',
378
- 'controls' => array(
379
- 'info_first_img_setting',
380
- 'info_title',
381
- 'info_description',
382
- 'info_btn',
383
- 'info_link',
384
- ),
385
- ),
386
- 'second' => array(
387
- 'nicename' => esc_html__( 'Second', 'hantus' ),
388
- 'icon' => 'info',
389
- 'controls' => array(
390
- 'info_second_img_setting',
391
- 'info_title2',
392
- 'info_description2',
393
- 'info_btn2',
394
- 'info_link2',
395
- ),
396
- ),
397
- 'third' => array(
398
- 'nicename' => esc_html__( 'Third', 'hantus' ),
399
- 'icon' => 'info',
400
- 'controls' => array(
401
- 'info_third_img_setting',
402
- 'info_title3',
403
- 'info_description3',
404
- 'info_btn3',
405
- 'info_link3',
406
- ),
407
- ),
408
- ),
409
- )
410
- )
411
- );
412
- }
413
- }
414
 
415
- add_action( 'customize_register', 'hantus_info_customize_register' );
416
  /**
417
  * Add selective refresh for Front page section section controls.
418
  */
12
  'priority' => apply_filters( 'hantus_section_priority', 12, 'hantus_info' ),
13
  )
14
  );
15
+
16
+ // Setting Head
17
+ $wp_customize->add_setting(
18
+ 'hnts_info_setting_head'
19
+ ,array(
20
+ 'capability' => 'edit_theme_options',
21
+ 'sanitize_callback' => 'hantus_sanitize_text',
22
+ )
23
+ );
24
+
25
+ $wp_customize->add_control(
26
+ 'hnts_info_setting_head',
27
+ array(
28
+ 'type' => 'hidden',
29
+ 'label' => __('Setting','hantus'),
30
+ 'section' => 'info_setting',
31
+ 'priority' => 1,
32
+ )
33
+ );
34
+
35
  // info Hide/ Show Setting //
36
  if ( class_exists( 'Hantus_Customizer_Toggle_Control' ) ) {
37
  $wp_customize->add_setting(
51
  'section' => 'info_setting',
52
  'settings' => 'hide_show_info',
53
  'type' => 'ios', // light, ios, flat
54
+ 'priority' => 2,
55
  )
56
  ));
57
  }
58
  /*=========================================
59
  Info contents Section first
60
  =========================================*/
61
+ // Info First Head
62
+ $wp_customize->add_setting(
63
+ 'hnts_info_first_head'
64
+ ,array(
65
+ 'capability' => 'edit_theme_options',
66
+ 'sanitize_callback' => 'hantus_sanitize_text',
67
+ )
68
+ );
69
 
70
+ $wp_customize->add_control(
71
+ 'hnts_info_first_head',
72
+ array(
73
+ 'type' => 'hidden',
74
+ 'label' => __('Info First','hantus'),
75
+ 'section' => 'info_setting',
76
+ 'priority' => 5,
77
+ )
78
+ );
79
+
80
  // Image //
81
  $wp_customize->add_setting(
82
  'info_first_img_setting' ,
92
  'label' => __( 'Image', 'hantus' ),
93
  'section' => 'info_setting',
94
  'settings' => 'info_first_img_setting',
95
+ 'priority' => 6,
96
  )
97
  ));
98
 
114
  'section' => 'info_setting',
115
  'settings'=> 'info_title',
116
  'type' => 'text',
117
+ 'priority' => 7,
118
  )
119
  );
120
 
136
  'section' => 'info_setting',
137
  'settings'=> 'info_description',
138
  'type' => 'text',
139
+ 'priority' => 8,
140
  )
141
  );
142
 
156
  'label' => __('Button Label','hantus'),
157
  'section' => 'info_setting',
158
  'type' => 'text',
159
+ 'priority' => 9,
160
  )
161
  );
162
 
176
  'label' => __('Button Link','hantus'),
177
  'section' => 'info_setting',
178
  'type' => 'text',
179
+ 'priority' => 10,
180
  )
181
  );
182
 
183
  /*=========================================
184
  Info contents Section second
185
  =========================================*/
186
+ // Info Second Head
187
+ $wp_customize->add_setting(
188
+ 'hnts_info_second_head'
189
+ ,array(
190
+ 'capability' => 'edit_theme_options',
191
+ 'sanitize_callback' => 'hantus_sanitize_text',
192
+ )
193
+ );
194
 
195
+ $wp_customize->add_control(
196
+ 'hnts_info_second_head',
197
+ array(
198
+ 'type' => 'hidden',
199
+ 'label' => __('Info Second','hantus'),
200
+ 'section' => 'info_setting',
201
+ 'priority' => 15,
202
+ )
203
+ );
204
+
205
  // Image //
206
  $wp_customize->add_setting(
207
  'info_second_img_setting' ,
217
  'label' => __( 'Image', 'hantus' ),
218
  'section' => 'info_setting',
219
  'settings' => 'info_second_img_setting',
220
+ 'priority' => 16,
221
  )
222
  ));
223
  // info title //
238
  'section' => 'info_setting',
239
  'settings'=> 'info_title2',
240
  'type' => 'text',
241
+ 'priority' => 17,
242
  )
243
  );
244
 
260
  'section' => 'info_setting',
261
  'settings'=> 'info_description2',
262
  'type' => 'text',
263
+ 'priority' => 18,
264
  )
265
  );
266
 
280
  'label' => __('Button Label','hantus'),
281
  'section' => 'info_setting',
282
  'type' => 'text',
283
+ 'priority' => 19,
284
  )
285
  );
286
 
300
  'label' => __('Button Link','hantus'),
301
  'section' => 'info_setting',
302
  'type' => 'text',
303
+ 'priority' => 20,
304
  )
305
  );
306
 
307
  /*=========================================
308
  Info contents Section third
309
  =========================================*/
310
+
311
+ // Info Third Head
312
+ $wp_customize->add_setting(
313
+ 'hnts_info_third_head'
314
+ ,array(
315
+ 'capability' => 'edit_theme_options',
316
+ 'sanitize_callback' => 'hantus_sanitize_text',
317
+ )
318
+ );
319
 
320
+ $wp_customize->add_control(
321
+ 'hnts_info_third_head',
322
+ array(
323
+ 'type' => 'hidden',
324
+ 'label' => __('Info Third','hantus'),
325
+ 'section' => 'info_setting',
326
+ 'priority' => 25,
327
+ )
328
+ );
329
+
330
  // Image //
331
  $wp_customize->add_setting(
332
  'info_third_img_setting' ,
342
  'label' => __( 'Image', 'hantus' ),
343
  'section' => 'info_setting',
344
  'settings' => 'info_third_img_setting',
345
+ 'priority' => 26,
346
  )
347
  ));
348
  // info title //
363
  'section' => 'info_setting',
364
  'settings'=> 'info_title3',
365
  'type' => 'text',
366
+ 'priority' => 27,
367
  )
368
  );
369
 
385
  'section' => 'info_setting',
386
  'settings'=> 'info_description3',
387
  'type' => 'text',
388
+ 'priority' => 28,
389
  )
390
  );
391
 
405
  'label' => __('Button Label','hantus'),
406
  'section' => 'info_setting',
407
  'type' => 'text',
408
+ 'priority' => 29,
409
  )
410
  );
411
 
425
  'label' => __('Button Link','hantus'),
426
  'section' => 'info_setting',
427
  'type' => 'text',
428
+ 'priority' => 30,
429
  )
430
  );
431
 
432
  }
433
  add_action( 'customize_register', 'hantus_info_setting' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
434
 
 
435
  /**
436
  * Add selective refresh for Front page section section controls.
437
  */
inc/hantus/features/section-service.php CHANGED
@@ -11,6 +11,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
11
  'panel' => 'hantus_frontpage_sections',
12
  )
13
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  // service Hide/ Show Setting //
15
  if ( class_exists( 'Hantus_Customizer_Toggle_Control' ) ) {
16
  $wp_customize->add_setting(
@@ -30,12 +50,32 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
30
  'section' => 'service_setting',
31
  'settings' => 'hide_show_service',
32
  'type' => 'ios', // light, ios, flat
 
33
  )
34
  ));
35
  }
36
  // Service Header Section //
37
 
38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  // Service Title //
40
  $wp_customize->add_setting(
41
  'service_title',
@@ -54,6 +94,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
54
  'section' => 'service_setting',
55
  'settings' => 'service_title',
56
  'type' => 'text',
 
57
  )
58
  );
59
 
@@ -75,11 +116,30 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
75
  'section' => 'service_setting',
76
  'settings' => 'service_description',
77
  'type' => 'textarea',
 
78
  )
79
  );
80
 
81
  // Service content Section //
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
 
84
  /**
85
  * Customizer Repeater for add service
@@ -144,7 +204,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
144
  'section' => 'service_setting',
145
  'add_field_label' => esc_html__( 'Add New Service', 'hantus' ),
146
  'item_name' => esc_html__( 'Service', 'hantus' ),
147
- 'priority' => 1,
148
  'customizer_repeater_image_control' => true,
149
  'customizer_repeater_title_control' => true,
150
  'customizer_repeater_subtitle_control' => true,
@@ -175,62 +235,14 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
175
  array(
176
  'section' => 'service_setting',
177
  'settings' => 'hantus_service_upgrade_to_pro',
 
178
  )
179
  )
180
  );
181
  }
182
 
183
  add_action( 'customize_register', 'hantus_service_setting' );
184
- ?>
185
- <?php
186
- // Customizer tabs
187
 
188
- function hantus_servicess_customize_register( $wp_customize ) {
189
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
190
-
191
- // Pricing Tables Tabs
192
- $wp_customize->add_setting(
193
- 'hantus_servicess_tabs', array(
194
- 'sanitize_callback' => 'sanitize_text_field',
195
- )
196
- );
197
-
198
- $wp_customize->add_control(
199
- new Cleverfox_Customize_Control_Tabs(
200
- $wp_customize, 'hantus_servicess_tabs', array(
201
- 'section' => 'service_setting',
202
- 'tabs' => array(
203
- 'general' => array(
204
- 'nicename' => esc_html__( 'Setting', 'hantus' ),
205
- 'icon' => 'cogs',
206
- 'controls' => array(
207
- 'hide_show_service',
208
- ),
209
- ),
210
- 'first' => array(
211
- 'nicename' => esc_html__( 'Header', 'hantus' ),
212
- 'icon' => 'header',
213
- 'controls' => array(
214
- 'service_title',
215
- 'service_description',
216
- ),
217
- ),
218
- 'second' => array(
219
- 'nicename' => esc_html__( 'Content', 'hantus' ),
220
- 'icon' => 'info',
221
- 'controls' => array(
222
- 'service_contents',
223
- 'hantus_service_upgrade_to_pro'
224
- ),
225
- ),
226
-
227
- ),
228
- )
229
- )
230
- );
231
- }
232
- }
233
- add_action( 'customize_register', 'hantus_servicess_customize_register' );
234
  // service selective refresh
235
  function hantus_home_service_section_partials( $wp_customize ){
236
  // hide_show_service
11
  'panel' => 'hantus_frontpage_sections',
12
  )
13
  );
14
+
15
+ // Setting Head
16
+ $wp_customize->add_setting(
17
+ 'service_setting_head'
18
+ ,array(
19
+ 'capability' => 'edit_theme_options',
20
+ 'sanitize_callback' => 'hantus_sanitize_text',
21
+ )
22
+ );
23
+
24
+ $wp_customize->add_control(
25
+ 'service_setting_head',
26
+ array(
27
+ 'type' => 'hidden',
28
+ 'label' => __('Setting','hantus'),
29
+ 'section' => 'service_setting',
30
+ 'priority' => 1,
31
+ )
32
+ );
33
+
34
  // service Hide/ Show Setting //
35
  if ( class_exists( 'Hantus_Customizer_Toggle_Control' ) ) {
36
  $wp_customize->add_setting(
50
  'section' => 'service_setting',
51
  'settings' => 'hide_show_service',
52
  'type' => 'ios', // light, ios, flat
53
+ 'priority' => 2,
54
  )
55
  ));
56
  }
57
  // Service Header Section //
58
 
59
 
60
+ // Head
61
+ $wp_customize->add_setting(
62
+ 'service_head'
63
+ ,array(
64
+ 'capability' => 'edit_theme_options',
65
+ 'sanitize_callback' => 'hantus_sanitize_text',
66
+ )
67
+ );
68
+
69
+ $wp_customize->add_control(
70
+ 'service_head',
71
+ array(
72
+ 'type' => 'hidden',
73
+ 'label' => __('Header','hantus'),
74
+ 'section' => 'service_setting',
75
+ 'priority' => 5,
76
+ )
77
+ );
78
+
79
  // Service Title //
80
  $wp_customize->add_setting(
81
  'service_title',
94
  'section' => 'service_setting',
95
  'settings' => 'service_title',
96
  'type' => 'text',
97
+ 'priority' => 6,
98
  )
99
  );
100
 
116
  'section' => 'service_setting',
117
  'settings' => 'service_description',
118
  'type' => 'textarea',
119
+ 'priority' => 7,
120
  )
121
  );
122
 
123
  // Service content Section //
124
 
125
+ // Content Head
126
+ $wp_customize->add_setting(
127
+ 'service_content_head'
128
+ ,array(
129
+ 'capability' => 'edit_theme_options',
130
+ 'sanitize_callback' => 'hantus_sanitize_text',
131
+ )
132
+ );
133
+
134
+ $wp_customize->add_control(
135
+ 'service_content_head',
136
+ array(
137
+ 'type' => 'hidden',
138
+ 'label' => __('Content','hantus'),
139
+ 'section' => 'service_setting',
140
+ 'priority' => 11,
141
+ )
142
+ );
143
 
144
  /**
145
  * Customizer Repeater for add service
204
  'section' => 'service_setting',
205
  'add_field_label' => esc_html__( 'Add New Service', 'hantus' ),
206
  'item_name' => esc_html__( 'Service', 'hantus' ),
207
+ 'priority' => 12,
208
  'customizer_repeater_image_control' => true,
209
  'customizer_repeater_title_control' => true,
210
  'customizer_repeater_subtitle_control' => true,
235
  array(
236
  'section' => 'service_setting',
237
  'settings' => 'hantus_service_upgrade_to_pro',
238
+ 'priority' => 13,
239
  )
240
  )
241
  );
242
  }
243
 
244
  add_action( 'customize_register', 'hantus_service_setting' );
 
 
 
245
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
  // service selective refresh
247
  function hantus_home_service_section_partials( $wp_customize ){
248
  // hide_show_service
inc/hantus/features/section-slider.php CHANGED
@@ -12,6 +12,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
12
  'priority' => apply_filters( 'hantus_section_priority', 1, 'slider_setting' ),
13
  )
14
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  // Slider Hide/ Show Setting //
16
  if ( class_exists( 'Hantus_Customizer_Toggle_Control' ) ) {
17
  $wp_customize->add_setting(
@@ -29,10 +49,31 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
29
  'section' => 'slider_setting',
30
  'settings' => 'hide_show_slider',
31
  'type' => 'ios', // light, ios, flat
 
32
  )
33
  ));
34
  }
35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  $wp_customize->add_setting( 'slider',
37
  array(
38
  'sanitize_callback' => 'hantus_repeater_sanitize',
@@ -54,7 +95,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
54
  'section' => 'slider_setting',
55
  'add_field_label' => esc_html__( 'Add New Slider', 'hantus' ),
56
  'item_name' => esc_html__( 'Slider', 'hantus' ),
57
- 'priority' => 2,
58
 
59
  'customizer_repeater_title_control' => true,
60
  'customizer_repeater_subtitle_control' => true,
@@ -88,6 +129,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
88
  array(
89
  'section' => 'slider_setting',
90
  'settings' => 'hantus_slider_upgrade_to_pro',
 
91
  )
92
  )
93
  );
@@ -106,6 +148,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
106
  'section' => 'slider_setting',
107
  'settings' => 'slider_opacity',
108
  'label' => __( 'Background Opacity','hantus' ),
 
109
  'input_attrs' => array(
110
  'min' => 0,
111
  'max' => 0.9,
@@ -131,6 +174,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
131
  'label' => esc_html__( 'Overlay Enable', 'hantus' ),
132
  'section' => 'slider_setting',
133
  'type' => 'ios', // light, ios, flat
 
134
  )
135
  ));
136
  }
@@ -150,7 +194,8 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
150
  'slide_overlay_color',
151
  array(
152
  'label' => __( 'Overlay Color', 'hantus' ),
153
- 'section' => 'slider_setting'
 
154
  )
155
  )
156
  );
@@ -170,7 +215,8 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
170
  'slide_title_color',
171
  array(
172
  'label' => __( 'Title Color', 'hantus' ),
173
- 'section' => 'slider_setting'
 
174
  )
175
  )
176
  );
@@ -190,7 +236,8 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
190
  'slide_sbtitle_color',
191
  array(
192
  'label' => __( 'Subtitle Color', 'hantus' ),
193
- 'section' => 'slider_setting'
 
194
  )
195
  )
196
  );
@@ -210,7 +257,8 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
210
  'slide_desc_color',
211
  array(
212
  'label' => __( 'Description Color', 'hantus' ),
213
- 'section' => 'slider_setting'
 
214
  )
215
  )
216
  );
@@ -268,5 +316,4 @@ function home_section_slider_desc_render_callback() {
268
  //slide desc
269
  function home_section_slider_button_render_callback() {
270
  return get_theme_mod( 'slide_btn_text' );
271
- }
272
- ?>
12
  'priority' => apply_filters( 'hantus_section_priority', 1, 'slider_setting' ),
13
  )
14
  );
15
+
16
+ // Setting Head
17
+ $wp_customize->add_setting(
18
+ 'hantus_slider_setting_head'
19
+ ,array(
20
+ 'capability' => 'edit_theme_options',
21
+ 'sanitize_callback' => 'hantus_sanitize_text',
22
+ )
23
+ );
24
+
25
+ $wp_customize->add_control(
26
+ 'hantus_slider_setting_head',
27
+ array(
28
+ 'type' => 'hidden',
29
+ 'label' => __('Setting','hantus'),
30
+ 'section' => 'slider_setting',
31
+ 'priority' => 1,
32
+ )
33
+ );
34
+
35
  // Slider Hide/ Show Setting //
36
  if ( class_exists( 'Hantus_Customizer_Toggle_Control' ) ) {
37
  $wp_customize->add_setting(
49
  'section' => 'slider_setting',
50
  'settings' => 'hide_show_slider',
51
  'type' => 'ios', // light, ios, flat
52
+ 'priority' => 2,
53
  )
54
  ));
55
  }
56
 
57
+
58
+ // Content Head
59
+ $wp_customize->add_setting(
60
+ 'hantus_slider_content_head'
61
+ ,array(
62
+ 'capability' => 'edit_theme_options',
63
+ 'sanitize_callback' => 'hantus_sanitize_text',
64
+ )
65
+ );
66
+
67
+ $wp_customize->add_control(
68
+ 'hantus_slider_content_head',
69
+ array(
70
+ 'type' => 'hidden',
71
+ 'label' => __('Content','hantus'),
72
+ 'section' => 'slider_setting',
73
+ 'priority' => 5,
74
+ )
75
+ );
76
+
77
  $wp_customize->add_setting( 'slider',
78
  array(
79
  'sanitize_callback' => 'hantus_repeater_sanitize',
95
  'section' => 'slider_setting',
96
  'add_field_label' => esc_html__( 'Add New Slider', 'hantus' ),
97
  'item_name' => esc_html__( 'Slider', 'hantus' ),
98
+ 'priority' => 6,
99
 
100
  'customizer_repeater_title_control' => true,
101
  'customizer_repeater_subtitle_control' => true,
129
  array(
130
  'section' => 'slider_setting',
131
  'settings' => 'hantus_slider_upgrade_to_pro',
132
+ 'priority' => 7,
133
  )
134
  )
135
  );
148
  'section' => 'slider_setting',
149
  'settings' => 'slider_opacity',
150
  'label' => __( 'Background Opacity','hantus' ),
151
+ 'priority' => 8,
152
  'input_attrs' => array(
153
  'min' => 0,
154
  'max' => 0.9,
174
  'label' => esc_html__( 'Overlay Enable', 'hantus' ),
175
  'section' => 'slider_setting',
176
  'type' => 'ios', // light, ios, flat
177
+ 'priority' => 9,
178
  )
179
  ));
180
  }
194
  'slide_overlay_color',
195
  array(
196
  'label' => __( 'Overlay Color', 'hantus' ),
197
+ 'section' => 'slider_setting',
198
+ 'priority' => 10,
199
  )
200
  )
201
  );
215
  'slide_title_color',
216
  array(
217
  'label' => __( 'Title Color', 'hantus' ),
218
+ 'section' => 'slider_setting',
219
+ 'priority' => 11,
220
  )
221
  )
222
  );
236
  'slide_sbtitle_color',
237
  array(
238
  'label' => __( 'Subtitle Color', 'hantus' ),
239
+ 'section' => 'slider_setting',
240
+ 'priority' => 12,
241
  )
242
  )
243
  );
257
  'slide_desc_color',
258
  array(
259
  'label' => __( 'Description Color', 'hantus' ),
260
+ 'section' => 'slider_setting',
261
+ 'priority' => 13,
262
  )
263
  )
264
  );
316
  //slide desc
317
  function home_section_slider_button_render_callback() {
318
  return get_theme_mod( 'slide_btn_text' );
319
+ }
 
inc/hantus/features/section-testimonial.php CHANGED
@@ -14,6 +14,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
14
  /*=========================================
15
  Testimonial Settings Section
16
  =========================================*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  if ( class_exists( 'Hantus_Customizer_Toggle_Control' ) ) {
18
  $wp_customize->add_setting(
19
  'hide_show_testimonial' ,
@@ -32,6 +52,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
32
  'section' => 'testimonial_setting',
33
  'settings' => 'hide_show_testimonial',
34
  'type' => 'ios', // light, ios, flat
 
35
  )
36
  ));
37
  }
@@ -40,6 +61,25 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
40
  =========================================*/
41
  // Testimonial Content Section //
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  /**
44
  * Customizer Repeater for add Testimonial
45
  */
@@ -82,7 +122,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
82
  'section' => 'testimonial_setting',
83
  'add_field_label' => esc_html__( 'Add New Testimonial', 'hantus' ),
84
  'item_name' => esc_html__( 'Testimonial', 'hantus' ),
85
- 'priority' => 1,
86
  'customizer_repeater_image_control' => true,
87
  'customizer_repeater_title_control' => true,
88
  'customizer_repeater_designation_control' => true,
@@ -111,11 +151,32 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
111
  array(
112
  'section' => 'testimonial_setting',
113
  'settings' => 'hantus_testimonial_upgrade_to_pro',
 
114
  )
115
  )
116
  );
117
 
118
  // testimonial Background Section //
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  // Background Image //
120
  $wp_customize->add_setting(
121
  'testimonial_background_setting' ,
@@ -131,59 +192,11 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
131
  'label' => __( 'Background Image', 'hantus' ),
132
  'section' => 'testimonial_setting',
133
  'settings' => 'testimonial_background_setting',
 
134
  )
135
  ));
136
  }
137
  add_action( 'customize_register', 'hantus_testimonial_setting' );
138
- ?>
139
- <?php
140
- // Customizer tabs
141
-
142
- function hantus_testimonial_customize_register( $wp_customize ) {
143
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
144
-
145
- // Pricing Tables Tabs
146
- $wp_customize->add_setting(
147
- 'hantus_testimonial_tabs', array(
148
- 'sanitize_callback' => 'sanitize_text_field',
149
- )
150
- );
151
-
152
- $wp_customize->add_control(
153
- new Cleverfox_Customize_Control_Tabs(
154
- $wp_customize, 'hantus_testimonial_tabs', array(
155
- 'section' => 'testimonial_setting',
156
- 'tabs' => array(
157
- 'general' => array(
158
- 'nicename' => esc_html__( 'Setting', 'hantus' ),
159
- 'icon' => 'cogs',
160
- 'controls' => array(
161
- 'hide_show_testimonial',
162
- ),
163
- ),
164
- 'first' => array(
165
- 'nicename' => esc_html__( 'Content', 'hantus' ),
166
- 'icon' => 'info',
167
- 'controls' => array(
168
- 'testimonial_contents',
169
- 'hantus_testimonial_upgrade_to_pro'
170
- ),
171
- ),
172
- 'second' => array(
173
- 'nicename' => esc_html__( 'Background', 'hantus' ),
174
- 'icon' => 'info',
175
- 'controls' => array(
176
- 'testimonial_background_setting',
177
- ),
178
- ),
179
- ),
180
- )
181
- )
182
- );
183
- }
184
- }
185
-
186
- add_action( 'customize_register', 'hantus_testimonial_customize_register' );
187
 
188
  // Testimonial selective refresh
189
  function hantus_home_testimonial_section_partials( $wp_customize ){
14
  /*=========================================
15
  Testimonial Settings Section
16
  =========================================*/
17
+
18
+ // Setting Head
19
+ $wp_customize->add_setting(
20
+ 'testimonial_setting_head'
21
+ ,array(
22
+ 'capability' => 'edit_theme_options',
23
+ 'sanitize_callback' => 'hantus_sanitize_text',
24
+ )
25
+ );
26
+
27
+ $wp_customize->add_control(
28
+ 'testimonial_setting_head',
29
+ array(
30
+ 'type' => 'hidden',
31
+ 'label' => __('Setting','hantus'),
32
+ 'section' => 'testimonial_setting',
33
+ 'priority' => 1,
34
+ )
35
+ );
36
+
37
  if ( class_exists( 'Hantus_Customizer_Toggle_Control' ) ) {
38
  $wp_customize->add_setting(
39
  'hide_show_testimonial' ,
52
  'section' => 'testimonial_setting',
53
  'settings' => 'hide_show_testimonial',
54
  'type' => 'ios', // light, ios, flat
55
+ 'priority' => 2,
56
  )
57
  ));
58
  }
61
  =========================================*/
62
  // Testimonial Content Section //
63
 
64
+ // Content Head
65
+ $wp_customize->add_setting(
66
+ 'testimonial_content_head'
67
+ ,array(
68
+ 'capability' => 'edit_theme_options',
69
+ 'sanitize_callback' => 'hantus_sanitize_text',
70
+ )
71
+ );
72
+
73
+ $wp_customize->add_control(
74
+ 'testimonial_content_head',
75
+ array(
76
+ 'type' => 'hidden',
77
+ 'label' => __('Content','hantus'),
78
+ 'section' => 'testimonial_setting',
79
+ 'priority' => 5,
80
+ )
81
+ );
82
+
83
  /**
84
  * Customizer Repeater for add Testimonial
85
  */
122
  'section' => 'testimonial_setting',
123
  'add_field_label' => esc_html__( 'Add New Testimonial', 'hantus' ),
124
  'item_name' => esc_html__( 'Testimonial', 'hantus' ),
125
+ 'priority' => 6,
126
  'customizer_repeater_image_control' => true,
127
  'customizer_repeater_title_control' => true,
128
  'customizer_repeater_designation_control' => true,
151
  array(
152
  'section' => 'testimonial_setting',
153
  'settings' => 'hantus_testimonial_upgrade_to_pro',
154
+ 'priority' => 7,
155
  )
156
  )
157
  );
158
 
159
  // testimonial Background Section //
160
+
161
+ // BG Head
162
+ $wp_customize->add_setting(
163
+ 'testimonial_bg_head'
164
+ ,array(
165
+ 'capability' => 'edit_theme_options',
166
+ 'sanitize_callback' => 'hantus_sanitize_text',
167
+ )
168
+ );
169
+
170
+ $wp_customize->add_control(
171
+ 'testimonial_bg_head',
172
+ array(
173
+ 'type' => 'hidden',
174
+ 'label' => __('Background','hantus'),
175
+ 'section' => 'testimonial_setting',
176
+ 'priority' => 8,
177
+ )
178
+ );
179
+
180
  // Background Image //
181
  $wp_customize->add_setting(
182
  'testimonial_background_setting' ,
192
  'label' => __( 'Background Image', 'hantus' ),
193
  'section' => 'testimonial_setting',
194
  'settings' => 'testimonial_background_setting',
195
+ 'priority' => 9,
196
  )
197
  ));
198
  }
199
  add_action( 'customize_register', 'hantus_testimonial_setting' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
 
201
  // Testimonial selective refresh
202
  function hantus_home_testimonial_section_partials( $wp_customize ){
inc/startkit/features/navigation.php CHANGED
@@ -2,433 +2,218 @@
2
  // Customizer tabs for slider section
3
  if ( ! function_exists( 'startkit_slider_manager_customize_register' ) ) :
4
  function startkit_slider_manager_customize_register( $wp_customize ) {
5
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
6
-
7
- // Pricing Tables Tabs
8
- $wp_customize->add_setting(
9
- 'startkit_slider_tabs', array(
10
- 'sanitize_callback' => 'sanitize_text_field',
11
- )
12
- );
13
-
14
- $wp_customize->add_control(
15
- new Cleverfox_Customize_Control_Tabs(
16
- $wp_customize, 'startkit_slider_tabs', array(
17
- 'section' => 'slider_setting',
18
- 'tabs' => array(
19
- 'general' => array(
20
- 'nicename' => esc_html__( 'setting', 'startkit' ),
21
- 'icon' => 'cogs',
22
- 'controls' => array(
23
- 'hide_show_slider',
24
-
25
- ),
26
- ),
27
- 'Content' => array(
28
- 'nicename' => esc_html__( 'Default', 'startkit' ),
29
- 'icon' => 'table',
30
- 'controls' => array(
31
- 'slider',
32
- 'startkit_slider_upgrade_to_pro',
33
- 'slider_opacity',
34
- ),
35
- ),
36
- ),
37
-
38
- )
39
- )
40
- );
41
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  }
43
  add_action( 'customize_register', 'startkit_slider_manager_customize_register' );
44
- endif;
45
-
46
- // Customizer tabs for header social media & address
47
-
48
- function startkit_lite_social_customize_register( $wp_customize ) {
49
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
50
-
51
-
52
- $wp_customize->add_setting(
53
- 'startkit_social_tabs', array(
54
- 'sanitize_callback' => 'sanitize_text_field',
55
- )
56
- );
57
-
58
- $wp_customize->add_control(
59
- new Cleverfox_Customize_Control_Tabs(
60
- $wp_customize, 'startkit_social_tabs', array(
61
- 'section' => 'header_setting',
62
- 'tabs' => array(
63
- 'general' => array(
64
- 'nicename' => esc_html__( 'Setting', 'startkit' ),
65
- 'icon' => 'cogs',
66
- 'controls' => array(
67
- 'hide_show_social_icon',
68
-
69
- ),
70
- ),
71
- 'first' => array(
72
- 'nicename' => esc_html__( 'Social Icons', 'startkit' ),
73
- 'icon' => 'table',
74
- 'controls' => array(
75
- 'social_icons',
76
-
77
-
78
- ),
79
- ),
80
- 'second' => array(
81
- 'nicename' => esc_html__( 'Address', 'startkit' ),
82
- 'icon' => 'table',
83
- 'controls' => array(
84
- 'startkit_address_icon',
85
- 'startkit_address',
86
-
87
- ),
88
- ),
89
- ),
90
- )
91
- )
92
- );
93
- }
94
- }
95
-
96
- add_action( 'customize_register', 'startkit_lite_social_customize_register' );
97
-
98
-
99
-
100
- // Customizer tabs for header social media & address
101
-
102
- function startkit_lite_contact_customize_register( $wp_customize ) {
103
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
104
-
105
-
106
- $wp_customize->add_setting(
107
- 'startkit_contact_tabs', array(
108
- 'sanitize_callback' => 'sanitize_text_field',
109
- )
110
- );
111
-
112
- $wp_customize->add_control(
113
- new Cleverfox_Customize_Control_Tabs(
114
- $wp_customize, 'startkit_contact_tabs', array(
115
- 'section' => 'header_contact',
116
- 'tabs' => array(
117
- 'general' => array(
118
- 'nicename' => esc_html__( 'Setting', 'startkit' ),
119
- 'icon' => 'cogs',
120
- 'controls' => array(
121
- 'hide_show_contact_infot',
122
-
123
- ),
124
- ),
125
- 'first' => array(
126
- 'nicename' => esc_html__( 'Email', 'startkit' ),
127
- 'icon' => 'table',
128
- 'controls' => array(
129
- 'header_email_icon',
130
- 'header_email',
131
-
132
- ),
133
- ),
134
- 'second' => array(
135
- 'nicename' => esc_html__( 'Phone', 'startkit' ),
136
- 'icon' => 'table',
137
- 'controls' => array(
138
- 'header_phone_icon',
139
- 'header_phone_number',
140
- ),
141
- ),
142
-
143
- ),
144
- )
145
- )
146
- );
147
- }
148
- }
149
-
150
- add_action( 'customize_register', 'startkit_lite_contact_customize_register' );
151
-
152
-
153
- // Customizer tabs for header Search & cart
154
-
155
- function startkit_lite_search_customize_register( $wp_customize ) {
156
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
157
-
158
-
159
- $wp_customize->add_setting(
160
- 'startkit_search_tabs', array(
161
- 'sanitize_callback' => 'sanitize_text_field',
162
- )
163
- );
164
-
165
- $wp_customize->add_control(
166
- new Cleverfox_Customize_Control_Tabs(
167
- $wp_customize, 'startkit_search_tabs', array(
168
- 'section' => 'header_contact_cart',
169
- 'tabs' => array(
170
- 'general' => array(
171
- 'nicename' => esc_html__( 'Setting', 'startkit' ),
172
- 'icon' => 'cogs',
173
- 'controls' => array(
174
- 'cart_header_setting',
175
-
176
- ),
177
- ),
178
- 'first' => array(
179
- 'nicename' => esc_html__( 'Search', 'startkit' ),
180
- 'icon' => 'table',
181
- 'controls' => array(
182
- 'header_search',
183
-
184
-
185
- ),
186
- ),
187
- 'second' => array(
188
- 'nicename' => esc_html__( 'Cart', 'startkit' ),
189
- 'icon' => 'table',
190
- 'controls' => array(
191
- 'header_cart',
192
-
193
- ),
194
- ),
195
-
196
- ),
197
- )
198
- )
199
- );
200
- }
201
- }
202
-
203
- add_action( 'customize_register', 'startkit_lite_search_customize_register' );
204
-
205
- // book now button control tabs
206
-
207
- function startkit_lite_booknow_customize_register( $wp_customize ) {
208
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
209
-
210
-
211
- $wp_customize->add_setting(
212
- 'startkit_booknow_tabs', array(
213
- 'sanitize_callback' => 'startkit_tabs_title',
214
- )
215
- );
216
-
217
- $wp_customize->add_control(
218
- new Cleverfox_Customize_Control_Tabs(
219
- $wp_customize, 'startkit_booknow_tabs', array(
220
- 'section' => 'header_booknow',
221
- 'tabs' => array(
222
- 'general' => array(
223
- 'nicename' => esc_html__( 'Setting', 'startkit' ),
224
- 'icon' => 'cogs',
225
- 'controls' => array(
226
- 'booknow_setting',
227
-
228
- ),
229
- ),
230
- 'first' => array(
231
- 'nicename' => esc_html__( 'Book Now', 'startkit' ),
232
- 'icon' => 'table',
233
- 'controls' => array(
234
- 'header_btn_icon',
235
- 'header_btn_lbl',
236
- 'header_btn_link',
237
- ),
238
- ),
239
-
240
-
241
- ),
242
- )
243
- )
244
- );
245
- }
246
- }
247
-
248
- add_action( 'customize_register', 'startkit_lite_booknow_customize_register' );
249
- // Customizer tabs for copyright_content
250
-
251
- function startkit_lite_copyright_content_customize_register( $wp_customize ) {
252
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
253
-
254
- // Pricing Tables Tabs
255
- $wp_customize->add_setting(
256
- 'startkit_copyrights_tabs', array(
257
- 'sanitize_callback' => 'sanitize_text_field',
258
- )
259
- );
260
-
261
- $wp_customize->add_control(
262
- new Cleverfox_Customize_Control_Tabs(
263
- $wp_customize, 'startkit_copyrights_tabs', array(
264
- 'section' => 'footer_copyright',
265
- 'tabs' => array(
266
- 'general' => array(
267
- 'nicename' => esc_html__( 'Settings', 'startkit' ),
268
- 'icon' => 'cogs',
269
- 'controls' => array(
270
- 'hide_show_copyright',
271
-
272
- ),
273
- ),
274
- 'first' => array(
275
- 'nicename' => esc_html__( 'Content', 'startkit' ),
276
- 'icon' => 'table',
277
- 'controls' => array(
278
- 'copyright_content',
279
- ),
280
- ),
281
-
282
-
283
- ),
284
- )
285
- )
286
- );
287
- }
288
- }
289
-
290
- add_action( 'customize_register', 'startkit_lite_copyright_content_customize_register' );
291
-
292
-
293
- // Customizer tabs for Payment
294
- function startkit_lite_payment_content_customize_register( $wp_customize ) {
295
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
296
-
297
- // Pricing Tables Tabs
298
- $wp_customize->add_setting(
299
- 'startkit_copyright_tabs', array(
300
- 'sanitize_callback' => 'sanitize_text_field',
301
- )
302
- );
303
-
304
- $wp_customize->add_control(
305
- new Cleverfox_Customize_Control_Tabs(
306
- $wp_customize, 'startkit_copyright_tabs', array(
307
- 'section' => 'footer_icon',
308
- 'tabs' => array(
309
- 'general' => array(
310
- 'nicename' => esc_html__( 'Settings', 'startkit' ),
311
- 'icon' => 'cogs',
312
- 'controls' => array(
313
- 'hide_show_payment',
314
- ),
315
- ),
316
- 'first' => array(
317
- 'nicename' => esc_html__( 'Content', 'startkit' ),
318
- 'icon' => 'table',
319
- 'controls' => array(
320
- 'footer_Payment_icon',
321
- ),
322
- ),
323
-
324
-
325
- ),
326
- )
327
- )
328
- );
329
- }
330
- }
331
-
332
- add_action( 'customize_register', 'startkit_lite_payment_content_customize_register' );
333
-
334
- // Customizer tabs service
335
-
336
- function startkit_servicess_customize_register( $wp_customize ) {
337
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
338
-
339
- // Pricing Tables Tabs
340
- $wp_customize->add_setting(
341
- 'startkit_servicess_tabs', array(
342
- 'sanitize_callback' => 'sanitize_text_field',
343
- )
344
- );
345
-
346
- $wp_customize->add_control(
347
- new Cleverfox_Customize_Control_Tabs(
348
- $wp_customize, 'startkit_servicess_tabs', array(
349
- 'section' => 'service_setting',
350
- 'tabs' => array(
351
- 'general' => array(
352
- 'nicename' => esc_html__( 'Setting', 'startkit' ),
353
- 'icon' => 'cogs',
354
- 'controls' => array(
355
- 'hide_show_service',
356
-
357
- ),
358
- ),
359
- 'first' => array(
360
- 'nicename' => esc_html__( 'Header', 'startkit' ),
361
- 'icon' => 'header',
362
- 'controls' => array(
363
- 'service_title',
364
- 'service_description',
365
-
366
-
367
- ),
368
- ),
369
- 'second' => array(
370
- 'nicename' => esc_html__( 'Content', 'startkit' ),
371
- 'icon' => 'info',
372
- 'controls' => array(
373
- 'service_contents',
374
- 'startkit_service_upgrade_to_pro',
375
- ),
376
- ),
377
-
378
- ),
379
- )
380
- )
381
- );
382
- }
383
- }
384
-
385
- add_action( 'customize_register', 'startkit_servicess_customize_register' );
386
-
387
- // Customizer testimonial
388
- function startkit_testimonial_customize_register( $wp_customize ) {
389
- if ( class_exists( 'Cleverfox_Customize_Control_Tabs' ) ) {
390
-
391
- // Pricing Tables Tabs
392
- $wp_customize->add_setting(
393
- 'startkit_testimonial_tabs', array(
394
- 'sanitize_callback' => 'sanitize_text_field',
395
- )
396
- );
397
-
398
- $wp_customize->add_control(
399
- new Cleverfox_Customize_Control_Tabs(
400
- $wp_customize, 'startkit_testimonial_tabs', array(
401
- 'section' => 'testimonial_setting',
402
- 'tabs' => array(
403
- 'general' => array(
404
- 'nicename' => esc_html__( 'Setting', 'startkit' ),
405
- 'icon' => 'cogs',
406
- 'controls' => array(
407
- 'hide_show_testimonial',
408
- ),
409
- ),
410
- 'first' => array(
411
- 'nicename' => esc_html__( 'Header', 'startkit' ),
412
- 'icon' => 'header',
413
- 'controls' => array(
414
- 'testimonial_title',
415
- 'testimonial_description',
416
- ),
417
- ),
418
- 'second' => array(
419
- 'nicename' => esc_html__( 'Content', 'startkit' ),
420
- 'icon' => 'info',
421
- 'controls' => array(
422
- 'testimonial_contents',
423
- 'startkit_testimonial_upgrade_to_pro',
424
- ),
425
- ),
426
-
427
- ),
428
- )
429
- )
430
- );
431
- }
432
- }
433
-
434
- add_action( 'customize_register', 'startkit_testimonial_customize_register' );
2
  // Customizer tabs for slider section
3
  if ( ! function_exists( 'startkit_slider_manager_customize_register' ) ) :
4
  function startkit_slider_manager_customize_register( $wp_customize ) {
5
+
6
+ // Setting Head
7
+ $wp_customize->add_setting(
8
+ 'hdr_search_setting_head'
9
+ ,array(
10
+ 'capability' => 'edit_theme_options',
11
+ 'sanitize_callback' => 'startkit_sanitize_text',
12
+ )
13
+ );
14
+
15
+ $wp_customize->add_control(
16
+ 'hdr_search_setting_head',
17
+ array(
18
+ 'type' => 'hidden',
19
+ 'label' => __('Setting','startkit'),
20
+ 'section' => 'header_contact_cart',
21
+ 'priority' => 1,
22
+ )
23
+ );
24
+
25
+ // Content Head
26
+ $wp_customize->add_setting(
27
+ 'hdr_search_content_head'
28
+ ,array(
29
+ 'capability' => 'edit_theme_options',
30
+ 'sanitize_callback' => 'startkit_sanitize_text',
31
+ )
32
+ );
33
+
34
+ $wp_customize->add_control(
35
+ 'hdr_search_content_head',
36
+ array(
37
+ 'type' => 'hidden',
38
+ 'label' => __('Search','startkit'),
39
+ 'section' => 'header_contact_cart',
40
+ 'priority' => 3,
41
+ )
42
+ );
43
+
44
+ // Setting Head
45
+ $wp_customize->add_setting(
46
+ 'hdr_bknow_setting_head'
47
+ ,array(
48
+ 'capability' => 'edit_theme_options',
49
+ 'sanitize_callback' => 'startkit_sanitize_text',
50
+ )
51
+ );
52
+
53
+ $wp_customize->add_control(
54
+ 'hdr_bknow_setting_head',
55
+ array(
56
+ 'type' => 'hidden',
57
+ 'label' => __('Setting','startkit'),
58
+ 'section' => 'header_booknow',
59
+ 'priority' => 1,
60
+ )
61
+ );
62
+
63
+ // Content Head
64
+ $wp_customize->add_setting(
65
+ 'hdr_bknow_content_head'
66
+ ,array(
67
+ 'capability' => 'edit_theme_options',
68
+ 'sanitize_callback' => 'startkit_sanitize_text',
69
+ )
70
+ );
71
+
72
+ $wp_customize->add_control(
73
+ 'hdr_bknow_content_head',
74
+ array(
75
+ 'type' => 'hidden',
76
+ 'label' => __('Content','startkit'),
77
+ 'section' => 'header_booknow',
78
+ 'priority' => 5,
79
+ )
80
+ );
81
+
82
+ // Setting Head
83
+ $wp_customize->add_setting(
84
+ 'blog_setting_head'
85
+ ,array(
86
+ 'capability' => 'edit_theme_options',
87
+ 'sanitize_callback' => 'startkit_sanitize_text',
88
+ )
89
+ );
90
+
91
+ $wp_customize->add_control(
92
+ 'blog_setting_head',
93
+ array(
94
+ 'type' => 'hidden',
95
+ 'label' => __('Setting','startkit'),
96
+ 'section' => 'blog_setting',
97
+ 'priority' => 1,
98
+ )
99
+ );
100
+
101
+ // Head
102
+ $wp_customize->add_setting(
103
+ 'blog_head'
104
+ ,array(
105
+ 'capability' => 'edit_theme_options',
106
+ 'sanitize_callback' => 'startkit_sanitize_text',
107
+ )
108
+ );
109
+
110
+ $wp_customize->add_control(
111
+ 'blog_head',
112
+ array(
113
+ 'type' => 'hidden',
114
+ 'label' => __('Header','startkit'),
115
+ 'section' => 'blog_setting',
116
+ 'priority' => 5,
117
+ )
118
+ );
119
+
120
+ // Content Head
121
+ $wp_customize->add_setting(
122
+ 'blog_content_head'
123
+ ,array(
124
+ 'capability' => 'edit_theme_options',
125
+ 'sanitize_callback' => 'startkit_sanitize_text',
126
+ )
127
+ );
128
+
129
+ $wp_customize->add_control(
130
+ 'blog_content_head',
131
+ array(
132
+ 'type' => 'hidden',
133
+ 'label' => __('Content','startkit'),
134
+ 'section' => 'blog_setting',
135
+ 'priority' => 8,
136
+ )
137
+ );
138
+
139
+ // Setting Head
140
+ $wp_customize->add_setting(
141
+ 'copyright_setting_head'
142
+ ,array(
143
+ 'capability' => 'edit_theme_options',
144
+ 'sanitize_callback' => 'startkit_sanitize_text',
145
+ )
146
+ );
147
+
148
+ $wp_customize->add_control(
149
+ 'copyright_setting_head',
150
+ array(
151
+ 'type' => 'hidden',
152
+ 'label' => __('Setting','startkit'),
153
+ 'section' => 'footer_copyright',
154
+ 'priority' => 1,
155
+ )
156
+ );
157
+
158
+ // Content Head
159
+ $wp_customize->add_setting(
160
+ 'copyright_content_head'
161
+ ,array(
162
+ 'capability' => 'edit_theme_options',
163
+ 'sanitize_callback' => 'startkit_sanitize_text',
164
+ )
165
+ );
166
+
167
+ $wp_customize->add_control(
168
+ 'copyright_content_head',
169
+ array(
170
+ 'type' => 'hidden',
171
+ 'label' => __('Content','startkit'),
172
+ 'section' => 'footer_copyright',
173
+ 'priority' => 5,
174
+ )
175
+ );
176
+
177
+
178
+ // Setting Head
179
+ $wp_customize->add_setting(
180
+ 'footer_payment_setting_head'
181
+ ,array(
182
+ 'capability' => 'edit_theme_options',
183
+ 'sanitize_callback' => 'startkit_sanitize_text',
184
+ )
185
+ );
186
+
187
+ $wp_customize->add_control(
188
+ 'footer_payment_setting_head',
189
+ array(
190
+ 'type' => 'hidden',
191
+ 'label' => __('Setting','startkit'),
192
+ 'section' => 'footer_icon',
193
+ 'priority' => 1,
194
+ )
195
+ );
196
+
197
+ // Setting Head
198
+ $wp_customize->add_setting(
199
+ 'footer_payment_content_head'
200
+ ,array(
201
+ 'capability' => 'edit_theme_options',
202
+ 'sanitize_callback' => 'startkit_sanitize_text',
203
+ )
204
+ );
205
+
206
+ $wp_customize->add_control(
207
+ 'footer_payment_content_head',
208
+ array(
209
+ 'type' => 'hidden',
210
+ 'label' => __('Content','startkit'),
211
+ 'section' => 'footer_icon',
212
+ 'priority' => 5,
213
+ )
214
+ );
215
+
216
+
217
  }
218
  add_action( 'customize_register', 'startkit_slider_manager_customize_register' );
219
+ endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/startkit/features/section-info.php CHANGED
@@ -12,13 +12,34 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
12
  'priority' => apply_filters( 'startkit_section_priority', 10, 'startkit_info' ),
13
  )
14
  );
15
- // info Hide/ Show Setting //
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  if ( class_exists( 'Startkit_Customizer_Toggle_Control' ) ) {
17
  $wp_customize->add_setting(
18
  'hide_show_info' ,
19
  array(
20
  'default' => '1',
21
  'capability' => 'edit_theme_options',
 
22
  )
23
  );
24
 
@@ -35,6 +56,25 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
35
  /*=========================================
36
  Info contents Section first
37
  =========================================*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  // info icon //
39
  if ( class_exists( 'Startkit_Customizer_Icon_Picker_Control' ) ) {
40
  $wp_customize->add_setting(
@@ -42,6 +82,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
42
  array(
43
  'default' => __('fa-envelope','startkit'),
44
  'capability' => 'edit_theme_options',
 
45
  )
46
  );
47
  $wp_customize->add_control(new Startkit_Customizer_Icon_Picker_Control($wp_customize,
@@ -62,6 +103,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
62
  'capability' => 'edit_theme_options',
63
  'sanitize_callback' => 'startkit_sanitize_html',
64
  'transport' => $selective_refresh,
 
65
  )
66
  );
67
  $wp_customize->add_control(
@@ -81,6 +123,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
81
  'capability' => 'edit_theme_options',
82
  'sanitize_callback' => 'startkit_sanitize_html',
83
  'transport' => $selective_refresh,
 
84
  )
85
  );
86
  $wp_customize->add_control(
@@ -95,6 +138,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
95
  /*=========================================
96
  Info contents Section second
97
  =========================================*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  // info icon //
99
  if ( class_exists( 'Startkit_Customizer_Icon_Picker_Control' ) ) {
100
  $wp_customize->add_setting(
@@ -102,6 +165,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
102
  array(
103
  'default' => __('fa-cart-plus','startkit'),
104
  'capability' => 'edit_theme_options',
 
105
  )
106
  );
107
 
@@ -123,6 +187,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
123
  'capability' => 'edit_theme_options',
124
  'sanitize_callback' => 'startkit_sanitize_html',
125
  'transport' => $selective_refresh,
 
126
  )
127
  );
128
 
@@ -144,6 +209,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
144
  'capability' => 'edit_theme_options',
145
  'sanitize_callback' => 'startkit_sanitize_html',
146
  'transport' => $selective_refresh,
 
147
  )
148
  );
149
 
@@ -159,7 +225,25 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
159
  /*=========================================
160
  Info contents Section third
161
  =========================================*/
 
 
 
 
 
 
 
 
 
162
 
 
 
 
 
 
 
 
 
 
163
  // info icon //
164
  if ( class_exists( 'Startkit_Customizer_Icon_Picker_Control' ) ) {
165
  $wp_customize->add_setting(
@@ -167,6 +251,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
167
  array(
168
  'default' => __('fa-life-saver','startkit'),
169
  'capability' => 'edit_theme_options',
 
170
  )
171
  );
172
  $wp_customize->add_control(new Startkit_Customizer_Icon_Picker_Control($wp_customize,
@@ -187,6 +272,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
187
  'capability' => 'edit_theme_options',
188
  'sanitize_callback' => 'startkit_sanitize_html',
189
  'transport' => $selective_refresh,
 
190
  )
191
  );
192
  $wp_customize->add_control(
@@ -207,6 +293,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
207
  'capability' => 'edit_theme_options',
208
  'sanitize_callback' => 'startkit_sanitize_html',
209
  'transport' => $selective_refresh,
 
210
  )
211
  );
212
  $wp_customize->add_control(
@@ -221,8 +308,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
221
  }
222
  add_action( 'customize_register', 'startkit_info_setting' );
223
  endif;
224
- ?>
225
- <?php
226
  /**
227
  * Add selective refresh for Front page section section controls.
228
  */
@@ -328,6 +414,4 @@ function info_third_icon_render_callback() {
328
 
329
  function info_third_description_render_callback() {
330
  return get_theme_mod( 'info_description3' );
331
- }
332
-
333
- ?>
12
  'priority' => apply_filters( 'startkit_section_priority', 10, 'startkit_info' ),
13
  )
14
  );
15
+
16
+ // Setting Head
17
+ $wp_customize->add_setting(
18
+ 'info_setting_head'
19
+ ,array(
20
+ 'capability' => 'edit_theme_options',
21
+ 'sanitize_callback' => 'startkit_sanitize_text',
22
+ 'priority' => 1,
23
+ )
24
+ );
25
+
26
+ $wp_customize->add_control(
27
+ 'info_setting_head',
28
+ array(
29
+ 'type' => 'hidden',
30
+ 'label' => __('Setting','startkit'),
31
+ 'section' => 'info_setting',
32
+ )
33
+ );
34
+
35
+ // info Hide/ Show Setting //
36
  if ( class_exists( 'Startkit_Customizer_Toggle_Control' ) ) {
37
  $wp_customize->add_setting(
38
  'hide_show_info' ,
39
  array(
40
  'default' => '1',
41
  'capability' => 'edit_theme_options',
42
+ 'priority' => 2,
43
  )
44
  );
45
 
56
  /*=========================================
57
  Info contents Section first
58
  =========================================*/
59
+ // Info First Head
60
+ $wp_customize->add_setting(
61
+ 'info_first_head'
62
+ ,array(
63
+ 'capability' => 'edit_theme_options',
64
+ 'sanitize_callback' => 'startkit_sanitize_text',
65
+ 'priority' => 1,
66
+ )
67
+ );
68
+
69
+ $wp_customize->add_control(
70
+ 'info_first_head',
71
+ array(
72
+ 'type' => 'hidden',
73
+ 'label' => __('Info First','startkit'),
74
+ 'section' => 'info_setting',
75
+ )
76
+ );
77
+
78
  // info icon //
79
  if ( class_exists( 'Startkit_Customizer_Icon_Picker_Control' ) ) {
80
  $wp_customize->add_setting(
82
  array(
83
  'default' => __('fa-envelope','startkit'),
84
  'capability' => 'edit_theme_options',
85
+ 'priority' => 2,
86
  )
87
  );
88
  $wp_customize->add_control(new Startkit_Customizer_Icon_Picker_Control($wp_customize,
103
  'capability' => 'edit_theme_options',
104
  'sanitize_callback' => 'startkit_sanitize_html',
105
  'transport' => $selective_refresh,
106
+ 'priority' => 3,
107
  )
108
  );
109
  $wp_customize->add_control(
123
  'capability' => 'edit_theme_options',
124
  'sanitize_callback' => 'startkit_sanitize_html',
125
  'transport' => $selective_refresh,
126
+ 'priority' => 4,
127
  )
128
  );
129
  $wp_customize->add_control(
138
  /*=========================================
139
  Info contents Section second
140
  =========================================*/
141
+
142
+ // Info Second Head
143
+ $wp_customize->add_setting(
144
+ 'info_second_head'
145
+ ,array(
146
+ 'capability' => 'edit_theme_options',
147
+ 'sanitize_callback' => 'startkit_sanitize_text',
148
+ 'priority' => 8,
149
+ )
150
+ );
151
+
152
+ $wp_customize->add_control(
153
+ 'info_second_head',
154
+ array(
155
+ 'type' => 'hidden',
156
+ 'label' => __('Info Second','startkit'),
157
+ 'section' => 'info_setting',
158
+ )
159
+ );
160
+
161
  // info icon //
162
  if ( class_exists( 'Startkit_Customizer_Icon_Picker_Control' ) ) {
163
  $wp_customize->add_setting(
165
  array(
166
  'default' => __('fa-cart-plus','startkit'),
167
  'capability' => 'edit_theme_options',
168
+ 'priority' => 9,
169
  )
170
  );
171
 
187
  'capability' => 'edit_theme_options',
188
  'sanitize_callback' => 'startkit_sanitize_html',
189
  'transport' => $selective_refresh,
190
+ 'priority' => 10,
191
  )
192
  );
193
 
209
  'capability' => 'edit_theme_options',
210
  'sanitize_callback' => 'startkit_sanitize_html',
211
  'transport' => $selective_refresh,
212
+ 'priority' => 11,
213
  )
214
  );
215
 
225
  /*=========================================
226
  Info contents Section third
227
  =========================================*/
228
+ // Info Third Head
229
+ $wp_customize->add_setting(
230
+ 'info_third_head'
231
+ ,array(
232
+ 'capability' => 'edit_theme_options',
233
+ 'sanitize_callback' => 'startkit_sanitize_text',
234
+ 'priority' => 15,
235
+ )
236
+ );
237
 
238
+ $wp_customize->add_control(
239
+ 'info_third_head',
240
+ array(
241
+ 'type' => 'hidden',
242
+ 'label' => __('Info Third','startkit'),
243
+ 'section' => 'info_setting',
244
+ )
245
+ );
246
+
247
  // info icon //
248
  if ( class_exists( 'Startkit_Customizer_Icon_Picker_Control' ) ) {
249
  $wp_customize->add_setting(
251
  array(
252
  'default' => __('fa-life-saver','startkit'),
253
  'capability' => 'edit_theme_options',
254
+ 'priority' => 16,
255
  )
256
  );
257
  $wp_customize->add_control(new Startkit_Customizer_Icon_Picker_Control($wp_customize,
272
  'capability' => 'edit_theme_options',
273
  'sanitize_callback' => 'startkit_sanitize_html',
274
  'transport' => $selective_refresh,
275
+ 'priority' => 17,
276
  )
277
  );
278
  $wp_customize->add_control(
293
  'capability' => 'edit_theme_options',
294
  'sanitize_callback' => 'startkit_sanitize_html',
295
  'transport' => $selective_refresh,
296
+ 'priority' => 18,
297
  )
298
  );
299
  $wp_customize->add_control(
308
  }
309
  add_action( 'customize_register', 'startkit_info_setting' );
310
  endif;
311
+
 
312
  /**
313
  * Add selective refresh for Front page section section controls.
314
  */
414
 
415
  function info_third_description_render_callback() {
416
  return get_theme_mod( 'info_description3' );
417
+ }
 
 
inc/startkit/features/section-service.php CHANGED
@@ -12,6 +12,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
12
  'panel' => 'startkit_frontpage_sections',
13
  )
14
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  // service Hide/ Show Setting //
16
  if ( class_exists( 'Startkit_Customizer_Toggle_Control' ) ) {
17
  $wp_customize->add_setting(
@@ -19,6 +39,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
19
  array(
20
  'default' => '1',
21
  'capability' => 'edit_theme_options',
 
22
  )
23
  );
24
 
@@ -33,6 +54,25 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
33
  ));
34
  }
35
  // Service Header Section //
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  // Service Title //
37
  $wp_customize->add_setting(
38
  'service_title',
@@ -41,6 +81,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
41
  'capability' => 'edit_theme_options',
42
  'sanitize_callback' => 'startkit_sanitize_html',
43
  'transport' => $selective_refresh,
 
44
  )
45
  );
46
  $wp_customize->add_control(
@@ -61,6 +102,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
61
  'capability' => 'edit_theme_options',
62
  'sanitize_callback' => 'startkit_sanitize_html',
63
  'transport' => $selective_refresh,
 
64
  )
65
  );
66
  $wp_customize->add_control(
@@ -74,6 +116,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
74
  );
75
 
76
  // Service content Section //
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  /**
78
  * Customizer Repeater for add service
79
  */
@@ -81,6 +143,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
81
  $wp_customize->add_setting( 'service_contents',
82
  array(
83
  'sanitize_callback' => 'startkit_repeater_sanitize',
 
84
  'default' => json_encode(
85
  array(
86
  array(
@@ -128,7 +191,6 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
128
  'section' => 'service_setting',
129
  'add_field_label' => esc_html__( 'Add New Service', 'startkit' ),
130
  'item_name' => esc_html__( 'Service', 'startkit' ),
131
- 'priority' => 1,
132
  'customizer_repeater_icon_control' => true,
133
  'customizer_repeater_title_control' => true,
134
  'customizer_repeater_text_control' => true,
@@ -161,6 +223,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
161
  $wp_customize->add_setting( 'startkit_service_upgrade_to_pro', array(
162
  'capability' => 'edit_theme_options',
163
  'sanitize_callback' => 'wp_filter_nohtml_kses',
 
164
  ));
165
  $wp_customize->add_control(
166
  new Startkit_services__section_upgrade(
@@ -176,8 +239,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
176
 
177
  add_action( 'customize_register', 'startkit_service_setting' );
178
  endif;
179
- ?>
180
- <?php
181
  // service selective refresh
182
  function startkit_home_service_section_partials( $wp_customize ){
183
  // service title
@@ -210,5 +272,4 @@ function home_section_service_title_render_callback() {
210
  // service description
211
  function home_section_service_desc_render_callback() {
212
  return get_theme_mod( 'service_description' );
213
- }
214
- ?>
12
  'panel' => 'startkit_frontpage_sections',
13
  )
14
  );
15
+
16
+ // Setting Head
17
+ $wp_customize->add_setting(
18
+ 'service_setting_head'
19
+ ,array(
20
+ 'capability' => 'edit_theme_options',
21
+ 'sanitize_callback' => 'startkit_sanitize_text',
22
+ 'priority' => 1,
23
+ )
24
+ );
25
+
26
+ $wp_customize->add_control(
27
+ 'service_setting_head',
28
+ array(
29
+ 'type' => 'hidden',
30
+ 'label' => __('Setting','startkit'),
31
+ 'section' => 'service_setting',
32
+ )
33
+ );
34
+
35
  // service Hide/ Show Setting //
36
  if ( class_exists( 'Startkit_Customizer_Toggle_Control' ) ) {
37
  $wp_customize->add_setting(
39
  array(
40
  'default' => '1',
41
  'capability' => 'edit_theme_options',
42
+ 'priority' => 2,
43
  )
44
  );
45
 
54
  ));
55
  }
56
  // Service Header Section //
57
+ // Head
58
+ $wp_customize->add_setting(
59
+ 'service_head'
60
+ ,array(
61
+ 'capability' => 'edit_theme_options',
62
+ 'sanitize_callback' => 'startkit_sanitize_text',
63
+ 'priority' => 5,
64
+ )
65
+ );
66
+
67
+ $wp_customize->add_control(
68
+ 'service_head',
69
+ array(
70
+ 'type' => 'hidden',
71
+ 'label' => __('Header','startkit'),
72
+ 'section' => 'service_setting',
73
+ )
74
+ );
75
+
76
  // Service Title //
77
  $wp_customize->add_setting(
78
  'service_title',
81
  'capability' => 'edit_theme_options',
82
  'sanitize_callback' => 'startkit_sanitize_html',
83
  'transport' => $selective_refresh,
84
+ 'priority' => 6,
85
  )
86
  );
87
  $wp_customize->add_control(
102
  'capability' => 'edit_theme_options',
103
  'sanitize_callback' => 'startkit_sanitize_html',
104
  'transport' => $selective_refresh,
105
+ 'priority' => 7,
106
  )
107
  );
108
  $wp_customize->add_control(
116
  );
117
 
118
  // Service content Section //
119
+
120
+ // Content Head
121
+ $wp_customize->add_setting(
122
+ 'service_content_head'
123
+ ,array(
124
+ 'capability' => 'edit_theme_options',
125
+ 'sanitize_callback' => 'startkit_sanitize_text',
126
+ 'priority' => 11,
127
+ )
128
+ );
129
+
130
+ $wp_customize->add_control(
131
+ 'service_content_head',
132
+ array(
133
+ 'type' => 'hidden',
134
+ 'label' => __('Content','startkit'),
135
+ 'section' => 'service_setting',
136
+ )
137
+ );
138
+
139
  /**
140
  * Customizer Repeater for add service
141
  */
143
  $wp_customize->add_setting( 'service_contents',
144
  array(
145
  'sanitize_callback' => 'startkit_repeater_sanitize',
146
+ 'priority' => 12,
147
  'default' => json_encode(
148
  array(
149
  array(
191
  'section' => 'service_setting',
192
  'add_field_label' => esc_html__( 'Add New Service', 'startkit' ),
193
  'item_name' => esc_html__( 'Service', 'startkit' ),
 
194
  'customizer_repeater_icon_control' => true,
195
  'customizer_repeater_title_control' => true,
196
  'customizer_repeater_text_control' => true,
223
  $wp_customize->add_setting( 'startkit_service_upgrade_to_pro', array(
224
  'capability' => 'edit_theme_options',
225
  'sanitize_callback' => 'wp_filter_nohtml_kses',
226
+ 'priority' => 13,
227
  ));
228
  $wp_customize->add_control(
229
  new Startkit_services__section_upgrade(
239
 
240
  add_action( 'customize_register', 'startkit_service_setting' );
241
  endif;
242
+
 
243
  // service selective refresh
244
  function startkit_home_service_section_partials( $wp_customize ){
245
  // service title
272
  // service description
273
  function home_section_service_desc_render_callback() {
274
  return get_theme_mod( 'service_description' );
275
+ }
 
inc/startkit/features/section-slider.php CHANGED
@@ -12,6 +12,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
12
  'priority' => apply_filters( 'startkit_section_priority', 1, 'slider_setting' ),
13
  )
14
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  // Slider Hide/ Show Setting //
16
  if ( class_exists( 'Startkit_Customizer_Toggle_Control' ) ) {
17
  $wp_customize->add_setting(
@@ -19,6 +39,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
19
  array(
20
  'default' => '1',
21
  'capability' => 'edit_theme_options',
 
22
  )
23
  );
24
 
@@ -32,6 +53,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
32
  )
33
  ));
34
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  /**
36
  * Customizer Repeater for add slides
37
  */
@@ -39,6 +80,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
39
  $wp_customize->add_setting( 'slider',
40
  array(
41
  'sanitize_callback' => 'startkit_repeater_sanitize',
 
42
  'default' => json_encode(
43
  array(
44
  array("image_url" => CLEVERFOX_PLUGIN_URL .'inc/startkit/images/slider/slider02.jpg',
@@ -60,7 +102,6 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
60
  'section' => 'slider_setting',
61
  'add_field_label' => esc_html__( 'Add New Slider', 'startkit' ),
62
  'item_name' => esc_html__( 'Slider', 'startkit' ),
63
- 'priority' => 2,
64
 
65
  'customizer_repeater_title_control' => true,
66
  'customizer_repeater_text_control' => true,
@@ -95,6 +136,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
95
  $wp_customize->add_setting( 'startkit_slider_upgrade_to_pro', array(
96
  'capability' => 'edit_theme_options',
97
  'sanitize_callback' => 'wp_filter_nohtml_kses',
 
98
  ));
99
  $wp_customize->add_control(
100
  new Startkit_slider__section_upgrade(
@@ -112,6 +154,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
112
  array(
113
  'default' => '0.3',
114
  'capability' => 'edit_theme_options',
 
115
  )
116
  );
117
 
@@ -131,5 +174,4 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
131
  );
132
  }
133
  add_action( 'customize_register', 'startkit_slider_setting' );
134
- endif;
135
- ?>
12
  'priority' => apply_filters( 'startkit_section_priority', 1, 'slider_setting' ),
13
  )
14
  );
15
+
16
+ // Setting Head
17
+ $wp_customize->add_setting(
18
+ 'slider_setting_head'
19
+ ,array(
20
+ 'capability' => 'edit_theme_options',
21
+ 'sanitize_callback' => 'startkit_sanitize_text',
22
+ 'priority' => 1,
23
+ )
24
+ );
25
+
26
+ $wp_customize->add_control(
27
+ 'slider_setting_head',
28
+ array(
29
+ 'type' => 'hidden',
30
+ 'label' => __('Setting','startkit'),
31
+ 'section' => 'slider_setting',
32
+ )
33
+ );
34
+
35
  // Slider Hide/ Show Setting //
36
  if ( class_exists( 'Startkit_Customizer_Toggle_Control' ) ) {
37
  $wp_customize->add_setting(
39
  array(
40
  'default' => '1',
41
  'capability' => 'edit_theme_options',
42
+ 'priority' => 2,
43
  )
44
  );
45
 
53
  )
54
  ));
55
  }
56
+
57
+ // Content Head
58
+ $wp_customize->add_setting(
59
+ 'slider_content_head'
60
+ ,array(
61
+ 'capability' => 'edit_theme_options',
62
+ 'sanitize_callback' => 'startkit_sanitize_text',
63
+ 'priority' => 5,
64
+ )
65
+ );
66
+
67
+ $wp_customize->add_control(
68
+ 'slider_content_head',
69
+ array(
70
+ 'type' => 'hidden',
71
+ 'label' => __('Content','startkit'),
72
+ 'section' => 'slider_setting',
73
+ )
74
+ );
75
+
76
  /**
77
  * Customizer Repeater for add slides
78
  */
80
  $wp_customize->add_setting( 'slider',
81
  array(
82
  'sanitize_callback' => 'startkit_repeater_sanitize',
83
+ 'priority' => 6,
84
  'default' => json_encode(
85
  array(
86
  array("image_url" => CLEVERFOX_PLUGIN_URL .'inc/startkit/images/slider/slider02.jpg',
102
  'section' => 'slider_setting',
103
  'add_field_label' => esc_html__( 'Add New Slider', 'startkit' ),
104
  'item_name' => esc_html__( 'Slider', 'startkit' ),
 
105
 
106
  'customizer_repeater_title_control' => true,
107
  'customizer_repeater_text_control' => true,
136
  $wp_customize->add_setting( 'startkit_slider_upgrade_to_pro', array(
137
  'capability' => 'edit_theme_options',
138
  'sanitize_callback' => 'wp_filter_nohtml_kses',
139
+ 'priority' => 7,
140
  ));
141
  $wp_customize->add_control(
142
  new Startkit_slider__section_upgrade(
154
  array(
155
  'default' => '0.3',
156
  'capability' => 'edit_theme_options',
157
+ 'priority' => 8,
158
  )
159
  );
160
 
174
  );
175
  }
176
  add_action( 'customize_register', 'startkit_slider_setting' );
177
+ endif;
 
inc/startkit/features/section-testimonial.php CHANGED
@@ -15,12 +15,33 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
15
  /*=========================================
16
  Testimonial Settings Section
17
  =========================================*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  if ( class_exists( 'Startkit_Customizer_Toggle_Control' ) ) {
19
  $wp_customize->add_setting(
20
  'hide_show_testimonial' ,
21
  array(
22
  'default' => '1',
23
  'capability' => 'edit_theme_options',
 
24
  )
25
  );
26
  $wp_customize->add_control( new Startkit_Customizer_Toggle_Control( $wp_customize,
@@ -37,6 +58,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
37
  Testimonial Header Section
38
  =========================================*/
39
  // Testimonial Header Section //
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  // Testimonial Title //
41
  $wp_customize->add_setting(
42
  'testimonial_title',
@@ -45,6 +86,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
45
  'capability' => 'edit_theme_options',
46
  'sanitize_callback' => 'startkit_sanitize_html',
47
  'transport' => $selective_refresh,
 
48
  )
49
  );
50
  $wp_customize->add_control(
@@ -64,6 +106,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
64
  'capability' => 'edit_theme_options',
65
  'sanitize_callback' => 'startkit_sanitize_html',
66
  'transport' => $selective_refresh,
 
67
  )
68
  );
69
  $wp_customize->add_control(
@@ -76,6 +119,26 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
76
  )
77
  );
78
  // Testimonial Content Section //
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  /**
80
  * Customizer Repeater for add Testimonial
81
  */
@@ -83,6 +146,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
83
  $wp_customize->add_setting( 'testimonial_contents',
84
  array(
85
  'sanitize_callback' => 'startkit_repeater_sanitize',
 
86
  'default' => json_encode(
87
  array(
88
  array(
@@ -120,7 +184,6 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
120
  'section' => 'testimonial_setting',
121
  'add_field_label' => esc_html__( 'Add New Testimonial', 'startkit' ),
122
  'item_name' => esc_html__( 'Testimonial', 'startkit' ),
123
- 'priority' => 1,
124
  'customizer_repeater_image_control' => true,
125
  'customizer_repeater_title_control' => true,
126
  'customizer_repeater_subtitle_control' => true,
@@ -154,6 +217,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
154
  $wp_customize->add_setting( 'startkit_testimonial_upgrade_to_pro', array(
155
  'capability' => 'edit_theme_options',
156
  'sanitize_callback' => 'wp_filter_nohtml_kses',
 
157
  ));
158
  $wp_customize->add_control(
159
  new Startkit_testimonial__section_upgrade(
@@ -168,8 +232,7 @@ $selective_refresh = isset( $wp_customize->selective_refresh ) ? 'postMessage' :
168
  }
169
  add_action( 'customize_register', 'startkit_testimonial_setting' );
170
  endif;
171
- ?>
172
- <?php
173
  // Testimonial selective refresh
174
  function startkit_home_testimonial_section_partials( $wp_customize ){
175
 
@@ -200,5 +263,4 @@ function home_section_testimonial_title_render_callback() {
200
  // description
201
  function home_section_testimonial_desc_render_callback() {
202
  return get_theme_mod( 'testimonial_description' );
203
- }
204
- ?>
15
  /*=========================================
16
  Testimonial Settings Section
17
  =========================================*/
18
+
19
+ // Setting Head
20
+ $wp_customize->add_setting(
21
+ 'testimonial_setting_head'
22
+ ,array(
23
+ 'capability' => 'edit_theme_options',
24
+ 'sanitize_callback' => 'startkit_sanitize_text',
25
+ 'priority' => 1,
26
+ )
27
+ );
28
+
29
+ $wp_customize->add_control(
30
+ 'testimonial_setting_head',
31
+ array(
32
+ 'type' => 'hidden',
33
+ 'label' => __('Setting','startkit'),
34
+ 'section' => 'testimonial_setting',
35
+ )
36
+ );
37
+
38
  if ( class_exists( 'Startkit_Customizer_Toggle_Control' ) ) {
39
  $wp_customize->add_setting(
40
  'hide_show_testimonial' ,
41
  array(
42
  'default' => '1',
43
  'capability' => 'edit_theme_options',
44
+ 'priority' => 2,
45
  )
46
  );
47
  $wp_customize->add_control( new Startkit_Customizer_Toggle_Control( $wp_customize,
58
  Testimonial Header Section
59
  =========================================*/
60
  // Testimonial Header Section //
61
+
62
+ // Head
63
+ $wp_customize->add_setting(
64
+ 'testimonial_head'
65
+ ,array(
66
+ 'capability' => 'edit_theme_options',
67
+ 'sanitize_callback' => 'startkit_sanitize_text',
68
+ 'priority' => 5,
69
+ )
70
+ );
71
+
72
+ $wp_customize->add_control(
73
+ 'testimonial_head',
74
+ array(
75
+ 'type' => 'hidden',
76
+ 'label' => __('Header','startkit'),
77
+ 'section' => 'testimonial_setting',
78
+ )
79
+ );
80
+
81
  // Testimonial Title //
82
  $wp_customize->add_setting(
83
  'testimonial_title',
86
  'capability' => 'edit_theme_options',
87
  'sanitize_callback' => 'startkit_sanitize_html',
88
  'transport' => $selective_refresh,
89
+ 'priority' => 6,
90
  )
91
  );
92
  $wp_customize->add_control(
106
  'capability' => 'edit_theme_options',
107
  'sanitize_callback' => 'startkit_sanitize_html',
108
  'transport' => $selective_refresh,
109
+ 'priority' => 7,
110
  )
111
  );
112
  $wp_customize->add_control(
119
  )
120
  );
121
  // Testimonial Content Section //
122
+
123
+ // Content Head
124
+ $wp_customize->add_setting(
125
+ 'testimonial_content_head'
126
+ ,array(
127
+ 'capability' => 'edit_theme_options',
128
+ 'sanitize_callback' => 'startkit_sanitize_text',
129
+ 'priority' => 11,
130
+ )
131
+ );
132
+
133
+ $wp_customize->add_control(
134
+ 'testimonial_content_head',
135
+ array(
136
+ 'type' => 'hidden',
137
+ 'label' => __('Content','startkit'),
138
+ 'section' => 'testimonial_setting',
139
+ )
140
+ );
141
+
142
  /**
143
  * Customizer Repeater for add Testimonial
144
  */
146
  $wp_customize->add_setting( 'testimonial_contents',
147
  array(
148
  'sanitize_callback' => 'startkit_repeater_sanitize',
149
+ 'priority' => 12,
150
  'default' => json_encode(
151
  array(
152
  array(
184
  'section' => 'testimonial_setting',
185
  'add_field_label' => esc_html__( 'Add New Testimonial', 'startkit' ),
186
  'item_name' => esc_html__( 'Testimonial', 'startkit' ),
 
187
  'customizer_repeater_image_control' => true,
188
  'customizer_repeater_title_control' => true,
189
  'customizer_repeater_subtitle_control' => true,
217
  $wp_customize->add_setting( 'startkit_testimonial_upgrade_to_pro', array(
218
  'capability' => 'edit_theme_options',
219
  'sanitize_callback' => 'wp_filter_nohtml_kses',
220
+ 'priority' => 13,
221
  ));
222
  $wp_customize->add_control(
223
  new Startkit_testimonial__section_upgrade(
232
  }
233
  add_action( 'customize_register', 'startkit_testimonial_setting' );
234
  endif;
235
+
 
236
  // Testimonial selective refresh
237
  function startkit_home_testimonial_section_partials( $wp_customize ){
238
 
263
  // description
264
  function home_section_testimonial_desc_render_callback() {
265
  return get_theme_mod( 'testimonial_description' );
266
+ }
 
readme.txt CHANGED
@@ -43,6 +43,10 @@ Clever Fox WordPress plugin is licensed under the GPL3 (https://www.gnu.org/lice
43
 
44
  == Changelog ==
45
 
 
 
 
 
46
  = 2.6 =
47
  * Tested With WordPress 5.6
48
 
43
 
44
  == Changelog ==
45
 
46
+ = 2.7 =
47
+ * Heading Control Added
48
+ * Removed Tabs & Select Control
49
+
50
  = 2.6 =
51
  * Tested With WordPress 5.6
52