Carousel, Slider, Gallery by WP Carousel – Image Carousel & Photo Gallery, Post Carousel & Post Grid, Product Carousel & Product Grid for WooCommerce - Version 2.0.0

Version Description

  • New: Admin Dashboard Panel.
  • New: Shortcode Generator.
  • New: Drag and drop image slides Re-ordering.
  • New: Post Carousel.
  • New: WooCommerce Product Carousel.
  • New: Multilingual Ready.
  • New: Multisite Supported.
  • New: Widget Supported.
  • New: Carousel Section Title.
  • New: Choose available sizes.
  • New: Custom CSS options.
  • New: Advanced Settings (Enqueue/Dequeue).
  • New: Image Title Attribute.
  • New: Slider border option.
  • New: Navigation and Pagination hide on mobile option.
  • New: Price, Rating, Add to Cart show and hide option for Product Carousel.
Download this release

Release Info

Developer shapedplugin
Plugin Icon 128x128 Carousel, Slider, Gallery by WP Carousel – Image Carousel & Photo Gallery, Post Carousel & Post Grid, Product Carousel & Product Grid for WooCommerce
Version 2.0.0
Comparing to
See all releases

Code changes from version 1.4.9 to 2.0.0

Files changed (90) hide show
  1. admin/class-wp-carousel-free-admin.php +232 -0
  2. admin/css/wp-carousel-free-admin.css +213 -0
  3. admin/img/premium-logo.png +0 -0
  4. admin/img/wpcp-icon-256.png +0 -0
  5. admin/img/wpcp-logo.png +0 -0
  6. admin/index.php +1 -0
  7. admin/js/icon32.png +0 -0
  8. admin/js/mce-button.js +28 -0
  9. admin/views/help.php +109 -0
  10. admin/views/meta-box/assets/css/sp-custom.css +800 -0
  11. admin/views/meta-box/assets/css/sp-framework-rtl.css +220 -0
  12. admin/views/meta-box/assets/css/sp-framework.css +1850 -0
  13. admin/views/meta-box/assets/css/sp-style.css +113 -0
  14. admin/views/meta-box/assets/images/chosen-sprite.png +0 -0
  15. admin/views/meta-box/assets/js/dependency.js +98 -0
  16. admin/views/meta-box/assets/js/sp-framework.js +645 -0
  17. admin/views/meta-box/assets/js/sp-plugins.js +2405 -0
  18. admin/views/meta-box/assets/js/sp-plugins.min.js +3 -0
  19. admin/views/meta-box/classes/abstract.class.php +23 -0
  20. admin/views/meta-box/classes/framework.class.php +484 -0
  21. admin/views/meta-box/classes/metabox.class.php +296 -0
  22. admin/views/meta-box/classes/options.class.php +522 -0
  23. admin/views/meta-box/config/framework.config.php +76 -0
  24. admin/views/meta-box/config/metabox.config.php +727 -0
  25. admin/views/meta-box/fields/border/border.php +114 -0
  26. admin/views/meta-box/fields/button_set/button_set.php +47 -0
  27. admin/views/meta-box/fields/carousel_type/carousel_type.php +48 -0
  28. admin/views/meta-box/fields/checkbox/checkbox.php +42 -0
  29. admin/views/meta-box/fields/color_picker/color_picker.php +44 -0
  30. admin/views/meta-box/fields/color_set/color_set.php +136 -0
  31. admin/views/meta-box/fields/column/column.php +161 -0
  32. admin/views/meta-box/fields/gallery/gallery.php +58 -0
  33. admin/views/meta-box/fields/image_sizes/image_sizes.php +81 -0
  34. admin/views/meta-box/fields/notice/notice.php +24 -0
  35. admin/views/meta-box/fields/number/number.php +37 -0
  36. admin/views/meta-box/fields/pronotice/pronotice.php +24 -0
  37. admin/views/meta-box/fields/select/select.php +59 -0
  38. admin/views/meta-box/fields/select_typo/select_typo.php +48 -0
  39. admin/views/meta-box/fields/subheading/subheading.php +24 -0
  40. admin/views/meta-box/fields/switcher/switcher.php +25 -0
  41. admin/views/meta-box/fields/textarea/textarea.php +23 -0
  42. admin/views/meta-box/fields/typography_advanced/google-fonts.json +6 -0
  43. admin/views/meta-box/fields/typography_advanced/typography_advanced.php +197 -0
  44. admin/views/meta-box/functions/actions.php +6 -0
  45. admin/views/meta-box/functions/enqueue.php +49 -0
  46. admin/views/meta-box/functions/fallback.php +83 -0
  47. admin/views/meta-box/functions/helpers.php +259 -0
  48. admin/views/meta-box/functions/sanitize.php +132 -0
  49. admin/views/meta-box/functions/validate.php +74 -0
  50. admin/views/meta-box/index.php +1 -0
  51. admin/views/meta-box/sp-framework-path.php +381 -0
  52. admin/views/meta-box/sp-framework.php +50 -0
  53. admin/views/premium.php +274 -0
  54. admin/views/tmce-button.php +181 -0
  55. assets/css/admin.css +0 -115
  56. assets/css/style.css +0 -90
  57. assets/js/admin.js +0 -16
  58. assets/js/slick.min.js +0 -18
  59. inc/functions.php +0 -7
  60. inc/scripts.php +0 -57
  61. inc/shortcodes.php +0 -199
  62. includes/class-wp-carousel-free-i18n.php +41 -0
  63. includes/class-wp-carousel-free-loader.php +157 -0
  64. includes/class-wp-carousel-free-post-types.php +113 -0
  65. includes/class-wp-carousel-free-shortcode.php +191 -0
  66. includes/index.php +1 -0
  67. index.php +1 -0
  68. languages/wp-carousel-free.pot +1051 -0
  69. public/class-wp-carousel-free-public.php +73 -0
  70. public/css/ajax-loader.gif +0 -0
  71. {assets → public}/css/font-awesome.min.css +1 -1
  72. {assets → public}/css/slick.css +7 -0
  73. public/css/wp-carousel-free-public.css +368 -0
  74. public/dynamic-style.php +74 -0
  75. {assets → public}/fonts/FontAwesome.otf +0 -0
  76. {assets → public}/fonts/fontawesome-webfont.eot +0 -0
  77. {assets → public}/fonts/fontawesome-webfont.svg +0 -0
  78. {assets → public}/fonts/fontawesome-webfont.ttf +0 -0
  79. {assets → public}/fonts/fontawesome-webfont.woff +0 -0
  80. {assets → public}/fonts/fontawesome-webfont.woff2 +0 -0
  81. public/index.php +1 -0
  82. public/js/slick.js +3037 -0
  83. public/js/slick.min.js +18 -0
  84. public/js/wp-carousel-free-public.js +17 -0
  85. public/shortcode-deprecated.php +173 -0
  86. public/templates/image-carousel.php +45 -0
  87. public/templates/post-carousel.php +91 -0
  88. public/templates/product-carousel.php +98 -0
  89. readme.txt +275 -186
  90. wp-carousel-free.php +334 -293
admin/class-wp-carousel-free-admin.php ADDED
@@ -0,0 +1,232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The admin-specific of the plugin.
4
+ *
5
+ * @link https://shapedplugin.com
6
+ * @since 2.0.0
7
+ *
8
+ * @package WordPress_Carousel_Pro
9
+ * @subpackage WordPress_Carousel_Pro/admin
10
+ */
11
+
12
+ /**
13
+ * The class for the admin-specific functionality of the plugin.
14
+ */
15
+ class WP_Carousel_Free_Admin {
16
+ /**
17
+ * Script and style suffix
18
+ *
19
+ * @since 2.0.0
20
+ * @access protected
21
+ * @var string
22
+ */
23
+ protected $suffix;
24
+
25
+ /**
26
+ * The ID of the plugin.
27
+ *
28
+ * @since 2.0.0
29
+ * @access protected
30
+ * @var string $plugin_name The ID of this plugin
31
+ */
32
+ protected $plugin_name;
33
+
34
+ /**
35
+ * The version of the plugin
36
+ *
37
+ * @since 2.0.0
38
+ * @access protected
39
+ * @var string $version The current version fo the plugin.
40
+ */
41
+ protected $version;
42
+
43
+ /**
44
+ * The single instance of the class.
45
+ *
46
+ * @var self
47
+ * @since 2.0.0
48
+ */
49
+ private static $_instance = null;
50
+
51
+ /**
52
+ * Allows for accessing single instance of class. Class should only be constructed once per call.
53
+ *
54
+ * @since 2.0.0
55
+ * @static
56
+ * @return self Main instance.
57
+ */
58
+ public static function instance() {
59
+ if ( is_null( self::$_instance ) ) {
60
+ self::$_instance = new self();
61
+ }
62
+ return self::$_instance;
63
+ }
64
+
65
+ /**
66
+ * Initialize the class sets its properties.
67
+ *
68
+ * @since 2.0.0
69
+ * @param string $plugin_name The name of the plugin.
70
+ * @param string $version The version of the plugin.
71
+ */
72
+ public function __construct( $plugin_name, $version ) {
73
+ $this->suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
74
+ $this->plugin_name = $plugin_name;
75
+ $this->version = $version;
76
+ }
77
+
78
+ /**
79
+ * Register the stylesheets for the admin area of the plugin.
80
+ *
81
+ * @since 3.0.0
82
+ * @return void
83
+ */
84
+ public function enqueue_admin_styles() {
85
+ wp_enqueue_style( 'font-awesome', WPCAROUSELF_URL . 'public/css/font-awesome.min.css', array(), $this->version, 'all' );
86
+ wp_enqueue_style( $this->plugin_name . 'admin', WPCAROUSELF_URL . 'admin/css/wp-carousel-free-admin.css', array(), $this->version, 'all' );
87
+ }
88
+
89
+ /**
90
+ * Change Carousel updated messages.
91
+ *
92
+ * @since 2.0.0
93
+ * @param string $messages The Update messages.
94
+ * @return statement
95
+ */
96
+ public function wpcp_carousel_updated_messages( $messages ) {
97
+ global $post, $post_ID;
98
+ $messages['sp_wp_carousel'] = array(
99
+ 0 => '', // Unused. Messages start at index 1.
100
+ 1 => sprintf( __( 'Carousel updated.', 'wp-carousel-free' ) ),
101
+ 2 => '',
102
+ 3 => '',
103
+ 4 => __( 'Carousel updated.', 'wp-carousel-free' ),
104
+ 5 => isset( $_GET['revision'] ) ? sprintf( __( 'Carousel restored to revision from %s', 'wp-carousel-free' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
105
+ 6 => sprintf( __( 'Carousel published.', 'wp-carousel-free' ) ),
106
+ 7 => __( 'Carousel saved.', 'wp-carousel-free' ),
107
+ 8 => sprintf( __( 'Carousel submitted.', 'wp-carousel-free' ) ),
108
+ 9 => sprintf( __( 'Carousel scheduled for: <strong>%1$s</strong>.', 'wp-carousel-free' ), date_i18n( __( 'M j, Y @ G:i', 'wp-carousel-free' ), strtotime( $post->post_date ) ) ),
109
+ 10 => sprintf( __( 'Carousel draft updated.', 'wp-carousel-free' ) ),
110
+ );
111
+ return $messages;
112
+ }
113
+
114
+ /**
115
+ * Add carousel admin columns.
116
+ *
117
+ * @return statement
118
+ */
119
+ public function filter_carousel_admin_column() {
120
+ $admin_columns['cb'] = '<input type="checkbox" />';
121
+ $admin_columns['title'] = __( 'Carousel Title', 'wp-carousel-free' );
122
+ $admin_columns['shortcode'] = __( 'Shortcode', 'wp-carousel-free' );
123
+ $admin_columns['carousel_type'] = __( 'Carousel Type', 'wp-carousel-free' );
124
+ $admin_columns['date'] = __( 'Date', 'wp-carousel-free' );
125
+
126
+ return $admin_columns;
127
+ }
128
+
129
+ /**
130
+ * Display admin columns for the carousels.
131
+ *
132
+ * @since 2.0.0
133
+ * @param mix $column The columns.
134
+ * @param string $post_id The post ID.
135
+ * @return void
136
+ */
137
+ public function display_carousel_admin_fields( $column, $post_id ) {
138
+ $upload_data = get_post_meta( $post_id, 'sp_wpcp_upload_options', true );
139
+ $carousels_types = isset( $upload_data['wpcp_carousel_type'] ) ? $upload_data['wpcp_carousel_type'] : '';
140
+ switch ( $column ) {
141
+ case 'shortcode':
142
+ $column_field = '<input style="width: 270px; padding: 6px;" type="text" onClick="this.select();" readonly="readonly" value="[sp_wpcarousel id=&quot;' . $post_id . '&quot;]"/>';
143
+ echo $column_field;
144
+ break;
145
+ case 'carousel_type':
146
+ echo ucwords( str_replace( '-', ' ', $carousels_types ) );
147
+
148
+ } // end switch.
149
+ }
150
+
151
+ /**
152
+ * Add plugin action menu
153
+ *
154
+ * Fired by `plugin_action_links` filter.
155
+ *
156
+ * @param array $links The action link.
157
+ * @param string $plugin_file The file.
158
+ * @since 2.0.0
159
+ * @return array
160
+ */
161
+ public function add_plugin_action_links( $links, $plugin_file ) {
162
+
163
+ if ( WPCAROUSELF_BASENAME === $plugin_file ) {
164
+ $ui_links = sprintf( '<a href="%s">%s</a>', admin_url( 'post-new.php?post_type=sp_wp_carousel' ), __( 'Create Carousel', 'wp-carousel-free' ) );
165
+
166
+ array_unshift( $links, $ui_links );
167
+
168
+ $links['go_pro'] = sprintf( '<a target="_blank" href="%1$s" style="color: #35b747; font-weight: 700;">Go Premium!</a>', 'https://shapedplugin.com/plugin/wordpress-carousel-pro' );
169
+ }
170
+
171
+ return $links;
172
+ }
173
+
174
+ /**
175
+ * Plugin row meta.
176
+ *
177
+ * Adds row meta links to the plugin list table
178
+ *
179
+ * Fired by `plugin_row_meta` filter.
180
+ *
181
+ * @since 2.0.0
182
+ * @access public
183
+ *
184
+ * @param array $plugin_meta An array of the plugin's metadata, including
185
+ * the version, author, author URI, and plugin URI.
186
+ * @param string $plugin_file Path to the plugin file, relative to the plugins
187
+ * directory.
188
+ *
189
+ * @return array An array of plugin row meta links.
190
+ */
191
+ public function plugin_row_meta( $plugin_meta, $plugin_file ) {
192
+ if ( WPCAROUSELF_BASENAME === $plugin_file ) {
193
+ $row_meta = [
194
+ 'docs' => '<a href="https://wordpresscarousel.com" aria-label="' . esc_attr( __( 'Live Demo', 'wp-carousel-free' ) ) . '" target="_blank">' . __( 'Live Demo', 'wp-carousel-free' ) . '</a>',
195
+ 'ideo' => '<a href="https://shapedplugin.com/docs/docs/wordpress-carousel" aria-label="' . esc_attr( __( 'View WP Carousel Video Tutorials', 'wp-carousel-free' ) ) . '" target="_blank">' . __( 'Docs & Video Tutorials', 'wp-carousel-free' ) . '</a>',
196
+ ];
197
+
198
+ $plugin_meta = array_merge( $plugin_meta, $row_meta );
199
+ }
200
+
201
+ return $plugin_meta;
202
+ }
203
+
204
+ /**
205
+ * Bottom review notice.
206
+ *
207
+ * @since 2.0.0
208
+ * @param string $text The review notice.
209
+ * @return string
210
+ */
211
+ public function sp_wpcp_review_text( $text ) {
212
+ $screen = get_current_screen();
213
+ if ( 'sp_wp_carousel' === get_post_type() || 'sp_wp_carousel_page_wpcp_settings' === $screen->id || 'sp_wp_carousel_page_wpcp_help' === $screen->id ) {
214
+ $url = 'https://wordpress.org/support/plugin/wp-carousel-free/reviews/?filter=5#new-post';
215
+ $text = sprintf( __( 'If you like <strong>WordPress Carousel</strong>, please leave us a <a href="%s" target="_blank">&#9733;&#9733;&#9733;&#9733;&#9733;</a> rating. Your Review is very important to us as it helps us to grow more. ', 'wp-carousel-free' ), $url );
216
+ }
217
+
218
+ return $text;
219
+ }
220
+
221
+ /**
222
+ * Redirect after activation.
223
+ *
224
+ * @param string $plugin_file Path to the plugin file, relative to the plugin.
225
+ * @return void
226
+ */
227
+ public function sp_wpcf_redirect_after_activation( $plugin_file ) {
228
+ if ( WPCAROUSELF_BASENAME === $plugin_file ) {
229
+ exit( esc_url( wp_safe_redirect( admin_url( 'edit.php?post_type=sp_wp_carousel&page=wpcf_help' ) ) ) );
230
+ }
231
+ }
232
+ }
admin/css/wp-carousel-free-admin.css ADDED
@@ -0,0 +1,213 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #adminmenu .menu-icon-sp_wp_carousel .wp-menu-image img {
2
+ width: 22px;
3
+ padding: 7px 0;
4
+ height: 20px;
5
+ }
6
+
7
+ .spwpcp-gallery-list li{
8
+ display: inline;
9
+ margin: 5px;
10
+ }
11
+ .js .tmce-active .wp-editor-area{color:#000000}
12
+
13
+
14
+ /* Help Page */
15
+ .sp-wpcp-text-center{
16
+ text-align: center;
17
+ }
18
+ .sp-wpcp-help .wp-badge{
19
+ border: none;
20
+ background: url(../img/wpcp-icon-256.png) right no-repeat;
21
+ background-size: 100px 100px;
22
+ box-shadow: none;
23
+ height: auto;
24
+ top: -75px;
25
+ }
26
+
27
+ .sp-wpcf-upgrade .headline-feature.feature-video iframe,
28
+ .sp-wpcp-help .headline-feature.feature-video iframe{
29
+ position: absolute;
30
+ top: 0;
31
+ left: 0;
32
+ width: 100%;
33
+ height: 100%;
34
+ }
35
+ .sp-wpcp-help .feature-section .sp-wpcp-feature{
36
+ background-color: #fff;
37
+ padding: 20px 20px;
38
+ border: 1px solid #ddd;
39
+ }
40
+ .sp-wpcp-help .feature-section .sp-wpcp-feature h3{
41
+ font-size: 16px;
42
+ margin-top: 18px;
43
+ }
44
+
45
+ .sp-wpcp-help .feature-section i.sp-wpcp-font-icon{
46
+ font-size: 30px;
47
+ display: block;
48
+ color: #18AFB9;
49
+ font-family: fontawesome;
50
+ font-style: normal;
51
+ }
52
+ @media (max-width: 500px) {
53
+ .sp-wpcp-help .wp-badge {
54
+ background-position-x: center;
55
+ top: 0;
56
+ }
57
+ }
58
+ /**
59
+ Upgrade Page CSS
60
+ **/
61
+ .sp-wpc-text-center{
62
+ text-align: center;
63
+ }
64
+ .sp-wpcf-upgrade > h1 {
65
+ font-size: 2.5em;
66
+ color: #444;
67
+ font-weight: 300;
68
+ }
69
+ .sp-wpcf-upgrade > h1 span {
70
+ font-weight: 400;
71
+ }
72
+ .sp-wpcf-upgrade .about-text {
73
+ margin-bottom: 0;
74
+ }
75
+ .sp-wpcf-upgrade ul {
76
+ margin-top: 0;
77
+ }
78
+ .sp-wpcf-upgrade .wp-badge{
79
+ border: none;
80
+ background: url(../img/premium-logo.png) no-repeat;
81
+ background-size: 150px 150px;
82
+ box-shadow: none;
83
+ top: 0px;
84
+ padding-right: 8px;
85
+ }
86
+ .sp-wpcf-upgrade .feature-section .sp-wpc-feature{
87
+ background-color: #fff;
88
+ padding: 20px 20px;
89
+ border: 1px solid #ddd;
90
+ }
91
+ .sp-wpcf-upgrade .feature-section .sp-wpc-feature h3{
92
+ font-size: 16px;
93
+ margin-top: 18px;
94
+ }
95
+
96
+ .sp-wpcf-upgrade .feature-section i.fa{
97
+ font-size: 30px;
98
+ display: block;
99
+ color: #22afba;
100
+ }
101
+ .sp-wpcf-upgrade .sp-wpc-pro-features .feature-section span.dashicons{
102
+ font-size: 22px;
103
+ color: #fff;
104
+ background-color: #22afba;
105
+ width: 28px;
106
+ height: 28px;
107
+ line-height: 28px;
108
+ border-radius: 50%;
109
+ margin-right: 10px;
110
+ }
111
+ .sp-wpcf-upgrade .sp-wpc-pro-features .feature-section{
112
+ margin-bottom: 40px;
113
+ display: flex;
114
+ flex-wrap: wrap;
115
+ }
116
+ .sp-wpcf-upgrade .sp-wpc-pro-features .feature-section .sp-wpc-feature h3{
117
+ margin-top:0;
118
+ }
119
+ .sp-wpcf-upgrade .sp-wpc-pro-features .feature-section .sp-wpc-feature p{
120
+ margin-bottom:0;
121
+ }
122
+ .sp-wpcf-upgrade .sp-wpc-pro-features .feature-section .sp-wpc-feature{
123
+ box-shadow: 0 0 10px 0 #dddddd;
124
+ margin: 4px;
125
+ border: 0 solid;
126
+ }
127
+ .sp-wpcf-upgrade .sp-wpc-pro-features .feature-section.three-col .col{
128
+ min-width: 32%;
129
+ max-width: 32%;
130
+ margin-top: 20px;
131
+ display: flex;
132
+ align-self: auto;
133
+ }
134
+ .sp-wpcf-upgrade .sp-wpc-pro-features .sp-wpc-pro-subtitle{
135
+ font-size: 1.2em;
136
+ margin-bottom: 26px;
137
+ }
138
+
139
+ .sp-wpcf-upgrade .sp-wpc-upgrade-sticky-footer{
140
+ position: fixed;
141
+ bottom: 0;
142
+ background: #fff;
143
+ width: calc(100% - 195px);
144
+ z-index: 9;
145
+ margin-left: -25px;
146
+ text-align: center;
147
+ border: 1px solid #dfdfdf;
148
+ padding: 15px 0;
149
+ border-bottom: none;
150
+ }
151
+ .sp-wpcf-upgrade .sp-wpcp-promo-video-title,
152
+ .sp-wpcf-upgrade .sp-wpc-pro-features h2{
153
+ font-size: 2.2em;
154
+ font-weight: 400;
155
+ }
156
+
157
+ .sp-wpcp-join-community h2 {
158
+ font-size: 2em;
159
+ }
160
+ .sp-wpcf-upgrade .sp-wpc-upgrade-sticky-footer h3{
161
+ margin-top: 17px;
162
+ margin-bottom: 20px;
163
+ }
164
+
165
+ .sp-wpcf-upgrade .sp-wpc-upgrade-sticky-footer a.button{
166
+ margin: 0 8px;
167
+ }
168
+
169
+ .sp-wpcf-upgrade .wpcf-upgrade-btn {
170
+ display: inline-block;
171
+ padding: 0 20px 0 0;
172
+ }
173
+ .sp-wpcf-upgrade a.wpcf-upgrade-btn,
174
+ .sp-wpcf-upgrade .wpcf-upgrade-btn a {
175
+ text-decoration: none;
176
+ text-align: center;
177
+ font-size: 16px;
178
+ }
179
+ .sp-wpcf-upgrade .wpcf-upgrade-btn a:focus {
180
+ outline: 0;
181
+ }
182
+ .sp-wpcf-upgrade a.wpcf-upgrade-btn,
183
+ .sp-wpcf-upgrade ul li.wpcf-upgrade-btn:first-child a{
184
+ background: #7cc048;
185
+ padding: 0 15px;
186
+ line-height: 46px;
187
+ display: block;
188
+ color: #fff;
189
+ border-radius: 3px;
190
+ }
191
+ .sp-wpcf-upgrade ul li.wpcf-upgrade-btn:last-child a{
192
+ text-decoration: underline;
193
+ }
194
+ .sp-wpcf-upgrade ul li.wpcf-upgrade-btn a i{
195
+ margin-left: 4px;
196
+ }
197
+ .sp-wpcf-upgrade ul li.wpcf-upgrade-btn:last-child a i{
198
+ font-size: 14px;
199
+ }
200
+ .sp-wpcf-upgrade a.wpcf-upgrade-btn{
201
+ display: inline-block;
202
+ }
203
+ /* Responsive CSS */
204
+ @media (max-width: 960px) {
205
+ .sp-wpc-help .sp-wpc-upgrade-sticky-footer {
206
+ width: calc(100%);
207
+ }
208
+ }
209
+ @media (max-width: 500px) {
210
+ .sp-wpcf-upgrade .wp-badge {
211
+ background-position-x: center;
212
+ }
213
+ }
admin/img/premium-logo.png ADDED
Binary file
admin/img/wpcp-icon-256.png ADDED
Binary file
admin/img/wpcp-logo.png ADDED
Binary file
admin/index.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php // Silence is golden.
admin/js/icon32.png ADDED
Binary file
admin/js/mce-button.js ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function() {
2
+ tinymce.PluginManager.add('sp_wpcp_mce_button', function( editor, url ) {
3
+ editor.addButton('sp_wpcp_mce_button', {
4
+ text: false,
5
+ icon: false,
6
+ image: url + '/icon32.png',
7
+ tooltip: 'WP Carousel',
8
+ onclick: function () {
9
+ editor.windowManager.open({
10
+ title: 'Insert Shortcode',
11
+ width: 400,
12
+ height: 100,
13
+ body: [
14
+ {
15
+ type: 'listbox',
16
+ name: 'listboxName',
17
+ label: 'Select Carousel',
18
+ 'values': editor.settings.spWPCPCarouselList
19
+ }
20
+ ],
21
+ onsubmit: function( e ) {
22
+ editor.insertContent( '[sp_wpcarousel id="' + e.data.listboxName + '"]');
23
+ }
24
+ });
25
+ }
26
+ });
27
+ });
28
+ })();
admin/views/help.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The help page for the WP Carousel
4
+ *
5
+ * @package WP Carousel
6
+ * @subpackage wp-carousel-free/admin
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ } // if direct access.
12
+
13
+ /**
14
+ * The help class for the WP Carousel
15
+ */
16
+ class WP_Carousel_Free_Help {
17
+
18
+ /**
19
+ * Wp Carousel Pro single instance of the class
20
+ *
21
+ * @var null
22
+ * @since 2.0.0
23
+ */
24
+ protected static $_instance = null;
25
+
26
+ /**
27
+ * Main WP_Carousel_Free_Help Instance
28
+ *
29
+ * @since 2.0.0
30
+ * @static
31
+ * @see sp_wpcp_help()
32
+ * @return self Main instance
33
+ */
34
+ public static function instance() {
35
+ if ( is_null( self::$_instance ) ) {
36
+ self::$_instance = new self();
37
+ }
38
+
39
+ return self::$_instance;
40
+ }
41
+
42
+ /**
43
+ * Add admin menu.
44
+ *
45
+ * @since 2.0.0
46
+ * @return void
47
+ */
48
+ public function help_admin_menu() {
49
+ add_submenu_page(
50
+ 'edit.php?post_type=sp_wp_carousel', __( 'WP Carousel Help', 'wp-carousel-free' ), __( 'Help', 'wp-carousel-free' ), 'manage_options', 'wpcf_help', array(
51
+ $this,
52
+ 'help_page_callback',
53
+ )
54
+ );
55
+ }
56
+
57
+ /**
58
+ * The WP Carousel Help Callback.
59
+ *
60
+ * @since 2.0.0
61
+ * @return void
62
+ */
63
+ public function help_page_callback() {
64
+ echo '
65
+ <div class="wrap about-wrap sp-wpcp-help">
66
+ <h1>' . esc_html__( 'Welcome to WordPress Carousel! ', 'wp-carousel-free' ) . '</h1>
67
+ </div>
68
+ <div class="wrap about-wrap sp-wpcp-help">
69
+ <p class="about-text">' . esc_html__( 'Thank you for installing WordPress Carousel! You\'re now running the most popular WordPress Carousel plugin.
70
+ This video will help you get started with the plugin.', 'wp-carousel-free' ) . '</p>
71
+ <div class="wp-badge"></div>
72
+
73
+ <hr>
74
+
75
+ <div class="headline-feature feature-video">
76
+ <iframe width="560" height="315" src="https://www.youtube.com/embed/hCeKn8jmxn4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
77
+ </div>
78
+
79
+ <hr>
80
+
81
+ <div class="feature-section three-col">
82
+ <div class="col">
83
+ <div class="sp-wpcp-feature sp-wpcp-text-center">
84
+ <i class="sp-wpcp-font-icon fa-life-ring"></i>
85
+ <h3>' . esc_html__( 'Need any Assistance?', 'wp-carousel-free' ) . '</h3>
86
+ <p>' . esc_html__( 'Our Expert Support Team is always ready to help you out promptly.', 'wp-carousel-free' ) . '</p>
87
+ <a href="https://shapedplugin.com/support-forum/" target="_blank" class="button button-primary">' . esc_html__( 'Contact Support', 'wp-carousel-free' ) . '</a>
88
+ </div>
89
+ </div>
90
+ <div class="col">
91
+ <div class="sp-wpcp-feature sp-wpcp-text-center">
92
+ <i class="sp-wpcp-font-icon fa-file-text"></i>
93
+ <h3>' . esc_html__( 'Looking for Documentation?', 'wp-carousel-free' ) . '</h3>
94
+ <p>' . esc_html__( 'We have detailed documentation on every aspects of WordPress Carousel.', 'wp-carousel-free' ) . '</p>
95
+ <a href="https://shapedplugin.com/docs/docs/wordpress-carousel/" target="_blank" class="button button-primary">' . esc_html__( 'Documentation', 'wp-carousel-free' ) . '</a>
96
+ </div>
97
+ </div>
98
+ <div class="col">
99
+ <div class="sp-wpcp-feature sp-wpcp-text-center">
100
+ <i class="sp-wpcp-font-icon fa-thumbs-up"></i>
101
+ <h3>' . esc_html__( 'Like This Plugin?', 'wp-carousel-free' ) . '</h3>
102
+ <p>' . esc_html__( 'If you like WordPress Carousel, please leave us a 5 star rating.', 'wp-carousel-free' ) . '</p>
103
+ <a href="https://wordpress.org/support/plugin/wp-carousel-free/reviews/?filter=5#new-post" target="_blank" class="button button-primary">' . esc_html__( 'Rate The Plugin', 'wp-carousel-free' ) . '</a>
104
+ </div>
105
+ </div>
106
+ </div>
107
+ </div>';
108
+ }
109
+ }
admin/views/meta-box/assets/css/sp-custom.css ADDED
@@ -0,0 +1,800 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------
2
+ SP_TP_Framework
3
+ --------------------------------------------------------*/
4
+ .text-center {
5
+ text-align: center;
6
+ }
7
+ .sp-after-text{
8
+ padding-left: 5px;
9
+ }
10
+
11
+ .js #sp_wpcp_upload_options.postbox .handlediv,
12
+ .js #sp_wpcp_upload_options.postbox .hndle {
13
+ display: none;
14
+ }
15
+ .sp-wpcp-framework .sp-wpcp-banner{
16
+ background-color: #18AFB9;
17
+ padding: 24px 28px;
18
+ overflow: hidden;
19
+ }
20
+ .sp-wpcp-framework .sp-wpcp-logo{
21
+ float: left;
22
+ }
23
+ .sp-wpcp-framework .sp-wpcp-logo img{
24
+ display: block;
25
+ width: 220px;
26
+ }
27
+ .sp-wpcp-framework .sp-wpcp-short-links{
28
+ float: right;
29
+ line-height: 28px;
30
+ }
31
+ .sp-wpcp-framework .sp-wpcp-short-links a{
32
+ color: #ffffff;
33
+ text-decoration: none;
34
+ margin-left: 16px;
35
+ font-size: 15px;
36
+ font-weight: 500;
37
+ }
38
+ .sp-wpcp-framework .sp-wpcp-short-links a i.fa{
39
+ margin-right: 7px;
40
+ }
41
+
42
+
43
+ #sp_wpcp_shortcode_options.postbox {
44
+ border: 1px solid #dddddd;
45
+ -webkit-box-shadow: none;
46
+ -moz-box-shadow: none;
47
+ box-shadow: none;
48
+ }
49
+ #sp_wpcp_upload_options .wpcpro_shortcode,
50
+ #sp_wpcp_upload_options .wpcpro_shortcode_divider,
51
+ #sp_wpcp_shortcode_options .sp-wpcp-banner,
52
+ #sp_wpcp_shortcode_options > .handlediv,
53
+ #sp_wpcp_shortcode_options > .hndle.ui-sortable-handle {
54
+ display: none;
55
+ }
56
+
57
+
58
+ .wpcpro_shortcode .wpcpro-col-lg-3 .selectable,
59
+ .sp-field-notice .sp-notice.sp-front-end-shortcode .wpcpro-sc-code.selectable{
60
+ -webkit-touch-callout: all;
61
+ -webkit-user-select: all;
62
+ -khtml-user-select: all;
63
+ -moz-user-select: all;
64
+ -ms-user-select: all;
65
+ user-select: all;
66
+ }
67
+
68
+ .sp-wpcp-framework .sp-content {
69
+ margin-left: 0;
70
+ border-top: 1px solid #efefef;
71
+ }
72
+ .sp-wpcp-framework .sp-nav {
73
+ position: inherit;
74
+ float: none;
75
+ width: 100%;
76
+ background: #f1f1f1;
77
+ -webkit-box-shadow: inset 3px -1px 1px -1px rgba(0,0,0,.04);
78
+ -moz-box-shadow: inset 3px -1px 1px -1px rgba(0,0,0,.04);
79
+ box-shadow: inset 3px -1px 1px -1px rgba(0,0,0,.04);
80
+ }
81
+ .sp-wpcp-framework .sp-nav ul {
82
+ margin: 0;
83
+ }
84
+
85
+ .sp-wpcp-framework .sp-nav ul li {
86
+ margin-bottom: -1px;
87
+ display: inline-block;
88
+
89
+ }
90
+
91
+ .sp-wpcp-framework .sp-nav-background {
92
+ position: inherit;
93
+ width: 100%;
94
+ background-color: #e3e3e3;
95
+ }
96
+
97
+ .sp-wpcp-framework .sp-nav ul li a {
98
+ background-color: #18AFB9;
99
+ border-top: 1px solid #18AFB9;
100
+ font-size: 13px;
101
+ padding: 16px 15px;
102
+ line-height: 1.4;
103
+ border-bottom: 1px solid #ddd;
104
+ color: #ffffff;
105
+ border-right: 1px solid #E2E2E1;
106
+ text-transform: uppercase;
107
+ font-weight: 600;
108
+ margin-bottom: -1px;
109
+ }
110
+
111
+ .sp-wpcp-framework .sp-nav ul li a.sp-section-active {
112
+ border-bottom: 1px solid transparent;
113
+ border-top: 1px solid #18AFB9;
114
+ background-color: #fff;
115
+ box-shadow: 0 3px 0 0 #18AFB9 inset;
116
+ }
117
+
118
+ .sp-wpcp-framework .sp-nav ul li .sp-section-active {
119
+ color: #000;
120
+ }
121
+
122
+ .sp-wpcp-framework .sp-nav ul li .sp-section-active i {
123
+ color: #18AFB9;
124
+ }
125
+
126
+ .sp-wpcp-framework .sp-nav ul li :after {
127
+ display: none;
128
+ }
129
+
130
+ .sp-element {
131
+ padding: 22px 30px;
132
+ border-bottom: 1px solid rgba(238, 238, 238, 0.1);
133
+ }
134
+
135
+ .sp-element:hover {
136
+ background-color: transparent;
137
+ }
138
+
139
+ .sp-element .sp-field-number input {
140
+ margin-right: 5px;
141
+ }
142
+ .sp-element.sp-field-number.sp-column-field .sp-help {
143
+ top: initial;
144
+ bottom: 4px;
145
+ right: 13px;
146
+ }
147
+ .sp-element.sp-field-number.sp-column-field input {
148
+ margin-right: 30px;
149
+ }
150
+ .sp-tooltip {
151
+
152
+ }
153
+
154
+ /*
155
+ More Plugins
156
+ */
157
+ .about-wrap .plugin-section .three-col .col{
158
+ background: #ffffff;
159
+ }
160
+ .about-wrap .plugin-section .three-col .col .sp-wpcp-plugin{
161
+ border: 1px solid #ddd;
162
+ }
163
+ .about-wrap .plugin-section .three-col .col .sp-wpcp-plugin .sp-wpcp-plugin-content{
164
+ padding-left: 20px;
165
+ padding-right: 20px;
166
+ padding-bottom: 20px
167
+ }
168
+ .about-wrap .plugin-section .three-col .col .sp-wpcp-plugin .sp-wpcp-plugin-content h3{
169
+ margin-top: 20px;
170
+ margin-bottom: 8px;
171
+ font-weight: 500;
172
+ }
173
+
174
+ .about-wrap .plugin-section .three-col .col .sp-wpcp-plugin .sp-wpcp-plugin-content p{
175
+ margin-top: 0;
176
+ }
177
+
178
+ .about-wrap .plugin-section .sp-plugin-section-title h2{
179
+ font-size: 2.2em;
180
+ color: #32373c;
181
+ font-weight: 400;
182
+ }
183
+
184
+ .about-wrap .plugin-section .sp-plugin-section-title h4{
185
+ font-weight: 400;
186
+ text-align: center;
187
+ font-size: 18px;
188
+ color: #555d66;
189
+ margin-top: 15px;
190
+ margin-bottom: 40px;
191
+ }
192
+
193
+ /**
194
+ Advanced Typography Field*/
195
+ .sp-divider {
196
+ width: 100%;
197
+ display: block;
198
+ height: 10px;
199
+ }
200
+
201
+ .sp-wpcp-framework .sp-font-preview {
202
+ padding: 10px;
203
+ border: 1px solid #e6e6e6;
204
+ color: #7b7b7b;
205
+ margin-top: 20px;
206
+ background-color: #ececec;
207
+ font-size: 16px;
208
+ }
209
+ #sp-tab-sp_wpcp_shortcode_option_4 .sp-field-typography_advanced .sp-element {
210
+ display: inline-block;
211
+ padding: 0 5px 0 0;
212
+ margin: 0;
213
+ line-height: 1.5;
214
+ color: #999;
215
+ }
216
+ .sp_wpcp_margin_field .sp-font-left,
217
+ .sp_wpcp_margin_field .sp-font-top,
218
+ .sp_wpcp_margin_field .sp-font-bottom,
219
+ .sp_wpcp_margin_field .sp-font-right{
220
+ margin-right: 30px;
221
+ }
222
+ .sp_wpcp_margin_field .sp-font-left:before,
223
+ .sp_wpcp_margin_field .sp-font-top:before,
224
+ .sp_wpcp_margin_field .sp-font-bottom:before,
225
+ .sp_wpcp_margin_field .sp-font-right:before {
226
+ content: "px";
227
+ position: absolute;
228
+ top: 19px;
229
+ right: -20px;
230
+ height: 34px;
231
+ width: 29px;
232
+ line-height: 34px;
233
+ text-align: center;
234
+ background-color: #f5f5f5;
235
+ display: block;
236
+ border: 1px solid #ddd;
237
+ border-left: none;
238
+ }
239
+ #sp-tab-sp_wpcp_shortcode_option_4 .sp-field-number.sp-font-size:before,
240
+ #sp-tab-sp_wpcp_shortcode_option_4 .sp-field-number.sp-font-height:before {
241
+ content: "px";
242
+ position: absolute;
243
+ top: 20px;
244
+ right: -20px;
245
+ height: 34px;
246
+ width: 29px;
247
+ line-height: 34px;
248
+ text-align: center;
249
+ background-color: #f5f5f5;
250
+ display: block;
251
+ border: 1px solid #ddd;
252
+ border-left: none;
253
+ }
254
+ #sp-tab-sp_wpcp_shortcode_option_4 .sp-field-number.sp-font-size {
255
+ margin-right: 25px !important;
256
+ }
257
+
258
+ /*ShortCode Area*/
259
+ .sp-metabox-framework .wpcpro_shortcode{
260
+ display: inline-flex;
261
+ width:100%;
262
+ background-color: #fffdfd;
263
+ }
264
+ .wpcpro_shortcode .wpcpro-col-lg-3 {
265
+ border-right: 1px solid #dddddd;
266
+ width: 33.33%;
267
+ }
268
+ .wpcpro_shortcode .wpcpro-col-lg-3 .wpcpro_shortcode_content{
269
+ padding: 20px 16px;
270
+ }
271
+
272
+ .wpcpro_shortcode .wpcpro-col-lg-3 .wpcpro_shortcode_content .wpcpro-sc-code{
273
+ background-color: rgba(82, 179, 217, 0.11);
274
+ padding: 10px 15px;
275
+ display: inline-block;
276
+ }
277
+
278
+ .wpcpro_shortcode .wpcpro-col-lg-3:last-child {
279
+ border-right: none;
280
+ width: 66.66%;
281
+ }
282
+
283
+ .wpcpro_shortcode .wpcpro-col-lg-3 .wpcpro-shortcode-title {
284
+ font-weight: 500;
285
+ font-size: 14px !important;
286
+ padding-top: 0 !important;
287
+ color: #4c5158;
288
+ margin-right: 5px;
289
+ }
290
+
291
+ .wpcpro_shortcode .wpcpro-col-lg-3 .back-image {
292
+ max-width: 100%;
293
+ display: block;
294
+ margin: 0 auto;
295
+ }
296
+
297
+ .wpcpro_shortcode .wpcpro-col-lg-3 textarea {
298
+ border-color: transparent;
299
+ box-shadow: none;
300
+ background-color: #eee;
301
+ padding: 4px 6px;
302
+ resize: none;
303
+ text-align: center;
304
+ max-width: 100%;
305
+ }
306
+
307
+ .wpcpro_shortcode_divider {
308
+ height: 20px;
309
+ background: #f1f1f1;
310
+ border-top: 1px solid #dddddd;
311
+ }
312
+
313
+ .sp-wpcp-framework .sp-content .sp-section-title {
314
+ background-color: #18AFB9;
315
+ }
316
+ .chosen-container-multi .chosen-drop .result-selected {
317
+ display: none;
318
+ }
319
+ .sp-field-switcher .sp-text-desc {
320
+ margin-left:0;
321
+ }
322
+
323
+ /* Rating */
324
+ .sp-wpcp-client-rating{
325
+ float: left;
326
+ }
327
+ .sp-wpcp-client-rating:not(:checked) > input {
328
+ visibility:hidden;
329
+ display: none;
330
+ width:0;
331
+ height:0;
332
+ float: right;;
333
+ top: 100%;
334
+ clip: rect(0,0,0,0);
335
+ margin: 0;
336
+ padding: 0;
337
+ border:10px #fff solid;
338
+ }
339
+
340
+ .sp-wpcp-client-rating:not(:checked) > label {
341
+ float: right;
342
+ display: block;
343
+ padding: 0;
344
+ margin: 0;
345
+ cursor: pointer;
346
+ font-size: 150%;
347
+ line-height: 1.2;
348
+ color: #d4d4d4;
349
+ width: 1em;
350
+ }
351
+
352
+ .sp-wpcp-client-rating > input:checked ~ label {
353
+ color: #f3bb00;
354
+ }
355
+
356
+ .sp-wpcp-client-rating:not(:checked) > label:hover,
357
+ .sp-wpcp-client-rating:not(:checked) > label:hover ~ label {
358
+ color: #de7202;
359
+ }
360
+
361
+ .sp-wpcp-client-rating > input:checked + label:hover,
362
+ .sp-wpcp-client-rating > input:checked + label:hover ~ label,
363
+ .sp-wpcp-client-rating > input:checked ~ label:hover,
364
+ .sp-wpcp-client-rating > input:checked ~ label:hover ~ label,
365
+ .sp-wpcp-client-rating > label:hover ~ input:checked ~ label {
366
+ color: #de7202;
367
+ }
368
+
369
+ /* Settings */
370
+ h1.sp-option-framework-page-title{
371
+ font-size: 23px;
372
+ font-weight: 400;
373
+ margin: 0;
374
+ padding: 18px 0 0;
375
+ line-height: 29px;
376
+ }
377
+ .sp-wpcp-framework.sp-option-framework{
378
+ border: 1px solid #cecece;
379
+ }
380
+ .sp-wpcp-framework.sp-option-framework .sp-field-sorter .sp-modules{
381
+ width: 100%;
382
+ }
383
+ .sp-wpcp-framework.sp-option-framework .sp-header {
384
+ background-color: #f2f2f2;
385
+ border-bottom: 1px solid #cecece;
386
+ padding: 22px 28px;
387
+ }
388
+ .sp-wpcp-framework.sp-option-framework .sp-header h2{
389
+ float: left;
390
+ margin: 0;
391
+ font-size: 22px;
392
+ color: #444444;
393
+ font-weight: 600;
394
+ line-height: 35px;
395
+ }
396
+ .sp-wpcp-framework.sp-option-framework .sp-header fieldset input{
397
+ text-shadow: 0 0 0;
398
+ border: 0;
399
+ border-radius: 0;
400
+ padding: 3px 15px;
401
+ height: auto;
402
+ -webkit-transition: all .4s;
403
+ -moz-transition: all .4s;
404
+ -ms-transition: all .4s;
405
+ -o-transition: all .4s;
406
+ transition: all .4s;
407
+ }
408
+ .sp-wpcp-framework.sp-option-framework .sp-header fieldset input.button-primary{
409
+ box-shadow: 0 3px 0 #169ca5;
410
+ background-color: #18AFB9;
411
+ color: #ffffff;
412
+ }
413
+ .sp-wpcp-framework.sp-option-framework .sp-header fieldset input.button-primary:hover {
414
+ box-shadow: 0 3px 0 #1784af;
415
+ background-color: #21a1d4;
416
+ color: #ffffff;
417
+ }
418
+ .sp-wpcp-framework.sp-option-framework .sp-header fieldset input.sp-restore{
419
+ box-shadow: 0 3px 0 #666666;
420
+ background-color: #888888;
421
+ color: #ffffff;
422
+ margin-left: 8px;
423
+ }
424
+ .sp-wpcp-framework.sp-option-framework .sp-header fieldset input.sp-restore:hover {
425
+ box-shadow: 0 3px 0 #4a4949;
426
+ background-color: #6b6a6a;
427
+ color: #ffffff;
428
+ }
429
+ .sp-wpcp-framework.sp-option-framework .sp-content {
430
+ margin-left: 225px;
431
+ border-top: 0 solid;
432
+ }
433
+ .sp-wpcp-framework.sp-option-framework .sp-nav-background{
434
+ position: absolute;
435
+ width: 225px;
436
+ background-color: #dddddd;
437
+ border-right: 1px solid #cecece;
438
+ }
439
+ .sp-wpcp-framework.sp-option-framework .sp-nav{
440
+ position: relative;
441
+ float: left;
442
+ width: 225px;
443
+ background: transparent;
444
+ -webkit-box-shadow: 0 0 0 0;
445
+ -moz-box-shadow: 0 0 0 0;
446
+ box-shadow: 0 0 0 0;
447
+ }
448
+ .sp-wpcp-framework.sp-option-framework .sp-nav ul li {
449
+ margin-bottom: 0;
450
+ display: list-item;
451
+ }
452
+ .sp-wpcp-framework.sp-option-framework .sp-nav ul li a{
453
+ border-top: 0;
454
+ border-right: 0;
455
+ border-bottom: 1px solid #cecece;
456
+ background-color: #efefef;
457
+ margin-bottom: 0;
458
+ color: #464646;
459
+ padding: 15px 15px;
460
+ }
461
+ .sp-wpcp-framework.sp-option-framework .sp-nav ul li a.sp-section-active{
462
+ box-shadow: 3px 0 0 0 #18AFB9 inset;
463
+ background-color: #ffffff;
464
+ color: #18AFB9;
465
+ }
466
+ .sp-wpcp-framework.sp-option-framework .sp-nav ul ul:before{
467
+ background-color: transparent;
468
+ }
469
+ .sp-wpcp-framework.sp-option-framework .sp-nav ul ul{
470
+ border-bottom: 1px solid #cecece;
471
+ }
472
+ .sp-wpcp-framework.sp-option-framework .sp-nav ul ul li a{
473
+ background-color: #f8fdff;
474
+ padding: 13px 15px 13px 24px;
475
+ }
476
+
477
+ /* Notification Message */
478
+ #wp-pending_testimonial_message-wrap{
479
+ float: left;
480
+ width: 100%;
481
+ }
482
+ #wp-pending_testimonial_message-wrap #pending_testimonial_message_ifr{
483
+ min-height: 300px;
484
+ }
485
+
486
+ .sp-field-notice .sp-notice.sp-front-end-shortcode{
487
+ font-size: 14px;
488
+ border-bottom: 1px solid #e8e8e8;
489
+ }
490
+ .sp-field-notice .sp-notice.sp-front-end-shortcode .wpcpro-sc-code{
491
+ background-color: rgba(82, 179, 217, 0.11);
492
+ padding: 8px 12px;
493
+ display: inline-block;
494
+ margin-left: 8px;
495
+ }
496
+
497
+ /**
498
+ Slider Field
499
+ */
500
+ .sp-field-slider input {
501
+ display: inline-block;
502
+ width: 40px;
503
+ background: #fff;
504
+ }
505
+
506
+ .sp-field-slider input[type=slider]:before {
507
+ width: 35px;
508
+ height: 35px;
509
+ display: block;
510
+ background: red;
511
+ content: "%";
512
+ position: absolute;
513
+ right: 0;
514
+ top: 0;
515
+ float: right;
516
+ margin-right: -20px;
517
+ color: #fff;
518
+ }
519
+
520
+ .sp-slider {
521
+ display: inline-block;
522
+ margin: 0 8% 0 0;
523
+ width: 50%;
524
+ vertical-align: super;
525
+ }
526
+
527
+ .sp-field-slider .ui-slider {
528
+ position: relative;
529
+ width: 100%;
530
+ height: 6px;
531
+ background: #E8E8E8;
532
+ }
533
+
534
+ .sp-field-slider .ui-slider-range {
535
+ background: #111;
536
+ height: 6px;
537
+ }
538
+
539
+ .sp-field-slider .ui-slider-handle {
540
+ height: 18px;
541
+ width: 18px;
542
+ background: #ff512f;
543
+ position: absolute;
544
+ top: -6px;
545
+ border-radius: 100%;
546
+ cursor: pointer;
547
+ }
548
+
549
+ /*
550
+ ButtonSet field and Carousel Type field.
551
+ */
552
+ .sp-field-button-set label input,
553
+ .sp-field-carousel-type label input {
554
+ display:none;
555
+ }
556
+ .sp-field-button-set label span {
557
+ background: linear-gradient(to bottom, white, #eeeeee);
558
+ padding: 7px 12px;
559
+ margin: 0;
560
+ vertical-align: middle;
561
+ border: solid 1px #ccc;
562
+ border-radius: 0;
563
+ cursor: pointer;
564
+ border-right: none;
565
+ }
566
+
567
+ .sp-field-button-set label input ~ span:hover {
568
+ background: #fff;
569
+ }
570
+ .sp-field-button-set label:first-child span {
571
+ border-radius: 4px 0 0 4px;
572
+ margin-right: -1px;
573
+ }
574
+ .sp-field-button-set label:last-child span {
575
+ border-radius: 0 4px 4px 0;
576
+ border-right: solid 1px #ccc;
577
+ }
578
+ .sp-field-button-set label input:checked ~ span {
579
+ background: #18AFB9;
580
+ border-color: rgb(21, 157, 167);
581
+ color: #fff;
582
+ cursor: default;
583
+ box-shadow: none;
584
+ }
585
+
586
+ /*
587
+ Carousel Type
588
+ */
589
+ .sp-field-carousel-type label span {
590
+ background: #e8ecef;
591
+ color: #7b8898;
592
+ display: block;
593
+ margin-right: 10px;
594
+ vertical-align: middle;
595
+ border: solid 1px #e8ecef;
596
+ border-radius: 2px;
597
+ cursor: pointer;
598
+ text-align: center;
599
+ width: 120px;
600
+ height: 80px;
601
+ box-shadow: inset 0 0 0px 5px #fff;
602
+ position: relative;
603
+ }
604
+ .sp-field-carousel-type label span strong{
605
+ position: absolute;
606
+ top: 5px;
607
+ right: 6px;
608
+ background: #cbd6df;
609
+ padding: 0px 5px;
610
+ font-size: 10px;
611
+ }
612
+ .sp-field-carousel-type label span i{
613
+ font-size: 30px;
614
+ width: 32px;
615
+ height: 30px;
616
+ margin-top: 14px;
617
+ }
618
+ .sp-field-carousel-type label span p {
619
+ margin-top: 5px;
620
+ font-weight: 500;
621
+ }
622
+
623
+ .sp-field-carousel-type label input:checked ~ span {
624
+ border-color: rgb(55, 209, 230);
625
+ cursor: default;
626
+ box-shadow: inset 0 0 0px 5px #fff, 0px 0px 10px 0px rgb(55, 209, 230);
627
+ }
628
+ /* Advanced Background Field */
629
+ .sp-background-preview {
630
+ height: 250px;
631
+ width: 100%;
632
+ }
633
+ .sp_wpcp_adv_background_field .sp-element{
634
+ display: inline-block;
635
+ }
636
+ .sp_wpcp_adv_background_field .sp-element .wp-picker-container,
637
+ .sp_wpcp_adv_background_field .sp-element.sp-field-upload,
638
+ .sp_wpcp_adv_background_field .sp-element.sp-field-select_typo select {
639
+ margin-top: 5px;
640
+ }
641
+ .sp_wpcp_adv_background_field .sp-element.sp-field-upload{
642
+ padding-left: 0;
643
+ }
644
+ .sp_wpcp_adv_background_field .sp-field-color_picker{
645
+ display:block;
646
+ }
647
+ /*
648
+ Image Height Field
649
+ */
650
+ .sp_wpcp_image_height_field .sp-height-css {
651
+ margin-right: 20px;
652
+ }
653
+ .sp_wpcp_image_height_field .sp-height-css .sp-after-text{
654
+ padding-left: 0;
655
+ }
656
+ @media (min-width: 1400px) {
657
+ .sp-metabox-framework .sp-slider {
658
+ width: 35%;
659
+ }
660
+ }
661
+ @media (max-width: 1200px) {
662
+ .sp-metabox-framework .wpcpro_shortcode{
663
+ display: block;
664
+ }
665
+ .wpcpro_shortcode .wpcpro-col-lg-3 {
666
+ width: 100%;
667
+ display: block;
668
+ border-bottom: 1px solid #e5e5e5;
669
+ padding-bottom:15px;
670
+ border-right:none;
671
+ }
672
+
673
+ .wpcpro_shortcode .wpcpro-col-lg-3:last-child {
674
+ border-bottom: none;
675
+ padding-bottom:0;
676
+ }
677
+ }
678
+ @media only screen and (max-width: 782px) {
679
+ .sp-wpcp-framework.sp-option-framework .sp-content {
680
+ margin-left: 0;
681
+ }
682
+ .sp-wpcp-framework.sp-option-framework .sp-header h2{
683
+ float: none;
684
+ }
685
+ }
686
+
687
+ /* WPCP CSS */
688
+ .sp-field-carousel_type > .sp-title {
689
+ font-size:15px;
690
+ }
691
+ .sp-field-carousel_type > .sp-fieldset,
692
+ .sp-field-background_adv.wpcp_carousel_content_bg > .sp-fieldset,
693
+ .wpcp-gallery-filed-wrapper > .sp-fieldset{
694
+ margin-left: 0;
695
+ margin-top: 30px;
696
+ }
697
+ .wpcp-video-field-wrapper > .sp-fieldset,
698
+ .sp-field-group.wpcp_carousel_content_wrapper .sp-fieldset {
699
+ margin-left: 0;
700
+ margin-top: 18px;
701
+ }
702
+ .sp-field-group.wpcp-video-field-wrapper,
703
+ .sp-field-group.wpcp_carousel_content_wrapper {
704
+ padding-top: 0;
705
+ }
706
+ .sp-field-group.wpcp-video-field-wrapper .sp-groups.sp-accordion .sp-group:first-of-type,
707
+ .sp-field-group.wpcp_carousel_content_wrapper .sp-groups.sp-accordion .sp-group:first-of-type{
708
+ margin-top: 29px;
709
+ }
710
+ .sp-field-group .sp-element.sp-field-wysiwyg.wpcp_carousel_content_source .sp-fieldset {
711
+ margin-top: 0;
712
+ }
713
+ .wpcp-gallery-filed-wrapper .sp-fieldset .button i{
714
+ font-size: 24px;
715
+ margin-bottom: 10px;
716
+ }
717
+ .wpcp-gallery-filed-wrapper .button{
718
+ width: 110px;
719
+ height: 110px;
720
+ text-align: center;
721
+ line-height: 15px;
722
+ color: #fff;
723
+ border: none;
724
+ border-radius: 2px;
725
+ display: flex;
726
+ justify-content: center;
727
+ flex-direction: column;
728
+ font-weight: 600;
729
+ }
730
+ .wpcp-gallery-filed-wrapper .sp-fieldset .button.button-primary.sp-add {
731
+ background: #4eb631;
732
+ box-shadow: none;
733
+ text-shadow: none;
734
+ }
735
+ .wpcp-gallery-filed-wrapper .sp-fieldset .button.sp-edit{
736
+ background: #6a7885;
737
+ }
738
+ .wpcp-gallery-filed-wrapper .sp-fieldset .button.sp-warning-primary.sp-remove {
739
+ background: #c44533;
740
+ }
741
+ .wpcp-gallery-filed-wrapper .sp-fieldset a,
742
+ .wpcp-gallery-filed-wrapper .sp-fieldset li {
743
+ float:left;
744
+ }
745
+ .wpcp-gallery-filed-wrapper .sp-fieldset a:hover,
746
+ .wpcp-gallery-filed-wrapper .sp-fieldset a:focus {
747
+ color:#fff;
748
+ }
749
+
750
+ .wpcp_carousel_content_source .sp-title{
751
+ display:none;
752
+ }
753
+ .wpcp-video-field-wrapper .sp-field-wysiwyg .sp-fieldset,
754
+ .wpcp_carousel_content_source .sp-fieldset{
755
+ margin-left:0;
756
+ }
757
+ .wpcp_carousel_content_bg .sp-title{
758
+ border: 1px solid #e5e5e5;
759
+ background: #fafafa;
760
+ line-height: 38px;
761
+ padding-left: 15px;
762
+ width: 100%;
763
+ margin-bottom: 15px;
764
+ }
765
+
766
+ /* Group Remove Button */
767
+ .wpcp_carousel_content_wrapper.sp-field-group .sp-group h4 .video-type {
768
+ display: none;
769
+ }
770
+ .sp-groups .sp-remove-group {
771
+ float: right;
772
+ font-size: 22px;
773
+ line-height: 22px;
774
+ color: #d9534f;
775
+ margin-top:-3px;
776
+ }
777
+ .sp-groups .sp-remove-group:hover {
778
+ color: #c51f1a;
779
+ }
780
+
781
+ .sp-field-group .sp-add-group {
782
+ margin-top: 10px;
783
+ }
784
+ /**
785
+ Pro Notice
786
+ **/
787
+ .sp-element.sp-field-pronotice {
788
+ font-size: 15px;
789
+ margin: 22px 30px;
790
+ color: #2f2f2f;
791
+ background: #f9f9f9;
792
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.18);
793
+ box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.18);
794
+ padding: 10px 12px;
795
+ border-left: 3px solid #f90000;
796
+ }
797
+ .sp-element.sp-field-pronotice a{
798
+ text-decoration: none;
799
+ font-weight: 500;
800
+ }
admin/views/meta-box/assets/css/sp-framework-rtl.css ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .sp-wpcp-framework {
2
+ margin-left: 20px;
3
+ margin-right: 0;
4
+ }
5
+ .sp-wpcp-framework .sp-header h1 {
6
+ float: right;
7
+ }
8
+ .sp-wpcp-framework .sp-header fieldset {
9
+ float: left;
10
+ }
11
+ .sp-wpcp-framework .sp-nav {
12
+ float: right;
13
+ }
14
+ .sp-wpcp-framework .sp-nav ul {
15
+ clear: right;
16
+ }
17
+ .sp-wpcp-framework .sp-nav ul li .sp-section-active:after {
18
+ right: auto;
19
+ left: 0;
20
+ border-left-color: #fff;
21
+ border-right-color: transparent;
22
+ }
23
+ .sp-wpcp-framework .sp-nav ul li .sp-arrow:after {
24
+ content: "\f053";
25
+ right: auto;
26
+ left: 10px;
27
+ }
28
+ .sp-wpcp-framework .sp-nav ul li.sp-tab-active .sp-arrow:after {
29
+ -moz-transform: rotate(-90deg);
30
+ -ms-transform: rotate(-90deg);
31
+ -webkit-transform: rotate(-90deg);
32
+ transform: rotate(-90deg);
33
+ }
34
+ .sp-wpcp-framework .sp-nav ul ul li a {
35
+ padding-right: 25px;
36
+ padding-left: 15px;
37
+ }
38
+ .sp-wpcp-framework .sp-nav ul ul:before {
39
+ left: auto;
40
+ right: 15px;
41
+ }
42
+ .sp-wpcp-framework .sp-nav .sp-icon {
43
+ margin-left: 5px;
44
+ margin-right: 0;
45
+ }
46
+ .sp-wpcp-framework .sp-nav-background {
47
+ left: auto;
48
+ right: 0;
49
+ }
50
+ .sp-wpcp-framework .sp-content {
51
+ margin-left: 0;
52
+ margin-right: 225px;
53
+ }
54
+ .sp-wpcp-framework .sp-content .sp-sections {
55
+ float: right;
56
+ }
57
+ .sp-wpcp-framework .sp-show-all .sp-content {
58
+ margin-right: 0;
59
+ overflow: hidden;
60
+ }
61
+ .sp-wpcp-framework .sp-expand-all {
62
+ right: auto;
63
+ left: 40px;
64
+ }
65
+ .sp-wpcp-framework .sp-footer {
66
+ text-align: left;
67
+ }
68
+
69
+ .sp-metabox-framework {
70
+ margin: -6px -12px -12px -12px;
71
+ }
72
+ .sp-metabox-framework .sp-content .sp-section-title {
73
+ padding: 20px;
74
+ }
75
+
76
+ .sp-element .sp-title {
77
+ float: right;
78
+ }
79
+ .sp-element .sp-fieldset {
80
+ margin-left: 0;
81
+ margin-right: 30%;
82
+ }
83
+
84
+ .sp-pseudo-field {
85
+ padding: 0 0 0 5px !important;
86
+ }
87
+
88
+ .sp-field-number em {
89
+ margin-left: 0;
90
+ margin-right: 5px;
91
+ }
92
+
93
+ .sp-field-typography select,
94
+ .sp-field-typography .chosen-container {
95
+ margin-right: 0;
96
+ margin-left: 5px;
97
+ }
98
+
99
+ .sp-field-checkbox .horizontal li,
100
+ .sp-field-radio .horizontal li {
101
+ margin-right: 0;
102
+ margin-left: 15px;
103
+ }
104
+
105
+ .sp-field-switcher label {
106
+ float: right;
107
+ }
108
+ .sp-field-switcher .sp-text-desc {
109
+ float: right;
110
+ margin-left: 0;
111
+ margin-right: 5px;
112
+ }
113
+
114
+ .sp-field-color_picker .sp-alpha-slider {
115
+ margin-left: 0;
116
+ margin-right: 2px;
117
+ }
118
+ .sp-field-color_picker .sp-alpha-slider .ui-slider-handle {
119
+ margin: 0 -11px;
120
+ }
121
+ .sp-field-color_picker .sp-alpha-slider-offset {
122
+ background-position: center right;
123
+ }
124
+ .sp-field-color_picker .sp-alpha-text {
125
+ right: auto;
126
+ left: 10px;
127
+ }
128
+
129
+ .sp-field-group .ui-accordion-icons {
130
+ padding-left: 0;
131
+ padding-right: 30px;
132
+ }
133
+ .sp-field-group .ui-accordion-header-icon {
134
+ left: auto;
135
+ right: .5em;
136
+ }
137
+ .sp-field-group .dashicons-arrow-right:before {
138
+ content: "\f141";
139
+ }
140
+
141
+ .sp-help {
142
+ right: auto;
143
+ left: 5px;
144
+ }
145
+
146
+ .sp-field-icon .button {
147
+ margin-right: 0;
148
+ margin-left: 5px;
149
+ }
150
+ .sp-field-icon .sp-icon-preview i {
151
+ margin-right: 0;
152
+ margin-left: 5px;
153
+ }
154
+
155
+ .sp-field-gallery ul li {
156
+ margin-right: 0;
157
+ margin-left: 5px;
158
+ }
159
+ .sp-field-gallery .button {
160
+ margin-right: 0;
161
+ margin-left: 5px;
162
+ }
163
+
164
+ .sp-field-sorter .sp-modules {
165
+ float: right;
166
+ margin-right: 0;
167
+ margin-left: 10px;
168
+ }
169
+
170
+ .sp-taxonomy-add-fields .sp-fieldset {
171
+ margin-right: 0;
172
+ }
173
+ .sp-taxonomy-add-fields .sp-help {
174
+ left: -5px;
175
+ right: auto;
176
+ }
177
+
178
+ .sp-taxonomy-edit-fields .sp-fieldset {
179
+ margin-left: 0;
180
+ margin-right: 225px;
181
+ }
182
+ .sp-taxonomy-edit-fields .sp-help {
183
+ right: auto;
184
+ left: -5px;
185
+ }
186
+
187
+ #sp-save-ajax {
188
+ right: auto;
189
+ left: 5px;
190
+ }
191
+
192
+ .sp-dialog .sp-element {
193
+ padding-right: 15px;
194
+ padding-left: 30px;
195
+ }
196
+ .sp-dialog .sp-shortcode-clone .sp-remove-clone {
197
+ right: auto;
198
+ left: 5px;
199
+ }
200
+
201
+ #customize-controls .sp-element .sp-fieldset,
202
+ .widget-content .sp-element .sp-fieldset,
203
+ #side-sortables .sp-element .sp-fieldset {
204
+ margin-right: 0;
205
+ }
206
+
207
+ @media only screen and (max-width: 1200px) {
208
+ .sp-metabox-framework .sp-element .sp-fieldset {
209
+ margin-left: 0;
210
+ }
211
+ }
212
+ @media only screen and (max-width: 782px) {
213
+ .sp-wpcp-framework .sp-fieldset,
214
+ .sp-wpcp-framework .sp-content {
215
+ margin-right: 0;
216
+ }
217
+ }
218
+ .ui-dialog {
219
+ right: auto;
220
+ }
admin/views/meta-box/assets/css/sp-framework.css ADDED
@@ -0,0 +1,1850 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ /* @group Base */
3
+ .sp-wpcp-framework .chosen-container {
4
+ position: relative;
5
+ display: inline-block;
6
+ vertical-align: middle;
7
+ font-size: 13px;
8
+ zoom: 1;
9
+ *display: inline;
10
+ -webkit-user-select: none;
11
+ -moz-user-select: none;
12
+ user-select: none;
13
+ }
14
+
15
+ .sp-wpcp-framework .chosen-container * {
16
+ -webkit-box-sizing: border-box;
17
+ -moz-box-sizing: border-box;
18
+ box-sizing: border-box;
19
+ }
20
+
21
+ .sp-wpcp-framework .chosen-container .chosen-drop {
22
+ position: absolute;
23
+ top: 100%;
24
+ left: -9999px;
25
+ z-index: 1010;
26
+ width: 100%;
27
+ border: 1px solid #aaa;
28
+ border-top: 0;
29
+ background: #fff;
30
+ box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
31
+ }
32
+
33
+ .sp-wpcp-framework .chosen-container.chosen-with-drop .chosen-drop {
34
+ left: 0;
35
+ }
36
+
37
+ .sp-wpcp-framework .chosen-container a {
38
+ cursor: pointer;
39
+ }
40
+
41
+ .sp-wpcp-framework .chosen-container .search-choice .group-name,
42
+ .sp-wpcp-framework .chosen-container .chosen-single .group-name {
43
+ margin-right: 4px;
44
+ overflow: hidden;
45
+ white-space: nowrap;
46
+ text-overflow: ellipsis;
47
+ font-weight: normal;
48
+ color: #999999;
49
+ }
50
+
51
+ .sp-wpcp-framework .chosen-container .search-choice .group-name:after,
52
+ .sp-wpcp-framework .chosen-container .chosen-single .group-name:after {
53
+ content: ":";
54
+ padding-left: 2px;
55
+ vertical-align: top;
56
+ }
57
+
58
+ /* @end */
59
+ /* @group Single Chosen */
60
+ .sp-wpcp-framework .chosen-container-single .chosen-single {
61
+ position: relative;
62
+ display: block;
63
+ overflow: hidden;
64
+ padding: 0 0 0 8px;
65
+ height: 25px;
66
+ border: 1px solid #aaa;
67
+ border-radius: 5px;
68
+ background-color: #fff;
69
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
70
+ background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
71
+ background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
72
+ background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
73
+ background: linear-gradient(to bottom, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
74
+ background-clip: padding-box;
75
+ box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
76
+ color: #444;
77
+ text-decoration: none;
78
+ white-space: nowrap;
79
+ line-height: 24px;
80
+ }
81
+
82
+ .sp-wpcp-framework .chosen-container-single .chosen-default {
83
+ color: #999;
84
+ }
85
+
86
+ .sp-wpcp-framework .chosen-container-single .chosen-single span {
87
+ display: block;
88
+ overflow: hidden;
89
+ margin-right: 26px;
90
+ text-overflow: ellipsis;
91
+ white-space: nowrap;
92
+ }
93
+
94
+ .sp-wpcp-framework .chosen-container-single .chosen-single-with-deselect span {
95
+ margin-right: 38px;
96
+ }
97
+
98
+ .sp-wpcp-framework .chosen-container-single .chosen-single abbr {
99
+ position: absolute;
100
+ top: 6px;
101
+ right: 26px;
102
+ display: block;
103
+ width: 12px;
104
+ height: 12px;
105
+ background: url("../images/chosen-sprite.png") -42px 1px no-repeat;
106
+ font-size: 1px;
107
+ }
108
+
109
+ .sp-wpcp-framework .chosen-container-single .chosen-single abbr:hover {
110
+ background-position: -42px -10px;
111
+ }
112
+
113
+ .sp-wpcp-framework .chosen-container-single.chosen-disabled .chosen-single abbr:hover {
114
+ background-position: -42px -10px;
115
+ }
116
+
117
+ .sp-wpcp-framework .chosen-container-single .chosen-single div {
118
+ position: absolute;
119
+ top: 0;
120
+ right: 0;
121
+ display: block;
122
+ width: 18px;
123
+ height: 100%;
124
+ }
125
+
126
+ .sp-wpcp-framework .chosen-container-single .chosen-single div b {
127
+ display: block;
128
+ width: 100%;
129
+ height: 100%;
130
+ background: url("../images/chosen-sprite.png") no-repeat 0px 2px;
131
+ }
132
+
133
+ .sp-wpcp-framework .chosen-container-single .chosen-search {
134
+ position: relative;
135
+ z-index: 1010;
136
+ margin: 0;
137
+ padding: 3px 4px;
138
+ white-space: nowrap;
139
+ }
140
+
141
+ .sp-wpcp-framework .chosen-container-single .chosen-search input[type="text"] {
142
+ margin: 1px 0;
143
+ padding: 4px 20px 4px 5px;
144
+ width: 100%;
145
+ height: auto;
146
+ outline: 0;
147
+ border: 1px solid #aaa;
148
+ background: white url("../images/chosen-sprite.png") no-repeat 100% -20px;
149
+ background: url("../images/chosen-sprite.png") no-repeat 100% -20px;
150
+ font-size: 1em;
151
+ font-family: sans-serif;
152
+ line-height: normal;
153
+ border-radius: 0;
154
+ }
155
+
156
+ .sp-wpcp-framework .chosen-container-single .chosen-drop {
157
+ margin-top: -1px;
158
+ border-radius: 0 0 4px 4px;
159
+ background-clip: padding-box;
160
+ }
161
+
162
+ .sp-wpcp-framework .chosen-container-single.chosen-container-single-nosearch .chosen-search {
163
+ position: absolute;
164
+ left: -9999px;
165
+ }
166
+
167
+ /* @end */
168
+ /* @group Results */
169
+ .sp-wpcp-framework .chosen-container .chosen-results {
170
+ color: #444;
171
+ position: relative;
172
+ overflow-x: hidden;
173
+ overflow-y: auto;
174
+ margin: 0 4px 4px 0;
175
+ padding: 0 0 0 4px;
176
+ max-height: 240px;
177
+ -webkit-overflow-scrolling: touch;
178
+ }
179
+
180
+ .sp-wpcp-framework .chosen-container .chosen-results li {
181
+ display: none;
182
+ margin: 0;
183
+ padding: 5px 6px;
184
+ list-style: none;
185
+ line-height: 15px;
186
+ word-wrap: break-word;
187
+ -webkit-touch-callout: none;
188
+ }
189
+
190
+ .sp-wpcp-framework .chosen-container .chosen-results li.active-result {
191
+ display: list-item;
192
+ cursor: pointer;
193
+ }
194
+
195
+ .sp-wpcp-framework .chosen-container .chosen-results li.disabled-result {
196
+ display: list-item;
197
+ color: #ccc;
198
+ cursor: default;
199
+ }
200
+
201
+ .sp-wpcp-framework .chosen-container .chosen-results li.highlighted {
202
+ background-color: #3875d7;
203
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
204
+ background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);
205
+ background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);
206
+ background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);
207
+ background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
208
+ color: #fff;
209
+ }
210
+
211
+ .sp-wpcp-framework .chosen-container .chosen-results li.no-results {
212
+ color: #777;
213
+ display: list-item;
214
+ background: #f4f4f4;
215
+ }
216
+
217
+ .sp-wpcp-framework .chosen-container .chosen-results li.group-result {
218
+ display: list-item;
219
+ font-weight: bold;
220
+ cursor: default;
221
+ }
222
+
223
+ .sp-wpcp-framework .chosen-container .chosen-results li.group-option {
224
+ padding-left: 15px;
225
+ }
226
+
227
+ .sp-wpcp-framework .chosen-container .chosen-results li em {
228
+ font-style: normal;
229
+ text-decoration: underline;
230
+ }
231
+
232
+ /* @end */
233
+ /* @group Multi Chosen */
234
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices {
235
+ position: relative;
236
+ overflow: hidden;
237
+ margin: 0;
238
+ padding: 0 5px;
239
+ width: 100%;
240
+ height: auto !important;
241
+ height: 1%;
242
+ border: 1px solid #aaa;
243
+ background-color: #fff;
244
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
245
+ background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
246
+ background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
247
+ background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
248
+ background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);
249
+ cursor: text;
250
+ }
251
+
252
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices li {
253
+ float: left;
254
+ list-style: none;
255
+ }
256
+
257
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices li.search-field {
258
+ margin: 0;
259
+ padding: 0;
260
+ white-space: nowrap;
261
+ }
262
+
263
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices li.search-field input[type="text"] {
264
+ margin: 1px 0;
265
+ padding: 0;
266
+ height: 25px;
267
+ outline: 0;
268
+ border: 0 !important;
269
+ background: transparent !important;
270
+ box-shadow: none;
271
+ color: #999;
272
+ font-size: 100%;
273
+ font-family: sans-serif;
274
+ line-height: normal;
275
+ border-radius: 0;
276
+ }
277
+
278
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices li.search-choice {
279
+ position: relative;
280
+ margin: 3px 5px 3px 0;
281
+ padding: 3px 20px 3px 5px;
282
+ border: 1px solid #aaa;
283
+ max-width: 100%;
284
+ border-radius: 3px;
285
+ background-color: #eeeeee;
286
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
287
+ background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
288
+ background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
289
+ background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
290
+ background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
291
+ background-size: 100% 19px;
292
+ background-repeat: repeat-x;
293
+ background-clip: padding-box;
294
+ box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
295
+ color: #333;
296
+ line-height: 13px;
297
+ cursor: default;
298
+ }
299
+
300
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices li.search-choice span {
301
+ word-wrap: break-word;
302
+ }
303
+
304
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
305
+ position: absolute;
306
+ top: 4px;
307
+ right: 3px;
308
+ display: block;
309
+ width: 12px;
310
+ height: 12px;
311
+ background: url("../images/chosen-sprite.png") -42px 1px no-repeat;
312
+ font-size: 1px;
313
+ }
314
+
315
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
316
+ background-position: -42px -10px;
317
+ }
318
+
319
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices li.search-choice-disabled {
320
+ padding-right: 5px;
321
+ border: 1px solid #ccc;
322
+ background-color: #e4e4e4;
323
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
324
+ background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
325
+ background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
326
+ background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
327
+ background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
328
+ color: #666;
329
+ }
330
+
331
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices li.search-choice-focus {
332
+ background: #d4d4d4;
333
+ }
334
+
335
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
336
+ background-position: -42px -10px;
337
+ }
338
+
339
+ .sp-wpcp-framework .chosen-container-multi .chosen-results {
340
+ margin: 0;
341
+ padding: 0;
342
+ }
343
+
344
+ .sp-wpcp-framework .chosen-container-multi .chosen-drop .result-selected {
345
+ display: list-item;
346
+ color: #ccc;
347
+ cursor: default;
348
+ }
349
+
350
+ /* @end */
351
+ /* @group Active */
352
+ .sp-wpcp-framework .chosen-container-active .chosen-single {
353
+ border: 1px solid #5897fb;
354
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
355
+ }
356
+
357
+ .sp-wpcp-framework .chosen-container-active.chosen-with-drop .chosen-single {
358
+ border: 1px solid #aaa;
359
+ -moz-border-radius-bottomright: 0;
360
+ border-bottom-right-radius: 0;
361
+ -moz-border-radius-bottomleft: 0;
362
+ border-bottom-left-radius: 0;
363
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));
364
+ background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%);
365
+ background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%);
366
+ background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%);
367
+ background-image: linear-gradient(#eeeeee 20%, #ffffff 80%);
368
+ box-shadow: 0 1px 0 #fff inset;
369
+ }
370
+
371
+ .sp-wpcp-framework .chosen-container-active.chosen-with-drop .chosen-single div {
372
+ border-left: none;
373
+ background: transparent;
374
+ }
375
+
376
+ .sp-wpcp-framework .chosen-container-active.chosen-with-drop .chosen-single div b {
377
+ background-position: -18px 2px;
378
+ }
379
+
380
+ .sp-wpcp-framework .chosen-container-active .chosen-choices {
381
+ border: 1px solid #5897fb;
382
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
383
+ }
384
+
385
+ .sp-wpcp-framework .chosen-container-active .chosen-choices li.search-field input[type="text"] {
386
+ color: #222 !important;
387
+ }
388
+
389
+ /* @end */
390
+ /* @group Disabled Support */
391
+ .sp-wpcp-framework .chosen-disabled {
392
+ opacity: 0.5 !important;
393
+ cursor: default;
394
+ }
395
+
396
+ .sp-wpcp-framework .chosen-disabled .chosen-single {
397
+ cursor: default;
398
+ }
399
+
400
+ .sp-wpcp-framework .chosen-disabled .chosen-choices .search-choice .search-choice-close {
401
+ cursor: default;
402
+ }
403
+
404
+ /* @end */
405
+ /* @group Right to Left */
406
+ .sp-wpcp-framework .chosen-rtl {
407
+ text-align: right;
408
+ }
409
+
410
+ .sp-wpcp-framework .chosen-rtl .chosen-single {
411
+ overflow: visible;
412
+ padding: 0 8px 0 0;
413
+ }
414
+
415
+ .sp-wpcp-framework .chosen-rtl .chosen-single span {
416
+ margin-right: 0;
417
+ margin-left: 26px;
418
+ direction: rtl;
419
+ }
420
+
421
+ .sp-wpcp-framework .chosen-rtl .chosen-single-with-deselect span {
422
+ margin-left: 38px;
423
+ }
424
+
425
+ .sp-wpcp-framework .chosen-rtl .chosen-single div {
426
+ right: auto;
427
+ left: 3px;
428
+ }
429
+
430
+ .sp-wpcp-framework .chosen-rtl .chosen-single abbr {
431
+ right: auto;
432
+ left: 26px;
433
+ }
434
+
435
+ .sp-wpcp-framework .chosen-rtl .chosen-choices li {
436
+ float: right;
437
+ }
438
+
439
+ .sp-wpcp-framework .chosen-rtl .chosen-choices li.search-field input[type="text"] {
440
+ direction: rtl;
441
+ }
442
+
443
+ .sp-wpcp-framework .chosen-rtl .chosen-choices li.search-choice {
444
+ margin: 3px 5px 3px 0;
445
+ padding: 3px 5px 3px 19px;
446
+ }
447
+
448
+ .sp-wpcp-framework .chosen-rtl .chosen-choices li.search-choice .search-choice-close {
449
+ right: auto;
450
+ left: 4px;
451
+ }
452
+
453
+ .sp-wpcp-framework .chosen-rtl.chosen-container-single-nosearch .chosen-search,
454
+ .sp-wpcp-framework .chosen-rtl .chosen-drop {
455
+ left: 9999px;
456
+ }
457
+
458
+ .sp-wpcp-framework .chosen-rtl.chosen-container-single .chosen-results {
459
+ margin: 0 0 4px 4px;
460
+ padding: 0 4px 0 0;
461
+ }
462
+
463
+ .sp-wpcp-framework .chosen-rtl .chosen-results li.group-option {
464
+ padding-right: 15px;
465
+ padding-left: 0;
466
+ }
467
+
468
+ .sp-wpcp-framework .chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
469
+ border-right: none;
470
+ }
471
+
472
+ .sp-wpcp-framework .chosen-rtl .chosen-search input[type="text"] {
473
+ padding: 4px 5px 4px 20px;
474
+ background: white url("../images/chosen-sprite.png") no-repeat -30px -20px;
475
+ background: url("../images/chosen-sprite.png") no-repeat -30px -20px;
476
+ direction: rtl;
477
+ }
478
+
479
+ .sp-wpcp-framework .chosen-rtl.chosen-container-single .chosen-single div b {
480
+ background-position: 6px 2px;
481
+ }
482
+
483
+ .sp-wpcp-framework .chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
484
+ background-position: -12px 2px;
485
+ }
486
+
487
+ /* @end */
488
+ /* @group Retina compatibility */
489
+ @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi), only screen and (min-resolution: 1.5dppx) {
490
+ .sp-wpcp-framework .chosen-rtl .chosen-search input[type="text"],
491
+ .sp-wpcp-framework .chosen-container-single .chosen-single abbr,
492
+ .sp-wpcp-framework .chosen-container-single .chosen-single div b,
493
+ .sp-wpcp-framework .chosen-container-single .chosen-search input[type="text"],
494
+ .sp-wpcp-framework .chosen-container-multi .chosen-choices .search-choice .search-choice-close,
495
+ .sp-wpcp-framework .chosen-container .chosen-results-scroll-down span,
496
+ .sp-wpcp-framework .chosen-container .chosen-results-scroll-up span {
497
+ background-image: url("../images/chosen-sprite@2x.png") !important;
498
+ background-size: 52px 37px !important;
499
+ background-repeat: no-repeat !important;
500
+ }
501
+ }
502
+ /* @end */
503
+ .sp-wpcp-framework {
504
+ position: relative;
505
+ margin-top: 20px;
506
+ margin-right: 20px;
507
+ }
508
+ .sp-wpcp-framework label {
509
+ padding: 0;
510
+ margin: 0;
511
+ display: inline-block;
512
+ }
513
+ .sp-wpcp-framework .sp-settings-error {
514
+ margin: 0 0 15px 0;
515
+ }
516
+ .sp-wpcp-framework .sp-header {
517
+ background-color: #2684a6;
518
+ padding: 24px 28px;
519
+ overflow: hidden;
520
+ }
521
+ .sp-wpcp-framework .sp-header fieldset {
522
+ float: right;
523
+ }
524
+ .sp-wpcp-framework .sp-header fieldset input {
525
+ margin: 0 2px;
526
+ line-height: 26px;
527
+ }
528
+ .sp-wpcp-framework .sp-body {
529
+ position: relative;
530
+ background-color: #fff;
531
+ }
532
+ .sp-wpcp-framework .sp-nav {
533
+ display: block;
534
+ position: relative;
535
+ z-index: 10;
536
+ float: left;
537
+ width: 225px;
538
+ }
539
+ .sp-wpcp-framework .sp-nav ul {
540
+ clear: left;
541
+ margin: 0;
542
+ list-style-type: none;
543
+ }
544
+ .sp-wpcp-framework .sp-nav ul li {
545
+ margin-bottom: 0;
546
+ }
547
+ .sp-wpcp-framework .sp-nav ul li a {
548
+ font-size: 13px;
549
+ position: relative;
550
+ display: block;
551
+ padding: 15px;
552
+ text-decoration: none;
553
+ color: #999;
554
+ background-color: #222;
555
+ border-bottom: 1px solid #2f2f2f;
556
+ -moz-transition: all 0.2s ease-out;
557
+ -o-transition: all 0.2s ease-out;
558
+ -webkit-transition: all 0.2s ease-out;
559
+ transition: all 0.2s ease-out;
560
+ }
561
+ .sp-wpcp-framework .sp-nav ul li a:focus {
562
+ outline: none;
563
+ -moz-box-shadow: none;
564
+ -webkit-box-shadow: none;
565
+ box-shadow: none;
566
+ }
567
+ .sp-wpcp-framework .sp-nav ul li .sp-section-active {
568
+ color: #fff;
569
+ background-color: #111;
570
+ }
571
+ .sp-wpcp-framework .sp-nav ul li .sp-section-active:after {
572
+ content: " ";
573
+ position: absolute;
574
+ right: 0;
575
+ top: 50%;
576
+ height: 0;
577
+ width: 0;
578
+ pointer-events: none;
579
+ border: solid transparent;
580
+ border-right-color: #fff;
581
+ border-width: 4px;
582
+ margin-top: -4px;
583
+ }
584
+ .sp-wpcp-framework .sp-nav ul li .sp-arrow:after {
585
+ content: "\f054";
586
+ display: inline-block;
587
+ font-family: "FontAwesome";
588
+ font-size: 9px;
589
+ line-height: 1;
590
+ position: absolute;
591
+ right: 10px;
592
+ top: 50%;
593
+ margin-top: -4px;
594
+ -moz-transform: rotate(0);
595
+ -ms-transform: rotate(0);
596
+ -webkit-transform: rotate(0);
597
+ transform: rotate(0);
598
+ -moz-transition: -moz-transform 0.2s;
599
+ -o-transition: -o-transform 0.2s;
600
+ -webkit-transition: -webkit-transform 0.2s;
601
+ transition: transform 0.2s;
602
+ }
603
+ .sp-wpcp-framework .sp-nav ul li.sp-tab-active .sp-arrow:after {
604
+ -moz-transform: rotate(90deg);
605
+ -ms-transform: rotate(90deg);
606
+ -webkit-transform: rotate(90deg);
607
+ transform: rotate(90deg);
608
+ }
609
+ .sp-wpcp-framework .sp-nav ul ul {
610
+ display: none;
611
+ position: relative;
612
+ border-bottom: 1px solid #2f2f2f;
613
+ position: relative;
614
+ }
615
+ .sp-wpcp-framework .sp-nav ul ul li a {
616
+ font-size: 12px;
617
+ padding: 13px 15px 13px 25px;
618
+ background-color: #191919;
619
+ border-bottom: 1px solid #222;
620
+ }
621
+ .sp-wpcp-framework .sp-nav ul ul li .sp-section-active {
622
+ background-color: #101010;
623
+ }
624
+ .sp-wpcp-framework .sp-nav ul ul li:last-child a {
625
+ border-bottom: 0;
626
+ }
627
+ .sp-wpcp-framework .sp-nav ul ul:before {
628
+ content: '';
629
+ position: absolute;
630
+ top: 0;
631
+ left: 15px;
632
+ z-index: 1;
633
+ width: 1px;
634
+ height: 100%;
635
+ background-color: rgba(34, 34, 34, 0.75);
636
+ }
637
+ .sp-wpcp-framework .sp-nav .sp-icon {
638
+ width: 20px;
639
+ margin-right: 5px;
640
+ font-size: 14px;
641
+ text-align: center;
642
+ }
643
+ .sp-wpcp-framework .sp-nav .sp-separator {
644
+ color: #fff;
645
+ font-weight: 600;
646
+ text-transform: uppercase;
647
+ padding: 30px 15px 15px 15px;
648
+ border-bottom: 1px dashed #2f2f2f;
649
+ }
650
+ .sp-wpcp-framework .sp-nav-background {
651
+ position: absolute;
652
+ top: 0;
653
+ left: 0;
654
+ bottom: 0;
655
+ z-index: 9;
656
+ width: 225px;
657
+ background-color: #222;
658
+ }
659
+ .sp-wpcp-framework .sp-content {
660
+ position: relative;
661
+ margin-left: 225px;
662
+ }
663
+ .sp-wpcp-framework .sp-content .sp-sections {
664
+ float: left;
665
+ width: 100%;
666
+ }
667
+ .sp-wpcp-framework .sp-content .sp-section-title {
668
+ display: none;
669
+ padding: 20px 30px;
670
+ background-color: #5bc0de;
671
+ }
672
+ .sp-wpcp-framework .sp-content .sp-section-title h3 {
673
+ color: #fff;
674
+ margin: 0;
675
+ padding: 0 !important;
676
+ font-weight: bold;
677
+ text-transform: uppercase;
678
+ text-shadow: 1px 1px 0 rgba(68, 167, 197, 0.5);
679
+ }
680
+ .sp-wpcp-framework .sp-content .sp-section {
681
+ display: none;
682
+ }
683
+ .sp-wpcp-framework .sp-footer {
684
+ padding: 20px;
685
+ color: #555;
686
+ text-align: right;
687
+ font-size: 11px;
688
+ background-color: #050505;
689
+ -moz-border-radius: 0 0 2px 2px;
690
+ -webkit-border-radius: 0;
691
+ border-radius: 0 0 2px 2px;
692
+ }
693
+ .sp-wpcp-framework .sp-show-all .sp-nav-background,
694
+ .sp-wpcp-framework .sp-show-all .sp-nav {
695
+ display: none;
696
+ }
697
+ .sp-wpcp-framework .sp-show-all .sp-content {
698
+ margin-left: 0;
699
+ }
700
+ .sp-wpcp-framework .sp-show-all .sp-section-title,
701
+ .sp-wpcp-framework .sp-show-all .sp-section {
702
+ display: block !important;
703
+ }
704
+ .sp-wpcp-framework .sp-expand-all {
705
+ position: absolute;
706
+ right: 40px;
707
+ bottom: 5px;
708
+ z-index: 1;
709
+ color: #555;
710
+ font-size: 11px;
711
+ font-weight: 500;
712
+ text-decoration: none;
713
+ }
714
+ .sp-wpcp-framework .sp-expand-all:hover {
715
+ color: #fff;
716
+ }
717
+ .sp-wpcp-framework .sp-expand-all:focus {
718
+ -moz-box-shadow: none;
719
+ -webkit-box-shadow: none;
720
+ box-shadow: none;
721
+ }
722
+ .sp-wpcp-framework .sp-element:last-child {
723
+ border-bottom: 0 !important;
724
+ }
725
+
726
+ .sp-metabox-framework {
727
+ margin: -6px -12px -12px -12px;
728
+ }
729
+ .sp-metabox-framework .sp-content .sp-section-title {
730
+ padding: 20px;
731
+ }
732
+
733
+ .sp-element {
734
+ position: relative;
735
+ padding: 30px;
736
+ border-bottom: 1px solid #eee;
737
+ }
738
+ .sp-element:hover {
739
+ background-color: #f9f9f9;
740
+ }
741
+ .sp-element p:last-child {
742
+ margin-bottom: 0 !important;
743
+ }
744
+ .sp-element:after, .sp-element:before {
745
+ content: " ";
746
+ display: table;
747
+ }
748
+ .sp-element:after {
749
+ clear: both;
750
+ }
751
+ .sp-element h4 {
752
+ margin-top: 0;
753
+ }
754
+ .sp-element .sp-title {
755
+ position: relative;
756
+ width: 25%;
757
+ float: left;
758
+ }
759
+ .sp-element .sp-title h4 {
760
+ margin: 0;
761
+ color: #23282d;
762
+ }
763
+ .sp-element .sp-fieldset {
764
+ margin-left: 30%;
765
+ }
766
+ .sp-option-framework .sp-element .sp-fieldset {
767
+ margin-left: 25%;
768
+ }
769
+ .sp-element pre {
770
+ clear: both;
771
+ color: #ccc;
772
+ background-color: #222;
773
+ padding: 15px;
774
+ overflow: auto;
775
+ -moz-border-radius: 2px;
776
+ -webkit-border-radius: 2px;
777
+ border-radius: 2px;
778
+ }
779
+ .sp-element pre strong {
780
+ color: #ffbc00;
781
+ }
782
+
783
+ .sp-pseudo-field {
784
+ padding: 0 5px 0 0 !important;
785
+ border: 0;
786
+ display: inline-block;
787
+ }
788
+
789
+ .sp-field-text input {
790
+ width: 340px;
791
+ max-width: 100%;
792
+ }
793
+
794
+ .sp-field-textarea textarea {
795
+ width: 100%;
796
+ max-width: 100%;
797
+ min-height: 125px;
798
+ }
799
+ .sp-field-textarea .sp-shortcode {
800
+ margin-bottom: 10px;
801
+ }
802
+
803
+ .sp-field-wysiwyg textarea {
804
+ width: 100%;
805
+ max-width: 100%;
806
+ min-height: 125px;
807
+ }
808
+ .sp-field-wysiwyg .wp-editor-container {
809
+ clear: none;
810
+ }
811
+
812
+ .sp-field-number input {
813
+ width: 70px;
814
+ }
815
+ .sp-field-number em {
816
+ margin-left: 5px;
817
+ color: #bbb;
818
+ }
819
+
820
+ .sp-field-select select {
821
+ max-width: 100%;
822
+ }
823
+
824
+ .sp-field-typography select,
825
+ .sp-field-typography .chosen-container {
826
+ margin-right: 5px;
827
+ }
828
+ .sp-field-typography .sp-typo-variant {
829
+ min-width: 90px;
830
+ }
831
+
832
+ .sp-field-checkbox ul,
833
+ .sp-field-radio ul {
834
+ margin: 0;
835
+ padding: 0;
836
+ list-style-type: none;
837
+ overflow-y: auto;
838
+ max-height: 305px;
839
+ }
840
+ .sp-field-checkbox .horizontal li,
841
+ .sp-field-radio .horizontal li {
842
+ display: inline-block;
843
+ margin-right: 15px;
844
+ margin-bottom: 15px;
845
+ }
846
+ .sp-field-checkbox input[type="radio"]:checked:before,
847
+ .sp-field-radio input[type="radio"]:checked:before {
848
+ line-height: 10px;
849
+ }
850
+
851
+ .sp-field-switcher label {
852
+ display: block;
853
+ float: left;
854
+ cursor: pointer;
855
+ position: relative;
856
+ width: 62px;
857
+ height: 26px;
858
+ padding: 0;
859
+ margin: 0;
860
+ overflow: hidden;
861
+ -moz-border-radius: 20px;
862
+ -webkit-border-radius: 20px;
863
+ border-radius: 20px;
864
+ }
865
+ .sp-field-switcher label span {
866
+ position: absolute;
867
+ top: 4px;
868
+ left: 4px;
869
+ width: 18px;
870
+ height: 18px;
871
+ background-color: #fff;
872
+ -moz-border-radius: 16px;
873
+ -webkit-border-radius: 16px;
874
+ border-radius: 16px;
875
+ -moz-transition: left 0.15s ease-out;
876
+ -o-transition: left 0.15s ease-out;
877
+ -webkit-transition: left 0.15s ease-out;
878
+ transition: left 0.15s ease-out;
879
+ }
880
+ .sp-field-switcher label input {
881
+ position: absolute;
882
+ top: 0;
883
+ left: 0;
884
+ opacity: 0;
885
+ }
886
+ .sp-field-switcher label input:checked ~ em {
887
+ background: #4fb845;
888
+ }
889
+ .sp-field-switcher label input:checked ~ em:before {
890
+ opacity: 0;
891
+ }
892
+ .sp-field-switcher label input:checked ~ em:after {
893
+ opacity: 1;
894
+ }
895
+ .sp-field-switcher label input:checked ~ span {
896
+ left: 40px;
897
+ }
898
+ .sp-field-switcher label em {
899
+ position: relative;
900
+ display: block;
901
+ height: inherit;
902
+ font-size: 11px;
903
+ line-height: 26px;
904
+ font-weight: 500;
905
+ font-style: normal;
906
+ text-transform: uppercase;
907
+ color: #fff;
908
+ background-color: #ed6f6f;
909
+ -moz-transition: background 0.15s ease-out;
910
+ -o-transition: background 0.15s ease-out;
911
+ -webkit-transition: background 0.15s ease-out;
912
+ transition: background 0.15s ease-out;
913
+ }
914
+ .sp-field-switcher label em:before, .sp-field-switcher label em:after {
915
+ position: absolute;
916
+ -moz-transition: opacity 0.15s ease-out;
917
+ -o-transition: opacity 0.15s ease-out;
918
+ -webkit-transition: opacity 0.15s ease-out;
919
+ transition: opacity 0.15s ease-out;
920
+ }
921
+ .sp-field-switcher label em:before {
922
+ content: attr(data-off);
923
+ right: 14px;
924
+ }
925
+ .sp-field-switcher label em:after {
926
+ content: attr(data-on);
927
+ left: 14px;
928
+ opacity: 0;
929
+ }
930
+ .sp-field-switcher .sp-text-desc {
931
+ float: left;
932
+ margin-left: 5px;
933
+ margin-top: 0;
934
+ padding-top: 4px;
935
+ }
936
+
937
+ .sp-field-image_select label {
938
+ display: inline-block;
939
+ margin: 5px;
940
+ }
941
+ .sp-field-image_select label img {
942
+ max-width: 100%;
943
+ vertical-align: bottom;
944
+ background-color: #fff;
945
+ border: 2px solid #eee;
946
+ opacity: 0.75;
947
+ -moz-transition: all 0.15s ease-out;
948
+ -o-transition: all 0.15s ease-out;
949
+ -webkit-transition: all 0.15s ease-out;
950
+ transition: all 0.15s ease-out;
951
+ }
952
+ .sp-field-image_select label img[alt=readmore_one_view],
953
+ .sp-field-image_select label img[alt=readmore_two_view],
954
+ .sp-field-image_select label img[alt=readmore_three_view],
955
+ .sp-field-image_select label img[alt=readmore_four_view],
956
+ .sp-field-image_select label img[alt=readmore_five_view],
957
+ .sp-field-image_select label img[alt=readmore_six_view]{
958
+ border: 0px solid;
959
+ opacity: 1;
960
+ }
961
+ .sp-field-image_select input {
962
+ display: none;
963
+ }
964
+ .sp-field-image_select input:checked ~ img {
965
+ border-color: #52b3d9;
966
+ opacity: 1;
967
+ }
968
+
969
+ .sp-field-upload input {
970
+ width: 420px;
971
+ max-width: 100%;
972
+ }
973
+
974
+ .sp-field-background .sp-field-color_picker {
975
+ position: relative;
976
+ top: 10px;
977
+ }
978
+
979
+ .sp-field-color_picker .sp-alpha-wrap {
980
+ display: none;
981
+ position: relative;
982
+ top: -1px;
983
+ width: 235px;
984
+ padding: 9px 10px;
985
+ border: 1px solid #dfdfdf;
986
+ border-top: none;
987
+ background-color: #fff;
988
+ }
989
+ .sp-field-color_picker .sp-alpha-slider {
990
+ position: absolute;
991
+ width: 190px;
992
+ margin-left: 2px;
993
+ height: 18px;
994
+ }
995
+ .sp-field-color_picker .sp-alpha-slider .ui-slider-handle {
996
+ position: absolute;
997
+ top: -3px;
998
+ bottom: -3px;
999
+ z-index: 5;
1000
+ border-color: #aaa;
1001
+ border-style: solid;
1002
+ border-width: 4px 3px;
1003
+ width: 10px;
1004
+ height: 16px;
1005
+ margin: 0 -5px;
1006
+ background: none;
1007
+ cursor: ew-resize;
1008
+ opacity: 0.9;
1009
+ -moz-border-radius: 4px;
1010
+ -webkit-border-radius: 4px;
1011
+ border-radius: 4px;
1012
+ -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
1013
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
1014
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
1015
+ }
1016
+ .sp-field-color_picker .sp-alpha-slider .ui-slider-handle:before {
1017
+ content: " ";
1018
+ position: absolute;
1019
+ left: -2px;
1020
+ right: -2px;
1021
+ top: -3px;
1022
+ bottom: -3px;
1023
+ border: 2px solid #fff;
1024
+ -moz-border-radius: 3px;
1025
+ -webkit-border-radius: 3px;
1026
+ border-radius: 3px;
1027
+ }
1028
+ .sp-field-color_picker .sp-alpha-slider-offset {
1029
+ height: 18px;
1030
+ width: 200px;
1031
+ background: url(../images/checkerboard.png) repeat-y center left scroll #fff;
1032
+ -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4) inset;
1033
+ -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4) inset;
1034
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.4) inset;
1035
+ -moz-border-radius: 2px;
1036
+ -webkit-border-radius: 2px;
1037
+ border-radius: 2px;
1038
+ }
1039
+ .sp-field-color_picker .sp-alpha-text {
1040
+ position: absolute;
1041
+ top: 12px;
1042
+ right: 10px;
1043
+ width: 30px;
1044
+ font-size: 12px;
1045
+ line-height: 12px;
1046
+ text-align: center;
1047
+ color: #999;
1048
+ }
1049
+
1050
+ .sp-field-backup textarea {
1051
+ width: 100%;
1052
+ min-height: 200px;
1053
+ margin-bottom: 5px;
1054
+ }
1055
+ .sp-field-backup small {
1056
+ display: inline-block;
1057
+ margin: 5px;
1058
+ }
1059
+ .sp-field-backup hr {
1060
+ margin: 30px 0;
1061
+ }
1062
+
1063
+ .sp-field-fieldset .sp-inner {
1064
+ border: 1px solid #eee;
1065
+ background-color: #fff;
1066
+ }
1067
+ .sp-field-fieldset .sp-element {
1068
+ padding: 20px;
1069
+ }
1070
+
1071
+ .sp-field-group .sp-element {
1072
+ padding: 20px;
1073
+ }
1074
+ .sp-field-group .sp-group {
1075
+ display: none;
1076
+ position: relative;
1077
+ margin-bottom: 5px;
1078
+ }
1079
+ .sp-field-group .sp-group h4 {
1080
+ font-size: 1em;
1081
+ }
1082
+ .sp-field-group .sp-group-content {
1083
+ border: 1px solid #e5e5e5;
1084
+ background: #fff;
1085
+ }
1086
+ .sp-field-group .sp-group-title {
1087
+ border: 1px solid #e5e5e5;
1088
+ background: #fafafa;
1089
+ -moz-transition: border-color 0.15s;
1090
+ -o-transition: border-color 0.15s;
1091
+ -webkit-transition: border-color 0.15s;
1092
+ transition: border-color 0.15s;
1093
+ }
1094
+ .sp-group-title.ui-accordion-header-active,
1095
+ .sp-field-group .sp-group-title:active,
1096
+ .sp-field-group .sp-group-title:hover,
1097
+ .sp-field-group .sp-group-title:focus {
1098
+ outline: none;
1099
+ border: 1px solid #d3d8dc;
1100
+ background: #e8ecef;
1101
+ }
1102
+ .sp-field-group .sp-group-title {
1103
+ display: block;
1104
+ cursor: pointer;
1105
+ position: relative;
1106
+ margin: 0;
1107
+ padding: 15px;
1108
+ min-height: 0;
1109
+ font-size: 100%;
1110
+ }
1111
+ .sp-field-group .sp-group-content {
1112
+ padding: 0;
1113
+ border-top: 0;
1114
+ }
1115
+ .sp-field-group .widget-placeholder {
1116
+ margin-bottom: 8px;
1117
+ }
1118
+ .sp-field-group .ui-accordion .sp-group {
1119
+ display: block;
1120
+ }
1121
+ .sp-field-group .ui-accordion-icons {
1122
+ padding-left: 30px;
1123
+ }
1124
+ .sp-field-group .ui-accordion-header-icon {
1125
+ position: absolute;
1126
+ left: .5em;
1127
+ top: 50%;
1128
+ margin-top: -10px;
1129
+ text-indent: 0;
1130
+ color: #bbb;
1131
+ }
1132
+ .sp-field-group .ui-sortable-helper .sp-group-content {
1133
+ display: none !important;
1134
+ }
1135
+
1136
+ .sp-help {
1137
+ position: absolute;
1138
+ top: 5px;
1139
+ right: 5px;
1140
+ padding: 5px;
1141
+ font-size: 14px;
1142
+ color: #aaa;
1143
+ }
1144
+
1145
+ .sp-field-heading {
1146
+ font-size: 1.5em;
1147
+ font-weight: bold;
1148
+ color: #23282d;
1149
+ background-color: #f5f5f5 !important;
1150
+ }
1151
+
1152
+ .sp-field-subheading {
1153
+ font-size: 14px;
1154
+ font-weight: bold;
1155
+ padding-top: 17px;
1156
+ padding-bottom: 17px;
1157
+ color: #23282d;
1158
+ background-color: #f7f7f7 !important;
1159
+ }
1160
+
1161
+ .sp-field-notice {
1162
+ padding: 0 !important;
1163
+ border: 0 !important;
1164
+ margin-top: -1px;
1165
+ }
1166
+ .sp-field-notice .sp-notice {
1167
+ font-size: 12px;
1168
+ padding: 17px 30px;
1169
+ border-top: 1px solid transparent;
1170
+ border-bottom: 1px solid transparent;
1171
+ }
1172
+ .sp-field-notice .sp-success {
1173
+ color: #3c763d;
1174
+ border-color: #d6e9c6;
1175
+ background-color: #dff0d8;
1176
+ }
1177
+ .sp-field-notice .sp-info {
1178
+ color: #31708f;
1179
+ border-color: #bce8f1;
1180
+ background-color: #d9edf7;
1181
+ }
1182
+ .sp-field-notice .sp-warning {
1183
+ color: #8a6d3b;
1184
+ border-color: #faebcc;
1185
+ background-color: #fcf8e3;
1186
+ }
1187
+ .sp-field-notice .sp-danger {
1188
+ border-color: #ebccd1;
1189
+ background-color: #f2dede;
1190
+ }
1191
+ .sp-field-notice .sp-danger,
1192
+ .sp-danger {
1193
+ color: #a94442;
1194
+ }
1195
+
1196
+ .sp-field-icon input {
1197
+ display: none;
1198
+ }
1199
+ .sp-field-icon .button {
1200
+ margin-right: 5px;
1201
+ }
1202
+ .sp-field-icon .sp-icon-preview i {
1203
+ display: inline-block;
1204
+ font-size: 14px;
1205
+ width: 30px;
1206
+ height: 26px;
1207
+ line-height: 26px;
1208
+ margin-right: 5px;
1209
+ text-align: center;
1210
+ vertical-align: top;
1211
+ color: #555;
1212
+ border: 1px solid #ccc;
1213
+ background-color: #f7f7f7;
1214
+ -moz-border-radius: 3px;
1215
+ -webkit-border-radius: 3px;
1216
+ border-radius: 3px;
1217
+ -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1218
+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1219
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1220
+ }
1221
+
1222
+ .sp-field-image input {
1223
+ display: none;
1224
+ }
1225
+ .sp-field-image .sp-preview {
1226
+ display: inline-block;
1227
+ position: relative;
1228
+ padding: 4px;
1229
+ min-width: 44px;
1230
+ min-height: 22px;
1231
+ margin-bottom: 10px;
1232
+ border: 1px solid #ccc;
1233
+ background-color: #f9f9f9;
1234
+ -moz-border-radius: 2px;
1235
+ -webkit-border-radius: 2px;
1236
+ border-radius: 2px;
1237
+ -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1238
+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1239
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1240
+ }
1241
+ .sp-field-image .sp-preview img {
1242
+ max-height: 90px;
1243
+ display: inline-block;
1244
+ vertical-align: middle;
1245
+ }
1246
+ .sp-field-image .sp-remove {
1247
+ position: absolute;
1248
+ top: 4px;
1249
+ right: 4px;
1250
+ width: 22px;
1251
+ height: 22px;
1252
+ font-size: 11px;
1253
+ line-height: 22px;
1254
+ text-align: center;
1255
+ cursor: pointer;
1256
+ color: #fff;
1257
+ background-color: #e14d43;
1258
+ opacity: 0.8;
1259
+ -moz-border-radius: 2px;
1260
+ -webkit-border-radius: 2px;
1261
+ border-radius: 2px;
1262
+ -moz-transition: opacity 0.2s;
1263
+ -o-transition: opacity 0.2s;
1264
+ -webkit-transition: opacity 0.2s;
1265
+ transition: opacity 0.2s;
1266
+ }
1267
+ .sp-field-image .sp-remove:hover {
1268
+ opacity: 1;
1269
+ }
1270
+
1271
+ .sp-field-gallery input {
1272
+ display: none;
1273
+ }
1274
+ .sp-field-gallery ul {
1275
+ margin: 0;
1276
+ padding: 0;
1277
+ list-style-type: none;
1278
+ }
1279
+ .sp-field-gallery ul.sp-gallery-images li {
1280
+ display: inline-block;
1281
+ position: relative;
1282
+ padding: 4px;
1283
+ margin: 0 5px 10px 0;
1284
+ border: 1px solid #ccc;
1285
+ background-color: #f9f9f9;
1286
+ -moz-border-radius: 2px;
1287
+ -webkit-border-radius: 2px;
1288
+ border-radius: 2px;
1289
+ -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1290
+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1291
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1292
+ }
1293
+ .sp-field-gallery ul.sp-gallery-images li img {
1294
+ max-height: 100px;
1295
+ display: inline-block;
1296
+ vertical-align: middle;
1297
+ }
1298
+ .sp-field-gallery .button {
1299
+ margin-right: 5px;
1300
+ margin-bottom: 5px;
1301
+ }
1302
+
1303
+ .sp-field-sorter .ui-sortable-placeholder {
1304
+ height: 20px;
1305
+ border: 1px dashed #f1c40f;
1306
+ background-color: #fffae4;
1307
+ }
1308
+ .sp-field-sorter .sp-modules {
1309
+ float: left;
1310
+ width: 50%;
1311
+ }
1312
+ .sp-field-sorter .sp-enabled {
1313
+ margin-right: 15px;
1314
+ }
1315
+ .sp-field-sorter .sp-disabled,
1316
+ .sp-field-sorter .sp-enabled {
1317
+ padding: 5px 15px;
1318
+ border: 1px dashed #ddd;
1319
+ background-color: #fff;
1320
+ }
1321
+ .sp-field-sorter .sp-disabled li {
1322
+ -moz-transition: opacity 0.15s;
1323
+ -o-transition: opacity 0.15s;
1324
+ -webkit-transition: opacity 0.15s;
1325
+ transition: opacity 0.15s;
1326
+ opacity: 0.5;
1327
+ }
1328
+ .sp-field-sorter .sp-disabled .ui-sortable-helper {
1329
+ opacity: 1;
1330
+ }
1331
+ .sp-field-sorter h3 {
1332
+ font-size: 14px;
1333
+ margin: 0 0 15px 0;
1334
+ }
1335
+ .sp-field-sorter ul {
1336
+ list-style-type: none;
1337
+ margin: 0;
1338
+ padding: 0;
1339
+ min-height: 62px;
1340
+ }
1341
+ .sp-field-sorter ul li {
1342
+ margin: 10px 0;
1343
+ padding: 10px 15px;
1344
+ cursor: move;
1345
+ font-weight: bold;
1346
+ text-align: center;
1347
+ border: 1px solid #e5e5e5;
1348
+ background-color: #fafafa;
1349
+ -moz-transition: border-color 0.15s;
1350
+ -o-transition: border-color 0.15s;
1351
+ -webkit-transition: border-color 0.15s;
1352
+ transition: border-color 0.15s;
1353
+ }
1354
+ .sp-field-sorter ul li:hover {
1355
+ border-color: #bbb;
1356
+ }
1357
+
1358
+ .sp-taxonomy {
1359
+ margin: 0;
1360
+ }
1361
+ .sp-taxonomy > .sp-element {
1362
+ border-bottom: 0;
1363
+ }
1364
+ .sp-taxonomy > .sp-element:hover {
1365
+ background: none;
1366
+ }
1367
+ .sp-taxonomy > .sp-field-heading {
1368
+ font-size: 1.1em;
1369
+ padding: 20px !important;
1370
+ border: 1px solid #ddd;
1371
+ }
1372
+ .sp-taxonomy > .sp-field-subheading {
1373
+ font-size: 12px;
1374
+ padding: 15px !important;
1375
+ border: 1px solid #ddd;
1376
+ }
1377
+ .sp-taxonomy > .sp-field-notice .sp-notice {
1378
+ padding: 15px;
1379
+ border-left-width: 1px;
1380
+ border-left-style: solid;
1381
+ border-right-width: 1px;
1382
+ border-right-style: solid;
1383
+ }
1384
+
1385
+ .sp-taxonomy-add-fields > .sp-element {
1386
+ padding: 8px 0;
1387
+ margin: 0 0 10px;
1388
+ }
1389
+ .sp-taxonomy-add-fields > .sp-element > .sp-title {
1390
+ float: none;
1391
+ width: 100%;
1392
+ padding: 2px 2px 4px 0;
1393
+ }
1394
+ .sp-taxonomy-add-fields > .sp-element > .sp-title h4 {
1395
+ font-size: 12px;
1396
+ font-weight: normal;
1397
+ }
1398
+ .sp-taxonomy-add-fields > .sp-element > .sp-fieldset {
1399
+ margin-left: 0;
1400
+ }
1401
+ .sp-taxonomy-add-fields > .sp-element > .sp-fieldset > .sp-help {
1402
+ right: -5px;
1403
+ }
1404
+
1405
+ .sp-taxonomy-edit-fields > .sp-element {
1406
+ padding: 20px 0;
1407
+ border-bottom: 0;
1408
+ }
1409
+ .sp-taxonomy-edit-fields > .sp-element > .sp-title {
1410
+ width: 225px;
1411
+ }
1412
+ .sp-taxonomy-edit-fields > .sp-element > .sp-title h4 {
1413
+ font-size: 14px;
1414
+ font-weight: 600;
1415
+ line-height: 1.3;
1416
+ display: inline-block;
1417
+ vertical-align: middle;
1418
+ }
1419
+ .sp-taxonomy-edit-fields > .sp-element > .sp-fieldset {
1420
+ margin-left: 225px;
1421
+ }
1422
+ .sp-taxonomy-edit-fields > .sp-element > .sp-fieldset > .sp-help {
1423
+ top: -5px;
1424
+ right: -5px;
1425
+ }
1426
+ .sp-taxonomy-edit-fields > .sp-field-notice {
1427
+ margin: 20px 0;
1428
+ }
1429
+ .sp-taxonomy-edit-fields > .sp-field-subheading,
1430
+ .sp-taxonomy-edit-fields > .sp-field-heading {
1431
+ margin: 20px 0;
1432
+ border: 1px solid #ddd;
1433
+ }
1434
+
1435
+ .sp-warning-primary {
1436
+ color: #fff;
1437
+ border-color: #d02c21 #ba281e #ba281e;
1438
+ background: #e14d43;
1439
+ -moz-box-shadow: 0 1px 0 #ba281e;
1440
+ -webkit-box-shadow: 0 1px 0 #ba281e;
1441
+ box-shadow: 0 1px 0 #ba281e;
1442
+ text-shadow: 0 -1px 1px #ba281e, 1px 0 1px #ba281e, 0 1px 1px #ba281e, -1px 0 1px;
1443
+ text-shadow: 0 -1px 1px #ba281e, 1px 0 1px #ba281e, 0 1px 1px #ba281e, -1px 0 1px #ba281e;
1444
+ }
1445
+ .sp-warning-primary:hover, .sp-warning-primary:focus {
1446
+ border-color: #ba281e;
1447
+ background: #e35950;
1448
+ -moz-box-shadow: 0 1px 0 #ba281e;
1449
+ -webkit-box-shadow: 0 1px 0 #ba281e;
1450
+ box-shadow: 0 1px 0 #ba281e;
1451
+ }
1452
+ .sp-warning-primary:active {
1453
+ border-color: #ba281e;
1454
+ background: #d02c21;
1455
+ -moz-box-shadow: inset 0 2px 0 #ba281e;
1456
+ -webkit-box-shadow: inset 0 2px 0 #ba281e;
1457
+ box-shadow: inset 0 2px 0 #ba281e;
1458
+ }
1459
+
1460
+ .sp-text-desc {
1461
+ font-style: italic;
1462
+ font-weight: 400;
1463
+ margin-top: 10px;
1464
+ color: #999;
1465
+ }
1466
+
1467
+ .sp-text-success {
1468
+ color: #2b542c;
1469
+ }
1470
+
1471
+ .sp-text-info {
1472
+ color: #31708f;
1473
+ }
1474
+
1475
+ .sp-text-warning {
1476
+ color: #d02c21;
1477
+ }
1478
+
1479
+ .sp-text-muted {
1480
+ color: #aaa;
1481
+ }
1482
+
1483
+ .sp-text-left {
1484
+ text-align: left;
1485
+ }
1486
+
1487
+ .sp-text-center {
1488
+ text-align: center;
1489
+ }
1490
+
1491
+ .sp-text-right {
1492
+ text-align: right;
1493
+ }
1494
+
1495
+ .sp-block-left {
1496
+ float: left;
1497
+ }
1498
+
1499
+ .sp-block-right {
1500
+ float: right;
1501
+ }
1502
+
1503
+ .sp-text-highlight {
1504
+ padding: 2px 4px;
1505
+ font-size: 90%;
1506
+ color: #c7254e;
1507
+ background-color: #f9f2f4;
1508
+ -moz-border-radius: 2px;
1509
+ -webkit-border-radius: 2px;
1510
+ border-radius: 2px;
1511
+ }
1512
+
1513
+ .sp-text-highlight-gray {
1514
+ padding: 2px 4px;
1515
+ font-size: 90%;
1516
+ background-color: #f0f0f0;
1517
+ -moz-border-radius: 2px;
1518
+ -webkit-border-radius: 2px;
1519
+ border-radius: 2px;
1520
+ }
1521
+
1522
+ #sp-save-ajax {
1523
+ display: none;
1524
+ position: relative;
1525
+ top: 4px;
1526
+ right: 5px;
1527
+ font-size: 12px;
1528
+ padding: 3px 8px;
1529
+ color: #fff;
1530
+ background-color: #27ae60;
1531
+ -moz-border-radius: 2px;
1532
+ -webkit-border-radius: 2px;
1533
+ border-radius: 2px;
1534
+ }
1535
+
1536
+ .sp-tooltip {
1537
+ position: absolute;
1538
+ z-index: 100103;
1539
+ display: block;
1540
+ visibility: visible;
1541
+ font-size: 12px;
1542
+ line-height: 1.4;
1543
+ opacity: 0;
1544
+ -moz-transition: opacity 0.15s linear;
1545
+ -o-transition: opacity 0.15s linear;
1546
+ -webkit-transition: opacity 0.15s linear;
1547
+ transition: opacity 0.15s linear;
1548
+ }
1549
+ .sp-tooltip.in {
1550
+ opacity: 1;
1551
+ }
1552
+
1553
+ .sp-tooltip-inner {
1554
+ max-width: 200px;
1555
+ padding: 6px 12px;
1556
+ color: #fff;
1557
+ text-align: center;
1558
+ text-decoration: none;
1559
+ background-color: #000;
1560
+ background-color: rgba(0, 0, 0, 0.85);
1561
+ -moz-border-radius: 4px;
1562
+ -webkit-border-radius: 4px;
1563
+ border-radius: 4px;
1564
+ }
1565
+
1566
+ .sp-dialog {
1567
+ display: none;
1568
+ padding: 0;
1569
+ }
1570
+ .sp-dialog .sp-dialog-header {
1571
+ width: 100%;
1572
+ padding: 16px 0;
1573
+ background-color: #f5f5f5;
1574
+ border-bottom: 1px solid #eee;
1575
+ }
1576
+ .sp-dialog .sp-dialog-header select,
1577
+ .sp-dialog .sp-dialog-header .chosen-container {
1578
+ display: block;
1579
+ margin: 0 auto;
1580
+ width: 250px !important;
1581
+ }
1582
+ .sp-dialog .sp-element {
1583
+ padding: 15px 30px 15px 15px;
1584
+ }
1585
+ .sp-dialog .sp-insert-button {
1586
+ text-align: center;
1587
+ width: 100%;
1588
+ padding: 16px 0;
1589
+ background-color: #f5f5f5;
1590
+ border-top: 1px solid #eee;
1591
+ }
1592
+ .sp-dialog .sp-dialog-load {
1593
+ min-height: 250px;
1594
+ overflow: hidden;
1595
+ overflow-y: auto;
1596
+ }
1597
+ .sp-dialog .sp-clone-button {
1598
+ margin: 10px 0;
1599
+ text-align: center;
1600
+ }
1601
+ .sp-dialog .sp-shortcode-clone {
1602
+ position: relative;
1603
+ border-top: 1px dashed #5cb85c;
1604
+ }
1605
+ .sp-dialog .sp-shortcode-clone .sp-remove-clone {
1606
+ display: none;
1607
+ position: absolute;
1608
+ right: 5px;
1609
+ top: 5px;
1610
+ z-index: 1;
1611
+ padding: 5px;
1612
+ color: #ed6f6f;
1613
+ font-size: 14px;
1614
+ }
1615
+ .sp-dialog .sp-shortcode-clone .sp-remove-clone:hover {
1616
+ text-decoration: none;
1617
+ color: #e74242;
1618
+ }
1619
+ .sp-dialog a:active, .sp-dialog a:focus {
1620
+ outline: none;
1621
+ -moz-box-shadow: none;
1622
+ -webkit-box-shadow: none;
1623
+ box-shadow: none;
1624
+ }
1625
+ .sp-dialog h4 {
1626
+ font-size: 13px;
1627
+ }
1628
+ .sp-dialog h4 small {
1629
+ font-style: italic;
1630
+ font-weight: 400;
1631
+ color: #aaa;
1632
+ }
1633
+
1634
+ #sp-icon-dialog .sp-icon-search {
1635
+ width: 250px;
1636
+ height: 40px;
1637
+ line-height: 40px;
1638
+ }
1639
+ #sp-icon-dialog a {
1640
+ display: inline-block;
1641
+ padding: 5px;
1642
+ cursor: pointer;
1643
+ }
1644
+ #sp-icon-dialog a .sp-icon {
1645
+ position: relative;
1646
+ padding: 5px;
1647
+ display: inline-block;
1648
+ font-size: 14px;
1649
+ width: 30px;
1650
+ height: 26px;
1651
+ line-height: 26px;
1652
+ text-align: center;
1653
+ vertical-align: top;
1654
+ color: #555;
1655
+ border: 1px solid #ccc;
1656
+ background-color: #f7f7f7;
1657
+ -moz-border-radius: 3px;
1658
+ -webkit-border-radius: 3px;
1659
+ border-radius: 3px;
1660
+ -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1661
+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1662
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
1663
+ }
1664
+ #sp-icon-dialog a:hover .sp-icon {
1665
+ color: #fff;
1666
+ border-color: #222;
1667
+ background-color: #222;
1668
+ }
1669
+ #sp-icon-dialog .sp-icon-loading {
1670
+ color: #999;
1671
+ text-align: center;
1672
+ margin-top: 10px;
1673
+ }
1674
+ #sp-icon-dialog .sp-icon-title {
1675
+ padding: 15px;
1676
+ margin: 10px 0;
1677
+ text-align: center;
1678
+ text-transform: uppercase;
1679
+ border-top: 1px solid #eee;
1680
+ border-bottom: 1px solid #eee;
1681
+ background-color: #fafafa;
1682
+ }
1683
+ #sp-icon-dialog .sp-icon-title:first-child {
1684
+ margin-top: 0;
1685
+ border-top: 0;
1686
+ }
1687
+
1688
+ .sp-shortcode-scrolling,
1689
+ .sp-icon-scrolling {
1690
+ overflow: hidden;
1691
+ height: 100%;
1692
+ }
1693
+ .sp-shortcode-scrolling .wp-full-overlay,
1694
+ .sp-icon-scrolling .wp-full-overlay {
1695
+ z-index: 1;
1696
+ }
1697
+
1698
+ #side-sortables .sp-content .sp-section-title {
1699
+ padding: 12px;
1700
+ }
1701
+ #side-sortables .sp-element {
1702
+ padding: 12px;
1703
+ }
1704
+ #side-sortables .sp-element .sp-title {
1705
+ float: none;
1706
+ width: 100%;
1707
+ margin-bottom: 10px;
1708
+ }
1709
+ #side-sortables .sp-element .sp-fieldset {
1710
+ margin-left: 0;
1711
+ }
1712
+ #side-sortables .sp-field-upload input {
1713
+ width: 185px;
1714
+ }
1715
+ #side-sortables .sp-field-notice .sp-notice {
1716
+ padding: 12px;
1717
+ }
1718
+
1719
+ .widget-content .sp-element {
1720
+ position: relative;
1721
+ top: -1px;
1722
+ margin-right: -15px;
1723
+ margin-left: -15px;
1724
+ padding: 12px 15px;
1725
+ }
1726
+ .widget-content .sp-element:last-child {
1727
+ margin-bottom: 15px;
1728
+ }
1729
+ .widget-content .sp-element .sp-title {
1730
+ float: none;
1731
+ width: 100%;
1732
+ margin-bottom: 5px;
1733
+ }
1734
+ .widget-content .sp-element .sp-fieldset {
1735
+ margin-left: 0;
1736
+ }
1737
+ .widget-content .sp-field-text input {
1738
+ width: 100%;
1739
+ }
1740
+ .widget-content .sp-field-upload input {
1741
+ width: 330px;
1742
+ }
1743
+ .widget-content .sp-field-notice .sp-notice {
1744
+ padding: 15px;
1745
+ }
1746
+
1747
+ #customize-controls .customize-control-sp_field {
1748
+ position: relative;
1749
+ top: -10px;
1750
+ margin-bottom: 0;
1751
+ }
1752
+ #customize-controls .customize-control-sp_field:last-child {
1753
+ margin-bottom: -25px;
1754
+ }
1755
+ #customize-controls .customize-control-sp_field:last-child .sp-element {
1756
+ border-bottom: none;
1757
+ }
1758
+ #customize-controls .customize-control-sp_field .chosen-container.chosen-with-drop .chosen-drop {
1759
+ position: relative;
1760
+ }
1761
+ #customize-controls .sp-element {
1762
+ margin-right: -20px;
1763
+ margin-left: -20px;
1764
+ padding: 12px 15px;
1765
+ }
1766
+ #customize-controls .sp-element .sp-title {
1767
+ float: none;
1768
+ width: 100%;
1769
+ margin-bottom: 10px;
1770
+ }
1771
+ #customize-controls .sp-element .sp-title h4 {
1772
+ font-size: 14px;
1773
+ font-weight: 600;
1774
+ color: inherit;
1775
+ }
1776
+ #customize-controls .sp-element .sp-fieldset {
1777
+ margin-left: 0;
1778
+ }
1779
+ #customize-controls .widget-content .sp-element {
1780
+ margin-right: -10px;
1781
+ margin-left: -10px;
1782
+ padding: 10px 12px;
1783
+ }
1784
+ #customize-controls .sp-field-select select {
1785
+ width: 100%;
1786
+ }
1787
+ #customize-controls .sp-field-upload input {
1788
+ width: 175px;
1789
+ margin-right: 5px;
1790
+ }
1791
+ #customize-controls .sp-field-heading {
1792
+ color: inherit;
1793
+ font-size: 14px;
1794
+ line-height: 1em;
1795
+ }
1796
+ #customize-controls .sp-field-subheading {
1797
+ color: inherit;
1798
+ font-size: 11px;
1799
+ }
1800
+ #customize-controls .sp-text-desc {
1801
+ margin-top: 4px;
1802
+ font-size: 12px;
1803
+ }
1804
+ #customize-controls .sp-field-content,
1805
+ #customize-controls .sp-field-notice .sp-notice {
1806
+ padding: 15px;
1807
+ }
1808
+
1809
+ @media only screen and (max-width: 1200px) {
1810
+ .sp-metabox-framework .sp-element .sp-title {
1811
+ float: none;
1812
+ width: 100%;
1813
+ margin-bottom: 10px;
1814
+ }
1815
+ .sp-metabox-framework .sp-element .sp-fieldset {
1816
+ margin-left: 0;
1817
+ }
1818
+ }
1819
+ @media only screen and (max-width: 782px) {
1820
+ .sp-wpcp-framework .sp-header {
1821
+ text-align: center;
1822
+ }
1823
+ .sp-wpcp-framework .sp-header h1 {
1824
+ width: 100%;
1825
+ margin-bottom: 10px;
1826
+ }
1827
+ .sp-wpcp-framework .sp-header fieldset {
1828
+ float: none;
1829
+ }
1830
+ .sp-wpcp-framework .sp-expand-all,
1831
+ .sp-wpcp-framework .sp-nav-background,
1832
+ .sp-wpcp-framework .sp-nav {
1833
+ display: none;
1834
+ }
1835
+ .sp-wpcp-framework .sp-content {
1836
+ margin-left: 0;
1837
+ }
1838
+ .sp-wpcp-framework .sp-section-title,
1839
+ .sp-wpcp-framework .sp-section {
1840
+ display: block !important;
1841
+ }
1842
+ .sp-wpcp-framework .sp-element .sp-title {
1843
+ float: none;
1844
+ width: 100%;
1845
+ margin-bottom: 10px;
1846
+ }
1847
+ .sp-wpcp-framework .sp-element .sp-fieldset {
1848
+ margin-left: 0;
1849
+ }
1850
+ }
admin/views/meta-box/assets/css/sp-style.css ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .sp-element .chosen-container-single .chosen-single,
2
+ .sp-element .chosen-container-active.chosen-with-drop .chosen-single{
3
+ background-image: none;
4
+ -webkit-box-shadow: none;
5
+ box-shadow: none;
6
+ background: #fff;
7
+ border-color: #d1d1d1;
8
+ border-radius: 1px;
9
+ height: 36px;
10
+ line-height: 34px;
11
+ padding-left: 12px;
12
+ }
13
+ .sp-element .chosen-container-single .chosen-single div{
14
+ top: 7px;
15
+ }
16
+ .sp-element .chosen-container .chosen-results {
17
+ padding: 0;
18
+ margin: 0;
19
+ border-top: 1px solid #d1d1d1;
20
+ }
21
+ .sp-element .chosen-container .chosen-results li {
22
+ padding: 10px 14px;
23
+ }
24
+ .sp-element li.highlighted,
25
+ .sp-element .chosen-container .chosen-results li.highlighted{
26
+ background-color: #52b3d9;
27
+ background-image: none;
28
+ }
29
+ .sp-element .chosen-container .chosen-drop{
30
+ border-color: #d1d1d1;
31
+ }
32
+ .sp-element.sp-field-number input{
33
+ background: #fff;
34
+ border-color: #d1d1d1;
35
+ height: 36px;
36
+ line-height: 34px;
37
+ padding-left: 12px;
38
+ }
39
+ .sp-element .chosen-container-multi .chosen-drop .result-selected{
40
+ display: none;
41
+ }
42
+ .sp-element .chosen-container-multi .chosen-choices{
43
+ background: #fff;
44
+ border-color: #d1d1d1;
45
+ border-radius: 1px;
46
+ line-height: 34px;
47
+ box-shadow: 0 0 0;
48
+ }
49
+ .sp-element .chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
50
+ top: 9px;
51
+ transition: inherit;
52
+ }
53
+ .sp-element .chosen-container-multi .chosen-choices li.search-choice {
54
+ margin: 5px 0 0 5px;
55
+ border: 0;
56
+ background: #e5e5e5;
57
+ padding: 8px 22px 8px 8px;
58
+ -webkit-box-shadow: none;
59
+ box-shadow: none;
60
+ }
61
+ .sp-element input[type="text"] {
62
+ padding: 8px 12px!important;
63
+ min-height: 36px;
64
+ }
65
+ .sp-field-upload .sp-add {
66
+ height: 35px;
67
+ line-height: 2.5;
68
+ }
69
+ .sp-element .wp-picker-container input[type=text].wp-color-picker{
70
+ width: 76px;
71
+ padding: 7px 8px!important;
72
+ min-height: 32px;
73
+ }
74
+ .sp-element .chosen-container-multi .chosen-choices{
75
+ padding: 0;
76
+ }
77
+
78
+ .sp-wpcp-select-wrapper{
79
+ position: relative;
80
+ }
81
+
82
+ .sp-wpcp-select-wrapper:after{
83
+ content: " ";
84
+ position: absolute;
85
+ right: 21px;
86
+ bottom: 19px;
87
+ z-index: 2;
88
+ pointer-events: none;
89
+ width: 0;
90
+ height: 0;
91
+ border-style: solid;
92
+ border-width: 5.9px 3px 0 3px;
93
+ border-color: #828282 transparent transparent transparent;
94
+ pointer-events: none;
95
+ }
96
+
97
+ .sp-field-background_adv .sp-field-select_typo select,
98
+ .sp-element select.sp-wpcp-select-css{
99
+ max-width: 100%;
100
+ -webkit-appearance: none;
101
+ -moz-appearance: none;
102
+ appearance: none;
103
+ padding: 0 30px 0 12px;
104
+ border: 1px solid #d1d1d1;
105
+ border-radius: 1px;
106
+ line-height: 34px;
107
+ height: 36px;
108
+ background: #fff;
109
+ margin: 0 5px 4px 0;
110
+ background-image: none;
111
+ -webkit-box-shadow: none;
112
+ box-shadow: none;
113
+ }
admin/views/meta-box/assets/images/chosen-sprite.png ADDED
Binary file
admin/views/meta-box/assets/js/dependency.js ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! Copyright 2012, Ben Lin (http://dreamerslab.com/)
2
+ * Licensed under the MIT License (LICENSE.txt).
3
+ *
4
+ * Version: 1.0.16
5
+ *
6
+ * Requires: jQuery >= 1.2.3
7
+ */
8
+ ( function ( $ ){
9
+ $.fn.addBack = $.fn.addBack || $.fn.andSelf;
10
+
11
+ $.fn.extend({
12
+
13
+ actual : function ( method, options ){
14
+ // check if the jQuery method exist
15
+ if( !this[ method ]){
16
+ throw '$.actual => The jQuery method "' + method + '" you called does not exist';
17
+ }
18
+
19
+ var defaults = {
20
+ absolute : false,
21
+ clone : false,
22
+ includeMargin : false
23
+ };
24
+
25
+ var configs = $.extend( defaults, options );
26
+
27
+ var $target = this.eq( 0 );
28
+ var fix, restore;
29
+
30
+ if( configs.clone === true ){
31
+ fix = function (){
32
+ var style = 'position: absolute !important; top: -1000 !important; ';
33
+
34
+ // this is useful with css3pie
35
+ $target = $target.
36
+ clone().
37
+ attr( 'style', style ).
38
+ appendTo( 'body' );
39
+ };
40
+
41
+ restore = function (){
42
+ // remove DOM element after getting the width
43
+ $target.remove();
44
+ };
45
+ }else{
46
+ var tmp = [];
47
+ var style = '';
48
+ var $hidden;
49
+
50
+ fix = function (){
51
+ // get all hidden parents
52
+ $hidden = $target.parents().addBack().filter( ':hidden' );
53
+ style += 'visibility: hidden !important; display: block !important; ';
54
+
55
+ if( configs.absolute === true ) style += 'position: absolute !important; ';
56
+
57
+ // save the origin style props
58
+ // set the hidden el css to be got the actual value later
59
+ $hidden.each( function (){
60
+ // Save original style. If no style was set, attr() returns undefined
61
+ var $this = $( this );
62
+ var thisStyle = $this.attr( 'style' );
63
+
64
+ tmp.push( thisStyle );
65
+ // Retain as much of the original style as possible, if there is one
66
+ $this.attr( 'style', thisStyle ? thisStyle + ';' + style : style );
67
+ });
68
+ };
69
+
70
+ restore = function (){
71
+ // restore origin style values
72
+ $hidden.each( function ( i ){
73
+ var $this = $( this );
74
+ var _tmp = tmp[ i ];
75
+
76
+ if( _tmp === undefined ){
77
+ $this.removeAttr( 'style' );
78
+ }else{
79
+ $this.attr( 'style', _tmp );
80
+ }
81
+ });
82
+ };
83
+ }
84
+
85
+ fix();
86
+ // get the actual value with user specific methed
87
+ // it can be 'width', 'height', 'outerWidth', 'innerWidth'... etc
88
+ // configs.includeMargin only works for 'outerWidth' and 'outerHeight'
89
+ var actual = /(outer)/.test( method ) ?
90
+ $target[ method ]( configs.includeMargin ) :
91
+ $target[ method ]();
92
+
93
+ restore();
94
+ // IMPORTANT, this plugin only return the value of the first element
95
+ return actual;
96
+ }
97
+ });
98
+ })( jQuery );
admin/views/meta-box/assets/js/sp-framework.js ADDED
@@ -0,0 +1,645 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ *
3
+ * -----------------------------------------------------------
4
+ *
5
+ * ShapedPlugin Framework
6
+ * A Lightweight and easy-to-use WordPress Options Framework
7
+ *
8
+ * Copyright 2017 www.shapedplugin.com
9
+ *
10
+ * -----------------------------------------------------------
11
+ *
12
+ */
13
+ ;
14
+ (function ($, window, document, undefined) {
15
+ 'use strict';
16
+
17
+ $.SPFRAMEWORK = $.SPFRAMEWORK || {};
18
+
19
+ // caching selector
20
+ var $sp_body = $('body');
21
+
22
+ // caching variables
23
+ var sp_is_rtl = $sp_body.hasClass('rtl');
24
+
25
+ // ======================================================
26
+ // SPFRAMEWORK TAB NAVIGATION
27
+ // ------------------------------------------------------
28
+ $.fn.SPFRAMEWORK_TAB_NAVIGATION = function () {
29
+ return this.each(function () {
30
+
31
+ var $this = $(this),
32
+ $nav = $this.find('.sp-nav'),
33
+ $reset = $this.find('.sp-reset'),
34
+ $expand = $this.find('.sp-expand-all');
35
+
36
+ $nav.find('ul:first a').on('click', function (e) {
37
+
38
+ e.preventDefault();
39
+
40
+ var $el = $(this),
41
+ $next = $el.next(),
42
+ $target = $el.data('section');
43
+
44
+ if ($next.is('ul')) {
45
+
46
+ $next.slideToggle('fast');
47
+ $el.closest('li').toggleClass('sp-tab-active');
48
+
49
+ } else {
50
+
51
+ $('#sp-tab-' + $target).fadeIn('fast').siblings().hide();
52
+ $nav.find('a').removeClass('sp-section-active');
53
+ $el.addClass('sp-section-active');
54
+ $reset.val($target);
55
+
56
+ }
57
+
58
+ });
59
+
60
+ $expand.on('click', function (e) {
61
+ e.preventDefault();
62
+ $this.find('.sp-body').toggleClass('sp-show-all');
63
+ $(this).find('.fa').toggleClass('fa-eye-slash').toggleClass('fa-eye');
64
+ });
65
+
66
+ });
67
+ };
68
+ // ======================================================
69
+
70
+ // ======================================================
71
+ // SPFRAMEWORK DEPENDENCY
72
+ // ------------------------------------------------------
73
+ $.SPFRAMEWORK.DEPENDENCY = function (el, param) {
74
+
75
+ // Access to jQuery and DOM versions of element
76
+ var base = this;
77
+ base.$el = $(el);
78
+ base.el = el;
79
+
80
+ base.init = function () {
81
+
82
+ base.ruleset = $.deps.createRuleset();
83
+
84
+ // required for shortcode attrs
85
+ var cfg = {
86
+ show: function (el) {
87
+ el.removeClass('hidden');
88
+ },
89
+ hide: function (el) {
90
+ el.addClass('hidden');
91
+ },
92
+ log: false,
93
+ checkTargets: false
94
+ };
95
+
96
+ if (param !== undefined) {
97
+ base.depSub();
98
+ } else {
99
+ base.depRoot();
100
+ }
101
+
102
+ $.deps.enable(base.$el, base.ruleset, cfg);
103
+
104
+ };
105
+
106
+ base.depRoot = function () {
107
+
108
+ base.$el.each(function () {
109
+
110
+ $(this).find('[data-controller]').each(function () {
111
+
112
+ var $this = $(this),
113
+ _controller = $this.data('controller').split('|'),
114
+ _condition = $this.data('condition').split('|'),
115
+ _value = $this.data('value').toString().split('|'),
116
+ _rules = base.ruleset;
117
+
118
+ $.each(_controller, function (index, element) {
119
+
120
+ var value = _value[index] || '',
121
+ condition = _condition[index] || _condition[0];
122
+
123
+ _rules = _rules.createRule('[data-depend-id="' + element + '"]', condition, value);
124
+ _rules.include($this);
125
+
126
+ });
127
+
128
+ });
129
+
130
+ });
131
+
132
+ };
133
+
134
+ base.depSub = function () {
135
+
136
+ base.$el.each(function () {
137
+
138
+ $(this).find('[data-sub-controller]').each(function () {
139
+
140
+ var $this = $(this),
141
+ _controller = $this.data('sub-controller').split('|'),
142
+ _condition = $this.data('sub-condition').split('|'),
143
+ _value = $this.data('sub-value').toString().split('|'),
144
+ _rules = base.ruleset;
145
+
146
+ $.each(_controller, function (index, element) {
147
+
148
+ var value = _value[index] || '',
149
+ condition = _condition[index] || _condition[0];
150
+
151
+ _rules = _rules.createRule('[data-sub-depend-id="' + element + '"]', condition, value);
152
+ _rules.include($this);
153
+
154
+ });
155
+
156
+ });
157
+
158
+ });
159
+
160
+ };
161
+
162
+
163
+ base.init();
164
+ };
165
+
166
+ $.fn.SPFRAMEWORK_DEPENDENCY = function (param) {
167
+ return this.each(function () {
168
+ new $.SPFRAMEWORK.DEPENDENCY(this, param);
169
+ });
170
+ };
171
+ // ======================================================
172
+
173
+ // ======================================================
174
+ // SPFRAMEWORK CHOSEN
175
+ // ------------------------------------------------------
176
+ $.fn.SPFRAMEWORK_CHOSEN = function () {
177
+ return this.each(function () {
178
+ $(this).chosen({
179
+ allow_single_deselect: true,
180
+ disable_search_threshold: 15,
181
+ width: parseFloat($(this).actual('width') + 25) + 'px'
182
+ });
183
+ });
184
+ };
185
+ // ======================================================
186
+
187
+ // ======================================================
188
+
189
+ // ======================================================
190
+ // SPFRAMEWORK BUTTON SET -- SHAMIM
191
+ // ------------------------------------------------------
192
+ $.fn.SPFRAMEWORK_BUTTON_SET = function () {
193
+ return this.each(function () {
194
+
195
+ $(this).find('label').on('click', function () {
196
+ $(this).siblings().find('input').prop('checked', false);
197
+ });
198
+
199
+ });
200
+ };
201
+ // ======================================================
202
+
203
+ // ======================================================
204
+ // SPFRAMEWORK CAROUSEL TYPE -- SHAMIM
205
+ // ------------------------------------------------------
206
+ $.fn.SPFRAMEWORK_CAROUSEL_TYPE = function () {
207
+ return this.each(function () {
208
+
209
+ $(this).find('label').on('click', function () {
210
+ $(this).siblings().find('input').prop('checked', false);
211
+ });
212
+
213
+ });
214
+ };
215
+ // ======================================================
216
+
217
+ // ======================================================
218
+ // SPFRAMEWORK IMAGE GALLERY
219
+ // ------------------------------------------------------
220
+ $.fn.SPFRAMEWORK_IMAGE_GALLERY = function () {
221
+ return this.each(function () {
222
+ var $this = $(this),
223
+ $edit = $this.find('.sp-edit'),
224
+ $remove = $this.find('.sp-remove'),
225
+ // $list = $this.find('ul'),
226
+ $list = $this.find('ul.sp-gallery-images'),
227
+ $input = $this.find('input'),
228
+ $img = $this.find('img'),
229
+ wp_media_frame,
230
+ wp_media_click;
231
+
232
+ $this.on('click', '.sp-add, .sp-edit', function (e) {
233
+
234
+ var $el = $(this),
235
+ what = ($el.hasClass('sp-edit')) ? 'edit' : 'add',
236
+ state = (what === 'edit') ? 'gallery-edit' : 'gallery-library';
237
+
238
+ e.preventDefault();
239
+
240
+ // Check if the `wp.media.gallery` API exists.
241
+ if (typeof wp === 'undefined' || !wp.media || !wp.media.gallery) {
242
+ return;
243
+ }
244
+
245
+ // If the media frame already exists, reopen it.
246
+ if (wp_media_frame) {
247
+ wp_media_frame.open();
248
+ wp_media_frame.setState(state);
249
+ return;
250
+ }
251
+
252
+ // Create the media frame.
253
+ wp_media_frame = wp.media({
254
+ library: {
255
+ type: 'image'
256
+ },
257
+ frame: 'post',
258
+ state: 'gallery',
259
+ multiple: true
260
+ });
261
+
262
+ // Open the media frame.
263
+ wp_media_frame.on('open', function () {
264
+
265
+ var ids = $input.val();
266
+
267
+ if (ids) {
268
+
269
+ var get_array = ids.split(',');
270
+ var library = wp_media_frame.state('gallery-edit').get('library');
271
+
272
+ wp_media_frame.setState(state);
273
+
274
+ get_array.forEach(function (id) {
275
+ var attachment = wp.media.attachment(id);
276
+ library.add(attachment ? [attachment] : []);
277
+ });
278
+
279
+ }
280
+ });
281
+
282
+ // When an image is selected, run a callback.
283
+ wp_media_frame.on('update', function () {
284
+
285
+ var inner = '';
286
+ var ids = [];
287
+ var images = wp_media_frame.state().get('library');
288
+
289
+ images.each(function (attachment) {
290
+
291
+ var attributes = attachment.attributes;
292
+ var thumbnail = (typeof attributes.sizes.thumbnail !== 'undefined') ? attributes.sizes.thumbnail.url : attributes.url;
293
+
294
+ inner += '<li><img src="' + thumbnail + '"></li>';
295
+ ids.push(attributes.id);
296
+
297
+ });
298
+
299
+ $input.val(ids).trigger('change');
300
+ $list.html('').append(inner);
301
+ $remove.removeClass('hidden');
302
+ $edit.removeClass('hidden');
303
+
304
+ });
305
+
306
+ // Finally, open the modal.
307
+ wp_media_frame.open();
308
+ wp_media_click = what;
309
+
310
+ });
311
+
312
+ // Remove image
313
+ $remove.on('click', function (e) {
314
+ e.preventDefault();
315
+ $list.html('');
316
+ $input.val('').trigger('change');
317
+ $remove.addClass('hidden');
318
+ $edit.addClass('hidden');
319
+ });
320
+
321
+ });
322
+
323
+ };
324
+ // ======================================================
325
+
326
+
327
+ // ======================================================
328
+ // SPFRAMEWORK RESET CONFIRM
329
+ // ------------------------------------------------------
330
+ $.fn.SPFRAMEWORK_CONFIRM = function () {
331
+ return this.each(function () {
332
+ $(this).on('click', function (e) {
333
+ if (!confirm('Are you sure?')) {
334
+ e.preventDefault();
335
+ }
336
+ });
337
+ });
338
+ };
339
+ // ======================================================
340
+
341
+ // ======================================================
342
+ // SPFRAMEWORK SAVE OPTIONS
343
+ // ------------------------------------------------------
344
+ $.fn.SPFRAMEWORK_SAVE = function () {
345
+ return this.each(function () {
346
+
347
+ var $this = $(this),
348
+ $text = $this.data('save'),
349
+ $value = $this.val(),
350
+ $ajax = $('#sp-save-ajax');
351
+
352
+ $(document).on('keydown', function (event) {
353
+ if (event.ctrlKey || event.metaKey) {
354
+ if (String.fromCharCode(event.which).toLowerCase() === 's') {
355
+ event.preventDefault();
356
+ $this.trigger('click');
357
+ }
358
+ }
359
+ });
360
+
361
+ $this.on('click', function (e) {
362
+
363
+ if ($ajax.length) {
364
+
365
+ if (typeof tinyMCE === 'object') {
366
+ tinyMCE.triggerSave();
367
+ }
368
+
369
+ $this.prop('disabled', true).attr('value', $text);
370
+
371
+ var serializedOptions = $('#sp_framework_form').serialize();
372
+
373
+ $.post('options.php', serializedOptions).error(function () {
374
+ alert('Error, Please try again.');
375
+ }).success(function () {
376
+ $this.prop('disabled', false).attr('value', $value);
377
+ $ajax.hide().fadeIn().delay(250).fadeOut();
378
+ });
379
+
380
+ e.preventDefault();
381
+
382
+ } else {
383
+
384
+ $this.addClass('disabled').attr('value', $text);
385
+
386
+ }
387
+
388
+ });
389
+
390
+ });
391
+ };
392
+ // ======================================================
393
+
394
+ // ======================================================
395
+ // SPFRAMEWORK UI DIALOG OVERLAY HELPER
396
+ // ------------------------------------------------------
397
+ if (typeof $.widget !== 'undefined' && typeof $.ui !== 'undefined' && typeof $.ui.dialog !== 'undefined') {
398
+ $.widget('ui.dialog', $.ui.dialog, {
399
+ _createOverlay: function () {
400
+ this._super();
401
+ if (!this.options.modal) {
402
+ return;
403
+ }
404
+ this._on(this.overlay, {
405
+ click: 'close'
406
+ });
407
+ }
408
+ });
409
+ }
410
+
411
+ // ======================================================
412
+ // SPFRAMEWORK COLORPICKER
413
+ // ------------------------------------------------------
414
+ if (typeof Color === 'function') {
415
+
416
+ // adding alpha support for Automattic Color.js toString function.
417
+ Color.fn.toString = function () {
418
+
419
+ // check for alpha
420
+ if (this._alpha < 1) {
421
+ return this.toCSS('rgba', this._alpha).replace(/\s+/g, '');
422
+ }
423
+
424
+ var hex = parseInt(this._color, 10).toString(16);
425
+
426
+ if (this.error) {
427
+ return '';
428
+ }
429
+
430
+ // maybe left pad it
431
+ if (hex.length < 6) {
432
+ for (var i = 6 - hex.length - 1; i >= 0; i--) {
433
+ hex = '0' + hex;
434
+ }
435
+ }
436
+
437
+ return '#' + hex;
438
+
439
+ };
440
+
441
+ }
442
+
443
+ $.SPFRAMEWORK.PARSE_COLOR_VALUE = function (val) {
444
+
445
+ var value = val.replace(/\s+/g, ''),
446
+ alpha = (value.indexOf('rgba') !== -1) ? parseFloat(value.replace(/^.*,(.+)\)/, '$1') * 100) : 100,
447
+ rgba = (alpha < 100) ? true : false;
448
+
449
+ return {
450
+ value: value,
451
+ alpha: alpha,
452
+ rgba: rgba
453
+ };
454
+
455
+ };
456
+
457
+ $.fn.SPFRAMEWORK_COLORPICKER = function () {
458
+
459
+ return this.each(function () {
460
+
461
+ var $this = $(this);
462
+
463
+ // check for rgba enabled/disable
464
+ if ($this.data('rgba') !== false) {
465
+
466
+ // parse value
467
+ var picker = $.SPFRAMEWORK.PARSE_COLOR_VALUE($this.val());
468
+
469
+ // wpColorPicker core
470
+ $this.wpColorPicker({
471
+
472
+ // wpColorPicker: clear
473
+ clear: function () {
474
+ $this.trigger('keyup');
475
+ },
476
+
477
+ // wpColorPicker: change
478
+ change: function (event, ui) {
479
+
480
+ var ui_color_value = ui.color.toString();
481
+
482
+ // update checkerboard background color
483
+ $this.closest('.wp-picker-container').find('.sp-alpha-slider-offset').css('background-color', ui_color_value);
484
+ $this.val(ui_color_value).trigger('change');
485
+
486
+ },
487
+
488
+ // wpColorPicker: create
489
+ create: function () {
490
+
491
+ // set variables for alpha slider
492
+ var a8cIris = $this.data('a8cIris'),
493
+ $container = $this.closest('.wp-picker-container'),
494
+
495
+ // appending alpha wrapper
496
+ $alpha_wrap = $('<div class="sp-alpha-wrap">' +
497
+ '<div class="sp-alpha-slider"></div>' +
498
+ '<div class="sp-alpha-slider-offset"></div>' +
499
+ '<div class="sp-alpha-text"></div>' +
500
+ '</div>').appendTo($container.find('.wp-picker-holder')),
501
+
502
+ $alpha_slider = $alpha_wrap.find('.sp-alpha-slider'),
503
+ $alpha_text = $alpha_wrap.find('.sp-alpha-text'),
504
+ $alpha_offset = $alpha_wrap.find('.sp-alpha-slider-offset');
505
+
506
+ // alpha slider
507
+ $alpha_slider.slider({
508
+
509
+ // slider: slide
510
+ slide: function (event, ui) {
511
+
512
+ var slide_value = parseFloat(ui.value / 100);
513
+
514
+ // update iris data alpha && wpColorPicker color option && alpha text
515
+ a8cIris._color._alpha = slide_value;
516
+ $this.wpColorPicker('color', a8cIris._color.toString());
517
+ $alpha_text.text((slide_value < 1 ? slide_value : ''));
518
+
519
+ },
520
+
521
+ // slider: create
522
+ create: function () {
523
+
524
+ var slide_value = parseFloat(picker.alpha / 100),
525
+ alpha_text_value = slide_value < 1 ? slide_value : '';
526
+
527
+ // update alpha text && checkerboard background color
528
+ $alpha_text.text(alpha_text_value);
529
+ $alpha_offset.css('background-color', picker.value);
530
+
531
+ // wpColorPicker clear for update iris data alpha && alpha text && slider color option
532
+ $container.on('click', '.wp-picker-clear', function () {
533
+
534
+ a8cIris._color._alpha = 1;
535
+ $alpha_text.text('');
536
+ $alpha_slider.slider('option', 'value', 100).trigger('slide');
537
+
538
+ });
539
+
540
+ // wpColorPicker default button for update iris data alpha && alpha text && slider color option
541
+ $container.on('click', '.wp-picker-default', function () {
542
+
543
+ var default_picker = $.SPFRAMEWORK.PARSE_COLOR_VALUE($this.data('default-color')),
544
+ default_value = parseFloat(default_picker.alpha / 100),
545
+ default_text = default_value < 1 ? default_value : '';
546
+
547
+ a8cIris._color._alpha = default_value;
548
+ $alpha_text.text(default_text);
549
+ $alpha_slider.slider('option', 'value', default_picker.alpha).trigger('slide');
550
+
551
+ });
552
+
553
+ // show alpha wrapper on click color picker button
554
+ $container.on('click', '.wp-color-result', function () {
555
+ $alpha_wrap.toggle();
556
+ });
557
+
558
+ // hide alpha wrapper on click body
559
+ $sp_body.on('click.wpcolorpicker', function () {
560
+ $alpha_wrap.hide();
561
+ });
562
+
563
+ },
564
+
565
+ // slider: options
566
+ value: picker.alpha,
567
+ step: 1,
568
+ min: 1,
569
+ max: 100
570
+
571
+ });
572
+ }
573
+
574
+ });
575
+
576
+ } else {
577
+
578
+ // wpColorPicker default picker
579
+ $this.wpColorPicker({
580
+ clear: function () {
581
+ $this.trigger('keyup');
582
+ },
583
+ change: function (event, ui) {
584
+ $this.val(ui.color.toString()).trigger('change');
585
+ }
586
+ });
587
+
588
+ }
589
+
590
+ });
591
+
592
+ };
593
+ // ======================================================
594
+
595
+ // ======================================================
596
+ // ON WIDGET-ADDED RELOAD FRAMEWORK PLUGINS
597
+ // ------------------------------------------------------
598
+ $.SPFRAMEWORK.WIDGET_RELOAD_PLUGINS = function () {
599
+ $(document).on('widget-added widget-updated', function (event, $widget) {
600
+ $widget.SPFRAMEWORK_RELOAD_PLUGINS();
601
+ $widget.SPFRAMEWORK_DEPENDENCY();
602
+ });
603
+ };
604
+
605
+ // ======================================================
606
+ // TOOLTIP HELPER
607
+ // ------------------------------------------------------
608
+ $.fn.SPFRAMEWORK_TOOLTIP = function () {
609
+ return this.each(function () {
610
+ var placement = (sp_is_rtl) ? 'right' : 'left';
611
+ $(this).sptooltip({
612
+ html: true,
613
+ placement: placement,
614
+ container: 'body'
615
+ });
616
+ });
617
+ };
618
+
619
+ // ======================================================
620
+ // RELOAD FRAMEWORK PLUGINS
621
+ // ------------------------------------------------------
622
+ $.fn.SPFRAMEWORK_RELOAD_PLUGINS = function () {
623
+ return this.each(function () {
624
+ $('.chosen', this).SPFRAMEWORK_CHOSEN();
625
+ $('.sp-field-button-set', this).SPFRAMEWORK_BUTTON_SET();
626
+ $('.sp-field-carousel-type', this).SPFRAMEWORK_CAROUSEL_TYPE(); //
627
+ $('.sp-field-gallery', this).SPFRAMEWORK_IMAGE_GALLERY();
628
+ $('.sp-field-color-picker', this).SPFRAMEWORK_COLORPICKER();
629
+ $('.sp-help', this).SPFRAMEWORK_TOOLTIP();
630
+ });
631
+ };
632
+
633
+ // ======================================================
634
+ // JQUERY DOCUMENT READY
635
+ // ------------------------------------------------------
636
+ $(document).ready(function () {
637
+ $('.sp-wpcp-framework').SPFRAMEWORK_TAB_NAVIGATION();
638
+ $('.sp-reset-confirm, .sp-import-backup').SPFRAMEWORK_CONFIRM();
639
+ $('body.post-type-sp_wp_carousel, .sp-taxonomy').SPFRAMEWORK_DEPENDENCY();
640
+ $('.sp-save').SPFRAMEWORK_SAVE();
641
+ $sp_body.SPFRAMEWORK_RELOAD_PLUGINS();
642
+ $.SPFRAMEWORK.WIDGET_RELOAD_PLUGINS();
643
+ });
644
+
645
+ })(jQuery, window, document);
admin/views/meta-box/assets/js/sp-plugins.js ADDED
@@ -0,0 +1,2405 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ Chosen, a Select Box Enhancer for jQuery and Prototype
3
+ by Patrick Filler for Harvest, http://getharvest.com
4
+
5
+ Version 1.4.2
6
+ Full source at https://github.com/harvesthq/chosen
7
+ Copyright (c) 2011-2015 Harvest http://getharvest.com
8
+
9
+ MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
+ This file is generated by `grunt build`, do not edit it by hand.
11
+ */
12
+
13
+ (function() {
14
+ var $, AbstractChosen, Chosen, SelectParser, _ref,
15
+ __hasProp = {}.hasOwnProperty,
16
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
17
+
18
+ SelectParser = (function() {
19
+ function SelectParser() {
20
+ this.options_index = 0;
21
+ this.parsed = [];
22
+ }
23
+
24
+ SelectParser.prototype.add_node = function(child) {
25
+ if (child.nodeName.toUpperCase() === "OPTGROUP") {
26
+ return this.add_group(child);
27
+ } else {
28
+ return this.add_option(child);
29
+ }
30
+ };
31
+
32
+ SelectParser.prototype.add_group = function(group) {
33
+ var group_position, option, _i, _len, _ref, _results;
34
+ group_position = this.parsed.length;
35
+ this.parsed.push({
36
+ array_index: group_position,
37
+ group: true,
38
+ label: this.escapeExpression(group.label),
39
+ title: group.title ? group.title : void 0,
40
+ children: 0,
41
+ disabled: group.disabled,
42
+ classes: group.className
43
+ });
44
+ _ref = group.childNodes;
45
+ _results = [];
46
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
47
+ option = _ref[_i];
48
+ _results.push(this.add_option(option, group_position, group.disabled));
49
+ }
50
+ return _results;
51
+ };
52
+
53
+ SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
54
+ if (option.nodeName.toUpperCase() === "OPTION") {
55
+ if (option.text !== "") {
56
+ if (group_position != null) {
57
+ this.parsed[group_position].children += 1;
58
+ }
59
+ this.parsed.push({
60
+ array_index: this.parsed.length,
61
+ options_index: this.options_index,
62
+ value: option.value,
63
+ text: option.text,
64
+ html: option.innerHTML,
65
+ title: option.title ? option.title : void 0,
66
+ selected: option.selected,
67
+ disabled: group_disabled === true ? group_disabled : option.disabled,
68
+ group_array_index: group_position,
69
+ group_label: group_position != null ? this.parsed[group_position].label : null,
70
+ classes: option.className,
71
+ style: option.style.cssText
72
+ });
73
+ } else {
74
+ this.parsed.push({
75
+ array_index: this.parsed.length,
76
+ options_index: this.options_index,
77
+ empty: true
78
+ });
79
+ }
80
+ return this.options_index += 1;
81
+ }
82
+ };
83
+
84
+ SelectParser.prototype.escapeExpression = function(text) {
85
+ var map, unsafe_chars;
86
+ if ((text == null) || text === false) {
87
+ return "";
88
+ }
89
+ if (!/[\&\<\>\"\'\`]/.test(text)) {
90
+ return text;
91
+ }
92
+ map = {
93
+ "<": "&lt;",
94
+ ">": "&gt;",
95
+ '"': "&quot;",
96
+ "'": "&#x27;",
97
+ "`": "&#x60;"
98
+ };
99
+ unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g;
100
+ return text.replace(unsafe_chars, function(chr) {
101
+ return map[chr] || "&amp;";
102
+ });
103
+ };
104
+
105
+ return SelectParser;
106
+
107
+ })();
108
+
109
+ SelectParser.select_to_array = function(select) {
110
+ var child, parser, _i, _len, _ref;
111
+ parser = new SelectParser();
112
+ _ref = select.childNodes;
113
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
114
+ child = _ref[_i];
115
+ parser.add_node(child);
116
+ }
117
+ return parser.parsed;
118
+ };
119
+
120
+ AbstractChosen = (function() {
121
+ function AbstractChosen(form_field, options) {
122
+ this.form_field = form_field;
123
+ this.options = options != null ? options : {};
124
+ if (!AbstractChosen.browser_is_supported()) {
125
+ return;
126
+ }
127
+ this.is_multiple = this.form_field.multiple;
128
+ this.set_default_text();
129
+ this.set_default_values();
130
+ this.setup();
131
+ this.set_up_html();
132
+ this.register_observers();
133
+ this.on_ready();
134
+ }
135
+
136
+ AbstractChosen.prototype.set_default_values = function() {
137
+ var _this = this;
138
+ this.click_test_action = function(evt) {
139
+ return _this.test_active_click(evt);
140
+ };
141
+ this.activate_action = function(evt) {
142
+ return _this.activate_field(evt);
143
+ };
144
+ this.active_field = false;
145
+ this.mouse_on_container = false;
146
+ this.results_showing = false;
147
+ this.result_highlighted = null;
148
+ this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false;
149
+ this.disable_search_threshold = this.options.disable_search_threshold || 0;
150
+ this.disable_search = this.options.disable_search || false;
151
+ this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;
152
+ this.group_search = this.options.group_search != null ? this.options.group_search : true;
153
+ this.search_contains = this.options.search_contains || false;
154
+ this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true;
155
+ this.max_selected_options = this.options.max_selected_options || Infinity;
156
+ this.inherit_select_classes = this.options.inherit_select_classes || false;
157
+ this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;
158
+ this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;
159
+ return this.include_group_label_in_selected = this.options.include_group_label_in_selected || false;
160
+ };
161
+
162
+ AbstractChosen.prototype.set_default_text = function() {
163
+ if (this.form_field.getAttribute("data-placeholder")) {
164
+ this.default_text = this.form_field.getAttribute("data-placeholder");
165
+ } else if (this.is_multiple) {
166
+ this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;
167
+ } else {
168
+ this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;
169
+ }
170
+ return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text;
171
+ };
172
+
173
+ AbstractChosen.prototype.choice_label = function(item) {
174
+ if (this.include_group_label_in_selected && (item.group_label != null)) {
175
+ return "<b class='group-name'>" + item.group_label + "</b>" + item.html;
176
+ } else {
177
+ return item.html;
178
+ }
179
+ };
180
+
181
+ AbstractChosen.prototype.mouse_enter = function() {
182
+ return this.mouse_on_container = true;
183
+ };
184
+
185
+ AbstractChosen.prototype.mouse_leave = function() {
186
+ return this.mouse_on_container = false;
187
+ };
188
+
189
+ AbstractChosen.prototype.input_focus = function(evt) {
190
+ var _this = this;
191
+ if (this.is_multiple) {
192
+ if (!this.active_field) {
193
+ return setTimeout((function() {
194
+ return _this.container_mousedown();
195
+ }), 50);
196
+ }
197
+ } else {
198
+ if (!this.active_field) {
199
+ return this.activate_field();
200
+ }
201
+ }
202
+ };
203
+
204
+ AbstractChosen.prototype.input_blur = function(evt) {
205
+ var _this = this;
206
+ if (!this.mouse_on_container) {
207
+ this.active_field = false;
208
+ return setTimeout((function() {
209
+ return _this.blur_test();
210
+ }), 100);
211
+ }
212
+ };
213
+
214
+ AbstractChosen.prototype.results_option_build = function(options) {
215
+ var content, data, _i, _len, _ref;
216
+ content = '';
217
+ _ref = this.results_data;
218
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
219
+ data = _ref[_i];
220
+ if (data.group) {
221
+ content += this.result_add_group(data);
222
+ } else {
223
+ content += this.result_add_option(data);
224
+ }
225
+ if (options != null ? options.first : void 0) {
226
+ if (data.selected && this.is_multiple) {
227
+ this.choice_build(data);
228
+ } else if (data.selected && !this.is_multiple) {
229
+ this.single_set_selected_text(this.choice_label(data));
230
+ }
231
+ }
232
+ }
233
+ return content;
234
+ };
235
+
236
+ AbstractChosen.prototype.result_add_option = function(option) {
237
+ var classes, option_el;
238
+ if (!option.search_match) {
239
+ return '';
240
+ }
241
+ if (!this.include_option_in_results(option)) {
242
+ return '';
243
+ }
244
+ classes = [];
245
+ if (!option.disabled && !(option.selected && this.is_multiple)) {
246
+ classes.push("active-result");
247
+ }
248
+ if (option.disabled && !(option.selected && this.is_multiple)) {
249
+ classes.push("disabled-result");
250
+ }
251
+ if (option.selected) {
252
+ classes.push("result-selected");
253
+ }
254
+ if (option.group_array_index != null) {
255
+ classes.push("group-option");
256
+ }
257
+ if (option.classes !== "") {
258
+ classes.push(option.classes);
259
+ }
260
+ option_el = document.createElement("li");
261
+ option_el.className = classes.join(" ");
262
+ option_el.style.cssText = option.style;
263
+ option_el.setAttribute("data-option-array-index", option.array_index);
264
+ option_el.innerHTML = option.search_text;
265
+ if (option.title) {
266
+ option_el.title = option.title;
267
+ }
268
+ return this.outerHTML(option_el);
269
+ };
270
+
271
+ AbstractChosen.prototype.result_add_group = function(group) {
272
+ var classes, group_el;
273
+ if (!(group.search_match || group.group_match)) {
274
+ return '';
275
+ }
276
+ if (!(group.active_options > 0)) {
277
+ return '';
278
+ }
279
+ classes = [];
280
+ classes.push("group-result");
281
+ if (group.classes) {
282
+ classes.push(group.classes);
283
+ }
284
+ group_el = document.createElement("li");
285
+ group_el.className = classes.join(" ");
286
+ group_el.innerHTML = group.search_text;
287
+ if (group.title) {
288
+ group_el.title = group.title;
289
+ }
290
+ return this.outerHTML(group_el);
291
+ };
292
+
293
+ AbstractChosen.prototype.results_update_field = function() {
294
+ this.set_default_text();
295
+ if (!this.is_multiple) {
296
+ this.results_reset_cleanup();
297
+ }
298
+ this.result_clear_highlight();
299
+ this.results_build();
300
+ if (this.results_showing) {
301
+ return this.winnow_results();
302
+ }
303
+ };
304
+
305
+ AbstractChosen.prototype.reset_single_select_options = function() {
306
+ var result, _i, _len, _ref, _results;
307
+ _ref = this.results_data;
308
+ _results = [];
309
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
310
+ result = _ref[_i];
311
+ if (result.selected) {
312
+ _results.push(result.selected = false);
313
+ } else {
314
+ _results.push(void 0);
315
+ }
316
+ }
317
+ return _results;
318
+ };
319
+
320
+ AbstractChosen.prototype.results_toggle = function() {
321
+ if (this.results_showing) {
322
+ return this.results_hide();
323
+ } else {
324
+ return this.results_show();
325
+ }
326
+ };
327
+
328
+ AbstractChosen.prototype.results_search = function(evt) {
329
+ if (this.results_showing) {
330
+ return this.winnow_results();
331
+ } else {
332
+ return this.results_show();
333
+ }
334
+ };
335
+
336
+ AbstractChosen.prototype.winnow_results = function() {
337
+ var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref;
338
+ this.no_results_clear();
339
+ results = 0;
340
+ searchText = this.get_search_text();
341
+ escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
342
+ zregex = new RegExp(escapedSearchText, 'i');
343
+ regex = this.get_search_regex(escapedSearchText);
344
+ _ref = this.results_data;
345
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
346
+ option = _ref[_i];
347
+ option.search_match = false;
348
+ results_group = null;
349
+ if (this.include_option_in_results(option)) {
350
+ if (option.group) {
351
+ option.group_match = false;
352
+ option.active_options = 0;
353
+ }
354
+ if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {
355
+ results_group = this.results_data[option.group_array_index];
356
+ if (results_group.active_options === 0 && results_group.search_match) {
357
+ results += 1;
358
+ }
359
+ results_group.active_options += 1;
360
+ }
361
+ option.search_text = option.group ? option.label : option.html;
362
+ if (!(option.group && !this.group_search)) {
363
+ option.search_match = this.search_string_match(option.search_text, regex);
364
+ if (option.search_match && !option.group) {
365
+ results += 1;
366
+ }
367
+ if (option.search_match) {
368
+ if (searchText.length) {
369
+ startpos = option.search_text.search(zregex);
370
+ text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length);
371
+ option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
372
+ }
373
+ if (results_group != null) {
374
+ results_group.group_match = true;
375
+ }
376
+ } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {
377
+ option.search_match = true;
378
+ }
379
+ }
380
+ }
381
+ }
382
+ this.result_clear_highlight();
383
+ if (results < 1 && searchText.length) {
384
+ this.update_results_content("");
385
+ return this.no_results(searchText);
386
+ } else {
387
+ this.update_results_content(this.results_option_build());
388
+ return this.winnow_results_set_highlight();
389
+ }
390
+ };
391
+
392
+ AbstractChosen.prototype.get_search_regex = function(escaped_search_string) {
393
+ var regex_anchor;
394
+ regex_anchor = this.search_contains ? "" : "^";
395
+ return new RegExp(regex_anchor + escaped_search_string, 'i');
396
+ };
397
+
398
+ AbstractChosen.prototype.search_string_match = function(search_string, regex) {
399
+ var part, parts, _i, _len;
400
+ if (regex.test(search_string)) {
401
+ return true;
402
+ } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) {
403
+ parts = search_string.replace(/\[|\]/g, "").split(" ");
404
+ if (parts.length) {
405
+ for (_i = 0, _len = parts.length; _i < _len; _i++) {
406
+ part = parts[_i];
407
+ if (regex.test(part)) {
408
+ return true;
409
+ }
410
+ }
411
+ }
412
+ }
413
+ };
414
+
415
+ AbstractChosen.prototype.choices_count = function() {
416
+ var option, _i, _len, _ref;
417
+ if (this.selected_option_count != null) {
418
+ return this.selected_option_count;
419
+ }
420
+ this.selected_option_count = 0;
421
+ _ref = this.form_field.options;
422
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
423
+ option = _ref[_i];
424
+ if (option.selected) {
425
+ this.selected_option_count += 1;
426
+ }
427
+ }
428
+ return this.selected_option_count;
429
+ };
430
+
431
+ AbstractChosen.prototype.choices_click = function(evt) {
432
+ evt.preventDefault();
433
+ if (!(this.results_showing || this.is_disabled)) {
434
+ return this.results_show();
435
+ }
436
+ };
437
+
438
+ AbstractChosen.prototype.keyup_checker = function(evt) {
439
+ var stroke, _ref;
440
+ stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
441
+ this.search_field_scale();
442
+ switch (stroke) {
443
+ case 8:
444
+ if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
445
+ return this.keydown_backstroke();
446
+ } else if (!this.pending_backstroke) {
447
+ this.result_clear_highlight();
448
+ return this.results_search();
449
+ }
450
+ break;
451
+ case 13:
452
+ evt.preventDefault();
453
+ if (this.results_showing) {
454
+ return this.result_select(evt);
455
+ }
456
+ break;
457
+ case 27:
458
+ if (this.results_showing) {
459
+ this.results_hide();
460
+ }
461
+ return true;
462
+ case 9:
463
+ case 38:
464
+ case 40:
465
+ case 16:
466
+ case 91:
467
+ case 17:
468
+ break;
469
+ default:
470
+ return this.results_search();
471
+ }
472
+ };
473
+
474
+ AbstractChosen.prototype.clipboard_event_checker = function(evt) {
475
+ var _this = this;
476
+ return setTimeout((function() {
477
+ return _this.results_search();
478
+ }), 50);
479
+ };
480
+
481
+ AbstractChosen.prototype.container_width = function() {
482
+ if (this.options.width != null) {
483
+ return this.options.width;
484
+ } else {
485
+ return "" + this.form_field.offsetWidth + "px";
486
+ }
487
+ };
488
+
489
+ AbstractChosen.prototype.include_option_in_results = function(option) {
490
+ if (this.is_multiple && (!this.display_selected_options && option.selected)) {
491
+ return false;
492
+ }
493
+ if (!this.display_disabled_options && option.disabled) {
494
+ return false;
495
+ }
496
+ if (option.empty) {
497
+ return false;
498
+ }
499
+ return true;
500
+ };
501
+
502
+ AbstractChosen.prototype.search_results_touchstart = function(evt) {
503
+ this.touch_started = true;
504
+ return this.search_results_mouseover(evt);
505
+ };
506
+
507
+ AbstractChosen.prototype.search_results_touchmove = function(evt) {
508
+ this.touch_started = false;
509
+ return this.search_results_mouseout(evt);
510
+ };
511
+
512
+ AbstractChosen.prototype.search_results_touchend = function(evt) {
513
+ if (this.touch_started) {
514
+ return this.search_results_mouseup(evt);
515
+ }
516
+ };
517
+
518
+ AbstractChosen.prototype.outerHTML = function(element) {
519
+ var tmp;
520
+ if (element.outerHTML) {
521
+ return element.outerHTML;
522
+ }
523
+ tmp = document.createElement("div");
524
+ tmp.appendChild(element);
525
+ return tmp.innerHTML;
526
+ };
527
+
528
+ AbstractChosen.browser_is_supported = function() {
529
+ if (window.navigator.appName === "Microsoft Internet Explorer") {
530
+ return document.documentMode >= 8;
531
+ }
532
+ if (/iP(od|hone)/i.test(window.navigator.userAgent)) {
533
+ return false;
534
+ }
535
+ if (/Android/i.test(window.navigator.userAgent)) {
536
+ if (/Mobile/i.test(window.navigator.userAgent)) {
537
+ return false;
538
+ }
539
+ }
540
+ return true;
541
+ };
542
+
543
+ AbstractChosen.default_multiple_text = "Select Some Options";
544
+
545
+ AbstractChosen.default_single_text = "Select an Option";
546
+
547
+ AbstractChosen.default_no_result_text = "No results match";
548
+
549
+ return AbstractChosen;
550
+
551
+ })();
552
+
553
+ $ = jQuery;
554
+
555
+ $.fn.extend({
556
+ chosen: function(options) {
557
+ if (!AbstractChosen.browser_is_supported()) {
558
+ return this;
559
+ }
560
+ return this.each(function(input_field) {
561
+ var $this, chosen;
562
+ $this = $(this);
563
+ chosen = $this.data('chosen');
564
+ if (options === 'destroy' && chosen instanceof Chosen) {
565
+ chosen.destroy();
566
+ } else if (!(chosen instanceof Chosen)) {
567
+ $this.data('chosen', new Chosen(this, options));
568
+ }
569
+ });
570
+ }
571
+ });
572
+
573
+ Chosen = (function(_super) {
574
+ __extends(Chosen, _super);
575
+
576
+ function Chosen() {
577
+ _ref = Chosen.__super__.constructor.apply(this, arguments);
578
+ return _ref;
579
+ }
580
+
581
+ Chosen.prototype.setup = function() {
582
+ this.form_field_jq = $(this.form_field);
583
+ this.current_selectedIndex = this.form_field.selectedIndex;
584
+ return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl");
585
+ };
586
+
587
+ Chosen.prototype.set_up_html = function() {
588
+ var container_classes, container_props;
589
+ container_classes = ["chosen-container"];
590
+ container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single"));
591
+ if (this.inherit_select_classes && this.form_field.className) {
592
+ container_classes.push(this.form_field.className);
593
+ }
594
+ if (this.is_rtl) {
595
+ container_classes.push("chosen-rtl");
596
+ }
597
+ container_props = {
598
+ 'class': container_classes.join(' '),
599
+ 'style': "width: " + (this.container_width()) + ";",
600
+ 'title': this.form_field.title
601
+ };
602
+ if (this.form_field.id.length) {
603
+ container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
604
+ }
605
+ this.container = $("<div />", container_props);
606
+ if (this.is_multiple) {
607
+ this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>');
608
+ } else {
609
+ this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>');
610
+ }
611
+ this.form_field_jq.hide().after(this.container);
612
+ this.dropdown = this.container.find('div.chosen-drop').first();
613
+ this.search_field = this.container.find('input').first();
614
+ this.search_results = this.container.find('ul.chosen-results').first();
615
+ this.search_field_scale();
616
+ this.search_no_results = this.container.find('li.no-results').first();
617
+ if (this.is_multiple) {
618
+ this.search_choices = this.container.find('ul.chosen-choices').first();
619
+ this.search_container = this.container.find('li.search-field').first();
620
+ } else {
621
+ this.search_container = this.container.find('div.chosen-search').first();
622
+ this.selected_item = this.container.find('.chosen-single').first();
623
+ }
624
+ this.results_build();
625
+ this.set_tab_index();
626
+ return this.set_label_behavior();
627
+ };
628
+
629
+ Chosen.prototype.on_ready = function() {
630
+ return this.form_field_jq.trigger("chosen:ready", {
631
+ chosen: this
632
+ });
633
+ };
634
+
635
+ Chosen.prototype.register_observers = function() {
636
+ var _this = this;
637
+ this.container.bind('touchstart.chosen', function(evt) {
638
+ _this.container_mousedown(evt);
639
+ return evt.preventDefault();
640
+ });
641
+ this.container.bind('touchend.chosen', function(evt) {
642
+ _this.container_mouseup(evt);
643
+ return evt.preventDefault();
644
+ });
645
+ this.container.bind('mousedown.chosen', function(evt) {
646
+ _this.container_mousedown(evt);
647
+ });
648
+ this.container.bind('mouseup.chosen', function(evt) {
649
+ _this.container_mouseup(evt);
650
+ });
651
+ this.container.bind('mouseenter.chosen', function(evt) {
652
+ _this.mouse_enter(evt);
653
+ });
654
+ this.container.bind('mouseleave.chosen', function(evt) {
655
+ _this.mouse_leave(evt);
656
+ });
657
+ this.search_results.bind('mouseup.chosen', function(evt) {
658
+ _this.search_results_mouseup(evt);
659
+ });
660
+ this.search_results.bind('mouseover.chosen', function(evt) {
661
+ _this.search_results_mouseover(evt);
662
+ });
663
+ this.search_results.bind('mouseout.chosen', function(evt) {
664
+ _this.search_results_mouseout(evt);
665
+ });
666
+ this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) {
667
+ _this.search_results_mousewheel(evt);
668
+ });
669
+ this.search_results.bind('touchstart.chosen', function(evt) {
670
+ _this.search_results_touchstart(evt);
671
+ });
672
+ this.search_results.bind('touchmove.chosen', function(evt) {
673
+ _this.search_results_touchmove(evt);
674
+ });
675
+ this.search_results.bind('touchend.chosen', function(evt) {
676
+ _this.search_results_touchend(evt);
677
+ });
678
+ this.form_field_jq.bind("chosen:updated.chosen", function(evt) {
679
+ _this.results_update_field(evt);
680
+ });
681
+ this.form_field_jq.bind("chosen:activate.chosen", function(evt) {
682
+ _this.activate_field(evt);
683
+ });
684
+ this.form_field_jq.bind("chosen:open.chosen", function(evt) {
685
+ _this.container_mousedown(evt);
686
+ });
687
+ this.form_field_jq.bind("chosen:close.chosen", function(evt) {
688
+ _this.input_blur(evt);
689
+ });
690
+ this.search_field.bind('blur.chosen', function(evt) {
691
+ _this.input_blur(evt);
692
+ });
693
+ this.search_field.bind('keyup.chosen', function(evt) {
694
+ _this.keyup_checker(evt);
695
+ });
696
+ this.search_field.bind('keydown.chosen', function(evt) {
697
+ _this.keydown_checker(evt);
698
+ });
699
+ this.search_field.bind('focus.chosen', function(evt) {
700
+ _this.input_focus(evt);
701
+ });
702
+ this.search_field.bind('cut.chosen', function(evt) {
703
+ _this.clipboard_event_checker(evt);
704
+ });
705
+ this.search_field.bind('paste.chosen', function(evt) {
706
+ _this.clipboard_event_checker(evt);
707
+ });
708
+ if (this.is_multiple) {
709
+ return this.search_choices.bind('click.chosen', function(evt) {
710
+ _this.choices_click(evt);
711
+ });
712
+ } else {
713
+ return this.container.bind('click.chosen', function(evt) {
714
+ evt.preventDefault();
715
+ });
716
+ }
717
+ };
718
+
719
+ Chosen.prototype.destroy = function() {
720
+ $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action);
721
+ if (this.search_field[0].tabIndex) {
722
+ this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
723
+ }
724
+ this.container.remove();
725
+ this.form_field_jq.removeData('chosen');
726
+ return this.form_field_jq.show();
727
+ };
728
+
729
+ Chosen.prototype.search_field_disabled = function() {
730
+ this.is_disabled = this.form_field_jq[0].disabled;
731
+ if (this.is_disabled) {
732
+ this.container.addClass('chosen-disabled');
733
+ this.search_field[0].disabled = true;
734
+ if (!this.is_multiple) {
735
+ this.selected_item.unbind("focus.chosen", this.activate_action);
736
+ }
737
+ return this.close_field();
738
+ } else {
739
+ this.container.removeClass('chosen-disabled');
740
+ this.search_field[0].disabled = false;
741
+ if (!this.is_multiple) {
742
+ return this.selected_item.bind("focus.chosen", this.activate_action);
743
+ }
744
+ }
745
+ };
746
+
747
+ Chosen.prototype.container_mousedown = function(evt) {
748
+ if (!this.is_disabled) {
749
+ if (evt && evt.type === "mousedown" && !this.results_showing) {
750
+ evt.preventDefault();
751
+ }
752
+ if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
753
+ if (!this.active_field) {
754
+ if (this.is_multiple) {
755
+ this.search_field.val("");
756
+ }
757
+ $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action);
758
+ this.results_show();
759
+ } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
760
+ evt.preventDefault();
761
+ this.results_toggle();
762
+ }
763
+ return this.activate_field();
764
+ }
765
+ }
766
+ };
767
+
768
+ Chosen.prototype.container_mouseup = function(evt) {
769
+ if (evt.target.nodeName === "ABBR" && !this.is_disabled) {
770
+ return this.results_reset(evt);
771
+ }
772
+ };
773
+
774
+ Chosen.prototype.search_results_mousewheel = function(evt) {
775
+ var delta;
776
+ if (evt.originalEvent) {
777
+ delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail;
778
+ }
779
+ if (delta != null) {
780
+ evt.preventDefault();
781
+ if (evt.type === 'DOMMouseScroll') {
782
+ delta = delta * 40;
783
+ }
784
+ return this.search_results.scrollTop(delta + this.search_results.scrollTop());
785
+ }
786
+ };
787
+
788
+ Chosen.prototype.blur_test = function(evt) {
789
+ if (!this.active_field && this.container.hasClass("chosen-container-active")) {
790
+ return this.close_field();
791
+ }
792
+ };
793
+
794
+ Chosen.prototype.close_field = function() {
795
+ $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action);
796
+ this.active_field = false;
797
+ this.results_hide();
798
+ this.container.removeClass("chosen-container-active");
799
+ this.clear_backstroke();
800
+ this.show_search_field_default();
801
+ return this.search_field_scale();
802
+ };
803
+
804
+ Chosen.prototype.activate_field = function() {
805
+ this.container.addClass("chosen-container-active");
806
+ this.active_field = true;
807
+ this.search_field.val(this.search_field.val());
808
+ return this.search_field.focus();
809
+ };
810
+
811
+ Chosen.prototype.test_active_click = function(evt) {
812
+ var active_container;
813
+ active_container = $(evt.target).closest('.chosen-container');
814
+ if (active_container.length && this.container[0] === active_container[0]) {
815
+ return this.active_field = true;
816
+ } else {
817
+ return this.close_field();
818
+ }
819
+ };
820
+
821
+ Chosen.prototype.results_build = function() {
822
+ this.parsing = true;
823
+ this.selected_option_count = null;
824
+ this.results_data = SelectParser.select_to_array(this.form_field);
825
+ if (this.is_multiple) {
826
+ this.search_choices.find("li.search-choice").remove();
827
+ } else if (!this.is_multiple) {
828
+ this.single_set_selected_text();
829
+ if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
830
+ this.search_field[0].readOnly = true;
831
+ this.container.addClass("chosen-container-single-nosearch");
832
+ } else {
833
+ this.search_field[0].readOnly = false;
834
+ this.container.removeClass("chosen-container-single-nosearch");
835
+ }
836
+ }
837
+ this.update_results_content(this.results_option_build({
838
+ first: true
839
+ }));
840
+ this.search_field_disabled();
841
+ this.show_search_field_default();
842
+ this.search_field_scale();
843
+ return this.parsing = false;
844
+ };
845
+
846
+ Chosen.prototype.result_do_highlight = function(el) {
847
+ var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
848
+ if (el.length) {
849
+ this.result_clear_highlight();
850
+ this.result_highlight = el;
851
+ this.result_highlight.addClass("highlighted");
852
+ maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
853
+ visible_top = this.search_results.scrollTop();
854
+ visible_bottom = maxHeight + visible_top;
855
+ high_top = this.result_highlight.position().top + this.search_results.scrollTop();
856
+ high_bottom = high_top + this.result_highlight.outerHeight();
857
+ if (high_bottom >= visible_bottom) {
858
+ return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
859
+ } else if (high_top < visible_top) {
860
+ return this.search_results.scrollTop(high_top);
861
+ }
862
+ }
863
+ };
864
+
865
+ Chosen.prototype.result_clear_highlight = function() {
866
+ if (this.result_highlight) {
867
+ this.result_highlight.removeClass("highlighted");
868
+ }
869
+ return this.result_highlight = null;
870
+ };
871
+
872
+ Chosen.prototype.results_show = function() {
873
+ if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
874
+ this.form_field_jq.trigger("chosen:maxselected", {
875
+ chosen: this
876
+ });
877
+ return false;
878
+ }
879
+ this.container.addClass("chosen-with-drop");
880
+ this.results_showing = true;
881
+ this.search_field.focus();
882
+ this.search_field.val(this.search_field.val());
883
+ this.winnow_results();
884
+ return this.form_field_jq.trigger("chosen:showing_dropdown", {
885
+ chosen: this
886
+ });
887
+ };
888
+
889
+ Chosen.prototype.update_results_content = function(content) {
890
+ return this.search_results.html(content);
891
+ };
892
+
893
+ Chosen.prototype.results_hide = function() {
894
+ if (this.results_showing) {
895
+ this.result_clear_highlight();
896
+ this.container.removeClass("chosen-with-drop");
897
+ this.form_field_jq.trigger("chosen:hiding_dropdown", {
898
+ chosen: this
899
+ });
900
+ }
901
+ return this.results_showing = false;
902
+ };
903
+
904
+ Chosen.prototype.set_tab_index = function(el) {
905
+ var ti;
906
+ if (this.form_field.tabIndex) {
907
+ ti = this.form_field.tabIndex;
908
+ this.form_field.tabIndex = -1;
909
+ return this.search_field[0].tabIndex = ti;
910
+ }
911
+ };
912
+
913
+ Chosen.prototype.set_label_behavior = function() {
914
+ var _this = this;
915
+ this.form_field_label = this.form_field_jq.parents("label");
916
+ if (!this.form_field_label.length && this.form_field.id.length) {
917
+ this.form_field_label = $("label[for='" + this.form_field.id + "']");
918
+ }
919
+ if (this.form_field_label.length > 0) {
920
+ return this.form_field_label.bind('click.chosen', function(evt) {
921
+ if (_this.is_multiple) {
922
+ return _this.container_mousedown(evt);
923
+ } else {
924
+ return _this.activate_field();
925
+ }
926
+ });
927
+ }
928
+ };
929
+
930
+ Chosen.prototype.show_search_field_default = function() {
931
+ if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {
932
+ this.search_field.val(this.default_text);
933
+ return this.search_field.addClass("default");
934
+ } else {
935
+ this.search_field.val("");
936
+ return this.search_field.removeClass("default");
937
+ }
938
+ };
939
+
940
+ Chosen.prototype.search_results_mouseup = function(evt) {
941
+ var target;
942
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
943
+ if (target.length) {
944
+ this.result_highlight = target;
945
+ this.result_select(evt);
946
+ return this.search_field.focus();
947
+ }
948
+ };
949
+
950
+ Chosen.prototype.search_results_mouseover = function(evt) {
951
+ var target;
952
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
953
+ if (target) {
954
+ return this.result_do_highlight(target);
955
+ }
956
+ };
957
+
958
+ Chosen.prototype.search_results_mouseout = function(evt) {
959
+ if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) {
960
+ return this.result_clear_highlight();
961
+ }
962
+ };
963
+
964
+ Chosen.prototype.choice_build = function(item) {
965
+ var choice, close_link,
966
+ _this = this;
967
+ choice = $('<li />', {
968
+ "class": "search-choice"
969
+ }).html("<span>" + (this.choice_label(item)) + "</span>");
970
+ if (item.disabled) {
971
+ choice.addClass('search-choice-disabled');
972
+ } else {
973
+ close_link = $('<a />', {
974
+ "class": 'search-choice-close',
975
+ 'data-option-array-index': item.array_index
976
+ });
977
+ close_link.bind('click.chosen', function(evt) {
978
+ return _this.choice_destroy_link_click(evt);
979
+ });
980
+ choice.append(close_link);
981
+ }
982
+ return this.search_container.before(choice);
983
+ };
984
+
985
+ Chosen.prototype.choice_destroy_link_click = function(evt) {
986
+ evt.preventDefault();
987
+ evt.stopPropagation();
988
+ if (!this.is_disabled) {
989
+ return this.choice_destroy($(evt.target));
990
+ }
991
+ };
992
+
993
+ Chosen.prototype.choice_destroy = function(link) {
994
+ if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
995
+ this.show_search_field_default();
996
+ if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {
997
+ this.results_hide();
998
+ }
999
+ link.parents('li').first().remove();
1000
+ return this.search_field_scale();
1001
+ }
1002
+ };
1003
+
1004
+ Chosen.prototype.results_reset = function() {
1005
+ this.reset_single_select_options();
1006
+ this.form_field.options[0].selected = true;
1007
+ this.single_set_selected_text();
1008
+ this.show_search_field_default();
1009
+ this.results_reset_cleanup();
1010
+ this.form_field_jq.trigger("change");
1011
+ if (this.active_field) {
1012
+ return this.results_hide();
1013
+ }
1014
+ };
1015
+
1016
+ Chosen.prototype.results_reset_cleanup = function() {
1017
+ this.current_selectedIndex = this.form_field.selectedIndex;
1018
+ return this.selected_item.find("abbr").remove();
1019
+ };
1020
+
1021
+ Chosen.prototype.result_select = function(evt) {
1022
+ var high, item;
1023
+ if (this.result_highlight) {
1024
+ high = this.result_highlight;
1025
+ this.result_clear_highlight();
1026
+ if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
1027
+ this.form_field_jq.trigger("chosen:maxselected", {
1028
+ chosen: this
1029
+ });
1030
+ return false;
1031
+ }
1032
+ if (this.is_multiple) {
1033
+ high.removeClass("active-result");
1034
+ } else {
1035
+ this.reset_single_select_options();
1036
+ }
1037
+ high.addClass("result-selected");
1038
+ item = this.results_data[high[0].getAttribute("data-option-array-index")];
1039
+ item.selected = true;
1040
+ this.form_field.options[item.options_index].selected = true;
1041
+ this.selected_option_count = null;
1042
+ if (this.is_multiple) {
1043
+ this.choice_build(item);
1044
+ } else {
1045
+ this.single_set_selected_text(this.choice_label(item));
1046
+ }
1047
+ if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {
1048
+ this.results_hide();
1049
+ }
1050
+ this.search_field.val("");
1051
+ if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
1052
+ this.form_field_jq.trigger("change", {
1053
+ 'selected': this.form_field.options[item.options_index].value
1054
+ });
1055
+ }
1056
+ this.current_selectedIndex = this.form_field.selectedIndex;
1057
+ evt.preventDefault();
1058
+ return this.search_field_scale();
1059
+ }
1060
+ };
1061
+
1062
+ Chosen.prototype.single_set_selected_text = function(text) {
1063
+ if (text == null) {
1064
+ text = this.default_text;
1065
+ }
1066
+ if (text === this.default_text) {
1067
+ this.selected_item.addClass("chosen-default");
1068
+ } else {
1069
+ this.single_deselect_control_build();
1070
+ this.selected_item.removeClass("chosen-default");
1071
+ }
1072
+ return this.selected_item.find("span").html(text);
1073
+ };
1074
+
1075
+ Chosen.prototype.result_deselect = function(pos) {
1076
+ var result_data;
1077
+ result_data = this.results_data[pos];
1078
+ if (!this.form_field.options[result_data.options_index].disabled) {
1079
+ result_data.selected = false;
1080
+ this.form_field.options[result_data.options_index].selected = false;
1081
+ this.selected_option_count = null;
1082
+ this.result_clear_highlight();
1083
+ if (this.results_showing) {
1084
+ this.winnow_results();
1085
+ }
1086
+ this.form_field_jq.trigger("change", {
1087
+ deselected: this.form_field.options[result_data.options_index].value
1088
+ });
1089
+ this.search_field_scale();
1090
+ return true;
1091
+ } else {
1092
+ return false;
1093
+ }
1094
+ };
1095
+
1096
+ Chosen.prototype.single_deselect_control_build = function() {
1097
+ if (!this.allow_single_deselect) {
1098
+ return;
1099
+ }
1100
+ if (!this.selected_item.find("abbr").length) {
1101
+ this.selected_item.find("span").first().after("<abbr class=\"search-choice-close\"></abbr>");
1102
+ }
1103
+ return this.selected_item.addClass("chosen-single-with-deselect");
1104
+ };
1105
+
1106
+ Chosen.prototype.get_search_text = function() {
1107
+ return $('<div/>').text($.trim(this.search_field.val())).html();
1108
+ };
1109
+
1110
+ Chosen.prototype.winnow_results_set_highlight = function() {
1111
+ var do_high, selected_results;
1112
+ selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : [];
1113
+ do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first();
1114
+ if (do_high != null) {
1115
+ return this.result_do_highlight(do_high);
1116
+ }
1117
+ };
1118
+
1119
+ Chosen.prototype.no_results = function(terms) {
1120
+ var no_results_html;
1121
+ no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>');
1122
+ no_results_html.find("span").first().html(terms);
1123
+ this.search_results.append(no_results_html);
1124
+ return this.form_field_jq.trigger("chosen:no_results", {
1125
+ chosen: this
1126
+ });
1127
+ };
1128
+
1129
+ Chosen.prototype.no_results_clear = function() {
1130
+ return this.search_results.find(".no-results").remove();
1131
+ };
1132
+
1133
+ Chosen.prototype.keydown_arrow = function() {
1134
+ var next_sib;
1135
+ if (this.results_showing && this.result_highlight) {
1136
+ next_sib = this.result_highlight.nextAll("li.active-result").first();
1137
+ if (next_sib) {
1138
+ return this.result_do_highlight(next_sib);
1139
+ }
1140
+ } else {
1141
+ return this.results_show();
1142
+ }
1143
+ };
1144
+
1145
+ Chosen.prototype.keyup_arrow = function() {
1146
+ var prev_sibs;
1147
+ if (!this.results_showing && !this.is_multiple) {
1148
+ return this.results_show();
1149
+ } else if (this.result_highlight) {
1150
+ prev_sibs = this.result_highlight.prevAll("li.active-result");
1151
+ if (prev_sibs.length) {
1152
+ return this.result_do_highlight(prev_sibs.first());
1153
+ } else {
1154
+ if (this.choices_count() > 0) {
1155
+ this.results_hide();
1156
+ }
1157
+ return this.result_clear_highlight();
1158
+ }
1159
+ }
1160
+ };
1161
+
1162
+ Chosen.prototype.keydown_backstroke = function() {
1163
+ var next_available_destroy;
1164
+ if (this.pending_backstroke) {
1165
+ this.choice_destroy(this.pending_backstroke.find("a").first());
1166
+ return this.clear_backstroke();
1167
+ } else {
1168
+ next_available_destroy = this.search_container.siblings("li.search-choice").last();
1169
+ if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) {
1170
+ this.pending_backstroke = next_available_destroy;
1171
+ if (this.single_backstroke_delete) {
1172
+ return this.keydown_backstroke();
1173
+ } else {
1174
+ return this.pending_backstroke.addClass("search-choice-focus");
1175
+ }
1176
+ }
1177
+ }
1178
+ };
1179
+
1180
+ Chosen.prototype.clear_backstroke = function() {
1181
+ if (this.pending_backstroke) {
1182
+ this.pending_backstroke.removeClass("search-choice-focus");
1183
+ }
1184
+ return this.pending_backstroke = null;
1185
+ };
1186
+
1187
+ Chosen.prototype.keydown_checker = function(evt) {
1188
+ var stroke, _ref1;
1189
+ stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;
1190
+ this.search_field_scale();
1191
+ if (stroke !== 8 && this.pending_backstroke) {
1192
+ this.clear_backstroke();
1193
+ }
1194
+ switch (stroke) {
1195
+ case 8:
1196
+ this.backstroke_length = this.search_field.val().length;
1197
+ break;
1198
+ case 9:
1199
+ if (this.results_showing && !this.is_multiple) {
1200
+ this.result_select(evt);
1201
+ }
1202
+ this.mouse_on_container = false;
1203
+ break;
1204
+ case 13:
1205
+ if (this.results_showing) {
1206
+ evt.preventDefault();
1207
+ }
1208
+ break;
1209
+ case 32:
1210
+ if (this.disable_search) {
1211
+ evt.preventDefault();
1212
+ }
1213
+ break;
1214
+ case 38:
1215
+ evt.preventDefault();
1216
+ this.keyup_arrow();
1217
+ break;
1218
+ case 40:
1219
+ evt.preventDefault();
1220
+ this.keydown_arrow();
1221
+ break;
1222
+ }
1223
+ };
1224
+
1225
+ Chosen.prototype.search_field_scale = function() {
1226
+ var div, f_width, h, style, style_block, styles, w, _i, _len;
1227
+ if (this.is_multiple) {
1228
+ h = 0;
1229
+ w = 0;
1230
+ style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
1231
+ styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
1232
+ for (_i = 0, _len = styles.length; _i < _len; _i++) {
1233
+ style = styles[_i];
1234
+ style_block += style + ":" + this.search_field.css(style) + ";";
1235
+ }
1236
+ div = $('<div />', {
1237
+ 'style': style_block
1238
+ });
1239
+ div.text(this.search_field.val());
1240
+ $('body').append(div);
1241
+ w = div.width() + 25;
1242
+ div.remove();
1243
+ f_width = this.container.outerWidth();
1244
+ if (w > f_width - 10) {
1245
+ w = f_width - 10;
1246
+ }
1247
+ return this.search_field.css({
1248
+ 'width': w + 'px'
1249
+ });
1250
+ }
1251
+ };
1252
+
1253
+ return Chosen;
1254
+
1255
+ })(AbstractChosen);
1256
+
1257
+ }).call(this);
1258
+
1259
+ /**
1260
+ * jQuery Interdependencies library
1261
+ *
1262
+ * http://miohtama.github.com/jquery-interdependencies/
1263
+ *
1264
+ * Copyright 2012-2013 Mikko Ohtamaa, others
1265
+ */
1266
+
1267
+ /*global console, window*/
1268
+
1269
+ (function($) {
1270
+
1271
+ "use strict";
1272
+
1273
+ /**
1274
+ * Microsoft safe helper to spit out our little diagnostics information
1275
+ *
1276
+ * @ignore
1277
+ */
1278
+ function log(msg) {
1279
+ if(window.console && window.console.log) {
1280
+ console.log(msg);
1281
+ }
1282
+ }
1283
+
1284
+
1285
+ /**
1286
+ * jQuery.find() workaround for IE7
1287
+ *
1288
+ * If your selector is an pure tag id (#foo) IE7 finds nothing
1289
+ * if you do jQuery.find() in a specific jQuery context.
1290
+ *
1291
+ * This workaround makes a (false) assumptions
1292
+ * ids are always unique across the page.
1293
+ *
1294
+ * @ignore
1295
+ *
1296
+ * @param {jQuery} context jQuery context where we look child elements
1297
+ * @param {String} selector selector as a string
1298
+ * @return {jQuery} context.find() result
1299
+ */
1300
+ function safeFind(context, selector) {
1301
+
1302
+ if(selector[0] == "#") {
1303
+
1304
+ // Pseudo-check that this is a simple id selector
1305
+ // and not a complex jQuery selector
1306
+ if(selector.indexOf(" ") < 0) {
1307
+ return $(selector);
1308
+ }
1309
+ }
1310
+
1311
+ return context.find(selector);
1312
+ }
1313
+
1314
+ /**
1315
+ * Sample configuration object which can be passed to {@link jQuery.deps#enable}
1316
+ *
1317
+ * @class Configuration
1318
+ */
1319
+ var configExample = {
1320
+
1321
+ /**
1322
+ * @cfg show Callback function show(elem) for showing elements
1323
+ * @type {Function}
1324
+ */
1325
+ show : null,
1326
+
1327
+ /**
1328
+ * @cfg hide Callback function hide(elem) for hiding elements
1329
+ * @type {Function}
1330
+ */
1331
+ hide : null,
1332
+
1333
+ /**
1334
+ * @cfg log Write console.log() output of rule applying
1335
+ * @type {Boolean}
1336
+ */
1337
+ log : false,
1338
+
1339
+
1340
+ /**
1341
+ * @cfg checkTargets When ruleset is enabled, check that all controllers and controls referred by ruleset exist on the page.
1342
+ *
1343
+ * @default true
1344
+ *
1345
+ * @type {Boolean}
1346
+ */
1347
+ checkTargets : true
1348
+
1349
+ };
1350
+
1351
+ /**
1352
+ * Define one field inter-dependency rule.
1353
+ *
1354
+ * When condition is true then this input and all
1355
+ * its children rules' inputs are visible.
1356
+ *
1357
+ * Possible condition strings:
1358
+ *
1359
+ * * **==** Widget value must be equal to given value
1360
+ *
1361
+ * * **any** Widget value must be any of the values in the given value array
1362
+ *
1363
+ * * **non-any** Widget value must not be any of the values in the given value array
1364
+ *
1365
+ * * **!=** Widget value must not be qual to given value
1366
+ *
1367
+ * * **()** Call value as a function(context, controller, ourWidgetValue) and if it's true then the condition is true
1368
+ *
1369
+ * * **null** This input does not have any sub-conditions
1370
+ *
1371
+ *
1372
+ *
1373
+ */
1374
+ function Rule(controller, condition, value) {
1375
+ this.init(controller, condition, value);
1376
+ }
1377
+
1378
+ $.extend(Rule.prototype, {
1379
+
1380
+ /**
1381
+ * @method constructor
1382
+ *
1383
+ * @param {String} controller jQuery expression to match the `<input>` source
1384
+ *
1385
+ * @param {String} condition What input value must be that {@link Rule the rule takes effective}.
1386
+ *
1387
+ * @param value Matching value of **controller** when widgets become visible
1388
+ *
1389
+ */
1390
+ init : function(controller, condition, value) {
1391
+ this.controller = controller;
1392
+
1393
+ this.condition = condition;
1394
+
1395
+ this.value = value;
1396
+
1397
+ // Child rules
1398
+ this.rules = [];
1399
+
1400
+ // Controls shown/hidden by this rule
1401
+ this.controls = [];
1402
+ },
1403
+
1404
+ /**
1405
+ * Evaluation engine
1406
+ *
1407
+ * @param {String} condition Any of given conditions in Rule class description
1408
+ * @param {Object} val1 The base value we compare against
1409
+ * @param {Object} val2 Something we got out of input
1410
+ * @return {Boolean} true or false
1411
+ */
1412
+ evalCondition : function(context, control, condition, val1, val2) {
1413
+
1414
+ /**
1415
+ *
1416
+ * ShapedPlugin Framework
1417
+ * Added new condition for ShapedPlugin Framework
1418
+ *
1419
+ * @since 1.0.0
1420
+ * @version 1.0.0
1421
+ *
1422
+ */
1423
+ if(condition == "==") {
1424
+ return this.checkBoolean(val1) == this.checkBoolean(val2);
1425
+ } else if(condition == "!=") {
1426
+ return this.checkBoolean(val1) != this.checkBoolean(val2);
1427
+ } else if(condition == ">=") {
1428
+ return Number(val2) >= Number(val1);
1429
+ } else if(condition == "<=") {
1430
+ return Number(val2) <= Number(val1);
1431
+ } else if(condition == ">") {
1432
+ return Number(val2) > Number(val1);
1433
+ } else if(condition == "<") {
1434
+ return Number(val2) < Number(val1);
1435
+ } else if(condition == "()") {
1436
+ return window[val1](context, control, val2); // FIXED: function method
1437
+ } else if(condition == "any") {
1438
+ return $.inArray(val2, val1.split(',')) > -1;
1439
+ } else if(condition == "not-any") {
1440
+ return $.inArray(val2, val1.split(',')) == -1;
1441
+ } else {
1442
+ throw new Error("Unknown condition:" + condition);
1443
+ }
1444
+
1445
+ },
1446
+
1447
+ /**
1448
+ *
1449
+ * ShapedPlugin Framework
1450
+ * Added Boolean value type checker
1451
+ *
1452
+ * @since 1.0.0
1453
+ * @version 1.0.0
1454
+ *
1455
+ */
1456
+ checkBoolean: function(value) {
1457
+
1458
+ switch(value) {
1459
+
1460
+ case true:
1461
+ case 'true':
1462
+ case 1:
1463
+ case '1':
1464
+ //case 'on':
1465
+ //case 'yes':
1466
+ value = true;
1467
+ break;
1468
+
1469
+ case false:
1470
+ case 'false':
1471
+ case 0:
1472
+ case '0':
1473
+ //case 'off':
1474
+ //case 'no':
1475
+ value = false;
1476
+ break;
1477
+
1478
+ }
1479
+
1480
+ return value;
1481
+ },
1482
+
1483
+ /**
1484
+ * Evaluate the condition of this rule in given jQuery context.
1485
+ *
1486
+ * The widget value is extracted using getControlValue()
1487
+ *
1488
+ * @param {jQuery} context The jQuery selection in which this rule is evaluated.
1489
+ *
1490
+ */
1491
+ checkCondition : function(context, cfg) {
1492
+
1493
+ // We do not have condition set, we are always true
1494
+ if(!this.condition) {
1495
+ return true;
1496
+ }
1497
+
1498
+ var control = context.find(this.controller);
1499
+ if(control.size() === 0 && cfg.log) {
1500
+ log("Evaling condition: Could not find controller input " + this.controller);
1501
+ }
1502
+
1503
+ var val = this.getControlValue(context, control);
1504
+ if(cfg.log && val === undefined) {
1505
+ log("Evaling condition: Could not exctract value from input " + this.controller);
1506
+ }
1507
+
1508
+ if(val === undefined) {
1509
+ return false;
1510
+ }
1511
+
1512
+ val = this.normalizeValue(control, this.value, val);
1513
+
1514
+ return this.evalCondition(context, control, this.condition, this.value, val);
1515
+ },
1516
+
1517
+ /**
1518
+ * Make sure that what we read from input field is comparable against Javascript primitives
1519
+ *
1520
+ */
1521
+ normalizeValue : function(control, baseValue, val) {
1522
+
1523
+ if(typeof baseValue == "number") {
1524
+ // Make sure we compare numbers against numbers
1525
+ return parseFloat(val);
1526
+ }
1527
+
1528
+ return val;
1529
+ },
1530
+
1531
+ /**
1532
+ * Read value from a diffent HTML controls.
1533
+ *
1534
+ * Handle, text, checkbox, radio, select.
1535
+ *
1536
+ */
1537
+ getControlValue : function(context, control) {
1538
+
1539
+ /**
1540
+ *
1541
+ * ShapedPlugin Framework
1542
+ * Added multiple checkbox value control
1543
+ *
1544
+ * @since 1.0.0
1545
+ * @version 1.0.0
1546
+ *
1547
+ */
1548
+ if( ( control.attr("type") == "radio" || control.attr("type") == "checkbox" ) && control.size() > 1 ) {
1549
+ return control.filter(":checked").val();
1550
+ }
1551
+
1552
+ // Handle individual checkboxes & radio
1553
+ if ( control.attr("type") == "checkbox" || control.attr("type") == "radio" ) {
1554
+ return control.is(":checked");
1555
+ }
1556
+
1557
+ return control.val();
1558
+
1559
+ },
1560
+
1561
+ /**
1562
+ * Create a sub-rule.
1563
+ *
1564
+ * Example:
1565
+ *
1566
+ * var masterSwitch = ruleset.createRule("#mechanicalThrombectomyDevice")
1567
+ * var twoAttempts = masterSwitch.createRule("#numberOfAttempts", "==", 2);
1568
+ *
1569
+ * @return Rule instance
1570
+ */
1571
+ createRule : function(controller, condition, value) {
1572
+ var rule = new Rule(controller, condition, value);
1573
+ this.rules.push(rule);
1574
+ return rule;
1575
+ },
1576
+
1577
+ /**
1578
+ * Include a control in this rule.
1579
+ *
1580
+ * @param {String} input jQuery expression to match the input within ruleset context
1581
+ */
1582
+ include : function(input) {
1583
+
1584
+ if(!input) {
1585
+ throw new Error("Must give an input selector");
1586
+ }
1587
+
1588
+ this.controls.push(input);
1589
+ },
1590
+
1591
+ /**
1592
+ * Apply this rule to all controls in the given context
1593
+ *
1594
+ * @param {jQuery} context jQuery selection within we operate
1595
+ * @param {Object} cfg {@link Configuration} object or undefined
1596
+ * @param {Object} enforced Recursive rule enforcer: undefined to evaluate condition, true show always, false hide always
1597
+ *
1598
+ */
1599
+ applyRule : function(context, cfg, enforced) {
1600
+
1601
+ var result;
1602
+
1603
+ if(enforced === undefined) {
1604
+ result = this.checkCondition(context, cfg);
1605
+ } else {
1606
+ result = enforced;
1607
+ }
1608
+
1609
+ if(cfg.log) {
1610
+ log("Applying rule on " + this.controller + "==" + this.value + " enforced:" + enforced + " result:" + result);
1611
+ }
1612
+
1613
+ if(cfg.log && !this.controls.length) {
1614
+ log("Zero length controls slipped through");
1615
+ }
1616
+
1617
+ // Get show/hide callback functions
1618
+
1619
+ var show = cfg.show || function(control) {
1620
+ control.show();
1621
+ };
1622
+
1623
+ var hide = cfg.hide || function(control) {
1624
+ control.hide();
1625
+ };
1626
+
1627
+
1628
+ // Resolve controls from ids to jQuery selections
1629
+ // we are controlling in this context
1630
+ var controls = $.map(this.controls, function(elem, idx) {
1631
+ var control = context.find(elem);
1632
+ if(cfg.log && control.size() === 0) {
1633
+ log("Could not find element:" + elem);
1634
+ }
1635
+ return control;
1636
+ });
1637
+
1638
+ if(result) {
1639
+
1640
+ $(controls).each(function() {
1641
+
1642
+
1643
+ // Some friendly debug info
1644
+ if(cfg.log && $(this).size() === 0) {
1645
+ log("Control selection is empty when showing");
1646
+ log(this);
1647
+ }
1648
+
1649
+ show(this);
1650
+ });
1651
+
1652
+ // Evaluate all child rules
1653
+ $(this.rules).each(function() {
1654
+ this.applyRule(context, cfg);
1655
+ });
1656
+
1657
+ } else {
1658
+
1659
+ $(controls).each(function() {
1660
+
1661
+ // Some friendly debug info
1662
+ if(cfg.log && $(this).size() === 0) {
1663
+ log("Control selection is empty when hiding:");
1664
+ log(this);
1665
+ }
1666
+
1667
+ hide(this);
1668
+ });
1669
+
1670
+ // Supress all child rules
1671
+ $(this.rules).each(function() {
1672
+ this.applyRule(context, cfg, false);
1673
+ });
1674
+ }
1675
+ }
1676
+ });
1677
+
1678
+ /**
1679
+ * A class which manages interdependenice rules.
1680
+ */
1681
+ function Ruleset() {
1682
+
1683
+ // Hold a tree of rules
1684
+ this.rules = [];
1685
+ }
1686
+
1687
+ $.extend(Ruleset.prototype, {
1688
+
1689
+ /**
1690
+ * Add a new rule into this ruletset.
1691
+ *
1692
+ * See {@link Rule} about the contstruction parameters.
1693
+ * @return {Rule}
1694
+ */
1695
+ createRule : function(controller, condition, value) {
1696
+ var rule = new Rule(controller, condition, value);
1697
+ this.rules.push(rule);
1698
+ return rule;
1699
+ },
1700
+
1701
+ /**
1702
+ * Apply these rules on an element.
1703
+ *
1704
+ * @param {jQuery} context Selection we are dealing with
1705
+ *
1706
+ * @param cfg {@link Configuration} object or undefined.
1707
+ */
1708
+ applyRules: function(context, cfg) {
1709
+ var i;
1710
+
1711
+ cfg = cfg || {};
1712
+
1713
+ if(cfg.log) {
1714
+ log("Starting evaluation ruleset of " + this.rules.length + " rules");
1715
+ }
1716
+
1717
+ for(i=0; i<this.rules.length; i++) {
1718
+ this.rules[i].applyRule(context, cfg);
1719
+ }
1720
+ },
1721
+
1722
+ /**
1723
+ * Walk all rules and sub-rules in this ruleset
1724
+ * @param {Function} callback(rule)
1725
+ *
1726
+ * @return {Array} Rules as depth-first searched
1727
+ */
1728
+ walk : function() {
1729
+
1730
+ var rules = [];
1731
+
1732
+ function descent(rule) {
1733
+
1734
+ rules.push(rule);
1735
+
1736
+ $(rule.children).each(function() {
1737
+ descent(this);
1738
+ });
1739
+ }
1740
+
1741
+ $(this.rules).each(function() {
1742
+ descent(this);
1743
+ });
1744
+
1745
+ return rules;
1746
+ },
1747
+
1748
+
1749
+ /**
1750
+ * Check that all controllers and controls referred in ruleset exist.
1751
+ *
1752
+ * Throws an Error if any of them are missing.
1753
+ *
1754
+ * @param {jQuery} context jQuery selection of items
1755
+ *
1756
+ * @param {Configuration} cfg
1757
+ */
1758
+ checkTargets : function(context, cfg) {
1759
+
1760
+ var controls = 0;
1761
+ var rules = this.walk();
1762
+
1763
+ $(rules).each(function() {
1764
+
1765
+ if(context.find(this.controller).size() === 0) {
1766
+ throw new Error("Rule's controller does not exist:" + this.controller);
1767
+ }
1768
+
1769
+ if(this.controls.length === 0) {
1770
+ throw new Error("Rule has no controls:" + this);
1771
+ }
1772
+
1773
+ $(this.controls).each(function() {
1774
+
1775
+ if(safeFind(context, this) === 0) {
1776
+ throw new Error("Rule's target control " + this + " does not exist in context " + context.get(0));
1777
+ }
1778
+
1779
+ controls++;
1780
+ });
1781
+
1782
+ });
1783
+
1784
+ if(cfg.log) {
1785
+ log("Controller check ok, rules count " + rules.length + " controls count " + controls);
1786
+ }
1787
+
1788
+ },
1789
+
1790
+ /**
1791
+ * Make this ruleset effective on the whole page.
1792
+ *
1793
+ * Set event handler on **window.document** to catch all input events
1794
+ * and apply those events to defined rules.
1795
+ *
1796
+ * @param {Configuration} cfg {@link Configuration} object or undefined
1797
+ *
1798
+ */
1799
+ install : function(cfg) {
1800
+ $.deps.enable($(document.body), this, cfg);
1801
+ }
1802
+
1803
+ });
1804
+
1805
+ /**
1806
+ * jQuery interdependencie plug-in
1807
+ *
1808
+ * @class jQuery.deps
1809
+ *
1810
+ */
1811
+ var deps = {
1812
+
1813
+ /**
1814
+ * Create a new Ruleset instance.
1815
+ *
1816
+ * Example:
1817
+ *
1818
+ * $(document).ready(function() {
1819
+ * // Start creating a new ruleset
1820
+ * var ruleset = $.deps.createRuleset();
1821
+ *
1822
+ *
1823
+ * @return {Ruleset}
1824
+ */
1825
+ createRuleset : function() {
1826
+ return new Ruleset();
1827
+ },
1828
+
1829
+
1830
+ /**
1831
+ * Enable ruleset on a specific jQuery selection.
1832
+ *
1833
+ * Checks the existince of all ruleset controllers and controls
1834
+ * by default (see config).
1835
+ *
1836
+ * See possible IE event bubbling problems: http://stackoverflow.com/q/265074/315168
1837
+ *
1838
+ * @param {Object} selection jQuery selection in where we monitor all change events. All controls and controllers must exist within this selection.
1839
+ * @param {Ruleset} ruleset
1840
+ * @param {Configuration} cfg
1841
+ */
1842
+ enable : function(selection, ruleset, cfg) {
1843
+
1844
+ cfg = cfg || {};
1845
+
1846
+ if(cfg.checkTargets || cfg.checkTargets === undefined) {
1847
+ ruleset.checkTargets(selection, cfg);
1848
+ }
1849
+
1850
+ var self = this;
1851
+
1852
+ if(cfg.log) {
1853
+ log("Enabling dependency change monitoring on " + selection.get(0));
1854
+ }
1855
+
1856
+ // Namespace our handler to avoid conflicts
1857
+ //
1858
+ var handler = function() { ruleset.applyRules(selection, cfg); };
1859
+ var val = selection.on ? selection.on("change.deps", null, null, handler) : selection.live("change.deps", handler);
1860
+
1861
+ ruleset.applyRules(selection, cfg);
1862
+
1863
+ return val;
1864
+ }
1865
+ };
1866
+
1867
+ $.deps = deps;
1868
+
1869
+ })(jQuery);
1870
+ ;/* ========================================================================
1871
+ * Bootstrap: transition.js v3.3.4
1872
+ * http://getbootstrap.com/javascript/#transitions
1873
+ * ========================================================================
1874
+ * Copyright 2011-2015 Twitter, Inc.
1875
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1876
+ * ========================================================================
1877
+ * Changed function name for avoid conflict
1878
+ * ======================================================================== */
1879
+ +function ($) {
1880
+ 'use strict';
1881
+
1882
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
1883
+ // ============================================================
1884
+
1885
+ function transitionEnd() {
1886
+ var el = document.createElement('bootstrap')
1887
+
1888
+ var transEndEventNames = {
1889
+ WebkitTransition : 'webkitTransitionEnd',
1890
+ MozTransition : 'transitionend',
1891
+ OTransition : 'oTransitionEnd otransitionend',
1892
+ transition : 'transitionend'
1893
+ }
1894
+
1895
+ for (var name in transEndEventNames) {
1896
+ if (el.style[name] !== undefined) {
1897
+ return { end: transEndEventNames[name] }
1898
+ }
1899
+ }
1900
+
1901
+ return false // explicit for ie8 ( ._.)
1902
+ }
1903
+
1904
+ // http://blog.alexmaccaw.com/css-transitions
1905
+ $.fn.CSemulateTransitionEnd = function (duration) {
1906
+ var called = false
1907
+ var $el = this
1908
+ $(this).one('bsTransitionEnd', function () { called = true })
1909
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
1910
+ setTimeout(callback, duration)
1911
+ return this
1912
+ }
1913
+
1914
+ $(function () {
1915
+ $.support.transition = transitionEnd()
1916
+
1917
+ if (!$.support.transition) return
1918
+
1919
+ $.event.special.bsTransitionEnd = {
1920
+ bindType: $.support.transition.end,
1921
+ delegateType: $.support.transition.end,
1922
+ handle: function (e) {
1923
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
1924
+ }
1925
+ }
1926
+ })
1927
+
1928
+ }(jQuery);
1929
+
1930
+ /* ========================================================================
1931
+ * Bootstrap: tooltip.js v3.3.4
1932
+ * http://getbootstrap.com/javascript/#tooltip
1933
+ * Inspired by the original jQuery.tipsy by Jason Frame
1934
+ * ========================================================================
1935
+ * Copyright 2011-2015 Twitter, Inc.
1936
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1937
+ * ========================================================================
1938
+ * Changed function and class names for avoid conflict
1939
+ * ======================================================================== */
1940
+ +function ($) {
1941
+ 'use strict';
1942
+
1943
+ // TOOLTIP PUBLIC CLASS DEFINITION
1944
+ // ===============================
1945
+
1946
+ var SPTooltip = function (element, options) {
1947
+ this.type = null
1948
+ this.options = null
1949
+ this.enabled = null
1950
+ this.timeout = null
1951
+ this.hoverState = null
1952
+ this.$element = null
1953
+
1954
+ this.init('sptooltip', element, options)
1955
+ }
1956
+
1957
+ SPTooltip.VERSION = '3.3.4'
1958
+
1959
+ SPTooltip.TRANSITION_DURATION = 150
1960
+
1961
+ SPTooltip.DEFAULTS = {
1962
+ animation: true,
1963
+ placement: 'top',
1964
+ selector: false,
1965
+ template: '<div class="sp-tooltip" role="tooltip"><div class="sp-tooltip-arrow"></div><div class="sp-tooltip-inner"></div></div>',
1966
+ trigger: 'hover focus',
1967
+ title: '',
1968
+ delay: 0,
1969
+ html: false,
1970
+ container: false,
1971
+ viewport: {
1972
+ selector: 'body',
1973
+ padding: 0
1974
+ }
1975
+ }
1976
+
1977
+ SPTooltip.prototype.init = function (type, element, options) {
1978
+ this.enabled = true
1979
+ this.type = type
1980
+ this.$element = $(element)
1981
+ this.options = this.getOptions(options)
1982
+ this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
1983
+
1984
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
1985
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
1986
+ }
1987
+
1988
+ var triggers = this.options.trigger.split(' ')
1989
+
1990
+ for (var i = triggers.length; i--;) {
1991
+ var trigger = triggers[i]
1992
+
1993
+ if (trigger == 'click') {
1994
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1995
+ } else if (trigger != 'manual') {
1996
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
1997
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
1998
+
1999
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
2000
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
2001
+ }
2002
+ }
2003
+
2004
+ this.options.selector ?
2005
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
2006
+ this.fixTitle()
2007
+ }
2008
+
2009
+ SPTooltip.prototype.getDefaults = function () {
2010
+ return SPTooltip.DEFAULTS
2011
+ }
2012
+
2013
+ SPTooltip.prototype.getOptions = function (options) {
2014
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
2015
+
2016
+ if (options.delay && typeof options.delay == 'number') {
2017
+ options.delay = {
2018
+ show: options.delay,
2019
+ hide: options.delay
2020
+ }
2021
+ }
2022
+
2023
+ return options
2024
+ }
2025
+
2026
+ SPTooltip.prototype.getDelegateOptions = function () {
2027
+ var options = {}
2028
+ var defaults = this.getDefaults()
2029
+
2030
+ this._options && $.each(this._options, function (key, value) {
2031
+ if (defaults[key] != value) options[key] = value
2032
+ })
2033
+
2034
+ return options
2035
+ }
2036
+
2037
+ SPTooltip.prototype.enter = function (obj) {
2038
+ var self = obj instanceof this.constructor ?
2039
+ obj : $(obj.currentTarget).data('bs.' + this.type)
2040
+
2041
+ if (self && self.$tip && self.$tip.is(':visible')) {
2042
+ self.hoverState = 'in'
2043
+ return
2044
+ }
2045
+
2046
+ if (!self) {
2047
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
2048
+ $(obj.currentTarget).data('bs.' + this.type, self)
2049
+ }
2050
+
2051
+ clearTimeout(self.timeout)
2052
+
2053
+ self.hoverState = 'in'
2054
+
2055
+ if (!self.options.delay || !self.options.delay.show) return self.show()
2056
+
2057
+ self.timeout = setTimeout(function () {
2058
+ if (self.hoverState == 'in') self.show()
2059
+ }, self.options.delay.show)
2060
+ }
2061
+
2062
+ SPTooltip.prototype.leave = function (obj) {
2063
+ var self = obj instanceof this.constructor ?
2064
+ obj : $(obj.currentTarget).data('bs.' + this.type)
2065
+
2066
+ if (!self) {
2067
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
2068
+ $(obj.currentTarget).data('bs.' + this.type, self)
2069
+ }
2070
+
2071
+ clearTimeout(self.timeout)
2072
+
2073
+ self.hoverState = 'out'
2074
+
2075
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
2076
+
2077
+ self.timeout = setTimeout(function () {
2078
+ if (self.hoverState == 'out') self.hide()
2079
+ }, self.options.delay.hide)
2080
+ }
2081
+
2082
+ SPTooltip.prototype.show = function () {
2083
+ var e = $.Event('show.bs.' + this.type)
2084
+
2085
+ if (this.hasContent() && this.enabled) {
2086
+ this.$element.trigger(e)
2087
+
2088
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
2089
+ if (e.isDefaultPrevented() || !inDom) return
2090
+ var that = this
2091
+
2092
+ var $tip = this.tip()
2093
+
2094
+ var tipId = this.getUID(this.type)
2095
+
2096
+ this.setContent()
2097
+ $tip.attr('id', tipId)
2098
+ this.$element.attr('aria-describedby', tipId)
2099
+
2100
+ if (this.options.animation) $tip.addClass('fade')
2101
+
2102
+ var placement = typeof this.options.placement == 'function' ?
2103
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
2104
+ this.options.placement
2105
+
2106
+ var autoToken = /\s?auto?\s?/i
2107
+ var autoPlace = autoToken.test(placement)
2108
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
2109
+
2110
+ $tip
2111
+ .detach()
2112
+ .css({ top: 0, left: 0, display: 'block' })
2113
+ .addClass(placement)
2114
+ .data('bs.' + this.type, this)
2115
+
2116
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
2117
+
2118
+ var pos = this.getPosition()
2119
+ var actualWidth = $tip[0].offsetWidth
2120
+ var actualHeight = $tip[0].offsetHeight
2121
+
2122
+ if (autoPlace) {
2123
+ var orgPlacement = placement
2124
+ var $container = this.options.container ? $(this.options.container) : this.$element.parent()
2125
+ var containerDim = this.getPosition($container)
2126
+
2127
+ placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
2128
+ placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
2129
+ placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
2130
+ placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
2131
+ placement
2132
+
2133
+ $tip
2134
+ .removeClass(orgPlacement)
2135
+ .addClass(placement)
2136
+ }
2137
+
2138
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
2139
+
2140
+ this.applyPlacement(calculatedOffset, placement)
2141
+
2142
+ var complete = function () {
2143
+ var prevHoverState = that.hoverState
2144
+ that.$element.trigger('shown.bs.' + that.type)
2145
+ that.hoverState = null
2146
+
2147
+ if (prevHoverState == 'out') that.leave(that)
2148
+ }
2149
+
2150
+ $.support.transition && this.$tip.hasClass('fade') ?
2151
+ $tip
2152
+ .one('bsTransitionEnd', complete)
2153
+ .CSemulateTransitionEnd(SPTooltip.TRANSITION_DURATION) :
2154
+ complete()
2155
+ }
2156
+ }
2157
+
2158
+ SPTooltip.prototype.applyPlacement = function (offset, placement) {
2159
+ var $tip = this.tip()
2160
+ var width = $tip[0].offsetWidth
2161
+ var height = $tip[0].offsetHeight
2162
+
2163
+ // manually read margins because getBoundingClientRect includes difference
2164
+ var marginTop = parseInt($tip.css('margin-top'), 10)
2165
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
2166
+
2167
+ // we must check for NaN for ie 8/9
2168
+ if (isNaN(marginTop)) marginTop = 0
2169
+ if (isNaN(marginLeft)) marginLeft = 0
2170
+
2171
+ offset.top = offset.top + marginTop
2172
+ offset.left = offset.left + marginLeft
2173
+
2174
+ // $.fn.offset doesn't round pixel values
2175
+ // so we use setOffset directly with our own function B-0
2176
+ $.offset.setOffset($tip[0], $.extend({
2177
+ using: function (props) {
2178
+ $tip.css({
2179
+ top: Math.round(props.top),
2180
+ left: Math.round(props.left)
2181
+ })
2182
+ }
2183
+ }, offset), 0)
2184
+
2185
+ $tip.addClass('in')
2186
+
2187
+ // check to see if placing tip in new offset caused the tip to resize itself
2188
+ var actualWidth = $tip[0].offsetWidth
2189
+ var actualHeight = $tip[0].offsetHeight
2190
+
2191
+ if (placement == 'top' && actualHeight != height) {
2192
+ offset.top = offset.top + height - actualHeight
2193
+ }
2194
+
2195
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
2196
+
2197
+ if (delta.left) offset.left += delta.left
2198
+ else offset.top += delta.top
2199
+
2200
+ var isVertical = /top|bottom/.test(placement)
2201
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
2202
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
2203
+
2204
+ $tip.offset(offset)
2205
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
2206
+ }
2207
+
2208
+ SPTooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
2209
+ this.arrow()
2210
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
2211
+ .css(isVertical ? 'top' : 'left', '')
2212
+ }
2213
+
2214
+ SPTooltip.prototype.setContent = function () {
2215
+ var $tip = this.tip()
2216
+ var title = this.getTitle()
2217
+
2218
+ $tip.find('.sp-tooltip-inner')[this.options.html ? 'html' : 'text'](title)
2219
+ $tip.removeClass('fade in top bottom left right')
2220
+ }
2221
+
2222
+ SPTooltip.prototype.hide = function (callback) {
2223
+ var that = this
2224
+ var $tip = $(this.$tip)
2225
+ var e = $.Event('hide.bs.' + this.type)
2226
+
2227
+ function complete() {
2228
+ if (that.hoverState != 'in') $tip.detach()
2229
+ that.$element
2230
+ .removeAttr('aria-describedby')
2231
+ .trigger('hidden.bs.' + that.type)
2232
+ callback && callback()
2233
+ }
2234
+
2235
+ this.$element.trigger(e)
2236
+
2237
+ if (e.isDefaultPrevented()) return
2238
+
2239
+ $tip.removeClass('in')
2240
+
2241
+ $.support.transition && $tip.hasClass('fade') ?
2242
+ $tip
2243
+ .one('bsTransitionEnd', complete)
2244
+ .CSemulateTransitionEnd(SPTooltip.TRANSITION_DURATION) :
2245
+ complete()
2246
+
2247
+ this.hoverState = null
2248
+
2249
+ return this
2250
+ }
2251
+
2252
+ SPTooltip.prototype.fixTitle = function () {
2253
+ var $e = this.$element
2254
+ if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
2255
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
2256
+ }
2257
+ }
2258
+
2259
+ SPTooltip.prototype.hasContent = function () {
2260
+ return this.getTitle()
2261
+ }
2262
+
2263
+ SPTooltip.prototype.getPosition = function ($element) {
2264
+ $element = $element || this.$element
2265
+
2266
+ var el = $element[0]
2267
+ var isBody = el.tagName == 'BODY'
2268
+
2269
+ var elRect = el.getBoundingClientRect()
2270
+ if (elRect.width == null) {
2271
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
2272
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
2273
+ }
2274
+ var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
2275
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
2276
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
2277
+
2278
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
2279
+ }
2280
+
2281
+ SPTooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
2282
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
2283
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
2284
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
2285
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
2286
+
2287
+ }
2288
+
2289
+ SPTooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
2290
+ var delta = { top: 0, left: 0 }
2291
+ if (!this.$viewport) return delta
2292
+
2293
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
2294
+ var viewportDimensions = this.getPosition(this.$viewport)
2295
+
2296
+ if (/right|left/.test(placement)) {
2297
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
2298
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
2299
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
2300
+ delta.top = viewportDimensions.top - topEdgeOffset
2301
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
2302
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
2303
+ }
2304
+ } else {
2305
+ var leftEdgeOffset = pos.left - viewportPadding
2306
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
2307
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
2308
+ delta.left = viewportDimensions.left - leftEdgeOffset
2309
+ } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
2310
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
2311
+ }
2312
+ }
2313
+
2314
+ return delta
2315
+ }
2316
+
2317
+ SPTooltip.prototype.getTitle = function () {
2318
+ var title
2319
+ var $e = this.$element
2320
+ var o = this.options
2321
+
2322
+ title = $e.attr('data-original-title')
2323
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
2324
+
2325
+ return title
2326
+ }
2327
+
2328
+ SPTooltip.prototype.getUID = function (prefix) {
2329
+ do prefix += ~~(Math.random() * 1000000)
2330
+ while (document.getElementById(prefix))
2331
+ return prefix
2332
+ }
2333
+
2334
+ SPTooltip.prototype.tip = function () {
2335
+ return (this.$tip = this.$tip || $(this.options.template))
2336
+ }
2337
+
2338
+ SPTooltip.prototype.arrow = function () {
2339
+ return (this.$arrow = this.$arrow || this.tip().find('.sp-tooltip-arrow'))
2340
+ }
2341
+
2342
+ SPTooltip.prototype.enable = function () {
2343
+ this.enabled = true
2344
+ }
2345
+
2346
+ SPTooltip.prototype.disable = function () {
2347
+ this.enabled = false
2348
+ }
2349
+
2350
+ SPTooltip.prototype.toggleEnabled = function () {
2351
+ this.enabled = !this.enabled
2352
+ }
2353
+
2354
+ SPTooltip.prototype.toggle = function (e) {
2355
+ var self = this
2356
+ if (e) {
2357
+ self = $(e.currentTarget).data('bs.' + this.type)
2358
+ if (!self) {
2359
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
2360
+ $(e.currentTarget).data('bs.' + this.type, self)
2361
+ }
2362
+ }
2363
+
2364
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
2365
+ }
2366
+
2367
+ SPTooltip.prototype.destroy = function () {
2368
+ var that = this
2369
+ clearTimeout(this.timeout)
2370
+ this.hide(function () {
2371
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
2372
+ })
2373
+ }
2374
+
2375
+
2376
+ // TOOLTIP PLUGIN DEFINITION
2377
+ // =========================
2378
+
2379
+ function Plugin(option) {
2380
+ return this.each(function () {
2381
+ var $this = $(this)
2382
+ var data = $this.data('bs.sptooltip')
2383
+ var options = typeof option == 'object' && option
2384
+
2385
+ if (!data && /destroy|hide/.test(option)) return
2386
+ if (!data) $this.data('bs.sptooltip', (data = new SPTooltip(this, options)))
2387
+ if (typeof option == 'string') data[option]()
2388
+ })
2389
+ }
2390
+
2391
+ var old = $.fn.sptooltip
2392
+
2393
+ $.fn.sptooltip = Plugin
2394
+ $.fn.sptooltip.Constructor = SPTooltip
2395
+
2396
+
2397
+ // TOOLTIP NO CONFLICT
2398
+ // ===================
2399
+
2400
+ $.fn.sptooltip.noConflict = function () {
2401
+ $.fn.sptooltip = old
2402
+ return this
2403
+ }
2404
+
2405
+ }(jQuery);
admin/views/meta-box/assets/js/sp-plugins.min.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /* ShapedPlugin Framework | A Lightweight and easy-to-use WordPress Options Framework - v1.0.0*/
2
+ (function(){var a,b,c,d,e,f={}.hasOwnProperty,g=function(a,b){function c(){this.constructor=a}for(var d in b)f.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};d=function(){function a(){this.options_index=0,this.parsed=[]}return a.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},a.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),title:a.title?a.title:void 0,children:0,disabled:a.disabled,classes:a.className}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},a.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,title:a.title?a.title:void 0,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,group_label:null!=b?this.parsed[b].label:null,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},a.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&amp;"})):a},a}(),d.select_to_array=function(a){var b,c,e,f,g;for(c=new d,g=a.childNodes,e=0,f=g.length;f>e;e++)b=g[e],c.add_node(b);return c.parsed},b=function(){function a(b,c){this.form_field=b,this.options=null!=c?c:{},a.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers(),this.on_ready())}return a.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0,this.include_group_label_in_selected=this.options.include_group_label_in_selected||!1},a.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||a.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||a.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||a.default_no_result_text},a.prototype.choice_label=function(a){return this.include_group_label_in_selected&&null!=a.group_label?"<b class='group-name'>"+a.group_label+"</b>"+a.html:a.html},a.prototype.mouse_enter=function(){return this.mouse_on_container=!0},a.prototype.mouse_leave=function(){return this.mouse_on_container=!1},a.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},a.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},a.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(this.choice_label(c)));return b},a.prototype.result_add_option=function(a){var b,c;return a.search_match&&this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):""},a.prototype.result_add_group=function(a){var b,c;return(a.search_match||a.group_match)&&a.active_options>0?(b=[],b.push("group-result"),a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):""},a.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},a.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(a.selected?a.selected=!1:void 0);return e},a.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},a.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},a.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l;for(this.no_results_clear(),d=0,f=this.get_search_text(),a=f.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),i=new RegExp(a,"i"),c=this.get_search_regex(a),l=this.results_data,j=0,k=l.length;k>j;j++)b=l[j],b.search_match=!1,e=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(e=this.results_data[b.group_array_index],0===e.active_options&&e.search_match&&(d+=1),e.active_options+=1),b.search_text=b.group?b.label:b.html,(!b.group||this.group_search)&&(b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(d+=1),b.search_match?(f.length&&(g=b.search_text.search(i),h=b.search_text.substr(0,g+f.length)+"</em>"+b.search_text.substr(g+f.length),b.search_text=h.substr(0,g)+"<em>"+h.substr(g)),null!=e&&(e.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>d&&f.length?(this.update_results_content(""),this.no_results(f)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},a.prototype.get_search_regex=function(a){var b;return b=this.search_contains?"":"^",new RegExp(b+a,"i")},a.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},a.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},a.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},a.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},a.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},a.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},a.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},a.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},a.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},a.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},a.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},a.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},a.default_multiple_text="Select Some Options",a.default_single_text="Select an Option",a.default_no_result_text="No results match",a}(),a=jQuery,a.fn.extend({chosen:function(d){return b.browser_is_supported()?this.each(function(){var b,e;b=a(this),e=b.data("chosen"),"destroy"===d&&e instanceof c?e.destroy():e instanceof c||b.data("chosen",new c(this,d))}):this}}),c=function(b){function c(){return e=c.__super__.constructor.apply(this,arguments)}return g(c,b),c.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},c.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("<div />",c),this.container.html(this.is_multiple?'<ul class="chosen-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>':'<a class="chosen-single chosen-default" tabindex="-1"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>'),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},c.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},c.prototype.register_observers=function(){var a=this;return this.container.bind("touchstart.chosen",function(b){return a.container_mousedown(b),b.preventDefault()}),this.container.bind("touchend.chosen",function(b){return a.container_mouseup(b),b.preventDefault()}),this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.search_results.bind("touchstart.chosen",function(b){a.search_results_touchstart(b)}),this.search_results.bind("touchmove.chosen",function(b){a.search_results_touchmove(b)}),this.search_results.bind("touchend.chosen",function(b){a.search_results_touchend(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.form_field_jq.bind("chosen:close.chosen",function(b){a.input_blur(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.search_field.bind("cut.chosen",function(b){a.clipboard_event_checker(b)}),this.search_field.bind("paste.chosen",function(b){a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},c.prototype.destroy=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},c.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},c.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(this.container[0].ownerDocument).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},c.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},c.prototype.search_results_mousewheel=function(a){var b;return a.originalEvent&&(b=a.originalEvent.deltaY||-a.originalEvent.wheelDelta||a.originalEvent.detail),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},c.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},c.prototype.close_field=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},c.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},c.prototype.test_active_click=function(b){var c;return c=a(b.target).closest(".chosen-container"),c.length&&this.container[0]===c[0]?this.active_field=!0:this.close_field()},c.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=d.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},c.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},c.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},c.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},c.prototype.update_results_content=function(a){return this.search_results.html(a)},c.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},c.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},c.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},c.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},c.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},c.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},c.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},c.prototype.choice_build=function(b){var c,d,e=this;return c=a("<li />",{"class":"search-choice"}).html("<span>"+this.choice_label(b)+"</span>"),b.disabled?c.addClass("search-choice-disabled"):(d=a("<a />",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},c.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},c.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},c.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},c.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},c.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):this.reset_single_select_options(),b.addClass("result-selected"),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(this.choice_label(c)),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,a.preventDefault(),this.search_field_scale())):void 0},c.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").html(a)},c.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},c.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after('<abbr class="search-choice-close"></abbr>'),this.selected_item.addClass("chosen-single-with-deselect")):void 0},c.prototype.get_search_text=function(){return a("<div/>").text(a.trim(this.search_field.val())).html()},c.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},c.prototype.no_results=function(b){var c;return c=a('<li class="no-results">'+this.results_none_found+' "<span></span>"</li>'),c.find("span").first().html(b),this.search_results.append(c),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},c.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},c.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},c.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},c.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},c.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},c.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:this.results_showing&&a.preventDefault();break;case 32:this.disable_search&&a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},c.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("<div />",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},c}(b)}).call(this),function(a){a.fn.addBack=a.fn.addBack||a.fn.andSelf,a.fn.extend({actual:function(b,c){if(!this[b])throw'$.actual => The jQuery method "'+b+'" you called does not exist';var d,e,f={absolute:!1,clone:!1,includeMargin:!1},g=a.extend(f,c),h=this.eq(0);if(g.clone===!0)d=function(){var a="position: absolute !important; top: -1000 !important; ";h=h.clone().attr("style",a).appendTo("body")},e=function(){h.remove()};else{var i,j=[],k="";d=function(){i=h.parents().addBack().filter(":hidden"),k+="visibility: hidden !important; display: block !important; ",g.absolute===!0&&(k+="position: absolute !important; "),i.each(function(){var b=a(this),c=b.attr("style");j.push(c),b.attr("style",c?c+";"+k:k)})},e=function(){i.each(function(b){var c=a(this),d=j[b];void 0===d?c.removeAttr("style"):c.attr("style",d)})}}d();var l=/(outer)/.test(b)?h[b](g.includeMargin):h[b]();return e(),l}})}(jQuery),function(a){"use strict";function b(a){window.console&&window.console.log&&console.log(a)}function c(b,c){return"#"==c[0]&&c.indexOf(" ")<0?a(c):b.find(c)}function d(a,b,c){this.init(a,b,c)}function e(){this.rules=[]}a.extend(d.prototype,{init:function(a,b,c){this.controller=a,this.condition=b,this.value=c,this.rules=[],this.controls=[]},evalCondition:function(b,c,d,e,f){if("=="==d)return this.checkBoolean(e)==this.checkBoolean(f);if("!="==d)return this.checkBoolean(e)!=this.checkBoolean(f);if(">="==d)return Number(f)>=Number(e);if("<="==d)return Number(f)<=Number(e);if(">"==d)return Number(f)>Number(e);if("<"==d)return Number(f)<Number(e);if("()"==d)return window[e](b,c,f);if("any"==d)return a.inArray(f,e.split(","))>-1;if("not-any"==d)return-1==a.inArray(f,e.split(","));throw new Error("Unknown condition:"+d)},checkBoolean:function(a){switch(a){case!0:case"true":case 1:case"1":a=!0;break;case!1:case"false":case 0:case"0":a=!1}return a},checkCondition:function(a,c){if(!this.condition)return!0;var d=a.find(this.controller);0===d.size()&&c.log&&b("Evaling condition: Could not find controller input "+this.controller);var e=this.getControlValue(a,d);return c.log&&void 0===e&&b("Evaling condition: Could not exctract value from input "+this.controller),void 0===e?!1:(e=this.normalizeValue(d,this.value,e),this.evalCondition(a,d,this.condition,this.value,e))},normalizeValue:function(a,b,c){return"number"==typeof b?parseFloat(c):c},getControlValue:function(a,b){return("radio"==b.attr("type")||"checkbox"==b.attr("type"))&&b.size()>1?b.filter(":checked").val():"checkbox"==b.attr("type")||"radio"==b.attr("type")?b.is(":checked"):b.val()},createRule:function(a,b,c){var e=new d(a,b,c);return this.rules.push(e),e},include:function(a){if(!a)throw new Error("Must give an input selector");this.controls.push(a)},applyRule:function(c,d,e){var f;f=void 0===e?this.checkCondition(c,d):e,d.log&&b("Applying rule on "+this.controller+"=="+this.value+" enforced:"+e+" result:"+f),d.log&&!this.controls.length&&b("Zero length controls slipped through");var g=d.show||function(a){a.show()},h=d.hide||function(a){a.hide()},i=a.map(this.controls,function(a){var e=c.find(a);return d.log&&0===e.size()&&b("Could not find element:"+a),e});f?(a(i).each(function(){d.log&&0===a(this).size()&&(b("Control selection is empty when showing"),b(this)),g(this)}),a(this.rules).each(function(){this.applyRule(c,d)})):(a(i).each(function(){d.log&&0===a(this).size()&&(b("Control selection is empty when hiding:"),b(this)),h(this)}),a(this.rules).each(function(){this.applyRule(c,d,!1)}))}}),a.extend(e.prototype,{createRule:function(a,b,c){var e=new d(a,b,c);return this.rules.push(e),e},applyRules:function(a,c){var d;for(c=c||{},c.log&&b("Starting evaluation ruleset of "+this.rules.length+" rules"),d=0;d<this.rules.length;d++)this.rules[d].applyRule(a,c)},walk:function(){function b(d){c.push(d),a(d.children).each(function(){b(this)})}var c=[];return a(this.rules).each(function(){b(this)}),c},checkTargets:function(d,e){var f=0,g=this.walk();a(g).each(function(){if(0===d.find(this.controller).size())throw new Error("Rule's controller does not exist:"+this.controller);if(0===this.controls.length)throw new Error("Rule has no controls:"+this);a(this.controls).each(function(){if(0===c(d,this))throw new Error("Rule's target control "+this+" does not exist in context "+d.get(0));f++})}),e.log&&b("Controller check ok, rules count "+g.length+" controls count "+f)},install:function(b){a.deps.enable(a(document.body),this,b)}});var f={createRuleset:function(){return new e},enable:function(a,c,d){d=d||{},(d.checkTargets||void 0===d.checkTargets)&&c.checkTargets(a,d);d.log&&b("Enabling dependency change monitoring on "+a.get(0));var e=function(){c.applyRules(a,d)},f=a.on?a.on("change.deps",null,null,e):a.live("change.deps",e);return c.applyRules(a,d),f}};a.deps=f}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.CSemulateTransitionEnd=function(b){var c=!1,d=this;
3
+ a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.sptooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.sptooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("sptooltip",a,b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="sp-tooltip" role="tooltip"><div class="sp-tooltip-arrow"></div><div class="sp-tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).CSemulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".sp-tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).CSemulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".sp-tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.sptooltip;a.fn.sptooltip=b,a.fn.sptooltip.Constructor=c,a.fn.sptooltip.noConflict=function(){return a.fn.sptooltip=d,this}}(jQuery);
admin/views/meta-box/classes/abstract.class.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) { die; } // Cannot access pages directly.
2
+ /**
3
+ *
4
+ * Abstract Class
5
+ * A helper class for action and filter hooks
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ *
10
+ */
11
+ abstract class SP_WPCP_Framework_Abstract {
12
+
13
+ public function __construct() {}
14
+
15
+ public function addAction( $hook, $function_to_add, $priority = 30, $accepted_args = 1 ) {
16
+ add_action( $hook, array( &$this, $function_to_add), $priority, $accepted_args );
17
+ }
18
+
19
+ public function addFilter( $tag, $function_to_add, $priority = 30, $accepted_args = 1 ) {
20
+ add_action( $tag, array( &$this, $function_to_add), $priority, $accepted_args );
21
+ }
22
+
23
+ }
admin/views/meta-box/classes/framework.class.php ADDED
@@ -0,0 +1,484 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Framework Class
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework extends SP_WPCP_Framework_Abstract {
11
+
12
+ /**
13
+ *
14
+ * Option database/data name
15
+ *
16
+ * @access public
17
+ * @var string
18
+ */
19
+ public $unique = SP_OPTION;
20
+
21
+ /**
22
+ *
23
+ * Settings
24
+ *
25
+ * @access public
26
+ * @var array
27
+ */
28
+ public $settings = array();
29
+
30
+ /**
31
+ *
32
+ * Options tab
33
+ *
34
+ * @access public
35
+ * @var array
36
+ */
37
+ public $options = array();
38
+
39
+ /**
40
+ *
41
+ * Options section
42
+ *
43
+ * @access public
44
+ * @var array
45
+ */
46
+ public $sections = array();
47
+
48
+ /**
49
+ *
50
+ * Options store
51
+ *
52
+ * @access public
53
+ * @var array
54
+ */
55
+ public $get_option = array();
56
+
57
+ /**
58
+ *
59
+ * Instance
60
+ *
61
+ * @access private
62
+ * @var class
63
+ */
64
+ private static $instance = null;
65
+
66
+ /**
67
+ * Run framework construct.
68
+ *
69
+ * @param string $settings All the settings.
70
+ * @param string $options All the options.
71
+ */
72
+ public function __construct( $settings, $options ) {
73
+
74
+ $this->settings = apply_filters( 'sp_framework_settings', $settings );
75
+ $this->options = apply_filters( 'sp_framework_options', $options );
76
+
77
+ if ( ! empty( $this->options ) ) {
78
+
79
+ $this->sections = $this->get_sections();
80
+ $this->get_option = get_option( SP_OPTION );
81
+ $this->addAction( 'admin_init', 'settings_api' );
82
+ $this->addAction( 'admin_menu', 'admin_menu' );
83
+
84
+ }
85
+
86
+ }
87
+
88
+ /**
89
+ * Instance
90
+ *
91
+ * @param array $settings Settings array.
92
+ * @param array $options Options array.
93
+ * @return statement
94
+ */
95
+ public static function instance( $settings = array(), $options = array() ) {
96
+ if ( is_null( self::$instance ) && SP_WPCP_F_ACTIVE_FRAMEWORK ) {
97
+ self::$instance = new self( $settings, $options );
98
+ }
99
+ return self::$instance;
100
+ }
101
+
102
+ /**
103
+ * Get sections
104
+ *
105
+ * @return statement
106
+ */
107
+ public function get_sections() {
108
+
109
+ $sections = array();
110
+
111
+ foreach ( $this->options as $key => $value ) {
112
+
113
+ if ( isset( $value['sections'] ) ) {
114
+
115
+ foreach ( $value['sections'] as $section ) {
116
+
117
+ if ( isset( $section['fields'] ) ) {
118
+ $sections[] = $section;
119
+ }
120
+ }
121
+ } else {
122
+
123
+ if ( isset( $value['fields'] ) ) {
124
+ $sections[] = $value;
125
+ }
126
+ }
127
+ }
128
+
129
+ return $sections;
130
+
131
+ }
132
+
133
+ /**
134
+ * Wp settings api
135
+ *
136
+ * @return void
137
+ */
138
+ public function settings_api() {
139
+
140
+ $defaults = array();
141
+
142
+ register_setting( $this->unique, $this->unique, array( &$this, 'validate_save' ) );
143
+
144
+ foreach ( $this->sections as $section ) {
145
+
146
+ if ( isset( $section['fields'] ) ) {
147
+
148
+ foreach ( $section['fields'] as $field_key => $field ) {
149
+
150
+ // set default option if isset.
151
+ if ( isset( $field['default'] ) ) {
152
+ $defaults[ $field['id'] ] = $field['default'];
153
+ if ( ! empty( $this->get_option ) && ! isset( $this->get_option[ $field['id'] ] ) ) {
154
+ $this->get_option[ $field['id'] ] = $field['default'];
155
+ }
156
+ }
157
+ }
158
+ }
159
+ }
160
+
161
+ // set default variable if empty options and not empty defaults.
162
+ if ( empty( $this->get_option ) && ! empty( $defaults ) ) {
163
+ update_option( $this->unique, $defaults );
164
+ $this->get_option = $defaults;
165
+ }
166
+
167
+ }
168
+
169
+ /**
170
+ * Section fields validate in save.
171
+ *
172
+ * @param nonce $request The nonce request.
173
+ * @return statement.
174
+ */
175
+ public function validate_save( $request ) {
176
+
177
+ $add_errors = array();
178
+ $section_id = sp_get_var( 'sp_section_id' );
179
+
180
+ // ignore nonce requests.
181
+ if ( isset( $request['_nonce'] ) ) {
182
+ unset( $request['_nonce'] ); }
183
+
184
+ // import.
185
+ if ( isset( $request['import'] ) && ! empty( $request['import'] ) ) {
186
+ $decode_string = sp_decode_string( $request['import'] );
187
+ if ( is_array( $decode_string ) ) {
188
+ return $decode_string;
189
+ }
190
+ $add_errors[] = $this->add_settings_error( esc_html__( 'Success. Imported backup options.', 'wp-carousel-free' ), 'updated' );
191
+ }
192
+
193
+ // reset all options.
194
+ if ( isset( $request['resetall'] ) ) {
195
+ $add_errors[] = $this->add_settings_error( esc_html__( 'Default options restored.', 'wp-carousel-free' ), 'updated' );
196
+ return;
197
+ }
198
+
199
+ // reset only section.
200
+ if ( isset( $request['reset'] ) && ! empty( $section_id ) ) {
201
+ foreach ( $this->sections as $value ) {
202
+ if ( $value['name'] == $section_id ) {
203
+ foreach ( $value['fields'] as $field ) {
204
+ if ( isset( $field['id'] ) ) {
205
+ if ( isset( $field['default'] ) ) {
206
+ $request[ $field['id'] ] = $field['default'];
207
+ } else {
208
+ unset( $request[ $field['id'] ] );
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
214
+ $add_errors[] = $this->add_settings_error( esc_html__( 'Default options restored for only this section.', 'wp-carousel-free' ), 'updated' );
215
+ }
216
+
217
+ // option sanitize and validate.
218
+ foreach ( $this->sections as $section ) {
219
+ if ( isset( $section['fields'] ) ) {
220
+ foreach ( $section['fields'] as $field ) {
221
+
222
+ // ignore santize and validate if element multilangual.
223
+ if ( isset( $field['type'] ) && ! isset( $field['multilang'] ) && isset( $field['id'] ) ) {
224
+
225
+ // sanitize options.
226
+ $request_value = isset( $request[ $field['id'] ] ) ? $request[ $field['id'] ] : '';
227
+ $sanitize_type = $field['type'];
228
+
229
+ if ( isset( $field['sanitize'] ) ) {
230
+ $sanitize_type = ( $field['sanitize'] !== false ) ? $field['sanitize'] : false;
231
+ }
232
+
233
+ if ( false !== $sanitize_type && has_filter( 'sp_sanitize_' . $sanitize_type ) ) {
234
+ $request[ $field['id'] ] = apply_filters( 'sp_sanitize_' . $sanitize_type, $request_value, $field, $section['fields'] );
235
+ }
236
+
237
+ // validate options.
238
+ if ( isset( $field['validate'] ) && has_filter( 'sp_validate_' . $field['validate'] ) ) {
239
+
240
+ $validate = apply_filters( 'sp_validate_' . $field['validate'], $request_value, $field, $section['fields'] );
241
+
242
+ if ( ! empty( $validate ) ) {
243
+ $add_errors[] = $this->add_settings_error( $validate, 'error', $field['id'] );
244
+ $request[ $field['id'] ] = ( isset( $this->get_option[ $field['id'] ] ) ) ? $this->get_option[ $field['id'] ] : '';
245
+ }
246
+ }
247
+ }
248
+
249
+ if ( ! isset( $field['id'] ) || empty( $request[ $field['id'] ] ) ) {
250
+ continue;
251
+ }
252
+ }
253
+ }
254
+ }
255
+
256
+ $request = apply_filters( 'sp_validate_save', $request );
257
+
258
+ do_action( 'sp_validate_save_after', $request );
259
+
260
+ // set transient
261
+ $transient_time = ( sp_language_defaults() !== false ) ? 30 : 10;
262
+ set_transient(
263
+ 'sp-framework-transient', array(
264
+ 'errors' => $add_errors,
265
+ 'section_id' => $section_id,
266
+ ), $transient_time
267
+ );
268
+
269
+ return $request;
270
+ }
271
+
272
+ /**
273
+ * Field callback classes
274
+ *
275
+ * @param mix $field The field classes.
276
+ * @return void
277
+ */
278
+ public function field_callback( $field ) {
279
+ $value = ( isset( $field['id'] ) && isset( $this->get_option[ $field['id'] ] ) ) ? $this->get_option[ $field['id'] ] : '';
280
+ echo sp_wpcp_add_element( $field, $value, $this->unique );
281
+ }
282
+
283
+ /**
284
+ * Setting error
285
+ *
286
+ * @param string $message The error messages.
287
+ * @param string $type Error type.
288
+ * @param string $id The field id.
289
+ * @return statement.
290
+ */
291
+ public function add_settings_error( $message, $type = 'error', $id = 'global' ) {
292
+ return array(
293
+ 'setting' => 'sp-errors',
294
+ 'code' => $id,
295
+ 'message' => $message,
296
+ 'type' => $type,
297
+ );
298
+ }
299
+
300
+ /**
301
+ * Adding option page.
302
+ *
303
+ * @return void
304
+ */
305
+ public function admin_menu() {
306
+
307
+ $defaults = array(
308
+ 'menu_type' => '',
309
+ 'menu_parent' => '',
310
+ 'menu_title' => '',
311
+ 'menu_slug' => '',
312
+ 'menu_capability' => 'manage_options',
313
+ 'menu_icon' => null,
314
+ 'menu_position' => null,
315
+ );
316
+
317
+ $args = wp_parse_args( $this->settings, $defaults );
318
+
319
+ extract( $args );
320
+
321
+ if ( 'submenu' === $menu_type ) {
322
+ add_submenu_page( $menu_parent, $menu_title, $menu_title, $menu_capability, $menu_slug, array( &$this, 'admin_page' ) );
323
+ } elseif ( 'management' === $menu_type ) {
324
+ add_management_page( $menu_title, $menu_title, $menu_capability, $menu_slug, array( &$this, 'admin_page' ), $menu_icon, $menu_position );
325
+ } elseif ( 'dashboard' === $menu_type ) {
326
+ add_dashboard_page( $menu_title, $menu_title, $menu_capability, $menu_slug, array( &$this, 'admin_page' ), $menu_icon, $menu_position );
327
+ } elseif ( 'options' === $menu_type ) {
328
+ add_options_page( $menu_title, $menu_title, $menu_capability, $menu_slug, array( &$this, 'admin_page' ), $menu_icon, $menu_position );
329
+ } elseif ( 'plugins' === $menu_type ) {
330
+ add_plugins_page( $menu_title, $menu_title, $menu_capability, $menu_slug, array( &$this, 'admin_page' ), $menu_icon, $menu_position );
331
+ } elseif ( 'theme' === $menu_type ) {
332
+ add_theme_page( $menu_title, $menu_title, $menu_capability, $menu_slug, array( &$this, 'admin_page' ), $menu_icon, $menu_position );
333
+ } else {
334
+ add_menu_page( $menu_title, $menu_title, $menu_capability, $menu_slug, array( &$this, 'admin_page' ), $menu_icon, $menu_position );
335
+ }
336
+
337
+ }
338
+
339
+ /**
340
+ * Option page html output
341
+ *
342
+ * @return void
343
+ */
344
+ public function admin_page() {
345
+
346
+ $transient = get_transient( 'sp-framework-transient' );
347
+ $has_nav = ( count( $this->options ) <= 1 ) ? ' sp-show-all' : '';
348
+ $section_id = ( ! empty( $transient['section_id'] ) ) ? $transient['section_id'] : $this->sections[0]['name'];
349
+ $section_id = sp_get_var( 'sp-section', $section_id );
350
+
351
+ echo '<h1 class="sp-option-framework-page-title">' . $this->settings['menu_title'] . '</h1>';
352
+
353
+ echo '<div class="sp-wpcp-framework sp-option-framework">';
354
+
355
+ echo '<form method="post" action="options.php" enctype="multipart/form-data" id="sp_framework_form">';
356
+ echo '<input type="hidden" class="sp-reset" name="sp_section_id" value="' . $section_id . '" />';
357
+
358
+ if ( true !== $this->settings['ajax_save'] && ! empty( $transient['errors'] ) ) {
359
+
360
+ global $sp_errors;
361
+
362
+ $sp_errors = $transient['errors'];
363
+
364
+ if ( ! empty( $sp_errors ) ) {
365
+ foreach ( $sp_errors as $error ) {
366
+ if ( in_array( $error['setting'], array( 'general', 'sp-errors' ) ) ) {
367
+ echo '<div class="sp-settings-error ' . $error['type'] . '">';
368
+ echo '<p><strong>' . $error['message'] . '</strong></p>';
369
+ echo '</div>';
370
+ }
371
+ }
372
+ }
373
+ }
374
+
375
+ settings_fields( $this->unique );
376
+
377
+ echo '<header class="sp-header">';
378
+ echo '<h2>' . $this->settings['framework_title'] . '</h2>';
379
+ echo '<fieldset>';
380
+
381
+ echo ( $this->settings['ajax_save'] ) ? '<span id="sp-save-ajax">' . esc_html__( 'Settings saved.', 'wp-carousel-free' ) . '</span>' : '';
382
+
383
+ submit_button( esc_html__( 'Save Changes', 'wp-carousel-free' ), 'primary sp-save', 'save', false, array( 'data-save' => esc_html__( 'Saving...', 'wp-carousel-free' ) ) );
384
+ submit_button( esc_html__( 'Restore', 'wp-carousel-free' ), 'secondary sp-restore sp-reset-confirm', $this->unique . '[reset]', false );
385
+
386
+ if ( $this->settings['show_reset_all'] ) {
387
+ submit_button( esc_html__( 'Reset All Options', 'wp-carousel-free' ), 'secondary sp-restore sp-warning-primary sp-reset-confirm', $this->unique . '[resetall]', false );
388
+ }
389
+
390
+ echo '</fieldset>';
391
+ // echo ( empty( $has_nav ) ) ? '<a href="#" class="sp-expand-all"><i class="fa fa-eye-slash"></i> '. esc_html__( 'show all options', 'wp-carousel-free' ) .'</a>' : '';
392
+ echo '<div class="clear"></div>';
393
+ echo '</header>'; // end .sp-header
394
+
395
+ echo '<div class="sp-body' . $has_nav . '">';
396
+
397
+ echo '<div class="sp-nav">';
398
+
399
+ echo '<ul>';
400
+ foreach ( $this->options as $key => $tab ) {
401
+
402
+ if ( ( isset( $tab['sections'] ) ) ) {
403
+
404
+ $tab_active = sp_array_search( $tab['sections'], 'name', $section_id );
405
+ $active_style = ( ! empty( $tab_active ) ) ? ' style="display: block;"' : '';
406
+ $active_list = ( ! empty( $tab_active ) ) ? ' sp-tab-active' : '';
407
+ $tab_icon = ( ! empty( $tab['icon'] ) ) ? '<i class="sp-icon ' . $tab['icon'] . '"></i>' : '';
408
+
409
+ echo '<li class="sp-sub' . $active_list . '">';
410
+
411
+ echo '<a href="#" class="sp-arrow">' . $tab_icon . $tab['title'] . '</a>';
412
+
413
+ echo '<ul' . $active_style . '>';
414
+ foreach ( $tab['sections'] as $tab_section ) {
415
+
416
+ $active_tab = ( $section_id == $tab_section['name'] ) ? ' class="sp-section-active"' : '';
417
+ $icon = ( ! empty( $tab_section['icon'] ) ) ? '<i class="sp-icon ' . $tab_section['icon'] . '"></i>' : '';
418
+
419
+ echo '<li><a href="#"' . $active_tab . ' data-section="' . $tab_section['name'] . '">' . $icon . $tab_section['title'] . '</a></li>';
420
+
421
+ }
422
+ echo '</ul>';
423
+
424
+ echo '</li>';
425
+
426
+ } else {
427
+
428
+ $icon = ( ! empty( $tab['icon'] ) ) ? '<i class="sp-icon ' . $tab['icon'] . '"></i>' : '';
429
+
430
+ if ( isset( $tab['fields'] ) ) {
431
+
432
+ $active_list = ( $section_id == $tab['name'] ) ? ' class="sp-section-active"' : '';
433
+ echo '<li><a href="#"' . $active_list . ' data-section="' . $tab['name'] . '">' . $icon . $tab['title'] . '</a></li>';
434
+
435
+ } else {
436
+
437
+ echo '<li><div class="sp-separator">' . $icon . $tab['title'] . '</div></li>';
438
+
439
+ }
440
+ }
441
+ }
442
+ echo '</ul>';
443
+
444
+ echo '</div>'; // end .sp-nav.
445
+
446
+ echo '<div class="sp-content">';
447
+
448
+ echo '<div class="sp-sections">';
449
+
450
+ foreach ( $this->sections as $section ) {
451
+ if ( isset( $section['fields'] ) ) {
452
+
453
+ $active_content = ( $section_id == $section['name'] ) ? ' style="display: block;"' : '';
454
+ echo '<div id="sp-tab-' . $section['name'] . '" class="sp-section"' . $active_content . '>';
455
+ echo ( isset( $section['title'] ) && empty( $has_nav ) ) ? '<div class="sp-section-title"><h3>' . $section['title'] . '</h3></div>' : '';
456
+
457
+ foreach ( $section['fields'] as $field ) {
458
+ $this->field_callback( $field );
459
+ }
460
+
461
+ echo '</div>';
462
+
463
+ }
464
+ }
465
+
466
+ echo '</div>'; // end .sp-sections.
467
+
468
+ echo '<div class="clear"></div>';
469
+
470
+ echo '</div>'; // end .sp-content.
471
+
472
+ echo '<div class="sp-nav-background"></div>';
473
+
474
+ echo '</div>'; // end .sp-body.
475
+
476
+ echo '</form>'; // end form.
477
+
478
+ echo '<div class="clear"></div>';
479
+
480
+ echo '</div>'; // end .sp-wpcp-framework.
481
+
482
+ }
483
+
484
+ }
admin/views/meta-box/classes/metabox.class.php ADDED
@@ -0,0 +1,296 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die;
3
+ } // Cannot access pages directly.
4
+ /**
5
+ * MetaBox Class
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Metabox extends SP_WPCP_Framework_Abstract {
11
+
12
+ /**
13
+ * MetaBox options
14
+ *
15
+ * @access public
16
+ * @var array
17
+ */
18
+ public $options = array();
19
+
20
+ /**
21
+ * Class instance.
22
+ *
23
+ * @access private
24
+ * @var class
25
+ */
26
+ private static $instance = null;
27
+
28
+ /**
29
+ * Run MetaBox Construct.
30
+ *
31
+ * @param mixed $options All the MetaBox options.
32
+ */
33
+ public function __construct( $options ) {
34
+
35
+ $this->options = apply_filters( 'sp_metabox_options', $options );
36
+
37
+ if ( ! empty( $this->options ) ) {
38
+ $this->addAction( 'add_meta_boxes', 'add_meta_box' );
39
+ $this->addAction( 'save_post', 'save_post', 10, 2 );
40
+ }
41
+
42
+ }
43
+
44
+ /**
45
+ * MetaBox instance.
46
+ *
47
+ * @param array $options Options array.
48
+ * @return statement
49
+ */
50
+ public static function instance( $options = array() ) {
51
+ if ( is_null( self::$instance ) && SP_WPCP_F_ACTIVE_METABOX ) {
52
+ self::$instance = new self( $options );
53
+ }
54
+
55
+ return self::$instance;
56
+ }
57
+
58
+ /**
59
+ * Add metabox function.
60
+ *
61
+ * @param sting $post_type Add metabox to the post type.
62
+ * @return void
63
+ */
64
+ public function add_meta_box( $post_type ) {
65
+
66
+ foreach ( $this->options as $value ) {
67
+ add_meta_box(
68
+ $value['id'], $value['title'], array(
69
+ &$this,
70
+ 'render_meta_box_content',
71
+ ), $value['post_type'], $value['context'], $value['priority'], $value
72
+ );
73
+ }
74
+
75
+ }
76
+
77
+ /**
78
+ * Metabox render content
79
+ *
80
+ * @param mixed $post The post type.
81
+ * @param mixed $callback The metabox callback.
82
+ * @return void
83
+ */
84
+ public function render_meta_box_content( $post, $callback ) {
85
+
86
+ global $post, $sp_errors;
87
+
88
+ wp_nonce_field( 'sp-framework-metabox', 'sp-framework-metabox-nonce' );
89
+
90
+ $unique = $callback['args']['id'];
91
+ $sections = $callback['args']['sections'];
92
+ $meta_value = get_post_meta( $post->ID, $unique, true );
93
+ $transient = get_transient( 'wpcpro-metabox-transient' );
94
+ $sp_errors = $transient['errors'];
95
+ $has_nav = ( count( $sections ) >= 2 && $callback['args']['context'] != 'side' ) ? true : false;
96
+ $show_all = ( ! $has_nav ) ? ' sp-show-all' : '';
97
+ $section_name = ( ! empty( $sections[0]['fields'] ) ) ? $sections[0]['name'] : $sections[1]['name'];
98
+ $section_id = ( ! empty( $transient['ids'][ $unique ] ) ) ? $transient['ids'][ $unique ] : $section_name;
99
+ $section_id = sp_get_var( 'sp-section', $section_id );
100
+
101
+ echo '<div class="sp-wpcp-framework sp-metabox-framework">';
102
+
103
+ echo '<input type="hidden" name="sp_section_id[' . $unique . ']" class="sp-reset" value="' . $section_id . '">';
104
+
105
+ // SP_WPCP_Framework.
106
+ $current_screen = get_current_screen();
107
+ $the_current_post_type = $current_screen->post_type;
108
+ if ( $the_current_post_type == 'sp_wp_carousel' ) {
109
+ ?>
110
+ <div class="sp-wpcp-banner">
111
+ <div class="sp-wpcp-logo"><img src="<?php echo esc_url( WPCAROUSELF_URL . 'admin/img/wpcp-logo.png' ); ?>" alt="WP Carousel"></div>
112
+ <div class="sp-wpcp-short-links">
113
+ <a href="https://shapedplugin.com/support-forum/" target="_blank"><i class="fa fa-life-ring"></i>Support</a>
114
+ </div>
115
+ </div>
116
+ <?php
117
+ } // End SP_WPCP_Framework.
118
+
119
+ echo '<div class="sp-body' . $show_all . '">';
120
+ if ( $has_nav ) {
121
+ echo '<div class="sp-nav">';
122
+ echo '<ul>';
123
+ foreach ( $sections as $value ) {
124
+ $tab_icon = ( ! empty( $value['icon'] ) ) ? '<i class="sp-icon ' . $value['icon'] . '"></i>' : '';
125
+ if ( isset( $value['fields'] ) ) {
126
+ $active_section = ( $section_id == $value['name'] ) ? ' class="sp-section-active"' : '';
127
+ echo '<li><a href="#" ' . $active_section . ' data-section="' . $value['name'] . '" class="tab-' . $value['name'] . '">' . $tab_icon . $value['title'] . '</a></li>';
128
+ } else {
129
+ echo '<li><div class="sp-separator">' . $tab_icon . $value['title'] . '</div></li>';
130
+ }
131
+ }
132
+ echo '</ul>';
133
+
134
+ echo '</div>';
135
+ }
136
+
137
+ echo '<div class="sp-content">';
138
+
139
+ echo '<div class="sp-sections">';
140
+ foreach ( $sections as $val ) {
141
+
142
+ if ( isset( $val['fields'] ) ) {
143
+
144
+ $active_content = ( $section_id == $val['name'] ) ? ' style="display: block;"' : '';
145
+
146
+ echo '<div id="sp-tab-' . $val['name'] . '" class="sp-section"' . $active_content . '>';
147
+ echo ( isset( $val['title'] ) ) ? '<div class="sp-section-title"><h3>' . $val['title'] . '</h3></div>' : '';
148
+
149
+ foreach ( $val['fields'] as $field_key => $field ) {
150
+
151
+ $default = ( isset( $field['default'] ) ) ? $field['default'] : '';
152
+ $elem_id = ( isset( $field['id'] ) ) ? $field['id'] : '';
153
+ $elem_value = ( is_array( $meta_value ) && isset( $meta_value[ $elem_id ] ) ) ? $meta_value[ $elem_id ] : $default;
154
+ echo sp_wpcp_add_element( $field, $elem_value, $unique );
155
+
156
+ }
157
+ echo '</div>';
158
+ }
159
+ }
160
+ echo '</div>';
161
+
162
+ echo '<div class="clear"></div>';
163
+
164
+ echo '</div>';
165
+
166
+ echo ( $has_nav ) ? '<div class="sp-nav-background"></div>' : '';
167
+
168
+ echo '<div class="clear"></div>';
169
+
170
+ echo '</div>'; // End sp-body.
171
+ ?>
172
+ <div class="wpcpro_shortcode_divider"></div>
173
+ <div class="wpcpro_shortcode text-center">
174
+ <div class="wpcpro-col-lg-3">
175
+ <div class="wpcpro_shortcode_content">
176
+ <span class="wpcpro-shortcode-title"><?php esc_html_e( 'Shortcode:', 'wp-carousel-free' ); ?> </span>
177
+ <div class="wpcpro-sc-code selectable" >[sp_wpcarousel <?php echo 'id="' . $post->ID . '"'; ?>]</div>
178
+ </div>
179
+ </div>
180
+ <div class="wpcpro-col-lg-3">
181
+ <div class="wpcpro_shortcode_content">
182
+ <span class="wpcpro-shortcode-title">
183
+ <?php
184
+ esc_html_e( 'Template Include:', 'wp-carousel-free' );
185
+ ?>
186
+ </span>
187
+ <div class="wpcpro-sc-code selectable">
188
+ &lt;?php echo do_shortcode( '[sp_wpcarousel id="<?php echo $post->ID; ?>"]' );
189
+ ?&gt;</div>
190
+ </div>
191
+ </div>
192
+ </div>
193
+ <?php
194
+ echo '</div>';
195
+ }
196
+
197
+ /**
198
+ * Save metabox options.
199
+ *
200
+ * @param integer $post_id The post ID.
201
+ * @param string $post The Post.
202
+ * @return void
203
+ */
204
+ public function save_post( $post_id, $post ) {
205
+
206
+ if ( wp_verify_nonce( sp_get_var( 'sp-framework-metabox-nonce' ), 'sp-framework-metabox' ) ) {
207
+
208
+ $errors = array();
209
+ $post_type = sp_get_var( 'post_type' );
210
+
211
+ foreach ( $this->options as $request_value ) {
212
+
213
+ if ( in_array( $post_type, (array) $request_value['post_type'] ) ) {
214
+
215
+ $request_key = $request_value['id'];
216
+ $request = sp_get_var( $request_key, array() );
217
+
218
+ // ignore _nonce.
219
+ if ( isset( $request['_nonce'] ) ) {
220
+ unset( $request['_nonce'] );
221
+ }
222
+
223
+ foreach ( $request_value['sections'] as $key => $section ) {
224
+
225
+ if ( isset( $section['fields'] ) ) {
226
+
227
+ foreach ( $section['fields'] as $field ) {
228
+
229
+ if ( isset( $field['type'] ) && isset( $field['id'] ) ) {
230
+
231
+ $field_value = sp_get_vars( $request_key, $field['id'] );
232
+
233
+ // sanitize options.
234
+ if ( isset( $field['sanitize'] ) && $field['sanitize'] !== false ) {
235
+ $sanitize_type = $field['sanitize'];
236
+ } elseif ( ! isset( $field['sanitize'] ) ) {
237
+ $sanitize_type = $field['type'];
238
+ }
239
+
240
+ if ( has_filter( 'sp_sanitize_' . $sanitize_type ) ) {
241
+ $request[ $field['id'] ] = apply_filters( 'sp_sanitize_' . $sanitize_type, $field_value, $field, $section['fields'] );
242
+ }
243
+
244
+ // validate options.
245
+ if ( isset( $field['validate'] ) && has_filter( 'sp_validate_' . $field['validate'] ) ) {
246
+
247
+ $validate = apply_filters( 'sp_validate_' . $field['validate'], $field_value, $field, $section['fields'] );
248
+
249
+ if ( ! empty( $validate ) ) {
250
+
251
+ $meta_value = get_post_meta( $post_id, $request_key, true );
252
+
253
+ $errors[ $field['id'] ] = array(
254
+ 'code' => $field['id'],
255
+ 'message' => $validate,
256
+ 'type' => 'error',
257
+ );
258
+ $default_value = isset( $field['default'] ) ? $field['default'] : '';
259
+ $request[ $field['id'] ] = ( isset( $meta_value[ $field['id'] ] ) ) ? $meta_value[ $field['id'] ] : $default_value;
260
+ }
261
+ }
262
+ }
263
+ }
264
+ }
265
+ }
266
+
267
+ $request = apply_filters( 'sp_save_post', $request, $request_key, $post );
268
+
269
+ if ( empty( $request ) ) {
270
+
271
+ delete_post_meta( $post_id, $request_key );
272
+
273
+ } else {
274
+
275
+ if ( get_post_meta( $post_id, $request_key ) ) {
276
+
277
+ update_post_meta( $post_id, $request_key, $request );
278
+
279
+ } else {
280
+ add_post_meta( $post_id, $request_key, $request );
281
+ }
282
+ }
283
+
284
+ $transient['ids'][ $request_key ] = sp_get_vars( 'sp_section_id', $request_key );
285
+ $transient['errors'] = $errors;
286
+
287
+ }
288
+ }
289
+
290
+ set_transient( 'wpcpro-metabox-transient', $transient, 10 );
291
+
292
+ }
293
+
294
+ }
295
+
296
+ }
admin/views/meta-box/classes/options.class.php ADDED
@@ -0,0 +1,522 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Options Class
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ abstract class SP_WPCP_Framework_Options extends SP_WPCP_Framework_Abstract {
11
+
12
+ /**
13
+ * The option class constructor.
14
+ *
15
+ * @param array $field All the options fields.
16
+ * @param string $value Value of the options.
17
+ * @param string $unique Unique id of the options.
18
+ */
19
+ public function __construct( $field = array(), $value = '', $unique = '' ) {
20
+ $this->field = $field;
21
+ $this->value = $value;
22
+ $this->org_value = $value;
23
+ $this->unique = $unique;
24
+ $this->multilang = $this->element_multilang();
25
+ }
26
+
27
+ /**
28
+ * Element value.
29
+ *
30
+ * @param string $value Value of each element.
31
+ * @return mix
32
+ */
33
+ public function element_value( $value = '' ) {
34
+
35
+ $value = $this->value;
36
+
37
+ if ( is_array( $this->multilang ) && is_array( $value ) ) {
38
+
39
+ $current = $this->multilang['current'];
40
+
41
+ if ( isset( $value[ $current ] ) ) {
42
+ $value = $value[ $current ];
43
+ } elseif ( $this->multilang['current'] == $this->multilang['default'] ) {
44
+ $value = $this->value;
45
+ } else {
46
+ $value = '';
47
+ }
48
+ } elseif ( ! is_array( $this->multilang ) && isset( $this->value['multilang'] ) && is_array( $this->value ) ) {
49
+
50
+ $value = array_values( $this->value );
51
+ $value = $value[0];
52
+
53
+ } elseif ( is_array( $this->multilang ) && ! is_array( $value ) && ( $this->multilang['current'] != $this->multilang['default'] ) ) {
54
+
55
+ $value = '';
56
+
57
+ }
58
+
59
+ return $value;
60
+
61
+ }
62
+
63
+ /**
64
+ * Element name.
65
+ *
66
+ * @param string $extra_name The extra name.
67
+ * @param boolean $multilang Multi language.
68
+ * @return statement
69
+ */
70
+ public function element_name( $extra_name = '', $multilang = false ) {
71
+
72
+ $element_id = ( isset( $this->field['id'] ) ) ? $this->field['id'] : '';
73
+ $extra_multilang = ( ! $multilang && is_array( $this->multilang ) ) ? '[' . $this->multilang['current'] . ']' : '';
74
+ return ( isset( $this->field['name'] ) ) ? $this->field['name'] . $extra_name : $this->unique . '[' . $element_id . ']' . $extra_multilang . $extra_name;
75
+
76
+ }
77
+
78
+ /**
79
+ * Element type
80
+ *
81
+ * @return statement
82
+ */
83
+ public function element_type() {
84
+ $type = ( isset( $this->field['attributes']['type'] ) ) ? $this->field['attributes']['type'] : $this->field['type'];
85
+ return $type;
86
+ }
87
+
88
+ /**
89
+ * Element class.
90
+ *
91
+ * @param string $el_class The element class.
92
+ * @return statement
93
+ */
94
+ public function element_class( $el_class = '' ) {
95
+
96
+ $field_class = ( isset( $this->field['class'] ) ) ? ' ' . $this->field['class'] : '';
97
+ return ( $field_class || $el_class ) ? ' class="' . $el_class . $field_class . '"' : '';
98
+ }
99
+
100
+ /**
101
+ * Element Only for Pro.
102
+ *
103
+ * @param string $pro_only The element class.
104
+ * @return statement
105
+ */
106
+ public function element_pro_only( $pro_only = '' ) {
107
+ $pro_only = ( isset( $this->field['pro_only'] ) ) ? ' disabled' : '';
108
+ return $pro_only;
109
+
110
+ }
111
+
112
+ /**
113
+ * Element Attributes.
114
+ *
115
+ * @param array $el_attributes Attributes of the element.
116
+ * @return statement
117
+ */
118
+ public function element_attributes( $el_attributes = array() ) {
119
+
120
+ $attributes = ( isset( $this->field['attributes'] ) ) ? $this->field['attributes'] : array();
121
+ $element_id = ( isset( $this->field['id'] ) ) ? $this->field['id'] : '';
122
+
123
+ if ( false !== $el_attributes ) {
124
+ $sub_elemenet = ( isset( $this->field['sub'] ) ) ? 'sub-' : '';
125
+ $el_attributes = ( is_string( $el_attributes ) || is_numeric( $el_attributes ) ) ? array( 'data-' . $sub_elemenet . 'depend-id' => $element_id . '_' . $el_attributes ) : $el_attributes;
126
+ $el_attributes = ( empty( $el_attributes ) && isset( $element_id ) ) ? array( 'data-' . $sub_elemenet . 'depend-id' => $element_id ) : $el_attributes;
127
+ }
128
+
129
+ $attributes = wp_parse_args( $attributes, $el_attributes );
130
+
131
+ $atts = '';
132
+
133
+ if ( ! empty( $attributes ) ) {
134
+ foreach ( $attributes as $key => $value ) {
135
+ if ( 'only-key' === $value ) {
136
+ $atts .= ' ' . $key;
137
+ } else {
138
+ $atts .= ' ' . $key . '="' . $value . '"';
139
+ }
140
+ }
141
+ }
142
+
143
+ return $atts;
144
+
145
+ }
146
+
147
+ /**
148
+ * Element before.
149
+ *
150
+ * @return string
151
+ */
152
+ public function element_before() {
153
+ return ( isset( $this->field['before'] ) ) ? $this->field['before'] : '';
154
+ }
155
+
156
+ /**
157
+ * Element after.
158
+ *
159
+ * @return statement
160
+ */
161
+ public function element_after() {
162
+
163
+ $out = ( isset( $this->field['info'] ) ) ? '<p class="sp-text-desc">' . $this->field['info'] . '</p>' : '';
164
+ $out .= ( isset( $this->field['after'] ) ) ? '<span class="sp-after-text">' . $this->field['after'] . '</span>' : '';
165
+ $out .= $this->element_after_multilang();
166
+ $out .= $this->element_get_error();
167
+ $out .= $this->element_help();
168
+ $out .= $this->element_debug();
169
+ return $out;
170
+
171
+ }
172
+
173
+ /**
174
+ * Element debug.
175
+ *
176
+ * @return statement.
177
+ */
178
+ public function element_debug() {
179
+
180
+ $out = '';
181
+
182
+ if ( ( isset( $this->field['debug'] ) && $this->field['debug'] === true ) || ( defined( 'SP_OPTIONS_DEBUG' ) && SP_OPTIONS_DEBUG ) ) {
183
+
184
+ $value = $this->element_value();
185
+
186
+ $out .= '<pre>';
187
+ $out .= '<strong>' . __( 'CONFIG', 'wp-carousel-free' ) . ':</strong>';
188
+ $out .= "\n";
189
+ ob_start();
190
+ var_export( $this->field );
191
+ $out .= htmlspecialchars( ob_get_clean() );
192
+ $out .= "\n\n";
193
+ $out .= '<strong>' . __( 'USAGE', 'wp-carousel-free' ) . ':</strong>';
194
+ $out .= "\n";
195
+ $out .= ( isset( $this->field['id'] ) ) ? "sp_get_option( '" . $this->field['id'] . "' );" : '';
196
+
197
+ if ( ! empty( $value ) ) {
198
+ $out .= "\n\n";
199
+ $out .= '<strong>' . __( 'VALUE', 'wp-carousel-free' ) . ':</strong>';
200
+ $out .= "\n";
201
+ ob_start();
202
+ var_export( $value );
203
+ $out .= htmlspecialchars( ob_get_clean() );
204
+ }
205
+
206
+ $out .= '</pre>';
207
+
208
+ }
209
+
210
+ if ( ( isset( $this->field['debug_light'] ) && $this->field['debug_light'] === true ) || ( defined( 'SP_OPTIONS_DEBUG_LIGHT' ) && SP_OPTIONS_DEBUG_LIGHT ) ) {
211
+
212
+ $out .= '<pre>';
213
+ $out .= '<strong>' . __( 'USAGE', 'wp-carousel-free' ) . ':</strong>';
214
+ $out .= "\n";
215
+ $out .= ( isset( $this->field['id'] ) ) ? "sp_get_option( '" . $this->field['id'] . "' );" : '';
216
+ $out .= "\n";
217
+ $out .= '<strong>' . __( 'ID', 'wp-carousel-free' ) . ':</strong>';
218
+ $out .= "\n";
219
+ $out .= ( isset( $this->field['id'] ) ) ? $this->field['id'] : '';
220
+ $out .= '</pre>';
221
+
222
+ }
223
+
224
+ return $out;
225
+
226
+ }
227
+
228
+ /**
229
+ * Element get error.
230
+ *
231
+ * @return statement
232
+ */
233
+ public function element_get_error() {
234
+
235
+ global $sp_errors;
236
+
237
+ $out = '';
238
+
239
+ if ( ! empty( $sp_errors ) ) {
240
+ foreach ( $sp_errors as $key => $value ) {
241
+ if ( isset( $this->field['id'] ) && $value['code'] == $this->field['id'] ) {
242
+ $out .= '<p class="sp-text-warning">' . $value['message'] . '</p>';
243
+ }
244
+ }
245
+ }
246
+
247
+ return $out;
248
+
249
+ }
250
+
251
+ /**
252
+ * Element help.
253
+ *
254
+ * @return statement
255
+ */
256
+ public function element_help() {
257
+ return ( isset( $this->field['help'] ) ) ? '<span class="sp-help" data-title="' . $this->field['help'] . '"><span class="fa fa-question-circle"></span></span>' : '';
258
+ }
259
+
260
+ /**
261
+ * Element after multi-language
262
+ *
263
+ * @return statement
264
+ */
265
+ public function element_after_multilang() {
266
+
267
+ $out = '';
268
+
269
+ if ( is_array( $this->multilang ) ) {
270
+
271
+ $out .= '<fieldset class="hidden">';
272
+
273
+ foreach ( $this->multilang['languages'] as $key => $val ) {
274
+
275
+ // ignore current language for hidden element.
276
+ if ( $key != $this->multilang['current'] ) {
277
+
278
+ // set default value.
279
+ if ( isset( $this->org_value[ $key ] ) ) {
280
+ $value = $this->org_value[ $key ];
281
+ } elseif ( ! isset( $this->org_value[ $key ] ) && ( $key == $this->multilang['default'] ) ) {
282
+ $value = $this->org_value;
283
+ } else {
284
+ $value = '';
285
+ }
286
+
287
+ $cache_field = $this->field;
288
+
289
+ unset( $cache_field['multilang'] );
290
+ $cache_field['name'] = $this->element_name( '[' . $key . ']', true );
291
+
292
+ $class = 'SP_WPCP_Framework_Option_' . $this->field['type'];
293
+ $element = new $class( $cache_field, $value, $this->unique );
294
+
295
+ ob_start();
296
+ $element->output();
297
+ $out .= ob_get_clean();
298
+
299
+ }
300
+ }
301
+
302
+ $out .= '<input type="hidden" name="' . $this->element_name( '[multilang]', true ) . '" value="true" />';
303
+ $out .= '</fieldset>';
304
+ $out .= '<p class="sp-text-desc">' . sprintf( __( 'You are editing language: ( <strong>%s</strong> )', 'wp-carousel-free' ), $this->multilang['current'] ) . '</p>';
305
+
306
+ }
307
+
308
+ return $out;
309
+ }
310
+
311
+ /**
312
+ * Element data.
313
+ *
314
+ * @param string $type Element data type.
315
+ * @return statement
316
+ */
317
+ public function element_data( $type = '' ) {
318
+
319
+ $options = array();
320
+ $query_args = ( isset( $this->field['query_args'] ) ) ? $this->field['query_args'] : array();
321
+
322
+ switch ( $type ) {
323
+ case 'pages':
324
+ case 'page':
325
+ $pages = get_pages( $query_args );
326
+
327
+ if ( ! is_wp_error( $pages ) && ! empty( $pages ) ) {
328
+ foreach ( $pages as $page ) {
329
+ $options[ $page->ID ] = $page->post_title;
330
+ }
331
+ }
332
+
333
+ break;
334
+
335
+ case 'posts':
336
+ case 'post':
337
+ $posts = get_posts( $query_args );
338
+
339
+ if ( ! is_wp_error( $posts ) && ! empty( $posts ) ) {
340
+ foreach ( $posts as $post ) {
341
+ $options[ $post->ID ] = $post->post_title;
342
+ }
343
+ }
344
+
345
+ break;
346
+
347
+ case 'post_types':
348
+ case 'post_type':
349
+ $post_types = get_post_types( array( 'public' => true ) );
350
+ if ( ! is_wp_error( $post_types ) && ! empty( $post_types ) ) {
351
+ foreach ( $post_types as $post_type => $label ) {
352
+ $options[ $post_type ] = $label;
353
+ }
354
+ }
355
+
356
+ break;
357
+
358
+ case 'all_posts':
359
+ case 'all_post':
360
+ global $post, $wpdb;
361
+ $saved_meta = get_post_meta( $post->ID, 'sp_wpcp_upload_options', true );
362
+ if ( isset( $saved_meta['post_type'] ) && '' != $saved_meta['post_type'] ) {
363
+
364
+ $all_posts = $wpdb->get_results( "SELECT ID,post_title FROM `" . $wpdb->prefix . "posts` where post_type='" . $saved_meta['post_type'] . "' and post_status = 'publish' ORDER BY post_date DESC" );
365
+
366
+ if ( ! is_wp_error( $all_posts ) && ! empty( $all_posts ) ) {
367
+ foreach ( $all_posts as $post_obj ) {
368
+ $options[ $post_obj->ID ] = $post_obj->post_title;
369
+ }
370
+ }
371
+ } else {
372
+ $post_types = get_post_types( array( 'public' => true ) );
373
+ $post_type_list = array();
374
+ $post_type_number = 1;
375
+ foreach ( $post_types as $post_type => $label ) {
376
+ $post_type_list[ $post_type_number++ ] = $label;
377
+ }
378
+
379
+ $all_posts = $wpdb->get_results( "SELECT ID,post_title FROM `" . $wpdb->prefix . "posts` where post_type='" . $post_type_list[1] . "' and post_status = 'publish' ORDER BY post_date DESC" );
380
+
381
+ if ( ! is_wp_error( $all_posts ) && ! empty( $all_posts ) ) {
382
+ foreach ( $all_posts as $post_obj ) {
383
+ $options[ $post_obj->ID ] = $post_obj->post_title;
384
+ }
385
+ }
386
+ }
387
+
388
+ break;
389
+
390
+ case 'taxonomies':
391
+ case 'taxonomy':
392
+ global $post;
393
+ $saved_meta = get_post_meta( $post->ID, 'sp_wpcp_upload_options', true );
394
+ if ( isset( $saved_meta['post_type'] ) && '' != $saved_meta['post_type'] ) {
395
+ $taxonomy_names = get_object_taxonomies( $saved_meta['post_type'], 'names' );
396
+ if ( ! is_wp_error( $taxonomy_names ) && ! empty( $taxonomy_names ) ) {
397
+ foreach ( $taxonomy_names as $taxonomy => $label ) {
398
+ $options[ $label ] = $label;
399
+ }
400
+ }
401
+ } else {
402
+ $post_types = get_post_types( array( 'public' => true ) );
403
+ $post_type_list = array();
404
+ $post_type_number = 1;
405
+ foreach ( $post_types as $post_type => $label ) {
406
+ $post_type_list[ $post_type_number++ ] = $label;
407
+ }
408
+ $taxonomy_names = get_object_taxonomies( $post_type_list['1'], 'names' );
409
+ foreach ( $taxonomy_names as $taxonomy => $label ) {
410
+ $options[ $label ] = $label;
411
+ }
412
+ }
413
+
414
+ break;
415
+
416
+ case 'terms':
417
+ case 'term':
418
+ global $post;
419
+ $saved_meta = get_post_meta( $post->ID, 'sp_wpcp_upload_options', true );
420
+ if ( isset( $saved_meta['post_taxonomy'] ) && $saved_meta['post_taxonomy'] != '' ) {
421
+ $terms = get_terms( $saved_meta['post_taxonomy'] );
422
+ foreach ( $terms as $key => $value ) {
423
+ $options[ $value->term_id ] = $value->name;
424
+ }
425
+ } else {
426
+ $post_types = get_post_types( array( 'public' => true ) );
427
+ $post_type_list = array();
428
+ $post_type_number = 1;
429
+ foreach ( $post_types as $post_type => $label ) {
430
+ $post_type_list[ $post_type_number++ ] = $label;
431
+ }
432
+ $taxonomy_names = get_object_taxonomies( $post_type_list['1'], 'names' );
433
+ $taxonomy_number = 1;
434
+ foreach ( $taxonomy_names as $taxonomy => $label ) {
435
+ $taxonomy_terms[ $taxonomy_number++ ] = $label;
436
+ }
437
+ $terms = get_terms( $taxonomy_terms['1'] );
438
+ foreach ( $terms as $key => $value ) {
439
+ $options[ $value->term_id ] = $value->name;
440
+ }
441
+ }
442
+
443
+ break;
444
+
445
+ case 'categories':
446
+ case 'category':
447
+ $categories = get_categories( $query_args );
448
+
449
+ if ( ! is_wp_error( $categories ) && ! empty( $categories ) && ! isset( $categories['errors'] ) ) {
450
+ foreach ( $categories as $category ) {
451
+ $options[ $category->term_id ] = $category->name;
452
+ }
453
+ }
454
+
455
+ break;
456
+
457
+ case 'tags':
458
+ case 'tag':
459
+ $taxonomies = ( isset( $query_args['taxonomies'] ) ) ? $query_args['taxonomies'] : 'post_tag';
460
+ $tags = get_terms( $taxonomies, $query_args );
461
+
462
+ if ( ! is_wp_error( $tags ) && ! empty( $tags ) ) {
463
+ foreach ( $tags as $tag ) {
464
+ $options[ $tag->term_id ] = $tag->name;
465
+ }
466
+ }
467
+
468
+ break;
469
+
470
+ case 'custom':
471
+ case 'callback':
472
+ if ( is_callable( $query_args['function'] ) ) {
473
+ $options = call_user_func( $query_args['function'], $query_args['args'] );
474
+ }
475
+
476
+ break;
477
+
478
+ }
479
+
480
+ return $options;
481
+ }
482
+
483
+ /**
484
+ * If the the option is checked.
485
+ *
486
+ * @param string $helper Helper option check.
487
+ * @param string $current Current option check.
488
+ * @param string $type Type option check.
489
+ * @param boolean $echo Echo opiton check.
490
+ * @return statement
491
+ */
492
+ public function checked( $helper = '', $current = '', $type = 'checked', $echo = false ) {
493
+
494
+ if ( is_array( $helper ) && in_array( $current, $helper ) ) {
495
+ $result = ' ' . $type . '="' . $type . '"';
496
+ } elseif ( $helper == $current ) {
497
+ $result = ' ' . $type . '="' . $type . '"';
498
+ } else {
499
+ $result = '';
500
+ }
501
+
502
+ if ( $echo ) {
503
+ echo $result;
504
+ }
505
+
506
+ return $result;
507
+
508
+ }
509
+
510
+ /**
511
+ * Multi-language element.
512
+ *
513
+ * @return statement
514
+ */
515
+ public function element_multilang() {
516
+ return ( isset( $this->field['multilang'] ) ) ? sp_language_defaults() : false;
517
+ }
518
+
519
+ }
520
+
521
+ // Load all of fields.
522
+ sp_wpcp_load_option_fields();
admin/views/meta-box/config/framework.config.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die;
3
+ } // Cannot access pages directly.
4
+ // ===============================================================================================
5
+ // -----------------------------------------------------------------------------------------------
6
+ // FRAMEWORK SETTINGS
7
+ // -----------------------------------------------------------------------------------------------
8
+ // ===============================================================================================
9
+ $settings = array(
10
+ 'menu_title' => __( 'Settings', 'wp-carousel-free' ),
11
+ 'menu_parent' => 'edit.php?post_type=sp_wp_carousel',
12
+ 'menu_type' => 'submenu', // menu, submenu, options, theme, etc.
13
+ 'menu_slug' => 'wpcp_settings',
14
+ 'ajax_save' => true,
15
+ 'show_reset_all' => false,
16
+ 'framework_title' => __( 'WordPress Carousel', 'wp-carousel-free' ),
17
+ );
18
+
19
+ // ===============================================================================================
20
+ // -----------------------------------------------------------------------------------------------
21
+ // FRAMEWORK OPTIONS
22
+ // -----------------------------------------------------------------------------------------------
23
+ // ===============================================================================================
24
+ $options = array();
25
+
26
+ // ----------------------------------------
27
+ // a option section for options overview -
28
+ // ----------------------------------------
29
+ $options[] = array(
30
+ 'name' => 'general_settings',
31
+ 'title' => __( 'Advanced Settings', 'wp-carousel-free' ),
32
+ 'icon' => 'fa fa-cogs',
33
+
34
+ // Begin fields.
35
+ 'fields' => array(
36
+ array(
37
+ 'type' => 'subheading',
38
+ 'content' => __( 'Enqueue or Dequeue CSS', 'wp-carousel-free' ),
39
+ ),
40
+ array(
41
+ 'id' => 'wpcp_dequeue_slick_css',
42
+ 'type' => 'switcher',
43
+ 'title' => __( 'Slick CSS', 'wp-carousel-free' ),
44
+ 'desc' => __( 'On/off the switch to enqueue/dequeue slick CSS.', 'wp-carousel-free' ),
45
+ 'default' => true,
46
+ ),
47
+ array(
48
+ 'id' => 'wpcp_dequeue_fa_css',
49
+ 'type' => 'switcher',
50
+ 'title' => __( 'Font Awesome CSS', 'wp-carousel-free' ),
51
+ 'desc' => __( 'On/off the switch to enqueue/dequeue font awesome CSS.', 'wp-carousel-free' ),
52
+ 'default' => true,
53
+ ),
54
+ ), // End fields.
55
+ );
56
+
57
+ // ------------------------------
58
+ // Custom CSS -
59
+ // ------------------------------
60
+ $options[] = array(
61
+ 'name' => 'custom_css_section',
62
+ 'title' => __( 'Custom CSS', 'wp-carousel-free' ),
63
+ 'icon' => 'fa fa-css3',
64
+ 'fields' => array(
65
+
66
+ array(
67
+ 'id' => 'wpcp_custom_css',
68
+ 'type' => 'textarea',
69
+ 'title' => __( 'Custom CSS', 'wp-carousel-free' ),
70
+ 'desc' => __( 'Type your css.', 'wp-carousel-free' ),
71
+ ),
72
+
73
+ ),
74
+ );
75
+
76
+ SP_WPCP_Framework::instance( $settings, $options );
admin/views/meta-box/config/metabox.config.php ADDED
@@ -0,0 +1,727 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die;
3
+ }
4
+ // Cannot access pages directly.
5
+ // ===============================================================================================
6
+ // -----------------------------------------------------------------------------------------------
7
+ // METABOX OPTIONS
8
+ // -----------------------------------------------------------------------------------------------
9
+ // ===============================================================================================
10
+ $options = array();
11
+
12
+ /**
13
+ * Image, Video and Content Metabox.
14
+ */
15
+ $options[] = array(
16
+ 'id' => 'sp_wpcp_upload_options',
17
+ 'title' => __( 'Upload Options', 'wp-carousel-free' ),
18
+ 'post_type' => 'sp_wp_carousel',
19
+ 'context' => 'normal',
20
+ 'priority' => 'default',
21
+ 'sections' => array(
22
+ // Begin: a section.
23
+ array(
24
+ 'name' => 'sp_wpcp_upload_options_1',
25
+ // 'title' => __( 'Carousel Content', 'wp-carousel-free' ),
26
+ 'icon' => 'fa fa-file',
27
+ // Begin fields.
28
+ 'fields' => array(
29
+ array(
30
+ 'id' => 'wpcp_carousel_type',
31
+ 'type' => 'carousel_type',
32
+ 'title' => __( 'Carousel Type', 'wp-carousel-free' ),
33
+ // 'desc' => __( 'Select which carousel type you want to display.', 'wp-carousel-free' ),
34
+ 'options' => array(
35
+ 'image-carousel' => array(
36
+ 'icon' => 'fa fa-image',
37
+ 'text' => __( 'Image', 'wp-carousel-free' ),
38
+ 'pro_only' => false,
39
+ ),
40
+ 'post-carousel' => array(
41
+ 'icon' => 'dashicons dashicons-admin-post',
42
+ 'text' => __( 'Post', 'wp-carousel-free' ),
43
+ 'pro_only' => false,
44
+ ),
45
+ 'product-carousel' => array(
46
+ 'icon' => 'fa fa-cart-plus',
47
+ 'text' => __( 'Product', 'wp-carousel-free' ),
48
+ 'pro_only' => false,
49
+ ),
50
+ 'content-carousel' => array(
51
+ 'icon' => 'fa fa-file-text-o',
52
+ 'text' => __( 'Content', 'wp-carousel-free' ),
53
+ 'pro_only' => true,
54
+ ),
55
+ 'video-carousel' => array(
56
+ 'icon' => 'fa fa-play-circle-o',
57
+ 'text' => __( 'Video', 'wp-carousel-free' ),
58
+ 'pro_only' => true,
59
+ ),
60
+ ),
61
+ 'radio' => true,
62
+ 'default' => 'image-carousel',
63
+ 'attributes' => array(
64
+ 'data-depend-id' => 'wpcp_carousel_type',
65
+ ),
66
+ ),
67
+ array(
68
+ 'id' => 'wpcp_gallery',
69
+ 'type' => 'gallery',
70
+ 'title' => 'Gallery Images',
71
+ 'wrap_class' => 'wpcp-gallery-filed-wrapper',
72
+ 'add_title' => __( 'ADD IMAGE', 'wp-carousel-free' ),
73
+ 'edit_title' => __( 'EDIT IMAGE', 'wp-carousel-free' ),
74
+ 'clear_title' => __( 'REMOVE ALL', 'wp-carousel-free' ),
75
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'image-carousel' ),
76
+ ),
77
+ array(
78
+ 'id' => 'wpcp_display_posts_from',
79
+ 'type' => 'select',
80
+ 'title' => __( 'Display Posts From', 'wp-carousel-free' ),
81
+ 'desc' => __( 'Select an option to display the posts.', 'wp-carousel-free' ),
82
+ 'options' => array(
83
+ 'latest' => array(
84
+ 'text' => __( 'Latest', 'wp-carousel-free' ),
85
+ ),
86
+ 'taxonomy' => array(
87
+ 'text' => __( 'Taxonomy (Pro)', 'wp-carousel-free' ),
88
+ 'pro_only' => true,
89
+ ),
90
+ 'specific_post' => array(
91
+ 'text' => __( 'Specific Posts (Pro)', 'wp-carousel-free' ),
92
+ 'pro_only' => true,
93
+ ),
94
+ ),
95
+ 'default' => 'latest',
96
+ 'class' => 'chosen',
97
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'post-carousel' ),
98
+ ),
99
+ array(
100
+ 'id' => 'number_of_total_posts',
101
+ 'type' => 'number',
102
+ 'title' => __( 'Total Posts', 'wp-carousel-free' ),
103
+ 'desc' => __( 'Number of total posts to show. Default value is 50.', 'wp-carousel-free' ),
104
+ 'default' => '50',
105
+ 'attributes' => array(
106
+ 'min' => 0,
107
+ ),
108
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'post-carousel' ),
109
+ ),
110
+ // Product Carousel.
111
+ array(
112
+ 'id' => 'wpcp_display_product_from',
113
+ 'type' => 'select',
114
+ 'title' => __( 'Display Product From', 'wp-carousel-free' ),
115
+ 'desc' => __( 'Select an option to display the products.', 'wp-carousel-free' ),
116
+ 'options' => array(
117
+ 'latest' => array(
118
+ 'text' => __( 'Latest', 'wp-carousel-free' ),
119
+ ),
120
+ 'taxonomy' => array(
121
+ 'text' => __( 'Taxonomy (Pro)', 'wp-carousel-free' ),
122
+ 'pro_only' => true,
123
+ ),
124
+ 'specific_post' => array(
125
+ 'text' => __( 'Specific Products (Pro)', 'wp-carousel-free' ),
126
+ 'pro_only' => true,
127
+ ),
128
+ ),
129
+ 'default' => 'latest',
130
+ 'class' => 'chosen',
131
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'product-carousel' ),
132
+ ),
133
+ array(
134
+ 'id' => 'wpcp_total_products',
135
+ 'type' => 'number',
136
+ 'title' => __( 'Total Products', 'wp-carousel-free' ),
137
+ 'desc' => __( 'Number of total products to display. Default value is 50.', 'wp-carousel-free' ),
138
+ 'default' => '50',
139
+ 'attributes' => array(
140
+ 'min' => 1,
141
+ ),
142
+ 'dependency' => array( 'wpcp_display_product_from|wpcp_carousel_type', '!=|==', 'specific_products|product-carousel' ),
143
+ ),
144
+ ), // End: fields.
145
+ ), // End: Upload section.
146
+ ),
147
+ );
148
+ // -----------------------------------------
149
+ // Shortcode Generator Options
150
+ // -----------------------------------------
151
+ $options[] = array(
152
+ 'id' => 'sp_wpcp_shortcode_options',
153
+ 'title' => __( 'Shortcode Options', 'wp-carousel-free' ),
154
+ 'post_type' => 'sp_wp_carousel',
155
+ 'context' => 'normal',
156
+ 'priority' => 'default',
157
+ 'sections' => array(
158
+ // Begin: a section.
159
+ array(
160
+ 'name' => 'sp_wcpcp_shortcode_option_1',
161
+ 'title' => __( 'General Settings', 'wp-carousel-free' ),
162
+ 'icon' => 'fa fa-wrench',
163
+ // Begin fields.
164
+ 'fields' => array(
165
+ array(
166
+ 'id' => 'section_title',
167
+ 'type' => 'switcher',
168
+ 'title' => __( 'Carousel Section Title', 'wp-carousel-free' ),
169
+ 'desc' => __( 'Show/Hide the carousel section title.', 'wp-carousel-free' ),
170
+ 'default' => false,
171
+ ),
172
+ array(
173
+ 'id' => 'section_title_margin_bottom',
174
+ 'type' => 'number',
175
+ 'title' => __( 'Carousel Title Margin Bottom', 'wp-carousel-free' ),
176
+ 'desc' => __( 'Set margin bottom for the carousel section title. Default value is 30px.', 'wp-carousel-free' ),
177
+ 'after' => __( '(px)', 'wp-carousel-free' ),
178
+ 'default' => 30,
179
+ 'attributes' => array(
180
+ 'min' => 0,
181
+ ),
182
+ 'dependency' => array(
183
+ 'section_title',
184
+ '==',
185
+ 'true',
186
+ ),
187
+ ),
188
+ array(
189
+ 'id' => 'wpcp_number_of_columns',
190
+ 'type' => 'column',
191
+ 'title' => __( 'Carousel Column(s)', 'wp-carousel-free' ),
192
+ 'desc' => __( 'Set number of column on devices.', 'wp-carousel-free' ),
193
+ 'default' => array(
194
+ 'column1' => '5',
195
+ 'title1' => __( 'Large Desktop', 'wp-carousel-free' ),
196
+ 'help1' => __( 'Set number of column(s) for the screen larger than 1200px. Default value is 5.', 'wp-carousel-free' ),
197
+ 'column2' => '4',
198
+ 'title2' => __( 'Desktop', 'wp-carousel-free' ),
199
+ 'help2' => __( 'Set number of column on desktop for the screen smaller than 1200px. Default value is 4.', 'wp-carousel-free' ),
200
+ 'column3' => '3',
201
+ 'title3' => __( 'Small Desktop', 'wp-carousel-free' ),
202
+ 'help3' => __( 'Set number of column on small desktop for the screen smaller than 980px. Default value is 3.', 'wp-carousel-free' ),
203
+ 'column4' => '2',
204
+ 'title4' => __( 'Tablet', 'wp-carousel-free' ),
205
+ 'help4' => __( 'Set number of column on tablet for the screen smaller than 736px. Default value is 2.', 'wp-carousel-free' ),
206
+ 'column5' => '1',
207
+ 'title5' => __( 'Mobile', 'wp-carousel-free' ),
208
+ 'help5' => __( 'Set number of column on mobile for the screen smaller than 480px. Default value is 1.', 'wp-carousel-free' ),
209
+ 'min1' => 1,
210
+ 'max1' => 40,
211
+ 'min2' => 1,
212
+ 'max2' => 40,
213
+ 'min3' => 1,
214
+ 'max3' => 40,
215
+ 'min4' => 1,
216
+ 'max4' => 20,
217
+ 'min5' => 0,
218
+ 'max5' => 20,
219
+ ),
220
+ 'column1' => true,
221
+ 'column2' => true,
222
+ 'column3' => true,
223
+ 'column4' => true,
224
+ 'column5' => true,
225
+ // 'dependency' => array( 'wpcp_carousel_mode', '==', 'standard' ),
226
+ ),
227
+ array(
228
+ 'id' => 'wpcp_image_order_by',
229
+ 'type' => 'select',
230
+ 'title' => __( 'Order by', 'wp-carousel-free' ),
231
+ 'desc' => __( 'Set an order by option.', 'wp-carousel-free' ),
232
+ 'options' => array(
233
+ 'menu_order' => array(
234
+ 'text' => __( 'Drag & Drop', 'wp-carousel-free' ),
235
+ ),
236
+ 'rand' => array(
237
+ 'text' => __( 'Random', 'wp-carousel-free' )
238
+ ),
239
+ ),
240
+ 'default' => 'menu_order',
241
+ 'dependency' => array( 'wpcp_carousel_type', 'any', 'image-carousel' ),
242
+ ),
243
+ array(
244
+ 'id' => 'wpcp_post_order_by',
245
+ 'type' => 'select',
246
+ 'title' => __( 'Order by', 'wp-carousel-free' ),
247
+ 'desc' => __( 'Select an order by option.', 'wp-carousel-free' ),
248
+ 'options' => array(
249
+ 'ID' => array(
250
+ 'text' => __( 'ID', 'wp-carousel-free' ),
251
+ ),
252
+ 'date' => array(
253
+ 'text' => __( 'Date', 'wp-carousel-free' ),
254
+ ),
255
+ 'rand' => array(
256
+ 'text' => __( 'Random', 'wp-carousel-free' ),
257
+ ),
258
+ 'title' => array(
259
+ 'text' => __( 'Title', 'wp-carousel-free' ),
260
+ ),
261
+ 'modified' => array(
262
+ 'text' => __( 'Modified', 'wp-carousel-free' ),
263
+ ),
264
+ 'menu_order' => array(
265
+ 'text' => __( 'Menu Order', 'wp-carousel-free' ),
266
+ ),
267
+ ),
268
+ 'default' => 'menu_order',
269
+ 'dependency' => array( 'wpcp_carousel_type', 'any', 'post-carousel,product-carousel' ),
270
+ ),
271
+ array(
272
+ 'id' => 'wpcp_post_order',
273
+ 'type' => 'select',
274
+ 'title' => __( 'Order', 'wp-carousel-free' ),
275
+ 'desc' => __( 'Select an order option.', 'wp-carousel-free' ),
276
+ 'options' => array(
277
+ 'ASC' => array(
278
+ 'text' => __( 'Ascending', 'wp-carousel-free' )
279
+ ),
280
+ 'DESC' => array(
281
+ 'text' => __( 'Descending', 'wp-carousel-free' )
282
+ ),
283
+ ),
284
+ 'default' => 'rand',
285
+ 'dependency' => array( 'wpcp_carousel_type', 'any', 'post-carousel,product-carousel' ),
286
+ ),
287
+ ), // End: fields.
288
+ ), // End: General section.
289
+
290
+ // Begin Carousel Settings.
291
+ array(
292
+ 'name' => 'sp_wcpcp_shortcode_option_2',
293
+ 'title' => __( 'Carousel Settings', 'wp-carousel-free' ),
294
+ 'icon' => 'fa fa-sliders',
295
+ 'fields' => array(
296
+ array(
297
+ 'id' => 'wpcp_carousel_auto_play',
298
+ 'type' => 'switcher',
299
+ 'title' => __( 'AutoPlay', 'wp-carousel-free' ),
300
+ 'desc' => __( 'On/Off auto play.', 'wp-carousel-free' ),
301
+ 'default' => true,
302
+ //'dependency' => array( 'wpcp_carousel_mode', '==', 'standard' ),
303
+ ),
304
+ array(
305
+ 'id' => 'carousel_auto_play_speed',
306
+ 'type' => 'number',
307
+ 'title' => __( 'AutoPlay Speed', 'wp-carousel-free' ),
308
+ 'desc' => __( 'Set auto play speed. Default value is 3000 ms.', 'wp-carousel-free' ),
309
+ 'after' => __( '(millisecond)', 'wp-carousel-free' ),
310
+ 'default' => '3000',
311
+ 'attributes' => array(
312
+ 'min' => 0,
313
+ ),
314
+ 'dependency' => array( 'wpcp_carousel_auto_play', '==', 'true'),
315
+ ),
316
+ array(
317
+ 'id' => 'standard_carousel_scroll_speed',
318
+ 'type' => 'number',
319
+ 'title' => __( 'Pagination Speed', 'wp-carousel-free' ),
320
+ 'desc' => __( 'Set pagination/slide scroll speed. Default value is 600 ms.', 'wp-carousel-free' ),
321
+ 'after' => __( '(millisecond)', 'wp-carousel-free' ),
322
+ 'default' => '600',
323
+ 'attributes' => array(
324
+ 'min' => 0,
325
+ ),
326
+ ),
327
+ array(
328
+ 'id' => 'carousel_pause_on_hover',
329
+ 'type' => 'switcher',
330
+ 'title' => __( 'Pause on Hover', 'wp-carousel-free' ),
331
+ 'desc' => __( 'On/Off carousel pause on hover.', 'wp-carousel-free' ),
332
+ 'default' => true,
333
+ ),
334
+ array(
335
+ 'id' => 'carousel_infinite',
336
+ 'type' => 'switcher',
337
+ 'title' => __( 'Infinite Loop', 'wp-carousel-free' ),
338
+ 'desc' => __( 'On/Off infinite loop mode.', 'wp-carousel-free' ),
339
+ 'default' => true,
340
+ ),
341
+ array(
342
+ 'type' => 'subheading',
343
+ 'content' => __( 'Navigation Settings', 'wp-carousel-free' ),
344
+ ),
345
+ // Navigation Settings.
346
+ array(
347
+ 'id' => 'wpcp_navigation',
348
+ 'type' => 'button_set',
349
+ 'title' => __( 'Navigation', 'wp-carousel-free' ),
350
+ 'desc' => __( 'Show/Hide carousel navigation.', 'wp-carousel-free' ),
351
+ 'options' => array(
352
+ 'show' => __( 'Show', 'wp-carousel-free' ),
353
+ 'hide' => __( 'Hide', 'wp-carousel-free' ),
354
+ 'hide_mobile' => __( 'Hide on Mobile', 'wp-carousel-free' ),
355
+ ),
356
+ 'radio' => true,
357
+ 'default' => 'show',
358
+ 'attributes' => array(
359
+ 'data-depend-id' => 'wpcp_navigation',
360
+ ),
361
+ ),
362
+ array(
363
+ 'id' => 'wpcp_nav_colors',
364
+ 'type' => 'color_set',
365
+ 'title' => __( 'Navigation Color', 'wp-carousel-free' ),
366
+ 'desc' => __( 'Set color for the carousel navigation.', 'wp-carousel-free' ),
367
+ 'color1' => true,
368
+ 'color2' => true,
369
+ 'default' => array(
370
+ 'title1' => __( 'Color', 'wp-carousel-free' ),
371
+ 'color1' => '#aaa',
372
+ 'title2' => __( 'Hover Color', 'wp-carousel-free' ),
373
+ 'color2' => '#18AFB9',
374
+ ),
375
+ 'dependency' => array( 'wpcp_navigation', '!=', 'hide' ),
376
+ ),
377
+ // Pagination Settings.
378
+ array(
379
+ 'type' => 'subheading',
380
+ 'content' => __( 'Pagination Settings', 'wp-carousel-free' ),
381
+ ),
382
+ array(
383
+ 'id' => 'wpcp_pagination',
384
+ 'type' => 'button_set',
385
+ 'title' => __( 'Pagination', 'wp-carousel-free' ),
386
+ 'desc' => __( 'Show/Hide carousel pagination.', 'wp-carousel-free' ),
387
+ 'options' => array(
388
+ 'show' => __( 'Show', 'wp-carousel-free' ),
389
+ 'hide' => __( 'Hide', 'wp-carousel-free' ),
390
+ 'hide_mobile' => __( 'Hide on Mobile', 'wp-carousel-free' ),
391
+ ),
392
+ 'radio' => true,
393
+ 'default' => 'hide_mobile',
394
+ 'attributes' => array(
395
+ 'data-depend-id' => 'wpcp_pagination',
396
+ ),
397
+ ),
398
+ array(
399
+ 'id' => 'wpcp_pagination_color',
400
+ 'type' => 'color_set',
401
+ 'title' => __( 'Pagination Color', 'wp-carousel-free' ),
402
+ 'desc' => __( 'Set color for the carousel pagination dots.', 'wp-carousel-free' ),
403
+ 'color1' => true,
404
+ 'color2' => true,
405
+ 'default' => array(
406
+ 'title1' => __( 'Color', 'wp-carousel-free' ),
407
+ 'color1' => '#cccccc',
408
+ 'title2' => __( 'Active Color', 'wp-carousel-free' ),
409
+ 'color2' => '#18AFB9',
410
+ ),
411
+ 'dependency' => array( 'wpcp_pagination', '!=', 'hide' ),
412
+ ),
413
+
414
+ // Miscellaneous Settings.
415
+ array(
416
+ 'type' => 'subheading',
417
+ 'content' => __( 'Misc. Settings', 'wp-carousel-free' ),
418
+ ),
419
+ array(
420
+ 'id' => 'wpcp_accessibility',
421
+ 'type' => 'switcher',
422
+ 'title' => __( 'Tab and Key Navigation', 'wp-carousel-free' ),
423
+ 'desc' => __( 'Enable/Disable carousel scroll with tab and keyboard.', 'wp-carousel-free' ),
424
+ 'default' => true,
425
+ ),
426
+ array(
427
+ 'id' => 'slider_swipe',
428
+ 'type' => 'switcher',
429
+ 'title' => __( 'Swipe', 'wp-carousel-free' ),
430
+ 'desc' => __( 'On/Off swipe mode.', 'wp-carousel-free' ),
431
+ 'default' => true,
432
+ ),
433
+ array(
434
+ 'id' => 'slider_draggable',
435
+ 'type' => 'switcher',
436
+ 'title' => __( 'Mouse Draggable', 'wp-carousel-free' ),
437
+ 'desc' => __( 'On/Off mouse draggable mode.', 'wp-carousel-free' ),
438
+ 'default' => true,
439
+ 'dependency' => array( 'slider_swipe', '==', 'true'),
440
+ ),
441
+ array(
442
+ 'id' => 'rtl_mode',
443
+ 'type' => 'switcher',
444
+ 'title' => __( 'RTL', 'wp-carousel-free' ),
445
+ 'desc' => __( 'On/Off right to left mode.', 'wp-carousel-free' ),
446
+ 'default' => false,
447
+ ),
448
+ array(
449
+ 'type' => 'notice',
450
+ 'class' => 'danger',
451
+ 'content' => __( 'To make the RTL Mode work, please select an rtl language in the dashboard e.g. Arabic, Hebrew.', 'wp-carousel-free' ),
452
+ 'dependency' => array( 'rtl_mode', '==', 'true' ),
453
+ ),
454
+ ), // End Fields.
455
+ ), // End Carousel section.
456
+
457
+ // Begin Style Settings.
458
+ array(
459
+ 'name' => 'sp_wcpcp_shortcode_option_3',
460
+ 'title' => __( 'Style Settings', 'wp-carousel-free' ),
461
+ 'icon' => 'fa fa-paint-brush',
462
+ 'fields' => array(
463
+ array(
464
+ 'id' => 'wpcp_post_detail_position',
465
+ 'type' => 'select',
466
+ 'title' => __( 'Content Position', 'wp-carousel-free' ),
467
+ 'desc' => __( 'Select a position for the title, content, meta etc.', 'wp-carousel-free' ),
468
+ 'options' => array(
469
+ 'bottom' => array(
470
+ 'text' => __( 'Bottom', 'wp-carousel-free' ),
471
+ ),
472
+ 'on_right' => array(
473
+ 'text' => __( 'Right (Pro)', 'wp-carousel-free' ),
474
+ 'pro_only' => true,
475
+ ),
476
+ 'with_overlay' => array(
477
+ 'text' => __( 'Overlay (Pro)', 'wp-carousel-free' ),
478
+ 'pro_only' => true,
479
+ ),
480
+ ),
481
+ 'default' => 'bottom',
482
+ 'dependency' => array( 'wpcp_carousel_type', 'any', 'image-carousel,post-carousel,product-carousel' ),
483
+ ),
484
+ array(
485
+ 'id' => 'wpcp_slide_border',
486
+ 'type' => 'border',
487
+ 'title' => __( 'Slide Border', 'wp-carousel-free' ),
488
+ 'desc' => __( 'Set border for the slide.', 'wp-carousel-free' ),
489
+ 'default' => array(
490
+ 'width' => '1',
491
+ 'style' => 'solid',
492
+ 'color' => '#dddddd',
493
+ // 'hover_color' => '#dddddd',
494
+ ),
495
+ // 'hover_color' => true,
496
+ ),
497
+ // Post Settings.
498
+ array(
499
+ 'id' => 'wpcp_post_title',
500
+ 'type' => 'switcher',
501
+ 'title' => __( 'Post Title', 'wp-carousel-free' ),
502
+ 'desc' => __( 'Show/Hide post title.', 'wp-carousel-free' ),
503
+ 'default' => true,
504
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'post-carousel' ),
505
+ ),
506
+ array(
507
+ 'id' => 'wpcp_post_content_show',
508
+ 'type' => 'switcher',
509
+ 'title' => __( 'Post Content', 'wp-carousel-free' ),
510
+ 'desc' => __( 'Show/Hide post content.', 'wp-carousel-free' ),
511
+ 'default' => true,
512
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'post-carousel' ),
513
+ ),
514
+ array(
515
+ 'id' => 'wpcp_post_content_type',
516
+ 'type' => 'select',
517
+ 'title' => __( 'Content Display Type', 'wp-carousel-free' ),
518
+ 'desc' => __( 'Select a content display type.', 'wp-carousel-free' ),
519
+ 'options' => array(
520
+ 'excerpt' => array(
521
+ 'text' => __( 'Excerpt', 'wp-carousel-free' ),
522
+ ),
523
+ 'content' => array(
524
+ 'text' => __( 'Full Content (Pro)', 'wp-carousel-free' ),
525
+ 'pro_only' => true,
526
+ ),
527
+ 'content_with_limit' => array(
528
+ 'text' => __( 'Content with Limit (Pro)', 'wp-carousel-free' ),
529
+ 'pro_only' => true,
530
+ ),
531
+ ),
532
+ 'default' => 'excerpt',
533
+ 'class' => 'chosen',
534
+ 'dependency' => array( 'wpcp_carousel_type|wpcp_post_content_show', '==|==', 'post-carousel|true' ),
535
+ ),
536
+ array(
537
+ 'type' => 'subheading',
538
+ 'content' => __( 'Post Meta', 'wp-carousel-free' ),
539
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'post-carousel' ),
540
+ ),
541
+ array(
542
+ 'id' => 'wpcp_post_author_show',
543
+ 'type' => 'switcher',
544
+ 'title' => __( 'Post Author', 'wp-carousel-free' ),
545
+ 'desc' => __( 'Show/Hide post author name.', 'wp-carousel-free' ),
546
+ 'default' => true,
547
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'post-carousel' ),
548
+ ),
549
+ array(
550
+ 'id' => 'wpcp_post_date_show',
551
+ 'type' => 'switcher',
552
+ 'title' => __( 'Post Date', 'wp-carousel-free' ),
553
+ 'desc' => __( 'Show/Hide post date.', 'wp-carousel-free' ),
554
+ 'default' => true,
555
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'post-carousel' ),
556
+ ),
557
+
558
+ // Product Settings.
559
+ array(
560
+ 'type' => 'subheading',
561
+ 'content' => __( 'Product Settings', 'wp-carousel-free' ),
562
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'product-carousel' ),
563
+ ),
564
+ array(
565
+ 'id' => 'wpcp_product_name',
566
+ 'type' => 'switcher',
567
+ 'title' => __( 'Product Name', 'wp-carousel-free' ),
568
+ 'desc' => __( 'Show/Hide product name.', 'wp-carousel-free' ),
569
+ 'default' => true,
570
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'product-carousel' ),
571
+ ),
572
+ array(
573
+ 'id' => 'wpcp_product_price',
574
+ 'type' => 'switcher',
575
+ 'title' => __( 'Product Price', 'wp-carousel-free' ),
576
+ 'desc' => __( 'Show/Hide product price.', 'wp-carousel-free' ),
577
+ 'default' => true,
578
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'product-carousel' ),
579
+ ),
580
+ array(
581
+ 'id' => 'wpcp_product_rating',
582
+ 'type' => 'switcher',
583
+ 'title' => __( 'Product Rating', 'wp-carousel-free' ),
584
+ 'desc' => __( 'Show/Hide product rating.', 'wp-carousel-free' ),
585
+ 'default' => true,
586
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'product-carousel' ),
587
+ ),
588
+ array(
589
+ 'id' => 'wpcp_product_cart',
590
+ 'type' => 'switcher',
591
+ 'title' => __( 'Add to Cart Button', 'wp-carousel-free' ),
592
+ 'desc' => __( 'Show/Hide add to cart button.', 'wp-carousel-free' ),
593
+ 'default' => true,
594
+ 'dependency' => array( 'wpcp_carousel_type', '==', 'product-carousel' ),
595
+ ),
596
+ // Image Settings.
597
+ array(
598
+ 'type' => 'subheading',
599
+ 'content' => __( 'Image Settings', 'wp-carousel-free' ),
600
+ 'dependency' => array( 'wpcp_carousel_type', 'any', 'image-carousel,post-carousel,product-carousel' ),
601
+ ),
602
+ array(
603
+ 'id' => 'show_image',
604
+ 'type' => 'switcher',
605
+ 'title' => __( 'Image', 'wp-carousel-free' ),
606
+ 'desc' => __( 'Show/Hide slide image.', 'wp-carousel-free' ),
607
+ 'default' => true,
608
+ 'dependency' => array( 'wpcp_carousel_type', 'any', 'post-carousel,product-carousel' ),
609
+ ),
610
+ array(
611
+ 'id' => 'wpcp_image_sizes',
612
+ 'type' => 'image_sizes',
613
+ 'class' => 'chosen',
614
+ 'title' => __( 'Image Sizes', 'wp-carousel-free' ),
615
+ 'default' => 'full',
616
+ 'desc' => __( 'Select a image size.', 'wp-carousel-free' ),
617
+ 'dependency' => array( 'wpcp_carousel_type', 'any', 'image-carousel,post-carousel,product-carousel' ),
618
+ ),
619
+ array(
620
+ 'id' => '_image_title_attr',
621
+ 'type' => 'checkbox',
622
+ 'title' => __( 'Image Title Attribute', 'wp-carousel-free' ),
623
+ 'desc' => __( 'Check to add image title attribute.', 'wp-carousel-free' ),
624
+ 'default' => false,
625
+ 'dependency' => array( 'wpcp_carousel_type', 'any', 'image-carousel,post-carousel,product-carousel' ),
626
+ ),
627
+ ), // End Fields.
628
+ ), // End a section.
629
+
630
+ // Begin Typography the section.
631
+ array(
632
+ 'name' => 'sp_wpcp_shortcode_option_4',
633
+ 'title' => __( 'Typography', 'wp-carousel-free' ),
634
+ 'icon' => 'fa fa-font',
635
+ // begin fields.
636
+ 'fields' => array(
637
+ array(
638
+ 'type' => 'pronotice',
639
+ 'content' => __( 'These Typography (840+ Google Fonts) options are available in the <a href="https://shapedplugin.com/plugin/wordpress-carousel-pro/" target="_blank">Pro Version</a> only.', 'wp-carousel-free' ),
640
+ ),
641
+ array(
642
+ 'id' => 'section_title_font_load',
643
+ 'type' => 'switcher',
644
+ 'title' => __( 'Load Carousel Section Title Font', 'wp-carousel-free' ),
645
+ 'desc' => __( 'On/Off google font for the carousel section title.', 'wp-carousel-free' ),
646
+ 'default' => true,
647
+ ),
648
+ array(
649
+ 'id' => 'wpcp_section_title_typography',
650
+ 'type' => 'typography_advanced',
651
+ 'title' => __( 'Carousel Section Title Font', 'wp-carousel-free' ),
652
+ 'desc' => __( 'Set Carousel section title font properties.', 'wp-carousel-free' ),
653
+ 'default' => array(
654
+ 'family' => 'Open Sans',
655
+ 'variant' => '600',
656
+ 'font' => 'google',
657
+ 'size' => '24',
658
+ 'height' => '28',
659
+ 'alignment' => 'center',
660
+ 'transform' => 'none',
661
+ 'spacing' => 'normal',
662
+ 'color' => '#444444',
663
+ ),
664
+ 'color' => true,
665
+ 'preview' => true,
666
+ 'preview_text' => 'The Carousel Section Title', // Replace preview text with any text you like.
667
+ ),
668
+ array(
669
+ 'id' => 'wpcp_image_caption_font_load',
670
+ 'type' => 'switcher',
671
+ 'title' => __( 'Load Caption Font', 'wp-carousel-free' ),
672
+ 'desc' => __( 'On/Off google font for the image caption.', 'wp-carousel-free' ),
673
+ 'default' => true,
674
+ ),
675
+ array(
676
+ 'id' => 'wpcp_image_caption_typography',
677
+ 'type' => 'typography_advanced',
678
+ 'title' => __( 'Caption Font', 'wp-carousel-free' ),
679
+ 'desc' => __( 'Set caption font properties.', 'wp-carousel-free' ),
680
+ 'default' => array(
681
+ 'family' => 'Open Sans',
682
+ 'variant' => '600',
683
+ 'font' => 'google',
684
+ 'size' => '15',
685
+ 'height' => '23',
686
+ 'alignment' => 'center',
687
+ 'transform' => 'capitalize',
688
+ 'spacing' => 'normal',
689
+ 'color' => '#333',
690
+ ),
691
+ 'color' => true,
692
+ 'preview' => true,
693
+ 'preview_text' => 'The Caption', // Replace preview text with any text you like.
694
+ ),
695
+ array(
696
+ 'id' => 'wpcp_image_desc_font_load',
697
+ 'type' => 'switcher',
698
+ 'title' => __( 'Load Description Font', 'wp-carousel-free' ),
699
+ 'desc' => __( 'On/Off google font for the image description.', 'wp-carousel-free' ),
700
+ 'default' => true,
701
+ ),
702
+ array(
703
+ 'id' => 'wpcp_image_desc_typography',
704
+ 'type' => 'typography_advanced',
705
+ 'title' => __( 'Description Font', 'wp-carousel-free' ),
706
+ 'desc' => __( 'Set description font properties.', 'wp-carousel-free' ),
707
+ 'default' => array(
708
+ 'family' => 'Open Sans',
709
+ 'variant' => '400',
710
+ 'font' => 'google',
711
+ 'size' => '14',
712
+ 'height' => '21',
713
+ 'alignment' => 'center',
714
+ 'transform' => 'none',
715
+ 'spacing' => 'normal',
716
+ 'color' => '#333',
717
+ ),
718
+ 'color' => true,
719
+ 'preview' => true,
720
+ 'preview_text' => 'The image description', // Replace preview text with any text you like.
721
+ ),
722
+ ), // End fields.
723
+ ), // End Typography section.
724
+ ),
725
+ );
726
+
727
+ SP_WPCP_Framework_Metabox::instance( $options );
admin/views/meta-box/fields/border/border.php ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die;
3
+ } // Cannot access pages directly.
4
+
5
+ /**
6
+ *
7
+ * Field: Border
8
+ *
9
+ * @since 1.0
10
+ * @version 1.0
11
+ */
12
+ class SP_WPCP_Framework_Option_border extends SP_WPCP_Framework_Options {
13
+
14
+ public function __construct( $field, $value = '', $unique = '' ) {
15
+ parent::__construct( $field, $value, $unique );
16
+ }
17
+
18
+ public function output() {
19
+
20
+ echo $this->element_before();
21
+
22
+ $defaults_value = array(
23
+ 'width' => '',
24
+ 'style' => '',
25
+ 'color' => '',
26
+ 'hover_color' => '',
27
+ );
28
+
29
+ $value = wp_parse_args( $this->element_value(), $defaults_value );
30
+
31
+ // Container.
32
+ echo '<div class="sp_wpcp_border_field" data-id="' . $this->field['id'] . '">';
33
+
34
+ echo sp_wpcp_add_element(
35
+ array(
36
+ 'pseudo' => true,
37
+ 'type' => 'number',
38
+ 'name' => $this->element_name( '[width]' ),
39
+ 'value' => $value['width'],
40
+ 'default' => ( isset( $this->field['default']['width'] ) ) ? $this->field['default']['width'] : '',
41
+ 'wrap_class' => 'small-input sp-border-width',
42
+ 'before' => 'Width<br>',
43
+ 'after' => '(px)',
44
+ 'attributes' => array(
45
+ 'min' => 0,
46
+ 'title' => __( 'Border Width', 'logo-carousel-pro' ),
47
+ ),
48
+ )
49
+ );
50
+ echo sp_wpcp_add_element(
51
+ array(
52
+ 'pseudo' => true,
53
+ 'type' => 'select_typo',
54
+ 'name' => $this->element_name( '[style]' ),
55
+ 'value' => $value['style'],
56
+ 'default' => ( isset( $this->field['default']['style'] ) ) ? $this->field['default']['style'] : '',
57
+ 'wrap_class' => 'small-input sp-border-style sp-wpcp-select-wrapper',
58
+ 'class' => 'sp-wpcp-select-css',
59
+ 'before' => 'Style<br>',
60
+ 'attributes' => array(
61
+ 'title' => __( 'Border Style', 'logo-carousel-pro' ),
62
+ ),
63
+ 'options' => array(
64
+ 'none' => __( 'None', 'logo-carousel-pro' ),
65
+ 'solid' => __( 'Solid', 'logo-carousel-pro' ),
66
+ 'dotted' => __( 'Dotted', 'logo-carousel-pro' ),
67
+ 'dashed' => __( 'Dashed', 'logo-carousel-pro' ),
68
+ 'double' => __( 'Double', 'logo-carousel-pro' ),
69
+ 'groove' => __( 'Groove', 'logo-carousel-pro' ),
70
+ 'ridge' => __( 'Ridge', 'logo-carousel-pro' ),
71
+ 'inset' => __( 'Inset', 'logo-carousel-pro' ),
72
+ 'outset' => __( 'Outset', 'logo-carousel-pro' ),
73
+ ),
74
+ )
75
+ );
76
+ echo sp_wpcp_add_element(
77
+ array(
78
+ 'pseudo' => true,
79
+ 'type' => 'color_picker',
80
+ 'name' => $this->element_name( '[color]' ),
81
+ 'value' => $value['color'],
82
+ 'default' => ( isset( $this->field['default']['color'] ) ) ? $this->field['default']['color'] : '',
83
+ 'wrap_class' => 'small-input sp-border-color',
84
+ 'before' => 'Color<br>',
85
+ 'attributes' => array(
86
+ 'title' => __( 'Border Color', 'logo-carousel-pro' ),
87
+ ),
88
+ )
89
+ );
90
+ if ( isset( $this->field['hover_color'] ) && $this->field['hover_color'] == true ) {
91
+ echo sp_wpcp_add_element(
92
+ array(
93
+ 'pseudo' => true,
94
+ 'type' => 'color_picker',
95
+ 'name' => $this->element_name( '[hover_color]' ),
96
+ 'value' => $value['hover_color'],
97
+ 'default' => ( isset( $this->field['default']['hover_color'] ) ) ? $this->field['default']['hover_color'] : '',
98
+ 'wrap_class' => 'small-input sp-border-hover-color',
99
+ 'before' => 'Hover Color<br>',
100
+ 'attributes' => array(
101
+ 'title' => __( 'Border Hover Color', 'logo-carousel-pro' ),
102
+ ),
103
+ )
104
+ );
105
+ }
106
+
107
+ // end container.
108
+ echo '</div>';
109
+
110
+ echo $this->element_after();
111
+
112
+ }
113
+
114
+ }
admin/views/meta-box/fields/button_set/button_set.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: Button set
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_button_set extends SP_WPCP_Framework_Options {
11
+
12
+ /**
13
+ * Button set constructor.
14
+ *
15
+ * @param array $field The field array.
16
+ * @param string $value The value of the button set.
17
+ * @param string $unique The id for the button set field.
18
+ */
19
+ public function __construct( $field, $value = '', $unique = '' ) {
20
+ parent::__construct( $field, $value, $unique );
21
+ }
22
+
23
+ /**
24
+ * Function for the button set field.
25
+ *
26
+ * @return void
27
+ */
28
+ public function output() {
29
+
30
+ $input_type = ( ! empty( $this->field['radio'] ) ) ? 'radio' : 'checkbox';
31
+ $input_attr = ( ! empty( $this->field['multi_select'] ) ) ? '[]' : '';
32
+
33
+ echo $this->element_before();
34
+ echo ( empty( $input_attr ) ) ? '<div class="sp-field-button-set">' : '';
35
+
36
+ if ( isset( $this->field['options'] ) ) {
37
+ $options = $this->field['options'];
38
+ foreach ( $options as $key => $value ) {
39
+ echo '<label><input type="' . $input_type . '" name="' . $this->element_name( $input_attr ) . '" value="' . $key . '"' . $this->element_class() . $this->element_attributes( $key ) . $this->checked( $this->element_value(), $key ) . '/><span class="sp-button-set">' . $value . '</span></label>';
40
+ }
41
+ }
42
+
43
+ echo ( empty( $input_attr ) ) ? '</div>' : '';
44
+ echo $this->element_after();
45
+
46
+ }
47
+ }
admin/views/meta-box/fields/carousel_type/carousel_type.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: carousel_type
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_carousel_type extends SP_WPCP_Framework_Options {
11
+
12
+ /**
13
+ * Carousel type constructor.
14
+ *
15
+ * @param array $field The field array.
16
+ * @param string $value The value of the carousel type.
17
+ * @param string $unique The id for the carousel type field.
18
+ */
19
+ public function __construct( $field, $value = '', $unique = '' ) {
20
+ parent::__construct( $field, $value, $unique );
21
+ }
22
+
23
+ /**
24
+ * Function for the button set field.
25
+ *
26
+ * @return void
27
+ */
28
+ public function output() {
29
+ $input_type = ( ! empty( $this->field['radio'] ) ) ? 'radio' : 'checkbox';
30
+ $input_attr = ( ! empty( $this->field['multi_select'] ) ) ? '[]' : '';
31
+
32
+ echo $this->element_before();
33
+ echo ( empty( $input_attr ) ) ? '<div class="sp-field-carousel-type">' : '';
34
+
35
+ if ( isset( $this->field['options'] ) ) {
36
+ $options = $this->field['options'];
37
+ foreach ( $options as $key => $value ) {
38
+ $pro_only = true == $value['pro_only'] ? 'disabled' : '';
39
+ $pro_only_text = true == $value['pro_only'] ? '<strong class="ct-pro-only">PRO</strong>' : '';
40
+ echo '<label><input ' . $pro_only . ' type="' . $input_type . '" name="' . $this->element_name( $input_attr ) . '" value="' . $key . '"' . $this->element_class() . $this->element_attributes( $key ) . $this->checked( $this->element_value(), $key ) . '/><span>' . $pro_only_text . '<i class="' . $value['icon'] . '"></i><p class="sp-carousel-type">' . $value['text'] . '</p></span></label>';
41
+ }
42
+ }
43
+
44
+ echo ( empty( $input_attr ) ) ? '</div>' : '';
45
+ echo $this->element_after();
46
+
47
+ }
48
+ }
admin/views/meta-box/fields/checkbox/checkbox.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: Checkbox
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_checkbox extends SP_WPCP_Framework_Options {
11
+
12
+ public function __construct( $field, $value = '', $unique = '' ) {
13
+ parent::__construct( $field, $value, $unique );
14
+ }
15
+
16
+ public function output() {
17
+
18
+ echo $this->element_before();
19
+
20
+ if ( isset( $this->field['options'] ) ) {
21
+
22
+ $options = $this->field['options'];
23
+ $options = ( is_array( $options ) ) ? $options : array_filter( $this->element_data( $options ) );
24
+
25
+ if ( ! empty( $options ) ) {
26
+
27
+ echo '<ul' . $this->element_class() . '>';
28
+ foreach ( $options as $key => $value ) {
29
+ echo '<li><label><input type="checkbox" name="' . $this->element_name( '[]' ) . '" value="' . $key . '"' . $this->element_attributes( $key ) . $this->checked( $this->element_value(), $key ) . '/> ' . $value . '</label></li>';
30
+ }
31
+ echo '</ul>';
32
+ }
33
+ } else {
34
+ $label = ( isset( $this->field['label'] ) ) ? $this->field['label'] : '';
35
+ echo '<label><input type="checkbox" name="' . $this->element_name() . '" value="1"' . $this->element_class() . $this->element_attributes() . checked( $this->element_value(), 1, false ) . '/> ' . $label . '</label>';
36
+ }
37
+
38
+ echo $this->element_after();
39
+
40
+ }
41
+
42
+ }
admin/views/meta-box/fields/color_picker/color_picker.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: Color Picker
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_color_picker extends SP_WPCP_Framework_Options {
11
+
12
+ public function __construct( $field, $value = '', $unique = '' ) {
13
+ parent::__construct( $field, $value, $unique );
14
+ }
15
+
16
+ public function output() {
17
+
18
+ echo $this->element_before();
19
+ echo '<input' . $this->element_pro_only() . ' type="text" name="' . $this->element_name() . '" value="' . $this->element_value() . '"' . $this->element_class( 'sp-field-color-picker' ) . $this->element_attributes( $this->extra_attributes() ) . '/>';
20
+ echo $this->element_after();
21
+
22
+ }
23
+
24
+ public function extra_attributes() {
25
+
26
+ $atts = array();
27
+
28
+ if ( isset( $this->field['id'] ) ) {
29
+ $atts['data-depend-id'] = $this->field['id'];
30
+ }
31
+
32
+ if ( isset( $this->field['rgba'] ) && $this->field['rgba'] === false ) {
33
+ $atts['data-rgba'] = 'false';
34
+ }
35
+
36
+ if ( isset( $this->field['default'] ) ) {
37
+ $atts['data-default-color'] = $this->field['default'];
38
+ }
39
+
40
+ return $atts;
41
+
42
+ }
43
+
44
+ }
admin/views/meta-box/fields/color_set/color_set.php ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die;
3
+ } // Cannot access pages directly.
4
+
5
+ /**
6
+ *
7
+ * Field: Color Set
8
+ *
9
+ * @since 1.0.0
10
+ * @version 1.0.0
11
+ */
12
+ class SP_WPCP_Framework_Option_color_set extends SP_WPCP_Framework_Options {
13
+ /**
14
+ * The field constructor.
15
+ */
16
+ public function __construct( $field, $value = '', $unique = '' ) {
17
+ parent::__construct( $field, $value, $unique );
18
+ }
19
+
20
+ /**
21
+ * Output
22
+ *
23
+ * @return void
24
+ */
25
+ public function output() {
26
+
27
+ echo $this->element_before();
28
+
29
+ $defaults_value = array(
30
+ 'color1' => '',
31
+ 'color2' => '',
32
+ 'color3' => '',
33
+ 'color4' => '',
34
+ 'color5' => '',
35
+ 'color6' => '',
36
+ 'title1' => '',
37
+ 'title2' => '',
38
+ 'title3' => '',
39
+ 'title4' => '',
40
+ 'title5' => '',
41
+ 'title6' => '',
42
+ );
43
+
44
+ $value = wp_parse_args( $this->element_value(), $defaults_value );
45
+ $title = wp_parse_args( $this->field['default'], $defaults_value );
46
+
47
+ // Container.
48
+ echo '<div class="sp_wpcp_color_set_field" data-id="' . $this->field['id'] . '">';
49
+
50
+ if ( isset( $this->field['color1'] ) && $this->field['color1'] == true ) {
51
+ echo sp_wpcp_add_element(
52
+ array(
53
+ 'pseudo' => true,
54
+ 'type' => 'color_picker',
55
+ 'name' => $this->element_name( '[color1]' ),
56
+ 'value' => $value['color1'],
57
+ 'default' => ( isset( $this->field['default']['color1'] ) ) ? $this->field['default']['color1'] : '',
58
+ 'wrap_class' => 'sp-color-set',
59
+ 'before' => $title['title1'] . '<br>',
60
+ )
61
+ );
62
+ }
63
+ if ( isset( $this->field['color2'] ) && $this->field['color2'] == true ) {
64
+ echo sp_wpcp_add_element(
65
+ array(
66
+ 'pseudo' => true,
67
+ 'type' => 'color_picker',
68
+ 'name' => $this->element_name( '[color2]' ),
69
+ 'value' => $value['color2'],
70
+ 'default' => ( isset( $this->field['default']['color2'] ) ) ? $this->field['default']['color2'] : '',
71
+ 'wrap_class' => 'sp-color-set',
72
+ 'before' => $title['title2'] . '<br>',
73
+ )
74
+ );
75
+ }
76
+ if ( isset( $this->field['color3'] ) && $this->field['color3'] == true ) {
77
+ echo sp_wpcp_add_element(
78
+ array(
79
+ 'pseudo' => true,
80
+ 'type' => 'color_picker',
81
+ 'name' => $this->element_name( '[color3]' ),
82
+ 'value' => $value['color3'],
83
+ 'default' => ( isset( $this->field['default']['color3'] ) ) ? $this->field['default']['color3'] : '',
84
+ 'wrap_class' => 'sp-color-set',
85
+ 'before' => $title['title3'] . '<br>',
86
+ )
87
+ );
88
+ }
89
+ if ( isset( $this->field['color4'] ) && $this->field['color4'] == true ) {
90
+ echo sp_wpcp_add_element(
91
+ array(
92
+ 'pseudo' => true,
93
+ 'type' => 'color_picker',
94
+ 'name' => $this->element_name( '[color4]' ),
95
+ 'value' => $value['color4'],
96
+ 'default' => ( isset( $this->field['default']['color4'] ) ) ? $this->field['default']['color4'] : '',
97
+ 'wrap_class' => 'sp-color-set',
98
+ 'before' => $title['title4'] . '<br>',
99
+ )
100
+ );
101
+ }
102
+ if ( isset( $this->field['color5'] ) && $this->field['color5'] == true ) {
103
+ echo sp_wpcp_add_element(
104
+ array(
105
+ 'pseudo' => true,
106
+ 'type' => 'color_picker',
107
+ 'name' => $this->element_name( '[color5]' ),
108
+ 'value' => $value['color5'],
109
+ 'default' => ( isset( $this->field['default']['color5'] ) ) ? $this->field['default']['color5'] : '',
110
+ 'wrap_class' => 'sp-color-set',
111
+ 'before' => $title['title5'] . '<br>',
112
+ )
113
+ );
114
+ }
115
+ if ( isset( $this->field['color6'] ) && $this->field['color6'] == true ) {
116
+ echo sp_wpcp_add_element(
117
+ array(
118
+ 'pseudo' => true,
119
+ 'type' => 'color_picker',
120
+ 'name' => $this->element_name( '[color6]' ),
121
+ 'value' => $value['color6'],
122
+ 'default' => ( isset( $this->field['default']['color6'] ) ) ? $this->field['default']['color6'] : '',
123
+ 'wrap_class' => 'sp-color-set',
124
+ 'before' => $title['title6'] . '<br>',
125
+ )
126
+ );
127
+ }
128
+
129
+ // end container.
130
+ echo '</div>';
131
+
132
+ echo $this->element_after();
133
+
134
+ }
135
+
136
+ }
admin/views/meta-box/fields/column/column.php ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die;
3
+ } // Cannot access pages directly.
4
+ /**
5
+ *
6
+ * Field: Column
7
+ *
8
+ * @since 1.0.0
9
+ * @version 1.0.0
10
+ */
11
+ class SP_WPCP_Framework_Option_Column extends SP_WPCP_Framework_Options {
12
+
13
+ /**
14
+ * The column field constructor.
15
+ *
16
+ * @param string $field The filed type.
17
+ * @param string $value The field value.
18
+ * @param string $unique The unique ID of the field.
19
+ */
20
+ public function __construct( $field, $value = '', $unique = '' ) {
21
+ parent::__construct( $field, $value, $unique );
22
+ }
23
+
24
+ /**
25
+ * The column field output.
26
+ *
27
+ * @return void
28
+ */
29
+ public function output() {
30
+
31
+ echo $this->element_before();
32
+
33
+ $defaults_value = array(
34
+ 'column1' => '',
35
+ 'column2' => '',
36
+ 'column3' => '',
37
+ 'column4' => '',
38
+ 'column5' => '',
39
+ 'title1' => '',
40
+ 'title2' => '',
41
+ 'title3' => '',
42
+ 'title4' => '',
43
+ 'title5' => '',
44
+ 'help1' => '',
45
+ 'help2' => '',
46
+ 'help3' => '',
47
+ 'help4' => '',
48
+ 'help5' => '',
49
+ 'min1' => '',
50
+ 'max1' => '',
51
+ 'min2' => '',
52
+ 'max2' => '',
53
+ 'min3' => '',
54
+ 'max3' => '',
55
+ 'min4' => '',
56
+ 'max4' => '',
57
+ 'min5' => '',
58
+ 'max5' => '',
59
+ );
60
+
61
+ $value = wp_parse_args( $this->element_value(), $defaults_value );
62
+ $title = wp_parse_args( $this->field['default'], $defaults_value );
63
+ $help = wp_parse_args( $this->field['default'], $defaults_value );
64
+ $minmax = wp_parse_args( $this->field['default'], $defaults_value );
65
+
66
+ if ( isset( $this->field['column1'] ) && true == $this->field['column1'] ) {
67
+ echo sp_wpcp_add_element(
68
+ array(
69
+ 'pseudo' => true,
70
+ 'type' => 'number',
71
+ 'name' => $this->element_name( '[column1]' ),
72
+ 'value' => $value['column1'],
73
+ 'default' => ( isset( $this->field['default']['column1'] ) ) ? $this->field['default']['column1'] : '',
74
+ 'wrap_class' => 'small-input sp-column-field',
75
+ 'before' => '<span>' . $title['title1'] . '</span><br>',
76
+ 'help' => $help['help1'],
77
+ 'attributes' => array(
78
+ 'min' => $minmax['min1'],
79
+ 'max' => $minmax['max1'],
80
+ ),
81
+ )
82
+ );
83
+ }
84
+ if ( isset( $this->field['column2'] ) && true == $this->field['column2'] ) {
85
+ echo sp_wpcp_add_element(
86
+ array(
87
+ 'pseudo' => true,
88
+ 'type' => 'number',
89
+ 'name' => $this->element_name( '[column2]' ),
90
+ 'value' => $value['column2'],
91
+ 'default' => ( isset( $this->field['default']['column2'] ) ) ? $this->field['default']['column2'] : '',
92
+ 'wrap_class' => 'small-input sp-column-field',
93
+ 'before' => '<span>' . $title['title2'] . '</span><br>',
94
+ 'help' => $help['help2'],
95
+ 'attributes' => array(
96
+ 'min' => $minmax['min2'],
97
+ 'max' => $minmax['max2'],
98
+ ),
99
+ )
100
+ );
101
+ }
102
+ if ( isset( $this->field['column3'] ) && true == $this->field['column3'] ) {
103
+ echo sp_wpcp_add_element(
104
+ array(
105
+ 'pseudo' => true,
106
+ 'type' => 'number',
107
+ 'name' => $this->element_name( '[column3]' ),
108
+ 'value' => $value['column3'],
109
+ 'default' => ( isset( $this->field['default']['column3'] ) ) ? $this->field['default']['column3'] : '',
110
+ 'wrap_class' => 'small-input sp-column-field',
111
+ 'before' => '<span>' . $title['title3'] . '</span><br>',
112
+ 'help' => $help['help3'],
113
+ 'attributes' => array(
114
+ 'min' => $minmax['min3'],
115
+ 'max' => $minmax['max3'],
116
+ ),
117
+ )
118
+ );
119
+ }
120
+ if ( isset( $this->field['column4'] ) && true == $this->field['column4'] ) {
121
+ echo sp_wpcp_add_element(
122
+ array(
123
+ 'pseudo' => true,
124
+ 'type' => 'number',
125
+ 'name' => $this->element_name( '[column4]' ),
126
+ 'value' => $value['column4'],
127
+ 'default' => ( isset( $this->field['default']['column4'] ) ) ? $this->field['default']['column4'] : '',
128
+ 'wrap_class' => 'small-input sp-column-field',
129
+ 'before' => '<span>' . $title['title4'] . '</span><br>',
130
+ 'help' => $help['help4'],
131
+ 'attributes' => array(
132
+ 'min' => $minmax['min4'],
133
+ 'max' => $minmax['max4'],
134
+ ),
135
+ )
136
+ );
137
+ }
138
+ if ( isset( $this->field['column5'] ) && true == $this->field['column5'] ) {
139
+ echo sp_wpcp_add_element(
140
+ array(
141
+ 'pseudo' => true,
142
+ 'type' => 'number',
143
+ 'name' => $this->element_name( '[column5]' ),
144
+ 'value' => $value['column5'],
145
+ 'default' => ( isset( $this->field['default']['column5'] ) ) ? $this->field['default']['column5'] : '',
146
+ 'wrap_class' => 'small-input sp-column-field',
147
+ 'before' => '<span>' . $title['title5'] . '</span><br>',
148
+ 'help' => $help['help5'],
149
+ 'attributes' => array(
150
+ 'min' => $minmax['min5'],
151
+ 'max' => $minmax['max5'],
152
+ ),
153
+ )
154
+ );
155
+ }
156
+
157
+ echo $this->element_after();
158
+
159
+ }
160
+
161
+ }
admin/views/meta-box/fields/gallery/gallery.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: Gallery
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_Gallery extends SP_WPCP_Framework_Options {
11
+
12
+ /**
13
+ * The gallery field construcor.
14
+ *
15
+ * @param string $field The field type.
16
+ * @param string $value The field value.
17
+ * @param string $unique The unique field ID.
18
+ */
19
+ public function __construct( $field, $value = '', $unique = '' ) {
20
+ parent::__construct( $field, $value, $unique );
21
+ }
22
+
23
+ /**
24
+ * The gallery field output.
25
+ *
26
+ * @return void
27
+ */
28
+ public function output() {
29
+
30
+ echo $this->element_before();
31
+
32
+ $value = $this->element_value();
33
+ $add = ( ! empty( $this->field['add_title'] ) ) ? $this->field['add_title'] : __( 'Add Gallery', 'wp-carousel-free' );
34
+ $edit = ( ! empty( $this->field['edit_title'] ) ) ? $this->field['edit_title'] : __( 'Edit Gallery', 'wp-carousel-free' );
35
+ $clear = ( ! empty( $this->field['clear_title'] ) ) ? $this->field['clear_title'] : __( 'Clear', 'wp-carousel-free' );
36
+ $hidden = ( empty( $value ) ) ? ' hidden' : '';
37
+ echo '<a href="#" class="button button-primary sp-add"><i class="fa fa-plus-circle"></i>' . $add . '</a>';
38
+ echo '<ul class="sp-gallery-images">';
39
+
40
+ if ( ! empty( $value ) ) {
41
+
42
+ $values = explode( ',', $value );
43
+
44
+ foreach ( $values as $id ) {
45
+ $attachment = wp_get_attachment_image_src( $id, 'thumbnail' );
46
+ echo '<li><img src="' . $attachment[0] . '" alt="" /></li>';
47
+ }
48
+ }
49
+
50
+ echo '</ul>';
51
+ echo '<ul><li><a href="#" class="button sp-edit' . $hidden . '"><i class="fa fa-pencil-square-o"></i>' . $edit . '</a></li></ul>';
52
+ echo '<ul><li><a href="#" class="button sp-warning-primary sp-remove' . $hidden . '"><i class="fa fa-trash"></i>' . $clear . '</a></li></ul>';
53
+ echo '<input type="text" name="' . $this->element_name() . '" value="' . $value . '"' . $this->element_class() . $this->element_attributes() . '/>';
54
+
55
+ echo $this->element_after();
56
+
57
+ }
58
+ }
admin/views/meta-box/fields/image_sizes/image_sizes.php ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ * Image Sizes field.
5
+ *
6
+ * @package SP MetaBox Framework.
7
+ */
8
+ class SP_WPCP_Framework_Option_image_sizes extends SP_WPCP_Framework_Options {
9
+ /**
10
+ * Field: Image Sizes
11
+ *
12
+ * @param options $field The field options.
13
+ * @param string $value The field value.
14
+ * @param string $unique The Unique ID of the field.
15
+ */
16
+ public function __construct( $field, $value = '', $unique = '' ) {
17
+ parent::__construct( $field, $value, $unique );
18
+ }
19
+
20
+ /**
21
+ * The image sizes output.
22
+ *
23
+ * @return void
24
+ */
25
+ public function output() {
26
+
27
+ echo $this->element_before();
28
+
29
+ global $_wp_additional_image_sizes;
30
+
31
+ $sizes = array();
32
+
33
+ foreach ( get_intermediate_image_sizes() as $_size ) {
34
+ if ( in_array( $_size, array( 'thumbnail', 'medium', 'medium_large', 'large' ) ) ) {
35
+
36
+ $width = get_option( "{$_size}_size_w" );
37
+ $height = get_option( "{$_size}_size_h" );
38
+ $crop = (bool) get_option( "{$_size}_crop" ) ? 'hard' : 'soft';
39
+
40
+ $sizes[ $_size ] = "{$_size} - $crop:{$width}x{$height}";
41
+
42
+ } elseif ( isset( $_wp_additional_image_sizes[ $_size ] ) ) {
43
+
44
+ $width = $_wp_additional_image_sizes[ $_size ]['width'];
45
+ $height = $_wp_additional_image_sizes[ $_size ]['height'];
46
+ $crop = $_wp_additional_image_sizes[ $_size ]['crop'] ? 'hard' : 'soft';
47
+
48
+ $sizes[ $_size ] = "{$_size} - $crop:{$width}x{$height}";
49
+ }
50
+ }
51
+
52
+ $sizes = array_merge(
53
+ $sizes, array(
54
+ 'full' => __( 'original uploaded image', 'wp-carousel-free' ),
55
+ )
56
+ );
57
+ $extra_name = ( isset( $this->field['attributes']['multiple'] ) ) ? '[]' : '';
58
+ $placeholder = ( isset( $this->field['attributes']['placeholder'] ) ) ? $this->field['attributes']['placeholder'] : '';
59
+ $placeholder_data = ( isset( $this->field['attributes']['placeholder'] ) ) ? 'data-placeholder="' . $placeholder . '"' : '';
60
+ $chosen_rtl = ( is_rtl() && strpos( $class, 'chosen' ) ) ? 'chosen-rtl' : '';
61
+
62
+ echo '<select ' . $placeholder_data . ' id="sp_' . $this->field['id'] . '" name="' . $this->element_name( $extra_name ) . '"' .
63
+ $this->element_class( $chosen_rtl )
64
+ . $this->element_attributes() . '>';
65
+
66
+ echo ( isset( $this->field['default_option'] ) ) ? '<option value="">' . $this->field['default_option'] . '</option>' : '';
67
+
68
+ if ( ! empty( $sizes ) ) {
69
+
70
+ foreach ( $sizes as $key => $value ) {
71
+ echo '<option value="' . $key . '" ' . $this->checked( $this->element_value(), $key, 'selected' ) . '>' . $value . '</option>';
72
+ }
73
+ }
74
+
75
+ echo '</select>';
76
+
77
+ echo $this->element_after();
78
+
79
+ }
80
+
81
+ }
admin/views/meta-box/fields/notice/notice.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: Notice
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_notice extends SP_WPCP_Framework_Options {
11
+
12
+ public function __construct( $field, $value = '', $unique = '' ) {
13
+ parent::__construct( $field, $value, $unique );
14
+ }
15
+
16
+ public function output() {
17
+
18
+ echo $this->element_before();
19
+ echo '<div class="sp-notice sp-' . $this->field['class'] . '">' . $this->field['content'] . '</div>';
20
+ echo $this->element_after();
21
+
22
+ }
23
+
24
+ }
admin/views/meta-box/fields/number/number.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: Number
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_number extends SP_WPCP_Framework_Options {
11
+
12
+ /**
13
+ * Number field constructor.
14
+ *
15
+ * @param string $field The field type.
16
+ * @param string $value The value of the field.
17
+ * @param string $unique The unique ID of the field.
18
+ */
19
+ public function __construct( $field, $value = '', $unique = '' ) {
20
+ parent::__construct( $field, $value, $unique );
21
+ }
22
+
23
+ /**
24
+ * Number field output.
25
+ *
26
+ * @return void
27
+ */
28
+ public function output() {
29
+
30
+ echo $this->element_before();
31
+ $unit = ( isset( $this->field['unit'] ) ) ? '<em>' . $this->field['unit'] . '</em>' : '';
32
+ echo '<input' . $this->element_pro_only() . ' type="number" name="' . $this->element_name() . '" value="' . $this->element_value() . '"' . $this->element_class() . $this->element_attributes() . '/>' . $unit;
33
+ echo $this->element_after();
34
+
35
+ }
36
+
37
+ }
admin/views/meta-box/fields/pronotice/pronotice.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) { die; } // Cannot access pages directly.
2
+ /**
3
+ *
4
+ * Field: Pro Notice
5
+ *
6
+ * @since 1.0.0
7
+ * @version 1.0.0
8
+ *
9
+ */
10
+ class SP_WPCP_Framework_Option_pronotice extends SP_WPCP_Framework_Options {
11
+
12
+ public function __construct( $field, $value = '', $unique = '' ) {
13
+ parent::__construct( $field, $value, $unique );
14
+ }
15
+
16
+ public function output() {
17
+
18
+ echo $this->element_before();
19
+ echo $this->field['content'];
20
+ echo $this->element_after();
21
+
22
+ }
23
+
24
+ }
admin/views/meta-box/fields/select/select.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: Select
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_select extends SP_WPCP_Framework_Options {
11
+
12
+ /**
13
+ * Select field constructor.
14
+ *
15
+ * @param string $field Field type.
16
+ * @param string $value The field value.
17
+ * @param string $unique The field ID.
18
+ */
19
+ public function __construct( $field, $value = '', $unique = '' ) {
20
+ parent::__construct( $field, $value, $unique );
21
+ }
22
+
23
+ /**
24
+ * Select field output.
25
+ *
26
+ * @return void
27
+ */
28
+ public function output() {
29
+
30
+ echo $this->element_before();
31
+
32
+ if ( isset( $this->field['options'] ) ) {
33
+ $options = $this->field['options'];
34
+ $class = $this->element_class();
35
+ $options = ( is_array( $options ) ) ? $options : array_filter( $this->element_data( $options ) );
36
+ $extra_name = ( isset( $this->field['attributes']['multiple'] ) ) ? '[]' : '';
37
+ $placeholder = ( isset( $this->field['attributes']['placeholder'] ) ) ? $this->field['attributes']['placeholder'] : '';
38
+ $placeholder_data = ( isset( $this->field['attributes']['placeholder'] ) ) ? 'data-placeholder="' . $placeholder . '"' : '';
39
+ $chosen_rtl = ( is_rtl() && strpos( $class, 'chosen' ) ) ? 'chosen-rtl' : '';
40
+ echo '<select ' . $placeholder_data . ' id="sp_' . $this->field['id'] . '" name="' . $this->element_name( $extra_name ) . '"' .
41
+ $this->element_class( $chosen_rtl )
42
+ . $this->element_attributes() . '>';
43
+
44
+ echo ( isset( $this->field['default_option'] ) ) ? '<option value="">' . $this->field['default_option'] . '</option>' : '';
45
+
46
+ if ( ! empty( $options ) ) {
47
+ foreach ( $options as $key => $value ) {
48
+ $pro_only = true == $value['pro_only'] ? ' disabled' : '';
49
+ echo '<option' . $pro_only . ' value="' . $key . '" ' . $this->checked( $this->element_value(), $key, 'selected' ) . '>' . $value['text'] . '</option>';
50
+ }
51
+ }
52
+ echo '</select>';
53
+
54
+ }
55
+ echo $this->element_after();
56
+
57
+ }
58
+
59
+ }
admin/views/meta-box/fields/select_typo/select_typo.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: select_typo
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_select_typo extends SP_WPCP_Framework_Options {
11
+
12
+ public function __construct( $field, $value = '', $unique = '' ) {
13
+ parent::__construct( $field, $value, $unique );
14
+ }
15
+
16
+ public function output() {
17
+
18
+ echo $this->element_before();
19
+
20
+ if ( isset( $this->field['options'] ) ) {
21
+
22
+ $options = $this->field['options'];
23
+ $class = $this->element_class();
24
+ $options = ( is_array( $options ) ) ? $options : array_filter( $this->element_data( $options ) );
25
+ $extra_name = ( isset( $this->field['attributes']['multiple'] ) ) ? '[]' : '';
26
+ $placeholder = ( isset( $this->field['attributes']['placeholder'] ) ) ? $this->field['attributes']['placeholder'] : '';
27
+ $placeholder_data = ( isset( $this->field['attributes']['placeholder'] ) ) ? 'data-placeholder="' . $placeholder . '"' : '';
28
+ $chosen_rtl = ( is_rtl() && strpos( $class, 'chosen' ) ) ? 'chosen-rtl' : '';
29
+
30
+ echo '<select' . $this->element_pro_only() . ' ' . $placeholder_data . ' name="' . $this->element_name( $extra_name ) . '"' . $this->element_class( $chosen_rtl ) . $this->element_attributes() . '>';
31
+
32
+ echo ( isset( $this->field['default_option'] ) ) ? '<option value="">' . $this->field['default_option'] . '</option>' : '';
33
+
34
+ if ( ! empty( $options ) ) {
35
+ foreach ( $options as $key => $value ) {
36
+ echo '<option value="' . $key . '" ' . $this->checked( $this->element_value(), $key, 'selected' ) . '>' . $value . '</option>';
37
+ }
38
+ }
39
+
40
+ echo '</select>';
41
+
42
+ }
43
+
44
+ echo $this->element_after();
45
+
46
+ }
47
+
48
+ }
admin/views/meta-box/fields/subheading/subheading.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: Sub Heading
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_subheading extends SP_WPCP_Framework_Options {
11
+
12
+ public function __construct( $field, $value = '', $unique = '' ) {
13
+ parent::__construct( $field, $value, $unique );
14
+ }
15
+
16
+ public function output() {
17
+
18
+ echo $this->element_before();
19
+ echo $this->field['content'];
20
+ echo $this->element_after();
21
+
22
+ }
23
+
24
+ }
admin/views/meta-box/fields/switcher/switcher.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: Switcher
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_switcher extends SP_WPCP_Framework_Options {
11
+
12
+ public function __construct( $field, $value = '', $unique = '' ) {
13
+ parent::__construct( $field, $value, $unique );
14
+ }
15
+
16
+ public function output() {
17
+
18
+ echo $this->element_before();
19
+ $label = ( isset( $this->field['label'] ) ) ? '<div class="sp-text-desc">' . $this->field['label'] . '</div>' : '';
20
+ echo '<label><input type="checkbox" name="' . $this->element_name() . '" value="1"' . $this->element_class() . $this->element_attributes() . checked( $this->element_value(), 1, false ) . '/><em data-on="' . __( 'on', 'wp-carousel-free' ) . '" data-off="' . __( 'off', 'wp-carousel-free' ) . '"></em><span></span></label>' . $label;
21
+ echo $this->element_after();
22
+
23
+ }
24
+
25
+ }
admin/views/meta-box/fields/textarea/textarea.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Field: Textarea
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ class SP_WPCP_Framework_Option_textarea extends SP_WPCP_Framework_Options {
11
+
12
+ public function __construct( $field, $value = '', $unique = '' ) {
13
+ parent::__construct( $field, $value, $unique );
14
+ }
15
+
16
+ public function output() {
17
+
18
+ echo $this->element_before();
19
+ echo '<textarea name="' . $this->element_name() . '"' . $this->element_class() . $this->element_attributes() . '>' . $this->element_value() . '</textarea>';
20
+ echo $this->element_after();
21
+
22
+ }
23
+ }
admin/views/meta-box/fields/typography_advanced/google-fonts.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ {
2
+ "kind": "webfonts#webfontList",
3
+ "items": [
4
+
5
+ ]
6
+ }
admin/views/meta-box/fields/typography_advanced/typography_advanced.php ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die;
3
+ } // Cannot access pages directly.
4
+
5
+ /**
6
+ *
7
+ * Field: Typography Advanced
8
+ *
9
+ * @since 1.0.0
10
+ * @version 1.0.0
11
+ */
12
+ class SP_WPCP_Framework_Option_typography_advanced extends SP_WPCP_Framework_Options {
13
+
14
+ public function __construct( $field, $value = '', $unique = '' ) {
15
+ parent::__construct( $field, $value, $unique );
16
+ }
17
+
18
+ public function output() {
19
+
20
+ echo $this->element_before();
21
+
22
+ $defaults_value = array();
23
+
24
+ $default_variants = apply_filters(
25
+ 'sp_websafe_fonts_variants', array(
26
+ 'regular',
27
+ )
28
+ );
29
+
30
+ $websafe_fonts = apply_filters(
31
+ 'sp_websafe_fonts', array(
32
+ 'Open Sans',
33
+ )
34
+ );
35
+
36
+ $value = wp_parse_args( $this->element_value(), $defaults_value );
37
+ $family_value = $value['family'];
38
+ $variant_value = $value['variant'];
39
+ $is_variant = ( isset( $this->field['variant'] ) && $this->field['variant'] === false ) ? false : true;
40
+ $google_json = sp_wpcp_get_google_fonts();
41
+
42
+ // Container.
43
+ echo '<div class="sp_wpcp_font_field" data-id="' . $this->field['id'] . '">';
44
+
45
+ if ( is_object( $google_json ) ) {
46
+
47
+ $googlefonts = array();
48
+
49
+ foreach ( $google_json->items as $key => $font ) {
50
+ $googlefonts[ $font->family ] = $font->variants;
51
+ }
52
+
53
+ $is_google = ( array_key_exists( $family_value, $googlefonts ) ) ? true : false;
54
+
55
+ echo '<div class="sp-element sp-typography-family sp-wpcp-select-wrapper">Font Family<br>';
56
+ echo '<select disabled name="' . $this->element_name( '[family]' ) . '" class="sp-wpcp-select-css sp-typo-family" data-atts="family"' . $this->element_attributes() . '>';
57
+
58
+ do_action( 'sp_typography_family', $family_value, $this );
59
+
60
+ echo '<optgroup label="' . __( 'Web Safe Fonts', 'wp-carousel-free' ) . '">';
61
+ foreach ( $websafe_fonts as $websafe_value ) {
62
+ echo '<option value="' . $websafe_value . '" data-variants="' . implode( '|', $default_variants ) . '" data-type="websafe"' . selected( $websafe_value, $family_value, true ) . '>' . $websafe_value . '</option>';
63
+ }
64
+ echo '</optgroup>';
65
+
66
+ echo '<optgroup label="' . __( 'Google Fonts', 'wp-carousel-free' ) . '">';
67
+ foreach ( $googlefonts as $google_key => $google_value ) {
68
+
69
+ echo '<option disabled value="' . $google_key . '" data-variants="' . implode( '|', $google_value ) . '" data-type="google" ' . selected( $google_key, $family_value, true ) . '>' . $google_key . '</option>';
70
+ }
71
+ echo '</optgroup>';
72
+
73
+ echo '</select>';
74
+ echo '</div>';
75
+
76
+ if ( ! empty( $is_variant ) ) {
77
+
78
+ $variants = ( $is_google ) ? $googlefonts[ $family_value ] : $default_variants;
79
+ $variants = ( $value['font'] === 'google' || $value['font'] === 'websafe' ) ? $variants : 'regular';
80
+ echo '<div class="sp-element sp-typography-variant sp-wpcp-select-wrapper">Font Weight<br>';
81
+ echo '<select disabled name="' . $this->element_name( '[variant]' ) . '" class="sp-wpcp-select-css sp-typo-variant" data-atts="variant">';
82
+ foreach ( $variants as $variant ) {
83
+ echo '<option value="' . $variant . '" ' . $this->checked( $variant_value, $variant, 'selected' ) . '>' . $variant . '</option>';
84
+ }
85
+ echo '</select>';
86
+ echo '</div>';
87
+
88
+ }
89
+
90
+ echo sp_wpcp_add_element(
91
+ array(
92
+ 'pseudo' => true,
93
+ 'type' => 'number',
94
+ 'value' => $value['height'],
95
+ 'wrap_class' => 'small-input sp-font-size',
96
+ 'before' => 'Font Size<br>',
97
+ 'pro_only' => true,
98
+ 'attributes' => array(
99
+ 'title' => __( 'Font Size', 'wp-carousel-free' ),
100
+ ),
101
+ )
102
+ );
103
+
104
+ echo sp_wpcp_add_element(
105
+ array(
106
+ 'pseudo' => true,
107
+ 'type' => 'number',
108
+ 'value' => $value['height'],
109
+ 'wrap_class' => 'small-input sp-font-height',
110
+ 'before' => 'Line Height<br>',
111
+ 'pro_only' => true,
112
+ 'attributes' => array(
113
+ 'title' => __( 'Line Height', 'wp-carousel-free' ),
114
+ ),
115
+ )
116
+ );
117
+ echo '<div class="sp-divider"></div>';
118
+ echo sp_wpcp_add_element(
119
+ array(
120
+ 'pseudo' => true,
121
+ 'type' => 'select_typo',
122
+ 'wrap_class' => 'small-input sp-font-alignment sp-wpcp-select-wrapper',
123
+ 'class' => 'sp-wpcp-select-css',
124
+ 'before' => 'Alignment<br>',
125
+ 'pro_only' => true,
126
+ 'options' => array(
127
+ 'inherit' => __( 'Inherit', 'wp-carousel-free' ),
128
+ ),
129
+
130
+ )
131
+ );
132
+ echo sp_wpcp_add_element(
133
+ array(
134
+ 'pseudo' => true,
135
+ 'type' => 'select_typo',
136
+ 'wrap_class' => 'small-input sp-font-transform sp-wpcp-select-wrapper',
137
+ 'class' => 'sp-wpcp-select-css',
138
+ 'before' => 'Transform<br>',
139
+ 'pro_only' => true,
140
+ 'options' => array(
141
+ 'none' => __( 'None', 'wp-carousel-free' ),
142
+ ),
143
+ )
144
+ );
145
+ echo sp_wpcp_add_element(
146
+ array(
147
+ 'pseudo' => true,
148
+ 'type' => 'select_typo',
149
+ 'wrap_class' => 'small-input sp-font-spacing sp-wpcp-select-wrapper',
150
+ 'class' => 'sp-wpcp-select-css',
151
+ 'before' => 'Letter Spacing<br>',
152
+ 'pro_only' => true,
153
+ 'options' => array(
154
+ 'normal' => __( 'Normal', 'wp-carousel-free' ),
155
+ ),
156
+ )
157
+ );
158
+ echo '<div class="sp-divider"></div>';
159
+ if ( isset( $this->field['color'] ) && $this->field['color'] == true ) {
160
+ echo '<div class="sp-element sp-typography-color">' . __( 'Color', 'wp-carousel-free' ) . '<br>';
161
+ echo sp_wpcp_add_element(
162
+ array(
163
+ 'pseudo' => true,
164
+ 'id' => $this->field['id'] . '_color',
165
+ 'type' => 'color_picker',
166
+ 'pro_only' => true,
167
+ 'rgba' => ( isset( $this->field['rgba'] ) && $this->field['rgba'] === false ) ? false : '',
168
+ )
169
+ );
170
+ echo '</div>';
171
+ }
172
+
173
+ /**
174
+ * Font Preview
175
+ */
176
+ if ( isset( $this->field['preview'] ) && $this->field['preview'] == true ) {
177
+ if ( isset( $this->field['preview_text'] ) ) {
178
+ $preview_text = $this->field['preview_text'];
179
+ } else {
180
+ $preview_text = 'Lorem ipsum dolor sit amet, pro ad sanctus admodum, vim at insolens appellantur. Eum veri adipiscing an, probo nonumy an vis.';
181
+ }
182
+ echo '<div id="preview-' . $this->field['id'] . '" class="sp-font-preview">' . $preview_text . '</div>';
183
+ }
184
+ } else {
185
+
186
+ echo __( 'Error! Can not load json file.', 'wp-carousel-free' );
187
+
188
+ }
189
+
190
+ // end container.
191
+ echo '</div>';
192
+
193
+ echo $this->element_after();
194
+
195
+ }
196
+
197
+ }
admin/views/meta-box/functions/actions.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The actions of the sp framework.
4
+ *
5
+ * @package SP Framework.
6
+ */
admin/views/meta-box/functions/enqueue.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die;
3
+ } // Cannot access pages directly.
4
+
5
+
6
+ if ( ! function_exists( 'sp_wpcp_admin_enqueue_scripts' ) ) {
7
+ /**
8
+ *
9
+ * Framework admin enqueue style and scripts
10
+ *
11
+ * @since 1.0.0
12
+ * @version 1.0.0
13
+ * @return void
14
+ */
15
+ function sp_wpcp_admin_enqueue_scripts() {
16
+ $current_screen = get_current_screen();
17
+ $the_current_post_type = $current_screen->post_type;
18
+ if ( 'sp_wp_carousel' === $the_current_post_type ) {
19
+
20
+ // Admin utilities.
21
+ wp_enqueue_media();
22
+
23
+ // wp core styles.
24
+ wp_enqueue_style( 'wp-color-picker' );
25
+ wp_enqueue_style( 'wp-jquery-ui-dialog' );
26
+
27
+ // Framework core styles.
28
+ wp_enqueue_style( 'sp-wpcp-framework', WPCAROUSELF_URL . 'admin/views/meta-box/assets/css/sp-framework.css', array(), WPCAROUSELF_VERSION, 'all' );
29
+ wp_enqueue_style( 'sp-wpcp-custom', WPCAROUSELF_URL . 'admin/views/meta-box/assets/css/sp-custom.css', array(), WPCAROUSELF_VERSION, 'all' );
30
+ wp_enqueue_style( 'wpcp-mb-style', WPCAROUSELF_URL . 'admin/views/meta-box/assets/css/sp-style.css', array(), WPCAROUSELF_VERSION, 'all' );
31
+ wp_enqueue_style( 'wpcp-font-awesome', WPCAROUSELF_URL . 'public/css/font-awesome.min.css', array(), WPCAROUSELF_VERSION, 'all' );
32
+
33
+ if ( is_rtl() ) {
34
+ wp_enqueue_style( 'sp-framework-rtl', WPCAROUSELF_URL . 'admin/views/meta-box/assets/css/sp-framework-rtl.css', array(), WPCAROUSELF_VERSION, 'all' );
35
+ }
36
+
37
+ // wp core scripts.
38
+ wp_enqueue_script( 'wp-color-picker' );
39
+
40
+ // framework core scripts.
41
+ wp_enqueue_script( 'sp-wpcp-dependency', WPCAROUSELF_URL . 'admin/views/meta-box/assets/js/dependency.js', array( 'jquery' ), WPCAROUSELF_VERSION, true );
42
+ wp_enqueue_script( 'sp-wpcp-plugins', WPCAROUSELF_URL . 'admin/views/meta-box/assets/js/sp-plugins.js', array(), WPCAROUSELF_VERSION, true );
43
+ wp_enqueue_script( 'sp-wpcp-framework', WPCAROUSELF_URL . 'admin/views/meta-box/assets/js/sp-framework.js', array( 'sp-wpcp-plugins' ), WPCAROUSELF_VERSION, true );
44
+ }
45
+
46
+ }
47
+
48
+ add_action( 'admin_enqueue_scripts', 'sp_wpcp_admin_enqueue_scripts' );
49
+ }
admin/views/meta-box/functions/fallback.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * A fallback for get term meta
6
+ * get_term_meta added since WP 4.4
7
+ *
8
+ * @since 1.0.2
9
+ * @version 1.0.0
10
+ */
11
+ if ( ! function_exists( 'get_term_meta' ) ) {
12
+ function get_term_meta( $term_id, $key = '', $single = false ) {
13
+
14
+ $terms = get_option( 'sp_term_' . $key );
15
+
16
+ return ( ! empty( $terms[ $term_id ] ) ) ? $terms[ $term_id ] : false;
17
+
18
+ }
19
+ }
20
+
21
+ /**
22
+ *
23
+ * A fallback for add term meta
24
+ * add_term_meta added since WP 4.4
25
+ *
26
+ * @since 1.0.2
27
+ * @version 1.0.0
28
+ */
29
+ if ( ! function_exists( 'add_term_meta' ) ) {
30
+ function add_term_meta( $term_id, $meta_key = '', $meta_value, $unique = false ) {
31
+
32
+ return update_term_meta( $term_id, $meta_key, $meta_value, $unique );
33
+
34
+ }
35
+ }
36
+
37
+ /**
38
+ *
39
+ * A fallback for update term meta
40
+ * update_term_meta added since WP 4.4
41
+ *
42
+ * @since 1.0.2
43
+ * @version 1.0.0
44
+ */
45
+ if ( ! function_exists( 'update_term_meta' ) ) {
46
+ function update_term_meta( $term_id, $meta_key, $meta_value, $prev_value = '' ) {
47
+
48
+ if ( ! empty( $term_id ) || ! empty( $meta_key ) || ! empty( $meta_value ) ) {
49
+
50
+ $terms = get_option( 'sp_term_' . $meta_key );
51
+
52
+ $terms[ $term_id ] = $meta_value;
53
+
54
+ update_option( 'sp_term_' . $meta_key, $terms );
55
+
56
+ }
57
+
58
+ }
59
+ }
60
+
61
+ /**
62
+ *
63
+ * A fallback for delete term meta
64
+ * delete_term_meta added since WP 4.4
65
+ *
66
+ * @since 1.0.2
67
+ * @version 1.0.0
68
+ */
69
+ if ( ! function_exists( 'delete_term_meta' ) ) {
70
+ function delete_term_meta( $term_id, $meta_key, $meta_value = '', $delete_all = false ) {
71
+
72
+ if ( ! empty( $term_id ) || ! empty( $meta_key ) ) {
73
+
74
+ $terms = get_option( 'sp_term_' . $meta_key );
75
+
76
+ unset( $terms[ $term_id ] );
77
+
78
+ update_option( 'sp_term_' . $meta_key, $terms );
79
+
80
+ }
81
+
82
+ }
83
+ }
admin/views/meta-box/functions/helpers.php ADDED
@@ -0,0 +1,259 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * Helper functions of the framework.get_the_generator
5
+ *
6
+ * @since 1.0.0
7
+ * @version 1.0.0
8
+ * @package SP Framework
9
+ */
10
+
11
+ if ( ! defined( 'ABSPATH' ) ) {
12
+ die;
13
+ } // Cannot access pages directly.
14
+
15
+ if ( ! function_exists( 'sp_wpcp_add_element' ) ) {
16
+ /**
17
+ * Add framework element
18
+ *
19
+ * @param array $field fields array.
20
+ * @param string $value Field value.
21
+ * @param string $unique The unique for the ID.
22
+ * @return mix
23
+ */
24
+ function sp_wpcp_add_element( $field = array(), $value = '', $unique = '' ) {
25
+
26
+ $output = '';
27
+ $depend = '';
28
+ $sub = ( isset( $field['sub'] ) ) ? 'sub-': '';
29
+ $unique = ( isset( $unique ) ) ? $unique : '';
30
+ $languages = sp_language_defaults();
31
+ $class = 'SP_WPCP_Framework_Option_' . $field['type'];
32
+ $wrap_class = ( isset( $field['wrap_class'] ) ) ? ' ' . $field['wrap_class'] : '';
33
+ $hidden = ( isset( $field['show_only_language'] ) && ( $field['show_only_language'] != $languages['current'] ) ) ? ' hidden' : '';
34
+ $is_pseudo = ( isset( $field['pseudo'] ) ) ? ' sp-pseudo-field' : '';
35
+ $is_pro = ( isset( $field['is_pro'] ) ) ? ' disabled' : '';
36
+
37
+ if ( isset( $field['dependency'] ) ) {
38
+ $hidden = ' hidden';
39
+ $depend .= ' data-' . $sub . 'controller="' . $field['dependency'][0] . '"';
40
+ $depend .= ' data-' . $sub . 'condition="' . $field['dependency'][1] . '"';
41
+ $depend .= ' data-' . $sub . 'value="' . $field['dependency'][2] . '"';
42
+ }
43
+
44
+ $output .= '<div class="sp-element sp-field-' . $field['type'] . $is_pseudo . $wrap_class . $hidden . '"' . $depend . '>';
45
+
46
+ if ( isset( $field['title'] ) ) {
47
+ $field_desc = ( isset( $field['desc'] ) ) ? '<p class="sp-text-desc">' . $field['desc'] . '</p>' : '';
48
+ $output .= '<div class="sp-title"><h4>' . $field['title'] . '</h4>' . $field_desc . '</div>';
49
+ }
50
+
51
+ $output .= ( isset( $field['title'] ) ) ? '<div class="sp-fieldset">' : '';
52
+ $value = ( ! isset( $value ) && isset( $field['default'] ) ) ? $field['default'] : $value;
53
+ $value = ( isset( $field['value'] ) ) ? $field['value'] : $value;
54
+
55
+ if ( class_exists( $class ) ) {
56
+ ob_start();
57
+ $element = new $class( $field, $value, $unique );
58
+ $element->output();
59
+ $output .= ob_get_clean();
60
+ } else {
61
+ $output .= '<p>' . __( 'This field class is not available!', 'wp-carousel-free' ) . '</p>';
62
+ }
63
+
64
+ $output .= ( isset( $field['title'] ) ) ? '</div>' : '';
65
+ $output .= '<div class="clear"></div>';
66
+ $output .= '</div>';
67
+
68
+ return $output;
69
+
70
+ }
71
+ }
72
+
73
+ if ( ! function_exists( 'sp_encode_string' ) ) {
74
+ /**
75
+ * Encode string for backup options
76
+ *
77
+ * @param mix $string All the setting options.
78
+ * @since 1.0.0
79
+ * @return mix
80
+ */
81
+ function sp_encode_string( $string ) {
82
+ return serialize( $string );
83
+ }
84
+ }
85
+
86
+ if ( ! function_exists( 'sp_decode_string' ) ) {
87
+ /**
88
+ * Decode string for backup options
89
+ *
90
+ * @param mix $string all the setting in string.
91
+ * @since 1.0.0
92
+ * @return mix
93
+ */
94
+ function sp_decode_string( $string ) {
95
+ return unserialize( $string );
96
+ }
97
+ }
98
+
99
+ if ( ! function_exists( 'sp_wpcp_get_google_fonts' ) ) {
100
+ /**
101
+ * Get google font from json file.
102
+ *
103
+ * @since 1.0.0
104
+ * @return mix
105
+ */
106
+ function sp_wpcp_get_google_fonts() {
107
+
108
+ global $sp_google_fonts;
109
+
110
+ if ( ! empty( $sp_google_fonts ) ) {
111
+
112
+ return $sp_google_fonts;
113
+
114
+ } else {
115
+
116
+ ob_start();
117
+ sp_wpcp_locate_template( 'fields/typography_advanced/google-fonts.json' );
118
+ $json = ob_get_clean();
119
+
120
+ $sp_google_fonts = json_decode( $json );
121
+
122
+ return $sp_google_fonts;
123
+ }
124
+
125
+ }
126
+ }
127
+
128
+ if ( ! function_exists( 'sp_get_icon_fonts' ) ) {
129
+ /**
130
+ * Get icon fonts from json file
131
+ *
132
+ * @since 1.0.0
133
+ * @param string $file The icon name.
134
+ * @return statement
135
+ */
136
+ function sp_get_icon_fonts( $file ) {
137
+
138
+ ob_start();
139
+ sp_wpcp_locate_template( $file );
140
+ $json = ob_get_clean();
141
+
142
+ return json_decode( $json );
143
+
144
+ }
145
+ }
146
+
147
+ if ( ! function_exists( 'sp_array_search' ) ) {
148
+ /**
149
+ * Array search key & value
150
+ *
151
+ * @since 1.0.0
152
+ * @param array $array The search array.
153
+ * @param string $key The array key.
154
+ * @param mix $value The array value.
155
+ * @return mix
156
+ */
157
+ function sp_array_search( $array, $key, $value ) {
158
+
159
+ $results = array();
160
+
161
+ if ( is_array( $array ) ) {
162
+ if ( isset( $array[ $key ] ) && $array[ $key ] == $value ) {
163
+ $results[] = $array;
164
+ }
165
+
166
+ foreach ( $array as $sub_array ) {
167
+ $results = array_merge( $results, sp_array_search( $sub_array, $key, $value ) );
168
+ }
169
+ }
170
+
171
+ return $results;
172
+
173
+ }
174
+ }
175
+
176
+ if ( ! function_exists( 'sp_get_var' ) ) {
177
+ /**
178
+ * Getting POST Var
179
+ *
180
+ * @since 1.0.0
181
+ * @param variable $var The post var.
182
+ * @param string $default The post value.
183
+ * @return statement
184
+ */
185
+ function sp_get_var( $var, $default = '' ) {
186
+
187
+ if ( isset( $_POST[ $var ] ) ) {
188
+ return $_POST[ $var ];
189
+ }
190
+
191
+ if ( isset( $_GET[ $var ] ) ) {
192
+ return $_GET[ $var ];
193
+ }
194
+
195
+ return $default;
196
+
197
+ }
198
+ }
199
+
200
+ if ( ! function_exists( 'sp_get_vars' ) ) {
201
+ /**
202
+ * Getting POST Vars
203
+ *
204
+ * @since 1.0.0
205
+ * @param variable $var The post variable.
206
+ * @param string $depth the depth of the post.
207
+ * @param string $default the default value.
208
+ * @return statement
209
+ */
210
+ function sp_get_vars( $var, $depth, $default = '' ) {
211
+
212
+ if ( isset( $_POST[ $var ][ $depth ] ) ) {
213
+ return $_POST[ $var ][ $depth ];
214
+ }
215
+
216
+ if ( isset( $_GET[ $var ][ $depth ] ) ) {
217
+ return $_GET[ $var ][ $depth ];
218
+ }
219
+
220
+ return $default;
221
+
222
+ }
223
+ }
224
+
225
+ if ( ! function_exists( 'sp_wpcp_load_option_fields' ) ) {
226
+ /**
227
+ * Load options fields
228
+ *
229
+ * @since 1.0.0
230
+ * @return void
231
+ */
232
+ function sp_wpcp_load_option_fields() {
233
+
234
+ $located_fields = array();
235
+
236
+ foreach ( glob( SP_WPCP_F_DIR . '/fields/*/*.php' ) as $sp_field ) {
237
+ $located_fields[] = basename( $sp_field );
238
+ sp_wpcp_locate_template( str_replace( SP_WPCP_F_DIR, '', $sp_field ) );
239
+ }
240
+
241
+ $override_name = apply_filters( 'sp_wpcp_framework_override', 'sp-framework-override' );
242
+ $override_dir = get_template_directory() . '/' . $override_name . '/fields';
243
+
244
+ if ( is_dir( $override_dir ) ) {
245
+
246
+ foreach ( glob( $override_dir . '/*/*.php' ) as $override_field ) {
247
+
248
+ if ( ! in_array( basename( $override_field ), $located_fields ) ) {
249
+
250
+ sp_wpcp_locate_template( str_replace( $override_dir, '/fields', $override_field ) );
251
+
252
+ }
253
+ }
254
+ }
255
+
256
+ do_action( 'sp_wpcp_load_option_fields' );
257
+
258
+ }
259
+ }
admin/views/meta-box/functions/sanitize.php ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+
4
+ if ( ! function_exists( 'sp_sanitize_text' ) ) {
5
+ /**
6
+ * Text sanitize
7
+ *
8
+ * @since 1.0.0
9
+ * @version 1.0.0
10
+ *
11
+ * @param string $value Sanitize text field value.
12
+ * @param string $field The field type.
13
+ * @return statement
14
+ */
15
+ function sp_sanitize_text( $value, $field ) {
16
+ return wp_filter_nohtml_kses( $value );
17
+ }
18
+ add_filter( 'sp_sanitize_text', 'sp_sanitize_text', 10, 2 );
19
+ }
20
+
21
+ /**
22
+ *
23
+ * Textarea sanitize
24
+ *
25
+ * @since 1.0.0
26
+ * @version 1.0.0
27
+ */
28
+ if ( ! function_exists( 'sp_sanitize_textarea' ) ) {
29
+ function sp_sanitize_textarea( $value ) {
30
+
31
+ global $allowedposttags;
32
+ return wp_kses( $value, $allowedposttags );
33
+
34
+ }
35
+ add_filter( 'sp_sanitize_textarea', 'sp_sanitize_textarea' );
36
+ }
37
+
38
+ /**
39
+ *
40
+ * Checkbox sanitize
41
+ * Do not touch, or think twice.
42
+ *
43
+ * @since 1.0.0
44
+ * @version 1.0.0
45
+ */
46
+ if ( ! function_exists( 'sp_sanitize_checkbox' ) ) {
47
+ function sp_sanitize_checkbox( $value ) {
48
+
49
+ if ( ! empty( $value ) && $value == 1 ) {
50
+ $value = true;
51
+ }
52
+
53
+ if ( empty( $value ) ) {
54
+ $value = false;
55
+ }
56
+
57
+ return $value;
58
+
59
+ }
60
+ add_filter( 'sp_sanitize_checkbox', 'sp_sanitize_checkbox' );
61
+ add_filter( 'sp_sanitize_switcher', 'sp_sanitize_checkbox' );
62
+ }
63
+
64
+ /**
65
+ *
66
+ * Image select sanitize
67
+ * Do not touch, or think twice.
68
+ *
69
+ * @since 1.0.0
70
+ * @version 1.0.0
71
+ */
72
+ if ( ! function_exists( 'sp_sanitize_image_select' ) ) {
73
+ function sp_sanitize_image_select( $value ) {
74
+
75
+ if ( isset( $value ) && is_array( $value ) ) {
76
+ if ( count( $value ) ) {
77
+ $value = $value;
78
+ } else {
79
+ $value = $value[0];
80
+ }
81
+ } elseif ( empty( $value ) ) {
82
+ $value = '';
83
+ }
84
+
85
+ return $value;
86
+
87
+ }
88
+ add_filter( 'sp_sanitize_image_select', 'sp_sanitize_image_select' );
89
+ }
90
+
91
+ /**
92
+ *
93
+ * Group sanitize
94
+ * Do not touch, or think twice.
95
+ *
96
+ * @since 1.0.0
97
+ * @version 1.0.0
98
+ */
99
+ if ( ! function_exists( 'sp_sanitize_group' ) ) {
100
+ function sp_sanitize_group( $value ) {
101
+ return ( empty( $value ) ) ? '' : $value;
102
+ }
103
+ add_filter( 'sp_sanitize_group', 'sp_sanitize_group' );
104
+ }
105
+
106
+ /**
107
+ *
108
+ * Title sanitize
109
+ *
110
+ * @since 1.0.0
111
+ * @version 1.0.0
112
+ */
113
+ if ( ! function_exists( 'sp_sanitize_title' ) ) {
114
+ function sp_sanitize_title( $value ) {
115
+ return sanitize_title( $value );
116
+ }
117
+ add_filter( 'sp_sanitize_title', 'sp_sanitize_title' );
118
+ }
119
+
120
+ /**
121
+ *
122
+ * Text clean
123
+ *
124
+ * @since 1.0.0
125
+ * @version 1.0.0
126
+ */
127
+ if ( ! function_exists( 'sp_sanitize_clean' ) ) {
128
+ function sp_sanitize_clean( $value ) {
129
+ return $value;
130
+ }
131
+ add_filter( 'sp_sanitize_clean', 'sp_sanitize_clean', 10, 2 );
132
+ }
admin/views/meta-box/functions/validate.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Email validate
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ if ( ! function_exists( 'sp_wpcp_validate_email' ) ) {
11
+
12
+ /**
13
+ * Validate email address.
14
+ *
15
+ * @param email $value the value of the field.
16
+ * @param string $field The field.
17
+ * @return statement
18
+ */
19
+ function sp_wpcp_validate_email( $value, $field ) {
20
+
21
+ if ( ! sanitize_email( $value ) ) {
22
+ return __( 'Please write a valid email address!', 'wp-carousel-free' );
23
+ }
24
+
25
+ }
26
+ add_filter( 'sp_wpcp_validate_email', 'sp_wpcp_validate_email', 10, 2 );
27
+ }
28
+
29
+ /**
30
+ *
31
+ * Numeric validate
32
+ *
33
+ * @since 1.0.0
34
+ * @version 1.0.0
35
+ */
36
+ if ( ! function_exists( 'sp_wpcp_validate_numeric' ) ) {
37
+ /**
38
+ * Validate numeric value.
39
+ *
40
+ * @param mix $value Verify the number.
41
+ * @param string $field The field.
42
+ * @return statement
43
+ */
44
+ function sp_wpcp_validate_numeric( $value, $field ) {
45
+
46
+ if ( ! is_numeric( $value ) ) {
47
+ return __( 'Please write a numeric data!', 'wp-carousel-free' );
48
+ }
49
+
50
+ }
51
+ add_filter( 'sp_wpcp_validate_numeric', 'sp_wpcp_validate_numeric', 10, 2 );
52
+ }
53
+
54
+ /**
55
+ *
56
+ * Required validate
57
+ *
58
+ * @since 1.0.0
59
+ * @version 1.0.0
60
+ */
61
+ if ( ! function_exists( 'sp_wpcp_validate_required' ) ) {
62
+ /**
63
+ * Validate required.
64
+ *
65
+ * @param mix $value Value of the field.
66
+ * @return statement
67
+ */
68
+ function sp_wpcp_validate_required( $value ) {
69
+ if ( empty( $value ) ) {
70
+ return __( 'Fatal Error! This field is required!', 'wp-carousel-free' );
71
+ }
72
+ }
73
+ add_filter( 'sp_wpcp_validate_required', 'sp_wpcp_validate_required' );
74
+ }
admin/views/meta-box/index.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php // Silence is golden.
admin/views/meta-box/sp-framework-path.php ADDED
@@ -0,0 +1,381 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) {
2
+ die; } // Cannot access pages directly.
3
+ /**
4
+ *
5
+ * Framework constants
6
+ *
7
+ * @since 1.0.0
8
+ * @version 1.0.0
9
+ */
10
+ defined( 'SP_WPCP_F_VERSION' ) || define( 'SP_WPCP_F_VERSION', '1.1.0' );
11
+ defined( 'SP_OPTION' ) || define( 'SP_OPTION', '_sp_options' );
12
+
13
+ if ( ! function_exists( 'sp_wpcp_get_path_locate' ) ) {
14
+ /**
15
+ *
16
+ * Framework path finder
17
+ *
18
+ * @since 1.0.0
19
+ * @version 1.0.0
20
+ */
21
+ function sp_wpcp_get_path_locate() {
22
+
23
+ $dirname = wp_normalize_path( dirname( __FILE__ ) );
24
+ $plugin_dir = wp_normalize_path( WP_PLUGIN_DIR );
25
+ $located_plugin = ( preg_match( '#' . $plugin_dir . '#', $dirname ) ) ? true : false;
26
+ $directory = ( $located_plugin ) ? $plugin_dir : get_template_directory();
27
+ $directory_uri = ( $located_plugin ) ? WP_PLUGIN_URL : get_template_directory_uri();
28
+ $basename = str_replace( wp_normalize_path( $directory ), '', $dirname );
29
+ $dir = $directory . $basename;
30
+ $uri = $directory_uri . $basename;
31
+
32
+ return apply_filters(
33
+ 'sp_wpcp_get_path_locate', array(
34
+ 'basename' => wp_normalize_path( $basename ),
35
+ 'dir' => wp_normalize_path( $dir ),
36
+ 'uri' => $uri,
37
+ )
38
+ );
39
+
40
+ }
41
+ }
42
+
43
+ /**
44
+ *
45
+ * Framework set paths
46
+ *
47
+ * @since 1.0.0
48
+ * @version 1.0.0
49
+ */
50
+ $get_path = sp_wpcp_get_path_locate();
51
+
52
+ defined( 'SP_WPCP_F_BASENAME' ) || define( 'SP_WPCP_F_BASENAME', $get_path['basename'] );
53
+ defined( 'SP_WPCP_F_DIR' ) || define( 'SP_WPCP_F_DIR', $get_path['dir'] );
54
+ defined( 'SP_WPCP_F_URI' ) || define( 'SP_WPCP_F_URI', $get_path['uri'] );
55
+
56
+ if ( ! function_exists( 'sp_wpcp_locate_template' ) ) {
57
+ /**
58
+ *
59
+ * Framework locate template and override files
60
+ *
61
+ * @since 1.0.0
62
+ * @version 1.0.0
63
+ * @param string $template_name The template name.
64
+ * @return statement
65
+ */
66
+ function sp_wpcp_locate_template( $template_name ) {
67
+
68
+ $located = '';
69
+ $override = apply_filters( 'sp_wpcp_framework_override', 'sp-framework-override' );
70
+ $dir_plugin = WP_PLUGIN_DIR;
71
+ $dir_theme = get_template_directory();
72
+ $dir_child = get_stylesheet_directory();
73
+ $dir_override = '/' . $override . '/' . $template_name;
74
+ $dir_template = SP_WPCP_F_BASENAME . '/' . $template_name;
75
+
76
+ // child theme override
77
+ $child_force_overide = $dir_child . $dir_override;
78
+ $child_normal_override = $dir_child . $dir_template;
79
+
80
+ // theme override paths
81
+ $theme_force_override = $dir_theme . $dir_override;
82
+ $theme_normal_override = $dir_theme . $dir_template;
83
+
84
+ // plugin override
85
+ $plugin_force_override = $dir_plugin . $dir_override;
86
+ $plugin_normal_override = $dir_plugin . $dir_template;
87
+
88
+ if ( file_exists( $child_force_overide ) ) {
89
+
90
+ $located = $child_force_overide;
91
+
92
+ } elseif ( file_exists( $child_normal_override ) ) {
93
+
94
+ $located = $child_normal_override;
95
+
96
+ } elseif ( file_exists( $theme_force_override ) ) {
97
+
98
+ $located = $theme_force_override;
99
+
100
+ } elseif ( file_exists( $theme_normal_override ) ) {
101
+
102
+ $located = $theme_normal_override;
103
+
104
+ } elseif ( file_exists( $plugin_force_override ) ) {
105
+
106
+ $located = $plugin_force_override;
107
+
108
+ } elseif ( file_exists( $plugin_normal_override ) ) {
109
+
110
+ $located = $plugin_normal_override;
111
+ }
112
+
113
+ $located = apply_filters( 'sp_wpcp_locate_template', $located, $template_name );
114
+
115
+ if ( ! empty( $located ) ) {
116
+ load_template( $located, true );
117
+ }
118
+
119
+ return $located;
120
+
121
+ }
122
+ }
123
+
124
+ if ( ! function_exists( 'sp_get_option' ) ) {
125
+ /**
126
+ *
127
+ * Get option
128
+ *
129
+ * @since 1.0.0
130
+ * @version 1.0.0
131
+ */
132
+ function sp_get_option( $option_name = '', $default = '' ) {
133
+
134
+ $options = apply_filters( 'sp_get_option', get_option( SP_OPTION ), $option_name, $default );
135
+
136
+ if ( ! empty( $option_name ) && ! empty( $options[ $option_name ] ) ) {
137
+ return $options[ $option_name ];
138
+ } else {
139
+ return ( ! empty( $default ) ) ? $default : null;
140
+ }
141
+
142
+ }
143
+ }
144
+
145
+ if ( ! function_exists( 'sp_set_option' ) ) {
146
+ /**
147
+ *
148
+ * Set option
149
+ *
150
+ * @since 1.0.0
151
+ * @version 1.0.0
152
+ */
153
+ function sp_set_option( $option_name = '', $new_value = '' ) {
154
+
155
+ $options = apply_filters( 'sp_set_option', get_option( SP_OPTION ), $option_name, $new_value );
156
+
157
+ if ( ! empty( $option_name ) ) {
158
+ $options[ $option_name ] = $new_value;
159
+ update_option( SP_OPTION, $options );
160
+ }
161
+
162
+ }
163
+ }
164
+
165
+ if ( ! function_exists( 'sp_get_all_option' ) ) {
166
+ /**
167
+ *
168
+ * Get all option
169
+ *
170
+ * @since 1.0.0
171
+ * @version 1.0.0
172
+ */
173
+ function sp_get_all_option() {
174
+ return get_option( SP_OPTION );
175
+ }
176
+ }
177
+
178
+ if ( ! function_exists( 'sp_get_multilang_option' ) ) {
179
+ /**
180
+ *
181
+ * Multi language option
182
+ *
183
+ * @since 1.0.0
184
+ * @version 1.0.0
185
+ */
186
+ function sp_get_multilang_option( $option_name = '', $default = '' ) {
187
+
188
+ $value = sp_get_option( $option_name, $default );
189
+ $languages = sp_language_defaults();
190
+ $default = $languages['default'];
191
+ $current = $languages['current'];
192
+
193
+ if ( is_array( $value ) && is_array( $languages ) && isset( $value[ $current ] ) ) {
194
+ return $value[ $current ];
195
+ } elseif ( $default != $current ) {
196
+ return '';
197
+ }
198
+
199
+ return $value;
200
+
201
+ }
202
+ }
203
+
204
+ if ( ! function_exists( 'sp_get_multilang_value' ) ) {
205
+ /**
206
+ *
207
+ * Multi language value
208
+ *
209
+ * @since 1.0.0
210
+ * @version 1.0.0
211
+ */
212
+ function sp_get_multilang_value( $value = '', $default = '' ) {
213
+
214
+ $languages = sp_language_defaults();
215
+ $default = $languages['default'];
216
+ $current = $languages['current'];
217
+
218
+ if ( is_array( $value ) && is_array( $languages ) && isset( $value[ $current ] ) ) {
219
+ return $value[ $current ];
220
+ } elseif ( $default != $current ) {
221
+ return '';
222
+ }
223
+
224
+ return $value;
225
+
226
+ }
227
+ }
228
+
229
+ if ( ! function_exists( 'sp_is_wpml_activated' ) ) {
230
+ /**
231
+ *
232
+ * WPML plugin is activated
233
+ *
234
+ * @since 1.0.0
235
+ * @version 1.0.0
236
+ */
237
+ function sp_is_wpml_activated() {
238
+ if ( class_exists( 'SitePress' ) ) {
239
+ return true;
240
+ } else {
241
+ return false; }
242
+ }
243
+ }
244
+
245
+ if ( ! function_exists( 'sp_is_qtranslate_activated' ) ) {
246
+ /**
247
+ *
248
+ * qTranslate plugin is activated
249
+ *
250
+ * @since 1.0.0
251
+ * @version 1.0.0
252
+ */
253
+ function sp_is_qtranslate_activated() {
254
+ if ( function_exists( 'qtrans_getSortedLanguages' ) ) {
255
+ return true;
256
+ } else {
257
+ return false; }
258
+ }
259
+ }
260
+
261
+ if ( ! function_exists( 'sp_is_polylang_activated' ) ) {
262
+ /**
263
+ *
264
+ * Polylang plugin is activated
265
+ *
266
+ * @since 1.0.0
267
+ * @version 1.0.0
268
+ */
269
+ function sp_is_polylang_activated() {
270
+ if ( class_exists( 'Polylang' ) ) {
271
+ return true;
272
+ } else {
273
+ return false; }
274
+ }
275
+ }
276
+
277
+ if ( ! function_exists( 'sp_language_defaults' ) ) {
278
+ /**
279
+ *
280
+ * Get language defaults
281
+ *
282
+ * @since 1.0.0
283
+ * @version 1.0.0
284
+ */
285
+ function sp_language_defaults() {
286
+
287
+ $multilang = array();
288
+
289
+ if ( sp_is_wpml_activated() || sp_is_qtranslate_activated() || sp_is_polylang_activated() ) {
290
+
291
+ if ( sp_is_wpml_activated() ) {
292
+
293
+ global $sitepress;
294
+ $multilang['default'] = $sitepress->get_default_language();
295
+ $multilang['current'] = $sitepress->get_current_language();
296
+ $multilang['languages'] = $sitepress->get_active_languages();
297
+
298
+ } elseif ( sp_is_polylang_activated() ) {
299
+
300
+ global $polylang;
301
+ $current = pll_current_language();
302
+ $default = pll_default_language();
303
+ $current = ( empty( $current ) ) ? $default : $current;
304
+ $poly_langs = $polylang->model->get_languages_list();
305
+ $languages = array();
306
+
307
+ foreach ( $poly_langs as $p_lang ) {
308
+ $languages[ $p_lang->slug ] = $p_lang->slug;
309
+ }
310
+
311
+ $multilang['default'] = $default;
312
+ $multilang['current'] = $current;
313
+ $multilang['languages'] = $languages;
314
+
315
+ } elseif ( sp_is_qtranslate_activated() ) {
316
+
317
+ global $q_config;
318
+ $multilang['default'] = $q_config['default_language'];
319
+ $multilang['current'] = $q_config['language'];
320
+ $multilang['languages'] = array_flip( qtrans_getSortedLanguages() );
321
+
322
+ }
323
+ }
324
+
325
+ $multilang = apply_filters( 'sp_language_defaults', $multilang );
326
+
327
+ return ( ! empty( $multilang ) ) ? $multilang : false;
328
+
329
+ }
330
+ }
331
+
332
+ if ( ! function_exists( 'sp_get_locale' ) ) {
333
+ /**
334
+ *
335
+ * Get locate for load textdomain
336
+ *
337
+ * @since 1.0.0
338
+ * @version 1.0.0
339
+ */
340
+ function sp_get_locale() {
341
+
342
+ global $locale, $wp_local_package;
343
+
344
+ if ( isset( $locale ) ) {
345
+ return apply_filters( 'locale', $locale );
346
+ }
347
+
348
+ if ( isset( $wp_local_package ) ) {
349
+ $locale = $wp_local_package;
350
+ }
351
+
352
+ if ( defined( 'WPLANG' ) ) {
353
+ $locale = WPLANG;
354
+ }
355
+
356
+ if ( is_multisite() ) {
357
+
358
+ if ( defined( 'WP_INSTALLING' ) || ( false === $ms_locale = get_option( 'WPLANG' ) ) ) {
359
+ $ms_locale = get_site_option( 'WPLANG' );
360
+ }
361
+
362
+ if ( $ms_locale !== false ) {
363
+ $locale = $ms_locale;
364
+ }
365
+ } else {
366
+
367
+ $db_locale = get_option( 'WPLANG' );
368
+
369
+ if ( $db_locale !== false ) {
370
+ $locale = $db_locale;
371
+ }
372
+ }
373
+
374
+ if ( empty( $locale ) ) {
375
+ $locale = 'en_US';
376
+ }
377
+
378
+ return apply_filters( 'locale', $locale );
379
+
380
+ }
381
+ }
admin/views/meta-box/sp-framework.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The main file for the SP meta-box framework.
4
+ *
5
+ * @package WP_Carousel_Free
6
+ * @subpackage WP_Carousel_Free/admin/views/meta-box
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ die;
11
+ } // Cannot access pages directly.
12
+
13
+ // ------------------------------------------------------------------------------------------------
14
+ require_once plugin_dir_path( __FILE__ ) . '/sp-framework-path.php';
15
+ // ------------------------------------------------------------------------------------------------
16
+ if ( ! function_exists( 'sp_wpcp_framework_init' ) && ! class_exists( 'SP_WPCP_Framework' ) ) {
17
+
18
+ /**
19
+ * SP meta box framework for ShapedPlugin
20
+ *
21
+ * @since 2.0.0
22
+ * @return void
23
+ */
24
+ function sp_wpcp_framework_init() {
25
+
26
+ // Active modules.
27
+ defined( 'SP_WPCP_F_ACTIVE_METABOX' ) || define( 'SP_WPCP_F_ACTIVE_METABOX', true );
28
+ defined( 'SP_WPCP_F_ACTIVE_FRAMEWORK' ) || define( 'SP_WPCP_F_ACTIVE_FRAMEWORK', true );
29
+
30
+ // Helpers.
31
+ sp_wpcp_locate_template( 'functions/fallback.php' );
32
+ sp_wpcp_locate_template( 'functions/helpers.php' );
33
+ sp_wpcp_locate_template( 'functions/actions.php' );
34
+ sp_wpcp_locate_template( 'functions/enqueue.php' );
35
+ sp_wpcp_locate_template( 'functions/sanitize.php' );
36
+ sp_wpcp_locate_template( 'functions/validate.php' );
37
+
38
+ // Classes.
39
+ sp_wpcp_locate_template( 'classes/abstract.class.php' );
40
+ sp_wpcp_locate_template( 'classes/options.class.php' );
41
+ sp_wpcp_locate_template( 'classes/metabox.class.php' );
42
+ sp_wpcp_locate_template( 'classes/framework.class.php' );
43
+
44
+ // Configs.
45
+ sp_wpcp_locate_template( 'config/metabox.config.php' );
46
+ sp_wpcp_locate_template( 'config/framework.config.php' );
47
+
48
+ }
49
+ add_action( 'init', 'sp_wpcp_framework_init', 10 );
50
+ }
admin/views/premium.php ADDED
@@ -0,0 +1,274 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The help page for the WP Carousel
4
+ *
5
+ * @package WP Carousel
6
+ * @subpackage wp-carousel-free/admin
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ } // if direct access.
12
+
13
+ /**
14
+ * The help class for the WP Carousel
15
+ */
16
+ class WP_Carousel_Free_Upgrade {
17
+
18
+ /**
19
+ * Wp Carousel Pro single instance of the class
20
+ *
21
+ * @var null
22
+ * @since 2.0.0
23
+ */
24
+ protected static $_instance = null;
25
+
26
+ /**
27
+ * Main WP_Carousel_Free_Help Instance
28
+ *
29
+ * @since 2.0.0
30
+ * @static
31
+ * @see sp_wpcp_help()
32
+ * @return self Main instance
33
+ */
34
+ public static function instance() {
35
+ if ( is_null( self::$_instance ) ) {
36
+ self::$_instance = new self();
37
+ }
38
+
39
+ return self::$_instance;
40
+ }
41
+
42
+ /**
43
+ * Add admin menu.
44
+ *
45
+ * @since 2.0.0
46
+ * @return void
47
+ */
48
+ public function upgrade_admin_menu() {
49
+ add_submenu_page(
50
+ 'edit.php?post_type=sp_wp_carousel', __( 'Premium', 'wp-carousel-free' ), __( 'Premium', 'wp-carousel-free' ), 'manage_options', 'wpcf_upgrade', array(
51
+ $this,
52
+ 'upgrade_page_callback',
53
+ )
54
+ );
55
+ }
56
+
57
+ /**
58
+ * The WP Carousel Upgrade Callback.
59
+ *
60
+ * @since 2.0.0
61
+ * @return void
62
+ */
63
+ public function upgrade_page_callback() {
64
+ ?> <div class="wrap about-wrap sp-wpcf-upgrade">
65
+ <h1><?php _e( 'Upgrade to <span>WordPress Carousel Pro</span>', 'wp-carousel-free' ); ?></h1>
66
+ <p class="about-text">
67
+ <?php
68
+ esc_html_e(
69
+ 'Get more Advanced Functionality & Flexibility with the Premium version.', 'wp-carousel-free'
70
+ );
71
+ ?>
72
+ </p>
73
+ <div class="wp-badge"></div>
74
+ <ul>
75
+ <li class="wpcf-upgrade-btn"><a href="https://shapedplugin.com/plugin/wordpress-carousel-pro/" target="_blank">Buy WP Carousel Pro <i class="fa fa-caret-right"></i></a></li>
76
+ <li class="wpcf-upgrade-btn"><a href="https://wordpresscarousel.com" target="_blank">Live Demo & All Features <i class="fa fa-angle-double-right"></i></a></li>
77
+ </ul>
78
+
79
+ <hr>
80
+
81
+ <div class="sp-wpc-pro-features">
82
+ <h2 class="sp-wpc-text-center">Premium Features Built for Future</h2>
83
+ <p class="sp-wpc-text-center sp-wpc-pro-subtitle">We've added 100+ extra features in our Premium Version of this plugin. Let’s see some amazing features.</p>
84
+ <div class="feature-section three-col">
85
+ <div class="col">
86
+ <div class="sp-wpc-feature">
87
+ <h3><span class="dashicons dashicons-yes"></span>Responsive & SEO Friendly</h3>
88
+ <p>Design carousels for desktop, tablet & mobile. Your carousels will adjust for any device. WordPress Carousel Pro follows the best SEO practices & performs speedily on all sites.</p>
89
+ </div>
90
+ </div>
91
+ <div class="col">
92
+ <div class="sp-wpc-feature">
93
+ <h3><span class="dashicons dashicons-yes"></span>Slide Anything</h3>
94
+ <p>WordPress Carousel Pro allows you to create a carousel slider where the content for each slide can be anything you want – image, post, product, content, video, text, HTML, Shortcodes etc.</p>
95
+ </div>
96
+ </div>
97
+ <div class="col">
98
+ <div class="sp-wpc-feature">
99
+ <h3><span class="dashicons dashicons-yes"></span>Compatible with any Theme</h3>
100
+ <p>Guaranteed to work with your any WordPress site including Genesis, Divi, WooThemes, ThemeForest or any theme, in any WordPress single site and multisite network.</p>
101
+ </div>
102
+ </div>
103
+ <div class="col">
104
+ <div class="sp-wpc-feature">
105
+ <h3><span class="dashicons dashicons-yes"></span>Advanced Shortcode Generator</h3>
106
+ <p>WordPress Carousel Pro comes with a built-in easy to use Shortcode Generator that helps you save, edit, copy and paste shortcode where you want!</p>
107
+ </div>
108
+ </div>
109
+ <div class="col">
110
+ <div class="sp-wpc-feature">
111
+ <h3><span class="dashicons dashicons-yes"></span>No Coding Required</h3>
112
+ <p>The plugin is built with unlimited stunning styling options like color, font family, size, alignment etc. to stylize your own way without any limitation. No Coding Skills Needed!</p>
113
+ </div>
114
+ </div>
115
+ <div class="col">
116
+ <div class="sp-wpc-feature">
117
+ <h3><span class="dashicons dashicons-yes"></span>840+ Google Fonts</h3>
118
+ <p>WordPress Carousel Pro supports the list of Google font family with a huge collection of 840+ fonts. Customize the font family, size, transform, spacing, color, line-height etc.</p>
119
+ </div>
120
+ </div>
121
+ <div class="col">
122
+ <div class="sp-wpc-feature">
123
+ <h3><span class="dashicons dashicons-yes"></span>Image Carousel</h3>
124
+ <p>WordPress Carousel Pro allows you to create beautiful image carousels for your site in minutes! Upload images via WordPress regular gallery, create a gallery to make carousel.</p>
125
+ </div>
126
+ </div>
127
+ <div class="col">
128
+ <div class="sp-wpc-feature">
129
+ <h3><span class="dashicons dashicons-yes"></span>Post Carousel</h3>
130
+ <p>Display posts from multiple Categories, Tags, Formats, or Types: Latest, Taxonomies, Specific etc. Show the post contents: title, image, excerpt, read more, category, date, author, tags, comments etc.</p>
131
+ </div>
132
+ </div>
133
+ <div class="col">
134
+ <div class="sp-wpc-feature">
135
+ <h3><span class="dashicons dashicons-yes"></span>WooCommerce Product Carousel</h3>
136
+ <p>Filter by different product types. (e.g. latest, categories, specific products etc.). Show/hide the product name, image, price, excerpt, read more, rating, add to cart button etc.</p>
137
+ </div>
138
+ </div>
139
+ <div class="col">
140
+ <div class="sp-wpc-feature">
141
+ <h3><span class="dashicons dashicons-yes"></span>Content Carousel</h3>
142
+ <p>Slide anything you want based on your WordPress site. (e.g. images, text, HTML, shortcodes, any custom contents etc.) You can sort slide content by drag and drop easily.</p>
143
+ </div>
144
+ </div>
145
+ <div class="col">
146
+ <div class="sp-wpc-feature">
147
+ <h3><span class="dashicons dashicons-yes"></span>Video Carousel</h3>
148
+ <p>Show videos from multiple sources: YouTube, Vimeo, Dailymotion, mp4, WebM, and even self-hosted video with Lightbox. A customizable video icon will place over the video thumb.</p>
149
+ </div>
150
+ </div>
151
+ <div class="col">
152
+ <div class="sp-wpc-feature">
153
+ <h3><span class="dashicons dashicons-yes"></span>Drag & Drop Builder</h3>
154
+ <p>Drag & Drop carousel content ordering is one of the amazing features of WordPress Carousel Pro. You can order your content easily from WordPress default gallery settings.</p>
155
+ </div>
156
+ </div>
157
+ <div class="col">
158
+ <div class="sp-wpc-feature">
159
+ <h3><span class="dashicons dashicons-yes"></span>Image Internal & External Links</h3>
160
+ <p>You can link to each carousel image easily. You can add a link to each carousel in WordPress gallery settings. You can set URLs to them, they can open in the same or new tab.</p>
161
+ </div>
162
+ </div>
163
+ <div class="col">
164
+ <div class="sp-wpc-feature">
165
+ <h3><span class="dashicons dashicons-yes"></span>Lightbox Functionality for Image</h3>
166
+ <p>Lightbox is one of the impressive premium features of WordPress Carousel Pro. You can also make lightbox image group. To have the images in lightbox, just turn on the lightbox.</p>
167
+ </div>
168
+ </div>
169
+ <div class="col">
170
+ <div class="sp-wpc-feature">
171
+ <h3><span class="dashicons dashicons-yes"></span>One Page Carousel Slider</h3>
172
+ <p>You are able to build one column carousel slider. You can add slider caption & description to the respective images. You can change slider colors with your desired color!</p>
173
+ </div>
174
+ </div>
175
+ <div class="col">
176
+ <div class="sp-wpc-feature">
177
+ <h3><span class="dashicons dashicons-yes"></span>Carousel Settings</h3>
178
+ <p>Carousel controls e.g. 6 Navigation arrows & 9 Positions, Pagination dots, AutoPlay & speed, Stop on hover, looping, Touch Swipe, scroll, key navigation, Mouse Draggable etc.</p>
179
+ </div>
180
+ </div>
181
+ <div class="col">
182
+ <div class="sp-wpc-feature">
183
+ <h3><span class="dashicons dashicons-yes"></span>Carousel Mode</h3>
184
+ <p>WordPress Carousel Pro has two carousel mode: Standard and Ticker (Smooth looping, with no pause). You can change the carousel mode based on your choice or demand.</p>
185
+ </div>
186
+ </div>
187
+ <div class="col">
188
+ <div class="sp-wpc-feature">
189
+ <h3><span class="dashicons dashicons-yes"></span>Sliding and Hover Effects</h3>
190
+ <p>You can set hover and sliding effects for images like, gray-scale, overlay opacity, fade in or out etc. that are both edgy and appealing. Try them all. Use the one you like best.</p>
191
+ </div>
192
+ </div>
193
+ <div class="col">
194
+ <div class="sp-wpc-feature">
195
+ <h3><span class="dashicons dashicons-yes"></span>Custom Image Re-sizing</h3>
196
+ <p>You’ll find in the image settings all cropping sizes available. You can change the default size of your images in the settings. The width is dynamic with fixed height through CSS.</p>
197
+ </div>
198
+ </div>
199
+ <div class="col">
200
+ <div class="sp-wpc-feature">
201
+ <h3><span class="dashicons dashicons-yes"></span>Fully Internationalized</h3>
202
+ <p>WordPress Carousel Pro is fully multilingual ready with WPML, Polylang, qTranslate-x, GTranslate, Google Language Translator, WPGlobus etc. popular translation plugins.</p>
203
+ </div>
204
+ </div>
205
+ <div class="col">
206
+ <div class="sp-wpc-feature">
207
+ <h3><span class="dashicons dashicons-yes"></span>Multi-site Supported</h3>
208
+ <p>One of the important features of WordPress Carousel Pro is Multi-site ready. The Premium version works great in the multi-site network. You’ll find details here.</p>
209
+ </div>
210
+ </div>
211
+ <div class="col">
212
+ <div class="sp-wpc-feature">
213
+ <h3><span class="dashicons dashicons-yes"></span>Widget Ready</h3>
214
+ <p>To include logo carousel or grid inside a widget area is as simple as including any other widget! The plugin is widget ready. Create a shortcode first and use it simply in the widget.</p>
215
+ </div>
216
+ </div>
217
+ <div class="col">
218
+ <div class="sp-wpc-feature">
219
+ <h3><span class="dashicons dashicons-yes"></span>Advanced Settings</h3>
220
+ <p>The plugin is completely customizable and also added a custom CSS field option to override styles. You can also enqueue or dequeue scripts/CSS to avoid conflicts and loading issue.</p>
221
+ </div>
222
+ </div>
223
+ <div class="col">
224
+ <div class="sp-wpc-feature">
225
+ <h3><span class="dashicons dashicons-yes"></span>Right to Left Support</h3>
226
+ <p>WordPress Carousel Pro is Right-to-Left supported. For Arabic, Hebrew, Persian, etc. languages, you can select the right-to-left option for carousel direction, without writing any CSS.</p>
227
+ </div>
228
+ </div>
229
+ <div class="col">
230
+ <div class="sp-wpc-feature">
231
+ <h3><span class="dashicons dashicons-yes"></span>Lifetime Auto Update & Support</h3>
232
+ <p>WordPress Carousel Pro is integrated with automatic updates which allows you to update the plugin through the WordPress dashboard without downloading them manually.</p>
233
+ </div>
234
+ </div>
235
+ <div class="col">
236
+ <div class="sp-wpc-feature">
237
+ <h3><span class="dashicons dashicons-yes"></span>Fast and Friendly Support</h3>
238
+ <p>If you need any assistance, we’re here to help you with the instant support forum. A professional support team is always ready whenever you face with any issues to use the plugin.</p>
239
+ </div>
240
+ </div>
241
+ <div class="col">
242
+ <div class="sp-wpc-feature">
243
+ <h3><span class="dashicons dashicons-yes"></span>Page Builders Compatibility</h3>
244
+ <p>WordPress Carousel Pro works nicely with the popular Page Builders plugins: Gutenberg, WPBakery, Elementor, Divi builder, BeaverBuilder, SiteOrgin, Themify Builder etc.</p>
245
+ </div>
246
+ </div>
247
+
248
+ </div>
249
+ </div>
250
+ <hr>
251
+ <h2 class="text-center sp-wpcp-promo-video-title">Watch How <b>WordPress Carousel Pro</b> Works</h2>
252
+ <div class="headline-feature feature-video">
253
+
254
+ <iframe width="1050" height="590" src="https://www.youtube.com/embed/XMYYgFD7ZIA" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
255
+ </div>
256
+ <hr>
257
+ <div class="sp-wpcp-join-community text-center">
258
+ <h2>Join the <b>12000+</b> Happy Users Worldwide!</h2>
259
+ <a class="wpcf-upgrade-btn" target="_blank" href="https://shapedplugin.com/plugin/wordpress-carousel-pro/">Get a license instantly</a>
260
+ <p>Every purchase comes with <b>7-day</b> money back guarantee and access to our incredibly Top-notch Support with lightening-fast response time and 100% satisfaction rate. One-Time payment, lifetime automatic update.</p>
261
+ </div>
262
+ <br>
263
+ <br>
264
+
265
+ <hr>
266
+ <div class="sp-wpc-upgrade-sticky-footer sp-wpc-text-center">
267
+ <p><a href="https://wordpresscarousel.com" target="_blank" class="button
268
+ button-primary">Live Demo</a> <a href="https://shapedplugin.com/plugin/wordpress-carousel-pro/" target="_blank" class="button button-primary">Upgrade Now</a></p>
269
+ </div>
270
+
271
+ </div>
272
+ <?php }
273
+
274
+ }
admin/views/tmce-button.php ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Make sure we don't expose any info if called directly
3
+ if ( ! defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ }
6
+
7
+ if ( ! class_exists( 'SP_WPCP_MCE_Carousel_List' ) ) {
8
+
9
+ /**
10
+ * The Tiny MCE button class.
11
+ */
12
+ class SP_WPCP_MCE_Carousel_List {
13
+
14
+ /**
15
+ * Instance of the class.
16
+ *
17
+ * @var $instance
18
+ */
19
+ private static $instance;
20
+
21
+ /**
22
+ * Initiator
23
+ *
24
+ * @since 2.0.0
25
+ */
26
+ public static function init() {
27
+ return self::$instance;
28
+ }
29
+
30
+ /**
31
+ * Constructor
32
+ *
33
+ * @since 2.0.0
34
+ */
35
+ public function __construct() {
36
+ add_action( 'wp_ajax_wpcp_cpt_list', array( $this, 'wpcp_carousel_list_ajax' ) );
37
+ add_action( 'admin_footer', array( $this, 'wpcp_cpt_list' ) );
38
+ add_action( 'admin_head', array( $this, 'wpcp_mce_button' ) );
39
+ }
40
+
41
+ /**
42
+ * Hooks your functions into the correct filters
43
+ *
44
+ * @since 2.0.0
45
+ * @return void
46
+ */
47
+ public function wpcp_mce_button() {
48
+ // check user permissions.
49
+ if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) {
50
+ return;
51
+ }
52
+ // check if WYSIWYG is enabled.
53
+ if ( 'true' == get_user_option( 'rich_editing' ) ) {
54
+ add_filter( 'mce_external_plugins', array( $this, 'add_mce_plugin' ) );
55
+ add_filter( 'mce_buttons', array( $this, 'register_mce_button' ) );
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Script for our mce button.
61
+ *
62
+ * @since 2.0.0
63
+ * @param string $plugin_array The button.
64
+ * @return string
65
+ */
66
+ public function add_mce_plugin( $plugin_array ) {
67
+ $plugin_array['sp_wpcp_mce_button'] = WPCAROUSELF_URL . 'admin/js/mce-button.js';
68
+ return $plugin_array;
69
+ }
70
+
71
+ /**
72
+ * Register our button in the editor.
73
+ *
74
+ * @since 2.0.0
75
+ * @param string $buttons The Tiny mce button.
76
+ * @return statement
77
+ */
78
+ public function register_mce_button( $buttons ) {
79
+ array_push( $buttons, 'sp_wpcp_mce_button' );
80
+ return $buttons;
81
+ }
82
+
83
+ /**
84
+ * Function to fetch cpt posts list
85
+ *
86
+ * @since 2.0.0
87
+ * @param string $post_type List of the post type.
88
+ * @return void
89
+ */
90
+ public function posts( $post_type ) {
91
+
92
+ global $wpdb;
93
+ $cpt_type = $post_type;
94
+ $cpt_post_status = 'publish';
95
+ $cpt = $wpdb->get_results(
96
+ $wpdb->prepare(
97
+ "SELECT ID, post_title
98
+ FROM $wpdb->posts
99
+ WHERE $wpdb->posts.post_type = %s
100
+ AND $wpdb->posts.post_status = %s
101
+ ORDER BY ID DESC",
102
+ $cpt_type,
103
+ $cpt_post_status
104
+ )
105
+ );
106
+
107
+ $list = array();
108
+
109
+ foreach ( $cpt as $post ) {
110
+ $selected = '';
111
+ $post_id = $post->ID;
112
+ $post_name = $post->post_title;
113
+ $list[] = array(
114
+ 'text' => $post_name,
115
+ 'value' => $post_id,
116
+ );
117
+ }
118
+
119
+ wp_send_json( $list );
120
+ }
121
+
122
+ /**
123
+ * Function to fetch buttons
124
+ *
125
+ * @since 2.0.0
126
+ * @return string
127
+ */
128
+ public function wpcp_carousel_list_ajax() {
129
+ // check for nonce.
130
+ check_ajax_referer( 'sp-wpcp-mce-nonce', 'security' );
131
+ $posts = $this->posts( 'sp_wp_carousel' ); // change 'post' if you need posts list.
132
+ return $posts;
133
+ }
134
+
135
+ /**
136
+ * Function to output button list ajax script
137
+ *
138
+ * @since 2.0.0
139
+ * @return void
140
+ */
141
+ public function wpcp_cpt_list() {
142
+ // create nonce.
143
+ global $current_screen;
144
+ $current_screen->post_type;
145
+ if ( 'post' || 'page' === $current_screen ) {
146
+ $nonce = wp_create_nonce( 'sp-wpcp-mce-nonce' );
147
+ ?>
148
+ <script type="text/javascript">
149
+ jQuery( document ).ready( function( $ ) {
150
+ var data = {
151
+ 'action' : 'wpcp_cpt_list', // wp ajax action.
152
+ 'security' : '<?php echo $nonce; ?>' // nonce value created earlier.
153
+ };
154
+ // fire ajax.
155
+ jQuery.post( ajaxurl, data, function( response ) {
156
+ // if nonce fails then not authorized else settings saved.
157
+ if( response === '-1' ){
158
+ // do nothing.
159
+ console.log('error');
160
+ } else {
161
+ if (typeof(tinyMCE) != 'undefined') {
162
+ if (tinyMCE.activeEditor != null) {
163
+ tinyMCE.activeEditor.settings.spWPCPCarouselList = response;
164
+ }
165
+ }
166
+ }
167
+ });
168
+ });
169
+ </script>
170
+ <?php
171
+ }
172
+ }
173
+
174
+ } // Mce Class
175
+ }
176
+
177
+ /**
178
+ * Kicking this off
179
+ */
180
+ $sp_wpcp_mce_btn = new SP_WPCP_MCE_Carousel_List();
181
+ $sp_wpcp_mce_btn->init();
assets/css/admin.css DELETED
@@ -1,115 +0,0 @@
1
- /* Help Page */
2
- .sp-wpc-text-center{
3
- text-align: center;
4
- }
5
-
6
- div.sp-wpc-help .headline-feature.feature-video iframe{
7
- position: absolute;
8
- top: 0;
9
- left: 0;
10
- width: 100%;
11
- height: 100%;
12
- }
13
- div.sp-wpc-help .feature-section .sp-wpc-feature{
14
- background-color: #fff;
15
- padding: 20px 20px;
16
- border: 1px solid #ddd;
17
- }
18
- div.sp-wpc-help .feature-section .sp-wpc-feature h3{
19
- font-size: 16px;
20
- margin-top: 18px;
21
- }
22
-
23
- div.sp-wpc-help .feature-section i.fa{
24
- font-size: 30px;
25
- display: block;
26
- color: #22afba;
27
- }
28
- div.sp-wpc-help .sp-wpc-pro-features .feature-section span.dashicons{
29
- font-size: 22px;
30
- color: #fff;
31
- background-color: #22afba;
32
- width: 28px;
33
- height: 28px;
34
- line-height: 28px;
35
- border-radius: 50%;
36
- margin-right: 10px;
37
- }
38
- div.sp-wpc-help .sp-wpc-pro-features .feature-section{
39
- margin-bottom: 40px;
40
- }
41
- div.sp-wpc-help .sp-wpc-pro-features .feature-section .sp-wpc-feature h3{
42
- margin-top:0;
43
- }
44
- div.sp-wpc-help .sp-wpc-pro-features .feature-section .sp-wpc-feature p{
45
- margin-bottom:0;
46
- }
47
- div.sp-wpc-help .sp-wpc-pro-features .feature-section .sp-wpc-feature{
48
- box-shadow: 0 0 10px 0 #dddddd;
49
- margin: 4px;
50
- border: 0 solid;
51
- }
52
- div.sp-wpc-help .sp-wpc-pro-features .feature-section.three-col .col{
53
- min-width: 32%;
54
- max-width: 32%;
55
- margin-top: 20px;
56
- }
57
- div.sp-wpc-help .sp-wpc-pro-features .sp-wpc-pro-subtitle{
58
- font-size: 1.2em;
59
- margin-bottom: 26px;
60
- }
61
-
62
- div.sp-wpc-help .sp-wpc-upgrade-sticky-footer{
63
- position: fixed;
64
- bottom: 0;
65
- background: #fff;
66
- width: calc(100% - 195px);
67
- z-index: 9;
68
- margin-left: -25px;
69
- text-align: center;
70
- border: 1px solid #dfdfdf;
71
- padding: 15px 0;
72
- border-bottom: none;
73
- }
74
- div.sp-wpc-help .sp-wpc-pro-features h2{
75
- font-size: 2.5em;
76
- font-weight: 400;
77
- }
78
- div.sp-wpc-help .sp-wpc-upgrade-sticky-footer h3{
79
- margin-top: 17px;
80
- margin-bottom: 20px;
81
- }
82
-
83
- div.sp-wpc-help .sp-wpc-upgrade-sticky-footer a.button{
84
- margin: 0 8px;
85
- }
86
-
87
- /* ShortCode Table */
88
- div.sp-wpc-help .table-bordered {
89
- border: 1px solid #ddd;
90
- width: 100%;
91
- }
92
- div.sp-wpc-help .table-bordered>tbody>tr>td{
93
- border: 1px solid #ddd;
94
- padding: 3px 10px;
95
- background-color: #ffffff;
96
- font-size: 13px;
97
- }
98
- div.sp-wpc-help .table-bordered>thead>tr>th{
99
- border: 1px solid #ddd;
100
- background: #f1f9fa;
101
- padding: 3px 8px;
102
- font-size: 13px;
103
- }
104
-
105
- /* Responsive CSS */
106
- @media (max-width: 960px) {
107
- div.sp-wpc-help .sp-wpc-upgrade-sticky-footer {
108
- width: calc(100%);
109
- }
110
- }
111
- @media (max-width: 500px) {
112
- div.sp-wpc-help .wp-badge {
113
- background-position-x: center;
114
- }
115
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/style.css DELETED
@@ -1,90 +0,0 @@
1
- div.wordpress-carousel-free-section {
2
- display: none;
3
- }
4
-
5
- div.wordpress-carousel-free-section.slick-initialized {
6
- display: block;
7
- }
8
-
9
- div.wordpress-carousel-free-section .single_wcf_item:focus {
10
- outline: none;
11
- }
12
-
13
- div.wordpress-carousel-free-section .single_wcf_item {
14
- margin: 0 10px;
15
- display: inline-block;
16
- vertical-align: middle;
17
- float: none;
18
- }
19
-
20
- div.wordpress-carousel-free-section .single_wcf_item img {
21
- margin: 0 auto;
22
- display: block;
23
- max-width: 100%;
24
- }
25
-
26
- div.wordpress-carousel-free-section .slick-prev {
27
- left: 0;
28
- text-align: left;
29
- }
30
-
31
- div.wordpress-carousel-free-section .slick-next {
32
- right: 0;
33
- text-align: right;
34
- }
35
-
36
- div.wordpress-carousel-free-section .slick-prev,
37
- div.wordpress-carousel-free-section .slick-next {
38
- position: absolute;
39
- z-index: 22;
40
- top: 50%;
41
- width: 14px;
42
- height: 30px;
43
- font-size: 30px;
44
- -webkit-transition: ease all 0.3s;
45
- -moz-transition: ease all 0.3s;
46
- -ms-transition: ease all 0.3s;
47
- -o-transition: ease all 0.3s;
48
- transition: ease all 0.3s;
49
- line-height: 30px;
50
- margin-top: -15px;
51
- cursor: pointer;
52
- opacity: .5;
53
- }
54
-
55
- div.wordpress-carousel-free-section .slick-prev:hover,
56
- div.wordpress-carousel-free-section .slick-next:hover {
57
- opacity: 1;
58
- }
59
-
60
- /* Dots */
61
- div.wordpress-carousel-free-section ul.slick-dots {
62
- list-style: none;
63
- padding: 0;
64
- margin: 0;
65
- text-align: center;
66
- margin-top: 22px;
67
- }
68
-
69
- div.wordpress-carousel-free-section ul.slick-dots li {
70
- display: inline;
71
- }
72
-
73
- div.wordpress-carousel-free-section ul.slick-dots li button {
74
- border: 0 solid;
75
- overflow: hidden;
76
- width: 12px;
77
- height: 12px;
78
- border-radius: 50%;
79
- text-indent: -999px;
80
- background-color: #cccccc;
81
- margin: 3px;
82
- }
83
-
84
- div.wordpress-carousel-free-section ul.slick-dots li button:focus {
85
- outline: none;
86
- }
87
-
88
- div.wordpress-carousel-free-section ul.slick-dots li.slick-active button {
89
- background-color: #666;
90
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/admin.js DELETED
@@ -1,16 +0,0 @@
1
- jQuery(function ($) {
2
-
3
- 'use strict';
4
-
5
- /* === Pro Features === */
6
- (function () {
7
- var container = document.querySelector('.welcome-panel.sp-wpc-pro-features .welcome-panel-column-container');
8
- var msnry = new Masonry( container, {
9
- // options
10
- itemSelector: '.welcome-panel-column',
11
- horizontalOrder: true
12
- });
13
- }());
14
-
15
-
16
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/slick.min.js DELETED
@@ -1,18 +0,0 @@
1
- /*
2
- _ _ _ _
3
- ___| (_) ___| | __ (_)___
4
- / __| | |/ __| |/ / | / __|
5
- \__ \ | | (__| < _ | \__ \
6
- |___/_|_|\___|_|\_(_)/ |___/
7
- |__/
8
-
9
- Version: 1.6.0
10
- Author: Ken Wheeler
11
- Website: http://kenwheeler.github.io
12
- Docs: http://kenwheeler.github.io/slick
13
- Repo: http://github.com/kenwheeler/slick
14
- Issues: http://github.com/kenwheeler/slick/issues
15
-
16
- */
17
- !function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,e=this;e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>',nextArrow:'<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(b,c){return a('<button type="button" data-role="none" role="button" tabindex="0" />').text(c+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.focussed=!1,e.interrupted=!1,e.hidden="hidden",e.paused=!0,e.positionProp=null,e.respondTo=null,e.rowCount=1,e.shouldClick=!0,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.visibilityChange="visibilitychange",e.windowWidth=0,e.windowTimer=null,f=a(c).data("slick")||{},e.options=a.extend({},e.defaults,d,f),e.currentSlide=e.options.initialSlide,e.originalSettings=e.options,"undefined"!=typeof document.mozHidden?(e.hidden="mozHidden",e.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(e.hidden="webkitHidden",e.visibilityChange="webkitvisibilitychange"),e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.changeSlide=a.proxy(e.changeSlide,e),e.clickHandler=a.proxy(e.clickHandler,e),e.selectHandler=a.proxy(e.selectHandler,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.instanceUid=b++,e.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.registerBreakpoints(),e.init(!0)}var b=0;return c}(),b.prototype.activateADA=function(){var a=this;a.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},b.prototype.addSlide=b.prototype.slickAdd=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("data-slick-index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.animate({height:b},a.options.speed)}},b.prototype.animateSlide=function(b,c){var d={},e=this;e.animateHeight(),e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?(e.options.rtl===!0&&(e.currentLeft=-e.currentLeft),a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){a=Math.ceil(a),e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}})):(e.applyTransition(),b=Math.ceil(b),e.options.vertical===!1?d[e.animType]="translate3d("+b+"px, 0px, 0px)":d[e.animType]="translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.getNavTarget=function(){var b=this,c=b.options.asNavFor;return c&&null!==c&&(c=a(c).not(b.$slider)),c},b.prototype.asNavFor=function(b){var c=this,d=c.getNavTarget();null!==d&&"object"==typeof d&&d.each(function(){var c=a(this).slick("getSlick");c.unslicked||c.slideHandler(b,!0)})},b.prototype.applyTransition=function(a){var b=this,c={};b.options.fade===!1?c[b.transitionType]=b.transformType+" "+b.options.speed+"ms "+b.options.cssEase:c[b.transitionType]="opacity "+b.options.speed+"ms "+b.options.cssEase,b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.autoPlay=function(){var a=this;a.autoPlayClear(),a.slideCount>a.options.slidesToShow&&(a.autoPlayTimer=setInterval(a.autoPlayIterator,a.options.autoplaySpeed))},b.prototype.autoPlayClear=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer)},b.prototype.autoPlayIterator=function(){var a=this,b=a.currentSlide+a.options.slidesToScroll;a.paused||a.interrupted||a.focussed||(a.options.infinite===!1&&(1===a.direction&&a.currentSlide+1===a.slideCount-1?a.direction=0:0===a.direction&&(b=a.currentSlide-a.options.slidesToScroll,a.currentSlide-1===0&&(a.direction=1))),a.slideHandler(b))},b.prototype.buildArrows=function(){var b=this;b.options.arrows===!0&&(b.$prevArrow=a(b.options.prevArrow).addClass("slick-arrow"),b.$nextArrow=a(b.options.nextArrow).addClass("slick-arrow"),b.slideCount>b.options.slidesToShow?(b.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.prependTo(b.options.appendArrows),b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.appendTo(b.options.appendArrows),b.options.infinite!==!0&&b.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):b.$prevArrow.add(b.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},b.prototype.buildDots=function(){var c,d,b=this;if(b.options.dots===!0&&b.slideCount>b.options.slidesToShow){for(b.$slider.addClass("slick-dotted"),d=a("<ul />").addClass(b.options.dotsClass),c=0;c<=b.getDotCount();c+=1)d.append(a("<li />").append(b.options.customPaging.call(this,b,c)));b.$dots=d.appendTo(b.options.appendDots),b.$dots.find("li").first().addClass("slick-active").attr("aria-hidden","false")}},b.prototype.buildOut=function(){var b=this;b.$slides=b.$slider.children(b.options.slide+":not(.slick-cloned)").addClass("slick-slide"),b.slideCount=b.$slides.length,b.$slides.each(function(b,c){a(c).attr("data-slick-index",b).data("originalStyling",a(c).attr("style")||"")}),b.$slider.addClass("slick-slider"),b.$slideTrack=0===b.slideCount?a('<div class="slick-track"/>').appendTo(b.$slider):b.$slides.wrapAll('<div class="slick-track"/>').parent(),b.$list=b.$slideTrack.wrap('<div aria-live="polite" class="slick-list"/>').parent(),b.$slideTrack.css("opacity",0),(b.options.centerMode===!0||b.options.swipeToSlide===!0)&&(b.options.slidesToScroll=1),a("img[data-lazy]",b.$slider).not("[src]").addClass("slick-loading"),b.setupInfinite(),b.buildArrows(),b.buildDots(),b.updateDots(),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.options.draggable===!0&&b.$list.addClass("draggable")},b.prototype.buildRows=function(){var b,c,d,e,f,g,h,a=this;if(e=document.createDocumentFragment(),g=a.$slider.children(),a.options.rows>1){for(h=a.options.slidesPerRow*a.options.rows,f=Math.ceil(g.length/h),b=0;f>b;b++){var i=document.createElement("div");for(c=0;c<a.options.rows;c++){var j=document.createElement("div");for(d=0;d<a.options.slidesPerRow;d++){var k=b*h+(c*a.options.slidesPerRow+d);g.get(k)&&j.appendChild(g.get(k))}i.appendChild(j)}e.appendChild(i)}a.$slider.empty().append(e),a.$slider.children().children().children().css({width:100/a.options.slidesPerRow+"%",display:"inline-block"})}},b.prototype.checkResponsive=function(b,c){var e,f,g,d=this,h=!1,i=d.$slider.width(),j=window.innerWidth||a(window).width();if("window"===d.respondTo?g=j:"slider"===d.respondTo?g=i:"min"===d.respondTo&&(g=Math.min(j,i)),d.options.responsive&&d.options.responsive.length&&null!==d.options.responsive){f=null;for(e in d.breakpoints)d.breakpoints.hasOwnProperty(e)&&(d.originalSettings.mobileFirst===!1?g<d.breakpoints[e]&&(f=d.breakpoints[e]):g>d.breakpoints[e]&&(f=d.breakpoints[e]));null!==f?null!==d.activeBreakpoint?(f!==d.activeBreakpoint||c)&&(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):null!==d.activeBreakpoint&&(d.activeBreakpoint=null,d.options=d.originalSettings,b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b),h=f),b||h===!1||d.$slider.trigger("breakpoint",[d,h])}},b.prototype.changeSlide=function(b,c){var f,g,h,d=this,e=a(b.currentTarget);switch(e.is("a")&&b.preventDefault(),e.is("li")||(e=e.closest("li")),h=d.slideCount%d.options.slidesToScroll!==0,f=h?0:(d.slideCount-d.currentSlide)%d.options.slidesToScroll,b.data.message){case"previous":g=0===f?d.options.slidesToScroll:d.options.slidesToShow-f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide-g,!1,c);break;case"next":g=0===f?d.options.slidesToScroll:f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide+g,!1,c);break;case"index":var i=0===b.data.index?0:b.data.index||e.index()*d.options.slidesToScroll;d.slideHandler(d.checkNavigable(i),!1,c),e.children().trigger("focus");break;default:return}},b.prototype.checkNavigable=function(a){var c,d,b=this;if(c=b.getNavigableIndexes(),d=0,a>c[c.length-1])a=c[c.length-1];else for(var e in c){if(a<c[e]){a=d;break}d=c[e]}return a},b.prototype.cleanUpEvents=function(){var b=this;b.options.dots&&null!==b.$dots&&a("li",b.$dots).off("click.slick",b.changeSlide).off("mouseenter.slick",a.proxy(b.interrupt,b,!0)).off("mouseleave.slick",a.proxy(b.interrupt,b,!1)),b.$slider.off("focus.slick blur.slick"),b.options.arrows===!0&&b.slideCount>b.options.slidesToShow&&(b.$prevArrow&&b.$prevArrow.off("click.slick",b.changeSlide),b.$nextArrow&&b.$nextArrow.off("click.slick",b.changeSlide)),b.$list.off("touchstart.slick mousedown.slick",b.swipeHandler),b.$list.off("touchmove.slick mousemove.slick",b.swipeHandler),b.$list.off("touchend.slick mouseup.slick",b.swipeHandler),b.$list.off("touchcancel.slick mouseleave.slick",b.swipeHandler),b.$list.off("click.slick",b.clickHandler),a(document).off(b.visibilityChange,b.visibility),b.cleanUpSlideEvents(),b.options.accessibility===!0&&b.$list.off("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().off("click.slick",b.selectHandler),a(window).off("orientationchange.slick.slick-"+b.instanceUid,b.orientationChange),a(window).off("resize.slick.slick-"+b.instanceUid,b.resize),a("[draggable!=true]",b.$slideTrack).off("dragstart",b.preventDefault),a(window).off("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).off("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.cleanUpSlideEvents=function(){var b=this;b.$list.off("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.off("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.cleanUpRows=function(){var b,a=this;a.options.rows>1&&(b=a.$slides.children().children(),b.removeAttr("style"),a.$slider.empty().append(b))},b.prototype.clickHandler=function(a){var b=this;b.shouldClick===!1&&(a.stopImmediatePropagation(),a.stopPropagation(),a.preventDefault())},b.prototype.destroy=function(b){var c=this;c.autoPlayClear(),c.touchObject={},c.cleanUpEvents(),a(".slick-cloned",c.$slider).detach(),c.$dots&&c.$dots.remove(),c.$prevArrow&&c.$prevArrow.length&&(c.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.prevArrow)&&c.$prevArrow.remove()),c.$nextArrow&&c.$nextArrow.length&&(c.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.nextArrow)&&c.$nextArrow.remove()),c.$slides&&(c.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){a(this).attr("style",a(this).data("originalStyling"))}),c.$slideTrack.children(this.options.slide).detach(),c.$slideTrack.detach(),c.$list.detach(),c.$slider.append(c.$slides)),c.cleanUpRows(),c.$slider.removeClass("slick-slider"),c.$slider.removeClass("slick-initialized"),c.$slider.removeClass("slick-dotted"),c.unslicked=!0,b||c.$slider.trigger("destroy",[c])},b.prototype.disableTransition=function(a){var b=this,c={};c[b.transitionType]="",b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.fadeSlide=function(a,b){var c=this;c.cssTransitions===!1?(c.$slides.eq(a).css({zIndex:c.options.zIndex}),c.$slides.eq(a).animate({opacity:1},c.options.speed,c.options.easing,b)):(c.applyTransition(a),c.$slides.eq(a).css({opacity:1,zIndex:c.options.zIndex}),b&&setTimeout(function(){c.disableTransition(a),b.call()},c.options.speed))},b.prototype.fadeSlideOut=function(a){var b=this;b.cssTransitions===!1?b.$slides.eq(a).animate({opacity:0,zIndex:b.options.zIndex-2},b.options.speed,b.options.easing):(b.applyTransition(a),b.$slides.eq(a).css({opacity:0,zIndex:b.options.zIndex-2}))},b.prototype.filterSlides=b.prototype.slickFilter=function(a){var b=this;null!==a&&(b.$slidesCache=b.$slides,b.unload(),b.$slideTrack.children(this.options.slide).detach(),b.$slidesCache.filter(a).appendTo(b.$slideTrack),b.reinit())},b.prototype.focusHandler=function(){var b=this;b.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*:not(.slick-arrow)",function(c){c.stopImmediatePropagation();var d=a(this);setTimeout(function(){b.options.pauseOnFocus&&(b.focussed=d.is(":focus"),b.autoPlay())},0)})},b.prototype.getCurrent=b.prototype.slickCurrentSlide=function(){var a=this;return a.currentSlide},b.prototype.getDotCount=function(){var a=this,b=0,c=0,d=0;if(a.options.infinite===!0)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else if(a.options.centerMode===!0)d=a.slideCount;else if(a.options.asNavFor)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else d=1+Math.ceil((a.slideCount-a.options.slidesToShow)/a.options.slidesToScroll);return d-1},b.prototype.getLeft=function(a){var c,d,f,b=this,e=0;return b.slideOffset=0,d=b.$slides.first().outerHeight(!0),b.options.infinite===!0?(b.slideCount>b.options.slidesToShow&&(b.slideOffset=b.slideWidth*b.options.slidesToShow*-1,e=d*b.options.slidesToShow*-1),b.slideCount%b.options.slidesToScroll!==0&&a+b.options.slidesToScroll>b.slideCount&&b.slideCount>b.options.slidesToShow&&(a>b.slideCount?(b.slideOffset=(b.options.slidesToShow-(a-b.slideCount))*b.slideWidth*-1,e=(b.options.slidesToShow-(a-b.slideCount))*d*-1):(b.slideOffset=b.slideCount%b.options.slidesToScroll*b.slideWidth*-1,e=b.slideCount%b.options.slidesToScroll*d*-1))):a+b.options.slidesToShow>b.slideCount&&(b.slideOffset=(a+b.options.slidesToShow-b.slideCount)*b.slideWidth,e=(a+b.options.slidesToShow-b.slideCount)*d),b.slideCount<=b.options.slidesToShow&&(b.slideOffset=0,e=0),b.options.centerMode===!0&&b.options.infinite===!0?b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)-b.slideWidth:b.options.centerMode===!0&&(b.slideOffset=0,b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)),c=b.options.vertical===!1?a*b.slideWidth*-1+b.slideOffset:a*d*-1+e,b.options.variableWidth===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,b.options.centerMode===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow+1),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,c+=(b.$list.width()-f.outerWidth())/2)),c},b.prototype.getOption=b.prototype.slickGetOption=function(a){var b=this;return b.options[a]},b.prototype.getNavigableIndexes=function(){var e,a=this,b=0,c=0,d=[];for(a.options.infinite===!1?e=a.slideCount:(b=-1*a.options.slidesToScroll,c=-1*a.options.slidesToScroll,e=2*a.slideCount);e>b;)d.push(b),b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;return d},b.prototype.getSlick=function(){return this},b.prototype.getSlideCount=function(){var c,d,e,b=this;return e=b.options.centerMode===!0?b.slideWidth*Math.floor(b.options.slidesToShow/2):0,b.options.swipeToSlide===!0?(b.$slideTrack.find(".slick-slide").each(function(c,f){return f.offsetLeft-e+a(f).outerWidth()/2>-1*b.swipeLeft?(d=f,!1):void 0}),c=Math.abs(a(d).attr("data-slick-index")-b.currentSlide)||1):b.options.slidesToScroll},b.prototype.goTo=b.prototype.slickGoTo=function(a,b){var c=this;c.changeSlide({data:{message:"index",index:parseInt(a)}},b)},b.prototype.init=function(b){var c=this;a(c.$slider).hasClass("slick-initialized")||(a(c.$slider).addClass("slick-initialized"),c.buildRows(),c.buildOut(),c.setProps(),c.startLoad(),c.loadSlider(),c.initializeEvents(),c.updateArrows(),c.updateDots(),c.checkResponsive(!0),c.focusHandler()),b&&c.$slider.trigger("init",[c]),c.options.accessibility===!0&&c.initADA(),c.options.autoplay&&(c.paused=!1,c.autoPlay())},b.prototype.initADA=function(){var b=this;b.$slides.add(b.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),b.$slideTrack.attr("role","listbox"),b.$slides.not(b.$slideTrack.find(".slick-cloned")).each(function(c){a(this).attr({role:"option","aria-describedby":"slick-slide"+b.instanceUid+c})}),null!==b.$dots&&b.$dots.attr("role","tablist").find("li").each(function(c){a(this).attr({role:"presentation","aria-selected":"false","aria-controls":"navigation"+b.instanceUid+c,id:"slick-slide"+b.instanceUid+c})}).first().attr("aria-selected","true").end().find("button").attr("role","button").end().closest("div").attr("role","toolbar"),b.activateADA()},b.prototype.initArrowEvents=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},a.changeSlide),a.$nextArrow.off("click.slick").on("click.slick",{message:"next"},a.changeSlide))},b.prototype.initDotEvents=function(){var b=this;b.options.dots===!0&&b.slideCount>b.options.slidesToShow&&a("li",b.$dots).on("click.slick",{message:"index"},b.changeSlide),b.options.dots===!0&&b.options.pauseOnDotsHover===!0&&a("li",b.$dots).on("mouseenter.slick",a.proxy(b.interrupt,b,!0)).on("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.initSlideEvents=function(){var b=this;b.options.pauseOnHover&&(b.$list.on("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.on("mouseleave.slick",a.proxy(b.interrupt,b,!1)))},b.prototype.initializeEvents=function(){var b=this;b.initArrowEvents(),b.initDotEvents(),b.initSlideEvents(),b.$list.on("touchstart.slick mousedown.slick",{action:"start"},b.swipeHandler),b.$list.on("touchmove.slick mousemove.slick",{action:"move"},b.swipeHandler),b.$list.on("touchend.slick mouseup.slick",{action:"end"},b.swipeHandler),b.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},b.swipeHandler),b.$list.on("click.slick",b.clickHandler),a(document).on(b.visibilityChange,a.proxy(b.visibility,b)),b.options.accessibility===!0&&b.$list.on("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),a(window).on("orientationchange.slick.slick-"+b.instanceUid,a.proxy(b.orientationChange,b)),a(window).on("resize.slick.slick-"+b.instanceUid,a.proxy(b.resize,b)),a("[draggable!=true]",b.$slideTrack).on("dragstart",b.preventDefault),a(window).on("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).on("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.initUI=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.show(),a.$nextArrow.show()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.show()},b.prototype.keyHandler=function(a){var b=this;a.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===a.keyCode&&b.options.accessibility===!0?b.changeSlide({data:{message:b.options.rtl===!0?"next":"previous"}}):39===a.keyCode&&b.options.accessibility===!0&&b.changeSlide({data:{message:b.options.rtl===!0?"previous":"next"}}))},b.prototype.lazyLoad=function(){function g(c){a("img[data-lazy]",c).each(function(){var c=a(this),d=a(this).attr("data-lazy"),e=document.createElement("img");e.onload=function(){c.animate({opacity:0},100,function(){c.attr("src",d).animate({opacity:1},200,function(){c.removeAttr("data-lazy").removeClass("slick-loading")}),b.$slider.trigger("lazyLoaded",[b,c,d])})},e.onerror=function(){c.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),b.$slider.trigger("lazyLoadError",[b,c,d])},e.src=d})}var c,d,e,f,b=this;b.options.centerMode===!0?b.options.infinite===!0?(e=b.currentSlide+(b.options.slidesToShow/2+1),f=e+b.options.slidesToShow+2):(e=Math.max(0,b.currentSlide-(b.options.slidesToShow/2+1)),f=2+(b.options.slidesToShow/2+1)+b.currentSlide):(e=b.options.infinite?b.options.slidesToShow+b.currentSlide:b.currentSlide,f=Math.ceil(e+b.options.slidesToShow),b.options.fade===!0&&(e>0&&e--,f<=b.slideCount&&f++)),c=b.$slider.find(".slick-slide").slice(e,f),g(c),b.slideCount<=b.options.slidesToShow?(d=b.$slider.find(".slick-slide"),g(d)):b.currentSlide>=b.slideCount-b.options.slidesToShow?(d=b.$slider.find(".slick-cloned").slice(0,b.options.slidesToShow),g(d)):0===b.currentSlide&&(d=b.$slider.find(".slick-cloned").slice(-1*b.options.slidesToShow),g(d))},b.prototype.loadSlider=function(){var a=this;a.setPosition(),a.$slideTrack.css({opacity:1}),a.$slider.removeClass("slick-loading"),a.initUI(),"progressive"===a.options.lazyLoad&&a.progressiveLazyLoad()},b.prototype.next=b.prototype.slickNext=function(){var a=this;a.changeSlide({data:{message:"next"}})},b.prototype.orientationChange=function(){var a=this;a.checkResponsive(),a.setPosition()},b.prototype.pause=b.prototype.slickPause=function(){var a=this;a.autoPlayClear(),a.paused=!0},b.prototype.play=b.prototype.slickPlay=function(){var a=this;a.autoPlay(),a.options.autoplay=!0,a.paused=!1,a.focussed=!1,a.interrupted=!1},b.prototype.postSlide=function(a){var b=this;b.unslicked||(b.$slider.trigger("afterChange",[b,a]),b.animating=!1,b.setPosition(),b.swipeLeft=null,b.options.autoplay&&b.autoPlay(),b.options.accessibility===!0&&b.initADA())},b.prototype.prev=b.prototype.slickPrev=function(){var a=this;a.changeSlide({data:{message:"previous"}})},b.prototype.preventDefault=function(a){a.preventDefault()},b.prototype.progressiveLazyLoad=function(b){b=b||1;var e,f,g,c=this,d=a("img[data-lazy]",c.$slider);d.length?(e=d.first(),f=e.attr("data-lazy"),g=document.createElement("img"),g.onload=function(){e.attr("src",f).removeAttr("data-lazy").removeClass("slick-loading"),c.options.adaptiveHeight===!0&&c.setPosition(),c.$slider.trigger("lazyLoaded",[c,e,f]),c.progressiveLazyLoad()},g.onerror=function(){3>b?setTimeout(function(){c.progressiveLazyLoad(b+1)},500):(e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),c.$slider.trigger("lazyLoadError",[c,e,f]),c.progressiveLazyLoad())},g.src=f):c.$slider.trigger("allImagesLoaded",[c])},b.prototype.refresh=function(b){var d,e,c=this;e=c.slideCount-c.options.slidesToShow,!c.options.infinite&&c.currentSlide>e&&(c.currentSlide=e),c.slideCount<=c.options.slidesToShow&&(c.currentSlide=0),d=c.currentSlide,c.destroy(!0),a.extend(c,c.initials,{currentSlide:d}),c.init(),b||c.changeSlide({data:{message:"index",index:d}},!1)},b.prototype.registerBreakpoints=function(){var c,d,e,b=this,f=b.options.responsive||null;if("array"===a.type(f)&&f.length){b.respondTo=b.options.respondTo||"window";for(c in f)if(e=b.breakpoints.length-1,d=f[c].breakpoint,f.hasOwnProperty(c)){for(;e>=0;)b.breakpoints[e]&&b.breakpoints[e]===d&&b.breakpoints.splice(e,1),e--;b.breakpoints.push(d),b.breakpointSettings[d]=f[c].settings}b.breakpoints.sort(function(a,c){return b.options.mobileFirst?a-c:c-a})}},b.prototype.reinit=function(){var b=this;b.$slides=b.$slideTrack.children(b.options.slide).addClass("slick-slide"),b.slideCount=b.$slides.length,b.currentSlide>=b.slideCount&&0!==b.currentSlide&&(b.currentSlide=b.currentSlide-b.options.slidesToScroll),b.slideCount<=b.options.slidesToShow&&(b.currentSlide=0),b.registerBreakpoints(),b.setProps(),b.setupInfinite(),b.buildArrows(),b.updateArrows(),b.initArrowEvents(),b.buildDots(),b.updateDots(),b.initDotEvents(),b.cleanUpSlideEvents(),b.initSlideEvents(),b.checkResponsive(!1,!0),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.setPosition(),b.focusHandler(),b.paused=!b.options.autoplay,b.autoPlay(),b.$slider.trigger("reInit",[b])},b.prototype.resize=function(){var b=this;a(window).width()!==b.windowWidth&&(clearTimeout(b.windowDelay),b.windowDelay=window.setTimeout(function(){b.windowWidth=a(window).width(),b.checkResponsive(),b.unslicked||b.setPosition()},50))},b.prototype.removeSlide=b.prototype.slickRemove=function(a,b,c){var d=this;return"boolean"==typeof a?(b=a,a=b===!0?0:d.slideCount-1):a=b===!0?--a:a,d.slideCount<1||0>a||a>d.slideCount-1?!1:(d.unload(),c===!0?d.$slideTrack.children().remove():d.$slideTrack.children(this.options.slide).eq(a).remove(),d.$slides=d.$slideTrack.children(this.options.slide),d.$slideTrack.children(this.options.slide).detach(),d.$slideTrack.append(d.$slides),d.$slidesCache=d.$slides,void d.reinit())},b.prototype.setCSS=function(a){var d,e,b=this,c={};b.options.rtl===!0&&(a=-a),d="left"==b.positionProp?Math.ceil(a)+"px":"0px",e="top"==b.positionProp?Math.ceil(a)+"px":"0px",c[b.positionProp]=a,b.transformsEnabled===!1?b.$slideTrack.css(c):(c={},b.cssTransitions===!1?(c[b.animType]="translate("+d+", "+e+")",b.$slideTrack.css(c)):(c[b.animType]="translate3d("+d+", "+e+", 0px)",b.$slideTrack.css(c)))},b.prototype.setDimensions=function(){var a=this;a.options.vertical===!1?a.options.centerMode===!0&&a.$list.css({padding:"0px "+a.options.centerPadding}):(a.$list.height(a.$slides.first().outerHeight(!0)*a.options.slidesToShow),a.options.centerMode===!0&&a.$list.css({padding:a.options.centerPadding+" 0px"})),a.listWidth=a.$list.width(),a.listHeight=a.$list.height(),a.options.vertical===!1&&a.options.variableWidth===!1?(a.slideWidth=Math.ceil(a.listWidth/a.options.slidesToShow),a.$slideTrack.width(Math.ceil(a.slideWidth*a.$slideTrack.children(".slick-slide").length))):a.options.variableWidth===!0?a.$slideTrack.width(5e3*a.slideCount):(a.slideWidth=Math.ceil(a.listWidth),a.$slideTrack.height(Math.ceil(a.$slides.first().outerHeight(!0)*a.$slideTrack.children(".slick-slide").length)));var b=a.$slides.first().outerWidth(!0)-a.$slides.first().width();a.options.variableWidth===!1&&a.$slideTrack.children(".slick-slide").width(a.slideWidth-b)},b.prototype.setFade=function(){var c,b=this;b.$slides.each(function(d,e){c=b.slideWidth*d*-1,b.options.rtl===!0?a(e).css({position:"relative",right:c,top:0,zIndex:b.options.zIndex-2,opacity:0}):a(e).css({position:"relative",left:c,top:0,zIndex:b.options.zIndex-2,opacity:0})}),b.$slides.eq(b.currentSlide).css({zIndex:b.options.zIndex-1,opacity:1})},b.prototype.setHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.css("height",b)}},b.prototype.setOption=b.prototype.slickSetOption=function(){var c,d,e,f,h,b=this,g=!1;if("object"===a.type(arguments[0])?(e=arguments[0],g=arguments[1],h="multiple"):"string"===a.type(arguments[0])&&(e=arguments[0],f=arguments[1],g=arguments[2],"responsive"===arguments[0]&&"array"===a.type(arguments[1])?h="responsive":"undefined"!=typeof arguments[1]&&(h="single")),"single"===h)b.options[e]=f;else if("multiple"===h)a.each(e,function(a,c){b.options[a]=c});else if("responsive"===h)for(d in f)if("array"!==a.type(b.options.responsive))b.options.responsive=[f[d]];else{for(c=b.options.responsive.length-1;c>=0;)b.options.responsive[c].breakpoint===f[d].breakpoint&&b.options.responsive.splice(c,1),c--;b.options.responsive.push(f[d])}g&&(b.unload(),b.reinit())},b.prototype.setPosition=function(){var a=this;a.setDimensions(),a.setHeight(),a.options.fade===!1?a.setCSS(a.getLeft(a.currentSlide)):a.setFade(),a.$slider.trigger("setPosition",[a])},b.prototype.setProps=function(){var a=this,b=document.body.style;a.positionProp=a.options.vertical===!0?"top":"left","top"===a.positionProp?a.$slider.addClass("slick-vertical"):a.$slider.removeClass("slick-vertical"),(void 0!==b.WebkitTransition||void 0!==b.MozTransition||void 0!==b.msTransition)&&a.options.useCSS===!0&&(a.cssTransitions=!0),a.options.fade&&("number"==typeof a.options.zIndex?a.options.zIndex<3&&(a.options.zIndex=3):a.options.zIndex=a.defaults.zIndex),void 0!==b.OTransform&&(a.animType="OTransform",a.transformType="-o-transform",a.transitionType="OTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.MozTransform&&(a.animType="MozTransform",a.transformType="-moz-transform",a.transitionType="MozTransition",void 0===b.perspectiveProperty&&void 0===b.MozPerspective&&(a.animType=!1)),void 0!==b.webkitTransform&&(a.animType="webkitTransform",a.transformType="-webkit-transform",a.transitionType="webkitTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.msTransform&&(a.animType="msTransform",a.transformType="-ms-transform",a.transitionType="msTransition",void 0===b.msTransform&&(a.animType=!1)),void 0!==b.transform&&a.animType!==!1&&(a.animType="transform",a.transformType="transform",a.transitionType="transition"),a.transformsEnabled=a.options.useTransform&&null!==a.animType&&a.animType!==!1},b.prototype.setSlideClasses=function(a){var c,d,e,f,b=this;d=b.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),b.$slides.eq(a).addClass("slick-current"),b.options.centerMode===!0?(c=Math.floor(b.options.slidesToShow/2),b.options.infinite===!0&&(a>=c&&a<=b.slideCount-1-c?b.$slides.slice(a-c,a+c+1).addClass("slick-active").attr("aria-hidden","false"):(e=b.options.slidesToShow+a,
18
- d.slice(e-c+1,e+c+2).addClass("slick-active").attr("aria-hidden","false")),0===a?d.eq(d.length-1-b.options.slidesToShow).addClass("slick-center"):a===b.slideCount-1&&d.eq(b.options.slidesToShow).addClass("slick-center")),b.$slides.eq(a).addClass("slick-center")):a>=0&&a<=b.slideCount-b.options.slidesToShow?b.$slides.slice(a,a+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):d.length<=b.options.slidesToShow?d.addClass("slick-active").attr("aria-hidden","false"):(f=b.slideCount%b.options.slidesToShow,e=b.options.infinite===!0?b.options.slidesToShow+a:a,b.options.slidesToShow==b.options.slidesToScroll&&b.slideCount-a<b.options.slidesToShow?d.slice(e-(b.options.slidesToShow-f),e+f).addClass("slick-active").attr("aria-hidden","false"):d.slice(e,e+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false")),"ondemand"===b.options.lazyLoad&&b.lazyLoad()},b.prototype.setupInfinite=function(){var c,d,e,b=this;if(b.options.fade===!0&&(b.options.centerMode=!1),b.options.infinite===!0&&b.options.fade===!1&&(d=null,b.slideCount>b.options.slidesToShow)){for(e=b.options.centerMode===!0?b.options.slidesToShow+1:b.options.slidesToShow,c=b.slideCount;c>b.slideCount-e;c-=1)d=c-1,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d-b.slideCount).prependTo(b.$slideTrack).addClass("slick-cloned");for(c=0;e>c;c+=1)d=c,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d+b.slideCount).appendTo(b.$slideTrack).addClass("slick-cloned");b.$slideTrack.find(".slick-cloned").find("[id]").each(function(){a(this).attr("id","")})}},b.prototype.interrupt=function(a){var b=this;a||b.autoPlay(),b.interrupted=a},b.prototype.selectHandler=function(b){var c=this,d=a(b.target).is(".slick-slide")?a(b.target):a(b.target).parents(".slick-slide"),e=parseInt(d.attr("data-slick-index"));return e||(e=0),c.slideCount<=c.options.slidesToShow?(c.setSlideClasses(e),void c.asNavFor(e)):void c.slideHandler(e)},b.prototype.slideHandler=function(a,b,c){var d,e,f,g,j,h=null,i=this;return b=b||!1,i.animating===!0&&i.options.waitForAnimate===!0||i.options.fade===!0&&i.currentSlide===a||i.slideCount<=i.options.slidesToShow?void 0:(b===!1&&i.asNavFor(a),d=a,h=i.getLeft(d),g=i.getLeft(i.currentSlide),i.currentLeft=null===i.swipeLeft?g:i.swipeLeft,i.options.infinite===!1&&i.options.centerMode===!1&&(0>a||a>i.getDotCount()*i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):i.options.infinite===!1&&i.options.centerMode===!0&&(0>a||a>i.slideCount-i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):(i.options.autoplay&&clearInterval(i.autoPlayTimer),e=0>d?i.slideCount%i.options.slidesToScroll!==0?i.slideCount-i.slideCount%i.options.slidesToScroll:i.slideCount+d:d>=i.slideCount?i.slideCount%i.options.slidesToScroll!==0?0:d-i.slideCount:d,i.animating=!0,i.$slider.trigger("beforeChange",[i,i.currentSlide,e]),f=i.currentSlide,i.currentSlide=e,i.setSlideClasses(i.currentSlide),i.options.asNavFor&&(j=i.getNavTarget(),j=j.slick("getSlick"),j.slideCount<=j.options.slidesToShow&&j.setSlideClasses(i.currentSlide)),i.updateDots(),i.updateArrows(),i.options.fade===!0?(c!==!0?(i.fadeSlideOut(f),i.fadeSlide(e,function(){i.postSlide(e)})):i.postSlide(e),void i.animateHeight()):void(c!==!0?i.animateSlide(h,function(){i.postSlide(e)}):i.postSlide(e))))},b.prototype.startLoad=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.hide(),a.$nextArrow.hide()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.hide(),a.$slider.addClass("slick-loading")},b.prototype.swipeDirection=function(){var a,b,c,d,e=this;return a=e.touchObject.startX-e.touchObject.curX,b=e.touchObject.startY-e.touchObject.curY,c=Math.atan2(b,a),d=Math.round(180*c/Math.PI),0>d&&(d=360-Math.abs(d)),45>=d&&d>=0?e.options.rtl===!1?"left":"right":360>=d&&d>=315?e.options.rtl===!1?"left":"right":d>=135&&225>=d?e.options.rtl===!1?"right":"left":e.options.verticalSwiping===!0?d>=35&&135>=d?"down":"up":"vertical"},b.prototype.swipeEnd=function(a){var c,d,b=this;if(b.dragging=!1,b.interrupted=!1,b.shouldClick=b.touchObject.swipeLength>10?!1:!0,void 0===b.touchObject.curX)return!1;if(b.touchObject.edgeHit===!0&&b.$slider.trigger("edge",[b,b.swipeDirection()]),b.touchObject.swipeLength>=b.touchObject.minSwipe){switch(d=b.swipeDirection()){case"left":case"down":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide+b.getSlideCount()):b.currentSlide+b.getSlideCount(),b.currentDirection=0;break;case"right":case"up":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide-b.getSlideCount()):b.currentSlide-b.getSlideCount(),b.currentDirection=1}"vertical"!=d&&(b.slideHandler(c),b.touchObject={},b.$slider.trigger("swipe",[b,d]))}else b.touchObject.startX!==b.touchObject.curX&&(b.slideHandler(b.currentSlide),b.touchObject={})},b.prototype.swipeHandler=function(a){var b=this;if(!(b.options.swipe===!1||"ontouchend"in document&&b.options.swipe===!1||b.options.draggable===!1&&-1!==a.type.indexOf("mouse")))switch(b.touchObject.fingerCount=a.originalEvent&&void 0!==a.originalEvent.touches?a.originalEvent.touches.length:1,b.touchObject.minSwipe=b.listWidth/b.options.touchThreshold,b.options.verticalSwiping===!0&&(b.touchObject.minSwipe=b.listHeight/b.options.touchThreshold),a.data.action){case"start":b.swipeStart(a);break;case"move":b.swipeMove(a);break;case"end":b.swipeEnd(a)}},b.prototype.swipeMove=function(a){var d,e,f,g,h,b=this;return h=void 0!==a.originalEvent?a.originalEvent.touches:null,!b.dragging||h&&1!==h.length?!1:(d=b.getLeft(b.currentSlide),b.touchObject.curX=void 0!==h?h[0].pageX:a.clientX,b.touchObject.curY=void 0!==h?h[0].pageY:a.clientY,b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curX-b.touchObject.startX,2))),b.options.verticalSwiping===!0&&(b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curY-b.touchObject.startY,2)))),e=b.swipeDirection(),"vertical"!==e?(void 0!==a.originalEvent&&b.touchObject.swipeLength>4&&a.preventDefault(),g=(b.options.rtl===!1?1:-1)*(b.touchObject.curX>b.touchObject.startX?1:-1),b.options.verticalSwiping===!0&&(g=b.touchObject.curY>b.touchObject.startY?1:-1),f=b.touchObject.swipeLength,b.touchObject.edgeHit=!1,b.options.infinite===!1&&(0===b.currentSlide&&"right"===e||b.currentSlide>=b.getDotCount()&&"left"===e)&&(f=b.touchObject.swipeLength*b.options.edgeFriction,b.touchObject.edgeHit=!0),b.options.vertical===!1?b.swipeLeft=d+f*g:b.swipeLeft=d+f*(b.$list.height()/b.listWidth)*g,b.options.verticalSwiping===!0&&(b.swipeLeft=d+f*g),b.options.fade===!0||b.options.touchMove===!1?!1:b.animating===!0?(b.swipeLeft=null,!1):void b.setCSS(b.swipeLeft)):void 0)},b.prototype.swipeStart=function(a){var c,b=this;return b.interrupted=!0,1!==b.touchObject.fingerCount||b.slideCount<=b.options.slidesToShow?(b.touchObject={},!1):(void 0!==a.originalEvent&&void 0!==a.originalEvent.touches&&(c=a.originalEvent.touches[0]),b.touchObject.startX=b.touchObject.curX=void 0!==c?c.pageX:a.clientX,b.touchObject.startY=b.touchObject.curY=void 0!==c?c.pageY:a.clientY,void(b.dragging=!0))},b.prototype.unfilterSlides=b.prototype.slickUnfilter=function(){var a=this;null!==a.$slidesCache&&(a.unload(),a.$slideTrack.children(this.options.slide).detach(),a.$slidesCache.appendTo(a.$slideTrack),a.reinit())},b.prototype.unload=function(){var b=this;a(".slick-cloned",b.$slider).remove(),b.$dots&&b.$dots.remove(),b.$prevArrow&&b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.remove(),b.$nextArrow&&b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.remove(),b.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},b.prototype.unslick=function(a){var b=this;b.$slider.trigger("unslick",[b,a]),b.destroy()},b.prototype.updateArrows=function(){var b,a=this;b=Math.floor(a.options.slidesToShow/2),a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&!a.options.infinite&&(a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===a.currentSlide?(a.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-a.options.slidesToShow&&a.options.centerMode===!1?(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-1&&a.options.centerMode===!0&&(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},b.prototype.updateDots=function(){var a=this;null!==a.$dots&&(a.$dots.find("li").removeClass("slick-active").attr("aria-hidden","true"),a.$dots.find("li").eq(Math.floor(a.currentSlide/a.options.slidesToScroll)).addClass("slick-active").attr("aria-hidden","false"))},b.prototype.visibility=function(){var a=this;a.options.autoplay&&(document[a.hidden]?a.interrupted=!0:a.interrupted=!1)},a.fn.slick=function(){var f,g,a=this,c=arguments[0],d=Array.prototype.slice.call(arguments,1),e=a.length;for(f=0;e>f;f++)if("object"==typeof c||"undefined"==typeof c?a[f].slick=new b(a[f],c):g=a[f].slick[c].apply(a[f].slick,d),"undefined"!=typeof g)return g;return a}});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/functions.php DELETED
@@ -1,7 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Include files
5
- */
6
- require_once( SP_WP_CAROUSEL_FREE_DIR . 'inc/shortcodes.php' );
7
- require_once( SP_WP_CAROUSEL_FREE_DIR . 'inc/scripts.php' );
 
 
 
 
 
 
 
inc/scripts.php DELETED
@@ -1,57 +0,0 @@
1
- <?php
2
- if ( ! defined( 'ABSPATH' ) ) {
3
- exit;
4
- } // if direct access
5
-
6
- /**
7
- * Scripts and styles
8
- */
9
- class SP_WCF_Scripts_AND_Style{
10
-
11
- /**
12
- * Script version number
13
- */
14
- protected $version;
15
-
16
- /**
17
- * Initialize the class
18
- */
19
- public function __construct() {
20
- $this->version = '20170501';
21
-
22
- add_action( 'wp_enqueue_scripts', array( $this, 'sp_wp_carousel_free_script' ) );
23
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
24
- }
25
-
26
- /**
27
- * Front Scripts
28
- */
29
- public function sp_wp_carousel_free_script() {
30
- // CSS Files
31
- wp_enqueue_style( 'slick', SP_WP_CAROUSEL_FREE_URL . 'assets/css/slick.css', false, $this->version );
32
- wp_enqueue_style( 'font-awesome', SP_WP_CAROUSEL_FREE_URL . 'assets/css/font-awesome.min.css', false, $this->version );
33
- wp_enqueue_style( 'wp-carousel-free-style', SP_WP_CAROUSEL_FREE_URL . 'assets/css/style.css', false, $this->version );
34
-
35
- //JS Files
36
- wp_enqueue_script( 'slick-main', SP_WP_CAROUSEL_FREE_URL . 'assets/js/slick.min.js', array( 'jquery' ), $this->version, true );
37
- }
38
-
39
- /**
40
- * Admin Scripts
41
- */
42
- public function admin_scripts() {
43
-
44
- if ( 'options-general.php?page=about-wp-carousel' ) {
45
- //CSS Files
46
- wp_enqueue_style( 'font-awesome', SP_WP_CAROUSEL_FREE_URL . 'assets/css/font-awesome.min.css', false, $this->version );
47
- wp_enqueue_style( 'sp-wp-carousel-admin-style', SP_WP_CAROUSEL_FREE_URL . 'assets/css/admin.css', false, $this->version );
48
-
49
- //JS Files
50
- wp_enqueue_script( 'jquery-masonry');
51
- wp_enqueue_script( 'sp-wp-carousel-admin-js', SP_WP_CAROUSEL_FREE_URL . 'assets/js/admin.js', array( 'jquery' ), $this->version, true );
52
- }
53
- }
54
-
55
-
56
- }
57
- new SP_WCF_Scripts_AND_Style();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/shortcodes.php DELETED
@@ -1,199 +0,0 @@
1
- <?php
2
- // Registering shortcode
3
- function wp_carousel_free_shortcode( $attr ) {
4
- $post = get_post();
5
-
6
- static $instance = 0;
7
- $instance ++;
8
-
9
- if ( ! empty( $attr['ids'] ) ) {
10
- if ( empty( $attr['orderby'] ) ) {
11
- $attr['orderby'] = 'post__in';
12
- }
13
- $attr['include'] = $attr['ids'];
14
- }
15
-
16
- $output = apply_filters( 'sp_wcfgallery_shortcode', '', $attr );
17
- if ( $output != '' ) {
18
- return $output;
19
- }
20
-
21
- if ( isset( $attr['orderby'] ) ) {
22
- $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
23
- if ( ! $attr['orderby'] ) {
24
- unset( $attr['orderby'] );
25
- }
26
- }
27
-
28
- extract( shortcode_atts( array(
29
- 'ids' => '',
30
- 'items' => '5',
31
- 'items_desktop' => '4',
32
- 'items_desktop_small' => '3',
33
- 'items_tablet' => '2',
34
- 'items_mobile' => '1',
35
- 'bullets' => 'false',
36
- 'nav' => 'true',
37
- 'auto_play' => 'true',
38
- 'size' => 'medium',
39
- 'include' => '',
40
- 'exclude' => '',
41
- ), $attr, 'gallery' ) );
42
-
43
- // helper function to return shortcode regex match on instance occurring on page or post
44
- if ( ! function_exists( 'get_match' ) ) {
45
- function get_match( $regex, $content, $instance ) {
46
- preg_match_all( $regex, $content, $matches );
47
-
48
- return $matches[1][ $instance ];
49
- }
50
- }
51
-
52
- // Extract the shortcode arguments from the $page or $post
53
- $shortcode_args = shortcode_parse_atts( get_match( '/\[wcfgallery\s(.*)\]/isU', $post->post_content, $instance - 1 ) );
54
-
55
- // get the ids specified in the shortcode call
56
- if ( is_array( $ids ) ) {
57
- $ids = $shortcode_args["ids"];
58
- }
59
-
60
- $id = uniqid();
61
- $order = 'DESC';
62
- $orderby = 'title';
63
-
64
- if ( 'RAND' == $order ) {
65
- $orderby = 'none';
66
- }
67
-
68
- if ( ! empty( $ids ) ) {
69
- $_attachments = get_posts( array(
70
- 'include' => $ids,
71
- 'post_status' => 'inherit',
72
- 'post_type' => 'attachment',
73
- 'post_mime_type' => 'image',
74
- 'order' => $order,
75
- 'orderby' => $orderby
76
- ) );
77
-
78
- $attachments = array();
79
- foreach ( $_attachments as $key => $val ) {
80
- $attachments[ $val->ID ] = $_attachments[ $key ];
81
- }
82
- } elseif ( ! empty( $exclude ) ) {
83
- $attachments = get_children( array(
84
- 'post_parent' => $id,
85
- 'exclude' => $exclude,
86
- 'post_status' => 'inherit',
87
- 'post_type' => 'attachment',
88
- 'post_mime_type' => 'image',
89
- 'order' => $order,
90
- 'orderby' => $orderby
91
- ) );
92
- } else {
93
-
94
- }
95
-
96
- if ( empty( $attachments ) ) {
97
- return '';
98
- }
99
-
100
- if ( is_feed() ) {
101
- $output = "\n";
102
- foreach ( $attachments as $att_id => $attachment ) {
103
- $output .= wp_get_attachment_link( $att_id, $size, true ) . "\n";
104
- }
105
-
106
- return $output;
107
- }
108
-
109
- $gallery_style = $gallery_div = '';
110
-
111
- // Carousel Area Padding
112
- if ( $nav == 'true' ) {
113
- $carousel_area_padding = '0 15px';
114
- } else {
115
- $carousel_area_padding = '0';
116
- }
117
-
118
- // Bullet CSS
119
- if ( $bullets == 'true' ) {
120
- $the_nav_margin = '-40px';
121
- } else {
122
- $the_nav_margin = '-15px';
123
- }
124
-
125
- $gallery_div = "
126
- <style type='text/css'>
127
- div#wordpress-carousel-free-$id.wordpress-carousel-free-section .slick-prev,
128
- div#wordpress-carousel-free-$id.wordpress-carousel-free-section .slick-next{
129
- margin-top: $the_nav_margin;
130
- }
131
- </style>
132
-
133
- <script type='text/javascript'>
134
- jQuery(document).ready(function() {
135
- jQuery('#wordpress-carousel-free-$id').slick({
136
- infinite: true,
137
- slidesToShow: " . $items . ",
138
- slidesToScroll: 1,
139
- prevArrow: \"<div class='slick-prev'><i class='fa fa-angle-left'></i></div>\",
140
- nextArrow: \"<div class='slick-next'><i class='fa fa-angle-right'></i></div>\",
141
- dots: " . $bullets . ",
142
- arrows: " . $nav . ",
143
- autoplay: " . $auto_play . ",
144
- responsive: [
145
- {
146
- breakpoint: 1199,
147
- settings: {
148
- slidesToShow: " . $items_desktop . "
149
- }
150
- },
151
- {
152
- breakpoint: 979,
153
- settings: {
154
- slidesToShow: " . $items_desktop_small . "
155
- }
156
- },
157
- {
158
- breakpoint: 767,
159
- settings: {
160
- slidesToShow: " . $items_tablet . "
161
- }
162
- },
163
- {
164
- breakpoint: 479,
165
- settings: {
166
- slidesToShow: " . $items_mobile . "
167
- }
168
- }
169
- ]
170
- });
171
- });
172
- </script>
173
-
174
- <div id='wordpress-carousel-free-$id' class='wordpress-carousel-free-section' style='padding:$carousel_area_padding;'>";
175
-
176
- $output = apply_filters( 'gallery_style', $gallery_style . $gallery_div );
177
-
178
- foreach ( $attachments as $attach_id => $attachment ) {
179
-
180
- $wcf_image_url = wp_get_attachment_image_src( $attach_id, $size, false );
181
-
182
- $wcf_image_title = $attachment->post_title;
183
-
184
-
185
- $output .= "
186
- <div class='single_wcf_item'>
187
- <img src='$wcf_image_url[0]' alt='$wcf_image_title' />
188
- </div>
189
- ";
190
-
191
- }
192
-
193
- $output .= "
194
- </div>\n";
195
-
196
- return $output;
197
- }
198
-
199
- add_shortcode( 'wcfgallery', 'wp_carousel_free_shortcode' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-wp-carousel-free-i18n.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Define the internationalization functionality
4
+ *
5
+ * Loads and defines the internationalization files for this plugin
6
+ * so that it is ready for translation.
7
+ *
8
+ * @link https://shapedplugin.com/
9
+ * @since 2.0.0
10
+ *
11
+ * @package WP_Carousel_Free
12
+ * @subpackage WP_Carousel_Free/includes
13
+ */
14
+
15
+ /**
16
+ * WP_Carousel_Free_I18n define the internationalization functionality.
17
+ *
18
+ * @since 2.0.0
19
+ * @author ShapedPlugin <shapedplugin@gmail.com>
20
+ */
21
+ class WP_Carousel_Free_I18n {
22
+
23
+
24
+ /**
25
+ * Load the plugin text domain for translation.
26
+ *
27
+ * @since 2.0.0
28
+ */
29
+ public function load_plugin_textdomain() {
30
+
31
+ load_plugin_textdomain(
32
+ 'wp-carousel-free',
33
+ false,
34
+ dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/'
35
+ );
36
+
37
+ }
38
+
39
+
40
+
41
+ }
includes/class-wp-carousel-free-loader.php ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Register all actions and filters for the plugin
4
+ *
5
+ * @link https://shapedplugin.com/
6
+ * @since 3.0.0
7
+ *
8
+ * @package WP_Carousel_Free
9
+ * @subpackage WP_Carousel_Free/includes
10
+ */
11
+
12
+ /**
13
+ * Register all actions and filters for the plugin.
14
+ *
15
+ * Maintain a list of all hooks that are registered throughout
16
+ * the plugin, and register them with the WordPress API. Call the
17
+ * run function to execute the list of actions and filters.
18
+ *
19
+ * @package WP_Carousel_Free
20
+ * @subpackage WP _Carousel_Pro/includes
21
+ * @author ShapedPlugin <shapedplugin@gmail.com>
22
+ */
23
+ class WP_Carousel_Free_Loader {
24
+
25
+ /**
26
+ * The array of actions registered with WordPress.
27
+ *
28
+ * @since 2.0.0
29
+ * @access protected
30
+ * @var array $actions The actions registered with WordPress to fire when the plugin loads.
31
+ */
32
+ protected $actions;
33
+
34
+ /**
35
+ * The array of filters registered with WordPress.
36
+ *
37
+ * @since 2.0.0
38
+ * @access protected
39
+ * @var array $filters The filters registered with WordPress to fire when the plugin loads.
40
+ */
41
+ protected $filters;
42
+
43
+ /**
44
+ * The array of shortcode registered with WordPress.
45
+ *
46
+ * @since 2.0.0
47
+ * @access protected
48
+ * @var array $shortcodes The shortcodes registered with WordPress to add shortcode to the plugin.
49
+ */
50
+ protected $shortcodes;
51
+
52
+ /**
53
+ * Initialize the collections used to maintain the actions and filters.
54
+ *
55
+ * @since 2.0.0
56
+ */
57
+ public function __construct() {
58
+
59
+ $this->actions = array();
60
+ $this->filters = array();
61
+ $this->shortcodes = array();
62
+
63
+ }
64
+
65
+ /**
66
+ * Add a new action to the collection to be registered with WordPress.
67
+ *
68
+ * @since 2.0.0
69
+ * @param string $hook The name of the WordPress action that is being registered.
70
+ * @param object $component A reference to the instance of the object on which the action is defined.
71
+ * @param string $callback The name of the function definition on the $component.
72
+ * @param int $priority Optional. The priority at which the function should be fired. Default is 10.
73
+ * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
74
+ */
75
+ public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
76
+ $this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args );
77
+ }
78
+
79
+ /**
80
+ * Add a new filter to the collection to be registered with WordPress.
81
+ *
82
+ * @since 2.0.0
83
+ * @param string $hook The name of the WordPress filter that is being registered.
84
+ * @param object $component A reference to the instance of the object on which the filter is defined.
85
+ * @param string $callback The name of the function definition on the $component.
86
+ * @param int $priority Optional. The priority at which the function should be fired. Default is 10.
87
+ * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
88
+ */
89
+ public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
90
+ $this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args );
91
+ }
92
+
93
+ /**
94
+ * Add new shortcode to the collection to be registered with the WordPress.
95
+ *
96
+ * @since 2.0.0
97
+ * @param string $tag The name of the shortcode that is being registered.
98
+ * @param object $component The reference to the instance of the object on which the shortcode is defined.
99
+ * @param string $callback The name of the function definition on the $component.
100
+ * @param integer $priority Optional. The priority at which the function should be fired. Default is 10.
101
+ * @param integer $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
102
+ * @return void
103
+ */
104
+ public function add_shortcode( $tag, $component, $callback, $priority = 10, $accepted_args = 1 ) {
105
+ $this->shortcodes = $this->add( $this->shortcodes, $tag, $component, $callback, $priority, $accepted_args );
106
+ }
107
+
108
+ /**
109
+ * A utility function that is used to register the actions and hooks into a single
110
+ * collection.
111
+ *
112
+ * @since 2.0.0
113
+ * @access private
114
+ * @param array $hooks The collection of hooks that is being registered (that is, actions or filters).
115
+ * @param string $hook The name of the WordPress filter that is being registered.
116
+ * @param object $component A reference to the instance of the object on which the filter is defined.
117
+ * @param string $callback The name of the function definition on the $component.
118
+ * @param int $priority The priority at which the function should be fired.
119
+ * @param int $accepted_args The number of arguments that should be passed to the $callback.
120
+ * @return array The collection of actions and filters registered with WordPress.
121
+ */
122
+ private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) {
123
+
124
+ $hooks[] = array(
125
+ 'hook' => $hook,
126
+ 'component' => $component,
127
+ 'callback' => $callback,
128
+ 'priority' => $priority,
129
+ 'accepted_args' => $accepted_args,
130
+ );
131
+
132
+ return $hooks;
133
+
134
+ }
135
+
136
+ /**
137
+ * Register the filters and actions with WordPress.
138
+ *
139
+ * @since 2.0.0
140
+ */
141
+ public function run() {
142
+
143
+ foreach ( $this->filters as $hook ) {
144
+ add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
145
+ }
146
+
147
+ foreach ( $this->actions as $hook ) {
148
+ add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
149
+ }
150
+
151
+ foreach ( $this->shortcodes as $hook ) {
152
+ add_shortcode( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
153
+ }
154
+
155
+ }
156
+
157
+ }
includes/class-wp-carousel-free-post-types.php ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! defined( 'ABSPATH' ) ) {
3
+ exit; // Exit if accessed directly.
4
+ }
5
+ /**
6
+ * The file that defines the carousel post type.
7
+ *
8
+ * A class the that defines the carousel post type and make the plugins' menu.
9
+ *
10
+ * @link http://shapedplugin.com
11
+ * @since 2.0.0
12
+ *
13
+ * @package WordPress_Carousel_Pro
14
+ * @subpackage WordPress_Carousel_Pro/includes
15
+ */
16
+
17
+ /**
18
+ * Custom post class to register the carousel.
19
+ */
20
+ class WP_Carousel_Free_Post_Type {
21
+
22
+ /**
23
+ * The single instance of the class.
24
+ *
25
+ * @var self
26
+ * @since 2.0.0
27
+ */
28
+ private static $instance;
29
+
30
+ /**
31
+ * Path to the file.
32
+ *
33
+ * @since 2.0.0
34
+ *
35
+ * @var string
36
+ */
37
+ public $file = __FILE__;
38
+
39
+ /**
40
+ * Holds the base class object.
41
+ *
42
+ * @since 2.0.0
43
+ *
44
+ * @var object
45
+ */
46
+ public $base;
47
+
48
+ /**
49
+ * Allows for accessing single instance of class. Class should only be constructed once per call.
50
+ *
51
+ * @since 1.0.0
52
+ * @static
53
+ * @return self Main instance.
54
+ */
55
+ public static function instance() {
56
+ if ( is_null( self::$instance ) ) {
57
+ self::$instance = new self();
58
+ }
59
+ return self::$instance;
60
+ }
61
+
62
+ /**
63
+ * WordPress carousel post type
64
+ */
65
+ public function wp_carousel_post_type() {
66
+
67
+ if ( post_type_exists( 'sp_wp_carousel' ) ) {
68
+ return;
69
+ }
70
+
71
+ // Set the WordPress carousel post type labels.
72
+ $labels = apply_filters(
73
+ 'sp_wp_carousel_post_type_labels',
74
+ array(
75
+ 'name' => esc_html_x( 'WordPress Carousels', 'wp-carousel-free' ),
76
+ 'singular_name' => esc_html_x( 'WP Carousel', 'wp-carousel-free' ),
77
+ 'add_new' => esc_html__( 'Add New', 'wp-carousel-free' ),
78
+ 'add_new_item' => esc_html__( 'Add New WP Carousel', 'wp-carousel-free' ),
79
+ 'edit_item' => esc_html__( 'Edit WP Carousel', 'wp-carousel-free' ),
80
+ 'new_item' => esc_html__( 'New WP Carousel', 'wp-carousel-free' ),
81
+ 'view_item' => esc_html__( 'View WP Carousel', 'wp-carousel-free' ),
82
+ 'search_items' => esc_html__( 'Search WP Carousels', 'wp-carousel-free' ),
83
+ 'not_found' => esc_html__( 'No WP Carousels found.', 'wp-carousel-free' ),
84
+ 'not_found_in_trash' => esc_html__( 'No WP Carousels found in trash.', 'wp-carousel-free' ),
85
+ 'parent_item_colon' => esc_html__( 'Parent Item:', 'wp-carousel-free' ),
86
+ 'menu_name' => esc_html__( 'WP Carousel', 'wp-carousel-free' ),
87
+ 'all_items' => esc_html__( 'All Carousels', 'wp-carousel-free' ),
88
+ )
89
+ );
90
+
91
+ // Set the WordPress carousel post type arguments.
92
+ $args = apply_filters(
93
+ 'sp_wp_carousel_post_type_args',
94
+ array(
95
+ 'labels' => $labels,
96
+ 'public' => false,
97
+ 'hierarchical' => false,
98
+ 'exclude_from_search' => true,
99
+ 'show_ui' => true,
100
+ 'show_in_admin_bar' => false,
101
+ 'menu_position' => apply_filters( 'sp_wp_carousel_menu_position', 120 ),
102
+ 'menu_icon' => WPCAROUSELF_URL . '/admin/js/icon32.png',
103
+ 'rewrite' => false,
104
+ 'query_var' => false,
105
+ 'supports' => array(
106
+ 'title',
107
+ ),
108
+ )
109
+ );
110
+
111
+ register_post_type( 'sp_wp_carousel', $args );
112
+ }
113
+ }
includes/class-wp-carousel-free-shortcode.php ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The file that defines the plugin shortcode class.
5
+ *
6
+ * A class definition that define main carousel shortcode of the plugin.
7
+ *
8
+ * @link https://shapedplugin.com/
9
+ * @since 3.0.0
10
+ *
11
+ * @package WP_Carousel_Free
12
+ * @subpackage WP_Carousel_Free/includes
13
+ */
14
+
15
+ /**
16
+ * The Shortcode class.
17
+ *
18
+ * This is used to define shortcode, shortcode attributes, and carousel types.
19
+ *
20
+ * @since 3.0.0
21
+ * @package WP_Carousel_Free
22
+ * @subpackage WP_Carousel_Free/includes
23
+ * @author Shamim Mia <shamhagh@gmail.com>
24
+ */
25
+ class WP_Carousel_Free_Shortcode {
26
+
27
+ /**
28
+ * Holds the class object.
29
+ *
30
+ * @since 2.0.0
31
+ * @var object
32
+ */
33
+ public static $instance;
34
+
35
+ /**
36
+ * Undocumented variable
37
+ *
38
+ * @var string $post_id The post id of the carousel shortcode.
39
+ */
40
+ public $post_id;
41
+
42
+
43
+ /**
44
+ * Allows for accessing single instance of class. Class should only be constructed once per call.
45
+ *
46
+ * @since 2.0.0
47
+ * @static
48
+ * @return WP_Carousel_Free_Shortcode Shortcode instance.
49
+ */
50
+ public static function instance() {
51
+ if ( is_null( self::$instance ) ) {
52
+ self::$instance = new self();
53
+ }
54
+ return self::$instance;
55
+ }
56
+
57
+ /**
58
+ * A shortcode for rendering the carousel.
59
+ *
60
+ * @param integer $attributes The ID the shortcode.
61
+ * @return void
62
+ */
63
+ public function sp_wp_carousel_shortcode( $attributes ) {
64
+ if ( empty( $attributes['id'] ) ) {
65
+ return;
66
+ }
67
+
68
+ $post_id = intval( $attributes['id'] );
69
+
70
+ // Video Carousel.
71
+ $upload_data = get_post_meta( $post_id, 'sp_wpcp_upload_options', true );
72
+ if ( empty( $upload_data ) ) {
73
+ return;
74
+ }
75
+ $carousel_type = isset( $upload_data['wpcp_carousel_type'] ) ? $upload_data['wpcp_carousel_type'] : '';
76
+
77
+ $shortcode_data = get_post_meta( $post_id, 'sp_wpcp_shortcode_options', true );
78
+ $section_title = isset( $shortcode_data['section_title'] ) ? $shortcode_data['section_title'] : '';
79
+ $section_title_margin = isset( $shortcode_data['section_title_margin_bottom'] ) ? $shortcode_data['section_title_margin_bottom'] : '';
80
+
81
+ // Image Carousel.
82
+ $image_orderby = isset( $shortcode_data['wpcp_image_order_by'] ) ? $shortcode_data['wpcp_image_order_by'] : '';
83
+ $show_slide_image = isset( $shortcode_data['show_image'] ) ? $shortcode_data['show_image'] : '';
84
+ $show_img_title = isset( $shortcode_data['wpcp_post_title'] ) ? $shortcode_data['wpcp_post_title'] : '';
85
+
86
+ $_image_title_att = isset( $shortcode_data['_image_title_attr'] ) ? $shortcode_data['_image_title_attr'] : '';
87
+ $show_image_title_attr = ( true == $_image_title_att ) ? 'true' : 'false';
88
+ $image_sizes = isset( $shortcode_data['wpcp_image_sizes'] ) ? $shortcode_data['wpcp_image_sizes'] : '';
89
+
90
+ $column_number = isset( $shortcode_data['wpcp_number_of_columns'] ) ? $shortcode_data['wpcp_number_of_columns'] : '';
91
+ $column_lg_desktop = isset( $column_number['column1'] ) ? $column_number['column1'] : '';
92
+ $column_desktop = isset( $column_number['column2'] ) ? $column_number['column2'] : '';
93
+ $column_sm_desktop = isset( $column_number['column3'] ) ? $column_number['column3'] : '';
94
+ $column_tablet = isset( $column_number['column4'] ) ? $column_number['column4'] : '';
95
+ $column_mobile = isset( $column_number['column5'] ) ? $column_number['column5'] : '';
96
+
97
+ // Carousel Settings.
98
+ $accessibility = ( true === $shortcode_data['wpcp_accessibility'] ) ? 'true' : 'false';
99
+ $auto_play = ( true === $shortcode_data['wpcp_carousel_auto_play'] ) ? 'true' : 'false';
100
+ $autoplay_speed = $shortcode_data['carousel_auto_play_speed'];
101
+ $speed = $shortcode_data['standard_carousel_scroll_speed'];
102
+ $infinite = ( true === $shortcode_data['carousel_infinite'] ) ? 'true' : 'false';
103
+ $pause_on_hover = ( true === $shortcode_data['carousel_pause_on_hover'] ) ? 'true' : 'false';
104
+ $draggable = ( true === $shortcode_data['slider_draggable'] ) ? 'true' : 'false';
105
+ $swipe = ( true === $shortcode_data['slider_swipe'] ) ? 'true' : 'false';
106
+ $rtl = ( true === $shortcode_data['rtl_mode'] ) ? 'true' : 'false';
107
+
108
+ $post_order_by = ( isset( $shortcode_data['wpcp_post_order_by'] ) ? $shortcode_data['wpcp_post_order_by'] : '' );
109
+ $post_order = ( isset( $shortcode_data['wpcp_post_order'] ) ? $shortcode_data['wpcp_post_order'] : '' );
110
+
111
+ $wpcp_dots = isset( $shortcode_data['wpcp_pagination'] ) ? $shortcode_data['wpcp_pagination'] : '';
112
+ switch ( $wpcp_dots ) {
113
+ case 'show':
114
+ $dots = 'true';
115
+ $dots_mobile = 'true';
116
+ break;
117
+ case 'hide':
118
+ $dots = 'false';
119
+ $dots_mobile = 'false';
120
+ break;
121
+ case 'hide_mobile':
122
+ $dots = 'true';
123
+ $dots_mobile = 'false';
124
+ break;
125
+ }
126
+ $wpcp_arrows = isset( $shortcode_data['wpcp_navigation'] ) ? $shortcode_data['wpcp_navigation'] : '';
127
+ switch ( $wpcp_arrows ) {
128
+ case 'show':
129
+ $arrows = 'true';
130
+ $arrows_mobile = 'true';
131
+ break;
132
+ case 'hide':
133
+ $arrows = 'false';
134
+ $arrows_mobile = 'false';
135
+ break;
136
+ case 'hide_mobile':
137
+ $arrows = 'true';
138
+ $arrows_mobile = 'false';
139
+ break;
140
+ }
141
+
142
+ // Dynamic CSS.
143
+ require WPCAROUSELF_PATH . '/public/dynamic-style.php';
144
+
145
+ // Carousel Classes.
146
+ $carousel_classes = 'wpcp-carousel-section sp-wpcp-' . $post_id . ' nav-vertical-center';
147
+ if ( 'image-carousel' === $carousel_type ) {
148
+ $carousel_classes .= ' wpcp-image-carousel';
149
+ } elseif ( 'post-carousel' === $carousel_type ) {
150
+ $carousel_classes .= ' wpcp-post-carousel';
151
+ } elseif ( 'product-carousel' === $carousel_type ) {
152
+ $carousel_classes .= ' wpcp-product-carousel';
153
+ }
154
+
155
+ // Carousel Configurations.
156
+ wp_enqueue_script( 'wpcf-slick' );
157
+ wp_enqueue_script( 'wpcf-slick-config' );
158
+ $carousel_classes .= ' wpcp-standard';
159
+ $wpcp_slick_options = 'data-slick=\'{ "accessibility":' . $accessibility . ', "arrows":' . $arrows . ', "autoplay":' . $auto_play . ', "autoplaySpeed":' . $autoplay_speed . ', "dots":' . $dots . ', "infinite":' . $infinite . ', "speed":' . $speed . ', "pauseOnHover":' . $pause_on_hover . ', "slidesToShow":' . $column_lg_desktop . ', "responsive":[ { "breakpoint":1200, "settings": { "slidesToShow":' . $column_desktop . ' } }, { "breakpoint":980, "settings":{ "slidesToShow":' . $column_sm_desktop . ' } }, { "breakpoint":736, "settings": { "slidesToShow":' . $column_tablet . ' } }, {"breakpoint":480, "settings":{ "slidesToShow":' . $column_mobile . ', "arrows": ' . $arrows_mobile . ', "dots": ' . $dots_mobile . ' } } ], "rtl":' . $rtl . ', "swipe": ' . $swipe . ', "draggable": ' . $draggable . ' }\' ';
160
+
161
+ if ( 'image-carousel' === $carousel_type ) {
162
+ ob_start();
163
+ echo $the_wpcf_dynamic_css;
164
+ require WPCAROUSELF_PATH . '/public/templates/image-carousel.php';
165
+ $html = ob_get_contents();
166
+ ob_end_clean();
167
+
168
+ return apply_filters( 'sp_wpcp_image_carousel', $html, $post_id );
169
+ }
170
+ if ( 'post-carousel' === $carousel_type ) {
171
+ ob_start();
172
+ echo $the_wpcf_dynamic_css;
173
+ require WPCAROUSELF_PATH . '/public/templates/post-carousel.php';
174
+ $html = ob_get_contents();
175
+ ob_end_clean();
176
+
177
+ return apply_filters( 'sp_wpcp_post_carousel', $html, $post_id );
178
+ }
179
+ if ( 'product-carousel' === $carousel_type ) {
180
+ ob_start();
181
+ echo $the_wpcf_dynamic_css;
182
+ require WPCAROUSELF_PATH . '/public/templates/product-carousel.php';
183
+ $html = ob_get_contents();
184
+ ob_end_clean();
185
+
186
+ return apply_filters( 'sp_wpcp_product_carousel', $html, $post_id );
187
+ }
188
+
189
+ return '';
190
+ }
191
+ }
includes/index.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php // Silence is golden.
index.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php // Silence is golden.
languages/wp-carousel-free.pot ADDED
@@ -0,0 +1,1051 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WP Carousel Free\n"
4
+ "POT-Creation-Date: 2018-12-24 12:01+0600\n"
5
+ "PO-Revision-Date: 2018-12-24 12:01+0600\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: ShapedPlugin\n"
8
+ "Language: en\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 2.2\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
+ "X-Poedit-KeywordsList: __;_e;_x;_ex;_n;_nx;_n_noop;_nx_noop;esc_html__;"
16
+ "esc_html_e;esc_html_x;esc_attr__;esc_attr_e;esc_attr_x;number_format_i18n;"
17
+ "date_i18n\n"
18
+ "X-Poedit-SearchPath-0: .\n"
19
+
20
+ #: admin/class-wp-carousel-free-admin.php:100
21
+ #: admin/class-wp-carousel-free-admin.php:103
22
+ msgid "Carousel updated."
23
+ msgstr ""
24
+
25
+ #: admin/class-wp-carousel-free-admin.php:104
26
+ #, php-format
27
+ msgid "Carousel restored to revision from %s"
28
+ msgstr ""
29
+
30
+ #: admin/class-wp-carousel-free-admin.php:105
31
+ msgid "Carousel published."
32
+ msgstr ""
33
+
34
+ #: admin/class-wp-carousel-free-admin.php:106
35
+ msgid "Carousel saved."
36
+ msgstr ""
37
+
38
+ #: admin/class-wp-carousel-free-admin.php:107
39
+ msgid "Carousel submitted."
40
+ msgstr ""
41
+
42
+ #: admin/class-wp-carousel-free-admin.php:108
43
+ #, php-format
44
+ msgid "Carousel scheduled for: <strong>%1$s</strong>."
45
+ msgstr ""
46
+
47
+ #: admin/class-wp-carousel-free-admin.php:108
48
+ msgid "M j, Y @ G:i"
49
+ msgstr ""
50
+
51
+ #: admin/class-wp-carousel-free-admin.php:109
52
+ msgid "Carousel draft updated."
53
+ msgstr ""
54
+
55
+ #: admin/class-wp-carousel-free-admin.php:121
56
+ msgid "Carousel Title"
57
+ msgstr ""
58
+
59
+ #: admin/class-wp-carousel-free-admin.php:122
60
+ msgid "Shortcode"
61
+ msgstr ""
62
+
63
+ #: admin/class-wp-carousel-free-admin.php:123
64
+ #: admin/views/meta-box/config/metabox.config.php:32
65
+ msgid "Carousel Type"
66
+ msgstr ""
67
+
68
+ #: admin/class-wp-carousel-free-admin.php:124
69
+ #: admin/views/meta-box/config/metabox.config.php:253
70
+ msgid "Date"
71
+ msgstr ""
72
+
73
+ #: admin/class-wp-carousel-free-admin.php:164
74
+ msgid "Create Carousel"
75
+ msgstr ""
76
+
77
+ #: admin/class-wp-carousel-free-admin.php:194
78
+ msgid "Live Demo"
79
+ msgstr ""
80
+
81
+ #: admin/class-wp-carousel-free-admin.php:195
82
+ msgid "View WP Carousel Video Tutorials"
83
+ msgstr ""
84
+
85
+ #: admin/class-wp-carousel-free-admin.php:195
86
+ msgid "Docs & Video Tutorials"
87
+ msgstr ""
88
+
89
+ #: admin/class-wp-carousel-free-admin.php:215
90
+ #, php-format
91
+ msgid ""
92
+ "If you like <strong>WordPress Carousel</strong>, please leave us a <a href="
93
+ "\"%s\" target=\"_blank\">&#9733;&#9733;&#9733;&#9733;&#9733;</a> rating. "
94
+ "Your Review is very important to us as it helps us to grow more. "
95
+ msgstr ""
96
+
97
+ #: admin/views/help.php:50
98
+ msgid "WP Carousel Help"
99
+ msgstr ""
100
+
101
+ #: admin/views/help.php:50
102
+ msgid "Help"
103
+ msgstr ""
104
+
105
+ #: admin/views/help.php:66
106
+ msgid "Welcome to WordPress Carousel! "
107
+ msgstr ""
108
+
109
+ #: admin/views/help.php:69
110
+ msgid ""
111
+ "Thank you for installing WordPress Carousel! You're now running the most "
112
+ "popular WordPress Carousel plugin.\n"
113
+ "This video will help you get started with the plugin."
114
+ msgstr ""
115
+
116
+ #: admin/views/help.php:85
117
+ msgid "Need any Assistance?"
118
+ msgstr ""
119
+
120
+ #: admin/views/help.php:86
121
+ msgid "Our Expert Support Team is always ready to help you out promptly."
122
+ msgstr ""
123
+
124
+ #: admin/views/help.php:87
125
+ msgid "Contact Support"
126
+ msgstr ""
127
+
128
+ #: admin/views/help.php:93
129
+ msgid "Looking for Documentation?"
130
+ msgstr ""
131
+
132
+ #: admin/views/help.php:94
133
+ msgid "We have detailed documentation on every aspects of WordPress Carousel."
134
+ msgstr ""
135
+
136
+ #: admin/views/help.php:95
137
+ msgid "Documentation"
138
+ msgstr ""
139
+
140
+ #: admin/views/help.php:101
141
+ msgid "Like This Plugin?"
142
+ msgstr ""
143
+
144
+ #: admin/views/help.php:102
145
+ msgid "If you like WordPress Carousel, please leave us a 5 star rating."
146
+ msgstr ""
147
+
148
+ #: admin/views/help.php:103
149
+ msgid "Rate The Plugin"
150
+ msgstr ""
151
+
152
+ #: admin/views/meta-box/classes/framework.class.php:190
153
+ msgid "Success. Imported backup options."
154
+ msgstr ""
155
+
156
+ #: admin/views/meta-box/classes/framework.class.php:195
157
+ msgid "Default options restored."
158
+ msgstr ""
159
+
160
+ #: admin/views/meta-box/classes/framework.class.php:214
161
+ msgid "Default options restored for only this section."
162
+ msgstr ""
163
+
164
+ #: admin/views/meta-box/classes/framework.class.php:381
165
+ msgid "Settings saved."
166
+ msgstr ""
167
+
168
+ #: admin/views/meta-box/classes/framework.class.php:383
169
+ msgid "Save Changes"
170
+ msgstr ""
171
+
172
+ #: admin/views/meta-box/classes/framework.class.php:383
173
+ msgid "Saving..."
174
+ msgstr ""
175
+
176
+ #: admin/views/meta-box/classes/framework.class.php:384
177
+ msgid "Restore"
178
+ msgstr ""
179
+
180
+ #: admin/views/meta-box/classes/framework.class.php:387
181
+ msgid "Reset All Options"
182
+ msgstr ""
183
+
184
+ #: admin/views/meta-box/classes/metabox.class.php:176
185
+ msgid "Shortcode:"
186
+ msgstr ""
187
+
188
+ #: admin/views/meta-box/classes/metabox.class.php:184
189
+ msgid "Template Include:"
190
+ msgstr ""
191
+
192
+ #: admin/views/meta-box/classes/options.class.php:187
193
+ msgid "CONFIG"
194
+ msgstr ""
195
+
196
+ #: admin/views/meta-box/classes/options.class.php:193
197
+ #: admin/views/meta-box/classes/options.class.php:213
198
+ msgid "USAGE"
199
+ msgstr ""
200
+
201
+ #: admin/views/meta-box/classes/options.class.php:199
202
+ msgid "VALUE"
203
+ msgstr ""
204
+
205
+ #: admin/views/meta-box/classes/options.class.php:217
206
+ #: admin/views/meta-box/config/metabox.config.php:250
207
+ msgid "ID"
208
+ msgstr ""
209
+
210
+ #: admin/views/meta-box/classes/options.class.php:304
211
+ #, php-format
212
+ msgid "You are editing language: ( <strong>%s</strong> )"
213
+ msgstr ""
214
+
215
+ #: admin/views/meta-box/config/framework.config.php:10
216
+ msgid "Settings"
217
+ msgstr ""
218
+
219
+ #: admin/views/meta-box/config/framework.config.php:16
220
+ msgid "WordPress Carousel"
221
+ msgstr ""
222
+
223
+ #: admin/views/meta-box/config/framework.config.php:31
224
+ msgid "Advanced Settings"
225
+ msgstr ""
226
+
227
+ #: admin/views/meta-box/config/framework.config.php:38
228
+ msgid "Enqueue or Dequeue CSS"
229
+ msgstr ""
230
+
231
+ #: admin/views/meta-box/config/framework.config.php:43
232
+ msgid "Slick CSS"
233
+ msgstr ""
234
+
235
+ #: admin/views/meta-box/config/framework.config.php:44
236
+ msgid "On/off the switch to enqueue/dequeue slick CSS."
237
+ msgstr ""
238
+
239
+ #: admin/views/meta-box/config/framework.config.php:50
240
+ msgid "Font Awesome CSS"
241
+ msgstr ""
242
+
243
+ #: admin/views/meta-box/config/framework.config.php:51
244
+ msgid "On/off the switch to enqueue/dequeue font awesome CSS."
245
+ msgstr ""
246
+
247
+ #: admin/views/meta-box/config/framework.config.php:62
248
+ #: admin/views/meta-box/config/framework.config.php:69
249
+ msgid "Custom CSS"
250
+ msgstr ""
251
+
252
+ #: admin/views/meta-box/config/framework.config.php:70
253
+ msgid "Type your css."
254
+ msgstr ""
255
+
256
+ #: admin/views/meta-box/config/metabox.config.php:17
257
+ msgid "Upload Options"
258
+ msgstr ""
259
+
260
+ #: admin/views/meta-box/config/metabox.config.php:37
261
+ #: admin/views/meta-box/config/metabox.config.php:605
262
+ msgid "Image"
263
+ msgstr ""
264
+
265
+ #: admin/views/meta-box/config/metabox.config.php:42
266
+ msgid "Post"
267
+ msgstr ""
268
+
269
+ #: admin/views/meta-box/config/metabox.config.php:47
270
+ msgid "Product"
271
+ msgstr ""
272
+
273
+ #: admin/views/meta-box/config/metabox.config.php:52
274
+ msgid "Content"
275
+ msgstr ""
276
+
277
+ #: admin/views/meta-box/config/metabox.config.php:57
278
+ msgid "Video"
279
+ msgstr ""
280
+
281
+ #: admin/views/meta-box/config/metabox.config.php:72
282
+ msgid "ADD IMAGE"
283
+ msgstr ""
284
+
285
+ #: admin/views/meta-box/config/metabox.config.php:73
286
+ msgid "EDIT IMAGE"
287
+ msgstr ""
288
+
289
+ #: admin/views/meta-box/config/metabox.config.php:74
290
+ msgid "REMOVE ALL"
291
+ msgstr ""
292
+
293
+ #: admin/views/meta-box/config/metabox.config.php:80
294
+ msgid "Display Posts From"
295
+ msgstr ""
296
+
297
+ #: admin/views/meta-box/config/metabox.config.php:81
298
+ msgid "Select an option to display the posts."
299
+ msgstr ""
300
+
301
+ #: admin/views/meta-box/config/metabox.config.php:84
302
+ #: admin/views/meta-box/config/metabox.config.php:118
303
+ msgid "Latest"
304
+ msgstr ""
305
+
306
+ #: admin/views/meta-box/config/metabox.config.php:87
307
+ #: admin/views/meta-box/config/metabox.config.php:121
308
+ msgid "Taxonomy (Pro)"
309
+ msgstr ""
310
+
311
+ #: admin/views/meta-box/config/metabox.config.php:91
312
+ msgid "Specific Posts (Pro)"
313
+ msgstr ""
314
+
315
+ #: admin/views/meta-box/config/metabox.config.php:102
316
+ msgid "Total Posts"
317
+ msgstr ""
318
+
319
+ #: admin/views/meta-box/config/metabox.config.php:103
320
+ msgid "Number of total posts to show. Default value is 50."
321
+ msgstr ""
322
+
323
+ #: admin/views/meta-box/config/metabox.config.php:114
324
+ msgid "Display Product From"
325
+ msgstr ""
326
+
327
+ #: admin/views/meta-box/config/metabox.config.php:115
328
+ msgid "Select an option to display the products."
329
+ msgstr ""
330
+
331
+ #: admin/views/meta-box/config/metabox.config.php:125
332
+ msgid "Specific Products (Pro)"
333
+ msgstr ""
334
+
335
+ #: admin/views/meta-box/config/metabox.config.php:136
336
+ msgid "Total Products"
337
+ msgstr ""
338
+
339
+ #: admin/views/meta-box/config/metabox.config.php:137
340
+ msgid "Number of total products to display. Default value is 50."
341
+ msgstr ""
342
+
343
+ #: admin/views/meta-box/config/metabox.config.php:153
344
+ msgid "Shortcode Options"
345
+ msgstr ""
346
+
347
+ #: admin/views/meta-box/config/metabox.config.php:161
348
+ msgid "General Settings"
349
+ msgstr ""
350
+
351
+ #: admin/views/meta-box/config/metabox.config.php:168
352
+ msgid "Carousel Section Title"
353
+ msgstr ""
354
+
355
+ #: admin/views/meta-box/config/metabox.config.php:169
356
+ msgid "Show/Hide the carousel section title."
357
+ msgstr ""
358
+
359
+ #: admin/views/meta-box/config/metabox.config.php:175
360
+ msgid "Carousel Title Margin Bottom"
361
+ msgstr ""
362
+
363
+ #: admin/views/meta-box/config/metabox.config.php:176
364
+ msgid ""
365
+ "Set margin bottom for the carousel section title. Default value is 30px."
366
+ msgstr ""
367
+
368
+ #: admin/views/meta-box/config/metabox.config.php:177
369
+ msgid "(px)"
370
+ msgstr ""
371
+
372
+ #: admin/views/meta-box/config/metabox.config.php:191
373
+ msgid "Carousel Column(s)"
374
+ msgstr ""
375
+
376
+ #: admin/views/meta-box/config/metabox.config.php:192
377
+ msgid "Set number of column on devices."
378
+ msgstr ""
379
+
380
+ #: admin/views/meta-box/config/metabox.config.php:195
381
+ msgid "Large Desktop"
382
+ msgstr ""
383
+
384
+ #: admin/views/meta-box/config/metabox.config.php:196
385
+ msgid ""
386
+ "Set number of column(s) for the screen larger than 1200px. Default value is "
387
+ "5."
388
+ msgstr ""
389
+
390
+ #: admin/views/meta-box/config/metabox.config.php:198
391
+ msgid "Desktop"
392
+ msgstr ""
393
+
394
+ #: admin/views/meta-box/config/metabox.config.php:199
395
+ msgid ""
396
+ "Set number of column on desktop for the screen smaller than 1200px. Default "
397
+ "value is 4."
398
+ msgstr ""
399
+
400
+ #: admin/views/meta-box/config/metabox.config.php:201
401
+ msgid "Small Desktop"
402
+ msgstr ""
403
+
404
+ #: admin/views/meta-box/config/metabox.config.php:202
405
+ msgid ""
406
+ "Set number of column on small desktop for the screen smaller than 980px. "
407
+ "Default value is 3."
408
+ msgstr ""
409
+
410
+ #: admin/views/meta-box/config/metabox.config.php:204
411
+ msgid "Tablet"
412
+ msgstr ""
413
+
414
+ #: admin/views/meta-box/config/metabox.config.php:205
415
+ msgid ""
416
+ "Set number of column on tablet for the screen smaller than 736px. Default "
417
+ "value is 2."
418
+ msgstr ""
419
+
420
+ #: admin/views/meta-box/config/metabox.config.php:207
421
+ msgid "Mobile"
422
+ msgstr ""
423
+
424
+ #: admin/views/meta-box/config/metabox.config.php:208
425
+ msgid ""
426
+ "Set number of column on mobile for the screen smaller than 480px. Default "
427
+ "value is 1."
428
+ msgstr ""
429
+
430
+ #: admin/views/meta-box/config/metabox.config.php:230
431
+ #: admin/views/meta-box/config/metabox.config.php:246
432
+ msgid "Order by"
433
+ msgstr ""
434
+
435
+ #: admin/views/meta-box/config/metabox.config.php:231
436
+ msgid "Set an order by option."
437
+ msgstr ""
438
+
439
+ #: admin/views/meta-box/config/metabox.config.php:234
440
+ msgid "Drag & Drop"
441
+ msgstr ""
442
+
443
+ #: admin/views/meta-box/config/metabox.config.php:237
444
+ #: admin/views/meta-box/config/metabox.config.php:256
445
+ msgid "Random"
446
+ msgstr ""
447
+
448
+ #: admin/views/meta-box/config/metabox.config.php:247
449
+ msgid "Select an order by option."
450
+ msgstr ""
451
+
452
+ #: admin/views/meta-box/config/metabox.config.php:259
453
+ msgid "Title"
454
+ msgstr ""
455
+
456
+ #: admin/views/meta-box/config/metabox.config.php:262
457
+ msgid "Modified"
458
+ msgstr ""
459
+
460
+ #: admin/views/meta-box/config/metabox.config.php:265
461
+ msgid "Menu Order"
462
+ msgstr ""
463
+
464
+ #: admin/views/meta-box/config/metabox.config.php:274
465
+ msgid "Order"
466
+ msgstr ""
467
+
468
+ #: admin/views/meta-box/config/metabox.config.php:275
469
+ msgid "Select an order option."
470
+ msgstr ""
471
+
472
+ #: admin/views/meta-box/config/metabox.config.php:278
473
+ msgid "Ascending"
474
+ msgstr ""
475
+
476
+ #: admin/views/meta-box/config/metabox.config.php:281
477
+ msgid "Descending"
478
+ msgstr ""
479
+
480
+ #: admin/views/meta-box/config/metabox.config.php:293
481
+ msgid "Carousel Settings"
482
+ msgstr ""
483
+
484
+ #: admin/views/meta-box/config/metabox.config.php:299
485
+ msgid "AutoPlay"
486
+ msgstr ""
487
+
488
+ #: admin/views/meta-box/config/metabox.config.php:300
489
+ msgid "On/Off auto play."
490
+ msgstr ""
491
+
492
+ #: admin/views/meta-box/config/metabox.config.php:307
493
+ msgid "AutoPlay Speed"
494
+ msgstr ""
495
+
496
+ #: admin/views/meta-box/config/metabox.config.php:308
497
+ msgid "Set auto play speed. Default value is 3000 ms."
498
+ msgstr ""
499
+
500
+ #: admin/views/meta-box/config/metabox.config.php:309
501
+ #: admin/views/meta-box/config/metabox.config.php:321
502
+ msgid "(millisecond)"
503
+ msgstr ""
504
+
505
+ #: admin/views/meta-box/config/metabox.config.php:319
506
+ msgid "Pagination Speed"
507
+ msgstr ""
508
+
509
+ #: admin/views/meta-box/config/metabox.config.php:320
510
+ msgid "Set pagination/slide scroll speed. Default value is 600 ms."
511
+ msgstr ""
512
+
513
+ #: admin/views/meta-box/config/metabox.config.php:330
514
+ msgid "Pause on Hover"
515
+ msgstr ""
516
+
517
+ #: admin/views/meta-box/config/metabox.config.php:331
518
+ msgid "On/Off carousel pause on hover."
519
+ msgstr ""
520
+
521
+ #: admin/views/meta-box/config/metabox.config.php:337
522
+ msgid "Infinite Loop"
523
+ msgstr ""
524
+
525
+ #: admin/views/meta-box/config/metabox.config.php:338
526
+ msgid "On/Off infinite loop mode."
527
+ msgstr ""
528
+
529
+ #: admin/views/meta-box/config/metabox.config.php:343
530
+ msgid "Navigation Settings"
531
+ msgstr ""
532
+
533
+ #: admin/views/meta-box/config/metabox.config.php:349
534
+ msgid "Navigation"
535
+ msgstr ""
536
+
537
+ #: admin/views/meta-box/config/metabox.config.php:350
538
+ msgid "Show/Hide carousel navigation."
539
+ msgstr ""
540
+
541
+ #: admin/views/meta-box/config/metabox.config.php:352
542
+ #: admin/views/meta-box/config/metabox.config.php:388
543
+ msgid "Show"
544
+ msgstr ""
545
+
546
+ #: admin/views/meta-box/config/metabox.config.php:353
547
+ #: admin/views/meta-box/config/metabox.config.php:389
548
+ msgid "Hide"
549
+ msgstr ""
550
+
551
+ #: admin/views/meta-box/config/metabox.config.php:354
552
+ #: admin/views/meta-box/config/metabox.config.php:390
553
+ msgid "Hide on Mobile"
554
+ msgstr ""
555
+
556
+ #: admin/views/meta-box/config/metabox.config.php:365
557
+ msgid "Navigation Color"
558
+ msgstr ""
559
+
560
+ #: admin/views/meta-box/config/metabox.config.php:366
561
+ msgid "Set color for the carousel navigation."
562
+ msgstr ""
563
+
564
+ #: admin/views/meta-box/config/metabox.config.php:370
565
+ #: admin/views/meta-box/config/metabox.config.php:406
566
+ #: admin/views/meta-box/fields/typography_advanced/typography_advanced.php:160
567
+ msgid "Color"
568
+ msgstr ""
569
+
570
+ #: admin/views/meta-box/config/metabox.config.php:372
571
+ msgid "Hover Color"
572
+ msgstr ""
573
+
574
+ #: admin/views/meta-box/config/metabox.config.php:380
575
+ msgid "Pagination Settings"
576
+ msgstr ""
577
+
578
+ #: admin/views/meta-box/config/metabox.config.php:385
579
+ msgid "Pagination"
580
+ msgstr ""
581
+
582
+ #: admin/views/meta-box/config/metabox.config.php:386
583
+ msgid "Show/Hide carousel pagination."
584
+ msgstr ""
585
+
586
+ #: admin/views/meta-box/config/metabox.config.php:401
587
+ msgid "Pagination Color"
588
+ msgstr ""
589
+
590
+ #: admin/views/meta-box/config/metabox.config.php:402
591
+ msgid "Set color for the carousel pagination dots."
592
+ msgstr ""
593
+
594
+ #: admin/views/meta-box/config/metabox.config.php:408
595
+ msgid "Active Color"
596
+ msgstr ""
597
+
598
+ #: admin/views/meta-box/config/metabox.config.php:417
599
+ msgid "Misc. Settings"
600
+ msgstr ""
601
+
602
+ #: admin/views/meta-box/config/metabox.config.php:422
603
+ msgid "Tab and Key Navigation"
604
+ msgstr ""
605
+
606
+ #: admin/views/meta-box/config/metabox.config.php:423
607
+ msgid "Enable/Disable carousel scroll with tab and keyboard."
608
+ msgstr ""
609
+
610
+ #: admin/views/meta-box/config/metabox.config.php:429
611
+ msgid "Swipe"
612
+ msgstr ""
613
+
614
+ #: admin/views/meta-box/config/metabox.config.php:430
615
+ msgid "On/Off swipe mode."
616
+ msgstr ""
617
+
618
+ #: admin/views/meta-box/config/metabox.config.php:436
619
+ msgid "Mouse Draggable"
620
+ msgstr ""
621
+
622
+ #: admin/views/meta-box/config/metabox.config.php:437
623
+ msgid "On/Off mouse draggable mode."
624
+ msgstr ""
625
+
626
+ #: admin/views/meta-box/config/metabox.config.php:444
627
+ msgid "RTL"
628
+ msgstr ""
629
+
630
+ #: admin/views/meta-box/config/metabox.config.php:445
631
+ msgid "On/Off right to left mode."
632
+ msgstr ""
633
+
634
+ #: admin/views/meta-box/config/metabox.config.php:451
635
+ msgid ""
636
+ "To make the RTL Mode work, please select an rtl language in the dashboard e."
637
+ "g. Arabic, Hebrew."
638
+ msgstr ""
639
+
640
+ #: admin/views/meta-box/config/metabox.config.php:460
641
+ msgid "Style Settings"
642
+ msgstr ""
643
+
644
+ #: admin/views/meta-box/config/metabox.config.php:466
645
+ msgid "Content Position"
646
+ msgstr ""
647
+
648
+ #: admin/views/meta-box/config/metabox.config.php:467
649
+ msgid "Select a position for the title, content, meta etc."
650
+ msgstr ""
651
+
652
+ #: admin/views/meta-box/config/metabox.config.php:470
653
+ msgid "Bottom"
654
+ msgstr ""
655
+
656
+ #: admin/views/meta-box/config/metabox.config.php:473
657
+ msgid "Right (Pro)"
658
+ msgstr ""
659
+
660
+ #: admin/views/meta-box/config/metabox.config.php:477
661
+ msgid "Overlay (Pro)"
662
+ msgstr ""
663
+
664
+ #: admin/views/meta-box/config/metabox.config.php:487
665
+ msgid "Slide Border"
666
+ msgstr ""
667
+
668
+ #: admin/views/meta-box/config/metabox.config.php:488
669
+ msgid "Set border for the slide."
670
+ msgstr ""
671
+
672
+ #: admin/views/meta-box/config/metabox.config.php:501
673
+ msgid "Post Title"
674
+ msgstr ""
675
+
676
+ #: admin/views/meta-box/config/metabox.config.php:502
677
+ msgid "Show/Hide post title."
678
+ msgstr ""
679
+
680
+ #: admin/views/meta-box/config/metabox.config.php:509
681
+ msgid "Post Content"
682
+ msgstr ""
683
+
684
+ #: admin/views/meta-box/config/metabox.config.php:510
685
+ msgid "Show/Hide post content."
686
+ msgstr ""
687
+
688
+ #: admin/views/meta-box/config/metabox.config.php:517
689
+ msgid "Content Display Type"
690
+ msgstr ""
691
+
692
+ #: admin/views/meta-box/config/metabox.config.php:518
693
+ msgid "Select a content display type."
694
+ msgstr ""
695
+
696
+ #: admin/views/meta-box/config/metabox.config.php:521
697
+ msgid "Excerpt"
698
+ msgstr ""
699
+
700
+ #: admin/views/meta-box/config/metabox.config.php:524
701
+ msgid "Full Content (Pro)"
702
+ msgstr ""
703
+
704
+ #: admin/views/meta-box/config/metabox.config.php:528
705
+ msgid "Content with Limit (Pro)"
706
+ msgstr ""
707
+
708
+ #: admin/views/meta-box/config/metabox.config.php:538
709
+ msgid "Post Meta"
710
+ msgstr ""
711
+
712
+ #: admin/views/meta-box/config/metabox.config.php:544
713
+ msgid "Post Author"
714
+ msgstr ""
715
+
716
+ #: admin/views/meta-box/config/metabox.config.php:545
717
+ msgid "Show/Hide post author name."
718
+ msgstr ""
719
+
720
+ #: admin/views/meta-box/config/metabox.config.php:552
721
+ msgid "Post Date"
722
+ msgstr ""
723
+
724
+ #: admin/views/meta-box/config/metabox.config.php:553
725
+ msgid "Show/Hide post date."
726
+ msgstr ""
727
+
728
+ #: admin/views/meta-box/config/metabox.config.php:561
729
+ msgid "Product Settings"
730
+ msgstr ""
731
+
732
+ #: admin/views/meta-box/config/metabox.config.php:567
733
+ msgid "Product Name"
734
+ msgstr ""
735
+
736
+ #: admin/views/meta-box/config/metabox.config.php:568
737
+ msgid "Show/Hide product name."
738
+ msgstr ""
739
+
740
+ #: admin/views/meta-box/config/metabox.config.php:575
741
+ msgid "Product Price"
742
+ msgstr ""
743
+
744
+ #: admin/views/meta-box/config/metabox.config.php:576
745
+ msgid "Show/Hide product price."
746
+ msgstr ""
747
+
748
+ #: admin/views/meta-box/config/metabox.config.php:583
749
+ msgid "Product Rating"
750
+ msgstr ""
751
+
752
+ #: admin/views/meta-box/config/metabox.config.php:584
753
+ msgid "Show/Hide product rating."
754
+ msgstr ""
755
+
756
+ #: admin/views/meta-box/config/metabox.config.php:591
757
+ msgid "Add to Cart Button"
758
+ msgstr ""
759
+
760
+ #: admin/views/meta-box/config/metabox.config.php:592
761
+ msgid "Show/Hide add to cart button."
762
+ msgstr ""
763
+
764
+ #: admin/views/meta-box/config/metabox.config.php:599
765
+ msgid "Image Settings"
766
+ msgstr ""
767
+
768
+ #: admin/views/meta-box/config/metabox.config.php:606
769
+ msgid "Show/Hide slide image."
770
+ msgstr ""
771
+
772
+ #: admin/views/meta-box/config/metabox.config.php:614
773
+ msgid "Image Sizes"
774
+ msgstr ""
775
+
776
+ #: admin/views/meta-box/config/metabox.config.php:616
777
+ msgid "Select a image size."
778
+ msgstr ""
779
+
780
+ #: admin/views/meta-box/config/metabox.config.php:622
781
+ msgid "Image Title Attribute"
782
+ msgstr ""
783
+
784
+ #: admin/views/meta-box/config/metabox.config.php:623
785
+ msgid "Check to add image title attribute."
786
+ msgstr ""
787
+
788
+ #: admin/views/meta-box/config/metabox.config.php:633
789
+ msgid "Typography"
790
+ msgstr ""
791
+
792
+ #: admin/views/meta-box/config/metabox.config.php:639
793
+ msgid ""
794
+ "These Typography (840+ Google Fonts) options are available in the <a href="
795
+ "\"https://shapedplugin.com/plugin/wordpress-carousel-pro/\" target=\"_blank"
796
+ "\">Pro Version</a> only."
797
+ msgstr ""
798
+
799
+ #: admin/views/meta-box/config/metabox.config.php:644
800
+ msgid "Load Carousel Section Title Font"
801
+ msgstr ""
802
+
803
+ #: admin/views/meta-box/config/metabox.config.php:645
804
+ msgid "On/Off google font for the carousel section title."
805
+ msgstr ""
806
+
807
+ #: admin/views/meta-box/config/metabox.config.php:651
808
+ msgid "Carousel Section Title Font"
809
+ msgstr ""
810
+
811
+ #: admin/views/meta-box/config/metabox.config.php:652
812
+ msgid "Set Carousel section title font properties."
813
+ msgstr ""
814
+
815
+ #: admin/views/meta-box/config/metabox.config.php:671
816
+ msgid "Load Caption Font"
817
+ msgstr ""
818
+
819
+ #: admin/views/meta-box/config/metabox.config.php:672
820
+ msgid "On/Off google font for the image caption."
821
+ msgstr ""
822
+
823
+ #: admin/views/meta-box/config/metabox.config.php:678
824
+ msgid "Caption Font"
825
+ msgstr ""
826
+
827
+ #: admin/views/meta-box/config/metabox.config.php:679
828
+ msgid "Set caption font properties."
829
+ msgstr ""
830
+
831
+ #: admin/views/meta-box/config/metabox.config.php:698
832
+ msgid "Load Description Font"
833
+ msgstr ""
834
+
835
+ #: admin/views/meta-box/config/metabox.config.php:699
836
+ msgid "On/Off google font for the image description."
837
+ msgstr ""
838
+
839
+ #: admin/views/meta-box/config/metabox.config.php:705
840
+ msgid "Description Font"
841
+ msgstr ""
842
+
843
+ #: admin/views/meta-box/config/metabox.config.php:706
844
+ msgid "Set description font properties."
845
+ msgstr ""
846
+
847
+ #: admin/views/meta-box/fields/border/border.php:46
848
+ msgid "Border Width"
849
+ msgstr ""
850
+
851
+ #: admin/views/meta-box/fields/border/border.php:61
852
+ msgid "Border Style"
853
+ msgstr ""
854
+
855
+ #: admin/views/meta-box/fields/border/border.php:64
856
+ #: admin/views/meta-box/fields/typography_advanced/typography_advanced.php:141
857
+ msgid "None"
858
+ msgstr ""
859
+
860
+ #: admin/views/meta-box/fields/border/border.php:65
861
+ msgid "Solid"
862
+ msgstr ""
863
+
864
+ #: admin/views/meta-box/fields/border/border.php:66
865
+ msgid "Dotted"
866
+ msgstr ""
867
+
868
+ #: admin/views/meta-box/fields/border/border.php:67
869
+ msgid "Dashed"
870
+ msgstr ""
871
+
872
+ #: admin/views/meta-box/fields/border/border.php:68
873
+ msgid "Double"
874
+ msgstr ""
875
+
876
+ #: admin/views/meta-box/fields/border/border.php:69
877
+ msgid "Groove"
878
+ msgstr ""
879
+
880
+ #: admin/views/meta-box/fields/border/border.php:70
881
+ msgid "Ridge"
882
+ msgstr ""
883
+
884
+ #: admin/views/meta-box/fields/border/border.php:71
885
+ msgid "Inset"
886
+ msgstr ""
887
+
888
+ #: admin/views/meta-box/fields/border/border.php:72
889
+ msgid "Outset"
890
+ msgstr ""
891
+
892
+ #: admin/views/meta-box/fields/border/border.php:86
893
+ msgid "Border Color"
894
+ msgstr ""
895
+
896
+ #: admin/views/meta-box/fields/border/border.php:101
897
+ msgid "Border Hover Color"
898
+ msgstr ""
899
+
900
+ #: admin/views/meta-box/fields/gallery/gallery.php:33
901
+ msgid "Add Gallery"
902
+ msgstr ""
903
+
904
+ #: admin/views/meta-box/fields/gallery/gallery.php:34
905
+ msgid "Edit Gallery"
906
+ msgstr ""
907
+
908
+ #: admin/views/meta-box/fields/gallery/gallery.php:35
909
+ msgid "Clear"
910
+ msgstr ""
911
+
912
+ #: admin/views/meta-box/fields/image_sizes/image_sizes.php:54
913
+ msgid "original uploaded image"
914
+ msgstr ""
915
+
916
+ #: admin/views/meta-box/fields/switcher/switcher.php:20
917
+ msgid "on"
918
+ msgstr ""
919
+
920
+ #: admin/views/meta-box/fields/switcher/switcher.php:20
921
+ msgid "off"
922
+ msgstr ""
923
+
924
+ #: admin/views/meta-box/fields/typography_advanced/typography_advanced.php:60
925
+ msgid "Web Safe Fonts"
926
+ msgstr ""
927
+
928
+ #: admin/views/meta-box/fields/typography_advanced/typography_advanced.php:66
929
+ msgid "Google Fonts"
930
+ msgstr ""
931
+
932
+ #: admin/views/meta-box/fields/typography_advanced/typography_advanced.php:99
933
+ msgid "Font Size"
934
+ msgstr ""
935
+
936
+ #: admin/views/meta-box/fields/typography_advanced/typography_advanced.php:113
937
+ msgid "Line Height"
938
+ msgstr ""
939
+
940
+ #: admin/views/meta-box/fields/typography_advanced/typography_advanced.php:127
941
+ msgid "Inherit"
942
+ msgstr ""
943
+
944
+ #: admin/views/meta-box/fields/typography_advanced/typography_advanced.php:154
945
+ msgid "Normal"
946
+ msgstr ""
947
+
948
+ #: admin/views/meta-box/fields/typography_advanced/typography_advanced.php:186
949
+ msgid "Error! Can not load json file."
950
+ msgstr ""
951
+
952
+ #: admin/views/meta-box/functions/helpers.php:61
953
+ msgid "This field class is not available!"
954
+ msgstr ""
955
+
956
+ #: admin/views/meta-box/functions/validate.php:22
957
+ msgid "Please write a valid email address!"
958
+ msgstr ""
959
+
960
+ #: admin/views/meta-box/functions/validate.php:47
961
+ msgid "Please write a numeric data!"
962
+ msgstr ""
963
+
964
+ #: admin/views/meta-box/functions/validate.php:70
965
+ msgid "Fatal Error! This field is required!"
966
+ msgstr ""
967
+
968
+ #: admin/views/premium.php:50
969
+ msgid "Premium"
970
+ msgstr ""
971
+
972
+ #: admin/views/premium.php:65
973
+ msgid "Upgrade to <span>WordPress Carousel Pro</span>"
974
+ msgstr ""
975
+
976
+ #: admin/views/premium.php:69
977
+ msgid "Get more Advanced Functionality & Flexibility with the Premium version."
978
+ msgstr ""
979
+
980
+ #: includes/class-wp-carousel-free-post-types.php:75
981
+ msgid "WordPress Carousels"
982
+ msgstr ""
983
+
984
+ #: includes/class-wp-carousel-free-post-types.php:76
985
+ #: includes/class-wp-carousel-free-post-types.php:86
986
+ msgid "WP Carousel"
987
+ msgstr ""
988
+
989
+ #: includes/class-wp-carousel-free-post-types.php:77
990
+ msgid "Add New"
991
+ msgstr ""
992
+
993
+ #: includes/class-wp-carousel-free-post-types.php:78
994
+ msgid "Add New WP Carousel"
995
+ msgstr ""
996
+
997
+ #: includes/class-wp-carousel-free-post-types.php:79
998
+ msgid "Edit WP Carousel"
999
+ msgstr ""
1000
+
1001
+ #: includes/class-wp-carousel-free-post-types.php:80
1002
+ msgid "New WP Carousel"
1003
+ msgstr ""
1004
+
1005
+ #: includes/class-wp-carousel-free-post-types.php:81
1006
+ msgid "View WP Carousel"
1007
+ msgstr ""
1008
+
1009
+ #: includes/class-wp-carousel-free-post-types.php:82
1010
+ msgid "Search WP Carousels"
1011
+ msgstr ""
1012
+
1013
+ #: includes/class-wp-carousel-free-post-types.php:83
1014
+ msgid "No WP Carousels found."
1015
+ msgstr ""
1016
+
1017
+ #: includes/class-wp-carousel-free-post-types.php:84
1018
+ msgid "No WP Carousels found in trash."
1019
+ msgstr ""
1020
+
1021
+ #: includes/class-wp-carousel-free-post-types.php:85
1022
+ msgid "Parent Item:"
1023
+ msgstr ""
1024
+
1025
+ #: includes/class-wp-carousel-free-post-types.php:87
1026
+ msgid "All Carousels"
1027
+ msgstr ""
1028
+
1029
+ #: public/templates/post-carousel.php:58
1030
+ msgid " By "
1031
+ msgstr ""
1032
+
1033
+ #: public/templates/post-carousel.php:63
1034
+ msgid "On "
1035
+ msgstr ""
1036
+
1037
+ #: public/templates/post-carousel.php:88
1038
+ msgid "No posts found"
1039
+ msgstr ""
1040
+
1041
+ #: public/templates/product-carousel.php:79
1042
+ msgid "Rated "
1043
+ msgstr ""
1044
+
1045
+ #: public/templates/product-carousel.php:79
1046
+ msgid " out of 5"
1047
+ msgstr ""
1048
+
1049
+ #: public/templates/product-carousel.php:95
1050
+ msgid "No products found"
1051
+ msgstr ""
public/class-wp-carousel-free-public.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The public-facing functionality of the plugin.
4
+ */
5
+ class WP_Carousel_Free_Public {
6
+
7
+ /**
8
+ * Script and style suffix
9
+ *
10
+ * @since 2.0.0
11
+ * @access protected
12
+ * @var string
13
+ */
14
+ protected $suffix;
15
+
16
+ /**
17
+ * The ID of the plugin.
18
+ *
19
+ * @since 2.0.0
20
+ * @access protected
21
+ * @var string $plugin_name The ID of this plugin
22
+ */
23
+ protected $plugin_name;
24
+
25
+ /**
26
+ * The version of the plugin
27
+ *
28
+ * @since 2.0.0
29
+ * @access protected
30
+ * @var string $version The current version fo the plugin.
31
+ */
32
+ protected $version;
33
+
34
+ /**
35
+ * Initialize the class sets its properties.
36
+ *
37
+ * @since 2.0.0
38
+ * @param string $plugin_name The name of the plugin.
39
+ * @param string $version The version of the plugin.
40
+ */
41
+ public function __construct( $plugin_name, $version ) {
42
+ $this->suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
43
+ $this->plugin_name = $plugin_name;
44
+ $this->version = $version;
45
+ }
46
+
47
+ /**
48
+ * Register the stylesheets for the public-facing side of the plugin.
49
+ *
50
+ * @since 2.0.0
51
+ * @return void
52
+ */
53
+ public function enqueue_styles() {
54
+ if ( true == sp_get_option( 'wpcp_dequeue_slick_css' ) ) {
55
+ wp_enqueue_style( 'wpcf-slick', WPCAROUSELF_URL . 'public/css/slick.css', array(), $this->version, 'all' );
56
+ }
57
+ if ( true == sp_get_option( 'wpcp_dequeue_fa_css' ) ) {
58
+ wp_enqueue_style( $this->plugin_name . '-fontawesome', WPCAROUSELF_URL . 'public/css/font-awesome.min.css', array(), $this->version, 'all' );
59
+ }
60
+ wp_enqueue_style( $this->plugin_name, WPCAROUSELF_URL . 'public/css/wp-carousel-free-public.css', array(), $this->version, 'all' );
61
+ }
62
+
63
+ /**
64
+ * Register the JavaScript for the public-facing side of the plugin.
65
+ *
66
+ * @since 2.0.0
67
+ * @return void
68
+ */
69
+ public function enqueue_scripts() {
70
+ wp_register_script( 'wpcf-slick', WPCAROUSELF_URL . 'public/js/slick.js', array( 'jquery' ), $this->version, true );
71
+ wp_register_script( 'wpcf-slick-config', WPCAROUSELF_URL . 'public/js/wp-carousel-free-public.js', array( 'jquery', 'wpcf-slick' ), $this->version, true );
72
+ }
73
+ }
public/css/ajax-loader.gif ADDED
Binary file
{assets → public}/css/font-awesome.min.css RENAMED
@@ -1,4 +1,4 @@
1
  /*!
2
  * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3
  * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4
- */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
1
  /*!
2
  * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3
  * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
{assets → public}/css/slick.css RENAMED
@@ -55,6 +55,8 @@
55
  left: 0;
56
 
57
  display: block;
 
 
58
  }
59
  .slick-track:before,
60
  .slick-track:after
@@ -115,3 +117,8 @@
115
  .slick-arrow.slick-hidden {
116
  display: none;
117
  }
 
 
 
 
 
55
  left: 0;
56
 
57
  display: block;
58
+ margin-left: auto;
59
+ margin-right: auto;
60
  }
61
  .slick-track:before,
62
  .slick-track:after
117
  .slick-arrow.slick-hidden {
118
  display: none;
119
  }
120
+
121
+ /* Slick Theme */
122
+ .slick-loading .slick-list {
123
+ background: #fff url('./ajax-loader.gif') center center no-repeat;
124
+ }
public/css/wp-carousel-free-public.css ADDED
@@ -0,0 +1,368 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------
2
+ ## Image Carousel
3
+ --------------------------------------------------------------*/
4
+ .sp-wpcp-wrapper {
5
+ margin-bottom: 0;
6
+ }
7
+ .wpcp-carousel-section.wpcp-standard {
8
+ overflow: hidden;
9
+ padding-right: 2px;
10
+ display: none;
11
+ }
12
+ .wpcp-carousel-section.wpcp-standard.slick-initialized {
13
+ display: block;
14
+ position: relative;
15
+ }
16
+ .wpcp-carousel-section .wpcp-single-item {
17
+ overflow: hidden;
18
+ display: inline-block;
19
+ vertical-align: middle;
20
+ float: none;
21
+ }
22
+ .wpcp-all-captions li {
23
+ list-style: none;
24
+ margin: 0;
25
+ }
26
+ .wpcp-carousel-section ul,
27
+ .wpcp-carousel-section p,
28
+ .wpcp-image-carousel .wpcp-single-item .wpcp-all-captions h2 {
29
+ margin: 0;
30
+ }
31
+
32
+ .wpcp-carousel-section.wpcp-video-carousel .wpcp-single-item .wpcp-slide-image {
33
+ position: relative;
34
+ }
35
+ .wpcp-carousel-section.wpcp-content-carousel .wpcp-single-item{
36
+ padding-left: 15px;
37
+ padding-right: 15px;
38
+ }
39
+ .wpcp-carousel-section .wpcp-single-item img {
40
+ margin: 0 auto;
41
+ max-width: 100%;
42
+ box-shadow: none;
43
+ }
44
+ .wpcp-carousel-section.wpcp-image-carousel .wpcp-single-item .wpcp-all-captions {
45
+ padding: 10px 20px 15px;
46
+ }
47
+ .wpcp-carousel-section .wpcp-single-item .wpcp-all-captions .wpcp-image-description{
48
+ margin: 6px 0 0;
49
+ }
50
+ .wpcp-carousel-section .wpcp-single-item .wpcp-slide-image a:focus{
51
+ outline: none;
52
+ }
53
+ .wpcp-carousel-section .slick-slide:focus {
54
+ outline: none;
55
+ }
56
+ .wpcp-carousel-section .slick-slide {
57
+ margin-right: 20px;
58
+ float: none;
59
+ display: inline-block;
60
+ vertical-align: middle;
61
+ }
62
+ .wpcp-carousel-section .slick-list {
63
+ margin-right: -20px;
64
+ }
65
+ .wpcp-carousel-section a, .wpcp-carousel-section a:hover,
66
+ .wpcp-carousel-section .wpcp-all-captions a {
67
+ text-decoration: none;
68
+ }
69
+
70
+ /*--------------------------------------------------------------
71
+ ## WP post Carousel
72
+ --------------------------------------------------------------*/
73
+ .wpcp-carousel-section:not(.wpcp-product-carousel) .wpcp-single-item {
74
+ border: 1px solid #e5e5e5;
75
+ background: #f9f9f9;
76
+ }
77
+
78
+ .wpcp-post-carousel .wpcp-single-item .wpcp-all-captions {
79
+ padding: 15px 20px 0;
80
+ overflow: hidden;
81
+ }
82
+
83
+ .wpcp-post-carousel .wpcp-single-item .wpcp-all-captions h2 {
84
+ font-size: 16px;
85
+ font-weight: 600;
86
+ margin: 0 0 10px;
87
+ }
88
+
89
+ .wpcp-single-item h2 a {
90
+ color: #444;
91
+ text-decoration: none;
92
+ }
93
+
94
+ .wpcp-post-carousel .wpcp-single-item .wpcp-all-captions .post-categories {
95
+ margin: 0 0 7px;
96
+ padding: 0;
97
+ display: block;
98
+ }
99
+ .wpcp-post-carousel .wpcp-all-captions p {
100
+ margin-bottom: 15px;
101
+ }
102
+
103
+ .wpcp_readmore {
104
+ border: 1px solid;
105
+ display: inline-block;
106
+ background: #22afba;
107
+ margin: 0 0 14px;
108
+ line-height: 32px;
109
+ padding: 5px 14px;
110
+ font-weight: 600;
111
+ }
112
+
113
+ .wpcp_readmore, .wpcp_readmore:focus, .wpcp_readmore:hover {
114
+ color: #fff;
115
+ }
116
+ .wpcp-single-item .wpcp-all-captions .wpcp-post-meta {
117
+ margin: 0 0 20px;
118
+ padding: 0;
119
+ }
120
+ .wpcp-post-carousel .wpcp-post-meta li {
121
+ display: inline-block;
122
+ margin-right: 5px;
123
+ }
124
+
125
+ .wpcp-post-carousel .wpcp-post-meta li:last-child {
126
+ margin-right: 0;
127
+ }
128
+
129
+ .wpcp-post-meta li, .wpcp-post-meta li a {
130
+ color: #999;
131
+ }
132
+
133
+ .wpcp-carousel-section.detail-on-right .wpcp-single-item .wpcp-slide-image,.wpcp-carousel-section.detail-on-right .wpcp-single-item .wpcp-all-captions {
134
+ float: left;
135
+ width: 50%;
136
+ box-sizing: border-box;
137
+ }
138
+
139
+ .wpcp-carousel-section.detail-with-overlay .wpcp-all-captions {
140
+ position: absolute;
141
+ top: 0;
142
+ bottom: 0;
143
+ left: 0;
144
+ right: 0;
145
+ display: flex;
146
+ flex-direction: column;
147
+ justify-content: center;
148
+ height: 100%;
149
+ }
150
+
151
+ .wpcp-carousel-section.detail-with-overlay.overlay-lower .wpcp-all-captions {
152
+ top: auto;
153
+ display: block;
154
+ height: auto;
155
+ }
156
+
157
+ /*
158
+ Overlay visible on hover.
159
+ */
160
+ .wpcp-carousel-section.detail-with-overlay.overlay-on-hover .wpcp-all-captions {
161
+ visibility: hidden;
162
+ opacity: 0;
163
+ transition: visibility 0.3s linear, opacity 0.3s linear;
164
+ }
165
+
166
+ .wpcp-carousel-section.detail-with-overlay.overlay-on-hover .wpcp-single-item:hover .wpcp-all-captions {
167
+ visibility: visible;
168
+ opacity: 1;
169
+ }
170
+
171
+ .wpcp-carousel-section.detail-with-overlay .wpcp-single-item {
172
+ position: relative;
173
+ }
174
+
175
+ .wpcp-carousel-section .wpcp-single-item:focus {
176
+ outline: none;
177
+ }
178
+ /*--------------------------------------------------------------
179
+ ## Product Carousel
180
+ --------------------------------------------------------------*/
181
+ .wpcp-carousel-section.wpcp-product-carousel .wpcp-slide-image{
182
+ border: 1px solid #efefef;
183
+ }
184
+ .wpcp-product-carousel .wpcp-single-item .wpcp-all-captions {
185
+ padding: 15px 20px 0;
186
+ overflow: hidden;
187
+ text-align: center;
188
+ }
189
+ .wpcp-product-carousel .wpcp-single-item .wpcp-product-title {
190
+ margin: 0;
191
+ font-size: 16px;
192
+ line-height: 23px;
193
+ font-weight: 600;
194
+ }
195
+ .wpcp-product-price {
196
+ margin-top:5px;
197
+ }
198
+ .wpcp-carousel-section.wpcp-product-carousel .wpcp-cart-button {
199
+ margin-top: 12px;
200
+ }
201
+ .wpcp-carousel-section.wpcp-product-carousel .wpcp-cart-button a.button {
202
+ background: #ebebeb;
203
+ color: #545454;
204
+ border: 1px solid #d1d1d1;
205
+ font-weight: 500;
206
+ padding: 0 20px;
207
+ line-height: 38px;
208
+ display: inline-block;
209
+ font-size: 14px;
210
+ }
211
+
212
+ .wpcp-carousel-section.wpcp-product-carousel .wpcp-all-captions .wpcp-cart-button a.add_to_cart_button.added {
213
+ display: none;
214
+ }
215
+
216
+ .wpcp-carousel-section.wpcp-product-carousel .wpcp-all-captions .wpcp-cart-button .added_to_cart {
217
+ font-size: 100%;
218
+ margin: 0;
219
+ line-height: 38px;
220
+ cursor: pointer;
221
+ position: relative;
222
+ text-decoration: none;
223
+ overflow: visible;
224
+ padding: 0 20px;
225
+ font-weight: 600;
226
+ border-radius: 3px;
227
+ left: auto;
228
+ color: #515151;
229
+ background-color: #ebe9eb;
230
+ border: 0;
231
+ display: inline-block;
232
+ background-image: none;
233
+ box-shadow: none;
234
+ text-shadow: none;
235
+ border: 1px solid;
236
+ }
237
+
238
+ .wpcp-carousel-section.wpcp-product-carousel .wpcp-all-captions .wpcp-cart-button a.button:hover{
239
+ background: #3f3f3f;
240
+ border-color: #d1d1d1;
241
+ color: #fff;
242
+ }
243
+
244
+ .wpcp-carousel-section.wpcp-product-carousel .wpcp-all-captions .wpcp-cart-button .wc-forward::after {
245
+ -webkit-font-smoothing: antialiased;
246
+ -moz-osx-font-smoothing: grayscale;
247
+ display: inline-block;
248
+ font-style: normal;
249
+ font-variant: normal;
250
+ font-weight: normal;
251
+ line-height: 1;
252
+ vertical-align: -.125em;
253
+ font: normal normal normal 14px/1 FontAwesome;
254
+ font-weight: 900;
255
+ line-height: inherit;
256
+ vertical-align: baseline;
257
+ content: "\f178";
258
+ margin-left: 0.5407911001em;
259
+ }
260
+ .wpcp-carousel-section .woocommerce-product-rating .star-rating {
261
+ margin: 4px auto;
262
+ float: none;
263
+ }
264
+ .wpcp-product-price span{
265
+ font-weight: 700;
266
+ font-size: 14px;
267
+ }
268
+ /*--------------------------------------------------------------
269
+ ## Carousel Navigation
270
+ --------------------------------------------------------------*/
271
+ .wpcp-carousel-section .slick-prev:before, .wpcp-carousel-section .slick-next:before, .wpcp-carousel-section .slick-prev:after, .wpcp-carousel-section .slick-next:after {
272
+ display: none;
273
+ }
274
+
275
+ .wpcp-carousel-section .slick-prev {
276
+ left: 0;
277
+ }
278
+
279
+ .wpcp-carousel-section .slick-next {
280
+ right: 0;
281
+ }
282
+
283
+ .wpcp-carousel-section .slick-prev, .wpcp-carousel-section .slick-next {
284
+ width: 30px;
285
+ height: 30px;
286
+ line-height: 30px;
287
+ position: absolute;
288
+ z-index: 22;
289
+ left: auto;
290
+ top: auto;
291
+ font-size: 30px;
292
+ -webkit-transition: ease all 0.3s;
293
+ -moz-transition: ease all 0.3s;
294
+ -ms-transition: ease all 0.3s;
295
+ -o-transition: ease all 0.3s;
296
+ transition: ease all 0.3s;
297
+ margin-top: -15px;
298
+ cursor: pointer;
299
+ }
300
+
301
+ .wpcp-carousel-section.nav-vertical-center {
302
+ padding: 0 25px;
303
+ }
304
+ .wpcp-carousel-section .slick-prev i, .wpcp-carousel-section .slick-next i, .wpcp-carousel-section .slick-prev, .wpcp-carousel-section .slick-next {
305
+ line-height: 28px;
306
+ font-family: fontawesome;
307
+ color: #000;
308
+ }
309
+ .wpcp-carousel-section.nav-vertical-center .slick-next, .wpcp-carousel-section.nav-vertical-center .slick-prev {
310
+ top: 50%;
311
+ }
312
+
313
+ .wpcp-carousel-section.nav-vertical-center .slick-prev {
314
+ left: 0;
315
+ }
316
+ .wpcp-carousel-section.nav-vertical-center .slick-next,
317
+ .wpcp-carousel-section.nav-vertical-center .slick-prev {
318
+ margin-top: -15px;
319
+ }
320
+ .wpcp-carousel-section.nav-vertical-center.slick-dotted .slick-next,
321
+ .wpcp-carousel-section.nav-vertical-center.slick-dotted .slick-prev {
322
+ margin-top: -35px;
323
+ }
324
+ .wpcp-carousel-section.nav-vertical-center .slick-next {
325
+ right: 0;
326
+ text-align: right;
327
+ }
328
+
329
+ /*--------------------------------------------------------------
330
+ ## Carousel Pagination Dots
331
+ --------------------------------------------------------------*/
332
+ .wpcp-carousel-section ul.slick-dots {
333
+ list-style: none;
334
+ padding: 0 !important;
335
+ margin: 0;
336
+ text-align: center;
337
+ margin-top: 18px;
338
+ position: relative;
339
+ }
340
+ .wpcp-carousel-section ul.slick-dots li {
341
+ display: inline;
342
+ margin: 0;
343
+ }
344
+ .wpcp-carousel-section ul.slick-dots li button {
345
+ background-color: #cccccc;
346
+ border: 0 solid;
347
+ border-radius: 50%;
348
+ font-size: 0;
349
+ margin: 3px;
350
+ overflow: hidden;
351
+ padding: 0;
352
+ text-indent: -999px;
353
+ width: 12px;
354
+ height: 12px;
355
+ cursor: pointer;
356
+ }
357
+ .wpcp-carousel-section ul.slick-dots,
358
+ .wpcp-carousel-section ul.slick-dots li,
359
+ .wpcp-carousel-section ul.slick-dots li button {
360
+ line-height: 1 !important;
361
+ }
362
+ .wpcp-carousel-section ul.slick-dots li button:focus {
363
+ outline: none;
364
+ }
365
+
366
+ .wpcp-carousel-section ul.slick-dots li.slick-active button {
367
+ background-color: #666;
368
+ }
public/dynamic-style.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The style file for the WP Carousel pro.
4
+ *
5
+ * @since 3.0.0
6
+ * @package WP Carousel
7
+ * @subpackage wp-carousel-free/public
8
+ */
9
+
10
+ $section_title_dynamic_css = '';
11
+ if ( $section_title ) {
12
+ $section_title_dynamic_css .= '
13
+ .wpcp-wrapper-' . $post_id . ' .sp-wpcpro-section-title {
14
+ margin-bottom: ' . $section_title_margin . 'px;
15
+ }';
16
+ }
17
+
18
+ $slide_border = isset( $shortcode_data['wpcp_slide_border'] ) ? $shortcode_data['wpcp_slide_border'] : '';
19
+ $custom_css = sp_get_option( 'wpcp_custom_css' );
20
+
21
+ if ( 'product-carousel' == $carousel_type ) {
22
+ $wpcp_product_css = '.wpcp-carousel-section.sp-wpcp-' . $post_id . '.wpcp-product-carousel .wpcp-slide-image {
23
+ border: ' . $slide_border['width'] . 'px ' . $slide_border['style'] . ' ' . $slide_border['color'] . ';
24
+ }';
25
+ } else {
26
+ $wpcp_product_css = '.wpcp-carousel-section.sp-wpcp-' . $post_id . ' .wpcp-single-item {
27
+ border: ' . $slide_border['width'] . 'px ' . $slide_border['style'] . ' ' . $slide_border['color'] . ';
28
+ }';
29
+ }
30
+
31
+ // Nav Style.
32
+ $nav_dynamic_style = '';
33
+ $nav_dynamic_style .= '
34
+ .wpcp-carousel-section.sp-wpcp-' . $post_id . ' .slick-prev,
35
+ .wpcp-carousel-section.sp-wpcp-' . $post_id . ' .slick-next,
36
+ .wpcp-carousel-section.sp-wpcp-' . $post_id . ' .slick-prev:hover,
37
+ .wpcp-carousel-section.sp-wpcp-' . $post_id . ' .slick-next:hover {
38
+ background: none;
39
+ border: none;
40
+ font-size: 30px;
41
+ }
42
+ .wpcp-carousel-section.sp-wpcp-' . $post_id . ' .slick-prev i,
43
+ .wpcp-carousel-section.sp-wpcp-' . $post_id . ' .slick-next i {
44
+ color: ' . $shortcode_data['wpcp_nav_colors']['color1'] . ';
45
+ }
46
+ .wpcp-carousel-section.sp-wpcp-' . $post_id . ' .slick-prev i:hover,
47
+ .wpcp-carousel-section.sp-wpcp-' . $post_id . ' .slick-next i:hover {
48
+ color: ' . $shortcode_data['wpcp_nav_colors']['color2'] . ';
49
+ }';
50
+
51
+ /**
52
+ * The Dynamic Style CSS.
53
+ */
54
+ $the_wpcf_dynamic_css = '<style>';
55
+ $the_wpcf_dynamic_css .= $wpcp_product_css;
56
+ $the_wpcf_dynamic_css .= $section_title_dynamic_css;
57
+ $the_wpcf_dynamic_css .= $nav_dynamic_style;
58
+ $the_wpcf_dynamic_css .= '
59
+ .wpcp-carousel-section.sp-wpcp-' . $post_id . ' ul.slick-dots li button {
60
+ background-color: ' . $shortcode_data['wpcp_pagination_color']['color1'] . ';
61
+ }
62
+ .wpcp-carousel-section.sp-wpcp-' . $post_id . ' ul.slick-dots li.slick-active button {
63
+ background-color: ' . $shortcode_data['wpcp_pagination_color']['color2'] . ';
64
+ }';
65
+ if ( 'hide_mobile' === $wpcp_arrows ) {
66
+ $the_wpcf_dynamic_css .= '
67
+ @media screen and (max-width: 479px) {
68
+ .wpcp-carousel-section.nav-vertical-center {
69
+ padding: 0;
70
+ }
71
+ }';
72
+ }
73
+ $the_wpcf_dynamic_css .= $custom_css;
74
+ $the_wpcf_dynamic_css .= '</style>';
{assets → public}/fonts/FontAwesome.otf RENAMED
File without changes
{assets → public}/fonts/fontawesome-webfont.eot RENAMED
File without changes
{assets → public}/fonts/fontawesome-webfont.svg RENAMED
File without changes
{assets → public}/fonts/fontawesome-webfont.ttf RENAMED
File without changes
{assets → public}/fonts/fontawesome-webfont.woff RENAMED
File without changes
{assets → public}/fonts/fontawesome-webfont.woff2 RENAMED
File without changes
public/index.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php // Silence is golden.
public/js/slick.js ADDED
@@ -0,0 +1,3037 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ _ _ _ _
3
+ ___| (_) ___| | __ (_)___
4
+ / __| | |/ __| |/ / | / __|
5
+ \__ \ | | (__| < _ | \__ \
6
+ |___/_|_|\___|_|\_(_)/ |___/
7
+ |__/
8
+
9
+ Version: 1.9.0
10
+ Author: Ken Wheeler
11
+ Website: http://kenwheeler.github.io
12
+ Docs: http://kenwheeler.github.io/slick
13
+ Repo: http://github.com/kenwheeler/slick
14
+ Issues: http://github.com/kenwheeler/slick/issues
15
+
16
+ */
17
+ /* global window, document, define, jQuery, setInterval, clearInterval */
18
+ ;(function(factory) {
19
+ 'use strict';
20
+ if (typeof define === 'function' && define.amd) {
21
+ define(['jquery'], factory);
22
+ } else if (typeof exports !== 'undefined') {
23
+ module.exports = factory(require('jquery'));
24
+ } else {
25
+ factory(jQuery);
26
+ }
27
+
28
+ }(function($) {
29
+ 'use strict';
30
+ var Slick = window.Slick || {};
31
+
32
+ Slick = (function() {
33
+
34
+ var instanceUid = 0;
35
+
36
+ function Slick(element, settings) {
37
+
38
+ var _ = this, dataSettings;
39
+
40
+ _.defaults = {
41
+ accessibility: true,
42
+ adaptiveHeight: false,
43
+ appendArrows: $(element),
44
+ appendDots: $(element),
45
+ arrows: true,
46
+ asNavFor: null,
47
+ prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
48
+ nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
49
+ autoplay: false,
50
+ autoplaySpeed: 3000,
51
+ centerMode: false,
52
+ centerPadding: '50px',
53
+ cssEase: 'ease',
54
+ customPaging: function(slider, i) {
55
+ return $('<button type="button" />').text(i + 1);
56
+ },
57
+ dots: false,
58
+ dotsClass: 'slick-dots',
59
+ draggable: true,
60
+ easing: 'linear',
61
+ edgeFriction: 0.35,
62
+ fade: false,
63
+ focusOnSelect: false,
64
+ focusOnChange: false,
65
+ infinite: true,
66
+ initialSlide: 0,
67
+ lazyLoad: 'ondemand',
68
+ mobileFirst: false,
69
+ pauseOnHover: true,
70
+ pauseOnFocus: true,
71
+ pauseOnDotsHover: false,
72
+ respondTo: 'window',
73
+ responsive: null,
74
+ rows: 1,
75
+ rtl: false,
76
+ slide: '',
77
+ slidesPerRow: 1,
78
+ slidesToShow: 1,
79
+ slidesToScroll: 1,
80
+ speed: 500,
81
+ swipe: true,
82
+ swipeToSlide: false,
83
+ touchMove: true,
84
+ touchThreshold: 5,
85
+ useCSS: true,
86
+ useTransform: true,
87
+ variableWidth: false,
88
+ vertical: false,
89
+ verticalSwiping: false,
90
+ waitForAnimate: true,
91
+ zIndex: 1000
92
+ };
93
+
94
+ _.initials = {
95
+ animating: false,
96
+ dragging: false,
97
+ autoPlayTimer: null,
98
+ currentDirection: 0,
99
+ currentLeft: null,
100
+ currentSlide: 0,
101
+ direction: 1,
102
+ $dots: null,
103
+ listWidth: null,
104
+ listHeight: null,
105
+ loadIndex: 0,
106
+ $nextArrow: null,
107
+ $prevArrow: null,
108
+ scrolling: false,
109
+ slideCount: null,
110
+ slideWidth: null,
111
+ $slideTrack: null,
112
+ $slides: null,
113
+ sliding: false,
114
+ slideOffset: 0,
115
+ swipeLeft: null,
116
+ swiping: false,
117
+ $list: null,
118
+ touchObject: {},
119
+ transformsEnabled: false,
120
+ unslicked: false
121
+ };
122
+
123
+ $.extend(_, _.initials);
124
+
125
+ _.activeBreakpoint = null;
126
+ _.animType = null;
127
+ _.animProp = null;
128
+ _.breakpoints = [];
129
+ _.breakpointSettings = [];
130
+ _.cssTransitions = false;
131
+ _.focussed = false;
132
+ _.interrupted = false;
133
+ _.hidden = 'hidden';
134
+ _.paused = true;
135
+ _.positionProp = null;
136
+ _.respondTo = null;
137
+ _.rowCount = 1;
138
+ _.shouldClick = true;
139
+ _.$slider = $(element);
140
+ _.$slidesCache = null;
141
+ _.transformType = null;
142
+ _.transitionType = null;
143
+ _.visibilityChange = 'visibilitychange';
144
+ _.windowWidth = 0;
145
+ _.windowTimer = null;
146
+
147
+ dataSettings = $(element).data('slick') || {};
148
+
149
+ _.options = $.extend({}, _.defaults, settings, dataSettings);
150
+
151
+ _.currentSlide = _.options.initialSlide;
152
+
153
+ _.originalSettings = _.options;
154
+
155
+ if (typeof document.mozHidden !== 'undefined') {
156
+ _.hidden = 'mozHidden';
157
+ _.visibilityChange = 'mozvisibilitychange';
158
+ } else if (typeof document.webkitHidden !== 'undefined') {
159
+ _.hidden = 'webkitHidden';
160
+ _.visibilityChange = 'webkitvisibilitychange';
161
+ }
162
+
163
+ _.autoPlay = $.proxy(_.autoPlay, _);
164
+ _.autoPlayClear = $.proxy(_.autoPlayClear, _);
165
+ _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
166
+ _.changeSlide = $.proxy(_.changeSlide, _);
167
+ _.clickHandler = $.proxy(_.clickHandler, _);
168
+ _.selectHandler = $.proxy(_.selectHandler, _);
169
+ _.setPosition = $.proxy(_.setPosition, _);
170
+ _.swipeHandler = $.proxy(_.swipeHandler, _);
171
+ _.dragHandler = $.proxy(_.dragHandler, _);
172
+ _.keyHandler = $.proxy(_.keyHandler, _);
173
+
174
+ _.instanceUid = instanceUid++;
175
+
176
+ // A simple way to check for HTML strings
177
+ // Strict HTML recognition (must start with <)
178
+ // Extracted from jQuery v1.11 source
179
+ _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
180
+
181
+
182
+ _.registerBreakpoints();
183
+ _.init(true);
184
+
185
+ }
186
+
187
+ return Slick;
188
+
189
+ }());
190
+
191
+ Slick.prototype.activateADA = function() {
192
+ var _ = this;
193
+
194
+ _.$slideTrack.find('.slick-active').attr({
195
+ 'aria-hidden': 'false'
196
+ }).find('a, input, button, select').attr({
197
+ 'tabindex': '0'
198
+ });
199
+
200
+ };
201
+
202
+ Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
203
+
204
+ var _ = this;
205
+
206
+ if (typeof(index) === 'boolean') {
207
+ addBefore = index;
208
+ index = null;
209
+ } else if (index < 0 || (index >= _.slideCount)) {
210
+ return false;
211
+ }
212
+
213
+ _.unload();
214
+
215
+ if (typeof(index) === 'number') {
216
+ if (index === 0 && _.$slides.length === 0) {
217
+ $(markup).appendTo(_.$slideTrack);
218
+ } else if (addBefore) {
219
+ $(markup).insertBefore(_.$slides.eq(index));
220
+ } else {
221
+ $(markup).insertAfter(_.$slides.eq(index));
222
+ }
223
+ } else {
224
+ if (addBefore === true) {
225
+ $(markup).prependTo(_.$slideTrack);
226
+ } else {
227
+ $(markup).appendTo(_.$slideTrack);
228
+ }
229
+ }
230
+
231
+ _.$slides = _.$slideTrack.children(this.options.slide);
232
+
233
+ _.$slideTrack.children(this.options.slide).detach();
234
+
235
+ _.$slideTrack.append(_.$slides);
236
+
237
+ _.$slides.each(function(index, element) {
238
+ $(element).attr('data-slick-index', index);
239
+ });
240
+
241
+ _.$slidesCache = _.$slides;
242
+
243
+ _.reinit();
244
+
245
+ };
246
+
247
+ Slick.prototype.animateHeight = function() {
248
+ var _ = this;
249
+ if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
250
+ var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
251
+ _.$list.animate({
252
+ height: targetHeight
253
+ }, _.options.speed);
254
+ }
255
+ };
256
+
257
+ Slick.prototype.animateSlide = function(targetLeft, callback) {
258
+
259
+ var animProps = {},
260
+ _ = this;
261
+
262
+ _.animateHeight();
263
+
264
+ if (_.options.rtl === true && _.options.vertical === false) {
265
+ targetLeft = -targetLeft;
266
+ }
267
+ if (_.transformsEnabled === false) {
268
+ if (_.options.vertical === false) {
269
+ _.$slideTrack.animate({
270
+ left: targetLeft
271
+ }, _.options.speed, _.options.easing, callback);
272
+ } else {
273
+ _.$slideTrack.animate({
274
+ top: targetLeft
275
+ }, _.options.speed, _.options.easing, callback);
276
+ }
277
+
278
+ } else {
279
+
280
+ if (_.cssTransitions === false) {
281
+ if (_.options.rtl === true) {
282
+ _.currentLeft = -(_.currentLeft);
283
+ }
284
+ $({
285
+ animStart: _.currentLeft
286
+ }).animate({
287
+ animStart: targetLeft
288
+ }, {
289
+ duration: _.options.speed,
290
+ easing: _.options.easing,
291
+ step: function(now) {
292
+ now = Math.ceil(now);
293
+ if (_.options.vertical === false) {
294
+ animProps[_.animType] = 'translate(' +
295
+ now + 'px, 0px)';
296
+ _.$slideTrack.css(animProps);
297
+ } else {
298
+ animProps[_.animType] = 'translate(0px,' +
299
+ now + 'px)';
300
+ _.$slideTrack.css(animProps);
301
+ }
302
+ },
303
+ complete: function() {
304
+ if (callback) {
305
+ callback.call();
306
+ }
307
+ }
308
+ });
309
+
310
+ } else {
311
+
312
+ _.applyTransition();
313
+ targetLeft = Math.ceil(targetLeft);
314
+
315
+ if (_.options.vertical === false) {
316
+ animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
317
+ } else {
318
+ animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
319
+ }
320
+ _.$slideTrack.css(animProps);
321
+
322
+ if (callback) {
323
+ setTimeout(function() {
324
+
325
+ _.disableTransition();
326
+
327
+ callback.call();
328
+ }, _.options.speed);
329
+ }
330
+
331
+ }
332
+
333
+ }
334
+
335
+ };
336
+
337
+ Slick.prototype.getNavTarget = function() {
338
+
339
+ var _ = this,
340
+ asNavFor = _.options.asNavFor;
341
+
342
+ if ( asNavFor && asNavFor !== null ) {
343
+ asNavFor = $(asNavFor).not(_.$slider);
344
+ }
345
+
346
+ return asNavFor;
347
+
348
+ };
349
+
350
+ Slick.prototype.asNavFor = function(index) {
351
+
352
+ var _ = this,
353
+ asNavFor = _.getNavTarget();
354
+
355
+ if ( asNavFor !== null && typeof asNavFor === 'object' ) {
356
+ asNavFor.each(function() {
357
+ var target = $(this).slick('getSlick');
358
+ if(!target.unslicked) {
359
+ target.slideHandler(index, true);
360
+ }
361
+ });
362
+ }
363
+
364
+ };
365
+
366
+ Slick.prototype.applyTransition = function(slide) {
367
+
368
+ var _ = this,
369
+ transition = {};
370
+
371
+ if (_.options.fade === false) {
372
+ transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
373
+ } else {
374
+ transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
375
+ }
376
+
377
+ if (_.options.fade === false) {
378
+ _.$slideTrack.css(transition);
379
+ } else {
380
+ _.$slides.eq(slide).css(transition);
381
+ }
382
+
383
+ };
384
+
385
+ Slick.prototype.autoPlay = function() {
386
+
387
+ var _ = this;
388
+
389
+ _.autoPlayClear();
390
+
391
+ if ( _.slideCount > _.options.slidesToShow ) {
392
+ _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
393
+ }
394
+
395
+ };
396
+
397
+ Slick.prototype.autoPlayClear = function() {
398
+
399
+ var _ = this;
400
+
401
+ if (_.autoPlayTimer) {
402
+ clearInterval(_.autoPlayTimer);
403
+ }
404
+
405
+ };
406
+
407
+ Slick.prototype.autoPlayIterator = function() {
408
+
409
+ var _ = this,
410
+ slideTo = _.currentSlide + _.options.slidesToScroll;
411
+
412
+ if ( !_.paused && !_.interrupted && !_.focussed ) {
413
+
414
+ if ( _.options.infinite === false ) {
415
+
416
+ if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
417
+ _.direction = 0;
418
+ }
419
+
420
+ else if ( _.direction === 0 ) {
421
+
422
+ slideTo = _.currentSlide - _.options.slidesToScroll;
423
+
424
+ if ( _.currentSlide - 1 === 0 ) {
425
+ _.direction = 1;
426
+ }
427
+
428
+ }
429
+
430
+ }
431
+
432
+ _.slideHandler( slideTo );
433
+
434
+ }
435
+
436
+ };
437
+
438
+ Slick.prototype.buildArrows = function() {
439
+
440
+ var _ = this;
441
+
442
+ if (_.options.arrows === true ) {
443
+
444
+ _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
445
+ _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');
446
+
447
+ if( _.slideCount > _.options.slidesToShow ) {
448
+
449
+ _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
450
+ _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
451
+
452
+ if (_.htmlExpr.test(_.options.prevArrow)) {
453
+ _.$prevArrow.prependTo(_.options.appendArrows);
454
+ }
455
+
456
+ if (_.htmlExpr.test(_.options.nextArrow)) {
457
+ _.$nextArrow.appendTo(_.options.appendArrows);
458
+ }
459
+
460
+ if (_.options.infinite !== true) {
461
+ _.$prevArrow
462
+ .addClass('slick-disabled')
463
+ .attr('aria-disabled', 'true');
464
+ }
465
+
466
+ } else {
467
+
468
+ _.$prevArrow.add( _.$nextArrow )
469
+
470
+ .addClass('slick-hidden')
471
+ .attr({
472
+ 'aria-disabled': 'true',
473
+ 'tabindex': '-1'
474
+ });
475
+
476
+ }
477
+
478
+ }
479
+
480
+ };
481
+
482
+ Slick.prototype.buildDots = function() {
483
+
484
+ var _ = this,
485
+ i, dot;
486
+
487
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
488
+
489
+ _.$slider.addClass('slick-dotted');
490
+
491
+ dot = $('<ul />').addClass(_.options.dotsClass);
492
+
493
+ for (i = 0; i <= _.getDotCount(); i += 1) {
494
+ dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
495
+ }
496
+
497
+ _.$dots = dot.appendTo(_.options.appendDots);
498
+
499
+ _.$dots.find('li').first().addClass('slick-active');
500
+
501
+ }
502
+
503
+ };
504
+
505
+ Slick.prototype.buildOut = function() {
506
+
507
+ var _ = this;
508
+
509
+ _.$slides =
510
+ _.$slider
511
+ .children( _.options.slide + ':not(.slick-cloned)')
512
+ .addClass('slick-slide');
513
+
514
+ _.slideCount = _.$slides.length;
515
+
516
+ _.$slides.each(function(index, element) {
517
+ $(element)
518
+ .attr('data-slick-index', index)
519
+ .data('originalStyling', $(element).attr('style') || '');
520
+ });
521
+
522
+ _.$slider.addClass('slick-slider');
523
+
524
+ _.$slideTrack = (_.slideCount === 0) ?
525
+ $('<div class="slick-track"/>').appendTo(_.$slider) :
526
+ _.$slides.wrapAll('<div class="slick-track"/>').parent();
527
+
528
+ _.$list = _.$slideTrack.wrap(
529
+ '<div class="slick-list"/>').parent();
530
+ _.$slideTrack.css('opacity', 0);
531
+
532
+ if (_.options.centerMode === true || _.options.swipeToSlide === true) {
533
+ _.options.slidesToScroll = 1;
534
+ }
535
+
536
+ $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
537
+
538
+ _.setupInfinite();
539
+
540
+ _.buildArrows();
541
+
542
+ _.buildDots();
543
+
544
+ _.updateDots();
545
+
546
+
547
+ _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
548
+
549
+ if (_.options.draggable === true) {
550
+ _.$list.addClass('draggable');
551
+ }
552
+
553
+ };
554
+
555
+ Slick.prototype.buildRows = function() {
556
+
557
+ var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;
558
+
559
+ newSlides = document.createDocumentFragment();
560
+ originalSlides = _.$slider.children();
561
+
562
+ if(_.options.rows > 0) {
563
+
564
+ slidesPerSection = _.options.slidesPerRow * _.options.rows;
565
+ numOfSlides = Math.ceil(
566
+ originalSlides.length / slidesPerSection
567
+ );
568
+
569
+ for(a = 0; a < numOfSlides; a++){
570
+ var slide = document.createElement('div');
571
+ for(b = 0; b < _.options.rows; b++) {
572
+ var row = document.createElement('div');
573
+ for(c = 0; c < _.options.slidesPerRow; c++) {
574
+ var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
575
+ if (originalSlides.get(target)) {
576
+ row.appendChild(originalSlides.get(target));
577
+ }
578
+ }
579
+ slide.appendChild(row);
580
+ }
581
+ newSlides.appendChild(slide);
582
+ }
583
+
584
+ _.$slider.empty().append(newSlides);
585
+ _.$slider.children().children().children()
586
+ .css({
587
+ 'width':(100 / _.options.slidesPerRow) + '%',
588
+ 'display': 'inline-block'
589
+ });
590
+
591
+ }
592
+
593
+ };
594
+
595
+ Slick.prototype.checkResponsive = function(initial, forceUpdate) {
596
+
597
+ var _ = this,
598
+ breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
599
+ var sliderWidth = _.$slider.width();
600
+ var windowWidth = window.innerWidth || $(window).width();
601
+
602
+ if (_.respondTo === 'window') {
603
+ respondToWidth = windowWidth;
604
+ } else if (_.respondTo === 'slider') {
605
+ respondToWidth = sliderWidth;
606
+ } else if (_.respondTo === 'min') {
607
+ respondToWidth = Math.min(windowWidth, sliderWidth);
608
+ }
609
+
610
+ if ( _.options.responsive &&
611
+ _.options.responsive.length &&
612
+ _.options.responsive !== null) {
613
+
614
+ targetBreakpoint = null;
615
+
616
+ for (breakpoint in _.breakpoints) {
617
+ if (_.breakpoints.hasOwnProperty(breakpoint)) {
618
+ if (_.originalSettings.mobileFirst === false) {
619
+ if (respondToWidth < _.breakpoints[breakpoint]) {
620
+ targetBreakpoint = _.breakpoints[breakpoint];
621
+ }
622
+ } else {
623
+ if (respondToWidth > _.breakpoints[breakpoint]) {
624
+ targetBreakpoint = _.breakpoints[breakpoint];
625
+ }
626
+ }
627
+ }
628
+ }
629
+
630
+ if (targetBreakpoint !== null) {
631
+ if (_.activeBreakpoint !== null) {
632
+ if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
633
+ _.activeBreakpoint =
634
+ targetBreakpoint;
635
+ if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
636
+ _.unslick(targetBreakpoint);
637
+ } else {
638
+ _.options = $.extend({}, _.originalSettings,
639
+ _.breakpointSettings[
640
+ targetBreakpoint]);
641
+ if (initial === true) {
642
+ _.currentSlide = _.options.initialSlide;
643
+ }
644
+ _.refresh(initial);
645
+ }
646
+ triggerBreakpoint = targetBreakpoint;
647
+ }
648
+ } else {
649
+ _.activeBreakpoint = targetBreakpoint;
650
+ if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
651
+ _.unslick(targetBreakpoint);
652
+ } else {
653
+ _.options = $.extend({}, _.originalSettings,
654
+ _.breakpointSettings[
655
+ targetBreakpoint]);
656
+ if (initial === true) {
657
+ _.currentSlide = _.options.initialSlide;
658
+ }
659
+ _.refresh(initial);
660
+ }
661
+ triggerBreakpoint = targetBreakpoint;
662
+ }
663
+ } else {
664
+ if (_.activeBreakpoint !== null) {
665
+ _.activeBreakpoint = null;
666
+ _.options = _.originalSettings;
667
+ if (initial === true) {
668
+ _.currentSlide = _.options.initialSlide;
669
+ }
670
+ _.refresh(initial);
671
+ triggerBreakpoint = targetBreakpoint;
672
+ }
673
+ }
674
+
675
+ // only trigger breakpoints during an actual break. not on initialize.
676
+ if( !initial && triggerBreakpoint !== false ) {
677
+ _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
678
+ }
679
+ }
680
+
681
+ };
682
+
683
+ Slick.prototype.changeSlide = function(event, dontAnimate) {
684
+
685
+ var _ = this,
686
+ $target = $(event.currentTarget),
687
+ indexOffset, slideOffset, unevenOffset;
688
+
689
+ // If target is a link, prevent default action.
690
+ if($target.is('a')) {
691
+ event.preventDefault();
692
+ }
693
+
694
+ // If target is not the <li> element (ie: a child), find the <li>.
695
+ if(!$target.is('li')) {
696
+ $target = $target.closest('li');
697
+ }
698
+
699
+ unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
700
+ indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
701
+
702
+ switch (event.data.message) {
703
+
704
+ case 'previous':
705
+ slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
706
+ if (_.slideCount > _.options.slidesToShow) {
707
+ _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
708
+ }
709
+ break;
710
+
711
+ case 'next':
712
+ slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
713
+ if (_.slideCount > _.options.slidesToShow) {
714
+ _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
715
+ }
716
+ break;
717
+
718
+ case 'index':
719
+ var index = event.data.index === 0 ? 0 :
720
+ event.data.index || $target.index() * _.options.slidesToScroll;
721
+
722
+ _.slideHandler(_.checkNavigable(index), false, dontAnimate);
723
+ $target.children().trigger('focus');
724
+ break;
725
+
726
+ default:
727
+ return;
728
+ }
729
+
730
+ };
731
+
732
+ Slick.prototype.checkNavigable = function(index) {
733
+
734
+ var _ = this,
735
+ navigables, prevNavigable;
736
+
737
+ navigables = _.getNavigableIndexes();
738
+ prevNavigable = 0;
739
+ if (index > navigables[navigables.length - 1]) {
740
+ index = navigables[navigables.length - 1];
741
+ } else {
742
+ for (var n in navigables) {
743
+ if (index < navigables[n]) {
744
+ index = prevNavigable;
745
+ break;
746
+ }
747
+ prevNavigable = navigables[n];
748
+ }
749
+ }
750
+
751
+ return index;
752
+ };
753
+
754
+ Slick.prototype.cleanUpEvents = function() {
755
+
756
+ var _ = this;
757
+
758
+ if (_.options.dots && _.$dots !== null) {
759
+
760
+ $('li', _.$dots)
761
+ .off('click.slick', _.changeSlide)
762
+ .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
763
+ .off('mouseleave.slick', $.proxy(_.interrupt, _, false));
764
+
765
+ if (_.options.accessibility === true) {
766
+ _.$dots.off('keydown.slick', _.keyHandler);
767
+ }
768
+ }
769
+
770
+ _.$slider.off('focus.slick blur.slick');
771
+
772
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
773
+ _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
774
+ _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);
775
+
776
+ if (_.options.accessibility === true) {
777
+ _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);
778
+ _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);
779
+ }
780
+ }
781
+
782
+ _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
783
+ _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
784
+ _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
785
+ _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);
786
+
787
+ _.$list.off('click.slick', _.clickHandler);
788
+
789
+ $(document).off(_.visibilityChange, _.visibility);
790
+
791
+ _.cleanUpSlideEvents();
792
+
793
+ if (_.options.accessibility === true) {
794
+ _.$list.off('keydown.slick', _.keyHandler);
795
+ }
796
+
797
+ if (_.options.focusOnSelect === true) {
798
+ $(_.$slideTrack).children().off('click.slick', _.selectHandler);
799
+ }
800
+
801
+ $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);
802
+
803
+ $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);
804
+
805
+ $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);
806
+
807
+ $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);
808
+
809
+ };
810
+
811
+ Slick.prototype.cleanUpSlideEvents = function() {
812
+
813
+ var _ = this;
814
+
815
+ _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
816
+ _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));
817
+
818
+ };
819
+
820
+ Slick.prototype.cleanUpRows = function() {
821
+
822
+ var _ = this, originalSlides;
823
+
824
+ if(_.options.rows > 0) {
825
+ originalSlides = _.$slides.children().children();
826
+ // originalSlides.removeAttr('style'); // ShapedPlugin (was removing inline style in mobile view.)
827
+ _.$slider.empty().append(originalSlides);
828
+ }
829
+
830
+ };
831
+
832
+ Slick.prototype.clickHandler = function(event) {
833
+
834
+ var _ = this;
835
+
836
+ if (_.shouldClick === false) {
837
+ event.stopImmediatePropagation();
838
+ event.stopPropagation();
839
+ event.preventDefault();
840
+ }
841
+
842
+ };
843
+
844
+ Slick.prototype.destroy = function(refresh) {
845
+
846
+ var _ = this;
847
+
848
+ _.autoPlayClear();
849
+
850
+ _.touchObject = {};
851
+
852
+ _.cleanUpEvents();
853
+
854
+ $('.slick-cloned', _.$slider).detach();
855
+
856
+ if (_.$dots) {
857
+ _.$dots.remove();
858
+ }
859
+
860
+ if ( _.$prevArrow && _.$prevArrow.length ) {
861
+
862
+ _.$prevArrow
863
+ .removeClass('slick-disabled slick-arrow slick-hidden')
864
+ .removeAttr('aria-hidden aria-disabled tabindex')
865
+ .css('display','');
866
+
867
+ if ( _.htmlExpr.test( _.options.prevArrow )) {
868
+ _.$prevArrow.remove();
869
+ }
870
+ }
871
+
872
+ if ( _.$nextArrow && _.$nextArrow.length ) {
873
+
874
+ _.$nextArrow
875
+ .removeClass('slick-disabled slick-arrow slick-hidden')
876
+ .removeAttr('aria-hidden aria-disabled tabindex')
877
+ .css('display','');
878
+
879
+ if ( _.htmlExpr.test( _.options.nextArrow )) {
880
+ _.$nextArrow.remove();
881
+ }
882
+ }
883
+
884
+
885
+ if (_.$slides) {
886
+
887
+ _.$slides
888
+ .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
889
+ .removeAttr('aria-hidden')
890
+ .removeAttr('data-slick-index')
891
+ .each(function(){
892
+ $(this).attr('style', $(this).data('originalStyling'));
893
+ });
894
+
895
+ _.$slideTrack.children(this.options.slide).detach();
896
+
897
+ _.$slideTrack.detach();
898
+
899
+ _.$list.detach();
900
+
901
+ _.$slider.append(_.$slides);
902
+ }
903
+
904
+ _.cleanUpRows();
905
+
906
+ _.$slider.removeClass('slick-slider');
907
+ _.$slider.removeClass('slick-initialized');
908
+ _.$slider.removeClass('slick-dotted');
909
+
910
+ _.unslicked = true;
911
+
912
+ if(!refresh) {
913
+ _.$slider.trigger('destroy', [_]);
914
+ }
915
+
916
+ };
917
+
918
+ Slick.prototype.disableTransition = function(slide) {
919
+
920
+ var _ = this,
921
+ transition = {};
922
+
923
+ transition[_.transitionType] = '';
924
+
925
+ if (_.options.fade === false) {
926
+ _.$slideTrack.css(transition);
927
+ } else {
928
+ _.$slides.eq(slide).css(transition);
929
+ }
930
+
931
+ };
932
+
933
+ Slick.prototype.fadeSlide = function(slideIndex, callback) {
934
+
935
+ var _ = this;
936
+
937
+ if (_.cssTransitions === false) {
938
+
939
+ _.$slides.eq(slideIndex).css({
940
+ zIndex: _.options.zIndex
941
+ });
942
+
943
+ _.$slides.eq(slideIndex).animate({
944
+ opacity: 1
945
+ }, _.options.speed, _.options.easing, callback);
946
+
947
+ } else {
948
+
949
+ _.applyTransition(slideIndex);
950
+
951
+ _.$slides.eq(slideIndex).css({
952
+ opacity: 1,
953
+ zIndex: _.options.zIndex
954
+ });
955
+
956
+ if (callback) {
957
+ setTimeout(function() {
958
+
959
+ _.disableTransition(slideIndex);
960
+
961
+ callback.call();
962
+ }, _.options.speed);
963
+ }
964
+
965
+ }
966
+
967
+ };
968
+
969
+ Slick.prototype.fadeSlideOut = function(slideIndex) {
970
+
971
+ var _ = this;
972
+
973
+ if (_.cssTransitions === false) {
974
+
975
+ _.$slides.eq(slideIndex).animate({
976
+ opacity: 0,
977
+ zIndex: _.options.zIndex - 2
978
+ }, _.options.speed, _.options.easing);
979
+
980
+ } else {
981
+
982
+ _.applyTransition(slideIndex);
983
+
984
+ _.$slides.eq(slideIndex).css({
985
+ opacity: 0,
986
+ zIndex: _.options.zIndex - 2
987
+ });
988
+
989
+ }
990
+
991
+ };
992
+
993
+ Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
994
+
995
+ var _ = this;
996
+
997
+ if (filter !== null) {
998
+
999
+ _.$slidesCache = _.$slides;
1000
+
1001
+ _.unload();
1002
+
1003
+ _.$slideTrack.children(this.options.slide).detach();
1004
+
1005
+ _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
1006
+
1007
+ _.reinit();
1008
+
1009
+ }
1010
+
1011
+ };
1012
+
1013
+ Slick.prototype.focusHandler = function() {
1014
+
1015
+ var _ = this;
1016
+
1017
+ // If any child element receives focus within the slider we need to pause the autoplay
1018
+ _.$slider
1019
+ .off('focus.slick blur.slick')
1020
+ .on(
1021
+ 'focus.slick',
1022
+ '*',
1023
+ function(event) {
1024
+ var $sf = $(this);
1025
+
1026
+ setTimeout(function() {
1027
+ if( _.options.pauseOnFocus ) {
1028
+ if ($sf.is(':focus')) {
1029
+ _.focussed = true;
1030
+ _.autoPlay();
1031
+ }
1032
+ }
1033
+ }, 0);
1034
+ }
1035
+ ).on(
1036
+ 'blur.slick',
1037
+ '*',
1038
+ function(event) {
1039
+ var $sf = $(this);
1040
+
1041
+ // When a blur occurs on any elements within the slider we become unfocused
1042
+ if( _.options.pauseOnFocus ) {
1043
+ _.focussed = false;
1044
+ _.autoPlay();
1045
+ }
1046
+ }
1047
+ );
1048
+ };
1049
+
1050
+ Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
1051
+
1052
+ var _ = this;
1053
+ return _.currentSlide;
1054
+
1055
+ };
1056
+
1057
+ Slick.prototype.getDotCount = function() {
1058
+
1059
+ var _ = this;
1060
+
1061
+ var breakPoint = 0;
1062
+ var counter = 0;
1063
+ var pagerQty = 0;
1064
+
1065
+ if (_.options.infinite === true) {
1066
+ if (_.slideCount <= _.options.slidesToShow) {
1067
+ ++pagerQty;
1068
+ } else {
1069
+ while (breakPoint < _.slideCount) {
1070
+ ++pagerQty;
1071
+ breakPoint = counter + _.options.slidesToScroll;
1072
+ counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1073
+ }
1074
+ }
1075
+ } else if (_.options.centerMode === true) {
1076
+ pagerQty = _.slideCount;
1077
+ } else if(!_.options.asNavFor) {
1078
+ pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
1079
+ }else {
1080
+ while (breakPoint < _.slideCount) {
1081
+ ++pagerQty;
1082
+ breakPoint = counter + _.options.slidesToScroll;
1083
+ counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1084
+ }
1085
+ }
1086
+
1087
+ return pagerQty - 1;
1088
+
1089
+ };
1090
+
1091
+ Slick.prototype.getLeft = function(slideIndex) {
1092
+
1093
+ var _ = this,
1094
+ targetLeft,
1095
+ verticalHeight,
1096
+ verticalOffset = 0,
1097
+ targetSlide,
1098
+ coef;
1099
+
1100
+ _.slideOffset = 0;
1101
+ verticalHeight = _.$slides.first().outerHeight(true);
1102
+
1103
+ if (_.options.infinite === true) {
1104
+ if (_.slideCount > _.options.slidesToShow) {
1105
+ _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
1106
+ coef = -1
1107
+
1108
+ if (_.options.vertical === true && _.options.centerMode === true) {
1109
+ if (_.options.slidesToShow === 2) {
1110
+ coef = -1.5;
1111
+ } else if (_.options.slidesToShow === 1) {
1112
+ coef = -2
1113
+ }
1114
+ }
1115
+ verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;
1116
+ }
1117
+ if (_.slideCount % _.options.slidesToScroll !== 0) {
1118
+ if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
1119
+ if (slideIndex > _.slideCount) {
1120
+ _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
1121
+ verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
1122
+ } else {
1123
+ _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
1124
+ verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
1125
+ }
1126
+ }
1127
+ }
1128
+ } else {
1129
+ if (slideIndex + _.options.slidesToShow > _.slideCount) {
1130
+ _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
1131
+ verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
1132
+ }
1133
+ }
1134
+
1135
+ if (_.slideCount <= _.options.slidesToShow) {
1136
+ _.slideOffset = 0;
1137
+ verticalOffset = 0;
1138
+ }
1139
+
1140
+ if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {
1141
+ _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);
1142
+ } else if (_.options.centerMode === true && _.options.infinite === true) {
1143
+ _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
1144
+ } else if (_.options.centerMode === true) {
1145
+ _.slideOffset = 0;
1146
+ _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
1147
+ }
1148
+
1149
+ if (_.options.vertical === false) {
1150
+ targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
1151
+ } else {
1152
+ targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
1153
+ }
1154
+
1155
+ if (_.options.variableWidth === true) {
1156
+
1157
+ if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1158
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1159
+ } else {
1160
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
1161
+ }
1162
+
1163
+ if (_.options.rtl === true) {
1164
+ if (targetSlide[0]) {
1165
+ targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1166
+ } else {
1167
+ targetLeft = 0;
1168
+ }
1169
+ } else {
1170
+ targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1171
+ }
1172
+
1173
+ if (_.options.centerMode === true) {
1174
+ if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1175
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1176
+ } else {
1177
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
1178
+ }
1179
+
1180
+ if (_.options.rtl === true) {
1181
+ if (targetSlide[0]) {
1182
+ targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1183
+ } else {
1184
+ targetLeft = 0;
1185
+ }
1186
+ } else {
1187
+ targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1188
+ }
1189
+
1190
+ targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
1191
+ }
1192
+ }
1193
+
1194
+ return targetLeft;
1195
+
1196
+ };
1197
+
1198
+ Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
1199
+
1200
+ var _ = this;
1201
+
1202
+ return _.options[option];
1203
+
1204
+ };
1205
+
1206
+ Slick.prototype.getNavigableIndexes = function() {
1207
+
1208
+ var _ = this,
1209
+ breakPoint = 0,
1210
+ counter = 0,
1211
+ indexes = [],
1212
+ max;
1213
+
1214
+ if (_.options.infinite === false) {
1215
+ max = _.slideCount;
1216
+ } else {
1217
+ breakPoint = _.options.slidesToScroll * -1;
1218
+ counter = _.options.slidesToScroll * -1;
1219
+ max = _.slideCount * 2;
1220
+ }
1221
+
1222
+ while (breakPoint < max) {
1223
+ indexes.push(breakPoint);
1224
+ breakPoint = counter + _.options.slidesToScroll;
1225
+ counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1226
+ }
1227
+
1228
+ return indexes;
1229
+
1230
+ };
1231
+
1232
+ Slick.prototype.getSlick = function() {
1233
+
1234
+ return this;
1235
+
1236
+ };
1237
+
1238
+ Slick.prototype.getSlideCount = function() {
1239
+
1240
+ var _ = this,
1241
+ slidesTraversed, swipedSlide, swipeTarget, centerOffset;
1242
+
1243
+ centerOffset = _.options.centerMode === true ? Math.floor(_.$list.width() / 2) : 0;
1244
+ swipeTarget = (_.swipeLeft * -1) + centerOffset;
1245
+
1246
+ if (_.options.swipeToSlide === true) {
1247
+
1248
+ _.$slideTrack.find('.slick-slide').each(function(index, slide) {
1249
+
1250
+ var slideOuterWidth, slideOffset, slideRightBoundary;
1251
+ slideOuterWidth = $(slide).outerWidth();
1252
+ slideOffset = slide.offsetLeft;
1253
+ if (_.options.centerMode !== true) {
1254
+ slideOffset += (slideOuterWidth / 2);
1255
+ }
1256
+
1257
+ slideRightBoundary = slideOffset + (slideOuterWidth);
1258
+
1259
+ if (swipeTarget < slideRightBoundary) {
1260
+ swipedSlide = slide;
1261
+ return false;
1262
+ }
1263
+ });
1264
+
1265
+ slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;
1266
+
1267
+ return slidesTraversed;
1268
+
1269
+ } else {
1270
+ return _.options.slidesToScroll;
1271
+ }
1272
+
1273
+ };
1274
+
1275
+ Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
1276
+
1277
+ var _ = this;
1278
+
1279
+ _.changeSlide({
1280
+ data: {
1281
+ message: 'index',
1282
+ index: parseInt(slide)
1283
+ }
1284
+ }, dontAnimate);
1285
+
1286
+ };
1287
+
1288
+ Slick.prototype.init = function(creation) {
1289
+
1290
+ var _ = this;
1291
+
1292
+ if (!$(_.$slider).hasClass('slick-initialized')) {
1293
+
1294
+ $(_.$slider).addClass('slick-initialized');
1295
+
1296
+ _.buildRows();
1297
+ _.buildOut();
1298
+ _.setProps();
1299
+ _.startLoad();
1300
+ _.loadSlider();
1301
+ _.initializeEvents();
1302
+ _.updateArrows();
1303
+ _.updateDots();
1304
+ _.checkResponsive(true);
1305
+ _.focusHandler();
1306
+
1307
+ }
1308
+
1309
+ if (creation) {
1310
+ _.$slider.trigger('init', [_]);
1311
+ }
1312
+
1313
+ if (_.options.accessibility === true) {
1314
+ _.initADA();
1315
+ }
1316
+
1317
+ if ( _.options.autoplay ) {
1318
+
1319
+ _.paused = false;
1320
+ _.autoPlay();
1321
+
1322
+ }
1323
+
1324
+ };
1325
+
1326
+ Slick.prototype.initADA = function() {
1327
+ var _ = this,
1328
+ numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),
1329
+ tabControlIndexes = _.getNavigableIndexes().filter(function(val) {
1330
+ return (val >= 0) && (val < _.slideCount);
1331
+ });
1332
+
1333
+ _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
1334
+ 'aria-hidden': 'true',
1335
+ 'tabindex': '-1'
1336
+ }).find('a, input, button, select').attr({
1337
+ 'tabindex': '-1'
1338
+ });
1339
+
1340
+ if (_.$dots !== null) {
1341
+ _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
1342
+ var slideControlIndex = tabControlIndexes.indexOf(i);
1343
+
1344
+ $(this).attr({
1345
+ 'role': 'tabpanel',
1346
+ 'id': 'slick-slide' + _.instanceUid + i,
1347
+ 'tabindex': -1
1348
+ });
1349
+
1350
+ if (slideControlIndex !== -1) {
1351
+ var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex
1352
+ if ($('#' + ariaButtonControl).length) {
1353
+ $(this).attr({
1354
+ 'aria-describedby': ariaButtonControl
1355
+ });
1356
+ }
1357
+ }
1358
+ });
1359
+
1360
+ _.$dots.attr('role', 'tablist').find('li').each(function(i) {
1361
+ var mappedSlideIndex = tabControlIndexes[i];
1362
+
1363
+ $(this).attr({
1364
+ 'role': 'presentation'
1365
+ });
1366
+
1367
+ $(this).find('button').first().attr({
1368
+ 'role': 'tab',
1369
+ 'id': 'slick-slide-control' + _.instanceUid + i,
1370
+ 'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,
1371
+ 'aria-label': (i + 1) + ' of ' + numDotGroups,
1372
+ 'aria-selected': null,
1373
+ 'tabindex': '-1'
1374
+ });
1375
+
1376
+ }).eq(_.currentSlide).find('button').attr({
1377
+ 'aria-selected': 'true',
1378
+ 'tabindex': '0'
1379
+ }).end();
1380
+ }
1381
+
1382
+ for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {
1383
+ if (_.options.focusOnChange) {
1384
+ _.$slides.eq(i).attr({'tabindex': '0'});
1385
+ } else {
1386
+ _.$slides.eq(i).removeAttr('tabindex');
1387
+ }
1388
+ }
1389
+
1390
+ _.activateADA();
1391
+
1392
+ };
1393
+
1394
+ Slick.prototype.initArrowEvents = function() {
1395
+
1396
+ var _ = this;
1397
+
1398
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1399
+ _.$prevArrow
1400
+ .off('click.slick')
1401
+ .on('click.slick', {
1402
+ message: 'previous'
1403
+ }, _.changeSlide);
1404
+ _.$nextArrow
1405
+ .off('click.slick')
1406
+ .on('click.slick', {
1407
+ message: 'next'
1408
+ }, _.changeSlide);
1409
+
1410
+ if (_.options.accessibility === true) {
1411
+ _.$prevArrow.on('keydown.slick', _.keyHandler);
1412
+ _.$nextArrow.on('keydown.slick', _.keyHandler);
1413
+ }
1414
+ }
1415
+
1416
+ };
1417
+
1418
+ Slick.prototype.initDotEvents = function() {
1419
+
1420
+ var _ = this;
1421
+
1422
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
1423
+ $('li', _.$dots).on('click.slick', {
1424
+ message: 'index'
1425
+ }, _.changeSlide);
1426
+
1427
+ if (_.options.accessibility === true) {
1428
+ _.$dots.on('keydown.slick', _.keyHandler);
1429
+ }
1430
+ }
1431
+
1432
+ if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {
1433
+
1434
+ $('li', _.$dots)
1435
+ .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
1436
+ .on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1437
+
1438
+ }
1439
+
1440
+ };
1441
+
1442
+ Slick.prototype.initSlideEvents = function() {
1443
+
1444
+ var _ = this;
1445
+
1446
+ if ( _.options.pauseOnHover ) {
1447
+
1448
+ _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
1449
+ _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1450
+
1451
+ }
1452
+
1453
+ };
1454
+
1455
+ Slick.prototype.initializeEvents = function() {
1456
+
1457
+ var _ = this;
1458
+
1459
+ _.initArrowEvents();
1460
+
1461
+ _.initDotEvents();
1462
+ _.initSlideEvents();
1463
+
1464
+ _.$list.on('touchstart.slick mousedown.slick', {
1465
+ action: 'start'
1466
+ }, _.swipeHandler);
1467
+ _.$list.on('touchmove.slick mousemove.slick', {
1468
+ action: 'move'
1469
+ }, _.swipeHandler);
1470
+ _.$list.on('touchend.slick mouseup.slick', {
1471
+ action: 'end'
1472
+ }, _.swipeHandler);
1473
+ _.$list.on('touchcancel.slick mouseleave.slick', {
1474
+ action: 'end'
1475
+ }, _.swipeHandler);
1476
+
1477
+ _.$list.on('click.slick', _.clickHandler);
1478
+
1479
+ $(document).on(_.visibilityChange, $.proxy(_.visibility, _));
1480
+
1481
+ if (_.options.accessibility === true) {
1482
+ _.$list.on('keydown.slick', _.keyHandler);
1483
+ }
1484
+
1485
+ if (_.options.focusOnSelect === true) {
1486
+ $(_.$slideTrack).children().on('click.slick', _.selectHandler);
1487
+ }
1488
+
1489
+ $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));
1490
+
1491
+ $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));
1492
+
1493
+ $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);
1494
+
1495
+ $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
1496
+ $(_.setPosition);
1497
+
1498
+ };
1499
+
1500
+ Slick.prototype.initUI = function() {
1501
+
1502
+ var _ = this;
1503
+
1504
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1505
+
1506
+ _.$prevArrow.show();
1507
+ _.$nextArrow.show();
1508
+
1509
+ }
1510
+
1511
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
1512
+
1513
+ _.$dots.show();
1514
+
1515
+ }
1516
+
1517
+ };
1518
+
1519
+ Slick.prototype.keyHandler = function(event) {
1520
+
1521
+ var _ = this;
1522
+ //Dont slide if the cursor is inside the form fields and arrow keys are pressed
1523
+ if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
1524
+ if (event.keyCode === 37 && _.options.accessibility === true) {
1525
+ _.changeSlide({
1526
+ data: {
1527
+ message: _.options.rtl === true ? 'next' : 'previous'
1528
+ }
1529
+ });
1530
+ } else if (event.keyCode === 39 && _.options.accessibility === true) {
1531
+ _.changeSlide({
1532
+ data: {
1533
+ message: _.options.rtl === true ? 'previous' : 'next'
1534
+ }
1535
+ });
1536
+ }
1537
+ }
1538
+
1539
+ };
1540
+
1541
+ Slick.prototype.lazyLoad = function() {
1542
+
1543
+ var _ = this,
1544
+ loadRange, cloneRange, rangeStart, rangeEnd;
1545
+
1546
+ function loadImages(imagesScope) {
1547
+
1548
+ $('img[data-lazy]', imagesScope).each(function() {
1549
+
1550
+ var image = $(this),
1551
+ imageSource = $(this).attr('data-lazy'),
1552
+ imageSrcSet = $(this).attr('data-srcset'),
1553
+ imageSizes = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),
1554
+ imageToLoad = document.createElement('img');
1555
+
1556
+ imageToLoad.onload = function() {
1557
+
1558
+ image
1559
+ .animate({ opacity: 0 }, 100, function() {
1560
+
1561
+ if (imageSrcSet) {
1562
+ image
1563
+ .attr('srcset', imageSrcSet );
1564
+
1565
+ if (imageSizes) {
1566
+ image
1567
+ .attr('sizes', imageSizes );
1568
+ }
1569
+ }
1570
+
1571
+ image
1572
+ .attr('src', imageSource)
1573
+ .animate({ opacity: 1 }, 200, function() {
1574
+ image
1575
+ .removeAttr('data-lazy data-srcset data-sizes')
1576
+ .removeClass('slick-loading');
1577
+ });
1578
+ _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
1579
+ });
1580
+
1581
+ };
1582
+
1583
+ imageToLoad.onerror = function() {
1584
+
1585
+ image
1586
+ .removeAttr( 'data-lazy' )
1587
+ .removeClass( 'slick-loading' )
1588
+ .addClass( 'slick-lazyload-error' );
1589
+
1590
+ _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
1591
+
1592
+ };
1593
+
1594
+ imageToLoad.src = imageSource;
1595
+
1596
+ });
1597
+
1598
+ }
1599
+
1600
+ if (_.options.centerMode === true) {
1601
+ if (_.options.infinite === true) {
1602
+ rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
1603
+ rangeEnd = rangeStart + _.options.slidesToShow + 2;
1604
+ } else {
1605
+ rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
1606
+ rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
1607
+ }
1608
+ } else {
1609
+ rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
1610
+ rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
1611
+ if (_.options.fade === true) {
1612
+ if (rangeStart > 0) rangeStart--;
1613
+ if (rangeEnd <= _.slideCount) rangeEnd++;
1614
+ }
1615
+ }
1616
+
1617
+ loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
1618
+
1619
+ if (_.options.lazyLoad === 'anticipated') {
1620
+ var prevSlide = rangeStart - 1,
1621
+ nextSlide = rangeEnd,
1622
+ $slides = _.$slider.find('.slick-slide');
1623
+
1624
+ for (var i = 0; i < _.options.slidesToScroll; i++) {
1625
+ if (prevSlide < 0) prevSlide = _.slideCount - 1;
1626
+ loadRange = loadRange.add($slides.eq(prevSlide));
1627
+ loadRange = loadRange.add($slides.eq(nextSlide));
1628
+ prevSlide--;
1629
+ nextSlide++;
1630
+ }
1631
+ }
1632
+
1633
+ loadImages(loadRange);
1634
+
1635
+ if (_.slideCount <= _.options.slidesToShow) {
1636
+ cloneRange = _.$slider.find('.slick-slide');
1637
+ loadImages(cloneRange);
1638
+ } else
1639
+ if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
1640
+ cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
1641
+ loadImages(cloneRange);
1642
+ } else if (_.currentSlide === 0) {
1643
+ cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
1644
+ loadImages(cloneRange);
1645
+ }
1646
+
1647
+ };
1648
+
1649
+ Slick.prototype.loadSlider = function() {
1650
+
1651
+ var _ = this;
1652
+
1653
+ _.setPosition();
1654
+
1655
+ _.$slideTrack.css({
1656
+ opacity: 1
1657
+ });
1658
+
1659
+ _.$slider.removeClass('slick-loading');
1660
+
1661
+ _.initUI();
1662
+
1663
+ if (_.options.lazyLoad === 'progressive') {
1664
+ _.progressiveLazyLoad();
1665
+ }
1666
+
1667
+ };
1668
+
1669
+ Slick.prototype.next = Slick.prototype.slickNext = function() {
1670
+
1671
+ var _ = this;
1672
+
1673
+ _.changeSlide({
1674
+ data: {
1675
+ message: 'next'
1676
+ }
1677
+ });
1678
+
1679
+ };
1680
+
1681
+ Slick.prototype.orientationChange = function() {
1682
+
1683
+ var _ = this;
1684
+
1685
+ _.checkResponsive();
1686
+ _.setPosition();
1687
+
1688
+ };
1689
+
1690
+ Slick.prototype.pause = Slick.prototype.slickPause = function() {
1691
+
1692
+ var _ = this;
1693
+
1694
+ _.autoPlayClear();
1695
+ _.paused = true;
1696
+
1697
+ };
1698
+
1699
+ Slick.prototype.play = Slick.prototype.slickPlay = function() {
1700
+
1701
+ var _ = this;
1702
+
1703
+ _.autoPlay();
1704
+ _.options.autoplay = true;
1705
+ _.paused = false;
1706
+ _.focussed = false;
1707
+ _.interrupted = false;
1708
+
1709
+ };
1710
+
1711
+ Slick.prototype.postSlide = function(index) {
1712
+
1713
+ var _ = this;
1714
+
1715
+ if( !_.unslicked ) {
1716
+
1717
+ _.$slider.trigger('afterChange', [_, index]);
1718
+
1719
+ _.animating = false;
1720
+
1721
+ if (_.slideCount > _.options.slidesToShow) {
1722
+ _.setPosition();
1723
+ }
1724
+
1725
+ _.swipeLeft = null;
1726
+
1727
+ if ( _.options.autoplay ) {
1728
+ _.autoPlay();
1729
+ }
1730
+
1731
+ if (_.options.accessibility === true) {
1732
+ _.initADA();
1733
+
1734
+ if (_.options.focusOnChange) {
1735
+ var $currentSlide = $(_.$slides.get(_.currentSlide));
1736
+ $currentSlide.attr('tabindex', 0).focus();
1737
+ }
1738
+ }
1739
+
1740
+ }
1741
+
1742
+ };
1743
+
1744
+ Slick.prototype.prev = Slick.prototype.slickPrev = function() {
1745
+
1746
+ var _ = this;
1747
+
1748
+ _.changeSlide({
1749
+ data: {
1750
+ message: 'previous'
1751
+ }
1752
+ });
1753
+
1754
+ };
1755
+
1756
+ Slick.prototype.preventDefault = function(event) {
1757
+
1758
+ event.preventDefault();
1759
+
1760
+ };
1761
+
1762
+ Slick.prototype.progressiveLazyLoad = function( tryCount ) {
1763
+
1764
+ tryCount = tryCount || 1;
1765
+
1766
+ var _ = this,
1767
+ $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
1768
+ image,
1769
+ imageSource,
1770
+ imageSrcSet,
1771
+ imageSizes,
1772
+ imageToLoad;
1773
+
1774
+ if ( $imgsToLoad.length ) {
1775
+
1776
+ image = $imgsToLoad.first();
1777
+ imageSource = image.attr('data-lazy');
1778
+ imageSrcSet = image.attr('data-srcset');
1779
+ imageSizes = image.attr('data-sizes') || _.$slider.attr('data-sizes');
1780
+ imageToLoad = document.createElement('img');
1781
+
1782
+ imageToLoad.onload = function() {
1783
+
1784
+ if (imageSrcSet) {
1785
+ image
1786
+ .attr('srcset', imageSrcSet );
1787
+
1788
+ if (imageSizes) {
1789
+ image
1790
+ .attr('sizes', imageSizes );
1791
+ }
1792
+ }
1793
+
1794
+ image
1795
+ .attr( 'src', imageSource )
1796
+ .removeAttr('data-lazy data-srcset data-sizes')
1797
+ .removeClass('slick-loading');
1798
+
1799
+ if ( _.options.adaptiveHeight === true ) {
1800
+ _.setPosition();
1801
+ }
1802
+
1803
+ _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
1804
+ _.progressiveLazyLoad();
1805
+
1806
+ };
1807
+
1808
+ imageToLoad.onerror = function() {
1809
+
1810
+ if ( tryCount < 3 ) {
1811
+
1812
+ /**
1813
+ * try to load the image 3 times,
1814
+ * leave a slight delay so we don't get
1815
+ * servers blocking the request.
1816
+ */
1817
+ setTimeout( function() {
1818
+ _.progressiveLazyLoad( tryCount + 1 );
1819
+ }, 500 );
1820
+
1821
+ } else {
1822
+
1823
+ image
1824
+ .removeAttr( 'data-lazy' )
1825
+ .removeClass( 'slick-loading' )
1826
+ .addClass( 'slick-lazyload-error' );
1827
+
1828
+ _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
1829
+
1830
+ _.progressiveLazyLoad();
1831
+
1832
+ }
1833
+
1834
+ };
1835
+
1836
+ imageToLoad.src = imageSource;
1837
+
1838
+ } else {
1839
+
1840
+ _.$slider.trigger('allImagesLoaded', [ _ ]);
1841
+
1842
+ }
1843
+
1844
+ };
1845
+
1846
+ Slick.prototype.refresh = function( initializing ) {
1847
+
1848
+ var _ = this, currentSlide, lastVisibleIndex;
1849
+
1850
+ lastVisibleIndex = _.slideCount - _.options.slidesToShow;
1851
+
1852
+ // in non-infinite sliders, we don't want to go past the
1853
+ // last visible index.
1854
+ if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
1855
+ _.currentSlide = lastVisibleIndex;
1856
+ }
1857
+
1858
+ // if less slides than to show, go to start.
1859
+ if ( _.slideCount <= _.options.slidesToShow ) {
1860
+ _.currentSlide = 0;
1861
+
1862
+ }
1863
+
1864
+ currentSlide = _.currentSlide;
1865
+
1866
+ _.destroy(true);
1867
+
1868
+ $.extend(_, _.initials, { currentSlide: currentSlide });
1869
+
1870
+ _.init();
1871
+
1872
+ if( !initializing ) {
1873
+
1874
+ _.changeSlide({
1875
+ data: {
1876
+ message: 'index',
1877
+ index: currentSlide
1878
+ }
1879
+ }, false);
1880
+
1881
+ }
1882
+
1883
+ };
1884
+
1885
+ Slick.prototype.registerBreakpoints = function() {
1886
+
1887
+ var _ = this, breakpoint, currentBreakpoint, l,
1888
+ responsiveSettings = _.options.responsive || null;
1889
+
1890
+ if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {
1891
+
1892
+ _.respondTo = _.options.respondTo || 'window';
1893
+
1894
+ for ( breakpoint in responsiveSettings ) {
1895
+
1896
+ l = _.breakpoints.length-1;
1897
+
1898
+ if (responsiveSettings.hasOwnProperty(breakpoint)) {
1899
+ currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
1900
+
1901
+ // loop through the breakpoints and cut out any existing
1902
+ // ones with the same breakpoint number, we don't want dupes.
1903
+ while( l >= 0 ) {
1904
+ if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
1905
+ _.breakpoints.splice(l,1);
1906
+ }
1907
+ l--;
1908
+ }
1909
+
1910
+ _.breakpoints.push(currentBreakpoint);
1911
+ _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
1912
+
1913
+ }
1914
+
1915
+ }
1916
+
1917
+ _.breakpoints.sort(function(a, b) {
1918
+ return ( _.options.mobileFirst ) ? a-b : b-a;
1919
+ });
1920
+
1921
+ }
1922
+
1923
+ };
1924
+
1925
+ Slick.prototype.reinit = function() {
1926
+
1927
+ var _ = this;
1928
+
1929
+ _.$slides =
1930
+ _.$slideTrack
1931
+ .children(_.options.slide)
1932
+ .addClass('slick-slide');
1933
+
1934
+ _.slideCount = _.$slides.length;
1935
+
1936
+ if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
1937
+ _.currentSlide = _.currentSlide - _.options.slidesToScroll;
1938
+ }
1939
+
1940
+ if (_.slideCount <= _.options.slidesToShow) {
1941
+ _.currentSlide = 0;
1942
+ }
1943
+
1944
+ _.registerBreakpoints();
1945
+
1946
+ _.setProps();
1947
+ _.setupInfinite();
1948
+ _.buildArrows();
1949
+ _.updateArrows();
1950
+ _.initArrowEvents();
1951
+ _.buildDots();
1952
+ _.updateDots();
1953
+ _.initDotEvents();
1954
+ _.cleanUpSlideEvents();
1955
+ _.initSlideEvents();
1956
+
1957
+ _.checkResponsive(false, true);
1958
+
1959
+ if (_.options.focusOnSelect === true) {
1960
+ $(_.$slideTrack).children().on('click.slick', _.selectHandler);
1961
+ }
1962
+
1963
+ _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
1964
+
1965
+ _.setPosition();
1966
+ _.focusHandler();
1967
+
1968
+ _.paused = !_.options.autoplay;
1969
+ _.autoPlay();
1970
+
1971
+ _.$slider.trigger('reInit', [_]);
1972
+
1973
+ };
1974
+
1975
+ Slick.prototype.resize = function() {
1976
+
1977
+ var _ = this;
1978
+
1979
+ if ($(window).width() !== _.windowWidth) {
1980
+ clearTimeout(_.windowDelay);
1981
+ _.windowDelay = window.setTimeout(function() {
1982
+ _.windowWidth = $(window).width();
1983
+ _.checkResponsive();
1984
+ if( !_.unslicked ) { _.setPosition(); }
1985
+ }, 50);
1986
+ }
1987
+ };
1988
+
1989
+ Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
1990
+
1991
+ var _ = this;
1992
+
1993
+ if (typeof(index) === 'boolean') {
1994
+ removeBefore = index;
1995
+ index = removeBefore === true ? 0 : _.slideCount - 1;
1996
+ } else {
1997
+ index = removeBefore === true ? --index : index;
1998
+ }
1999
+
2000
+ if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
2001
+ return false;
2002
+ }
2003
+
2004
+ _.unload();
2005
+
2006
+ if (removeAll === true) {
2007
+ _.$slideTrack.children().remove();
2008
+ } else {
2009
+ _.$slideTrack.children(this.options.slide).eq(index).remove();
2010
+ }
2011
+
2012
+ _.$slides = _.$slideTrack.children(this.options.slide);
2013
+
2014
+ _.$slideTrack.children(this.options.slide).detach();
2015
+
2016
+ _.$slideTrack.append(_.$slides);
2017
+
2018
+ _.$slidesCache = _.$slides;
2019
+
2020
+ _.reinit();
2021
+
2022
+ };
2023
+
2024
+ Slick.prototype.setCSS = function(position) {
2025
+
2026
+ var _ = this,
2027
+ positionProps = {},
2028
+ x, y;
2029
+
2030
+ if (_.options.rtl === true) {
2031
+ position = -position;
2032
+ }
2033
+ x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
2034
+ y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';
2035
+
2036
+ positionProps[_.positionProp] = position;
2037
+
2038
+ if (_.transformsEnabled === false) {
2039
+ _.$slideTrack.css(positionProps);
2040
+ } else {
2041
+ positionProps = {};
2042
+ if (_.cssTransitions === false) {
2043
+ positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
2044
+ _.$slideTrack.css(positionProps);
2045
+ } else {
2046
+ positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
2047
+ _.$slideTrack.css(positionProps);
2048
+ }
2049
+ }
2050
+
2051
+ };
2052
+
2053
+ Slick.prototype.setDimensions = function() {
2054
+
2055
+ var _ = this;
2056
+
2057
+ if (_.options.vertical === false) {
2058
+ if (_.options.centerMode === true) {
2059
+ _.$list.css({
2060
+ padding: ('0px ' + _.options.centerPadding)
2061
+ });
2062
+ }
2063
+ } else {
2064
+ _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
2065
+ if (_.options.centerMode === true) {
2066
+ _.$list.css({
2067
+ padding: (_.options.centerPadding + ' 0px')
2068
+ });
2069
+ }
2070
+ }
2071
+
2072
+ _.listWidth = _.$list.width();
2073
+ _.listHeight = _.$list.height();
2074
+
2075
+
2076
+ if (_.options.vertical === false && _.options.variableWidth === false) {
2077
+ _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
2078
+ _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));
2079
+
2080
+ } else if (_.options.variableWidth === true) {
2081
+ _.$slideTrack.width(5000 * _.slideCount);
2082
+ } else {
2083
+ _.slideWidth = Math.ceil(_.listWidth);
2084
+ _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
2085
+ }
2086
+
2087
+ var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
2088
+ if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);
2089
+
2090
+ };
2091
+
2092
+ Slick.prototype.setFade = function() {
2093
+
2094
+ var _ = this,
2095
+ targetLeft;
2096
+
2097
+ _.$slides.each(function(index, element) {
2098
+ targetLeft = (_.slideWidth * index) * -1;
2099
+ if (_.options.rtl === true) {
2100
+ $(element).css({
2101
+ position: 'relative',
2102
+ right: targetLeft,
2103
+ top: 0,
2104
+ zIndex: _.options.zIndex - 2,
2105
+ opacity: 0
2106
+ });
2107
+ } else {
2108
+ $(element).css({
2109
+ position: 'relative',
2110
+ left: targetLeft,
2111
+ top: 0,
2112
+ zIndex: _.options.zIndex - 2,
2113
+ opacity: 0
2114
+ });
2115
+ }
2116
+ });
2117
+
2118
+ _.$slides.eq(_.currentSlide).css({
2119
+ zIndex: _.options.zIndex - 1,
2120
+ opacity: 1
2121
+ });
2122
+
2123
+ };
2124
+
2125
+ Slick.prototype.setHeight = function() {
2126
+
2127
+ var _ = this;
2128
+
2129
+ if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
2130
+ var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
2131
+ _.$list.css('height', targetHeight);
2132
+ }
2133
+
2134
+ };
2135
+
2136
+ Slick.prototype.setOption =
2137
+ Slick.prototype.slickSetOption = function() {
2138
+
2139
+ /**
2140
+ * accepts arguments in format of:
2141
+ *
2142
+ * - for changing a single option's value:
2143
+ * .slick("setOption", option, value, refresh )
2144
+ *
2145
+ * - for changing a set of responsive options:
2146
+ * .slick("setOption", 'responsive', [{}, ...], refresh )
2147
+ *
2148
+ * - for updating multiple values at once (not responsive)
2149
+ * .slick("setOption", { 'option': value, ... }, refresh )
2150
+ */
2151
+
2152
+ var _ = this, l, item, option, value, refresh = false, type;
2153
+
2154
+ if( $.type( arguments[0] ) === 'object' ) {
2155
+
2156
+ option = arguments[0];
2157
+ refresh = arguments[1];
2158
+ type = 'multiple';
2159
+
2160
+ } else if ( $.type( arguments[0] ) === 'string' ) {
2161
+
2162
+ option = arguments[0];
2163
+ value = arguments[1];
2164
+ refresh = arguments[2];
2165
+
2166
+ if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {
2167
+
2168
+ type = 'responsive';
2169
+
2170
+ } else if ( typeof arguments[1] !== 'undefined' ) {
2171
+
2172
+ type = 'single';
2173
+
2174
+ }
2175
+
2176
+ }
2177
+
2178
+ if ( type === 'single' ) {
2179
+
2180
+ _.options[option] = value;
2181
+
2182
+
2183
+ } else if ( type === 'multiple' ) {
2184
+
2185
+ $.each( option , function( opt, val ) {
2186
+
2187
+ _.options[opt] = val;
2188
+
2189
+ });
2190
+
2191
+
2192
+ } else if ( type === 'responsive' ) {
2193
+
2194
+ for ( item in value ) {
2195
+
2196
+ if( $.type( _.options.responsive ) !== 'array' ) {
2197
+
2198
+ _.options.responsive = [ value[item] ];
2199
+
2200
+ } else {
2201
+
2202
+ l = _.options.responsive.length-1;
2203
+
2204
+ // loop through the responsive object and splice out duplicates.
2205
+ while( l >= 0 ) {
2206
+
2207
+ if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {
2208
+
2209
+ _.options.responsive.splice(l,1);
2210
+
2211
+ }
2212
+
2213
+ l--;
2214
+
2215
+ }
2216
+
2217
+ _.options.responsive.push( value[item] );
2218
+
2219
+ }
2220
+
2221
+ }
2222
+
2223
+ }
2224
+
2225
+ if ( refresh ) {
2226
+
2227
+ _.unload();
2228
+ _.reinit();
2229
+
2230
+ }
2231
+
2232
+ };
2233
+
2234
+ Slick.prototype.setPosition = function() {
2235
+
2236
+ var _ = this;
2237
+
2238
+ _.setDimensions();
2239
+
2240
+ _.setHeight();
2241
+
2242
+ if (_.options.fade === false) {
2243
+ _.setCSS(_.getLeft(_.currentSlide));
2244
+ } else {
2245
+ _.setFade();
2246
+ }
2247
+
2248
+ _.$slider.trigger('setPosition', [_]);
2249
+
2250
+ };
2251
+
2252
+ Slick.prototype.setProps = function() {
2253
+
2254
+ var _ = this,
2255
+ bodyStyle = document.body.style;
2256
+
2257
+ _.positionProp = _.options.vertical === true ? 'top' : 'left';
2258
+
2259
+ if (_.positionProp === 'top') {
2260
+ _.$slider.addClass('slick-vertical');
2261
+ } else {
2262
+ _.$slider.removeClass('slick-vertical');
2263
+ }
2264
+
2265
+ if (bodyStyle.WebkitTransition !== undefined ||
2266
+ bodyStyle.MozTransition !== undefined ||
2267
+ bodyStyle.msTransition !== undefined) {
2268
+ if (_.options.useCSS === true) {
2269
+ _.cssTransitions = true;
2270
+ }
2271
+ }
2272
+
2273
+ if ( _.options.fade ) {
2274
+ if ( typeof _.options.zIndex === 'number' ) {
2275
+ if( _.options.zIndex < 3 ) {
2276
+ _.options.zIndex = 3;
2277
+ }
2278
+ } else {
2279
+ _.options.zIndex = _.defaults.zIndex;
2280
+ }
2281
+ }
2282
+
2283
+ if (bodyStyle.OTransform !== undefined) {
2284
+ _.animType = 'OTransform';
2285
+ _.transformType = '-o-transform';
2286
+ _.transitionType = 'OTransition';
2287
+ if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2288
+ }
2289
+ if (bodyStyle.MozTransform !== undefined) {
2290
+ _.animType = 'MozTransform';
2291
+ _.transformType = '-moz-transform';
2292
+ _.transitionType = 'MozTransition';
2293
+ if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
2294
+ }
2295
+ if (bodyStyle.webkitTransform !== undefined) {
2296
+ _.animType = 'webkitTransform';
2297
+ _.transformType = '-webkit-transform';
2298
+ _.transitionType = 'webkitTransition';
2299
+ if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2300
+ }
2301
+ if (bodyStyle.msTransform !== undefined) {
2302
+ _.animType = 'msTransform';
2303
+ _.transformType = '-ms-transform';
2304
+ _.transitionType = 'msTransition';
2305
+ if (bodyStyle.msTransform === undefined) _.animType = false;
2306
+ }
2307
+ if (bodyStyle.transform !== undefined && _.animType !== false) {
2308
+ _.animType = 'transform';
2309
+ _.transformType = 'transform';
2310
+ _.transitionType = 'transition';
2311
+ }
2312
+ _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
2313
+ };
2314
+
2315
+
2316
+ Slick.prototype.setSlideClasses = function(index) {
2317
+
2318
+ var _ = this,
2319
+ centerOffset, allSlides, indexOffset, remainder;
2320
+
2321
+ allSlides = _.$slider
2322
+ .find('.slick-slide')
2323
+ .removeClass('slick-active slick-center slick-current')
2324
+ .attr('aria-hidden', 'true');
2325
+
2326
+ _.$slides
2327
+ .eq(index)
2328
+ .addClass('slick-current');
2329
+
2330
+ if (_.options.centerMode === true) {
2331
+
2332
+ var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;
2333
+
2334
+ centerOffset = Math.floor(_.options.slidesToShow / 2);
2335
+
2336
+ if (_.options.infinite === true) {
2337
+
2338
+ if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
2339
+ _.$slides
2340
+ .slice(index - centerOffset + evenCoef, index + centerOffset + 1)
2341
+ .addClass('slick-active')
2342
+ .attr('aria-hidden', 'false');
2343
+
2344
+ } else {
2345
+
2346
+ indexOffset = _.options.slidesToShow + index;
2347
+ allSlides
2348
+ .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)
2349
+ .addClass('slick-active')
2350
+ .attr('aria-hidden', 'false');
2351
+
2352
+ }
2353
+
2354
+ if (index === 0) {
2355
+
2356
+ allSlides
2357
+ .eq(allSlides.length - 1 - _.options.slidesToShow)
2358
+ .addClass('slick-center');
2359
+
2360
+ } else if (index === _.slideCount - 1) {
2361
+
2362
+ allSlides
2363
+ .eq(_.options.slidesToShow)
2364
+ .addClass('slick-center');
2365
+
2366
+ }
2367
+
2368
+ }
2369
+
2370
+ _.$slides
2371
+ .eq(index)
2372
+ .addClass('slick-center');
2373
+
2374
+ } else {
2375
+
2376
+ if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {
2377
+
2378
+ _.$slides
2379
+ .slice(index, index + _.options.slidesToShow)
2380
+ .addClass('slick-active')
2381
+ .attr('aria-hidden', 'false');
2382
+
2383
+ } else if (allSlides.length <= _.options.slidesToShow) {
2384
+
2385
+ allSlides
2386
+ .addClass('slick-active')
2387
+ .attr('aria-hidden', 'false');
2388
+
2389
+ } else {
2390
+
2391
+ remainder = _.slideCount % _.options.slidesToShow;
2392
+ indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
2393
+
2394
+ if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {
2395
+
2396
+ allSlides
2397
+ .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
2398
+ .addClass('slick-active')
2399
+ .attr('aria-hidden', 'false');
2400
+
2401
+ } else {
2402
+
2403
+ allSlides
2404
+ .slice(indexOffset, indexOffset + _.options.slidesToShow)
2405
+ .addClass('slick-active')
2406
+ .attr('aria-hidden', 'false');
2407
+
2408
+ }
2409
+
2410
+ }
2411
+
2412
+ }
2413
+
2414
+ if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {
2415
+ _.lazyLoad();
2416
+ }
2417
+ };
2418
+
2419
+ Slick.prototype.setupInfinite = function() {
2420
+
2421
+ var _ = this,
2422
+ i, slideIndex, infiniteCount;
2423
+
2424
+ if (_.options.fade === true) {
2425
+ _.options.centerMode = false;
2426
+ }
2427
+
2428
+ if (_.options.infinite === true && _.options.fade === false) {
2429
+
2430
+ slideIndex = null;
2431
+
2432
+ if (_.slideCount > _.options.slidesToShow) {
2433
+
2434
+ if (_.options.centerMode === true) {
2435
+ infiniteCount = _.options.slidesToShow + 1;
2436
+ } else {
2437
+ infiniteCount = _.options.slidesToShow;
2438
+ }
2439
+
2440
+ for (i = _.slideCount; i > (_.slideCount -
2441
+ infiniteCount); i -= 1) {
2442
+ slideIndex = i - 1;
2443
+ $(_.$slides[slideIndex]).clone(true).attr('id', '')
2444
+ .attr('data-slick-index', slideIndex - _.slideCount)
2445
+ .prependTo(_.$slideTrack).addClass('slick-cloned');
2446
+ }
2447
+ for (i = 0; i < infiniteCount + _.slideCount; i += 1) {
2448
+ slideIndex = i;
2449
+ $(_.$slides[slideIndex]).clone(true).attr('id', '')
2450
+ .attr('data-slick-index', slideIndex + _.slideCount)
2451
+ .appendTo(_.$slideTrack).addClass('slick-cloned');
2452
+ }
2453
+ _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
2454
+ $(this).attr('id', '');
2455
+ });
2456
+
2457
+ }
2458
+
2459
+ }
2460
+
2461
+ };
2462
+
2463
+ Slick.prototype.interrupt = function( toggle ) {
2464
+
2465
+ var _ = this;
2466
+
2467
+ if( !toggle ) {
2468
+ _.autoPlay();
2469
+ }
2470
+ _.interrupted = toggle;
2471
+
2472
+ };
2473
+
2474
+ Slick.prototype.selectHandler = function(event) {
2475
+
2476
+ var _ = this;
2477
+
2478
+ var targetElement =
2479
+ $(event.target).is('.slick-slide') ?
2480
+ $(event.target) :
2481
+ $(event.target).parents('.slick-slide');
2482
+
2483
+ var index = parseInt(targetElement.attr('data-slick-index'));
2484
+
2485
+ if (!index) index = 0;
2486
+
2487
+ if (_.slideCount <= _.options.slidesToShow) {
2488
+
2489
+ _.slideHandler(index, false, true);
2490
+ return;
2491
+
2492
+ }
2493
+
2494
+ _.slideHandler(index);
2495
+
2496
+ };
2497
+
2498
+ Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
2499
+
2500
+ var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
2501
+ _ = this, navTarget;
2502
+
2503
+ sync = sync || false;
2504
+
2505
+ if (_.animating === true && _.options.waitForAnimate === true) {
2506
+ return;
2507
+ }
2508
+
2509
+ if (_.options.fade === true && _.currentSlide === index) {
2510
+ return;
2511
+ }
2512
+
2513
+ if (sync === false) {
2514
+ _.asNavFor(index);
2515
+ }
2516
+
2517
+ targetSlide = index;
2518
+ targetLeft = _.getLeft(targetSlide);
2519
+ slideLeft = _.getLeft(_.currentSlide);
2520
+
2521
+ _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
2522
+
2523
+ if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
2524
+ if (_.options.fade === false) {
2525
+ targetSlide = _.currentSlide;
2526
+ if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
2527
+ _.animateSlide(slideLeft, function() {
2528
+ _.postSlide(targetSlide);
2529
+ });
2530
+ } else {
2531
+ _.postSlide(targetSlide);
2532
+ }
2533
+ }
2534
+ return;
2535
+ } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
2536
+ if (_.options.fade === false) {
2537
+ targetSlide = _.currentSlide;
2538
+ if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
2539
+ _.animateSlide(slideLeft, function() {
2540
+ _.postSlide(targetSlide);
2541
+ });
2542
+ } else {
2543
+ _.postSlide(targetSlide);
2544
+ }
2545
+ }
2546
+ return;
2547
+ }
2548
+
2549
+ if ( _.options.autoplay ) {
2550
+ clearInterval(_.autoPlayTimer);
2551
+ }
2552
+
2553
+ if (targetSlide < 0) {
2554
+ if (_.slideCount % _.options.slidesToScroll !== 0) {
2555
+ animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
2556
+ } else {
2557
+ animSlide = _.slideCount + targetSlide;
2558
+ }
2559
+ } else if (targetSlide >= _.slideCount) {
2560
+ if (_.slideCount % _.options.slidesToScroll !== 0) {
2561
+ animSlide = 0;
2562
+ } else {
2563
+ animSlide = targetSlide - _.slideCount;
2564
+ }
2565
+ } else {
2566
+ animSlide = targetSlide;
2567
+ }
2568
+
2569
+ _.animating = true;
2570
+
2571
+ _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);
2572
+
2573
+ oldSlide = _.currentSlide;
2574
+ _.currentSlide = animSlide;
2575
+
2576
+ _.setSlideClasses(_.currentSlide);
2577
+
2578
+ if ( _.options.asNavFor ) {
2579
+
2580
+ navTarget = _.getNavTarget();
2581
+ navTarget = navTarget.slick('getSlick');
2582
+
2583
+ if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
2584
+ navTarget.setSlideClasses(_.currentSlide);
2585
+ }
2586
+
2587
+ }
2588
+
2589
+ _.updateDots();
2590
+ _.updateArrows();
2591
+
2592
+ if (_.options.fade === true) {
2593
+ if (dontAnimate !== true) {
2594
+
2595
+ _.fadeSlideOut(oldSlide);
2596
+
2597
+ _.fadeSlide(animSlide, function() {
2598
+ _.postSlide(animSlide);
2599
+ });
2600
+
2601
+ } else {
2602
+ _.postSlide(animSlide);
2603
+ }
2604
+ _.animateHeight();
2605
+ return;
2606
+ }
2607
+
2608
+ if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
2609
+ _.animateSlide(targetLeft, function() {
2610
+ _.postSlide(animSlide);
2611
+ });
2612
+ } else {
2613
+ _.postSlide(animSlide);
2614
+ }
2615
+
2616
+ };
2617
+
2618
+ Slick.prototype.startLoad = function() {
2619
+
2620
+ var _ = this;
2621
+
2622
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
2623
+
2624
+ _.$prevArrow.hide();
2625
+ _.$nextArrow.hide();
2626
+
2627
+ }
2628
+
2629
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
2630
+
2631
+ _.$dots.hide();
2632
+
2633
+ }
2634
+
2635
+ _.$slider.addClass('slick-loading');
2636
+
2637
+ };
2638
+
2639
+ Slick.prototype.swipeDirection = function() {
2640
+
2641
+ var xDist, yDist, r, swipeAngle, _ = this;
2642
+
2643
+ xDist = _.touchObject.startX - _.touchObject.curX;
2644
+ yDist = _.touchObject.startY - _.touchObject.curY;
2645
+ r = Math.atan2(yDist, xDist);
2646
+
2647
+ swipeAngle = Math.round(r * 180 / Math.PI);
2648
+ if (swipeAngle < 0) {
2649
+ swipeAngle = 360 - Math.abs(swipeAngle);
2650
+ }
2651
+
2652
+ if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
2653
+ return (_.options.rtl === false ? 'left' : 'right');
2654
+ }
2655
+ if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
2656
+ return (_.options.rtl === false ? 'left' : 'right');
2657
+ }
2658
+ if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
2659
+ return (_.options.rtl === false ? 'right' : 'left');
2660
+ }
2661
+ if (_.options.verticalSwiping === true) {
2662
+ if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
2663
+ return 'down';
2664
+ } else {
2665
+ return 'up';
2666
+ }
2667
+ }
2668
+
2669
+ return 'vertical';
2670
+
2671
+ };
2672
+
2673
+ Slick.prototype.swipeEnd = function(event) {
2674
+
2675
+ var _ = this,
2676
+ slideCount,
2677
+ direction;
2678
+
2679
+ _.dragging = false;
2680
+ _.swiping = false;
2681
+
2682
+ if (_.scrolling) {
2683
+ _.scrolling = false;
2684
+ return false;
2685
+ }
2686
+
2687
+ _.interrupted = false;
2688
+ _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;
2689
+
2690
+ if ( _.touchObject.curX === undefined ) {
2691
+ return false;
2692
+ }
2693
+
2694
+ if ( _.touchObject.edgeHit === true ) {
2695
+ _.$slider.trigger('edge', [_, _.swipeDirection() ]);
2696
+ }
2697
+
2698
+ if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {
2699
+
2700
+ direction = _.swipeDirection();
2701
+
2702
+ switch ( direction ) {
2703
+
2704
+ case 'left':
2705
+ case 'down':
2706
+
2707
+ slideCount =
2708
+ _.options.swipeToSlide ?
2709
+ _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
2710
+ _.currentSlide + _.getSlideCount();
2711
+
2712
+ _.currentDirection = 0;
2713
+
2714
+ break;
2715
+
2716
+ case 'right':
2717
+ case 'up':
2718
+
2719
+ slideCount =
2720
+ _.options.swipeToSlide ?
2721
+ _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
2722
+ _.currentSlide - _.getSlideCount();
2723
+
2724
+ _.currentDirection = 1;
2725
+
2726
+ break;
2727
+
2728
+ default:
2729
+
2730
+
2731
+ }
2732
+
2733
+ if( direction != 'vertical' ) {
2734
+
2735
+ _.slideHandler( slideCount );
2736
+ _.touchObject = {};
2737
+ _.$slider.trigger('swipe', [_, direction ]);
2738
+
2739
+ }
2740
+
2741
+ } else {
2742
+
2743
+ if ( _.touchObject.startX !== _.touchObject.curX ) {
2744
+
2745
+ _.slideHandler( _.currentSlide );
2746
+ _.touchObject = {};
2747
+
2748
+ }
2749
+
2750
+ }
2751
+
2752
+ };
2753
+
2754
+ Slick.prototype.swipeHandler = function(event) {
2755
+
2756
+ var _ = this;
2757
+
2758
+ if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
2759
+ return;
2760
+ } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
2761
+ return;
2762
+ }
2763
+
2764
+ _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
2765
+ event.originalEvent.touches.length : 1;
2766
+
2767
+ _.touchObject.minSwipe = _.listWidth / _.options
2768
+ .touchThreshold;
2769
+
2770
+ if (_.options.verticalSwiping === true) {
2771
+ _.touchObject.minSwipe = _.listHeight / _.options
2772
+ .touchThreshold;
2773
+ }
2774
+
2775
+ switch (event.data.action) {
2776
+
2777
+ case 'start':
2778
+ _.swipeStart(event);
2779
+ break;
2780
+
2781
+ case 'move':
2782
+ _.swipeMove(event);
2783
+ break;
2784
+
2785
+ case 'end':
2786
+ _.swipeEnd(event);
2787
+ break;
2788
+
2789
+ }
2790
+
2791
+ };
2792
+
2793
+ Slick.prototype.swipeMove = function(event) {
2794
+
2795
+ var _ = this,
2796
+ edgeWasHit = false,
2797
+ curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;
2798
+
2799
+ touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
2800
+
2801
+ if (!_.dragging || _.scrolling || touches && touches.length !== 1) {
2802
+ return false;
2803
+ }
2804
+
2805
+ curLeft = _.getLeft(_.currentSlide);
2806
+
2807
+ _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
2808
+ _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
2809
+
2810
+ _.touchObject.swipeLength = Math.round(Math.sqrt(
2811
+ Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
2812
+
2813
+ verticalSwipeLength = Math.round(Math.sqrt(
2814
+ Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));
2815
+
2816
+ if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {
2817
+ _.scrolling = true;
2818
+ return false;
2819
+ }
2820
+
2821
+ if (_.options.verticalSwiping === true) {
2822
+ _.touchObject.swipeLength = verticalSwipeLength;
2823
+ }
2824
+
2825
+ swipeDirection = _.swipeDirection();
2826
+
2827
+ if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
2828
+ _.swiping = true;
2829
+ event.preventDefault();
2830
+ }
2831
+
2832
+ positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
2833
+ if (_.options.verticalSwiping === true) {
2834
+ positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
2835
+ }
2836
+
2837
+
2838
+ swipeLength = _.touchObject.swipeLength;
2839
+
2840
+ _.touchObject.edgeHit = false;
2841
+
2842
+ if (_.options.infinite === false) {
2843
+ if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
2844
+ swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
2845
+ _.touchObject.edgeHit = true;
2846
+ }
2847
+ }
2848
+
2849
+ if (_.options.vertical === false) {
2850
+ _.swipeLeft = curLeft + swipeLength * positionOffset;
2851
+ } else {
2852
+ _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
2853
+ }
2854
+ if (_.options.verticalSwiping === true) {
2855
+ _.swipeLeft = curLeft + swipeLength * positionOffset;
2856
+ }
2857
+
2858
+ if (_.options.fade === true || _.options.touchMove === false) {
2859
+ return false;
2860
+ }
2861
+
2862
+ if (_.animating === true) {
2863
+ _.swipeLeft = null;
2864
+ return false;
2865
+ }
2866
+
2867
+ _.setCSS(_.swipeLeft);
2868
+
2869
+ };
2870
+
2871
+ Slick.prototype.swipeStart = function(event) {
2872
+
2873
+ var _ = this,
2874
+ touches;
2875
+
2876
+ _.interrupted = true;
2877
+
2878
+ if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
2879
+ _.touchObject = {};
2880
+ return false;
2881
+ }
2882
+
2883
+ if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
2884
+ touches = event.originalEvent.touches[0];
2885
+ }
2886
+
2887
+ _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
2888
+ _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
2889
+
2890
+ _.dragging = true;
2891
+
2892
+ };
2893
+
2894
+ Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
2895
+
2896
+ var _ = this;
2897
+
2898
+ if (_.$slidesCache !== null) {
2899
+
2900
+ _.unload();
2901
+
2902
+ _.$slideTrack.children(this.options.slide).detach();
2903
+
2904
+ _.$slidesCache.appendTo(_.$slideTrack);
2905
+
2906
+ _.reinit();
2907
+
2908
+ }
2909
+
2910
+ };
2911
+
2912
+ Slick.prototype.unload = function() {
2913
+
2914
+ var _ = this;
2915
+
2916
+ $('.slick-cloned', _.$slider).remove();
2917
+
2918
+ if (_.$dots) {
2919
+ _.$dots.remove();
2920
+ }
2921
+
2922
+ if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
2923
+ _.$prevArrow.remove();
2924
+ }
2925
+
2926
+ if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
2927
+ _.$nextArrow.remove();
2928
+ }
2929
+
2930
+ _.$slides
2931
+ .removeClass('slick-slide slick-active slick-visible slick-current')
2932
+ .attr('aria-hidden', 'true')
2933
+ .css('width', '');
2934
+
2935
+ };
2936
+
2937
+ Slick.prototype.unslick = function(fromBreakpoint) {
2938
+
2939
+ var _ = this;
2940
+ _.$slider.trigger('unslick', [_, fromBreakpoint]);
2941
+ _.destroy();
2942
+
2943
+ };
2944
+
2945
+ Slick.prototype.updateArrows = function() {
2946
+
2947
+ var _ = this,
2948
+ centerOffset;
2949
+
2950
+ centerOffset = Math.floor(_.options.slidesToShow / 2);
2951
+
2952
+ if ( _.options.arrows === true &&
2953
+ _.slideCount > _.options.slidesToShow &&
2954
+ !_.options.infinite ) {
2955
+
2956
+ _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2957
+ _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2958
+
2959
+ if (_.currentSlide === 0) {
2960
+
2961
+ _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2962
+ _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2963
+
2964
+ } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
2965
+
2966
+ _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2967
+ _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2968
+
2969
+ } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
2970
+
2971
+ _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2972
+ _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2973
+
2974
+ }
2975
+
2976
+ }
2977
+
2978
+ };
2979
+
2980
+ Slick.prototype.updateDots = function() {
2981
+
2982
+ var _ = this;
2983
+
2984
+ if (_.$dots !== null) {
2985
+
2986
+ _.$dots
2987
+ .find('li')
2988
+ .removeClass('slick-active')
2989
+ .end();
2990
+
2991
+ _.$dots
2992
+ .find('li')
2993
+ .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
2994
+ .addClass('slick-active');
2995
+
2996
+ }
2997
+
2998
+ };
2999
+
3000
+ Slick.prototype.visibility = function() {
3001
+
3002
+ var _ = this;
3003
+
3004
+ if ( _.options.autoplay ) {
3005
+
3006
+ if ( document[_.hidden] ) {
3007
+
3008
+ _.interrupted = true;
3009
+
3010
+ } else {
3011
+
3012
+ _.interrupted = false;
3013
+
3014
+ }
3015
+
3016
+ }
3017
+
3018
+ };
3019
+
3020
+ $.fn.slick = function() {
3021
+ var _ = this,
3022
+ opt = arguments[0],
3023
+ args = Array.prototype.slice.call(arguments, 1),
3024
+ l = _.length,
3025
+ i,
3026
+ ret;
3027
+ for (i = 0; i < l; i++) {
3028
+ if (typeof opt == 'object' || typeof opt == 'undefined')
3029
+ _[i].slick = new Slick(_[i], opt);
3030
+ else
3031
+ ret = _[i].slick[opt].apply(_[i].slick, args);
3032
+ if (typeof ret != 'undefined') return ret;
3033
+ }
3034
+ return _;
3035
+ };
3036
+
3037
+ }));
public/js/slick.min.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ _ _ _ _
3
+ ___| (_) ___| | __ (_)___
4
+ / __| | |/ __| |/ / | / __|
5
+ \__ \ | | (__| < _ | \__ \
6
+ |___/_|_|\___|_|\_(_)/ |___/
7
+ |__/
8
+
9
+ Version: 1.9.0
10
+ Author: Ken Wheeler
11
+ Website: http://kenwheeler.github.io
12
+ Docs: http://kenwheeler.github.io/slick
13
+ Repo: http://github.com/kenwheeler/slick
14
+ Issues: http://github.com/kenwheeler/slick/issues
15
+
16
+ */
17
+ (function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],i):"undefined"!=typeof exports?module.exports=i(require("jquery")):i(jQuery)})(function(i){"use strict";var e=window.Slick||{};e=function(){function e(e,o){var s,n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:i(e),appendDots:i(e),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return i('<button type="button" />').text(t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},n.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},i.extend(n,n.initials),n.activeBreakpoint=null,n.animType=null,n.animProp=null,n.breakpoints=[],n.breakpointSettings=[],n.cssTransitions=!1,n.focussed=!1,n.interrupted=!1,n.hidden="hidden",n.paused=!0,n.positionProp=null,n.respondTo=null,n.rowCount=1,n.shouldClick=!0,n.$slider=i(e),n.$slidesCache=null,n.transformType=null,n.transitionType=null,n.visibilityChange="visibilitychange",n.windowWidth=0,n.windowTimer=null,s=i(e).data("slick")||{},n.options=i.extend({},n.defaults,o,s),n.currentSlide=n.options.initialSlide,n.originalSettings=n.options,"undefined"!=typeof document.mozHidden?(n.hidden="mozHidden",n.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(n.hidden="webkitHidden",n.visibilityChange="webkitvisibilitychange"),n.autoPlay=i.proxy(n.autoPlay,n),n.autoPlayClear=i.proxy(n.autoPlayClear,n),n.autoPlayIterator=i.proxy(n.autoPlayIterator,n),n.changeSlide=i.proxy(n.changeSlide,n),n.clickHandler=i.proxy(n.clickHandler,n),n.selectHandler=i.proxy(n.selectHandler,n),n.setPosition=i.proxy(n.setPosition,n),n.swipeHandler=i.proxy(n.swipeHandler,n),n.dragHandler=i.proxy(n.dragHandler,n),n.keyHandler=i.proxy(n.keyHandler,n),n.instanceUid=t++,n.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,n.registerBreakpoints(),n.init(!0)}var t=0;return e}(),e.prototype.activateADA=function(){var i=this;i.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},e.prototype.addSlide=e.prototype.slickAdd=function(e,t,o){var s=this;if("boolean"==typeof t)o=t,t=null;else if(t<0||t>=s.slideCount)return!1;s.unload(),"number"==typeof t?0===t&&0===s.$slides.length?i(e).appendTo(s.$slideTrack):o?i(e).insertBefore(s.$slides.eq(t)):i(e).insertAfter(s.$slides.eq(t)):o===!0?i(e).prependTo(s.$slideTrack):i(e).appendTo(s.$slideTrack),s.$slides=s.$slideTrack.children(this.options.slide),s.$slideTrack.children(this.options.slide).detach(),s.$slideTrack.append(s.$slides),s.$slides.each(function(e,t){i(t).attr("data-slick-index",e)}),s.$slidesCache=s.$slides,s.reinit()},e.prototype.animateHeight=function(){var i=this;if(1===i.options.slidesToShow&&i.options.adaptiveHeight===!0&&i.options.vertical===!1){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.animate({height:e},i.options.speed)}},e.prototype.animateSlide=function(e,t){var o={},s=this;s.animateHeight(),s.options.rtl===!0&&s.options.vertical===!1&&(e=-e),s.transformsEnabled===!1?s.options.vertical===!1?s.$slideTrack.animate({left:e},s.options.speed,s.options.easing,t):s.$slideTrack.animate({top:e},s.options.speed,s.options.easing,t):s.cssTransitions===!1?(s.options.rtl===!0&&(s.currentLeft=-s.currentLeft),i({animStart:s.currentLeft}).animate({animStart:e},{duration:s.options.speed,easing:s.options.easing,step:function(i){i=Math.ceil(i),s.options.vertical===!1?(o[s.animType]="translate("+i+"px, 0px)",s.$slideTrack.css(o)):(o[s.animType]="translate(0px,"+i+"px)",s.$slideTrack.css(o))},complete:function(){t&&t.call()}})):(s.applyTransition(),e=Math.ceil(e),s.options.vertical===!1?o[s.animType]="translate3d("+e+"px, 0px, 0px)":o[s.animType]="translate3d(0px,"+e+"px, 0px)",s.$slideTrack.css(o),t&&setTimeout(function(){s.disableTransition(),t.call()},s.options.speed))},e.prototype.getNavTarget=function(){var e=this,t=e.options.asNavFor;return t&&null!==t&&(t=i(t).not(e.$slider)),t},e.prototype.asNavFor=function(e){var t=this,o=t.getNavTarget();null!==o&&"object"==typeof o&&o.each(function(){var t=i(this).slick("getSlick");t.unslicked||t.slideHandler(e,!0)})},e.prototype.applyTransition=function(i){var e=this,t={};e.options.fade===!1?t[e.transitionType]=e.transformType+" "+e.options.speed+"ms "+e.options.cssEase:t[e.transitionType]="opacity "+e.options.speed+"ms "+e.options.cssEase,e.options.fade===!1?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.autoPlay=function(){var i=this;i.autoPlayClear(),i.slideCount>i.options.slidesToShow&&(i.autoPlayTimer=setInterval(i.autoPlayIterator,i.options.autoplaySpeed))},e.prototype.autoPlayClear=function(){var i=this;i.autoPlayTimer&&clearInterval(i.autoPlayTimer)},e.prototype.autoPlayIterator=function(){var i=this,e=i.currentSlide+i.options.slidesToScroll;i.paused||i.interrupted||i.focussed||(i.options.infinite===!1&&(1===i.direction&&i.currentSlide+1===i.slideCount-1?i.direction=0:0===i.direction&&(e=i.currentSlide-i.options.slidesToScroll,i.currentSlide-1===0&&(i.direction=1))),i.slideHandler(e))},e.prototype.buildArrows=function(){var e=this;e.options.arrows===!0&&(e.$prevArrow=i(e.options.prevArrow).addClass("slick-arrow"),e.$nextArrow=i(e.options.nextArrow).addClass("slick-arrow"),e.slideCount>e.options.slidesToShow?(e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.prependTo(e.options.appendArrows),e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.appendTo(e.options.appendArrows),e.options.infinite!==!0&&e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},e.prototype.buildDots=function(){var e,t,o=this;if(o.options.dots===!0&&o.slideCount>o.options.slidesToShow){for(o.$slider.addClass("slick-dotted"),t=i("<ul />").addClass(o.options.dotsClass),e=0;e<=o.getDotCount();e+=1)t.append(i("<li />").append(o.options.customPaging.call(this,o,e)));o.$dots=t.appendTo(o.options.appendDots),o.$dots.find("li").first().addClass("slick-active")}},e.prototype.buildOut=function(){var e=this;e.$slides=e.$slider.children(e.options.slide+":not(.slick-cloned)").addClass("slick-slide"),e.slideCount=e.$slides.length,e.$slides.each(function(e,t){i(t).attr("data-slick-index",e).data("originalStyling",i(t).attr("style")||"")}),e.$slider.addClass("slick-slider"),e.$slideTrack=0===e.slideCount?i('<div class="slick-track"/>').appendTo(e.$slider):e.$slides.wrapAll('<div class="slick-track"/>').parent(),e.$list=e.$slideTrack.wrap('<div class="slick-list"/>').parent(),e.$slideTrack.css("opacity",0),e.options.centerMode!==!0&&e.options.swipeToSlide!==!0||(e.options.slidesToScroll=1),i("img[data-lazy]",e.$slider).not("[src]").addClass("slick-loading"),e.setupInfinite(),e.buildArrows(),e.buildDots(),e.updateDots(),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.options.draggable===!0&&e.$list.addClass("draggable")},e.prototype.buildRows=function(){var i,e,t,o,s,n,r,l=this;if(o=document.createDocumentFragment(),n=l.$slider.children(),l.options.rows>0){for(r=l.options.slidesPerRow*l.options.rows,s=Math.ceil(n.length/r),i=0;i<s;i++){var d=document.createElement("div");for(e=0;e<l.options.rows;e++){var a=document.createElement("div");for(t=0;t<l.options.slidesPerRow;t++){var c=i*r+(e*l.options.slidesPerRow+t);n.get(c)&&a.appendChild(n.get(c))}d.appendChild(a)}o.appendChild(d)}l.$slider.empty().append(o),l.$slider.children().children().children().css({width:100/l.options.slidesPerRow+"%",display:"inline-block"})}},e.prototype.checkResponsive=function(e,t){var o,s,n,r=this,l=!1,d=r.$slider.width(),a=window.innerWidth||i(window).width();if("window"===r.respondTo?n=a:"slider"===r.respondTo?n=d:"min"===r.respondTo&&(n=Math.min(a,d)),r.options.responsive&&r.options.responsive.length&&null!==r.options.responsive){s=null;for(o in r.breakpoints)r.breakpoints.hasOwnProperty(o)&&(r.originalSettings.mobileFirst===!1?n<r.breakpoints[o]&&(s=r.breakpoints[o]):n>r.breakpoints[o]&&(s=r.breakpoints[o]));null!==s?null!==r.activeBreakpoint?(s!==r.activeBreakpoint||t)&&(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),e===!0&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),e===!0&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):null!==r.activeBreakpoint&&(r.activeBreakpoint=null,r.options=r.originalSettings,e===!0&&(r.currentSlide=r.options.initialSlide),r.refresh(e),l=s),e||l===!1||r.$slider.trigger("breakpoint",[r,l])}},e.prototype.changeSlide=function(e,t){var o,s,n,r=this,l=i(e.currentTarget);switch(l.is("a")&&e.preventDefault(),l.is("li")||(l=l.closest("li")),n=r.slideCount%r.options.slidesToScroll!==0,o=n?0:(r.slideCount-r.currentSlide)%r.options.slidesToScroll,e.data.message){case"previous":s=0===o?r.options.slidesToScroll:r.options.slidesToShow-o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide-s,!1,t);break;case"next":s=0===o?r.options.slidesToScroll:o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide+s,!1,t);break;case"index":var d=0===e.data.index?0:e.data.index||l.index()*r.options.slidesToScroll;r.slideHandler(r.checkNavigable(d),!1,t),l.children().trigger("focus");break;default:return}},e.prototype.checkNavigable=function(i){var e,t,o=this;if(e=o.getNavigableIndexes(),t=0,i>e[e.length-1])i=e[e.length-1];else for(var s in e){if(i<e[s]){i=t;break}t=e[s]}return i},e.prototype.cleanUpEvents=function(){var e=this;e.options.dots&&null!==e.$dots&&(i("li",e.$dots).off("click.slick",e.changeSlide).off("mouseenter.slick",i.proxy(e.interrupt,e,!0)).off("mouseleave.slick",i.proxy(e.interrupt,e,!1)),e.options.accessibility===!0&&e.$dots.off("keydown.slick",e.keyHandler)),e.$slider.off("focus.slick blur.slick"),e.options.arrows===!0&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow&&e.$prevArrow.off("click.slick",e.changeSlide),e.$nextArrow&&e.$nextArrow.off("click.slick",e.changeSlide),e.options.accessibility===!0&&(e.$prevArrow&&e.$prevArrow.off("keydown.slick",e.keyHandler),e.$nextArrow&&e.$nextArrow.off("keydown.slick",e.keyHandler))),e.$list.off("touchstart.slick mousedown.slick",e.swipeHandler),e.$list.off("touchmove.slick mousemove.slick",e.swipeHandler),e.$list.off("touchend.slick mouseup.slick",e.swipeHandler),e.$list.off("touchcancel.slick mouseleave.slick",e.swipeHandler),e.$list.off("click.slick",e.clickHandler),i(document).off(e.visibilityChange,e.visibility),e.cleanUpSlideEvents(),e.options.accessibility===!0&&e.$list.off("keydown.slick",e.keyHandler),e.options.focusOnSelect===!0&&i(e.$slideTrack).children().off("click.slick",e.selectHandler),i(window).off("orientationchange.slick.slick-"+e.instanceUid,e.orientationChange),i(window).off("resize.slick.slick-"+e.instanceUid,e.resize),i("[draggable!=true]",e.$slideTrack).off("dragstart",e.preventDefault),i(window).off("load.slick.slick-"+e.instanceUid,e.setPosition)},e.prototype.cleanUpSlideEvents=function(){var e=this;e.$list.off("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.off("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.cleanUpRows=function(){var i,e=this;e.options.rows>0&&(i=e.$slides.children().children(),i.removeAttr("style"),e.$slider.empty().append(i))},e.prototype.clickHandler=function(i){var e=this;e.shouldClick===!1&&(i.stopImmediatePropagation(),i.stopPropagation(),i.preventDefault())},e.prototype.destroy=function(e){var t=this;t.autoPlayClear(),t.touchObject={},t.cleanUpEvents(),i(".slick-cloned",t.$slider).detach(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.$prevArrow.length&&(t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove()),t.$nextArrow&&t.$nextArrow.length&&(t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove()),t.$slides&&(t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){i(this).attr("style",i(this).data("originalStyling"))}),t.$slideTrack.children(this.options.slide).detach(),t.$slideTrack.detach(),t.$list.detach(),t.$slider.append(t.$slides)),t.cleanUpRows(),t.$slider.removeClass("slick-slider"),t.$slider.removeClass("slick-initialized"),t.$slider.removeClass("slick-dotted"),t.unslicked=!0,e||t.$slider.trigger("destroy",[t])},e.prototype.disableTransition=function(i){var e=this,t={};t[e.transitionType]="",e.options.fade===!1?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.fadeSlide=function(i,e){var t=this;t.cssTransitions===!1?(t.$slides.eq(i).css({zIndex:t.options.zIndex}),t.$slides.eq(i).animate({opacity:1},t.options.speed,t.options.easing,e)):(t.applyTransition(i),t.$slides.eq(i).css({opacity:1,zIndex:t.options.zIndex}),e&&setTimeout(function(){t.disableTransition(i),e.call()},t.options.speed))},e.prototype.fadeSlideOut=function(i){var e=this;e.cssTransitions===!1?e.$slides.eq(i).animate({opacity:0,zIndex:e.options.zIndex-2},e.options.speed,e.options.easing):(e.applyTransition(i),e.$slides.eq(i).css({opacity:0,zIndex:e.options.zIndex-2}))},e.prototype.filterSlides=e.prototype.slickFilter=function(i){var e=this;null!==i&&(e.$slidesCache=e.$slides,e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.filter(i).appendTo(e.$slideTrack),e.reinit())},e.prototype.focusHandler=function(){var e=this;e.$slider.off("focus.slick blur.slick").on("focus.slick","*",function(t){var o=i(this);setTimeout(function(){e.options.pauseOnFocus&&o.is(":focus")&&(e.focussed=!0,e.autoPlay())},0)}).on("blur.slick","*",function(t){i(this);e.options.pauseOnFocus&&(e.focussed=!1,e.autoPlay())})},e.prototype.getCurrent=e.prototype.slickCurrentSlide=function(){var i=this;return i.currentSlide},e.prototype.getDotCount=function(){var i=this,e=0,t=0,o=0;if(i.options.infinite===!0)if(i.slideCount<=i.options.slidesToShow)++o;else for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else if(i.options.centerMode===!0)o=i.slideCount;else if(i.options.asNavFor)for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else o=1+Math.ceil((i.slideCount-i.options.slidesToShow)/i.options.slidesToScroll);return o-1},e.prototype.getLeft=function(i){var e,t,o,s,n=this,r=0;return n.slideOffset=0,t=n.$slides.first().outerHeight(!0),n.options.infinite===!0?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,s=-1,n.options.vertical===!0&&n.options.centerMode===!0&&(2===n.options.slidesToShow?s=-1.5:1===n.options.slidesToShow&&(s=-2)),r=t*n.options.slidesToShow*s),n.slideCount%n.options.slidesToScroll!==0&&i+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(i>n.slideCount?(n.slideOffset=(n.options.slidesToShow-(i-n.slideCount))*n.slideWidth*-1,r=(n.options.slidesToShow-(i-n.slideCount))*t*-1):(n.slideOffset=n.slideCount%n.options.slidesToScroll*n.slideWidth*-1,r=n.slideCount%n.options.slidesToScroll*t*-1))):i+n.options.slidesToShow>n.slideCount&&(n.slideOffset=(i+n.options.slidesToShow-n.slideCount)*n.slideWidth,r=(i+n.options.slidesToShow-n.slideCount)*t),n.slideCount<=n.options.slidesToShow&&(n.slideOffset=0,r=0),n.options.centerMode===!0&&n.slideCount<=n.options.slidesToShow?n.slideOffset=n.slideWidth*Math.floor(n.options.slidesToShow)/2-n.slideWidth*n.slideCount/2:n.options.centerMode===!0&&n.options.infinite===!0?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:n.options.centerMode===!0&&(n.slideOffset=0,n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),e=n.options.vertical===!1?i*n.slideWidth*-1+n.slideOffset:i*t*-1+r,n.options.variableWidth===!0&&(o=n.slideCount<=n.options.slidesToShow||n.options.infinite===!1?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow),e=n.options.rtl===!0?o[0]?(n.$slideTrack.width()-o[0].offsetLeft-o.width())*-1:0:o[0]?o[0].offsetLeft*-1:0,n.options.centerMode===!0&&(o=n.slideCount<=n.options.slidesToShow||n.options.infinite===!1?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow+1),e=n.options.rtl===!0?o[0]?(n.$slideTrack.width()-o[0].offsetLeft-o.width())*-1:0:o[0]?o[0].offsetLeft*-1:0,e+=(n.$list.width()-o.outerWidth())/2)),e},e.prototype.getOption=e.prototype.slickGetOption=function(i){var e=this;return e.options[i]},e.prototype.getNavigableIndexes=function(){var i,e=this,t=0,o=0,s=[];for(e.options.infinite===!1?i=e.slideCount:(t=e.options.slidesToScroll*-1,o=e.options.slidesToScroll*-1,i=2*e.slideCount);t<i;)s.push(t),t=o+e.options.slidesToScroll,o+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;return s},e.prototype.getSlick=function(){return this},e.prototype.getSlideCount=function(){var e,t,o,s,n=this;return s=n.options.centerMode===!0?Math.floor(n.$list.width()/2):0,o=n.swipeLeft*-1+s,n.options.swipeToSlide===!0?(n.$slideTrack.find(".slick-slide").each(function(e,s){var r,l,d;if(r=i(s).outerWidth(),l=s.offsetLeft,n.options.centerMode!==!0&&(l+=r/2),d=l+r,o<d)return t=s,!1}),e=Math.abs(i(t).attr("data-slick-index")-n.currentSlide)||1):n.options.slidesToScroll},e.prototype.goTo=e.prototype.slickGoTo=function(i,e){var t=this;t.changeSlide({data:{message:"index",index:parseInt(i)}},e)},e.prototype.init=function(e){var t=this;i(t.$slider).hasClass("slick-initialized")||(i(t.$slider).addClass("slick-initialized"),t.buildRows(),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.updateArrows(),t.updateDots(),t.checkResponsive(!0),t.focusHandler()),e&&t.$slider.trigger("init",[t]),t.options.accessibility===!0&&t.initADA(),t.options.autoplay&&(t.paused=!1,t.autoPlay())},e.prototype.initADA=function(){var e=this,t=Math.ceil(e.slideCount/e.options.slidesToShow),o=e.getNavigableIndexes().filter(function(i){return i>=0&&i<e.slideCount});e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),null!==e.$dots&&(e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function(t){var s=o.indexOf(t);if(i(this).attr({role:"tabpanel",id:"slick-slide"+e.instanceUid+t,tabindex:-1}),s!==-1){var n="slick-slide-control"+e.instanceUid+s;i("#"+n).length&&i(this).attr({"aria-describedby":n})}}),e.$dots.attr("role","tablist").find("li").each(function(s){var n=o[s];i(this).attr({role:"presentation"}),i(this).find("button").first().attr({role:"tab",id:"slick-slide-control"+e.instanceUid+s,"aria-controls":"slick-slide"+e.instanceUid+n,"aria-label":s+1+" of "+t,"aria-selected":null,tabindex:"-1"})}).eq(e.currentSlide).find("button").attr({"aria-selected":"true",tabindex:"0"}).end());for(var s=e.currentSlide,n=s+e.options.slidesToShow;s<n;s++)e.options.focusOnChange?e.$slides.eq(s).attr({tabindex:"0"}):e.$slides.eq(s).removeAttr("tabindex");e.activateADA()},e.prototype.initArrowEvents=function(){var i=this;i.options.arrows===!0&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},i.changeSlide),i.$nextArrow.off("click.slick").on("click.slick",{message:"next"},i.changeSlide),i.options.accessibility===!0&&(i.$prevArrow.on("keydown.slick",i.keyHandler),i.$nextArrow.on("keydown.slick",i.keyHandler)))},e.prototype.initDotEvents=function(){var e=this;e.options.dots===!0&&e.slideCount>e.options.slidesToShow&&(i("li",e.$dots).on("click.slick",{message:"index"},e.changeSlide),e.options.accessibility===!0&&e.$dots.on("keydown.slick",e.keyHandler)),e.options.dots===!0&&e.options.pauseOnDotsHover===!0&&e.slideCount>e.options.slidesToShow&&i("li",e.$dots).on("mouseenter.slick",i.proxy(e.interrupt,e,!0)).on("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.initSlideEvents=function(){var e=this;e.options.pauseOnHover&&(e.$list.on("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.on("mouseleave.slick",i.proxy(e.interrupt,e,!1)))},e.prototype.initializeEvents=function(){var e=this;e.initArrowEvents(),e.initDotEvents(),e.initSlideEvents(),e.$list.on("touchstart.slick mousedown.slick",{action:"start"},e.swipeHandler),e.$list.on("touchmove.slick mousemove.slick",{action:"move"},e.swipeHandler),e.$list.on("touchend.slick mouseup.slick",{action:"end"},e.swipeHandler),e.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},e.swipeHandler),e.$list.on("click.slick",e.clickHandler),i(document).on(e.visibilityChange,i.proxy(e.visibility,e)),e.options.accessibility===!0&&e.$list.on("keydown.slick",e.keyHandler),e.options.focusOnSelect===!0&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),i(window).on("orientationchange.slick.slick-"+e.instanceUid,i.proxy(e.orientationChange,e)),i(window).on("resize.slick.slick-"+e.instanceUid,i.proxy(e.resize,e)),i("[draggable!=true]",e.$slideTrack).on("dragstart",e.preventDefault),i(window).on("load.slick.slick-"+e.instanceUid,e.setPosition),i(e.setPosition)},e.prototype.initUI=function(){var i=this;i.options.arrows===!0&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.show(),i.$nextArrow.show()),i.options.dots===!0&&i.slideCount>i.options.slidesToShow&&i.$dots.show()},e.prototype.keyHandler=function(i){var e=this;i.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===i.keyCode&&e.options.accessibility===!0?e.changeSlide({data:{message:e.options.rtl===!0?"next":"previous"}}):39===i.keyCode&&e.options.accessibility===!0&&e.changeSlide({data:{message:e.options.rtl===!0?"previous":"next"}}))},e.prototype.lazyLoad=function(){function e(e){i("img[data-lazy]",e).each(function(){var e=i(this),t=i(this).attr("data-lazy"),o=i(this).attr("data-srcset"),s=i(this).attr("data-sizes")||r.$slider.attr("data-sizes"),n=document.createElement("img");n.onload=function(){e.animate({opacity:0},100,function(){o&&(e.attr("srcset",o),s&&e.attr("sizes",s)),e.attr("src",t).animate({opacity:1},200,function(){e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")}),r.$slider.trigger("lazyLoaded",[r,e,t])})},n.onerror=function(){e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),r.$slider.trigger("lazyLoadError",[r,e,t])},n.src=t})}var t,o,s,n,r=this;if(r.options.centerMode===!0?r.options.infinite===!0?(s=r.currentSlide+(r.options.slidesToShow/2+1),n=s+r.options.slidesToShow+2):(s=Math.max(0,r.currentSlide-(r.options.slidesToShow/2+1)),n=2+(r.options.slidesToShow/2+1)+r.currentSlide):(s=r.options.infinite?r.options.slidesToShow+r.currentSlide:r.currentSlide,n=Math.ceil(s+r.options.slidesToShow),r.options.fade===!0&&(s>0&&s--,n<=r.slideCount&&n++)),t=r.$slider.find(".slick-slide").slice(s,n),"anticipated"===r.options.lazyLoad)for(var l=s-1,d=n,a=r.$slider.find(".slick-slide"),c=0;c<r.options.slidesToScroll;c++)l<0&&(l=r.slideCount-1),t=t.add(a.eq(l)),t=t.add(a.eq(d)),l--,d++;e(t),r.slideCount<=r.options.slidesToShow?(o=r.$slider.find(".slick-slide"),e(o)):r.currentSlide>=r.slideCount-r.options.slidesToShow?(o=r.$slider.find(".slick-cloned").slice(0,r.options.slidesToShow),e(o)):0===r.currentSlide&&(o=r.$slider.find(".slick-cloned").slice(r.options.slidesToShow*-1),e(o))},e.prototype.loadSlider=function(){var i=this;i.setPosition(),i.$slideTrack.css({opacity:1}),i.$slider.removeClass("slick-loading"),i.initUI(),"progressive"===i.options.lazyLoad&&i.progressiveLazyLoad()},e.prototype.next=e.prototype.slickNext=function(){var i=this;i.changeSlide({data:{message:"next"}})},e.prototype.orientationChange=function(){var i=this;i.checkResponsive(),i.setPosition()},e.prototype.pause=e.prototype.slickPause=function(){var i=this;i.autoPlayClear(),i.paused=!0},e.prototype.play=e.prototype.slickPlay=function(){var i=this;i.autoPlay(),i.options.autoplay=!0,i.paused=!1,i.focussed=!1,i.interrupted=!1},e.prototype.postSlide=function(e){var t=this;if(!t.unslicked&&(t.$slider.trigger("afterChange",[t,e]),t.animating=!1,t.slideCount>t.options.slidesToShow&&t.setPosition(),t.swipeLeft=null,t.options.autoplay&&t.autoPlay(),t.options.accessibility===!0&&(t.initADA(),t.options.focusOnChange))){var o=i(t.$slides.get(t.currentSlide));o.attr("tabindex",0).focus()}},e.prototype.prev=e.prototype.slickPrev=function(){var i=this;i.changeSlide({data:{message:"previous"}})},e.prototype.preventDefault=function(i){i.preventDefault()},e.prototype.progressiveLazyLoad=function(e){e=e||1;var t,o,s,n,r,l=this,d=i("img[data-lazy]",l.$slider);d.length?(t=d.first(),o=t.attr("data-lazy"),s=t.attr("data-srcset"),n=t.attr("data-sizes")||l.$slider.attr("data-sizes"),r=document.createElement("img"),r.onload=function(){s&&(t.attr("srcset",s),n&&t.attr("sizes",n)),t.attr("src",o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),l.options.adaptiveHeight===!0&&l.setPosition(),l.$slider.trigger("lazyLoaded",[l,t,o]),l.progressiveLazyLoad()},r.onerror=function(){e<3?setTimeout(function(){l.progressiveLazyLoad(e+1)},500):(t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),l.$slider.trigger("lazyLoadError",[l,t,o]),l.progressiveLazyLoad())},r.src=o):l.$slider.trigger("allImagesLoaded",[l])},e.prototype.refresh=function(e){var t,o,s=this;o=s.slideCount-s.options.slidesToShow,!s.options.infinite&&s.currentSlide>o&&(s.currentSlide=o),s.slideCount<=s.options.slidesToShow&&(s.currentSlide=0),t=s.currentSlide,s.destroy(!0),i.extend(s,s.initials,{currentSlide:t}),s.init(),e||s.changeSlide({data:{message:"index",index:t}},!1)},e.prototype.registerBreakpoints=function(){var e,t,o,s=this,n=s.options.responsive||null;if("array"===i.type(n)&&n.length){s.respondTo=s.options.respondTo||"window";for(e in n)if(o=s.breakpoints.length-1,n.hasOwnProperty(e)){for(t=n[e].breakpoint;o>=0;)s.breakpoints[o]&&s.breakpoints[o]===t&&s.breakpoints.splice(o,1),o--;s.breakpoints.push(t),s.breakpointSettings[t]=n[e].settings}s.breakpoints.sort(function(i,e){return s.options.mobileFirst?i-e:e-i})}},e.prototype.reinit=function(){var e=this;e.$slides=e.$slideTrack.children(e.options.slide).addClass("slick-slide"),e.slideCount=e.$slides.length,e.currentSlide>=e.slideCount&&0!==e.currentSlide&&(e.currentSlide=e.currentSlide-e.options.slidesToScroll),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),e.registerBreakpoints(),e.setProps(),e.setupInfinite(),e.buildArrows(),e.updateArrows(),e.initArrowEvents(),e.buildDots(),e.updateDots(),e.initDotEvents(),e.cleanUpSlideEvents(),e.initSlideEvents(),e.checkResponsive(!1,!0),e.options.focusOnSelect===!0&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.setPosition(),e.focusHandler(),e.paused=!e.options.autoplay,e.autoPlay(),e.$slider.trigger("reInit",[e])},e.prototype.resize=function(){var e=this;i(window).width()!==e.windowWidth&&(clearTimeout(e.windowDelay),e.windowDelay=window.setTimeout(function(){e.windowWidth=i(window).width(),e.checkResponsive(),e.unslicked||e.setPosition()},50))},e.prototype.removeSlide=e.prototype.slickRemove=function(i,e,t){var o=this;return"boolean"==typeof i?(e=i,i=e===!0?0:o.slideCount-1):i=e===!0?--i:i,!(o.slideCount<1||i<0||i>o.slideCount-1)&&(o.unload(),t===!0?o.$slideTrack.children().remove():o.$slideTrack.children(this.options.slide).eq(i).remove(),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slidesCache=o.$slides,void o.reinit())},e.prototype.setCSS=function(i){var e,t,o=this,s={};o.options.rtl===!0&&(i=-i),e="left"==o.positionProp?Math.ceil(i)+"px":"0px",t="top"==o.positionProp?Math.ceil(i)+"px":"0px",s[o.positionProp]=i,o.transformsEnabled===!1?o.$slideTrack.css(s):(s={},o.cssTransitions===!1?(s[o.animType]="translate("+e+", "+t+")",o.$slideTrack.css(s)):(s[o.animType]="translate3d("+e+", "+t+", 0px)",o.$slideTrack.css(s)))},e.prototype.setDimensions=function(){var i=this;i.options.vertical===!1?i.options.centerMode===!0&&i.$list.css({padding:"0px "+i.options.centerPadding}):(i.$list.height(i.$slides.first().outerHeight(!0)*i.options.slidesToShow),i.options.centerMode===!0&&i.$list.css({padding:i.options.centerPadding+" 0px"})),i.listWidth=i.$list.width(),i.listHeight=i.$list.height(),i.options.vertical===!1&&i.options.variableWidth===!1?(i.slideWidth=Math.ceil(i.listWidth/i.options.slidesToShow),i.$slideTrack.width(Math.ceil(i.slideWidth*i.$slideTrack.children(".slick-slide").length))):i.options.variableWidth===!0?i.$slideTrack.width(5e3*i.slideCount):(i.slideWidth=Math.ceil(i.listWidth),i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0)*i.$slideTrack.children(".slick-slide").length)));var e=i.$slides.first().outerWidth(!0)-i.$slides.first().width();i.options.variableWidth===!1&&i.$slideTrack.children(".slick-slide").width(i.slideWidth-e)},e.prototype.setFade=function(){var e,t=this;t.$slides.each(function(o,s){e=t.slideWidth*o*-1,t.options.rtl===!0?i(s).css({position:"relative",right:e,top:0,zIndex:t.options.zIndex-2,opacity:0}):i(s).css({position:"relative",left:e,top:0,zIndex:t.options.zIndex-2,opacity:0})}),t.$slides.eq(t.currentSlide).css({zIndex:t.options.zIndex-1,opacity:1})},e.prototype.setHeight=function(){var i=this;if(1===i.options.slidesToShow&&i.options.adaptiveHeight===!0&&i.options.vertical===!1){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.css("height",e)}},e.prototype.setOption=e.prototype.slickSetOption=function(){var e,t,o,s,n,r=this,l=!1;if("object"===i.type(arguments[0])?(o=arguments[0],l=arguments[1],n="multiple"):"string"===i.type(arguments[0])&&(o=arguments[0],s=arguments[1],l=arguments[2],"responsive"===arguments[0]&&"array"===i.type(arguments[1])?n="responsive":"undefined"!=typeof arguments[1]&&(n="single")),"single"===n)r.options[o]=s;else if("multiple"===n)i.each(o,function(i,e){r.options[i]=e});else if("responsive"===n)for(t in s)if("array"!==i.type(r.options.responsive))r.options.responsive=[s[t]];else{for(e=r.options.responsive.length-1;e>=0;)r.options.responsive[e].breakpoint===s[t].breakpoint&&r.options.responsive.splice(e,1),e--;r.options.responsive.push(s[t])}l&&(r.unload(),r.reinit())},e.prototype.setPosition=function(){var i=this;i.setDimensions(),i.setHeight(),i.options.fade===!1?i.setCSS(i.getLeft(i.currentSlide)):i.setFade(),i.$slider.trigger("setPosition",[i])},e.prototype.setProps=function(){var i=this,e=document.body.style;i.positionProp=i.options.vertical===!0?"top":"left",
18
+ "top"===i.positionProp?i.$slider.addClass("slick-vertical"):i.$slider.removeClass("slick-vertical"),void 0===e.WebkitTransition&&void 0===e.MozTransition&&void 0===e.msTransition||i.options.useCSS===!0&&(i.cssTransitions=!0),i.options.fade&&("number"==typeof i.options.zIndex?i.options.zIndex<3&&(i.options.zIndex=3):i.options.zIndex=i.defaults.zIndex),void 0!==e.OTransform&&(i.animType="OTransform",i.transformType="-o-transform",i.transitionType="OTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.MozTransform&&(i.animType="MozTransform",i.transformType="-moz-transform",i.transitionType="MozTransition",void 0===e.perspectiveProperty&&void 0===e.MozPerspective&&(i.animType=!1)),void 0!==e.webkitTransform&&(i.animType="webkitTransform",i.transformType="-webkit-transform",i.transitionType="webkitTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.msTransform&&(i.animType="msTransform",i.transformType="-ms-transform",i.transitionType="msTransition",void 0===e.msTransform&&(i.animType=!1)),void 0!==e.transform&&i.animType!==!1&&(i.animType="transform",i.transformType="transform",i.transitionType="transition"),i.transformsEnabled=i.options.useTransform&&null!==i.animType&&i.animType!==!1},e.prototype.setSlideClasses=function(i){var e,t,o,s,n=this;if(t=n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),n.$slides.eq(i).addClass("slick-current"),n.options.centerMode===!0){var r=n.options.slidesToShow%2===0?1:0;e=Math.floor(n.options.slidesToShow/2),n.options.infinite===!0&&(i>=e&&i<=n.slideCount-1-e?n.$slides.slice(i-e+r,i+e+1).addClass("slick-active").attr("aria-hidden","false"):(o=n.options.slidesToShow+i,t.slice(o-e+1+r,o+e+2).addClass("slick-active").attr("aria-hidden","false")),0===i?t.eq(t.length-1-n.options.slidesToShow).addClass("slick-center"):i===n.slideCount-1&&t.eq(n.options.slidesToShow).addClass("slick-center")),n.$slides.eq(i).addClass("slick-center")}else i>=0&&i<=n.slideCount-n.options.slidesToShow?n.$slides.slice(i,i+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):t.length<=n.options.slidesToShow?t.addClass("slick-active").attr("aria-hidden","false"):(s=n.slideCount%n.options.slidesToShow,o=n.options.infinite===!0?n.options.slidesToShow+i:i,n.options.slidesToShow==n.options.slidesToScroll&&n.slideCount-i<n.options.slidesToShow?t.slice(o-(n.options.slidesToShow-s),o+s).addClass("slick-active").attr("aria-hidden","false"):t.slice(o,o+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"));"ondemand"!==n.options.lazyLoad&&"anticipated"!==n.options.lazyLoad||n.lazyLoad()},e.prototype.setupInfinite=function(){var e,t,o,s=this;if(s.options.fade===!0&&(s.options.centerMode=!1),s.options.infinite===!0&&s.options.fade===!1&&(t=null,s.slideCount>s.options.slidesToShow)){for(o=s.options.centerMode===!0?s.options.slidesToShow+1:s.options.slidesToShow,e=s.slideCount;e>s.slideCount-o;e-=1)t=e-1,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t-s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned");for(e=0;e<o+s.slideCount;e+=1)t=e,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t+s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned");s.$slideTrack.find(".slick-cloned").find("[id]").each(function(){i(this).attr("id","")})}},e.prototype.interrupt=function(i){var e=this;i||e.autoPlay(),e.interrupted=i},e.prototype.selectHandler=function(e){var t=this,o=i(e.target).is(".slick-slide")?i(e.target):i(e.target).parents(".slick-slide"),s=parseInt(o.attr("data-slick-index"));return s||(s=0),t.slideCount<=t.options.slidesToShow?void t.slideHandler(s,!1,!0):void t.slideHandler(s)},e.prototype.slideHandler=function(i,e,t){var o,s,n,r,l,d=null,a=this;if(e=e||!1,!(a.animating===!0&&a.options.waitForAnimate===!0||a.options.fade===!0&&a.currentSlide===i))return e===!1&&a.asNavFor(i),o=i,d=a.getLeft(o),r=a.getLeft(a.currentSlide),a.currentLeft=null===a.swipeLeft?r:a.swipeLeft,a.options.infinite===!1&&a.options.centerMode===!1&&(i<0||i>a.getDotCount()*a.options.slidesToScroll)?void(a.options.fade===!1&&(o=a.currentSlide,t!==!0&&a.slideCount>a.options.slidesToShow?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o))):a.options.infinite===!1&&a.options.centerMode===!0&&(i<0||i>a.slideCount-a.options.slidesToScroll)?void(a.options.fade===!1&&(o=a.currentSlide,t!==!0&&a.slideCount>a.options.slidesToShow?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o))):(a.options.autoplay&&clearInterval(a.autoPlayTimer),s=o<0?a.slideCount%a.options.slidesToScroll!==0?a.slideCount-a.slideCount%a.options.slidesToScroll:a.slideCount+o:o>=a.slideCount?a.slideCount%a.options.slidesToScroll!==0?0:o-a.slideCount:o,a.animating=!0,a.$slider.trigger("beforeChange",[a,a.currentSlide,s]),n=a.currentSlide,a.currentSlide=s,a.setSlideClasses(a.currentSlide),a.options.asNavFor&&(l=a.getNavTarget(),l=l.slick("getSlick"),l.slideCount<=l.options.slidesToShow&&l.setSlideClasses(a.currentSlide)),a.updateDots(),a.updateArrows(),a.options.fade===!0?(t!==!0?(a.fadeSlideOut(n),a.fadeSlide(s,function(){a.postSlide(s)})):a.postSlide(s),void a.animateHeight()):void(t!==!0&&a.slideCount>a.options.slidesToShow?a.animateSlide(d,function(){a.postSlide(s)}):a.postSlide(s)))},e.prototype.startLoad=function(){var i=this;i.options.arrows===!0&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.hide(),i.$nextArrow.hide()),i.options.dots===!0&&i.slideCount>i.options.slidesToShow&&i.$dots.hide(),i.$slider.addClass("slick-loading")},e.prototype.swipeDirection=function(){var i,e,t,o,s=this;return i=s.touchObject.startX-s.touchObject.curX,e=s.touchObject.startY-s.touchObject.curY,t=Math.atan2(e,i),o=Math.round(180*t/Math.PI),o<0&&(o=360-Math.abs(o)),o<=45&&o>=0?s.options.rtl===!1?"left":"right":o<=360&&o>=315?s.options.rtl===!1?"left":"right":o>=135&&o<=225?s.options.rtl===!1?"right":"left":s.options.verticalSwiping===!0?o>=35&&o<=135?"down":"up":"vertical"},e.prototype.swipeEnd=function(i){var e,t,o=this;if(o.dragging=!1,o.swiping=!1,o.scrolling)return o.scrolling=!1,!1;if(o.interrupted=!1,o.shouldClick=!(o.touchObject.swipeLength>10),void 0===o.touchObject.curX)return!1;if(o.touchObject.edgeHit===!0&&o.$slider.trigger("edge",[o,o.swipeDirection()]),o.touchObject.swipeLength>=o.touchObject.minSwipe){switch(t=o.swipeDirection()){case"left":case"down":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide+o.getSlideCount()):o.currentSlide+o.getSlideCount(),o.currentDirection=0;break;case"right":case"up":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide-o.getSlideCount()):o.currentSlide-o.getSlideCount(),o.currentDirection=1}"vertical"!=t&&(o.slideHandler(e),o.touchObject={},o.$slider.trigger("swipe",[o,t]))}else o.touchObject.startX!==o.touchObject.curX&&(o.slideHandler(o.currentSlide),o.touchObject={})},e.prototype.swipeHandler=function(i){var e=this;if(!(e.options.swipe===!1||"ontouchend"in document&&e.options.swipe===!1||e.options.draggable===!1&&i.type.indexOf("mouse")!==-1))switch(e.touchObject.fingerCount=i.originalEvent&&void 0!==i.originalEvent.touches?i.originalEvent.touches.length:1,e.touchObject.minSwipe=e.listWidth/e.options.touchThreshold,e.options.verticalSwiping===!0&&(e.touchObject.minSwipe=e.listHeight/e.options.touchThreshold),i.data.action){case"start":e.swipeStart(i);break;case"move":e.swipeMove(i);break;case"end":e.swipeEnd(i)}},e.prototype.swipeMove=function(i){var e,t,o,s,n,r,l=this;return n=void 0!==i.originalEvent?i.originalEvent.touches:null,!(!l.dragging||l.scrolling||n&&1!==n.length)&&(e=l.getLeft(l.currentSlide),l.touchObject.curX=void 0!==n?n[0].pageX:i.clientX,l.touchObject.curY=void 0!==n?n[0].pageY:i.clientY,l.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(l.touchObject.curX-l.touchObject.startX,2))),r=Math.round(Math.sqrt(Math.pow(l.touchObject.curY-l.touchObject.startY,2))),!l.options.verticalSwiping&&!l.swiping&&r>4?(l.scrolling=!0,!1):(l.options.verticalSwiping===!0&&(l.touchObject.swipeLength=r),t=l.swipeDirection(),void 0!==i.originalEvent&&l.touchObject.swipeLength>4&&(l.swiping=!0,i.preventDefault()),s=(l.options.rtl===!1?1:-1)*(l.touchObject.curX>l.touchObject.startX?1:-1),l.options.verticalSwiping===!0&&(s=l.touchObject.curY>l.touchObject.startY?1:-1),o=l.touchObject.swipeLength,l.touchObject.edgeHit=!1,l.options.infinite===!1&&(0===l.currentSlide&&"right"===t||l.currentSlide>=l.getDotCount()&&"left"===t)&&(o=l.touchObject.swipeLength*l.options.edgeFriction,l.touchObject.edgeHit=!0),l.options.vertical===!1?l.swipeLeft=e+o*s:l.swipeLeft=e+o*(l.$list.height()/l.listWidth)*s,l.options.verticalSwiping===!0&&(l.swipeLeft=e+o*s),l.options.fade!==!0&&l.options.touchMove!==!1&&(l.animating===!0?(l.swipeLeft=null,!1):void l.setCSS(l.swipeLeft))))},e.prototype.swipeStart=function(i){var e,t=this;return t.interrupted=!0,1!==t.touchObject.fingerCount||t.slideCount<=t.options.slidesToShow?(t.touchObject={},!1):(void 0!==i.originalEvent&&void 0!==i.originalEvent.touches&&(e=i.originalEvent.touches[0]),t.touchObject.startX=t.touchObject.curX=void 0!==e?e.pageX:i.clientX,t.touchObject.startY=t.touchObject.curY=void 0!==e?e.pageY:i.clientY,void(t.dragging=!0))},e.prototype.unfilterSlides=e.prototype.slickUnfilter=function(){var i=this;null!==i.$slidesCache&&(i.unload(),i.$slideTrack.children(this.options.slide).detach(),i.$slidesCache.appendTo(i.$slideTrack),i.reinit())},e.prototype.unload=function(){var e=this;i(".slick-cloned",e.$slider).remove(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.remove(),e.$nextArrow&&e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.remove(),e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},e.prototype.unslick=function(i){var e=this;e.$slider.trigger("unslick",[e,i]),e.destroy()},e.prototype.updateArrows=function(){var i,e=this;i=Math.floor(e.options.slidesToShow/2),e.options.arrows===!0&&e.slideCount>e.options.slidesToShow&&!e.options.infinite&&(e.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),e.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===e.currentSlide?(e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),e.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):e.currentSlide>=e.slideCount-e.options.slidesToShow&&e.options.centerMode===!1?(e.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),e.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):e.currentSlide>=e.slideCount-1&&e.options.centerMode===!0&&(e.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),e.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},e.prototype.updateDots=function(){var i=this;null!==i.$dots&&(i.$dots.find("li").removeClass("slick-active").end(),i.$dots.find("li").eq(Math.floor(i.currentSlide/i.options.slidesToScroll)).addClass("slick-active"))},e.prototype.visibility=function(){var i=this;i.options.autoplay&&(document[i.hidden]?i.interrupted=!0:i.interrupted=!1)},i.fn.slick=function(){var i,t,o=this,s=arguments[0],n=Array.prototype.slice.call(arguments,1),r=o.length;for(i=0;i<r;i++)if("object"==typeof s||"undefined"==typeof s?o[i].slick=new e(o[i],s):t=o[i].slick[s].apply(o[i].slick,n),"undefined"!=typeof t)return t;return o}});
public/js/wp-carousel-free-public.js ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function ($) {
2
+ 'use strict';
3
+ jQuery('body').find('.wpcp-carousel-section.wpcp-standard').each(function () {
4
+
5
+ var carousel_id = $(this).attr('id');
6
+ var _this = $(this);
7
+
8
+ if (jQuery().slick) {
9
+
10
+ jQuery('#' + carousel_id).slick({
11
+ prevArrow: '<div class="slick-prev"><i class="fa fa-angle-left"></i></div>',
12
+ nextArrow: '<div class="slick-next"><i class="fa fa-angle-right"></i></div>',
13
+ lazyLoad: 'ondemand',
14
+ });
15
+ }
16
+ });
17
+ })(jQuery);
public/shortcode-deprecated.php ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Registering shortcode.
4
+ *
5
+ * @package WP Carousel
6
+ */
7
+
8
+ if ( ! function_exists( 'wp_carousel_free_shortcode' ) ) {
9
+
10
+ /**
11
+ * Shortcode main function.
12
+ *
13
+ * @param mixed $attr The attributes of the shortcode.
14
+ * @return statement
15
+ */
16
+ function wp_carousel_free_shortcode( $attr ) {
17
+ $post = get_post();
18
+
19
+ static $instance = 0;
20
+ $instance ++;
21
+
22
+ if ( ! empty( $attr['ids'] ) ) {
23
+ if ( empty( $attr['orderby'] ) ) {
24
+ $attr['orderby'] = 'post__in';
25
+ }
26
+ $attr['include'] = $attr['ids'];
27
+ }
28
+
29
+ $output = apply_filters( 'sp_wcfgallery_shortcode', '', $attr );
30
+ if ( '' != $output ) {
31
+ return $output;
32
+ }
33
+
34
+ if ( isset( $attr['orderby'] ) ) {
35
+ $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
36
+ if ( ! $attr['orderby'] ) {
37
+ unset( $attr['orderby'] );
38
+ }
39
+ }
40
+
41
+ extract(
42
+ shortcode_atts(
43
+ array(
44
+ 'ids' => '',
45
+ 'items' => '5',
46
+ 'items_desktop' => '4',
47
+ 'items_desktop_small' => '3',
48
+ 'items_tablet' => '2',
49
+ 'items_mobile' => '1',
50
+ 'bullets' => 'false',
51
+ 'bullets_mobile' => 'false',
52
+ 'nav' => 'true',
53
+ 'nav_mobile' => 'true',
54
+ 'auto_play' => 'true',
55
+ 'autoplay_speed' => '3000',
56
+ 'speed' => '600',
57
+ 'infinite' => 'true',
58
+ 'pause_on_hover' => 'true',
59
+ 'swipe' => 'true',
60
+ 'draggable' => 'true',
61
+ 'size' => 'medium',
62
+ 'include' => '',
63
+ 'exclude' => '',
64
+ ), $attr, 'gallery'
65
+ )
66
+ );
67
+
68
+ // helper function to return shortcode regex match on instance occurring on page or post.
69
+ if ( ! function_exists( 'get_match' ) ) {
70
+ /**
71
+ * Find and match gallery shortcode
72
+ *
73
+ * @param mix $regex The regular expression.
74
+ * @param mix $content The regular expression content.
75
+ * @param mix $instance The regular expression match.
76
+ * @return statement
77
+ */
78
+ function get_match( $regex, $content, $instance ) {
79
+ preg_match_all( $regex, $content, $matches );
80
+
81
+ return $matches[1][ $instance ];
82
+ }
83
+ }
84
+
85
+ // Extract the shortcode arguments from the $page or $post.
86
+ $shortcode_args = shortcode_parse_atts( get_match( '/\[wcfgallery\s(.*)\]/isU', $post->post_content, $instance - 1 ) );
87
+
88
+ // get the ids specified in the shortcode call.
89
+ if ( is_array( $ids ) ) {
90
+ $ids = $shortcode_args['ids'];
91
+ }
92
+
93
+ $id = uniqid();
94
+ $order = 'DESC';
95
+ $orderby = 'title';
96
+
97
+ if ( 'RAND' == $order ) {
98
+ $orderby = 'none';
99
+ }
100
+
101
+ if ( ! empty( $ids ) ) {
102
+ $_attachments = get_posts(
103
+ array(
104
+ 'include' => $ids,
105
+ 'post_status' => 'inherit',
106
+ 'post_type' => 'attachment',
107
+ 'post_mime_type' => 'image',
108
+ 'order' => $order,
109
+ 'orderby' => $orderby,
110
+ )
111
+ );
112
+
113
+ $attachments = array();
114
+ foreach ( $_attachments as $key => $val ) {
115
+ $attachments[ $val->ID ] = $_attachments[ $key ];
116
+ }
117
+ } elseif ( ! empty( $exclude ) ) {
118
+ $attachments = get_children(
119
+ array(
120
+ 'post_parent' => $id,
121
+ 'exclude' => $exclude,
122
+ 'post_status' => 'inherit',
123
+ 'post_type' => 'attachment',
124
+ 'post_mime_type' => 'image',
125
+ 'order' => $order,
126
+ 'orderby' => $orderby,
127
+ )
128
+ );
129
+ }
130
+
131
+ if ( empty( $attachments ) ) {
132
+ return '';
133
+ }
134
+
135
+ if ( is_feed() ) {
136
+ $output = "\n";
137
+ foreach ( $attachments as $att_id => $attachment ) {
138
+ $output .= wp_get_attachment_link( $att_id, $size, true ) . "\n";
139
+ }
140
+
141
+ return $output;
142
+ }
143
+
144
+ $gallery_style = $gallery_div = '';
145
+
146
+ // Carousel Configurations.
147
+ wp_enqueue_script( 'wpcf-slick' );
148
+ wp_enqueue_script( 'wpcf-slick-config' );
149
+ $wpcp_slick_options = 'data-slick=\'{ "accessibility": true, "arrows":' . $nav . ', "autoplay":' . $auto_play . ', "autoplaySpeed":' . $autoplay_speed . ', "dots":' . $bullets . ', "infinite":' . $infinite . ', "speed":' . $speed . ', "pauseOnHover":' . $pause_on_hover . ', "slidesToShow":' . $items . ', "responsive":[ { "breakpoint":1200, "settings": { "slidesToShow":' . $items_desktop . ' } }, { "breakpoint":980, "settings":{ "slidesToShow":' . $items_desktop_small . ' } }, { "breakpoint":736, "settings": { "slidesToShow":' . $items_tablet . ' } }, {"breakpoint":480, "settings":{ "slidesToShow":' . $items_mobile . ', "arrows":' . $nav_mobile . ', "dots":' . $bullets_mobile . ' } } ], "rows":1, "swipe":' . $swipe . ', "draggable":' . $draggable . ' }\' ';
150
+
151
+ $gallery_div = "
152
+ <div id='wordpress-carousel-free-$id' class='wpcp-carousel-section wpcp-standard nav-vertical-center' $wpcp_slick_options>";
153
+
154
+ $output = apply_filters( 'gallery_style', $gallery_style . $gallery_div );
155
+
156
+ foreach ( $attachments as $attach_id => $attachment ) {
157
+ $wcf_image_url = wp_get_attachment_image_src( $attach_id, $size, false );
158
+ $wcf_image_title = $attachment->post_title;
159
+
160
+ $output .= "
161
+ <div class='wpcp-single-item'>
162
+ <img src='$wcf_image_url[0]' alt='$wcf_image_title' />
163
+ </div>";
164
+ }
165
+
166
+ $output .= "
167
+ </div>\n";
168
+
169
+ return $output;
170
+ }
171
+
172
+ add_shortcode( 'wcfgallery', 'wp_carousel_free_shortcode' );
173
+ }
public/templates/image-carousel.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The image carousel template.
4
+ *
5
+ * @package WP_Carousel_Free
6
+ * @subpackage WP_Carousel_Free/public/templates
7
+ */
8
+
9
+ // If this file is called directly, abort.
10
+ if ( ! defined( 'WPINC' ) ) {
11
+ die;
12
+ }
13
+
14
+ $gallery_ids = $upload_data['wpcp_gallery'];
15
+ $the_image_title_at = isset( $shortcode_data['wpcp_logo_link_nofollow'] ) ? $shortcode_data['wpcp_logo_link_nofollow'] : '';
16
+ $image_link_nofollow = true == $the_image_title_at ? ' rel="nofollow"' : '';
17
+ if ( empty( $gallery_ids ) ) {
18
+ return;
19
+ }
20
+ echo '<div class="wpcp-carousel-wrapper wpcp-wrapper-' . $post_id . '">';
21
+ if ( $section_title ) {
22
+ echo '<h2 class="sp-wpcpro-section-title">' . get_the_title( $post_id ) . '</h2>';
23
+ }
24
+ echo '<div id="sp-wp-carousel-free-id-' . $post_id . '" class="' . $carousel_classes . '" ' . $wpcp_slick_options . '>';
25
+ $attachments = explode( ',', $gallery_ids );
26
+ ( ( 'rand' == $image_orderby ) ? shuffle( $attachments ) : '' );
27
+ if ( is_array( $attachments ) || is_object( $attachments ) ) :
28
+ foreach ( $attachments as $attachment ) {
29
+ $image_data = get_post( $attachment );
30
+ $image_title = $image_data->post_title;
31
+ $image_alt_titles = $image_data->_wp_attachment_image_alt;
32
+ $image_alt_title = ! empty( $image_alt_titles ) ? $image_alt_titles : $image_title;
33
+ $image_url = wp_get_attachment_image_src( $attachment, $image_sizes );
34
+ $the_image_title_attr = ' title="' . $image_title . '"';
35
+ $image_title_attr = 'true' === $show_image_title_attr ? $the_image_title_attr : '';
36
+ $image_src = $image_url[0];
37
+ $image = sprintf( '<img src="%1$s"%2$s alt="%3$s">', $image_src, $image_title_attr, $image_alt_title );
38
+ // Single Item.
39
+ echo '<div class="wpcp-single-item">';
40
+ echo sprintf( '<div class="wpcp-slide-image">%1$s</div>', $image );
41
+ echo '</div>';
42
+ } // End foreach.
43
+ endif;
44
+ echo '</div>';
45
+ echo '</div>'; // Carousel Wrapper.
public/templates/post-carousel.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The image carousel template.
4
+ *
5
+ * @package WP_Carousel_Free
6
+ * @subpackage WP_Carousel_Free/public/templates
7
+ */
8
+
9
+ // If this file is called directly, abort.
10
+ if ( ! defined( 'WPINC' ) ) {
11
+ die;
12
+ }
13
+
14
+
15
+ $number_of_total_posts = ( isset( $upload_data['number_of_total_posts'] ) ? $upload_data['number_of_total_posts'] : '' );
16
+
17
+ $show_post_content = $shortcode_data['wpcp_post_content_show'];
18
+ $show_post_date = $shortcode_data['wpcp_post_date_show'];
19
+ $show_post_author = $shortcode_data['wpcp_post_author_show'];
20
+ $args = array(
21
+ 'post_type' => 'post',
22
+ 'post_status' => 'publish',
23
+ 'order' => $post_order,
24
+ 'orderby' => $post_order_by,
25
+ 'ignore_sticky_posts' => 1,
26
+ 'posts_per_page' => $number_of_total_posts,
27
+ );
28
+
29
+ // Carousel Wrapper Start.
30
+ echo '<div class="wpcp-carousel-wrapper wpcp-wrapper-' . $post_id . '">';
31
+ if ( $section_title ) {
32
+ echo '<h2 class="sp-wpcpro-section-title">' . get_the_title( $post_id ) . '</h2>';
33
+ }
34
+ echo '<div id="sp-wp-carousel-free-id-' . $post_id . '" class="' . $carousel_classes . '" ' . $wpcp_slick_options . '>';
35
+ $post_query = new WP_Query( $args );
36
+ if ( $post_query->have_posts() ) {
37
+ while ( $post_query->have_posts() ) :
38
+ $post_query->the_post();
39
+ $image = '';
40
+ if ( has_post_thumbnail( $post_query->post->ID ) && $show_slide_image ) {
41
+ $image_id = get_post_thumbnail_id();
42
+ $image_url = wp_get_attachment_image_src( $image_id, $image_sizes );
43
+ $image_alt_text = get_post_meta( $image_id, '_wp_attachment_image_alt', true );
44
+ $the_image_title_attr = ' title="' . the_title_attribute( 'echo=0' ) . '"';
45
+ $image_title_attr = ( 'true' === $show_image_title_attr ) ? $the_image_title_attr : '';
46
+
47
+ $post_thumb = sprintf( '<img class="wpcp-post-thumb" src="%1$s"%2$s alt="%3$s">', $image_url[0], $image_title_attr, $image_alt_text );
48
+
49
+ $image = sprintf( '<div class="wpcp-slide-image"><a href="%2$s">%1$s</a></div>', $post_thumb, get_the_permalink() );
50
+
51
+ } // End of Has post thumbnail.
52
+
53
+ // Post Title.
54
+ $title = sprintf( '<h2 class="wpcp-post-title"><a href="%1$s">%2$s</a></h2>', get_the_permalink(), get_the_title() );
55
+ $wpcp_post_title = ( $show_img_title && ! empty( get_the_title() ) ) ? $title : '';
56
+
57
+ // The Post Author.
58
+ $the_post_author_name = sprintf( '<li><a href="%1$s">%2$s%3$s</a></li>', get_author_posts_url( get_the_author_meta( 'ID' ) ), __( ' By ', 'wp-carousel-free' ), get_the_author() );
59
+ $post_author_name = $show_post_author ? $the_post_author_name : '';
60
+
61
+ // The Post Date.
62
+ $post_update_date = sprintf( '<time class="updated wpcp-hidden" datetime="%1$s">%2$s</time>', get_the_modified_date( 'c' ), get_the_modified_date() );
63
+ $wpcp_post_date = sprintf( '<li><time class="entry-date published updated" datetime="%1$s">%2$s%3$s</time></li>', get_the_date( 'c' ), __( 'On ', 'wp-carousel-free' ), get_the_date() );
64
+ $post_date = $show_post_date ? $wpcp_post_date : '';
65
+
66
+ // The Post Meta.
67
+ $wpcp_post_meta = '';
68
+ if ( $show_post_date || $show_post_author ) {
69
+ $wpcp_post_meta = sprintf( '<ul class="wpcp-post-meta">%1$s%2$s</ul>', $post_author_name, $post_date );
70
+ }
71
+
72
+ // Post Content.
73
+ $wpcp_post_content = sprintf( '<p>%1$s</p>', get_the_excerpt() );
74
+
75
+ $all_captions = '';
76
+ if ( $show_img_title || $show_post_content || ! empty( $wpcp_post_meta ) ) {
77
+ $all_captions = '<div class="wpcp-all-captions">' . $wpcp_post_title . ( $show_post_content ? $wpcp_post_content : '' ) . $wpcp_post_meta . '</div>';
78
+ }
79
+
80
+ if ( $image || $all_captions ) {
81
+ echo '<div class="wpcp-single-item">';
82
+ echo $image . $all_captions;
83
+ echo '</div>';
84
+ }
85
+ endwhile;
86
+ wp_reset_postdata();
87
+ } else {
88
+ echo '<h2 class="wpcp-no-post-found" >' . esc_html__( 'No posts found', 'wp-carousel-free' ) . '</h2>';
89
+ }
90
+ echo '</div>';
91
+ echo '</div>'; // Carousel Wrapper.
public/templates/product-carousel.php ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The image carousel template.
4
+ *
5
+ * @package WP_Carousel_Free
6
+ * @subpackage WP_Carousel_Free/public/templates
7
+ */
8
+
9
+ // If this file is called directly, abort.
10
+ if ( ! defined( 'WPINC' ) ) {
11
+ die;
12
+ }
13
+ if ( ! class_exists( 'WooCommerce' ) ) {
14
+ return;
15
+ }
16
+
17
+ $number_of_total_products = $upload_data['wpcp_total_products'];
18
+
19
+ // $show_product_image = $shortcode_data['show_image'];
20
+ $show_product_name = $shortcode_data['wpcp_product_name'];
21
+ $show_product_price = $shortcode_data['wpcp_product_price'];
22
+ $show_product_rating = $shortcode_data['wpcp_product_rating'];
23
+ $show_product_cart = $shortcode_data['wpcp_product_cart'];
24
+ $default_args = array(
25
+ 'post_type' => 'product',
26
+ 'post_status' => 'publish',
27
+ 'ignore_sticky_posts' => 1,
28
+ 'posts_per_page' => $number_of_total_products,
29
+ 'order' => $post_order,
30
+ 'orderby' => $post_order_by,
31
+ 'meta_query' => array(
32
+ array(
33
+ 'key' => '_stock_status',
34
+ 'value' => 'outofstock',
35
+ 'compare' => 'NOT IN',
36
+ ),
37
+ ),
38
+ );
39
+ $product_query = new WP_Query( $default_args );
40
+
41
+ // Carousel Wrapper Start.
42
+ echo '<div class="wpcp-carousel-wrapper wpcp-wrapper-' . $post_id . '">';
43
+ if ( $section_title ) {
44
+ echo '<h2 class="sp-wpcpro-section-title">' . get_the_title( $post_id ) . '</h2>';
45
+ }
46
+ echo '<div id="sp-wp-carousel-free-id-' . $post_id . '" class="' . $carousel_classes . '" ' . $wpcp_slick_options . '>';
47
+ if ( $product_query->have_posts() ) {
48
+ while ( $product_query->have_posts() ) :
49
+ $product_query->the_post();
50
+ global $product, $woocommerce;
51
+ echo '<div class="wpcp-single-item">';
52
+
53
+ $product_thumb_id = get_post_thumbnail_id();
54
+ $product_thumb_alt_text = get_post_meta( $product_thumb_id, '_wp_attachment_image_alt', true );
55
+ $image_url = wp_get_attachment_image_src( $product_thumb_id, $image_sizes );
56
+ $the_image_title_attr = ' title="' . get_the_title() . '"';
57
+ $image_title_attr = 'true' == $show_image_title_attr ? $the_image_title_attr : '';
58
+
59
+ // Product Thumbnail.
60
+ $wpcp_product_image = '';
61
+ if ( ! empty( $image_url[0] ) && $show_slide_image ) {
62
+ $wpcp_product_thumb = sprintf( '<img class="wpcp-product-image" src="%1$s"%2$s alt="%3$s" />', $image_url[0], $image_title_attr, $product_thumb_alt_text );
63
+
64
+ $wpcp_product_image = sprintf( '<div class="wpcp-slide-image"><a href="%1$s">%2$s</a></div>', get_the_permalink(), $wpcp_product_thumb );
65
+ }
66
+
67
+ // Product name.
68
+ $wpcp_product_name = sprintf( '<h2 class="wpcp-product-title"><a href="%1$s">%2$s</a></h2>', get_the_permalink(), get_the_title() );
69
+
70
+ $price_html = $product->get_price_html();
71
+ if ( $price_html ) {
72
+ $wpcp_product_price = sprintf( '<div class="wpcp-product-price">%1$s</div>', $price_html );
73
+ }
74
+
75
+ // Product rating.
76
+ $av_rating = $product->get_average_rating();
77
+ $average_rating = ( $av_rating / 5 ) * 100;
78
+ if ( $average_rating > 0 ) {
79
+ $wpcp_product_rating = sprintf( '<div class="wpcp-product-rating woocommerce"><div class="woocommerce-product-rating"><div class="star-rating" title="%1$s %2$s %3$s"><span style="width:%4$s"></span></div></div></div>', __( 'Rated ', 'wp-carousel-free' ), $av_rating, __( ' out of 5', 'wp-carousel-free' ), $average_rating . '%' );
80
+ }
81
+
82
+ // Add to cart button.
83
+ $wpcp_cart = apply_filters( 'wpcp_filter_product_cart', do_shortcode( '[add_to_cart id="' . get_the_ID() . '" show_price="false" style="none"]' ) );
84
+ $wpcp_cart_button = sprintf( '<div class="wpcp-cart-button">%1$s</div>', $wpcp_cart );
85
+
86
+ if ( $show_product_name || $show_product_rating || $show_product_price || $show_product_cart ) {
87
+ $wpcp_product_details = '<div class="wpcp-all-captions">' . ( ( $show_product_name ) && isset( $wpcp_product_name ) ? $wpcp_product_name : '' ) . ( $show_product_price && isset( $wpcp_product_price ) ? $wpcp_product_price : '' ) . ( $show_product_rating && isset( $wpcp_product_rating ) ? $wpcp_product_rating : '' ) . ( $show_product_cart ? $wpcp_cart_button : '' ) . '</div>';
88
+ }
89
+ echo $wpcp_product_image . $wpcp_product_details;
90
+ echo '</div>';
91
+
92
+ endwhile;
93
+ wp_reset_postdata();
94
+ } else {
95
+ $outline .= '<h2 class="sp-not-found-any-post" >' . esc_html__( 'No products found', 'wp-carousel-free' ) . '</h2>';
96
+ }
97
+ echo '</div>
98
+ </div>'; // Carousel Wrapper.
readme.txt CHANGED
@@ -1,153 +1,219 @@
1
  === WordPress Carousel ===
2
  Contributors: shapedplugin
3
  Donate link: http://shapedplugin.com/donate
4
- Tags: carousel, slider, carousel plugin, testimonial, best testimonial, client testimonials plugin, wordpress testimonial, smooth testimonial, woocommerce slider, woocommerce product slider, woocommerce product carousel, lightbox, nice lightbox, carousel slider, logo carousel, carousel shortcode, client carousel, easy carousel, best logo carousel, best carousel, easy logo carousel, best client logo carousel, best logo slider, image carousel, image slider, post carousel, post slider, logo carousel, Nice carousel, responsive carousel, touch carousel, wordpress carousel, top logo slider, shortcode slider, shortcode carousel, free logo slider carousel, animations, autoplay, ecommerce, product, product carousel, product category, product slider, product slider carousel, product slider categories
5
  Requires at least: 4.3
6
- Tested up to: 4.9.8
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
10
 
11
- A simple and powerful WordPress Carousel plugin for creating beautiful carousel using your regular media uploader with shortcode easily.
12
 
13
 
14
  == Description ==
15
- [__Live Demo__](https://wordpresscarousel.com/) | [__Upgrade to PRO!__](https://shapedplugin.com/plugin/wordpress-carousel-pro/) | [__Documentation__](https://shapedplugin.com/docs/docs/wordpress-carousel-pro/) | [__Support__](https://shapedplugin.com/support-forum/)
16
 
17
- [youtube https://www.youtube.com/watch?v=0rxYjMWDZ7k]
18
 
19
- WordPress Carousel is a Powerful Carousel plugin for WordPress that enables you to create beautiful carousel using your regular media uploader. This plugin has nice combination in WordPress regular gallery.
20
 
21
- Default WordPress gallery shortcode is <code>[gallery ids="39,38,37,36,35,34,31"]</code>. Just add 'wcf' before the gallery text. So, your shortcode will be <code>[wcfgallery ids="39,38,37,36,35,34,31"]</code>. Easy enough!
22
 
23
- You can add unlimited carousel in page or post or anywhere you want.
 
 
 
 
 
 
 
 
 
 
24
 
25
- **Plugin Features**:
26
 
27
- * Fully Responsive and Mobile friendly.
28
- * Lightweight, fast &amp; powerful.
29
- * AutoPlay on/off.
30
- * Show/hide navigation arrow in the carousel.
31
- * Show/hide bullets or pagination dots.
32
- * Multiple slideshows (supports more than one carousel per page).
33
- * Control number of carousel items in different devices.
34
- * Translation Ready.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  * Compatible with any theme.
36
- * Developer friendly &amp; easy to customize.
37
- * SEO friendly &amp; optimized for speed.
38
- * Support all modern browsers: Firefox, Chrome, IE, Safari etc.
39
- * Free basic support.
40
- * And much more.
41
-
42
-
43
- = WordPress Carousel PRO =
44
-
45
- [__WordPress Carousel Pro__](https://wordpresscarousel.com/) is the most beginner friendly multi-purpose WordPress Carousel plugin to slide **images, Posts, WooCommerce Products, Contents (Images, Text, HTML, Shortcodes), Video etc. The plugin has own image and content management system and also supports Posts, Pages, Custom Post Type, Taxonomy, Custom Taxonomy, Custom Contents, YouTube, Vimeo, Dailymotion, mp4, WebM, self-hosted video with Lightbox.** It's fully responsive, highly customizable and works smoothly on iPhone, iPad, Android, Firefox, Chrome, Safari, Opera and Edge.
46
-
47
- It’s even easier to put images of different height together so the width is dynamic with fixed height so that your site looks pretty.
48
-
49
- WordPress Carousel Pro vastly improves user experience and lets you create the following type of beautiful carousel sliders:
50
-
51
- * Image Carousel
52
- * Post Carousel
53
- * Product Carousel
54
- * Content Carousel (Images, Text, HTML, Shortcodes etc.)
55
- * Video Carousel
56
-
57
-
58
- = Pro Version Key Features =
59
-
60
- * Fully Responsive and Touch-friendly.
61
- * Advanced Shortcode Generator.
62
- * **Slide Anything. (e.g. image, post, product, content, video, text, HTML, Shortcodes etc.)**
63
- * **Display posts from multiple Categories, Tags, Formats, or Types. (e.g. Latest, Taxonomies, Specific etc.).**
64
- * Add Unlimited Carousels. (e.g. post, page, custom template, widget or anywhere you want.)
65
- * 840+ Google Fonts (Advanced Typography).
66
- * Enable/Disable option for Google Font loading.
67
- * 100+ Advanced Styling and Visual Customization options.
68
- * Drag & Drop ordering image, content, video.
69
- * Image Internal and External Links.
70
- * **Image Carousel (with caption and description.)**
71
- * Image Content Position (Bottom, Right, and Overlay).
72
- * Show/hide image caption and description.
73
- * Slide border and inner padding.
74
- * Lightbox functionality for images.
75
- * Lightbox images group by the view.
76
- * Smart lazy-loading option for images.
77
- * GrayScale effect for images.
78
- * Soft and Hard cropping option for image.
79
- * Set equal or fixed height with CSS for images.
80
- * Variable width option in the carousel.
81
- * Image Title Attribute option.
82
- * **Post Carousel.**
83
- * Show the standard post contents or select which content you want to display. (Title, image, excerpt, read more, category, date, author, tags, comments etc.)
84
- * Post excerpt and full content display option.
85
- * Show Post Content with Words Limit.
86
- * Show/hide read more button.
87
- * Read more button text customization option.
88
- * **WooCommerce Product Carousel.**
89
- * Product content position (Bottom, right, overlay)
90
- * Filter by different product types. (e.g. latest, categories, specific products etc.).
91
- * Show/hide the standard product contents. (Product name, image, price, excerpt, read more, rating, add to cart etc.).
92
- * Limit product description.
93
- * Post order (Ascending & Descending) and order by ID, date, random, title, modified etc.
94
- * **Content Carousel**
95
- * Slide anything you want based on your website. (e.g. images, text, HTML, shortcodes, any custom contents etc.)
96
- * **Video Carousel.**
97
- * Video icon color.
98
- * Add video caption and description.
99
- * Custom CSS field to override styles.
100
- * Display carousel section title.
101
- * Set margin-bottom for the section title.
102
- * Scripts Enqueue or Dequeue options to avoid conflicts.
103
- * Carousel Mode (standard and ticker).
104
- * AutoPlay on/off.
105
- * Control AutoPlay and Pagination speed.
106
- * Stop on hover carousel.
107
- * Infinite looping for the carousel.
108
- * Touch, swipe or tap on Android, iOS or any other touch devices.
109
- * Mouse Draggable options.
110
- * Adaptive height for the carousel.
111
- * Enable or Disable carousel scroll with tab and keyboard.
112
- * Set the number of slides to scroll.
113
- * Show/hide carousel navigation and pagination dots.
114
- * 8+ Different navigation positions.
115
- * 6 FontAwesome directional icons.
116
- * Hide navigation border and background.
117
- * Set carousel pagination dots margin.
118
- * Unlimited colors and styling options.
119
- * Different types of sliding and hover effects.
120
- * Control carousel column on different devices.
121
- * Multilingual Ready with WPML, Polylang, qTranslate-x, GTranslate, Google Language Translator, WPGlobus etc.
122
- * Page Builders Ready: Gutenberg, WPBakery, Elementor, BeaverBuilder, SiteOrgin, Divi builder, LayersWP, MotoPress, CornerStone, Themify Builder and more.
123
- * Duplicate or clone carousels.
124
- * Multisite supported.
125
- * Automatic update integration.
126
- * Widget ready.
127
- * RTL supported.
128
- * Compatible with any theme or extension.
129
- * Support all browsers: Firefox, Chrome, IE, Safari etc.
130
- * SEO friendly & optimized for speed.
131
- * Extensive Online docs & Video Tutorials.
132
- * Fast and friendly support.
133
- * Any new features we add in the future (which is often).
134
- * And so much more!
135
-
136
- **WordPress Carousel Pro - Admin Panel Overview**
137
-
138
- [youtube https://www.youtube.com/watch?v=XMYYgFD7ZIA]
139
-
140
- = Premium Support and Documentation =
141
-
142
- The premium version of the plugin entitles you to get fast, friendly, and priority support with replies posted within 24 hours (without holidays). Please submit a [__Support Ticket__](https://shapedplugin.com/support-forum/) here. This will create a support ticket in our support portal.
143
-
144
- For documentation and tutorials go to our [__Documentation__](https://shapedplugin.com/docs/docs/wordpress-carousel-pro/).
145
-
146
-
147
- = Author =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  Designed and Developed by [__ShapedPlugin__](https://shapedplugin.com/)
149
 
150
 
 
151
  == Installation ==
152
 
153
  = MINIMUM REQUIREMENTS =
@@ -188,73 +254,96 @@ The WordPress codex contains <a href="https://codex.wordpress.org/Managing_Plugi
188
 
189
  == Frequently Asked Questions ==
190
 
191
- = Who should use WordPress Carousel? =
192
- WordPress Carousel is perfect for photographers, designers, bloggers, different organizations, and small to large businesses. Basically if you want to create a beautiful carousel, then you need to use WordPress Carousel.
193
-
194
- = How can I create WordPress Carousel? =
195
- Installing this plugin as regular WordPress plugin.
196
-
197
- After install, you are ready to use carousel in your post, page, widget or anywhere you like. How to create carousel? lets see.
198
-
199
- Now we are going to add a carousel in a regular page. Go to Page > Add New. Click on "Add Media", then you can see media uploader. Now click on "Create gallery, then upload some photos here."
200
-
201
- After adding all necessary information, Click the blue button saying "Create a new gallery". You can re-organize carousel items here. Ignore the gallery settings, just click the blue button saying "Create Gallery"
202
-
203
- Then you will get WordPress default gallery shortcode in your editor, you can't see gallery shortcode, just click on text editor form right. just add wcf before the gallery shortcode. If your gallery shortcode is [gallery ids="39,38,37,36,35,34,31"], just add wcf before the gallery text. So your shortcode will look like [wcfgallery ids="39,38,37,36,35,34,31"]
204
-
205
- Now save your page, then visit the newly created page & see something awesome. :)
206
-
207
- Shortcode attributes
208
- `
209
- ids => use image ids
210
- items => items limit. default:5
211
- items_desktop => desktop items limit. default:4
212
- items_desktop_small => small desktop items limit. default:3
213
- items_tablet => tablet items limit. default:2
214
- items_mobile => mobile items limit. default:1
215
- bullets => true / false. default: false
216
- nav => true / false. default: true
217
- auto_play => true / false. default: true
218
- `
219
-
220
- = Is WordPress Carousel responsive? =
221
- Yes, the WordPress Carousel is 100% responsive & columns structured. You can control to show a number of post columns on different devices.
222
-
223
- = Should I purchase the Pro version? =
224
- WordPress Carousel Pro includes tons of amazing and useful features. If you’re interested to get the WordPress Carousel Pro, Please go to [__Upgrade to Pro!__](http://shapedplugin.com/plugin/wordpress-carousel-pro/) Page and browse [__Live Demo__](http://shapedplugin.com/demo/wordpress-carousel-pro/).
225
-
226
- = Is the WordPress Carousel compatible with my theme? =
227
- WordPress Carousel works nicely with any theme if themes are developed according to WordPress standard.
228
-
229
- = How can I get support if the plugin is not working? =
230
- If you face any problem with our plugin or something is not working as it should, first follow the preliminary steps:
231
- Test the plugin with a WordPress default theme, to be sure that the error is not caused by the theme you are currently using.
232
-
233
- Deactivate all plugins you are using and check if the problem is still occurring.
234
- Ensure that your plugin version and your theme version are updated and the problem you are experiencing has not already been solved in a later plugin update.
235
-
236
- If none of the previously listed actions help you solve the problem, then, submit a ticket in the forum and describe your problem accurately, specify WordPress and Plugin versions you are using and any other information that might help us solve your problem as quickly as possible.
237
 
238
- PRO version users [__Support Forum__](https://shapedplugin.com/support/) and Free or Lite Version [__Support Forum__](https://shapedplugin.com/support-forum/).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
 
240
- = Where can I report bugs? =
241
- Bugs can be reported in our [__Support Forum__](https://shapedplugin.com/support-forum/).
242
 
243
- = Do you want to encourage for future improvement? =
244
- If you like this plugin, please give us [__5 stars__](https://wordpress.org/support/plugin/wp-carousel-free/reviews/?filter=5#new-post) to encourage for future improvement
245
 
246
- Thanks!
247
 
 
 
 
 
 
 
 
 
 
 
248
 
249
 
250
- == Screenshots ==
251
 
252
- 1. Uploading Media > Creating gallery.
253
- 2. Carousel Demo.
254
- 3. Premium Version Demo.
255
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
 
257
- == Changelog ==
258
 
259
  = 1.4.9 =
260
  * Fix: Image size issue.
1
  === WordPress Carousel ===
2
  Contributors: shapedplugin
3
  Donate link: http://shapedplugin.com/donate
4
+ Tags: wordpress carousel, best carousel plugin, image carousel, image slider, post carousel, custom post carousel, custom taxonomy carousel, woocommerce product carousel, content carousel, video carousel, video slider, video lightbox, youtube carousel, video gallery, carousel, slider, responsive slider, responsive carousel, carousel slider, ticker carousel, center mode carousel, slide anything, image gallery, image lightbox, wordpress image gallery, photo gallery, gallery slider, wordpress gallery plugin, gallery, post slider, vimeo slider, self hosted video carousel, content slider, wordpress slider, featured content slider, html slider, horizontal carousel slider, posts content slider, product carousel, woocommerce slider, woocommerce product slider
5
  Requires at least: 4.3
6
+ Tested up to: 5.0.2
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
10
 
11
+ The Most Powerful and User-friendly WordPress Carousel Plugin. Create beautiful carousels in minutes using Images, Posts, WooCommerce Products etc.
12
 
13
 
14
  == Description ==
 
15
 
16
+ [youtube https://www.youtube.com/watch?v=hCeKn8jmxn4]
17
 
18
+ [__Live Demo__](https://wordpresscarousel.com/) | [__Video Tutorials__](https://www.youtube.com/shapedplugin/) | [__Documentation__](https://shapedplugin.com/docs/docs/wordpress-carousel/) | [__PRO Features &raquo;__](https://wordpresscarousel.com/#feature)
19
 
 
20
 
21
+ = Overview =
22
+
23
+ **WordPress Carousel** is the most powerful and user-friendly WordPress Carousel plugin to create beautiful carousels with **Images, Posts, WooCommerce Products etc.** This plugin will allow you simply select images from WordPress media library, drag and drop them into place and also supports WordPress posts and WooCommerce products. It's fully responsive, highly customizable and works smoothly on iPhone, iPad, Android, Firefox, Chrome, Safari, Opera and Edge.
24
+
25
+ We believe that you shouldn't be a coder or hire a developer to create a carousel for your WordPress site. That’s why we built the **WordPress Carousel** plugin that’s both **EASY and POWERFUL.**
26
+
27
+ = WordPress Carousel 2.0 =
28
+
29
+ **WordPress Carousel 2.0** has completely been rebuilt and this provides you now many improvements and new amazing features.
30
+
31
+ = You'll be able to display =
32
 
33
+ * **Image Carousel** – Create beautiful image carousels with uploading images via WordPress regular media gallery. Easily drag and drop image slides.
34
 
35
+ * **Post Carousel** Display WordPress latest posts in the carousel with post title, image, excerpt, date, author etc.
36
+
37
+ * **WooCommerce Product Carousel** – Display latest WooCommerce products carousel. Show/hide the product name, image, price, rating, add to cart button etc.
38
+
39
+
40
+ = Key Feature List =
41
+
42
+ * Fully Responsive and Touch-friendly.
43
+ * Lightweight, Fast & Powerful.
44
+ * **Shortcode Generator.**
45
+ * Extremely User-friendly Admin Panel.
46
+ * **Create Carousel using images from media gallery, posts, products etc.**
47
+ * **Drag and drop image slides Re-ordering.**
48
+ * **Multiple Carousels.** (Create unlimited carousels into same page)
49
+ * **Multisite Supported.**
50
+ * Set border for image slide.
51
+ * AutoPlay on/off.
52
+ * AutoPlay Speed Control.
53
+ * Stop on hover carousel.
54
+ * Infinite looping for the carousel.
55
+ * Show/hide Navigation and Pagination dots.
56
+ * Navigation & Pagination dots color.
57
+ * Unlimited color and styling options.
58
+ * Control carousel columns on different devices.
59
+ * Display random order.
60
+ * Unique settings for each carousel.
61
+ * Touch Swipe options.
62
+ * Mouse Draggable enable or disable.
63
+ * Multilingual Ready.
64
+ * RTL Supported.
65
+ * Widget Supported.
66
  * Compatible with any theme.
67
+ * Advanced Settings to enqueue or dequeue Scripts/CSS.
68
+ * Custom CSS field to override styles.
69
+ * Developer friendly & easy to customize.
70
+ * SEO friendly & optimized for speed.
71
+ * Support all modern browsers: IE, Firefox, Chrome, Safari, Opera, Edge etc.
72
+ * Documentation and Video Tutorials.
73
+ * **Fast and Active Support.**
74
+ * And much more options.
75
+
76
+
77
+ = For fast support, features request, and bug reporting =
78
+
79
+ >Ask us at [__Support Forum.__](https://shapedplugin.com/support-forum/)
80
+
81
+
82
+ = WordPress Carousel Pro =
83
+
84
+ [__WordPress Carousel Pro__](https://wordpresscarousel.com/) is the most powerful and user-friendly multi-purpose WordPress Carousel plugin to create beautiful carousels with **images, Posts, WooCommerce Products, Contents (Images, Text, HTML, Shortcodes), Video** etc. The plugin has own image and content management system and also supports **Posts, Pages, Custom Post Type, Taxonomy, Custom Taxonomy, Custom Contents, YouTube, Vimeo, Dailymotion, mp4, WebM, Self-hosted Video with Lightbox.** It's fully responsive, highly customizable and works smoothly on iPhone, iPad, Android, Firefox, Chrome, Safari, Opera and Edge.
85
+
86
+ It’s even easier to put images of different height together so the width is dynamic with fixed height so that your site looks pretty. The plugin vastly improves user experience and lets you create different types of beautiful carousels easily and quickly.
87
+
88
+ = Popular Carousel Types =
89
+
90
+ * **Image Carousel** - WordPress Carousel Pro allows you to create beautiful image carousels for your site in minutes! Upload images via WordPress regular media gallery, create a gallery to make carousel.
91
+ * **Post Carousel** - Display posts from multiple Categories, Tags, Formats, or Types: Latest, Taxonomies, Specific etc. Show the standard post contents: title, image, excerpt, read more, category, date, author, tags, comments etc.
92
+ * **Product Carousel** - Filter by different product types. (e.g. latest, categories, specific products etc.). Show/hide the product name, image, price, excerpt, read more, rating, add to cart button etc.
93
+ * **Content Carousel (Slide Anything)** - Slide anything you want based on your WordPress site. (e.g. images, text, HTML, shortcodes, any custom contents etc.) You can sort slide content by drag and drop easily.
94
+ * **Video Carousel** - Show videos from multiple sources: YouTube, Vimeo, Dailymotion, mp4, WebM, and even self-hosted video with Lightbox. A customizable video icon will place over the video thumb.
95
+
96
+
97
+
98
+ = WordPress Carousel Pro Features =
99
+
100
+ * [__All Sample Carousels__](https://wordpresscarousel.com/) (Live Demo in action).
101
+ * Fully Responsive and Touch-friendly.
102
+ * Advanced Shortcode Generator.
103
+ * **Slide Anything. (e.g. Image, Post, Product, Content, Video, Text, HTML, Shortcodes etc.)**
104
+ * **Display posts from multiple Categories, Tags, Formats, or Types. (e.g. Latest, Taxonomies, Specific etc.).**
105
+ * Add Unlimited Carousels. (e.g. post, page, custom template, widget or anywhere you want.)
106
+ * **840+ Google Fonts** (Advanced Typography).
107
+ * Enable/Disable option for Google Font loading.
108
+ * **100+ Advanced Styling and Visual Customization options.**
109
+ * Drag & Drop ordering Image, Content, Video.
110
+ * **Image Internal and External Links.**
111
+ * **Image Carousel (with caption and description.)**
112
+ * **Image Content Position (Bottom, Right, and Overlay).**
113
+ * Show/hide image caption and description.
114
+ * Slide border and inner padding.
115
+ * **Lightbox functionality for images.**
116
+ * Lightbox images group by the view.
117
+ * Smart lazy-loading option for images.
118
+ * GrayScale effect for images.
119
+ * Soft and Hard cropping option for image.
120
+ * Set equal or fixed height with CSS for images.
121
+ * Variable width option in the carousel.
122
+ * Image Title Attribute option.
123
+ * **Post Carousel.**
124
+ * Show the standard post contents or select which content you want to display. (Title, image, excerpt, read more, category, date, author, tags, comments etc.)
125
+ * Post excerpt and full content display option.
126
+ * Show Post Content with words limit.
127
+ * Show/hide read more button.
128
+ * Read more button text customization option.
129
+ * **WooCommerce Product Carousel.**
130
+ * **Product content position** (Bottom, right, overlay)
131
+ * **Filter by different product types. (e.g. latest, categories, specific products etc.).**
132
+ * Show/hide the standard product contents. (Product name, image, price, excerpt, read more, rating, add to cart etc.).
133
+ * Limit product description.
134
+ * Post order (Ascending & Descending) and order by ID, date, random, title, modified etc.
135
+ * **Content Carousel**
136
+ * **Slide Anything you want based on your website. (e.g. images, text, HTML, shortcodes, any custom contents etc.)**
137
+ * **Video Carousel.**
138
+ * Video icon color customization.
139
+ * Add video caption and description.
140
+ * Add custom video thumbnail for the Self-hosted Video.
141
+ * Custom CSS field to override styles.
142
+ * Display carousel section title.
143
+ * Set margin-bottom for the section title.
144
+ * Scripts Enqueue or Dequeue options to avoid conflicts.
145
+ * **Carousel Mode (Standard, Ticker and Center Mode).**
146
+ * AutoPlay on/off.
147
+ * Control AutoPlay and Pagination speed.
148
+ * Stop on hover carousel.
149
+ * Infinite looping for the carousel.
150
+ * Touch, swipe or tap on Android, iOS or any other touch devices.
151
+ * Mouse Draggable options.
152
+ * Adaptive height for the carousel.
153
+ * Enable or Disable carousel scroll with tab and keyboard.
154
+ * Set the number of slides to scroll.
155
+ * Show/hide carousel navigation and pagination dots.
156
+ * 8+ Different navigation positions.
157
+ * 6 FontAwesome directional icons.
158
+ * Hide navigation border and background.
159
+ * Set carousel pagination dots margin.
160
+ * Unlimited colors and styling options.
161
+ * Different types of sliding and hover effects.
162
+ * Control carousel column on different devices.
163
+ * Duplicate or clone carousels.
164
+ * Multisite supported.
165
+ * Automatic update integration.
166
+ * Widget ready.
167
+ * RTL supported.
168
+ * Compatible with any theme or extension.
169
+ * Support all browsers: Firefox, Chrome, IE, Safari etc.
170
+ * SEO friendly & optimized for speed.
171
+ * Extensive Online docs & Video Tutorials.
172
+ * **Fast and friendly support.**
173
+ * Any new features we add in the future (which is often).
174
+ * [__Full list of PRO features.__](https://shapedplugin.com/plugin/wordpress-carousel-pro/)
175
+
176
+
177
+ = Multilingual Ready =
178
+
179
+ * [WPML](https://wpml.org/)
180
+ * [Polylang](https://wordpress.org/plugins/polylang/)
181
+ * [qTranslate-x](https://wordpress.org/plugins/qtranslate-x/)
182
+ * [GTranslate](https://wordpress.org/plugins/gtranslate/)
183
+ * [Google Language Translator](https://wordpress.org/plugins/google-language-translator/)
184
+ * [WPGlobus](https://wordpress.org/plugins/wpglobus/)
185
+
186
+ = Page Builders Ready =
187
+
188
+ * Gutenberg (WordPress 5.0.2)
189
+ * WPBakery
190
+ * Elementor
191
+ * BeaverBuilder
192
+ * SiteOrgin
193
+ * DiviBuilder
194
+ * LayersWP
195
+ * MotoPress
196
+ * CornerStone
197
+ * Themify Builder etc.
198
+
199
+
200
+ **WordPress Carousel Pro - Admin Panel Overview**
201
+
202
+ [youtube https://www.youtube.com/watch?v=XMYYgFD7ZIA]
203
+
204
+ [__Watch all Tutorials &raquo;__](https://www.youtube.com/watch?v=m2XP6GNW0mE&index=2&list=PLoUb-7uG-5jNgTTcnUflIiytxgTWaBEzm)
205
+
206
+ = Premium Support and Documentation =
207
+
208
+ The premium version of the plugin entitles you to get fast, friendly, and priority support with replies posted within 24 hours (without holidays). Please [__submit__](https://shapedplugin.com/ask-question/) a support ticket here. This will create a support thread in our support portal.
209
+
210
+ For documentation and tutorials go to our [__Documentation__](https://shapedplugin.com/docs/docs/wordpress-carousel-pro/).
211
+
212
+ = Author =
213
  Designed and Developed by [__ShapedPlugin__](https://shapedplugin.com/)
214
 
215
 
216
+
217
  == Installation ==
218
 
219
  = MINIMUM REQUIREMENTS =
254
 
255
  == Frequently Asked Questions ==
256
 
257
+ = Who should use WordPress Carousel? =
258
+
259
+ **WordPress Carousel** is perfect for photographers, designers, bloggers, different organizations, and small to large businesses. Basically, if you want to create beautiful carousels like, Image Carousel, Post Carousel, and Product Carousel, then you need to use WordPress Carousel.
260
+
261
+
262
+ = What types of carousel you can create using WordPress Carousel? =
263
+ You can create three (3) types of carousel using **WordPress Carousel** such as: **Image Carousel, Post Carousel, and Product Carousel.** And with the [__Premium Version__](http://shapedplugin.com/plugin/wordpress-carousel-pro/), you can create also **Content Carousel** and **Video Carousel**.
264
+
265
+ = Do I need to have coding skills to use WordPress Carousel? =
266
+ No. You don’t need any coding skill. No more pain writing any shortcode attributes to display carousel in your site. With just a few clicks, you can amazingly create unlimited Image, Post, and Product Carousels.
267
+
268
+ = Is WordPress Carousel responsive? =
269
+ Yes, WordPress Carousel is fully responsive, mobile and touch-friendly.
270
+
271
+ = Can I add WordPress Carousel anywhere on my website?=
272
+ Yes, you can add Logo Carousel inside your blog posts, pages, widgets, and anywhere else on your WordPress website with a shortcode or PHP function.
273
+
274
+ = Can I have multiple carousels with the separate setting?
275
+ Yes. You can have an unlimited carousel with each separate setting in the page, post, template, widget or anywhere you like.
276
+
277
+ = Will WordPress Carousel work with my theme? =
278
+ WordPress Carousel works with any WordPress theme if themes are developed according to WordPress standard.
279
+
280
+ = How can I get support if the plugin is not working? =
281
+ If you face any problem with our plugin or something is not working as it should, first follow the preliminary steps:
282
+ Test the plugin with a WordPress default theme, to be sure that the error is not caused by the theme you are currently using.
283
+
284
+ Deactivate all plugins you are using and check if the problem is still occurring.
285
+
286
+ If none of the previously listed actions helps you solve the problem, then, submit a ticket in the forum and describe your problem accurately, specify WordPress and plugin versions you are using and any other information that might help us solve your problem as quickly as possible.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
 
288
+ Pro version users [__Support Forum__](https://shapedplugin.com/support/) and Free or Lite Version [__Support Forum__](https://shapedplugin.com/support-forum/).
289
+
290
+ = Where can I report bugs? =
291
+ If you find a bug, please report it in our active support forum. You will be replied once the issue is resolved.
292
+
293
+ = I’d like access to more features. How can I get them? =
294
+ You can get access to more features when you purchase a license of the plugin. Purchasing a license of [__WordPress Carousel Pro__](https://shapedplugin.com/plugin/wordpress-carousel-pro/) gets you to access the full version of WordPress Carousel, automatic lifetime updates, and support.
295
+
296
+ =Is WordPress Carousel Multilingual Ready?=
297
+ Yes, WordPress Carousel is 100% translation ready and tested with [WPML](https://wpml.org/), [Polylang](https://wordpress.org/plugins/polylang/), [qTranslate-x](https://wordpress.org/plugins/qtranslate-x/), [GTranslate](https://wordpress.org/plugins/gtranslate/), [Google Language Translator](https://wordpress.org/plugins/google-language-translator/), [WPGlobus](https://wordpress.org/plugins/wpglobus/) etc.
298
+
299
+ = Is WordPress Carousel compatible with WordPress multisite? =
300
+ Yes, WordPress Carousel works perfectly with WordPress multi-site network.
301
+
302
+ = How to use ‘WordPress Carousel’ in WordPress 5.0 Gutenberg Block Editor =
303
+ Adding a **WordPress Carousel (Image Carousel, Post Carousel, Product Carousel)** using the WordPress 5.0 **Block Editor** is pretty straight-forward. You can paste the generated shortcode into a ‘Paragraph Block’ or use the ‘Shortcode Block’. It works nicely as classic editor.
304
+
305
+ = Do you Like this Plugin and want to encourage us for improvement? =
306
+ Please give the plugin [__5 stars__](https://wordpress.org/support/plugin/wp-carousel-free/reviews/?filter=5#new-post) rating and your precious appreciation will help us to make it much great in the future.
307
+
308
+ Thank you!
309
 
 
 
310
 
 
 
311
 
312
+ == Screenshots ==
313
 
314
+ 1. Live Demo.
315
+ 2. Carousel Settings.
316
+ 3. General Settings (Image Carousel).
317
+ 4. Style Settings.
318
+ 5. Post Carousel.
319
+ 6. Product Carousel.
320
+ 7. All Carousels.
321
+ 8. Advanced Settings.
322
+ 9. Custom CSS.
323
+ 10. Drag & Drop Image Re-order.
324
 
325
 
 
326
 
327
+ == Changelog ==
 
 
328
 
329
+ = 2.0.0 =
330
+ * New: Admin Dashboard Panel.
331
+ * New: Shortcode Generator.
332
+ * New: Drag and drop image slides Re-ordering.
333
+ * New: Post Carousel.
334
+ * New: WooCommerce Product Carousel.
335
+ * New: Multilingual Ready.
336
+ * New: Multisite Supported.
337
+ * New: Widget Supported.
338
+ * New: Carousel Section Title.
339
+ * New: Choose available sizes.
340
+ * New: Custom CSS options.
341
+ * New: Advanced Settings (Enqueue/Dequeue).
342
+ * New: Image Title Attribute.
343
+ * New: Slider border option.
344
+ * New: Navigation and Pagination hide on mobile option.
345
+ * New: Price, Rating, Add to Cart show and hide option for Product Carousel.
346
 
 
347
 
348
  = 1.4.9 =
349
  * Fix: Image size issue.
wp-carousel-free.php CHANGED
@@ -1,293 +1,334 @@
1
- <?php
2
- /*
3
- Plugin Name: WordPress Carousel
4
- Plugin URI: https://shapedplugin.com/plugin/wordpress-carousel-pro
5
- Description: A Powerful Carousel plugin for WordPress that enables you to create beautiful carousel by using regular media uploader.
6
- Author: ShapedPlugin
7
- Author URI: http://shapedplugin.com/
8
- Version: 1.4.9
9
- */
10
-
11
-
12
- /**
13
- * Directory Constant
14
- */
15
- define( 'SP_WP_CAROUSEL_FREE_URL', plugins_url( '/' ) . plugin_basename( dirname( __FILE__ ) ) . '/' );
16
- define( 'SP_WP_CAROUSEL_FREE_DIR', plugin_dir_path( __FILE__ ) );
17
-
18
- /**
19
- * Include files
20
- */
21
- require_once( SP_WP_CAROUSEL_FREE_DIR . 'inc/functions.php' );
22
-
23
- /* Plugin Action Links */
24
- function sp_wp_carousel_free_action_links( $links ) {
25
- $links[] = '<a target="_blank" href="https://shapedplugin.com/plugin/wordpress-carousel-pro" style="color: red; font-weight: 600;">Go
26
- Pro!</a>';
27
-
28
- return $links;
29
- }
30
- add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'sp_wp_carousel_free_action_links' );
31
-
32
- // Redirect after active
33
- function sp_wp_carousel_free_active_redirect( $plugin ) {
34
- if ( $plugin == plugin_basename( __FILE__ ) ) {
35
- exit( wp_redirect( admin_url( 'options-general.php' ) ) );
36
- }
37
- }
38
- add_action( 'activated_plugin', 'sp_wp_carousel_free_active_redirect' );
39
-
40
-
41
- function add_wcffree_options_framwrork() {
42
- add_options_page( 'About WordPress Carousel', 'About WP Carousel', 'manage_options', 'about-wp-carousel', 'about_wp_carousel_content' );
43
- }
44
- add_action( 'admin_menu', 'add_wcffree_options_framwrork' );
45
-
46
- if ( is_admin() ) : // Load only if we are viewing an admin page
47
-
48
- // Function to generate options page
49
- function about_wp_carousel_content() { ?>
50
-
51
- <div class="wrap about-wrap sp-wpc-help">
52
- <h1><?php _e( 'Welcome to WordPress Carousel!', 'wp-carousel' ); ?></h1>
53
- <p class="about-text"><?php _e( 'Thank you for installing WordPress Carousel! You\'re now running the most popular WordPress Carousel plugin.
54
- This video will help you get started with the plugin.', 'wp-carousel' ); ?></p>
55
-
56
- <hr>
57
-
58
- <div class="headline-feature feature-video">
59
- <iframe width="940" height="528" src="https://www.youtube.com/embed/0rxYjMWDZ7k" frameborder="0" allowfullscreen></iframe>
60
- </div>
61
-
62
- <div class="sp-wpc-shortcode">
63
- <table class="table-bordered table-striped table-condensed cf">
64
- <thead class="cf">
65
- <tr>
66
- <th>Attribute</th>
67
- <th>Default value</th>
68
- <th>Options</th>
69
- <th>Description</th>
70
- </tr>
71
- </thead>
72
- <tbody>
73
- <tr>
74
- <td>ids</td>
75
- <td></td>
76
- <td></td>
77
- <td>"ids" will be generated automatically when we create gallery.</td>
78
- </tr>
79
- <tr>
80
- <td>items</td>
81
- <td>5</td>
82
- <td>Numeric value only e.g. 4</td>
83
- <td>Number of columns to show for the carousel. Screen larger than 1200px.</td>
84
- </tr>
85
- <tr>
86
- <td>items_desktop</td>
87
- <td>4</td>
88
- <td>Numeric value only e.g. 3</td>
89
- <td>Number of columns to show on Desktop. Screen smaller than 1200px.</td>
90
- </tr>
91
- <tr>
92
- <td>items_desktop_small</td>
93
- <td>3</td>
94
- <td>Numeric value only e.g. 2</td>
95
- <td>Number of columns to show on Small Desktop. Screen smaller than 980px.</td>
96
- </tr>
97
- <tr>
98
- <td>items_tablet</td>
99
- <td>2</td>
100
- <td>Numeric value only e.g. 1</td>
101
- <td>Number of columns to show on Tablet. Screen smaller than 768px.</td>
102
- </tr>
103
- <tr>
104
- <td>items_mobile</td>
105
- <td>1</td>
106
- <td>Numeric value only e.g. 1</td>
107
- <td>Number of columns to show on Mobile. Screen smaller than 4780px.</td>
108
- </tr>
109
- <tr>
110
- <td>bullets</td>
111
- <td>false</td>
112
- <td>true / false</td>
113
- <td>Show / Hide pagination dots.</td>
114
- </tr>
115
- <tr>
116
- <td>nav</td>
117
- <td>true</td>
118
- <td>true / false</td>
119
- <td>Show / Hide navigation arrows.</td>
120
- </tr>
121
- <tr>
122
- <td>auto_play</td>
123
- <td>true</td>
124
- <td>true / false</td>
125
- <td>On / Off carousel AutoPlay</td>
126
- </tr>
127
- </tbody>
128
- </table>
129
- </div>
130
-
131
- <br>
132
- <br>
133
-
134
- <hr>
135
-
136
- <div class="feature-section three-col">
137
- <div class="col">
138
- <div class="sp-wpc-feature sp-wpc-text-center">
139
- <i class="fa fa-life-bouy" aria-hidden="true"></i>
140
- <h3>Need any Support?</h3>
141
- <p>Our Expert Support Team is always ready to help you out promptly.</p>
142
- <a href="https://wordpress.org/support/plugin/wp-carousel-free" target="_blank" class="button
143
- button-primary">Support Forum</a>
144
- </div>
145
- </div>
146
- <div class="col">
147
- <div class="sp-wpc-feature sp-wpc-text-center">
148
- <i class="fa fa-file-text" aria-hidden="true"></i>
149
- <h3>Looking for Documentation?</h3>
150
- <p>We have detailed documentation on every aspects of WordPress Carousel.</p>
151
- <a href="https://shapedplugin.com/docs/wordpress-carousel/" target="_blank" class="button
152
- button-primary">Documentation</a>
153
- </div>
154
- </div>
155
- <div class="col">
156
- <div class="sp-wpc-feature sp-wpc-text-center">
157
- <i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
158
- <h3>Like This Plugin?</h3>
159
- <p>If you like WordPress Carousel please leave us a 5 star rating. It helps us much.</p>
160
- <a href="https://wordpress.org/support/plugin/wp-carousel-free/reviews/?filter=5#new-post" target="_blank" class="button button-primary">Rate the Plugin</a>
161
- </div>
162
- </div>
163
- </div>
164
-
165
- <hr>
166
-
167
- <div class="sp-wpc-pro-features">
168
- <h2 class="sp-wpc-text-center">Upgrade to WordPress Carousel Pro!</h2>
169
- <p class="sp-wpc-text-center sp-wpc-pro-subtitle">We've added 100+ extra features in our Premium Version of this plugin. Let’s see some amazing features.</p>
170
- <div class="feature-section three-col">
171
- <div class="col">
172
- <div class="sp-wpc-feature">
173
- <h3><span class="dashicons dashicons-yes"></span>Slide any Post Type</h3>
174
- <p>You can display posts from multiple post types (posts, pages, products, portfolio etc.). With WordPress Carousel Pro, you will be able to add unlimited carousels into a page, post, widget or anywhere you want easily.</p>
175
- </div>
176
- </div>
177
- <div class="col">
178
- <div class="sp-wpc-feature">
179
- <h3><span class="dashicons dashicons-yes"></span>Display any Taxonomy</h3>
180
- <p>Do you want to display some featured category to your visitors? WordPress Carousel Pro will help you to show any category, tag or custom taxonomy in output using just a shortcode attribute.</p>
181
- </div>
182
- </div>
183
- <div class="col">
184
- <div class="sp-wpc-feature">
185
- <h3><span class="dashicons dashicons-yes"></span>Image Carousel with Caption</h3>
186
- <p>You can easily create Image Carousel using your regular media uploader. This plugin has a nice combination in WordPress regular gallery. You can add image caption, description, alternative text, URL etc.</p>
187
- </div>
188
- </div>
189
- <div class="col">
190
- <div class="sp-wpc-feature">
191
- <h3><span class="dashicons dashicons-yes"></span>Lightbox for Images</h3>
192
- <p>We've added Lightbox features in Premium Version of this plugin. You only have to turn on Lightbox option via shortcode. It can help you to zoom smoothly your images with a bottom title. It's fully responsive and super easy to use!</p>
193
- </div>
194
- </div>
195
- <div class="col">
196
- <div class="sp-wpc-feature">
197
- <h3><span class="dashicons dashicons-yes"></span>Link to Carousel Items</h3>
198
- <p>You can link to each carousel item easily even, external link opening with new tab option. You can add a link to each carousel in media manager. Just add your link there, your carousel items will line to that URL.</p>
199
- </div>
200
- </div>
201
- <div class="col">
202
- <div class="sp-wpc-feature">
203
- <h3><span class="dashicons dashicons-yes"></span>Ticker Carousel</h3>
204
- <p>This is an another amazing feature of WordPress Carousel Pro. It slides with the infinite loop, with no Pause. You can set the speed and if the carousel pauses on hover.</p>
205
- </div>
206
- </div>
207
- <div class="col">
208
- <div class="sp-wpc-feature">
209
- <h3><span class="dashicons dashicons-yes"></span>Image Re-Size Options</h3>
210
- <p>You can change the default size of your carousel images via an attribute. New uploaded image will be resized to the specified dimensions what you set.
211
- Your images will be hard cropped equally. </p>
212
- </div>
213
- </div>
214
- <div class="col">
215
- <div class="sp-wpc-feature">
216
- <h3><span class="dashicons dashicons-yes"></span>7+ Different Testimonial Styles</h3>
217
- <p>Different Testimonial styles have been added to Premium Version which can help to show amazingly your clients' testimonials. Hence you need to define an attribute in carousel shortcode.</p>
218
- </div>
219
- </div>
220
- <div class="col">
221
- <div class="sp-wpc-feature">
222
- <h3><span class="dashicons dashicons-yes"></span>One Page Slider</h3>
223
- <p>You are able to build image slider by using image width and height size attribute. It's like image slider. You can add slider title & description too. You can change slider colors with your dream color!</p>
224
- </div>
225
- </div>
226
- <div class="col">
227
- <div class="sp-wpc-feature">
228
- <h3><span class="dashicons dashicons-yes"></span>Unlimited Colors & Styling</h3>
229
- <p>Premium version of this plugin supports unlimited colors & styling options! You can add any color that matches your current theme or website. You can use the color name or color HEX code.</p>
230
- </div>
231
- </div>
232
- <div class="col">
233
- <div class="sp-wpc-feature">
234
- <h3><span class="dashicons dashicons-yes"></span>Post Carousel with Excerpt</h3>
235
- <p>With Pro version of this plugin, You can create post excerpt carousel slider as well. This will show a featured image, some amount of post content & a read more button. This is cool for a large type of post!</p>
236
- </div>
237
- </div>
238
- <div class="col">
239
- <div class="sp-wpc-feature">
240
- <h3><span class="dashicons dashicons-yes"></span>Carousel from WooCommerce Product Category</h3>
241
- <p>Using Premium Version of this plugin, you can add WooCommerce product carousel slider in anywhere. This will show product image, product description & read more button.</p>
242
- </div>
243
- </div>
244
- <div class="col">
245
- <div class="sp-wpc-feature">
246
- <h3><span class="dashicons dashicons-yes"></span>Essential Carousel Settings</h3>
247
- <p>You can set how many posts to scroll at a time in the carousel or show, the transition speed, autoplay, swipe, pause on hover, infinite loop, mouse draggable, and many other settings.</p>
248
- </div>
249
- </div>
250
- <div class="col">
251
- <div class="sp-wpc-feature">
252
- <h3><span class="dashicons dashicons-yes"></span>Responsive Mobile Friendly</h3>
253
- <p>WordPress Carousel Pro is 100% responsive and with the premium version of the plugin, you can set the number of post columns to show simultaneously in the carousel according to the specific device resolution.</p>
254
- </div>
255
- </div>
256
- <div class="col">
257
- <div class="sp-wpc-feature">
258
- <h3><span class="dashicons dashicons-yes"></span>24/7 Fast & Friendly Support</h3>
259
- <p>A fully dedicated 24/7 Support Forum is ready to help you instantly whenever you face with any issues to configure or use the plugin. They will help you until you become happy.</p>
260
- </div>
261
- </div>
262
-
263
- </div>
264
- </div>
265
-
266
- <div class="sp-wpc-upgrade-sticky-footer sp-wpc-text-center">
267
- <p><a href="https://shapedplugin.com/demo/wordpress-carousel-pro/" target="_blank" class="button
268
- button-primary">Live Demo</a> <a href="https://shapedplugin.com/plugin/wordpress-carousel-pro/" target="_blank" class="button button-primary">Upgrade Now</a></p>
269
- </div>
270
-
271
- </div>
272
-
273
- <?php
274
- }
275
-
276
- endif; // EndIf is_admin()
277
-
278
-
279
- register_activation_hook( __FILE__, 'sp_wp_carousel_free_plugin_activate' );
280
- add_action( 'admin_init', 'sp_wp_carousel_free_plugin_redirect' );
281
-
282
- function sp_wp_carousel_free_plugin_activate() {
283
- add_option( 'sp_wp_carousel_free_do_activation_redirect', true );
284
- }
285
-
286
- function sp_wp_carousel_free_plugin_redirect() {
287
- if ( get_option( 'sp_wp_carousel_free_do_activation_redirect', false ) ) {
288
- delete_option( 'sp_wp_carousel_free_do_activation_redirect' );
289
- if ( ! isset( $_GET['activate-multi'] ) ) {
290
- wp_redirect( "options-general.php?page=about-wp-carousel" );
291
- }
292
- }
293
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * A carousel plugin for WordPress.
4
+ *
5
+ * @link https://shapedplugin.com/
6
+ * @since 2.0.0
7
+ * @package WP_Carousel_Free
8
+ *
9
+ * @wordpress-plugin
10
+ * Plugin Name: WordPress Carousel
11
+ * Plugin URI: https://shapedplugin.com/plugin/wordpress-carousel-pro/
12
+ * Description: The Most Powerful and User-friendly WordPress Carousel Plugin. Create beautiful carousels in minutes using Images, Posts, WooCommerce Products etc.
13
+ * Version: 2.0.0
14
+ * Author: ShapedPlugin
15
+ * Author URI: https://shapedplugin.com/
16
+ * License: GPL-2.0+
17
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
18
+ * Text Domain: wp-carousel-free
19
+ * Domain Path: /languages
20
+ */
21
+
22
+ // If this file is called directly, abort.
23
+ if ( ! defined( 'WPINC' ) ) {
24
+ die;
25
+ }
26
+
27
+
28
+ /**
29
+ * Main class of the plugin
30
+ *
31
+ * @package WP_Carousel_Free
32
+ * @author Shamim Mia <shamhagh@gmail.com>
33
+ */
34
+ class SP_WP_Carousel_Free {
35
+
36
+
37
+ /**
38
+ * The loader that's responsible for maintaining and registering all hooks that power
39
+ * the plugin.
40
+ *
41
+ * @since 2.0.0
42
+ * @access protected
43
+ * @var WP_Carousel_Free_Loader $loader Maintains and registers all hooks for the plugin.
44
+ */
45
+ public $loader;
46
+
47
+ /**
48
+ * The unique identifier of this plugin.
49
+ *
50
+ * @since 2.0.0
51
+ * @access protected
52
+ * @var string $plugin_name The string used to uniquely identify this plugin.
53
+ */
54
+ protected $plugin_name;
55
+
56
+ /**
57
+ * The current version of the plugin.
58
+ *
59
+ * @since 2.0.0
60
+ * @access protected
61
+ * @var string $version The current version of the plugin.
62
+ */
63
+ protected $version;
64
+
65
+ /**
66
+ * Plugin textdomain.
67
+ *
68
+ * @since 2.0.0
69
+ *
70
+ * @var string
71
+ */
72
+ public $domain = 'wp-carousel-free';
73
+
74
+ /**
75
+ * Minimum PHP version required
76
+ *
77
+ * @since 2.0.0
78
+ * @var string
79
+ */
80
+ private $min_php = '5.4.0';
81
+
82
+ /**
83
+ * Plugin file.
84
+ *
85
+ * @var string
86
+ */
87
+ private $file = __FILE__;
88
+
89
+ /**
90
+ * Holds class object
91
+ *
92
+ * @var object
93
+ * @since 2.0.0
94
+ */
95
+ private static $instance;
96
+
97
+ /**
98
+ * Initialize the SP_WP_Carousel_Free() class
99
+ *
100
+ * @since 2.0.0
101
+ * @return object
102
+ */
103
+ public static function init() {
104
+ if ( ! isset( self::$instance ) && ! ( self::$instance instanceof SP_WP_Carousel_Free ) ) {
105
+ self::$instance = new SP_WP_Carousel_Free();
106
+ self::$instance->setup();
107
+ }
108
+ return self::$instance;
109
+ }
110
+
111
+ /**
112
+ * Define the core functionality of the plugin.
113
+ *
114
+ * Set the plugin name and the plugin version that can be used throughout the plugin.
115
+ * Load the dependencies, define the locale, and set the hooks for the admin area and
116
+ * the public-facing side of the site.
117
+ *
118
+ * @since 2.0.0
119
+ */
120
+ public function setup() {
121
+ $this->plugin_name = 'wp-carousel-free';
122
+ $this->version = '2.0.0';
123
+ $this->define_constants();
124
+ $this->includes();
125
+ $this->load_dependencies();
126
+ $this->set_locale();
127
+ $this->define_common_hooks();
128
+ $this->define_admin_hooks();
129
+ $this->define_public_hooks();
130
+ }
131
+
132
+ /**
133
+ * Define plugin constants.
134
+ *
135
+ * @since 2.0.0
136
+ * @return void
137
+ */
138
+ private function define_constants() {
139
+ $this->define( 'WPCAROUSELF_BASENAME', plugin_basename( __FILE__ ) );
140
+ $this->define( 'WPCAROUSELF_VERSION', $this->version );
141
+ $this->define( 'WPCAROUSELF_PATH', plugin_dir_path( __FILE__ ) );
142
+ $this->define( 'WPCAROUSELF_INCLUDES', WPCAROUSELF_PATH . '/includes' );
143
+ $this->define( 'WPCAROUSELF_URL', plugin_dir_url( __FILE__ ) );
144
+ }
145
+
146
+ /**
147
+ * Define constant if not already set.
148
+ *
149
+ * @param string $name Constant name.
150
+ * @param string|bool $value Constant Value.
151
+ */
152
+ private function define( $name, $value ) {
153
+ if ( ! defined( $name ) ) {
154
+ define( $name, $value );
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Included required files.
160
+ *
161
+ * @since 2.0.0
162
+ * @return void
163
+ */
164
+ public function includes() {
165
+
166
+ require_once WPCAROUSELF_INCLUDES . '/class-wp-carousel-free-loader.php';
167
+ require_once WPCAROUSELF_INCLUDES . '/class-wp-carousel-free-post-types.php';
168
+ require_once WPCAROUSELF_PATH . '/admin/views/meta-box/sp-framework.php';
169
+ require_once WPCAROUSELF_INCLUDES . '/class-wp-carousel-free-shortcode.php';
170
+ require_once WPCAROUSELF_PATH . '/public/shortcode-deprecated.php';
171
+ require_once WPCAROUSELF_INCLUDES . '/class-wp-carousel-free-i18n.php';
172
+ require_once WPCAROUSELF_PATH . '/public/class-wp-carousel-free-public.php';
173
+ // if ( is_admin() ) {
174
+ require_once WPCAROUSELF_PATH . '/admin/class-wp-carousel-free-admin.php';
175
+ require_once WPCAROUSELF_PATH . '/admin/views/tmce-button.php';
176
+ require_once WPCAROUSELF_PATH . '/admin/views/help.php';
177
+ require_once WPCAROUSELF_PATH . '/admin/views/premium.php';
178
+ // }
179
+ }
180
+
181
+ /**
182
+ * Load the required dependencies for this plugin.
183
+ *
184
+ * Include the following files that make up the plugin:
185
+ *
186
+ * - WP_Carousel_Free_Loader. Orchestrates the hooks of the plugin.
187
+ * - WP_Carousel_Free_I18n. Defines internationalization functionality.
188
+ * - WP_Carousel_Free_Admin. Defines all hooks for the admin area.
189
+ * - WP_Carousel_Free_Public. Defines all hooks for the public side of the site.
190
+ *
191
+ * Create an instance of the loader which will be used to register the hooks
192
+ * with WordPress.
193
+ *
194
+ * @since 2.0.0
195
+ * @access private
196
+ */
197
+ private function load_dependencies() {
198
+ $this->loader = new WP_Carousel_Free_Loader();
199
+
200
+ }
201
+
202
+ /**
203
+ * Define the locale for this plugin for internationalization.
204
+ *
205
+ * Uses the WP_Carousel_Free_I18n class in order to set the domain and to register the hook
206
+ * with WordPress.
207
+ *
208
+ * @since 2.0.0
209
+ * @access private
210
+ */
211
+ private function set_locale() {
212
+ $plugin_i18n = new WP_Carousel_Free_I18n();
213
+ $this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' );
214
+ }
215
+
216
+ /**
217
+ * Register common hooks.
218
+ *
219
+ * @since 2.0.0
220
+ * @access private
221
+ */
222
+ private function define_common_hooks() {
223
+ $plugin_cpt = new WP_Carousel_Free_Post_Type( $this->get_plugin_name(), $this->get_version() );
224
+ $this->loader->add_action( 'init', $plugin_cpt, 'wp_carousel_post_type', 11 );
225
+ }
226
+
227
+ /**
228
+ * Register all of the hooks related to the admin area functionality
229
+ * of the plugin.
230
+ *
231
+ * @since 2.0.0
232
+ * @access private
233
+ */
234
+ private function define_admin_hooks() {
235
+
236
+ $plugin_admin = new WP_Carousel_Free_Admin( $this->get_plugin_name(), $this->get_version() );
237
+
238
+ $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_admin_styles' );
239
+ $this->loader->add_filter( 'post_updated_messages', $plugin_admin, 'wpcp_carousel_updated_messages', 10, 2 );
240
+ $this->loader->add_filter( 'manage_sp_wp_carousel_posts_columns', $plugin_admin, 'filter_carousel_admin_column' );
241
+ $this->loader->add_action(
242
+ 'manage_sp_wp_carousel_posts_custom_column', $plugin_admin,
243
+ 'display_carousel_admin_fields', 10, 2
244
+ );
245
+ $this->loader->add_filter( 'plugin_action_links', $plugin_admin, 'add_plugin_action_links', 10, 2 );
246
+ $this->loader->add_filter( 'plugin_row_meta', $plugin_admin, 'plugin_row_meta', 10, 2 );
247
+ $this->loader->add_filter( 'admin_footer_text', $plugin_admin, 'sp_wpcp_review_text', 10, 2 );
248
+ $this->loader->add_action( 'activated_plugin', $plugin_admin, 'sp_wpcf_redirect_after_activation', 10, 2 );
249
+
250
+ // Help Page.
251
+ $help_page = new WP_Carousel_Free_Help( $this->get_plugin_name(), $this->get_version() );
252
+ $this->loader->add_action( 'admin_menu', $help_page, 'help_admin_menu', 40 );
253
+
254
+ // Premium Page.
255
+ $upgrade_page = new WP_Carousel_Free_Upgrade( $this->get_plugin_name(), $this->get_version() );
256
+ $this->loader->add_action( 'admin_menu', $upgrade_page, 'upgrade_admin_menu', 35 );
257
+
258
+ }
259
+
260
+ /**
261
+ * Register all of the hooks related to the public-facing functionality
262
+ * of the plugin.
263
+ *
264
+ * @since 2.0.0
265
+ * @access private
266
+ */
267
+ private function define_public_hooks() {
268
+
269
+ $plugin_public = new WP_Carousel_Free_Public( $this->get_plugin_name(), $this->get_version() );
270
+
271
+ $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );
272
+ $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' );
273
+
274
+ $plugin_shortcode = new WP_Carousel_Free_Shortcode( $this->get_plugin_name(), $this->get_version() );
275
+ $this->loader->add_shortcode( 'sp_wpcarousel', $plugin_shortcode, 'sp_wp_carousel_shortcode' );
276
+
277
+ }
278
+
279
+ /**
280
+ * The name of the plugin used to uniquely identify it within the context of
281
+ * WordPress and to define internationalization functionality.
282
+ *
283
+ * @since 2.0.0
284
+ * @return string The name of the plugin.
285
+ */
286
+ public function get_plugin_name() {
287
+ return $this->plugin_name;
288
+ }
289
+
290
+ /**
291
+ * Retrieve the version number of the plugin.
292
+ *
293
+ * @since 2.0.0
294
+ * @return string The version number of the plugin.
295
+ */
296
+ public function get_version() {
297
+ return $this->version;
298
+ }
299
+
300
+ /**
301
+ * The reference to the class that orchestrates the hooks with the plugin.
302
+ *
303
+ * @since 2.0.0
304
+ * @return WP_Carousel_Free_Loader Orchestrates the hooks of the plugin.
305
+ */
306
+ public function get_loader() {
307
+ return $this->loader;
308
+ }
309
+
310
+ /**
311
+ * Run the loader to execute all of the hooks with WordPress.
312
+ *
313
+ * @since 2.0.0
314
+ */
315
+ public function run() {
316
+ $this->loader->run();
317
+ }
318
+
319
+ } // SP_WP_Carousel_Free
320
+
321
+ /**
322
+ * Main instance of WP Carousel Free
323
+ *
324
+ * Returns the main instance of the WP Carousel Free.
325
+ *
326
+ * @since 2.0.0
327
+ * @return void
328
+ */
329
+ function sp_wpcf() {
330
+ $plugin = SP_WP_Carousel_Free::init();
331
+ $plugin->loader->run();
332
+ }
333
+ // Launch it out .
334
+ sp_wpcf();