Serious Slider - Version 0.5

Version Description

  • Initial release.
Download this release

Release Info

Developer Cryout Creations
Plugin Icon 128x128 Serious Slider
Version 0.5
Comparing to
See all releases

Version 0.5

cryout-serious-slider.php ADDED
@@ -0,0 +1,633 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: Cryout Serious Slider
4
+ Plugin URI: http://www.cryoutcreations.eu/serious-slider
5
+ Description: Responsive slider, built on Bootstrap Carousel, uses core WordPress functionality, easy to use, seriously.
6
+ Version: 0.5
7
+ Author: Cryout Creations
8
+ Author URI: http://www.cryoutcreations.eu
9
+ License: GPLv3
10
+ License URI: http://www.gnu.org/licenses/gpl.html
11
+ */
12
+
13
+ class Cryout_Serious_Slider {
14
+
15
+ public $version = "0.5";
16
+ public $options = array();
17
+ public $shortcode_tag = 'serious-slider';
18
+
19
+ public $slug = 'cryout-serious-slider';
20
+ public $posttype = 'cryout_serious_slide';
21
+ public $taxonomy = 'cryout_serious_slider_category';
22
+ private $title = '';
23
+ private $thepage = '';
24
+ private $aboutpage = '';
25
+ public $defaults = array(
26
+ 'cryout_serious_slider_sort' => 'date', // date, order
27
+ 'cryout_serious_slider_sizing' => 0, // 1 = force slider size
28
+ 'cryout_serious_slider_width' => '1920', // px
29
+ 'cryout_serious_slider_height' => '700', // px
30
+ 'cryout_serious_slider_theme' => 'light', // light, dark, blank, bootstrap
31
+ 'cryout_serious_slider_textsize' => '1.0', // em
32
+ 'cryout_serious_slider_overlay' => 1, // 1 = autohide, 2 = visible
33
+ 'cryout_serious_slider_animation' => 'slide', // fade, slide, overslide, underslide, parallax, hflip, vflip
34
+ 'cryout_serious_slider_hover' => 'hover', // hover, false
35
+ 'cryout_serious_slider_delay' => 5000, // ms
36
+ 'cryout_serious_slider_transition' => 1000 // ms
37
+ );
38
+
39
+ public function __construct(){
40
+ require_once( plugin_dir_path( __FILE__ ) . 'inc/shortcodes.php' );
41
+ require_once( plugin_dir_path( __FILE__ ) . 'inc/widgets.php' );
42
+ add_action( 'init', array( $this, 'register' ) );
43
+ add_action( 'init', array( $this, 'register_post_types' ) );
44
+ add_action( 'init', array( $this, 'register_taxonomies' ), 0 );
45
+ } // __construct()
46
+
47
+
48
+ /**********************
49
+ * main class registration function
50
+ ***********************/
51
+ public function register(){
52
+
53
+ $this->title = __( 'Serious Slider', 'cryout-serious-slider' );
54
+ $this->aboutpage = 'edit.php?post_type=' . $this->posttype . '&page=' . $this->slug . '-about';
55
+
56
+ //$this->options = $this->get_settings();
57
+
58
+ if (! is_admin() ) {
59
+ add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ) );
60
+ add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
61
+ } // if (! is_admin())
62
+
63
+ if (is_admin() ) {
64
+
65
+ //add_action( 'admin_init', array( $this, 'register_settings' ) );
66
+ add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'actions_links' ), -10 );
67
+ add_filter( 'plugin_row_meta', array( $this, 'meta_links' ), 10, 2 );
68
+ add_action( 'admin_menu', array( $this, 'settings_menu' ) );
69
+
70
+ // slides list page columns customizations
71
+ add_filter( 'manage_edit-'.$this->posttype.'_columns', array($this, 'columns_edit' ) );
72
+ add_action( 'manage_'.$this->posttype.'_posts_custom_column', array($this, 'columns_content'), 10, 2 );
73
+ add_filter( 'manage_edit-'.$this->posttype.'_sortable_columns', array($this, 'order_column_register_sortable') );
74
+ //add_action( 'admin_head-edit.php', array($this, 'custom_list_css') );
75
+ //add_action( 'admin_head-edit-tags.php', array($this, 'custom_list_css') );
76
+ //add_action( 'admin_head-post-new.php', array($this, 'custom_list_css') );
77
+ add_action( 'restrict_manage_posts', array($this, 'add_taxonomy_filters') );
78
+ add_action( 'save_post', array($this, 'metabox_save') );
79
+
80
+ // shortcode button
81
+ add_action( 'admin_head', array( $this, 'admin_head') );
82
+ add_action( 'admin_enqueue_scripts', array($this , 'admin_enqueue_scripts' ) );
83
+
84
+ $localized_mce_strings = array(
85
+ 'text_retrieving_sliders' => __('Retrieving sliders...', 'cryout-serious-slider'),
86
+ 'text_retrieving_sliders_error' => __('Error retrieving sliders', 'cryout-serious-slider'),
87
+ 'text_serious_slider' => __('Cryout Serious Slider', 'cryout-serious-slider'),
88
+ 'text_serious_slider_tooltip' => __('Serious Slider', 'cryout-serious-slider'),
89
+ 'text_insert_slider' => __('Insert Slider', 'cryout-serious-slider'),
90
+ 'text_cancel' => __('Cancel', 'cryout-serious-slider'),
91
+ 'text_select_slider' => __('Select Slider', 'cryout-serious-slider'),
92
+ 'text_add_slider' => __('Add Slider', 'cryout-serious-slider'),
93
+ );
94
+
95
+ // ajax handling for slider parameters in shortcode button generator
96
+ wp_enqueue_script( 'cryout-serious-slider-ajax', plugins_url( 'resources/backend.js', __FILE__ ), NULL, $this->version );
97
+ wp_localize_script( 'cryout-serious-slider-ajax', 'cryout_serious_slider_ajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
98
+ wp_localize_script( 'cryout-serious-slider-ajax', 'CRYOUT_MCE_LOCALIZED', $localized_mce_strings );
99
+ add_action( 'wp_ajax_cryout_serious_slider_ajax', array( $this, 'get_sliders_json' ) ); // auth users
100
+ add_action( 'wp_ajax_nopriv_cryout_serious_slider_ajax', array( $this, 'get_sliders_json' ) ); // no auth users
101
+
102
+ } // if (is_admin())
103
+
104
+ add_action( 'plugins_loaded', array( $this, 'load_textdomain') );
105
+
106
+ } // register()
107
+
108
+
109
+ /**********************
110
+ * translation domain
111
+ ***********************/
112
+ function load_textdomain() {
113
+ load_plugin_textdomain( 'cryout-seriou-slider', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
114
+ }
115
+
116
+
117
+ /**********************
118
+ * enqueues
119
+ ***********************/
120
+ public function enqueue_scripts() {
121
+ wp_enqueue_script( 'cryout-serious-slider-jquerymobile', plugins_url( 'resources/jquery.mobile.custom.min.js', __FILE__ ), array('jquery'), $this->version );
122
+ wp_enqueue_script( 'cryout-serious-slider-script', plugins_url( 'resources/slider.js', __FILE__ ), NULL, $this->version );
123
+ } // enqueue_scripts()
124
+
125
+ public function enqueue_styles() {
126
+ wp_enqueue_style( 'cryout-serious-slider-style', plugins_url( 'resources/style.css', __FILE__ ), NULL, $this->version );
127
+ } // enqueue_styles()
128
+
129
+
130
+ /**********************
131
+ * settings
132
+ ***********************/
133
+ /* // register plugin settings
134
+ public function register_settings() {
135
+ register_setting( 'cryout_serious_slider_group', 'cryout_serious_slider' );
136
+ } // register_settings()*/
137
+
138
+ // register settings page to dashboard menu
139
+ public function settings_menu() {
140
+ $this->thepage = add_submenu_page( 'edit.php?post_type='.$this->posttype, __('About', 'cryout-serious-slider'), __('About', 'cryout-serious-slider'), 'manage_options', $this->slug . '-about', array( $this, 'settings_page' ) );
141
+ } // settings_menu()
142
+
143
+ public function settings_page() {
144
+ if (!empty($_GET['add_sample_content']))
145
+ include_once( plugin_dir_path( __FILE__ ) . 'demo/demo-content.php' );
146
+ require_once( plugin_dir_path( __FILE__ ) . 'inc/settings.php' );
147
+ } // settings_page()
148
+
149
+ // add plugin actions links
150
+ public function actions_links( $links ) {
151
+ array_unshift( $links, '<a href="' . $this->aboutpage . '">' . __( 'About Plugin', 'shortcodes-ultimate' ) . '</a>' );
152
+ return $links;
153
+ }
154
+
155
+ // add plugin meta links
156
+ public function meta_links( $links, $file ) {
157
+ // Check plugin
158
+ if ( $file === plugin_basename( __FILE__ ) ) {
159
+ unset( $links[2] );
160
+ $links[] = '<a href="http://www.cryoutcreations.eu/cryout-serious-slider/" target="_blank">' . __( 'Plugin homepage', 'cryout-serious-slider' ) . '</a>';
161
+ $links[] = '<a href="http://www.cryoutcreations.eu/forum/" target="_blank">' . __( 'Support forum', 'cryout-serious-slider' ) . '</a>';
162
+ $links[] = '<a href="http://wordpress.org/plugins/cryout-serious-slider/changelog/" target="_blank">' . __( 'Changelog', 'cryout-serious-slider' ) . '</a>';
163
+ }
164
+ return $links;
165
+ }
166
+
167
+ /* settings handlers */
168
+ /* public function get_settings() {
169
+ $options = get_option('cryout_serious_slider');
170
+ $options = array_merge($this->defaults,(array)$options);
171
+ $this->options = $options;
172
+ return $options;
173
+ } // get_settings()
174
+
175
+ public function save_settings() {
176
+ if ( isset( $_POST['settings_submit'] ) && check_admin_referer( 'cryout_serious_slider', '_wpnonce' ) ):
177
+ $saved_options = $_POST['cryout_serious_slider'];
178
+
179
+ foreach ($saved_options as $option => $value):
180
+ $saved_options[$option] = wp_kses_data($value);
181
+ endforeach;
182
+
183
+ update_option( 'cryout_serious_slider', $saved_options );
184
+ wp_redirect( 'edit.php?post_type='.$this->posttype.'&page='.$this->slug.'-settings'.'&updated=true' );
185
+ endif;
186
+ } // save_settings() */
187
+
188
+
189
+ /**********************
190
+ * helpers
191
+ ***********************/
192
+ public function get_slider_meta($sid, $term) {
193
+ // ???????????????????????
194
+ } // get_slider_meta
195
+
196
+ /* return taxonomy id for slide id */
197
+ public function get_slide_slider( $slide_ID, $taxonomy = '') {
198
+ if (empty($taxonomy)) $taxonomy = $this->taxonomy;
199
+ $tax = wp_get_object_terms( $slide_ID, $taxonomy );
200
+ if (!empty($tax))
201
+ return $tax[0]->term_id;
202
+ else
203
+ return 0;
204
+ } // get_slide_slider()
205
+
206
+ /* return sliders list for mce insert window */
207
+ public function get_sliders_json() {
208
+ $sliders = $this->get_sliders();
209
+ echo json_encode($sliders);
210
+ wp_die();
211
+ } // get_sliders_json()
212
+
213
+ public function get_sliders() {
214
+ $data = get_terms( $this->taxonomy, array( 'hide_empty' => false ) );
215
+
216
+ $sliders = array();
217
+ foreach ($data as $slider) {
218
+ $sliders[] = array('text'=>$slider->name, 'value'=>$slider->term_id);
219
+ }
220
+ return $sliders;
221
+ } // get_sliders()
222
+
223
+ /* customize taxonomy selection box in add slide window */
224
+ function custom_category_picker( $post, $box ) {
225
+ $defaults = array( 'taxonomy' => 'category' );
226
+ if ( ! isset( $box['args'] ) || ! is_array( $box['args'] ) ) {
227
+ $args = array();
228
+ } else {
229
+ $args = $box['args'];
230
+ }
231
+ $r = wp_parse_args( $args, $defaults );
232
+ $tax_name = esc_attr( $r['taxonomy'] );
233
+ $taxonomy = get_taxonomy( $r['taxonomy'] );
234
+ ?>
235
+ <div id="taxonomy-<?php echo $tax_name; ?>" class="categorydiv">
236
+ <?php
237
+ $name = ( $tax_name == 'category' ) ? 'post_category' : 'tax_input[' . $tax_name . ']';
238
+ ?>
239
+ <ul id="<?php echo $tax_name; ?>_selector" data-wp-lists="list:<?php echo $tax_name; ?>" class="form-no-clear">
240
+ <?php
241
+ $cat_dropdown_args = array(
242
+ 'taxonomy' => $tax_name,
243
+ 'hide_empty' => 0,
244
+ 'name' => 'tax_input[' . $tax_name . ']',
245
+ 'orderby' => 'name',
246
+ 'selected' => $this->get_slide_slider( $post->ID ),
247
+ 'hierarchical' => 0,
248
+ 'show_option_none' => '&mdash; ' . $taxonomy->labels->all_items . ' &mdash;',
249
+ );
250
+
251
+ wp_dropdown_categories( $cat_dropdown_args );
252
+ ?>
253
+ </ul>
254
+ <a class="taxonomy-add-new" href="edit-tags.php?taxonomy=<?php echo $this->taxonomy ?>&post_type=<?php echo $this->posttype; ?>" id=""><?php _e(
255
+ 'Define Sliders', 'cryout-serious-slider') ?></a>
256
+ </div>
257
+ <?php
258
+ } // slide_custom_category()
259
+
260
+
261
+ /**********************
262
+ * custom post types
263
+ ***********************/
264
+ public function register_post_types() {
265
+
266
+ /* Set up arguments for the custom post type. */
267
+ $args = array(
268
+ 'public' => false,
269
+ 'show_ui' => true,
270
+ 'show_admin_column' => true,
271
+ 'query_var' => true,
272
+ 'description' => __( 'Description.', 'cryout-serious-slider' ),
273
+ 'show_in_nav_menus' => false,
274
+ 'menu_position' => 21,
275
+ 'menu_icon' => plugins_url('/resources/images/serious-slider-icon.png',__FILE__),
276
+ 'capability_type' => 'post',
277
+ 'supports' => array(
278
+ 'title',
279
+ 'editor',
280
+ //'excerpt',
281
+ 'thumbnail',
282
+ 'page-attributes',
283
+ ),
284
+ 'labels' => array(
285
+ 'name' => _x( 'Slides', 'post type general name', 'cryout-serious-slider' ),
286
+ 'singular_name' => _x( 'Slide', 'post type singular name', 'cryout-serious-slider' ),
287
+ 'menu_name' => _x( 'Serious Slider', 'admin menu', 'cryout-serious-slider' ),
288
+ 'name_admin_bar' => _x( 'Slide', 'add new on admin bar', 'cryout-serious-slider' ),
289
+ 'add_new' => _x( 'Add New Slide', 'and new in menu', 'cryout-serious-slider' ),
290
+ 'add_new_item' => __( 'Add New Slide', 'cryout-serious-slider' ),
291
+ 'new_item' => __( 'New Slide', 'cryout-serious-slider' ),
292
+ 'edit_item' => __( 'Edit Slide', 'cryout-serious-slider' ),
293
+ 'view_item' => __( 'View Slide', 'cryout-serious-slider' ),
294
+ 'all_items' => __( 'All Slides', 'cryout-serious-slider' ),
295
+ 'search_items' => __( 'Search Slide', 'cryout-serious-slider' ),
296
+ 'parent_item_colon' => __( 'Parent Slides:', 'cryout-serious-slider' ),
297
+ 'not_found' => __( 'No slides found.', 'cryout-serious-slider' ),
298
+ 'not_found_in_trash' => __( 'No slides found in Trash.', 'cryout-serious-slider' )
299
+ ),
300
+ 'taxonomies' => array(
301
+ $this->taxonomy,
302
+ ),
303
+ 'register_meta_box_cb' => array( $this, 'metabox_register' ),
304
+ );
305
+
306
+ /* Register the post type. */
307
+ register_post_type( 'cryout_serious_slide', $args );
308
+
309
+ } // register_post_types()
310
+
311
+ /* Set up custom taxonomies for the custom post type */
312
+ public function register_taxonomies() {
313
+
314
+ $cat_args = array(
315
+ 'public' => false,
316
+ 'hierarchical' => true,
317
+ 'labels' => array(
318
+ 'name' => _x( 'Sliders', 'taxonomy general name', 'cryout-serious-slider' ),
319
+ 'singular_name' => _x( 'Slider', 'taxonomy singular name', 'cryout-serious-slider' ),
320
+ 'search_items' => __( 'Search Sliders', 'cryout-serious-slider' ),
321
+ 'all_items' => __( 'All Sliders', 'cryout-serious-slider' ),
322
+ 'parent_item' => __( 'Parent Slider', 'cryout-serious-slider' ),
323
+ 'parent_item_colon' => __( 'Parent Slider:', 'cryout-serious-slider' ),
324
+ 'edit_item' => __( 'Edit Slider', 'cryout-serious-slider' ),
325
+ 'update_item' => __( 'Update Slider', 'cryout-serious-slider' ),
326
+ 'add_new_item' => __( 'Add New Slider', 'cryout-serious-slider' ),
327
+ 'new_item_name' => __( 'New Slider', 'cryout-serious-slider' ),
328
+ 'menu_name' => __( 'Define Sliders', 'cryout-serious-slider' ),
329
+ ),
330
+ 'show_ui' => true,
331
+ 'show_admin_column' => true,
332
+ 'query_var' => true,
333
+
334
+ 'meta_box_cb' => array( $this, 'custom_category_picker' ), // customize taxonomy box selector
335
+ );
336
+
337
+ register_taxonomy( $this->taxonomy, array( $this->posttype ), $cat_args );
338
+ add_action( $this->taxonomy . '_add_form_fields', array($this, 'metatax_main_add'), 10, 2 );
339
+ add_action( $this->taxonomy . '_edit_form_fields', array($this, 'metatax_main_edit'), 10, 2 );
340
+ add_action( $this->taxonomy . '_edit_form', array($this, 'right_column'), 10, 2 ); // _pre_edit_form // _edit_form
341
+
342
+ add_action( 'edited_' . $this->taxonomy, array($this, 'save_taxonomy_custom_meta'), 10, 2 );
343
+ add_action( 'create_' . $this->taxonomy, array($this, 'save_taxonomy_custom_meta'), 10, 2 );
344
+ add_action( 'delete_' . $this->taxonomy, array($this, 'delete_taxonomy_custom_meta'), 10, 2 );
345
+
346
+ } // register_taxonomies()
347
+
348
+
349
+ /**********************
350
+ * dashboard layout customization
351
+ ***********************/
352
+ public function columns_edit( $columns ) {
353
+
354
+ $columns = array(
355
+ 'cb' => '<input type="checkbox" />',
356
+ 'title' => __( 'Title', 'cryout-serious-slider' ),
357
+ $this->taxonomy => __( 'Slider', 'cryout-serious-slider' ),
358
+ 'featured_image' => __( 'Featured Image', 'cryout-serious-slider' ),
359
+ 'date' => __( 'Date', 'cryout-serious-slider' ),
360
+ 'menu_order' => __( 'Order', 'cryout-serious-slider' ),
361
+ );
362
+ return $columns;
363
+ } // columns_edit()
364
+
365
+ // Show the featured image & taxonomy in posts list
366
+ public function columns_content($column_name, $post_ID) {
367
+ global $post;
368
+
369
+ switch ($column_name) {
370
+ case 'featured_image':
371
+
372
+ $featured_image = wp_get_attachment_image_src( get_post_thumbnail_id( $post_ID ), 'medium' );
373
+ $featured_image = $featured_image[0];
374
+ if ($featured_image) {
375
+ echo '<img style="max-width: 100%;" src="' . $featured_image . '" />';
376
+ } else {
377
+ _e('No featured image set.', 'cryout-serious-slider');
378
+ }
379
+
380
+ break;
381
+
382
+ case $this->taxonomy:
383
+
384
+ $terms = get_the_terms( $post->ID, $this->taxonomy );
385
+ if ( !empty( $terms ) ) {
386
+
387
+ $out = array();
388
+ foreach ( $terms as $term ) {
389
+ $out[] = sprintf( '<a href="%1$s">%2$s</a><div class="row-actions"><span class="edit"><a href="%3$s">%4$s</a></span></div>',
390
+ esc_url( add_query_arg( array( 'post_type' => $post->post_type, $this->taxonomy => $term->slug ), 'edit.php' ) ),
391
+ esc_html( sanitize_term_field( 'name', $term->name, $term->term_id, $this->taxonomy, 'display' ) ),
392
+ esc_url( add_query_arg( array( 'action' => 'edit', 'taxonomy' => $this->taxonomy, 'tag_ID' => $term->term_id, 'post_type' => $post->post_type ), 'edit-tags.php' ) ),
393
+ __('Edit slider', 'cryout-serious-slider')
394
+ );
395
+
396
+ }
397
+ echo join( ', ', $out );
398
+
399
+ }
400
+
401
+ else {
402
+ _e( 'No Slider', 'cryout-serious-slider' );
403
+ }
404
+
405
+ break;
406
+
407
+ case 'menu_order':
408
+
409
+ $order = $post->menu_order;
410
+ echo $order;
411
+
412
+ break;
413
+ }
414
+ } // columns_content()
415
+
416
+ /* Add sort by columns support */
417
+ public function order_column_register_sortable($columns){
418
+ $columns['menu_order'] = 'menu_order';
419
+ $columns[$this->taxonomy] = $this->taxonomy;
420
+ return $columns;
421
+ } // order_column_register_sortable()
422
+
423
+ /*
424
+ public function custom_list_css() {
425
+
426
+ } // custom_list_css() */
427
+
428
+ function add_taxonomy_filters() {
429
+ global $typenow;
430
+
431
+ $taxonomies = array( $this->taxonomy );
432
+
433
+ // must set this to the post type you want the filter(s) displayed on
434
+ if( $typenow == $this->posttype ){
435
+
436
+ foreach ($taxonomies as $tax_slug) {
437
+ $tax_obj = get_taxonomy($tax_slug);
438
+ $tax_name = $tax_obj->labels->name;
439
+ $terms = get_terms($tax_slug);
440
+ if (!empty($_GET[$tax_slug])) $filtered_tax = sanitize_text_field($_GET[$tax_slug]); else $filtered_tax = '';
441
+ if(count($terms) > 0) {
442
+ echo "<select name='$tax_slug' id='filter_$tax_slug' class='postform'>";
443
+ printf( "<option value=''>%s</option>", sprintf( _x('All %s', 'all terms', 'cryout-serious-slider'), $tax_name ) );
444
+ foreach ($terms as $term) {
445
+ echo '<option value='. $term->slug, $filtered_tax == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')</option>';
446
+ }
447
+ echo "</select>";
448
+ }
449
+ }
450
+ }
451
+ } // add_taxonomy_filters()
452
+
453
+ // add right column content (with shortcode hint) on edit slider page */
454
+ function right_column( $tag, $taxonomy ) {
455
+ $term_ID = $tag->term_id;
456
+ include_once( plugin_dir_path( __FILE__ ) . 'inc/right-column.php' );
457
+ } // right_column()
458
+
459
+ /*public function custom_js() {
460
+ global $post_type;
461
+
462
+ if( $this->posttype == $post_type ) { ?>
463
+ <script type="text/javascript">
464
+ var html = '<div id="<?php echo $this->taxonomy ?>-definesliders">\
465
+ <a class="hide-if-no-js taxonomy-add-new" href="edit-tags.php?taxonomy=<?php echo $this->taxonomy ?>&post_type=<?php echo $this->posttype; ?>" id="">Define Sliders</a>\
466
+ </div>';
467
+ jQuery(document).ready( function() {
468
+ jQuery('#<?php echo $this->taxonomy ?>-adder').after(html);
469
+ });
470
+ </script> <?php
471
+ }
472
+ } // custom_js()*/
473
+
474
+
475
+ /**********************
476
+ * slide meta
477
+ ***********************/
478
+ /* Custom post types metaboxes */
479
+ function metabox_register() {
480
+ add_meta_box('serious_slider_metaboxes', __( 'Slide Link', 'cryout-serious-slider' ), array($this, 'metabox_main'), $this->posttype, 'normal', 'high');
481
+ } // metabox_register()
482
+
483
+ function metabox_main() {
484
+
485
+ global $post;
486
+ $values = get_post_custom( $post->ID );
487
+ $text = isset( $values['cryout_serious_slider_link'] ) ? $values['cryout_serious_slider_link'][0] : '';
488
+ $check = isset( $values['cryout_serious_slider_target'] ) ? esc_attr( $values['cryout_serious_slider_target'][0] ) : '';
489
+
490
+ wp_nonce_field( 'cryout_serious_slider_meta_nonce', 'cryout_serious_slider_meta_nonce' ); ?>
491
+
492
+ <p>
493
+ <label for="cryout_serious_slider_link"><?php _e('Link URL', 'cryout-serious-slider') ?></label>
494
+ <input type="text" size="40" name="cryout_serious_slider_link" id="cryout_serious_slider_link" value="<?php echo $text; ?>" />
495
+ <span>&nbsp;&nbsp;</span>
496
+ <input type="checkbox" id="cryout_serious_slider_target" name="cryout_serious_slider_target" <?php checked( $check ); ?> />
497
+ <label for="cryout_serious_slider_target"><?php _e('Open In New Window', 'cryout-serious-slider') ?></label>
498
+ <br><em><?php _e('Leave empty to disable link.', 'cryout-serious-slider') ?></em></p>
499
+ <?php
500
+
501
+ } // metabox_main()
502
+
503
+ function metabox_save( $post_id ) {
504
+
505
+ if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
506
+ if( !isset( $_POST['cryout_serious_slider_meta_nonce'] ) || !wp_verify_nonce( $_POST['cryout_serious_slider_meta_nonce'], 'cryout_serious_slider_meta_nonce' ) ) return;
507
+ if( !current_user_can( 'edit_post' ) ) return;
508
+ $allowed = '';
509
+
510
+ if( isset( $_POST['cryout_serious_slider_link'] ) )
511
+ update_post_meta( $post_id, 'cryout_serious_slider_link', esc_url_raw( $_POST['cryout_serious_slider_link'], $allowed ) );
512
+ $chk = isset( $_POST['cryout_serious_slider_target'] );
513
+ update_post_meta( $post_id, 'cryout_serious_slider_target', $chk );
514
+
515
+ } // metabox_save()
516
+
517
+
518
+ /**********************
519
+ * slider/taxonomy meta
520
+ ***********************/
521
+ public function metatax_main_add() {
522
+
523
+ $the_meta = $this->defaults;
524
+ require_once( plugin_dir_path( __FILE__ ) . 'inc/taxmeta.php' );
525
+
526
+ } // metabox_main_add()
527
+
528
+ public function metatax_main_edit($term) {
529
+
530
+ $tid = $term->term_id;
531
+ $the_meta = get_option( "cryout_serious_slider_${tid}_meta" );
532
+ if ( empty($the_meta) ) $the_meta = $this->defaults; ?>
533
+ <tr class="form-field">
534
+ <td colspan="2">
535
+ <?php require_once( plugin_dir_path( __FILE__ ) . 'inc/taxmeta.php' );?>
536
+ </td>
537
+ </tr><?php
538
+
539
+ } // metatax_main_edit()
540
+
541
+ function save_taxonomy_custom_meta( $tid ) {
542
+ if ( isset( $_POST['term_meta'] ) ) {
543
+ $term_meta = get_option( "cryout_serious_slider_${tid}_meta" );
544
+ $cat_keys = array_keys( $_POST['term_meta'] );
545
+ foreach ( $cat_keys as $key ) {
546
+ if ( isset ( $_POST['term_meta'][$key] ) ) {
547
+ $term_meta[$key] = sanitize_text_field($_POST['term_meta'][$key]);
548
+ }
549
+ }
550
+ // Save the option array.
551
+ update_option( "cryout_serious_slider_${tid}_meta", $term_meta );
552
+ }
553
+ } // save_taxonomy_custom_meta()
554
+
555
+ function delete_taxonomy_custom_meta( $term_id ) {
556
+ delete_option( "cryout_serious_slider_${term_id}_meta" );
557
+ } // delete_taxonomy_custom_meta()
558
+
559
+
560
+ /**********************
561
+ * mce extension
562
+ ***********************/
563
+ function admin_head() {
564
+ global $post_type;
565
+
566
+ // don't allow slider shortcode inside slide posts
567
+ if( $this->posttype != $post_type ) {
568
+ // check user permissions
569
+ if ( !current_user_can( 'edit_posts' ) && !current_user_can( 'edit_pages' ) ) {
570
+ return;
571
+ }
572
+
573
+ // check if WYSIWYG is enabled
574
+ if ( 'true' == get_user_option( 'rich_editing' ) ) {
575
+ add_filter( 'mce_external_plugins', array( $this ,'register_mce_external_plugins' ) );
576
+ add_filter( 'mce_buttons', array( $this, 'regiter_mce_buttons' ) );
577
+ }
578
+ }
579
+ } // admin_head()
580
+
581
+ function register_mce_external_plugins( $plugin_array ) {
582
+ $plugin_array[$this->shortcode_tag] = plugins_url( 'resources/mce-button.js' , __FILE__ );
583
+ return $plugin_array;
584
+ } // register_mce_external_plugins()
585
+
586
+ function regiter_mce_buttons( $buttons ) {
587
+ array_push( $buttons, $this->shortcode_tag );
588
+ return $buttons;
589
+ } // regiter_mce_buttons()
590
+
591
+ function admin_enqueue_scripts($hook){
592
+ global $post_type;
593
+ wp_enqueue_style('serious-slider-shortcode', plugins_url( 'resources/mce-button.css' , __FILE__ ) );
594
+ if( ($hook == $this->thepage) || ( $this->posttype == $post_type ) )
595
+ wp_enqueue_style('serious-slider-admincss', plugins_url( 'resources/backend.css' , __FILE__ ) );
596
+ } // admin_enqueue_scripts()
597
+
598
+
599
+ /**********************
600
+ * form helpers
601
+ ***********************/
602
+ function inputfield( $id, $current, $title='', $desc='', $class='', $extra='', $extra2='' ) {
603
+ /* wordpress/wp-admin/js/tags.js empties all text input elements with
604
+ $('input[type="text"]:visible, textarea:visible', form).val('');
605
+ as of 4.4.2; using type="number" as workaround */
606
+ ?>
607
+ <tr><th scope="row"><?php echo $title ?></th>
608
+ <td><input id="<?php echo $id ?>" name="<?php echo $id ?>" class="<?php echo $class ?>" type="number" value="<?php echo $current ?>" <?php echo $extra2 ?>> <?php echo $extra ?>
609
+ <p class="description"><?php echo $desc ?></p>
610
+ </td>
611
+ </tr>
612
+ <?php
613
+ } // inputfield()
614
+ function selectfield( $id, $options=array(), $current, $title='', $desc='', $class='', $extra='' ) {
615
+ ?>
616
+ <tr><th scope="row"><?php echo $title ?></th>
617
+ <td><select id="<?php echo $id ?>" name="<?php echo $id ?>" class="<?php echo $class ?>">
618
+ <?php foreach ($options as $value => $label) { ?>
619
+ <option value="<?php echo $value ?>" <?php selected( $current, $value); ?>><?php echo $label ?></option>
620
+ <?php } ?>
621
+ </select>
622
+ <p class="description"><?php echo $desc ?></p>
623
+ </td>
624
+ </tr>
625
+ <?php
626
+ } // selectfield()
627
+
628
+ } // class Cryout_Serious_Slider
629
+
630
+ /* * * * get things going * * * */
631
+ $cryout_serious_slider = new Cryout_Serious_Slider;
632
+
633
+ // EOF
demo/demo-content.php ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Cryout_Serious_Slider_DemoContent {
4
+
5
+ private $sample_slides = array(
6
+ array(
7
+ 'post_title' => 'Are You Looking At Me?',
8
+ 'post_content' => 'More Lorem ipsum.....',
9
+ 'post_status' => 'publish',
10
+ 'post_type' => 'cryout_serious_slide',
11
+ 'menu_order' => 3,
12
+ 'image' => '/demo/sample-slide-3.jpg',
13
+ ),
14
+ array(
15
+ 'post_title' => 'Another Sample Slide',
16
+ 'post_content' => "Serious Slider takes your slides seriously.\n\n<a href=\"#\">First Link</a> <a href=\"#\">Second Link</a>",
17
+ 'post_status' => 'publish',
18
+ 'post_type' => 'cryout_serious_slide',
19
+ 'menu_order' => 2,
20
+ 'image' => '/demo/sample-slide-2.jpg',
21
+ ),
22
+ array(
23
+ 'post_title' => 'Why So Serious?',
24
+ 'post_content' => "Lorem Ipsum dolor ist atmet...\n\n<a href=\"#\">Seriously!</a>",
25
+ 'post_status' => 'publish',
26
+ 'post_type' => 'cryout_serious_slide',
27
+ 'menu_order' => 1,
28
+ 'image' => '/demo/sample-slide-1.jpg',
29
+ ),
30
+ ); // sample_slides
31
+
32
+ function __construct() {
33
+
34
+ // create sample slider ('category')
35
+ $term = wp_insert_term(
36
+ 'Sample Slider', // the term
37
+ 'cryout_serious_slider_category', // the taxonomy
38
+ array(
39
+ 'description' => '',
40
+ 'slug' => 'sample-slider',
41
+ )
42
+ );
43
+
44
+ // create the slides
45
+ foreach ($this->sample_slides as $post) {
46
+ // create sample slide
47
+ $pid = wp_insert_post( $post );
48
+ // add featured image
49
+ $post['image'] = plugins_url( $post['image'], dirname(__FILE__) );
50
+ $this->image_helper($pid, $post['image']);
51
+ unset($post['image']);
52
+ // assign slide to slider 'category'
53
+ wp_set_object_terms($pid, 'Sample Slider', 'cryout_serious_slider_category', true);
54
+ }
55
+ } // __construct()
56
+
57
+
58
+ function image_helper($id, $image) {
59
+ // magic sideload image returns an HTML image, not an ID
60
+ $media = media_sideload_image($image, $id);
61
+
62
+ // therefore we must find it so we can set it as featured ID
63
+ if(!empty($media) && !is_wp_error($media)){
64
+ $args = array(
65
+ 'post_type' => 'attachment',
66
+ 'posts_per_page' => -1,
67
+ 'post_status' => 'any',
68
+ 'post_parent' => $id
69
+ );
70
+
71
+ // reference new image to set as featured
72
+ $attachments = get_posts($args);
73
+
74
+ if(isset($attachments) && is_array($attachments)){
75
+ foreach($attachments as $attachment){
76
+ // grab source of full size images (so no 300x150 nonsense in path)
77
+ $image = wp_get_attachment_image_src($attachment->ID, 'full');
78
+ // determine if in the $media image we created, the string of the URL exists
79
+ if(strpos($media, $image[0]) !== false){
80
+ // if so, we found our image. set it as thumbnail
81
+ set_post_thumbnail($id, $attachment->ID);
82
+ // only want one image
83
+ break;
84
+ }
85
+ }
86
+ }
87
+ }
88
+
89
+ } // image_helper()
90
+
91
+ } // class Cryout_Serious_Slider_DemoContent
92
+
93
+ new Cryout_Serious_Slider_DemoContent;
demo/sample-slide-1.jpg ADDED
Binary file
demo/sample-slide-2.jpg ADDED
Binary file
demo/sample-slide-3.jpg ADDED
Binary file
inc/right-column.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div id="floater-right">
2
+ <div class="col-wrap">
3
+ <div class="form-wrap">
4
+ <h3 class="hndle"><?php //_e('Usage', 'cryout-serious-slider') ?></h3>
5
+ <div class="inside">
6
+ <h3><?php _e('Shortcode', 'cryout-serious-slider') ?></h3>
7
+ <p><?php _e('Use the shortcode to include the slider in posts, pages or widgets', 'cryout-serious-slider') ?></p>
8
+ <input type="text" readonly="readonly" value="[serious-slider id=<?php echo $term_ID ?>]"><br>
9
+ <br><hr>
10
+ <h3><?php _e('Template', 'cryout-serious-slider') ?></h3>
11
+ <p><?php _e('Use the PHP code to include the slider directly in files', 'cryout-serious-slider') ?></p>
12
+ <textarea readonly="readonly" rows="3"><?php printf( "&lt;?php\n echo do_shortcode( '[serious-slider id=%s' );\n ?&gt;", $term_ID ) ?></textarea>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </div>
inc/settings.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap" id="serious-slider-about">
2
+ <h2><?php //echo $this->title; ?></h2>
3
+
4
+ <?php
5
+
6
+ //$options = $this->get_settings();
7
+ //$this->save_settings();
8
+
9
+ if ( ! isset( $_REQUEST['add_sample_content'] ) )
10
+ $_REQUEST['add_sample_content'] = false;
11
+
12
+ if ( $_REQUEST['add_sample_content'] ) {
13
+ /* because wp doesn't auto display saved notice on non-options pages */ ?>
14
+ <div class="updated settings-error notice is-dismissible" id="setting-error-settings_updated">
15
+ <p><strong><?php _e('Sample slider created.', 'cryout-serious-slider');?></strong><br>
16
+ <?php _e('Navigate to Slider and Slides sections to see the sample content.') ?></p>
17
+ <button class="notice-dismiss" type="button"><span class="screen-reader-text"><?php _e('Dismiss this notice.', 'cryout-serious-slider' ) ?></span></button>
18
+ </div>
19
+ <?php } ?>
20
+
21
+ <div id="poststuff">
22
+ <div id="post-body" class="metabox-holder columns-2">
23
+ <div id="post-body-content">
24
+
25
+ <div class="postbox" id="serious-slider-header">
26
+ <img src="<?php echo plugins_url('../resources/images/serious-slider-header.png', __FILE__); ?>" />
27
+ <div id="serious-slider-description">
28
+ <p>Responsive slider, built on Bootstrap Carousel, uses core WordPress functionality, easy to use, seriously.</p>
29
+ <h3> Features: </h3>
30
+
31
+ <ul>
32
+ <li>Unlimited sliders with unlimited slides</li>
33
+ <li>Seriously configurable </li>
34
+ <li>Fully responsive </li>
35
+ <li>Touch Swipe Navigation </li>
36
+ <li>Customization options for each individual slider </li>
37
+ <li>Slide attributes: image, caption title, caption text (with HTML support), target link</li>
38
+ <li>Easy to use - uses WordPress custom post types</li>
39
+ <li>Translation ready and compatible with translation plugins </li>
40
+ <li>Accessibility ready</li>
41
+ <li>Lightweight (uses CSS and iconfont only)</li>
42
+ <li>CSS transitions – fast and powerful hardware accelerated CSS3 3D transforms </li>
43
+ <li>HTML5 valid</li>
44
+ <li>Sample content</li>
45
+ </ul>
46
+
47
+ </div>
48
+ </div>
49
+
50
+ </div> <!-- post-body-content-->
51
+
52
+ <div class="postbox-container" id="postbox-container-1">
53
+
54
+ <div class="meta-box-sortables">
55
+
56
+ <div class="postbox">
57
+ <h3 style="text-align: center;" class="hndle">
58
+ <span><strong><?php echo $this->title; ?></strong></span>
59
+ </h3>
60
+
61
+ <div class="inside">
62
+ <div style="text-align: center; margin: auto">
63
+ <strong><?php printf( __('version: %s','cryout-serious-slider'), $this->version ); ?></strong><br>
64
+ <?php _e('by','cryout-serious-slider') ?> Cryout Creations<br>
65
+ <a target="_blank" href="http://www.cryoutcreations.eu/cryout-serious-slider/">www.cryoutcreations.eu</a>
66
+ </div>
67
+ </div>
68
+ </div>
69
+
70
+ <div class="postbox">
71
+ <h3 style="text-align: center;" class="hndle">
72
+ <span><?php _e('Support','cryout-serious-slider') ?></span>
73
+ </h3><div class="inside">
74
+ <div style="text-align: center; margin: auto">
75
+ <?php printf ( '%1$s <a target="_blank" href="http://www.cryoutcreations.eu/forum">%2$s</a>.',
76
+ __('For support questions please use', 'cryout-serious-slider'),
77
+ __('our forum', 'cryout-serious-slider')
78
+ );
79
+ ?>
80
+ </div>
81
+ </div>
82
+ </div>
83
+
84
+ <div class="postbox">
85
+ <div class="inside">
86
+ <p class="description"><?php _e('Automatically set up a sample slider with 3 slides to use as a guide for your own content.', 'cryout-serious-slider') ?></p>
87
+ <a class="button-primary" href="<?php echo $this->aboutpage . '&add_sample_content=1' ?>" style="float:left; margin-right: 20px;">
88
+ <?php _e('Create Sample Slider', 'cryout-serious-slider');?>
89
+ </a>
90
+ </div> <!--inside-->
91
+ </div> <!--postbox-->
92
+
93
+ </div>
94
+ </div> <!-- postbox-container -->
95
+
96
+ </div> <!-- post-body -->
97
+ <br class="clear">
98
+ </div> <!-- poststuff -->
99
+
100
+ </div><!--end wrap-->
101
+
102
+ <script type="text/javascript">
103
+ jQuery(document).ready( function() {
104
+ jQuery('.color-field').wpColorPicker();
105
+ });
106
+ </script>
inc/shortcodes.php ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /* The shortcode class */
4
+ class Cryout_Serious_Slider_Shortcode {
5
+
6
+ public $shortcode_tag = 'serious-slider';
7
+
8
+ function __construct($args = array()){
9
+ //register shortcode
10
+ add_shortcode( $this->shortcode_tag, array( $this, 'shortcode_render' ) );
11
+ }
12
+
13
+ function shortcode_render($attr) {
14
+
15
+ global $cryout_serious_slider;
16
+
17
+ if (!empty($attr['id'])) {
18
+
19
+ $options = $this->shortcode_options($attr['id']);
20
+ foreach ($options as $id => $opt) ${$id} = $opt;
21
+
22
+ $slider_classes = array();
23
+ $slider_classes[] = 'seriousslider-overlay' . $overlay;
24
+ $slider_classes[] = 'seriousslider-' . $theme;
25
+ $slider_classes[] = 'seriousslider-' . $animation;
26
+ $slider_classes = implode(' ', $slider_classes);
27
+
28
+ if (!empty($attr['count'])) $count = esc_attr($attr['count']); else $count = -1;
29
+
30
+ if ($sort == 'order'):
31
+ // sort by order param
32
+ $s1 = 'menu_order';
33
+ $s2 = 'ASC';
34
+ else:
35
+ // sort by publish date (default)
36
+ $s1 = 'date';
37
+ $s2 = 'DESC';
38
+ endif;
39
+
40
+ $cid = abs($attr['id']).'_'.rand(1000,9999);
41
+
42
+ $the_query = new WP_Query(
43
+ array(
44
+ 'post_type' => array( $cryout_serious_slider->posttype ),
45
+ 'order' => $s2,
46
+ 'orderby' => $s1,
47
+ 'showposts' => $count,
48
+ 'tax_query' => array(
49
+ array(
50
+ 'taxonomy' => $cryout_serious_slider->taxonomy,
51
+ 'field' => 'id',
52
+ 'terms' => array( $cid ),
53
+ ),
54
+ ),
55
+ )
56
+ );
57
+
58
+ $counter = 0; ?>
59
+ <style type="text/css">
60
+ #Serious-Slider-<?php echo $cid ?> { max-width: <?php echo $width; ?>px; max-height: <?php echo $height; ?>px; }
61
+ #Serious-Slider-<?php echo $cid ?> .seriousslider-caption-title { font-size: <?php echo round($textsize*2,2) ?>em; }
62
+ #Serious-Slider-<?php echo $cid ?> .seriousslider-caption-text { font-size: <?php echo round($textsize,2) ?>em; }
63
+ #Serious-Slider-<?php echo $cid ?> .seriousslider-caption-text a { font-size: <?php echo round($textsize*0.8,2) ?>em; }
64
+
65
+ #Serious-Slider-<?php echo $cid ?> .seriousslider-inner > .item {
66
+ -webkit-transition-duration: <?php echo round($transition/1000,2) ?>s;
67
+ -o-transition-duration: <?php echo round($transition/1000,2) ?>s;
68
+ transition-duration: <?php echo round($transition/1000,2) ?>s; }
69
+ </style>
70
+ <!-- cryout serious slider -->
71
+ <?php if ( $the_query->have_posts() ): ?>
72
+ <div id="Serious-Slider-<?php echo $cid ?>" class="cryout-serious-slider seriousslider <?php echo $slider_classes ?>" data-ride="seriousslider">
73
+ <div class="seriousslider-inner" role="listbox">
74
+
75
+ <?php while ($the_query->have_posts()):
76
+ $the_query->the_post();
77
+ $counter++;
78
+
79
+ // default parameters
80
+ $meta_link = '';
81
+ $meta_target = '';
82
+ $sizes = '';
83
+
84
+ // retrieve parameters
85
+ $slide_link = get_post_meta( get_the_ID(), 'cryout_serious_slider_link' );
86
+ $slide_target = get_post_meta( get_the_ID(), 'cryout_serious_slider_target' );
87
+ if ( !empty($slide_link) ) $meta_link = ' href="' . $slide_link[0] . '"';
88
+ if ( !empty($slide_target) ) $meta_target = 'target="_blank"';
89
+
90
+ $image_data = wp_get_attachment_image_src (get_post_thumbnail_ID( get_the_ID() ), 'full' );
91
+
92
+ if ( !empty($sizing) && $sizing ) $sizes = 'width="' . $width . '" height="' . $height . '"';
93
+
94
+ ?>
95
+
96
+ <div class="item slide-<?php echo $counter ?> <?php if ($counter==1) echo 'active' ?>">
97
+ <a <?php echo $meta_link; ?> <?php echo $meta_target; ?>>
98
+ <img src="<?php echo $image_data[0] ?>" alt="<?php the_title(); ?>" <?php echo $sizes ?>>
99
+ </a>
100
+ <div class="seriousslider-caption">
101
+ <h3 class="seriousslider-caption-title">
102
+ <a <?php echo $meta_link?> <?php echo $meta_target ?>><?php the_title(); ?></a>
103
+ </h3>
104
+ <div class="seriousslider-caption-text"><?php the_content() ?></div>
105
+ </div>
106
+ </div>
107
+
108
+ <?php endwhile; ?>
109
+ </div>
110
+
111
+ <ol class="seriousslider-indicators">
112
+ <?php for ($i=0;$i<$counter;$i++) { ?>
113
+ <li data-target="#Serious-Slider-<?php echo $cid ?>" data-slide-to="<?php echo $i?>" <?php if ($i==0) echo 'class="active"' ?>></li>
114
+ <?php } ?>
115
+ </ol>
116
+
117
+ <a class="left seriousslider-control" href="#Serious-Slider-<?php echo $cid ?>" role="button" data-slide="prev">
118
+ <span class="sicon-prev" aria-hidden="true"></span>
119
+ <span class="sr-only"><?php _e('Previous','cryout-serious-slider') ?></span>
120
+ </a>
121
+ <a class="right seriousslider-control" href="#Serious-Slider-<?php echo $cid; ?>" role="button" data-slide="next">
122
+ <span class="sicon-next" aria-hidden="true"></span>
123
+ <span class="sr-only"><?php _e('Next','cryout-serious-slider') ?></span>
124
+ </a>
125
+ </div>
126
+ <script type='text/javascript'>
127
+ jQuery('#Serious-Slider-<?php echo $cid ?>').carousel({
128
+ interval: <?php echo $delay ?>,
129
+ pause: '<?php echo $hover ?>',
130
+ stransition: <?php echo $transition ?>
131
+ })
132
+ </script>
133
+ <?php endif; ?>
134
+ <!-- end cryout serious slider -->
135
+ <?php
136
+ } // if id defined
137
+
138
+ } // shortcode_render()
139
+
140
+ function shortcode_options($sid) {
141
+
142
+ global $cryout_serious_slider;
143
+
144
+ if (is_numeric($sid)):
145
+ $data = get_option( "cryout_serious_slider_${sid}_meta" );
146
+ if ( empty($data) ) $data = $cryout_serious_slider->defaults;
147
+ $options = array();
148
+ foreach ($data as $id=>$value){
149
+ $options[str_replace('cryout_serious_slider_','',$id)] = $value;
150
+ }
151
+ return $options;
152
+ else:
153
+ return $cryout_serious_slider->defaults;
154
+ endif;
155
+ } // shortcode_options()
156
+
157
+ } // class
158
+
159
+ /* Initialize the shortcode class */
160
+ $cryout_serious_slider_shortcode = new Cryout_Serious_Slider_Shortcode;
161
+
162
+ /* END */
inc/slider.php ADDED
File without changes
inc/taxmeta.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <table class="form-table serious-table">
2
+ <?php
3
+ echo $this->selectfield(
4
+ 'term_meta[cryout_serious_slider_sort]',
5
+ array( 'date' => __('by date','cryout-serious-slider'), 'order' => __('by order value','cryout-serious-slider') ),
6
+ $the_meta['cryout_serious_slider_sort'],
7
+ __('Sort Order','cryout-serious-slider'),
8
+ '',
9
+ 'short'
10
+ );
11
+ echo $this->selectfield(
12
+ 'term_meta[cryout_serious_slider_sizing]',
13
+ array( 0 => __('Adapt to images','cryout-serious-slider'), 1 => __('Force constraints','cryout-serious-slider') ),
14
+ $the_meta['cryout_serious_slider_sizing'],
15
+ __('Slider Size','cryout-serious-slider'),
16
+ '',
17
+ 'short'
18
+ );
19
+ ?>
20
+
21
+ <?php
22
+ echo $this->inputfield(
23
+ 'term_meta[cryout_serious_slider_width]',
24
+ $the_meta['cryout_serious_slider_width'],
25
+ __('Width','cryout-serious-slider'),
26
+ '',
27
+ 'short',
28
+ 'px'
29
+ );
30
+ echo $this->inputfield(
31
+ 'term_meta[cryout_serious_slider_height]',
32
+ $the_meta['cryout_serious_slider_height'],
33
+ __('Height','cryout-serious-slider'),
34
+ '',
35
+ 'short',
36
+ 'px'
37
+ );
38
+ echo $this->selectfield(
39
+ 'term_meta[cryout_serious_slider_theme]',
40
+ array( 'light' => __('Light','cryout-serious-slider'),
41
+ 'dark' => __('Dark','cryout-serious-slider'),
42
+ 'blank' => __('Blank','cryout-serious-slider'),
43
+ 'boots' => __('Bootstrap','cryout-serious-slider') ),
44
+ $the_meta['cryout_serious_slider_theme'],
45
+ __('Color Scheme','cryout-serious-slider'),
46
+ '',
47
+ 'short'
48
+ );
49
+ echo $this->inputfield(
50
+ 'term_meta[cryout_serious_slider_textsize]',
51
+ $the_meta['cryout_serious_slider_textsize'],
52
+ __('Base Font Size','cryout-serious-slider'),
53
+ '',
54
+ 'short',
55
+ 'em',
56
+ 'step="0.1"'
57
+ );
58
+ echo $this->selectfield(
59
+ 'term_meta[cryout_serious_slider_overlay]',
60
+ array( 0 => __('Always hidden', 'cryout-serious-slider'), 1 => __('Appear on hover','cryout-serious-slider'), 2 => __('Always visible','cryout-serious-slider') ),
61
+ $the_meta['cryout_serious_slider_overlay'],
62
+ __('Bullets and Navigation','cryout-serious-slider'),
63
+ '',
64
+ 'short'
65
+ );
66
+ echo $this->selectfield(
67
+ 'term_meta[cryout_serious_slider_animation]',
68
+ array(
69
+ 'fade' => __('Fade','cryout-serious-slider'),
70
+ 'slide' => __('Slide','cryout-serious-slider'),
71
+ 'overslide' => __('Overslide','cryout-serious-slider'),
72
+ 'underslide' => __('Underslide','cryout-serious-slider'),
73
+ 'parallax' => __('Parallax','cryout-serious-slider'),
74
+ 'hflip' => __('Horizontal Flip','cryout-serious-slider'),
75
+ 'vflip' => __('Vertical Flip','cryout-serious-slider'),
76
+ ),
77
+ $the_meta['cryout_serious_slider_animation'],
78
+ __('Transition Effect','cryout-serious-slider'),
79
+ '',
80
+ 'short'
81
+ );
82
+ echo $this->selectfield(
83
+ 'term_meta[cryout_serious_slider_hover]',
84
+ array( 'hover' => __('Enabled','cryout-serious-slider'), 'false' => __('Disabled','cryout-serious-slider') ),
85
+ $the_meta['cryout_serious_slider_hover'],
86
+ __('Transition Pause on Hover','cryout-serious-slider'),
87
+ '',
88
+ 'short'
89
+ );
90
+
91
+ echo $this->inputfield(
92
+ 'term_meta[cryout_serious_slider_delay]',
93
+ $the_meta['cryout_serious_slider_delay'],
94
+ __('Transition Delay','cryout-serious-slider'),
95
+ '',
96
+ 'short',
97
+ 'ms'
98
+ );
99
+ echo $this->inputfield(
100
+ 'term_meta[cryout_serious_slider_transition]',
101
+ $the_meta['cryout_serious_slider_transition'],
102
+ __('Transition Duration','cryout-serious-slider'),
103
+ '',
104
+ 'short',
105
+ 'ms'
106
+ ); ?>
107
+
108
+ </table>
109
+ <br>
inc/widgets.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Cryout_Serious_Slider_Widget extends WP_Widget {
4
+
5
+ public $shortcode_tag = 'serious-slider';
6
+
7
+ public function __construct() {
8
+ $widget_ops = array('classname' => 'serious-slider-widget', 'description' => 'Insert a Serious Slider in a widget area' );
9
+ $control_ops = array('width' => 350, 'height' => 350); // making widget window larger
10
+ parent::__construct('cryout_serious_slider_widget', 'Serious Slider', $widget_ops, $control_ops);
11
+ } // construct()
12
+
13
+ public function ColumnsWidget() {
14
+ self::__construct();
15
+ } // PHP4 constructor
16
+
17
+ function form($instance) {
18
+
19
+ global $cryout_serious_slider;
20
+
21
+ $instance = wp_parse_args( (array) $instance, array( 'sid' => '' ) );
22
+ $sid = $instance['sid'];
23
+ $sliders = $cryout_serious_slider->get_sliders();
24
+ ?>
25
+ <div>
26
+ <p><label for="<?php echo $this->get_field_id('sid'); ?>"><?php _e('Displayed Slider', 'cryout-serious-slider') ?>:
27
+ <select class="widefat" id="<?php echo $this->get_field_id('sid'); ?>" name="<?php echo $this->get_field_name('sid'); ?>">
28
+ <?php foreach ($sliders as $slider) { ?>
29
+ <option value="<?php echo $slider['value'] ?>" <?php selected($slider['value'],$sid) ?>><?php echo $slider['text'] ?></option>
30
+ <?php } ?>
31
+ </select>
32
+ </p>
33
+ </div> <?php
34
+ } // form()
35
+
36
+ function update($new_instance, $old_instance) {
37
+ $instance = $old_instance;
38
+ $instance['sid'] = $new_instance['sid'];
39
+ return $instance;
40
+ } // update()
41
+
42
+ function widget($args, $instance) {
43
+ if(!empty($instance['sid'])) {
44
+ $slider_id = $instance['sid'];
45
+ do_shortcode( '[' . $this->shortcode_tag . ' id=' . $slider_id. ']' );
46
+ };
47
+ } // widget()
48
+
49
+ } // class Cryout_Serious_Slider_Widget
50
+
51
+ add_action( 'widgets_init', create_function('', 'return register_widget("Cryout_Serious_Slider_Widget");') );
languages/default.mo ADDED
Binary file
languages/default.po ADDED
@@ -0,0 +1,401 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Cryout Serious Slider\n"
4
+ "POT-Creation-Date: 2016-05-06 14:26+0200\n"
5
+ "PO-Revision-Date: 2016-05-06 14:27+0200\n"
6
+ "Last-Translator: Cryout Creations\n"
7
+ "Language-Team: Cryout Creations\n"
8
+ "Language: en_US\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 1.5.5\n"
13
+ "X-Poedit-KeywordsList: _e;_x;_n;__\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SearchPath-0: ..\n"
16
+
17
+ #: ../cryout-serious-slider.php:53 ../cryout-serious-slider.php:88
18
+ #: ../cryout-serious-slider.php:287
19
+ msgid "Serious Slider"
20
+ msgstr ""
21
+
22
+ #: ../cryout-serious-slider.php:85
23
+ msgid "Retrieving sliders..."
24
+ msgstr ""
25
+
26
+ #: ../cryout-serious-slider.php:86
27
+ msgid "Error retrieving sliders"
28
+ msgstr ""
29
+
30
+ #: ../cryout-serious-slider.php:87
31
+ msgid "Cryout Serious Slider"
32
+ msgstr ""
33
+
34
+ #: ../cryout-serious-slider.php:89
35
+ msgid "Insert Slider"
36
+ msgstr ""
37
+
38
+ #: ../cryout-serious-slider.php:90
39
+ msgid "Cancel"
40
+ msgstr ""
41
+
42
+ #: ../cryout-serious-slider.php:91
43
+ msgid "Select Slider"
44
+ msgstr ""
45
+
46
+ #: ../cryout-serious-slider.php:92
47
+ msgid "Add Slider"
48
+ msgstr ""
49
+
50
+ #: ../cryout-serious-slider.php:140
51
+ msgid "About"
52
+ msgstr ""
53
+
54
+ #: ../cryout-serious-slider.php:151
55
+ msgid "About Plugin"
56
+ msgstr ""
57
+
58
+ #: ../cryout-serious-slider.php:160
59
+ msgid "Plugin homepage"
60
+ msgstr ""
61
+
62
+ #: ../cryout-serious-slider.php:161
63
+ msgid "Support forum"
64
+ msgstr ""
65
+
66
+ #: ../cryout-serious-slider.php:162
67
+ msgid "Changelog"
68
+ msgstr ""
69
+
70
+ #: ../cryout-serious-slider.php:255 ../cryout-serious-slider.php:328
71
+ msgid "Define Sliders"
72
+ msgstr ""
73
+
74
+ #: ../cryout-serious-slider.php:272
75
+ msgid "Description."
76
+ msgstr ""
77
+
78
+ #: ../cryout-serious-slider.php:285
79
+ msgid "Slides"
80
+ msgstr ""
81
+
82
+ #: ../cryout-serious-slider.php:286 ../cryout-serious-slider.php:288
83
+ #: ../inc/taxmeta.php:70
84
+ msgid "Slide"
85
+ msgstr ""
86
+
87
+ #: ../cryout-serious-slider.php:289 ../cryout-serious-slider.php:290
88
+ msgid "Add New Slide"
89
+ msgstr ""
90
+
91
+ #: ../cryout-serious-slider.php:291
92
+ msgid "New Slide"
93
+ msgstr ""
94
+
95
+ #: ../cryout-serious-slider.php:292
96
+ msgid "Edit Slide"
97
+ msgstr ""
98
+
99
+ #: ../cryout-serious-slider.php:293
100
+ msgid "View Slide"
101
+ msgstr ""
102
+
103
+ #: ../cryout-serious-slider.php:294
104
+ msgid "All Slides"
105
+ msgstr ""
106
+
107
+ #: ../cryout-serious-slider.php:295
108
+ msgid "Search Slide"
109
+ msgstr ""
110
+
111
+ #: ../cryout-serious-slider.php:296
112
+ msgid "Parent Slides:"
113
+ msgstr ""
114
+
115
+ #: ../cryout-serious-slider.php:297
116
+ msgid "No slides found."
117
+ msgstr ""
118
+
119
+ #: ../cryout-serious-slider.php:298
120
+ msgid "No slides found in Trash."
121
+ msgstr ""
122
+
123
+ #: ../cryout-serious-slider.php:318
124
+ msgid "Sliders"
125
+ msgstr ""
126
+
127
+ #: ../cryout-serious-slider.php:319 ../cryout-serious-slider.php:357
128
+ msgid "Slider"
129
+ msgstr ""
130
+
131
+ #: ../cryout-serious-slider.php:320
132
+ msgid "Search Sliders"
133
+ msgstr ""
134
+
135
+ #: ../cryout-serious-slider.php:321
136
+ msgid "All Sliders"
137
+ msgstr ""
138
+
139
+ #: ../cryout-serious-slider.php:322
140
+ msgid "Parent Slider"
141
+ msgstr ""
142
+
143
+ #: ../cryout-serious-slider.php:323
144
+ msgid "Parent Slider:"
145
+ msgstr ""
146
+
147
+ #: ../cryout-serious-slider.php:324
148
+ msgid "Edit Slider"
149
+ msgstr ""
150
+
151
+ #: ../cryout-serious-slider.php:325
152
+ msgid "Update Slider"
153
+ msgstr ""
154
+
155
+ #: ../cryout-serious-slider.php:326
156
+ msgid "Add New Slider"
157
+ msgstr ""
158
+
159
+ #: ../cryout-serious-slider.php:327
160
+ msgid "New Slider"
161
+ msgstr ""
162
+
163
+ #: ../cryout-serious-slider.php:356
164
+ msgid "Title"
165
+ msgstr ""
166
+
167
+ #: ../cryout-serious-slider.php:358
168
+ msgid "Featured Image"
169
+ msgstr ""
170
+
171
+ #: ../cryout-serious-slider.php:359
172
+ msgid "Date"
173
+ msgstr ""
174
+
175
+ #: ../cryout-serious-slider.php:360
176
+ msgid "Order"
177
+ msgstr ""
178
+
179
+ #: ../cryout-serious-slider.php:377
180
+ msgid "No featured image set."
181
+ msgstr ""
182
+
183
+ #: ../cryout-serious-slider.php:393
184
+ msgid "Edit slider"
185
+ msgstr ""
186
+
187
+ #: ../cryout-serious-slider.php:402
188
+ msgid "No Slider"
189
+ msgstr ""
190
+
191
+ #: ../cryout-serious-slider.php:443
192
+ #, php-format
193
+ msgid "All %s"
194
+ msgstr ""
195
+
196
+ #: ../cryout-serious-slider.php:480
197
+ msgid "Slide Link"
198
+ msgstr ""
199
+
200
+ #: ../cryout-serious-slider.php:493
201
+ msgid "Link URL"
202
+ msgstr ""
203
+
204
+ #: ../cryout-serious-slider.php:497
205
+ msgid "Open In New Window"
206
+ msgstr ""
207
+
208
+ #: ../cryout-serious-slider.php:498
209
+ msgid "Leave empty to disable link."
210
+ msgstr ""
211
+
212
+ #: ../inc/right-column.php:6
213
+ msgid "Shortcode"
214
+ msgstr ""
215
+
216
+ #: ../inc/right-column.php:7
217
+ msgid "Use the shortcode to include the slider in posts, pages or widgets"
218
+ msgstr ""
219
+
220
+ #: ../inc/right-column.php:10
221
+ msgid "Template"
222
+ msgstr ""
223
+
224
+ #: ../inc/right-column.php:11
225
+ msgid "Use the PHP code to include the slider directly in files"
226
+ msgstr ""
227
+
228
+ #: ../inc/settings.php:15
229
+ msgid "Sample slider created."
230
+ msgstr ""
231
+
232
+ #: ../inc/settings.php:16
233
+ msgid "Navigate to Slider and Slides sections to see the sample content."
234
+ msgstr ""
235
+
236
+ #: ../inc/settings.php:17
237
+ msgid "Dismiss this notice."
238
+ msgstr ""
239
+
240
+ #: ../inc/settings.php:63
241
+ #, php-format
242
+ msgid "version: %s"
243
+ msgstr ""
244
+
245
+ #: ../inc/settings.php:64
246
+ msgid "by"
247
+ msgstr ""
248
+
249
+ #: ../inc/settings.php:72
250
+ msgid "Support"
251
+ msgstr ""
252
+
253
+ #: ../inc/settings.php:76
254
+ msgid "For support questions please use"
255
+ msgstr ""
256
+
257
+ #: ../inc/settings.php:77
258
+ msgid "our forum"
259
+ msgstr ""
260
+
261
+ #: ../inc/settings.php:86
262
+ msgid ""
263
+ "Automatically set up a sample slider with 3 slides to use as a guide for "
264
+ "your own content."
265
+ msgstr ""
266
+
267
+ #: ../inc/settings.php:88
268
+ msgid "Create Sample Slider"
269
+ msgstr ""
270
+
271
+ #: ../inc/shortcodes.php:119
272
+ msgid "Previous"
273
+ msgstr ""
274
+
275
+ #: ../inc/shortcodes.php:123
276
+ msgid "Next"
277
+ msgstr ""
278
+
279
+ #: ../inc/taxmeta.php:5
280
+ msgid "by date"
281
+ msgstr ""
282
+
283
+ #: ../inc/taxmeta.php:5
284
+ msgid "by order value"
285
+ msgstr ""
286
+
287
+ #: ../inc/taxmeta.php:7
288
+ msgid "Sort Order"
289
+ msgstr ""
290
+
291
+ #: ../inc/taxmeta.php:13
292
+ msgid "Adapt to images"
293
+ msgstr ""
294
+
295
+ #: ../inc/taxmeta.php:13
296
+ msgid "Force constraints"
297
+ msgstr ""
298
+
299
+ #: ../inc/taxmeta.php:15
300
+ msgid "Slider Size"
301
+ msgstr ""
302
+
303
+ #: ../inc/taxmeta.php:25
304
+ msgid "Width"
305
+ msgstr ""
306
+
307
+ #: ../inc/taxmeta.php:33
308
+ msgid "Height"
309
+ msgstr ""
310
+
311
+ #: ../inc/taxmeta.php:40
312
+ msgid "Light"
313
+ msgstr ""
314
+
315
+ #: ../inc/taxmeta.php:41
316
+ msgid "Dark"
317
+ msgstr ""
318
+
319
+ #: ../inc/taxmeta.php:42
320
+ msgid "Blank"
321
+ msgstr ""
322
+
323
+ #: ../inc/taxmeta.php:43
324
+ msgid "Bootstrap"
325
+ msgstr ""
326
+
327
+ #: ../inc/taxmeta.php:45
328
+ msgid "Color Scheme"
329
+ msgstr ""
330
+
331
+ #: ../inc/taxmeta.php:52
332
+ msgid "Base Font Size"
333
+ msgstr ""
334
+
335
+ #: ../inc/taxmeta.php:60
336
+ msgid "Always hidden"
337
+ msgstr ""
338
+
339
+ #: ../inc/taxmeta.php:60
340
+ msgid "Appear on hover"
341
+ msgstr ""
342
+
343
+ #: ../inc/taxmeta.php:60
344
+ msgid "Always visible"
345
+ msgstr ""
346
+
347
+ #: ../inc/taxmeta.php:62
348
+ msgid "Bullets and Navigation"
349
+ msgstr ""
350
+
351
+ #: ../inc/taxmeta.php:69
352
+ msgid "Fade"
353
+ msgstr ""
354
+
355
+ #: ../inc/taxmeta.php:71
356
+ msgid "Overslide"
357
+ msgstr ""
358
+
359
+ #: ../inc/taxmeta.php:72
360
+ msgid "Underslide"
361
+ msgstr ""
362
+
363
+ #: ../inc/taxmeta.php:73
364
+ msgid "Parallax"
365
+ msgstr ""
366
+
367
+ #: ../inc/taxmeta.php:74
368
+ msgid "Horizontal Flip"
369
+ msgstr ""
370
+
371
+ #: ../inc/taxmeta.php:75
372
+ msgid "Vertical Flip"
373
+ msgstr ""
374
+
375
+ #: ../inc/taxmeta.php:78
376
+ msgid "Transition Effect"
377
+ msgstr ""
378
+
379
+ #: ../inc/taxmeta.php:84
380
+ msgid "Enabled"
381
+ msgstr ""
382
+
383
+ #: ../inc/taxmeta.php:84
384
+ msgid "Disabled"
385
+ msgstr ""
386
+
387
+ #: ../inc/taxmeta.php:86
388
+ msgid "Transition Pause on Hover"
389
+ msgstr ""
390
+
391
+ #: ../inc/taxmeta.php:94
392
+ msgid "Transition Delay"
393
+ msgstr ""
394
+
395
+ #: ../inc/taxmeta.php:102
396
+ msgid "Transition Duration"
397
+ msgstr ""
398
+
399
+ #: ../inc/widgets.php:26
400
+ msgid "Displayed Slider"
401
+ msgstr ""
readme.txt ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Plugin Name ===
2
+ Contributors: cryout-creations
3
+ Donate link: http://www.cryoutcreations.eu/donate/
4
+ Tags: slider, carousel, shortcode, bootstrap, responsive, responsive slider
5
+ Requires at least: 4.0
6
+ Tested up to: 4.5.1
7
+ Stable tag: 0.5
8
+ License: GPLv3
9
+ License URI: http://www.gnu.org/licenses/gpl.html
10
+
11
+ Responsive slider, built on Bootstrap Carousel, uses core WordPress functionality, easy to use, seriously.
12
+
13
+ == Description ==
14
+
15
+ = Features: =
16
+
17
+ * Unlimited sliders with unlimited slides
18
+ * Seriously configurable
19
+ * Fully responsive
20
+ * Touch Swipe Navigation
21
+ * Customization options for each individual slider
22
+ * Slide attributes: image, caption title, caption text (with HTML support), target link
23
+ * Easy to use - uses WordPress custom post types
24
+ * Translation ready and compatible with translation plugins
25
+ * Accessibility ready
26
+ * Lightweight (uses CSS and iconfont only)
27
+ * CSS transitions – fast and powerful hardware accelerated CSS3 3D transforms
28
+ * HTML5 valid
29
+ * Sample content
30
+
31
+ == Installation ==
32
+
33
+ = Automatic installation =
34
+
35
+ 1. Navigate to Plugins in your dashboard and click the Add New button.
36
+ 2. Type in "Cryout Serious Slider" in the search box on the right and press Enter, then click the Install button next to the plugin title.
37
+ 3. After installation Activate the plugin, look for Serious Slider in the dashboard menu to set up a slider.
38
+
39
+ = Manual installation =
40
+
41
+ 1. Upload `cryout-serious-slider` folder to the `/wp-content/plugins/` directory
42
+ 2. Activate the plugin through the 'Plugins' menu in WordPress
43
+ 3. Navigate to Serious Slider in the dashboard menu to set up a slider.
44
+
45
+ == Changelog ==
46
+
47
+ = 0.5 =
48
+ * Initial release.
resources/backend.css ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Cryout Serious Slider About page */
2
+ #serious-slider-about,
3
+ #serious-slider-about p,
4
+ #serious-slider-about ul {
5
+ font-size: 1.1em;
6
+ line-height: 1.7;
7
+ }
8
+
9
+ #serious-slider-about ul {
10
+ line-height: 1.3;
11
+ list-style: inside disc;
12
+ }
13
+
14
+
15
+ #serious-slider-about input[type='text'],
16
+ #serious-slider-about textarea,
17
+ #serious-slider-about select {
18
+ min-width: 200px;
19
+ width: 80%;
20
+ max-width: 600px;
21
+ }
22
+
23
+ #serious-slider-about input.short,
24
+ #serious-slider-about select.short {
25
+ width: 50px;
26
+ }
27
+
28
+ #serious-slider-about #post-body {
29
+ margin-right: 0;
30
+ max-width: 800px;
31
+ }
32
+
33
+ #serious-slider-about .postbox {
34
+ padding: 3em;
35
+ -webkit-box-sizing: border-box;
36
+ -moz-box-sizing: border-box;
37
+ box-sizing: border-box;
38
+ }
39
+
40
+ #serious-slider-about #serious-slider-header {
41
+ }
42
+
43
+ #serious-slider-about #serious-slider-description {
44
+ margin-top: 3em;
45
+ }
46
+
47
+ /* Edit pages */
48
+
49
+ #cryout_serious_slider_category,
50
+ #menu_order {width: 10%;}
51
+
52
+ .form-wrap, #edittag {
53
+ background: #FFF;
54
+ border: 1px solid #e5e5e5;
55
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
56
+ padding: 1em 2em;
57
+ }
58
+
59
+ #edittag {
60
+ position: relative;
61
+ }
62
+
63
+ .form-wrap .form-table tr th, .form-wrap .form-table tr td,
64
+ #edittag .form-table tr th, #edittag .form-table tr td {
65
+ padding: 7px 10px;
66
+ }
67
+
68
+ .form-wrap .short, #edittag .short { min-width: 220px; width: auto; }
69
+ .form-wrap input[type=number] { text-align: right; }
70
+
71
+ @media (min-width: 780px) {
72
+ #col-left, #col-right, #edittag { width: 50%; }
73
+ }
74
+
75
+ div.term-slug-wrap,
76
+ div.term-parent-wrap,
77
+ div.term-description-wrap,
78
+ tr.term-slug-wrap,
79
+ tr.term-parent-wrap,
80
+ tr.term-description-wrap {
81
+ display: none;
82
+ }
83
+
84
+ div.term-name-wrap p,
85
+ tr.term-name-wrap p{
86
+ display: none;
87
+ }
88
+
89
+ /* temporarily hide quick edit button on slides */
90
+ div.row-actions .editinline { display: none; }
91
+ div.row-actions .edit + .inline { display: none; }
92
+
93
+ .type-cryout_serious_slide .column-featured_image img { max-height: 120px; }
94
+
95
+ #posts-filter table.wp-list-table th.column-description, #posts-filter table.wp-list-table th.column-slug,
96
+ #posts-filter table.wp-list-table td.column-description, #posts-filter table.wp-list-table td.column-slug,
97
+ select#filter-by-date {
98
+ display: none;
99
+ }
100
+
101
+ /* Taxonomy shortcode box */
102
+
103
+ #floater-right {
104
+ display: block;
105
+ width: 450px;
106
+ position: absolute;
107
+ top: 0;
108
+ left: 100%;
109
+ }
110
+ #floater-right textarea, #floater-right input[type="text"] {
111
+ width: 90%;
112
+ border: 0;
113
+ padding: 10px;
114
+ //background: transparent;
115
+ box-shadow: none;
116
+ font-weight: bold;
117
+ }
118
+
119
+ @media (max-width: 960px) {
120
+ #floater-right { width: 40%; }
121
+ }
122
+
123
+ @media (max-width: 780px) {
124
+ #floater-right {
125
+ width: 98%;
126
+ position: static; }
127
+ }
128
+
129
+ /* FIN */
resources/backend.js ADDED
File without changes
resources/fonts/serioussliderglyphs.eot ADDED
Binary file
resources/fonts/serioussliderglyphs.svg ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Generated by IcoMoon</metadata>
5
+ <defs>
6
+ <font id="serioussliderglyphs" horiz-adv-x="1024">
7
+ <font-face units-per-em="1024" ascent="960" descent="-64" />
8
+ <missing-glyph horiz-adv-x="1024" />
9
+ <glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10
+ <glyph unicode="&#xe051;" glyph-name="rewind" d="M768 768q17.667 0 30.167-12.5t12.5-30.167-12.667-30.333l-268.333-268.333 268.333-268.333q12.667-12.667 12.667-30.333t-12.5-30.167-30.167-12.5q-18 0-30.333 12.333l-298.667 298.667q-12.333 12.333-12.333 30.333t12.333 30.333l298.667 298.667q12.333 12.333 30.333 12.333zM512 768q17.667 0 30.167-12.5t12.5-30.167-12.667-30.333l-268.333-268.333 268.333-268.333q12.667-12.667 12.667-30.333t-12.5-30.167-30.167-12.5q-18 0-30.333 12.333l-298.667 298.667q-12.333 12.333-12.333 30.333t12.333 30.333l298.667 298.667q12.333 12.333 30.333 12.333z" />
11
+ <glyph unicode="&#xe055;" glyph-name="fast-forward" d="M469.333 768q17.667 0 30-12.333l298.667-298.667q12.667-12.667 12.667-30.333t-12.667-30.333l-298.667-298.667q-12.333-12.333-30-12.333t-30.167 12.5-12.5 30.167q0 18 12.333 30.333l268.333 268.333-268.333 268.333q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167zM213.333 768q17.667 0 30-12.333l298.667-298.667q12.667-12.667 12.667-30.333t-12.667-30.333l-298.667-298.667q-12.333-12.333-30-12.333t-30.167 12.5-12.5 30.167q0 18 12.333 30.333l268.333 268.333-268.333 268.333q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167z" />
12
+ <glyph unicode="&#xe900;" glyph-name="chevron-left2" d="M637.542 741.581c22.835-22.323 24.627-53.402 0-80.691l-191.846-200.090 191.846-200.090c24.627-27.29 22.835-58.419 0-80.589-22.784-22.323-61.286-20.89-82.688 0-21.402 20.787-230.502 240.384-230.502 240.384-11.418 11.11-17.152 25.702-17.152 40.294s5.734 29.184 17.152 40.397c0 0 209.101 219.494 230.502 240.384 21.402 20.941 59.904 22.323 82.688 0z" />
13
+ <glyph unicode="&#xe901;" glyph-name="chevron-right2" d="M469.146 741.581c21.402-20.89 230.502-240.384 230.502-240.384 11.418-11.213 17.152-25.805 17.152-40.397s-5.734-29.184-17.152-40.294c0 0-209.101-219.597-230.502-240.384-21.402-20.89-59.904-22.323-82.688 0-22.835 22.221-24.627 53.299 0 80.589l191.846 200.090-191.846 200.090c-24.627 27.29-22.835 58.419 0 80.691 22.784 22.323 61.286 20.941 82.688 0z" />
14
+ <glyph unicode="&#xe902;" glyph-name="chevron-small-left" d="M621.619 285.798c13.722-13.875 13.722-36.301 0-50.074-13.722-13.824-35.891-13.926-49.613 0l-196.096 200.090c-13.722 13.824-13.722 36.198 0 50.125l196.096 200.090c13.67 13.824 35.891 13.824 49.613 0 13.722-13.875 13.722-36.301 0-50.074l-160.819-175.155 160.819-175.002z" />
15
+ <glyph unicode="&#xe903;" glyph-name="chevron-small-right" d="M563.2 460.8l-160.819 175.104c-13.722 13.824-13.722 36.198 0 50.074 13.722 13.824 35.891 13.824 49.613 0l196.096-200.090c13.722-13.875 13.722-36.301 0-50.125l-196.096-200.090c-13.67-13.926-35.891-13.824-49.613 0-13.722 13.773-13.722 36.198 0 50.074l160.819 175.053z" />
16
+ <glyph unicode="&#xe904;" glyph-name="chevron-thin-left" d="M711.219 80.998c13.722-13.926 13.722-36.301 0-50.125s-35.891-13.875-49.613 0l-400.896 404.89c-13.722 13.824-13.722 36.198 0 50.125l400.896 404.89c13.722 13.824 35.891 13.824 49.613 0 13.722-13.875 13.722-36.301 0-50.125l-365.619-379.853 365.619-379.802z" />
17
+ <glyph unicode="&#xe905;" glyph-name="chevron-thin-right" d="M678.4 460.8l-365.619 379.904c-13.722 13.824-13.722 36.198 0 50.125 13.722 13.824 35.891 13.824 49.613 0l400.896-404.89c13.722-13.875 13.722-36.301 0-50.125l-400.896-404.89c-13.722-13.875-35.891-13.824-49.613 0-13.722 13.773-13.722 36.198 0 50.125l365.619 379.75z" />
18
+ <glyph unicode="&#xe906;" glyph-name="chevron-with-circle-left" d="M578.662 625.869c-10.035 10.086-26.368 10.086-36.352 0l-143.718-146.688c-10.035-10.189-10.035-26.624 0-36.71l143.718-146.637c9.984-10.189 26.317-10.138 36.352 0 10.035 10.086 10.035 26.522 0 36.71l-117.862 128.256 117.862 128.307c10.035 10.138 10.035 26.522 0 36.762zM512 952.32c-271.462 0-491.52-220.058-491.52-491.52 0-271.514 220.058-491.52 491.52-491.52s491.52 220.006 491.52 491.52c0 271.462-220.058 491.52-491.52 491.52zM512 33.075c-236.288 0-427.725 191.488-427.725 427.725s191.437 427.725 427.725 427.725c236.186 0 427.725-191.488 427.725-427.725s-191.539-427.725-427.725-427.725z" />
19
+ <glyph unicode="&#xe907;" glyph-name="chevron-with-circle-right" d="M563.2 460.8l-117.862 128.307c-10.035 10.138-10.035 26.573 0 36.762 10.035 10.086 26.368 10.086 36.352 0l143.718-146.637c10.035-10.189 10.035-26.624 0-36.71l-143.718-146.637c-9.984-10.189-26.317-10.138-36.352 0-10.035 10.086-10.035 26.522 0 36.71l117.862 128.205zM512 952.32c271.462 0 491.52-220.058 491.52-491.52 0-271.514-220.058-491.52-491.52-491.52s-491.52 220.006-491.52 491.52c0 271.462 220.058 491.52 491.52 491.52zM512 33.075c236.186 0 427.725 191.488 427.725 427.725s-191.539 427.725-427.725 427.725c-236.288 0-427.725-191.488-427.725-427.725-0.051-236.237 191.437-427.725 427.725-427.725z" />
20
+ <glyph unicode="&#xf053;" glyph-name="chevron-left" horiz-adv-x="768" d="M669.143 778.857l-303.429-303.429 303.429-303.429q10.857-10.857 10.857-25.714t-10.857-25.714l-94.857-94.857q-10.857-10.857-25.714-10.857t-25.714 10.857l-424 424q-10.857 10.857-10.857 25.714t10.857 25.714l424 424q10.857 10.857 25.714 10.857t25.714-10.857l94.857-94.857q10.857-10.857 10.857-25.714t-10.857-25.714z" />
21
+ <glyph unicode="&#xf054;" glyph-name="chevron-right" horiz-adv-x="695" d="M632.571 449.714l-424-424q-10.857-10.857-25.714-10.857t-25.714 10.857l-94.857 94.857q-10.857 10.857-10.857 25.714t10.857 25.714l303.429 303.429-303.429 303.429q-10.857 10.857-10.857 25.714t10.857 25.714l94.857 94.857q10.857 10.857 25.714 10.857t25.714-10.857l424-424q10.857-10.857 10.857-25.714t-10.857-25.714z" />
22
+ </font></defs></svg>
resources/fonts/serioussliderglyphs.ttf ADDED
Binary file
resources/fonts/serioussliderglyphs.woff ADDED
Binary file
resources/images/serious-slider-editor-icon.png ADDED
Binary file
resources/images/serious-slider-header.png ADDED
Binary file
resources/images/serious-slider-icon.png ADDED
Binary file
resources/jquery.mobile.custom.js ADDED
@@ -0,0 +1,864 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery Mobile v1.4.5
3
+ * http://jquerymobile.com
4
+ *
5
+ * Copyright 2010, 2014 jQuery Foundation, Inc. and other contributors
6
+ * Released under the MIT license.
7
+ * http://jquery.org/license
8
+ *
9
+ */
10
+
11
+ (function ( root, doc, factory ) {
12
+ if ( typeof define === "function" && define.amd ) {
13
+ // AMD. Register as an anonymous module.
14
+ define( [ "jquery" ], function ( $ ) {
15
+ factory( $, root, doc );
16
+ return $.mobile;
17
+ });
18
+ } else {
19
+ // Browser globals
20
+ factory( root.jQuery, root, doc );
21
+ }
22
+ }( this, document, function ( jQuery, window, document, undefined ) {// This plugin is an experiment for abstracting away the touch and mouse
23
+ // events so that developers don't have to worry about which method of input
24
+ // the device their document is loaded on supports.
25
+ //
26
+ // The idea here is to allow the developer to register listeners for the
27
+ // basic mouse events, such as mousedown, mousemove, mouseup, and click,
28
+ // and the plugin will take care of registering the correct listeners
29
+ // behind the scenes to invoke the listener at the fastest possible time
30
+ // for that device, while still retaining the order of event firing in
31
+ // the traditional mouse environment, should multiple handlers be registered
32
+ // on the same element for different events.
33
+ //
34
+ // The current version exposes the following virtual events to jQuery bind methods:
35
+ // "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel"
36
+
37
+ (function( $, window, document, undefined ) {
38
+
39
+ var dataPropertyName = "virtualMouseBindings",
40
+ touchTargetPropertyName = "virtualTouchID",
41
+ virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split( " " ),
42
+ touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ),
43
+ mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [],
44
+ mouseEventProps = $.event.props.concat( mouseHookProps ),
45
+ activeDocHandlers = {},
46
+ resetTimerID = 0,
47
+ startX = 0,
48
+ startY = 0,
49
+ didScroll = false,
50
+ clickBlockList = [],
51
+ blockMouseTriggers = false,
52
+ blockTouchTriggers = false,
53
+ eventCaptureSupported = "addEventListener" in document,
54
+ $document = $( document ),
55
+ nextTouchID = 1,
56
+ lastTouchID = 0, threshold,
57
+ i;
58
+
59
+ $.vmouse = {
60
+ moveDistanceThreshold: 10,
61
+ clickDistanceThreshold: 10,
62
+ resetTimerDuration: 1500
63
+ };
64
+
65
+ function getNativeEvent( event ) {
66
+
67
+ while ( event && typeof event.originalEvent !== "undefined" ) {
68
+ event = event.originalEvent;
69
+ }
70
+ return event;
71
+ }
72
+
73
+ function createVirtualEvent( event, eventType ) {
74
+
75
+ var t = event.type,
76
+ oe, props, ne, prop, ct, touch, i, j, len;
77
+
78
+ event = $.Event( event );
79
+ event.type = eventType;
80
+
81
+ oe = event.originalEvent;
82
+ props = $.event.props;
83
+
84
+ // addresses separation of $.event.props in to $.event.mouseHook.props and Issue 3280
85
+ // https://github.com/jquery/jquery-mobile/issues/3280
86
+ if ( t.search( /^(mouse|click)/ ) > -1 ) {
87
+ props = mouseEventProps;
88
+ }
89
+
90
+ // copy original event properties over to the new event
91
+ // this would happen if we could call $.event.fix instead of $.Event
92
+ // but we don't have a way to force an event to be fixed multiple times
93
+ if ( oe ) {
94
+ for ( i = props.length, prop; i; ) {
95
+ prop = props[ --i ];
96
+ event[ prop ] = oe[ prop ];
97
+ }
98
+ }
99
+
100
+ // make sure that if the mouse and click virtual events are generated
101
+ // without a .which one is defined
102
+ if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ) {
103
+ event.which = 1;
104
+ }
105
+
106
+ if ( t.search(/^touch/) !== -1 ) {
107
+ ne = getNativeEvent( oe );
108
+ t = ne.touches;
109
+ ct = ne.changedTouches;
110
+ touch = ( t && t.length ) ? t[0] : ( ( ct && ct.length ) ? ct[ 0 ] : undefined );
111
+
112
+ if ( touch ) {
113
+ for ( j = 0, len = touchEventProps.length; j < len; j++) {
114
+ prop = touchEventProps[ j ];
115
+ event[ prop ] = touch[ prop ];
116
+ }
117
+ }
118
+ }
119
+
120
+ return event;
121
+ }
122
+
123
+ function getVirtualBindingFlags( element ) {
124
+
125
+ var flags = {},
126
+ b, k;
127
+
128
+ while ( element ) {
129
+
130
+ b = $.data( element, dataPropertyName );
131
+
132
+ for ( k in b ) {
133
+ if ( b[ k ] ) {
134
+ flags[ k ] = flags.hasVirtualBinding = true;
135
+ }
136
+ }
137
+ element = element.parentNode;
138
+ }
139
+ return flags;
140
+ }
141
+
142
+ function getClosestElementWithVirtualBinding( element, eventType ) {
143
+ var b;
144
+ while ( element ) {
145
+
146
+ b = $.data( element, dataPropertyName );
147
+
148
+ if ( b && ( !eventType || b[ eventType ] ) ) {
149
+ return element;
150
+ }
151
+ element = element.parentNode;
152
+ }
153
+ return null;
154
+ }
155
+
156
+ function enableTouchBindings() {
157
+ blockTouchTriggers = false;
158
+ }
159
+
160
+ function disableTouchBindings() {
161
+ blockTouchTriggers = true;
162
+ }
163
+
164
+ function enableMouseBindings() {
165
+ lastTouchID = 0;
166
+ clickBlockList.length = 0;
167
+ blockMouseTriggers = false;
168
+
169
+ // When mouse bindings are enabled, our
170
+ // touch bindings are disabled.
171
+ disableTouchBindings();
172
+ }
173
+
174
+ function disableMouseBindings() {
175
+ // When mouse bindings are disabled, our
176
+ // touch bindings are enabled.
177
+ enableTouchBindings();
178
+ }
179
+
180
+ function startResetTimer() {
181
+ clearResetTimer();
182
+ resetTimerID = setTimeout( function() {
183
+ resetTimerID = 0;
184
+ enableMouseBindings();
185
+ }, $.vmouse.resetTimerDuration );
186
+ }
187
+
188
+ function clearResetTimer() {
189
+ if ( resetTimerID ) {
190
+ clearTimeout( resetTimerID );
191
+ resetTimerID = 0;
192
+ }
193
+ }
194
+
195
+ function triggerVirtualEvent( eventType, event, flags ) {
196
+ var ve;
197
+
198
+ if ( ( flags && flags[ eventType ] ) ||
199
+ ( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) {
200
+
201
+ ve = createVirtualEvent( event, eventType );
202
+
203
+ $( event.target).trigger( ve );
204
+ }
205
+
206
+ return ve;
207
+ }
208
+
209
+ function mouseEventCallback( event ) {
210
+ var touchID = $.data( event.target, touchTargetPropertyName ),
211
+ ve;
212
+
213
+ if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ) {
214
+ ve = triggerVirtualEvent( "v" + event.type, event );
215
+ if ( ve ) {
216
+ if ( ve.isDefaultPrevented() ) {
217
+ event.preventDefault();
218
+ }
219
+ if ( ve.isPropagationStopped() ) {
220
+ event.stopPropagation();
221
+ }
222
+ if ( ve.isImmediatePropagationStopped() ) {
223
+ event.stopImmediatePropagation();
224
+ }
225
+ }
226
+ }
227
+ }
228
+
229
+ function handleTouchStart( event ) {
230
+
231
+ var touches = getNativeEvent( event ).touches,
232
+ target, flags, t;
233
+
234
+ if ( touches && touches.length === 1 ) {
235
+
236
+ target = event.target;
237
+ flags = getVirtualBindingFlags( target );
238
+
239
+ if ( flags.hasVirtualBinding ) {
240
+
241
+ lastTouchID = nextTouchID++;
242
+ $.data( target, touchTargetPropertyName, lastTouchID );
243
+
244
+ clearResetTimer();
245
+
246
+ disableMouseBindings();
247
+ didScroll = false;
248
+
249
+ t = getNativeEvent( event ).touches[ 0 ];
250
+ startX = t.pageX;
251
+ startY = t.pageY;
252
+
253
+ triggerVirtualEvent( "vmouseover", event, flags );
254
+ triggerVirtualEvent( "vmousedown", event, flags );
255
+ }
256
+ }
257
+ }
258
+
259
+ function handleScroll( event ) {
260
+ if ( blockTouchTriggers ) {
261
+ return;
262
+ }
263
+
264
+ if ( !didScroll ) {
265
+ triggerVirtualEvent( "vmousecancel", event, getVirtualBindingFlags( event.target ) );
266
+ }
267
+
268
+ didScroll = true;
269
+ startResetTimer();
270
+ }
271
+
272
+ function handleTouchMove( event ) {
273
+ if ( blockTouchTriggers ) {
274
+ return;
275
+ }
276
+
277
+ var t = getNativeEvent( event ).touches[ 0 ],
278
+ didCancel = didScroll,
279
+ moveThreshold = $.vmouse.moveDistanceThreshold,
280
+ flags = getVirtualBindingFlags( event.target );
281
+
282
+ didScroll = didScroll ||
283
+ ( Math.abs( t.pageX - startX ) > moveThreshold ||
284
+ Math.abs( t.pageY - startY ) > moveThreshold );
285
+
286
+ if ( didScroll && !didCancel ) {
287
+ triggerVirtualEvent( "vmousecancel", event, flags );
288
+ }
289
+
290
+ triggerVirtualEvent( "vmousemove", event, flags );
291
+ startResetTimer();
292
+ }
293
+
294
+ function handleTouchEnd( event ) {
295
+ if ( blockTouchTriggers ) {
296
+ return;
297
+ }
298
+
299
+ disableTouchBindings();
300
+
301
+ var flags = getVirtualBindingFlags( event.target ),
302
+ ve, t;
303
+ triggerVirtualEvent( "vmouseup", event, flags );
304
+
305
+ if ( !didScroll ) {
306
+ ve = triggerVirtualEvent( "vclick", event, flags );
307
+ if ( ve && ve.isDefaultPrevented() ) {
308
+ // The target of the mouse events that follow the touchend
309
+ // event don't necessarily match the target used during the
310
+ // touch. This means we need to rely on coordinates for blocking
311
+ // any click that is generated.
312
+ t = getNativeEvent( event ).changedTouches[ 0 ];
313
+ clickBlockList.push({
314
+ touchID: lastTouchID,
315
+ x: t.clientX,
316
+ y: t.clientY
317
+ });
318
+
319
+ // Prevent any mouse events that follow from triggering
320
+ // virtual event notifications.
321
+ blockMouseTriggers = true;
322
+ }
323
+ }
324
+ triggerVirtualEvent( "vmouseout", event, flags);
325
+ didScroll = false;
326
+
327
+ startResetTimer();
328
+ }
329
+
330
+ function hasVirtualBindings( ele ) {
331
+ var bindings = $.data( ele, dataPropertyName ),
332
+ k;
333
+
334
+ if ( bindings ) {
335
+ for ( k in bindings ) {
336
+ if ( bindings[ k ] ) {
337
+ return true;
338
+ }
339
+ }
340
+ }
341
+ return false;
342
+ }
343
+
344
+ function dummyMouseHandler() {}
345
+
346
+ function getSpecialEventObject( eventType ) {
347
+ var realType = eventType.substr( 1 );
348
+
349
+ return {
350
+ setup: function(/* data, namespace */) {
351
+ // If this is the first virtual mouse binding for this element,
352
+ // add a bindings object to its data.
353
+
354
+ if ( !hasVirtualBindings( this ) ) {
355
+ $.data( this, dataPropertyName, {} );
356
+ }
357
+
358
+ // If setup is called, we know it is the first binding for this
359
+ // eventType, so initialize the count for the eventType to zero.
360
+ var bindings = $.data( this, dataPropertyName );
361
+ bindings[ eventType ] = true;
362
+
363
+ // If this is the first virtual mouse event for this type,
364
+ // register a global handler on the document.
365
+
366
+ activeDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1;
367
+
368
+ if ( activeDocHandlers[ eventType ] === 1 ) {
369
+ $document.bind( realType, mouseEventCallback );
370
+ }
371
+
372
+ // Some browsers, like Opera Mini, won't dispatch mouse/click events
373
+ // for elements unless they actually have handlers registered on them.
374
+ // To get around this, we register dummy handlers on the elements.
375
+
376
+ $( this ).bind( realType, dummyMouseHandler );
377
+
378
+ // For now, if event capture is not supported, we rely on mouse handlers.
379
+ if ( eventCaptureSupported ) {
380
+ // If this is the first virtual mouse binding for the document,
381
+ // register our touchstart handler on the document.
382
+
383
+ activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1;
384
+
385
+ if ( activeDocHandlers[ "touchstart" ] === 1 ) {
386
+ $document.bind( "touchstart", handleTouchStart )
387
+ .bind( "touchend", handleTouchEnd )
388
+
389
+ // On touch platforms, touching the screen and then dragging your finger
390
+ // causes the window content to scroll after some distance threshold is
391
+ // exceeded. On these platforms, a scroll prevents a click event from being
392
+ // dispatched, and on some platforms, even the touchend is suppressed. To
393
+ // mimic the suppression of the click event, we need to watch for a scroll
394
+ // event. Unfortunately, some platforms like iOS don't dispatch scroll
395
+ // events until *AFTER* the user lifts their finger (touchend). This means
396
+ // we need to watch both scroll and touchmove events to figure out whether
397
+ // or not a scroll happenens before the touchend event is fired.
398
+
399
+ .bind( "touchmove", handleTouchMove )
400
+ .bind( "scroll", handleScroll );
401
+ }
402
+ }
403
+ },
404
+
405
+ teardown: function(/* data, namespace */) {
406
+ // If this is the last virtual binding for this eventType,
407
+ // remove its global handler from the document.
408
+
409
+ --activeDocHandlers[ eventType ];
410
+
411
+ if ( !activeDocHandlers[ eventType ] ) {
412
+ $document.unbind( realType, mouseEventCallback );
413
+ }
414
+
415
+ if ( eventCaptureSupported ) {
416
+ // If this is the last virtual mouse binding in existence,
417
+ // remove our document touchstart listener.
418
+
419
+ --activeDocHandlers[ "touchstart" ];
420
+
421
+ if ( !activeDocHandlers[ "touchstart" ] ) {
422
+ $document.unbind( "touchstart", handleTouchStart )
423
+ .unbind( "touchmove", handleTouchMove )
424
+ .unbind( "touchend", handleTouchEnd )
425
+ .unbind( "scroll", handleScroll );
426
+ }
427
+ }
428
+
429
+ var $this = $( this ),
430
+ bindings = $.data( this, dataPropertyName );
431
+
432
+ // teardown may be called when an element was
433
+ // removed from the DOM. If this is the case,
434
+ // jQuery core may have already stripped the element
435
+ // of any data bindings so we need to check it before
436
+ // using it.
437
+ if ( bindings ) {
438
+ bindings[ eventType ] = false;
439
+ }
440
+
441
+ // Unregister the dummy event handler.
442
+
443
+ $this.unbind( realType, dummyMouseHandler );
444
+
445
+ // If this is the last virtual mouse binding on the
446
+ // element, remove the binding data from the element.
447
+
448
+ if ( !hasVirtualBindings( this ) ) {
449
+ $this.removeData( dataPropertyName );
450
+ }
451
+ }
452
+ };
453
+ }
454
+
455
+ // Expose our custom events to the jQuery bind/unbind mechanism.
456
+
457
+ for ( i = 0; i < virtualEventNames.length; i++ ) {
458
+ $.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] );
459
+ }
460
+
461
+ // Add a capture click handler to block clicks.
462
+ // Note that we require event capture support for this so if the device
463
+ // doesn't support it, we punt for now and rely solely on mouse events.
464
+ if ( eventCaptureSupported ) {
465
+ document.addEventListener( "click", function( e ) {
466
+ var cnt = clickBlockList.length,
467
+ target = e.target,
468
+ x, y, ele, i, o, touchID;
469
+
470
+ if ( cnt ) {
471
+ x = e.clientX;
472
+ y = e.clientY;
473
+ threshold = $.vmouse.clickDistanceThreshold;
474
+
475
+ // The idea here is to run through the clickBlockList to see if
476
+ // the current click event is in the proximity of one of our
477
+ // vclick events that had preventDefault() called on it. If we find
478
+ // one, then we block the click.
479
+ //
480
+ // Why do we have to rely on proximity?
481
+ //
482
+ // Because the target of the touch event that triggered the vclick
483
+ // can be different from the target of the click event synthesized
484
+ // by the browser. The target of a mouse/click event that is synthesized
485
+ // from a touch event seems to be implementation specific. For example,
486
+ // some browsers will fire mouse/click events for a link that is near
487
+ // a touch event, even though the target of the touchstart/touchend event
488
+ // says the user touched outside the link. Also, it seems that with most
489
+ // browsers, the target of the mouse/click event is not calculated until the
490
+ // time it is dispatched, so if you replace an element that you touched
491
+ // with another element, the target of the mouse/click will be the new
492
+ // element underneath that point.
493
+ //
494
+ // Aside from proximity, we also check to see if the target and any
495
+ // of its ancestors were the ones that blocked a click. This is necessary
496
+ // because of the strange mouse/click target calculation done in the
497
+ // Android 2.1 browser, where if you click on an element, and there is a
498
+ // mouse/click handler on one of its ancestors, the target will be the
499
+ // innermost child of the touched element, even if that child is no where
500
+ // near the point of touch.
501
+
502
+ ele = target;
503
+
504
+ while ( ele ) {
505
+ for ( i = 0; i < cnt; i++ ) {
506
+ o = clickBlockList[ i ];
507
+ touchID = 0;
508
+
509
+ if ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) ||
510
+ $.data( ele, touchTargetPropertyName ) === o.touchID ) {
511
+ // XXX: We may want to consider removing matches from the block list
512
+ // instead of waiting for the reset timer to fire.
513
+ e.preventDefault();
514
+ e.stopPropagation();
515
+ return;
516
+ }
517
+ }
518
+ ele = ele.parentNode;
519
+ }
520
+ }
521
+ }, true);
522
+ }
523
+ })( jQuery, window, document );
524
+
525
+ (function( $ ) {
526
+ $.mobile = {};
527
+ }( jQuery ));
528
+
529
+ (function( $, undefined ) {
530
+ var support = {
531
+ touch: "ontouchend" in document
532
+ };
533
+
534
+ $.mobile.support = $.mobile.support || {};
535
+ $.extend( $.support, support );
536
+ $.extend( $.mobile.support, support );
537
+ }( jQuery ));
538
+
539
+
540
+ (function( $, window, undefined ) {
541
+ var $document = $( document ),
542
+ supportTouch = $.mobile.support.touch,
543
+ scrollEvent = "touchmove scroll",
544
+ touchStartEvent = supportTouch ? "touchstart" : "mousedown",
545
+ touchStopEvent = supportTouch ? "touchend" : "mouseup",
546
+ touchMoveEvent = supportTouch ? "touchmove" : "mousemove";
547
+
548
+ // setup new event shortcuts
549
+ $.each( ( "touchstart touchmove touchend " +
550
+ "tap taphold " +
551
+ "swipe swipeleft swiperight " +
552
+ "scrollstart scrollstop" ).split( " " ), function( i, name ) {
553
+
554
+ $.fn[ name ] = function( fn ) {
555
+ return fn ? this.bind( name, fn ) : this.trigger( name );
556
+ };
557
+
558
+ // jQuery < 1.8
559
+ if ( $.attrFn ) {
560
+ $.attrFn[ name ] = true;
561
+ }
562
+ });
563
+
564
+ function triggerCustomEvent( obj, eventType, event, bubble ) {
565
+ var originalType = event.type;
566
+ event.type = eventType;
567
+ if ( bubble ) {
568
+ $.event.trigger( event, undefined, obj );
569
+ } else {
570
+ $.event.dispatch.call( obj, event );
571
+ }
572
+ event.type = originalType;
573
+ }
574
+
575
+ // also handles scrollstop
576
+ $.event.special.scrollstart = {
577
+
578
+ enabled: true,
579
+ setup: function() {
580
+
581
+ var thisObject = this,
582
+ $this = $( thisObject ),
583
+ scrolling,
584
+ timer;
585
+
586
+ function trigger( event, state ) {
587
+ scrolling = state;
588
+ triggerCustomEvent( thisObject, scrolling ? "scrollstart" : "scrollstop", event );
589
+ }
590
+
591
+ // iPhone triggers scroll after a small delay; use touchmove instead
592
+ $this.bind( scrollEvent, function( event ) {
593
+
594
+ if ( !$.event.special.scrollstart.enabled ) {
595
+ return;
596
+ }
597
+
598
+ if ( !scrolling ) {
599
+ trigger( event, true );
600
+ }
601
+
602
+ clearTimeout( timer );
603
+ timer = setTimeout( function() {
604
+ trigger( event, false );
605
+ }, 50 );
606
+ });
607
+ },
608
+ teardown: function() {
609
+ $( this ).unbind( scrollEvent );
610
+ }
611
+ };
612
+
613
+ // also handles taphold
614
+ $.event.special.tap = {
615
+ tapholdThreshold: 750,
616
+ emitTapOnTaphold: true,
617
+ setup: function() {
618
+ var thisObject = this,
619
+ $this = $( thisObject ),
620
+ isTaphold = false;
621
+
622
+ $this.bind( "vmousedown", function( event ) {
623
+ isTaphold = false;
624
+ if ( event.which && event.which !== 1 ) {
625
+ return false;
626
+ }
627
+
628
+ var origTarget = event.target,
629
+ timer;
630
+
631
+ function clearTapTimer() {
632
+ clearTimeout( timer );
633
+ }
634
+
635
+ function clearTapHandlers() {
636
+ clearTapTimer();
637
+
638
+ $this.unbind( "vclick", clickHandler )
639
+ .unbind( "vmouseup", clearTapTimer );
640
+ $document.unbind( "vmousecancel", clearTapHandlers );
641
+ }
642
+
643
+ function clickHandler( event ) {
644
+ clearTapHandlers();
645
+
646
+ // ONLY trigger a 'tap' event if the start target is
647
+ // the same as the stop target.
648
+ if ( !isTaphold && origTarget === event.target ) {
649
+ triggerCustomEvent( thisObject, "tap", event );
650
+ } else if ( isTaphold ) {
651
+ event.preventDefault();
652
+ }
653
+ }
654
+
655
+ $this.bind( "vmouseup", clearTapTimer )
656
+ .bind( "vclick", clickHandler );
657
+ $document.bind( "vmousecancel", clearTapHandlers );
658
+
659
+ timer = setTimeout( function() {
660
+ if ( !$.event.special.tap.emitTapOnTaphold ) {
661
+ isTaphold = true;
662
+ }
663
+ triggerCustomEvent( thisObject, "taphold", $.Event( "taphold", { target: origTarget } ) );
664
+ }, $.event.special.tap.tapholdThreshold );
665
+ });
666
+ },
667
+ teardown: function() {
668
+ $( this ).unbind( "vmousedown" ).unbind( "vclick" ).unbind( "vmouseup" );
669
+ $document.unbind( "vmousecancel" );
670
+ }
671
+ };
672
+
673
+ // Also handles swipeleft, swiperight
674
+ $.event.special.swipe = {
675
+
676
+ // More than this horizontal displacement, and we will suppress scrolling.
677
+ scrollSupressionThreshold: 30,
678
+
679
+ // More time than this, and it isn't a swipe.
680
+ durationThreshold: 1000,
681
+
682
+ // Swipe horizontal displacement must be more than this.
683
+ horizontalDistanceThreshold: 30,
684
+
685
+ // Swipe vertical displacement must be less than this.
686
+ verticalDistanceThreshold: 30,
687
+
688
+ getLocation: function ( event ) {
689
+ var winPageX = window.pageXOffset,
690
+ winPageY = window.pageYOffset,
691
+ x = event.clientX,
692
+ y = event.clientY;
693
+
694
+ if ( event.pageY === 0 && Math.floor( y ) > Math.floor( event.pageY ) ||
695
+ event.pageX === 0 && Math.floor( x ) > Math.floor( event.pageX ) ) {
696
+
697
+ // iOS4 clientX/clientY have the value that should have been
698
+ // in pageX/pageY. While pageX/page/ have the value 0
699
+ x = x - winPageX;
700
+ y = y - winPageY;
701
+ } else if ( y < ( event.pageY - winPageY) || x < ( event.pageX - winPageX ) ) {
702
+
703
+ // Some Android browsers have totally bogus values for clientX/Y
704
+ // when scrolling/zooming a page. Detectable since clientX/clientY
705
+ // should never be smaller than pageX/pageY minus page scroll
706
+ x = event.pageX - winPageX;
707
+ y = event.pageY - winPageY;
708
+ }
709
+
710
+ return {
711
+ x: x,
712
+ y: y
713
+ };
714
+ },
715
+
716
+ start: function( event ) {
717
+ var data = event.originalEvent.touches ?
718
+ event.originalEvent.touches[ 0 ] : event,
719
+ location = $.event.special.swipe.getLocation( data );
720
+ return {
721
+ time: ( new Date() ).getTime(),
722
+ coords: [ location.x, location.y ],
723
+ origin: $( event.target )
724
+ };
725
+ },
726
+
727
+ stop: function( event ) {
728
+ var data = event.originalEvent.touches ?
729
+ event.originalEvent.touches[ 0 ] : event,
730
+ location = $.event.special.swipe.getLocation( data );
731
+ return {
732
+ time: ( new Date() ).getTime(),
733
+ coords: [ location.x, location.y ]
734
+ };
735
+ },
736
+
737
+ handleSwipe: function( start, stop, thisObject, origTarget ) {
738
+ if ( stop.time - start.time < $.event.special.swipe.durationThreshold &&
739
+ Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold &&
740
+ Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) {
741
+ var direction = start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight";
742
+
743
+ triggerCustomEvent( thisObject, "swipe", $.Event( "swipe", { target: origTarget, swipestart: start, swipestop: stop }), true );
744
+ triggerCustomEvent( thisObject, direction,$.Event( direction, { target: origTarget, swipestart: start, swipestop: stop } ), true );
745
+ return true;
746
+ }
747
+ return false;
748
+
749
+ },
750
+
751
+ // This serves as a flag to ensure that at most one swipe event event is
752
+ // in work at any given time
753
+ eventInProgress: false,
754
+
755
+ setup: function() {
756
+ var events,
757
+ thisObject = this,
758
+ $this = $( thisObject ),
759
+ context = {};
760
+
761
+ // Retrieve the events data for this element and add the swipe context
762
+ events = $.data( this, "mobile-events" );
763
+ if ( !events ) {
764
+ events = { length: 0 };
765
+ $.data( this, "mobile-events", events );
766
+ }
767
+ events.length++;
768
+ events.swipe = context;
769
+
770
+ context.start = function( event ) {
771
+
772
+ // Bail if we're already working on a swipe event
773
+ if ( $.event.special.swipe.eventInProgress ) {
774
+ return;
775
+ }
776
+ $.event.special.swipe.eventInProgress = true;
777
+
778
+ var stop,
779
+ start = $.event.special.swipe.start( event ),
780
+ origTarget = event.target,
781
+ emitted = false;
782
+
783
+ context.move = function( event ) {
784
+ if ( !start || event.isDefaultPrevented() ) {
785
+ return;
786
+ }
787
+
788
+ stop = $.event.special.swipe.stop( event );
789
+ if ( !emitted ) {
790
+ emitted = $.event.special.swipe.handleSwipe( start, stop, thisObject, origTarget );
791
+ if ( emitted ) {
792
+
793
+ // Reset the context to make way for the next swipe event
794
+ $.event.special.swipe.eventInProgress = false;
795
+ }
796
+ }
797
+ // prevent scrolling
798
+ if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) {
799
+ event.preventDefault();
800
+ }
801
+ };
802
+
803
+ context.stop = function() {
804
+ emitted = true;
805
+
806
+ // Reset the context to make way for the next swipe event
807
+ $.event.special.swipe.eventInProgress = false;
808
+ $document.off( touchMoveEvent, context.move );
809
+ context.move = null;
810
+ };
811
+
812
+ $document.on( touchMoveEvent, context.move )
813
+ .one( touchStopEvent, context.stop );
814
+ };
815
+ $this.on( touchStartEvent, context.start );
816
+ },
817
+
818
+ teardown: function() {
819
+ var events, context;
820
+
821
+ events = $.data( this, "mobile-events" );
822
+ if ( events ) {
823
+ context = events.swipe;
824
+ delete events.swipe;
825
+ events.length--;
826
+ if ( events.length === 0 ) {
827
+ $.removeData( this, "mobile-events" );
828
+ }
829
+ }
830
+
831
+ if ( context ) {
832
+ if ( context.start ) {
833
+ $( this ).off( touchStartEvent, context.start );
834
+ }
835
+ if ( context.move ) {
836
+ $document.off( touchMoveEvent, context.move );
837
+ }
838
+ if ( context.stop ) {
839
+ $document.off( touchStopEvent, context.stop );
840
+ }
841
+ }
842
+ }
843
+ };
844
+ $.each({
845
+ scrollstop: "scrollstart",
846
+ taphold: "tap",
847
+ swipeleft: "swipe.left",
848
+ swiperight: "swipe.right"
849
+ }, function( event, sourceEvent ) {
850
+
851
+ $.event.special[ event ] = {
852
+ setup: function() {
853
+ $( this ).bind( sourceEvent, $.noop );
854
+ },
855
+ teardown: function() {
856
+ $( this ).unbind( sourceEvent );
857
+ }
858
+ };
859
+ });
860
+
861
+ })( jQuery, this );
862
+
863
+
864
+ }));
resources/jquery.mobile.custom.min.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! jQuery Mobile v1.4.5 | Copyright 2010, 2014 jQuery Foundation, Inc. | jquery.org/license */
2
+
3
+ (function(e,t,n){typeof define=="function"&&define.amd?define(["jquery"],function(r){return n(r,e,t),r.mobile}):n(e.jQuery,e,t)})(this,document,function(e,t,n,r){(function(e,t,n,r){function T(e){while(e&&typeof e.originalEvent!="undefined")e=e.originalEvent;return e}function N(t,n){var i=t.type,s,o,a,l,c,h,p,d,v;t=e.Event(t),t.type=n,s=t.originalEvent,o=e.event.props,i.search(/^(mouse|click)/)>-1&&(o=f);if(s)for(p=o.length,l;p;)l=o[--p],t[l]=s[l];i.search(/mouse(down|up)|click/)>-1&&!t.which&&(t.which=1);if(i.search(/^touch/)!==-1){a=T(s),i=a.touches,c=a.changedTouches,h=i&&i.length?i[0]:c&&c.length?c[0]:r;if(h)for(d=0,v=u.length;d<v;d++)l=u[d],t[l]=h[l]}return t}function C(t){var n={},r,s;while(t){r=e.data(t,i);for(s in r)r[s]&&(n[s]=n.hasVirtualBinding=!0);t=t.parentNode}return n}function k(t,n){var r;while(t){r=e.data(t,i);if(r&&(!n||r[n]))return t;t=t.parentNode}return null}function L(){g=!1}function A(){g=!0}function O(){E=0,v.length=0,m=!1,A()}function M(){L()}function _(){D(),c=setTimeout(function(){c=0,O()},e.vmouse.resetTimerDuration)}function D(){c&&(clearTimeout(c),c=0)}function P(t,n,r){var i;if(r&&r[t]||!r&&k(n.target,t))i=N(n,t),e(n.target).trigger(i);return i}function H(t){var n=e.data(t.target,s),r;!m&&(!E||E!==n)&&(r=P("v"+t.type,t),r&&(r.isDefaultPrevented()&&t.preventDefault(),r.isPropagationStopped()&&t.stopPropagation(),r.isImmediatePropagationStopped()&&t.stopImmediatePropagation()))}function B(t){var n=T(t).touches,r,i,o;n&&n.length===1&&(r=t.target,i=C(r),i.hasVirtualBinding&&(E=w++,e.data(r,s,E),D(),M(),d=!1,o=T(t).touches[0],h=o.pageX,p=o.pageY,P("vmouseover",t,i),P("vmousedown",t,i)))}function j(e){if(g)return;d||P("vmousecancel",e,C(e.target)),d=!0,_()}function F(t){if(g)return;var n=T(t).touches[0],r=d,i=e.vmouse.moveDistanceThreshold,s=C(t.target);d=d||Math.abs(n.pageX-h)>i||Math.abs(n.pageY-p)>i,d&&!r&&P("vmousecancel",t,s),P("vmousemove",t,s),_()}function I(e){if(g)return;A();var t=C(e.target),n,r;P("vmouseup",e,t),d||(n=P("vclick",e,t),n&&n.isDefaultPrevented()&&(r=T(e).changedTouches[0],v.push({touchID:E,x:r.clientX,y:r.clientY}),m=!0)),P("vmouseout",e,t),d=!1,_()}function q(t){var n=e.data(t,i),r;if(n)for(r in n)if(n[r])return!0;return!1}function R(){}function U(t){var n=t.substr(1);return{setup:function(){q(this)||e.data(this,i,{});var r=e.data(this,i);r[t]=!0,l[t]=(l[t]||0)+1,l[t]===1&&b.bind(n,H),e(this).bind(n,R),y&&(l.touchstart=(l.touchstart||0)+1,l.touchstart===1&&b.bind("touchstart",B).bind("touchend",I).bind("touchmove",F).bind("scroll",j))},teardown:function(){--l[t],l[t]||b.unbind(n,H),y&&(--l.touchstart,l.touchstart||b.unbind("touchstart",B).unbind("touchmove",F).unbind("touchend",I).unbind("scroll",j));var r=e(this),s=e.data(this,i);s&&(s[t]=!1),r.unbind(n,R),q(this)||r.removeData(i)}}}var i="virtualMouseBindings",s="virtualTouchID",o="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),u="clientX clientY pageX pageY screenX screenY".split(" "),a=e.event.mouseHooks?e.event.mouseHooks.props:[],f=e.event.props.concat(a),l={},c=0,h=0,p=0,d=!1,v=[],m=!1,g=!1,y="addEventListener"in n,b=e(n),w=1,E=0,S,x;e.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(x=0;x<o.length;x++)e.event.special[o[x]]=U(o[x]);y&&n.addEventListener("click",function(t){var n=v.length,r=t.target,i,o,u,a,f,l;if(n){i=t.clientX,o=t.clientY,S=e.vmouse.clickDistanceThreshold,u=r;while(u){for(a=0;a<n;a++){f=v[a],l=0;if(u===r&&Math.abs(f.x-i)<S&&Math.abs(f.y-o)<S||e.data(u,s)===f.touchID){t.preventDefault(),t.stopPropagation();return}}u=u.parentNode}}},!0)})(e,t,n),function(e){e.mobile={}}(e),function(e,t){var r={touch:"ontouchend"in n};e.mobile.support=e.mobile.support||{},e.extend(e.support,r),e.extend(e.mobile.support,r)}(e),function(e,t,r){function l(t,n,i,s){var o=i.type;i.type=n,s?e.event.trigger(i,r,t):e.event.dispatch.call(t,i),i.type=o}var i=e(n),s=e.mobile.support.touch,o="touchmove scroll",u=s?"touchstart":"mousedown",a=s?"touchend":"mouseup",f=s?"touchmove":"mousemove";e.each("touchstart touchmove touchend tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(t,n){e.fn[n]=function(e){return e?this.bind(n,e):this.trigger(n)},e.attrFn&&(e.attrFn[n]=!0)}),e.event.special.scrollstart={enabled:!0,setup:function(){function s(e,n){r=n,l(t,r?"scrollstart":"scrollstop",e)}var t=this,n=e(t),r,i;n.bind(o,function(t){if(!e.event.special.scrollstart.enabled)return;r||s(t,!0),clearTimeout(i),i=setTimeout(function(){s(t,!1)},50)})},teardown:function(){e(this).unbind(o)}},e.event.special.tap={tapholdThreshold:750,emitTapOnTaphold:!0,setup:function(){var t=this,n=e(t),r=!1;n.bind("vmousedown",function(s){function a(){clearTimeout(u)}function f(){a(),n.unbind("vclick",c).unbind("vmouseup",a),i.unbind("vmousecancel",f)}function c(e){f(),!r&&o===e.target?l(t,"tap",e):r&&e.preventDefault()}r=!1;if(s.which&&s.which!==1)return!1;var o=s.target,u;n.bind("vmouseup",a).bind("vclick",c),i.bind("vmousecancel",f),u=setTimeout(function(){e.event.special.tap.emitTapOnTaphold||(r=!0),l(t,"taphold",e.Event("taphold",{target:o}))},e.event.special.tap.tapholdThreshold)})},teardown:function(){e(this).unbind("vmousedown").unbind("vclick").unbind("vmouseup"),i.unbind("vmousecancel")}},e.event.special.swipe={scrollSupressionThreshold:30,durationThreshold:1e3,horizontalDistanceThreshold:30,verticalDistanceThreshold:30,getLocation:function(e){var n=t.pageXOffset,r=t.pageYOffset,i=e.clientX,s=e.clientY;if(e.pageY===0&&Math.floor(s)>Math.floor(e.pageY)||e.pageX===0&&Math.floor(i)>Math.floor(e.pageX))i-=n,s-=r;else if(s<e.pageY-r||i<e.pageX-n)i=e.pageX-n,s=e.pageY-r;return{x:i,y:s}},start:function(t){var n=t.originalEvent.touches?t.originalEvent.touches[0]:t,r=e.event.special.swipe.getLocation(n);return{time:(new Date).getTime(),coords:[r.x,r.y],origin:e(t.target)}},stop:function(t){var n=t.originalEvent.touches?t.originalEvent.touches[0]:t,r=e.event.special.swipe.getLocation(n);return{time:(new Date).getTime(),coords:[r.x,r.y]}},handleSwipe:function(t,n,r,i){if(n.time-t.time<e.event.special.swipe.durationThreshold&&Math.abs(t.coords[0]-n.coords[0])>e.event.special.swipe.horizontalDistanceThreshold&&Math.abs(t.coords[1]-n.coords[1])<e.event.special.swipe.verticalDistanceThreshold){var s=t.coords[0]>n.coords[0]?"swipeleft":"swiperight";return l(r,"swipe",e.Event("swipe",{target:i,swipestart:t,swipestop:n}),!0),l(r,s,e.Event(s,{target:i,swipestart:t,swipestop:n}),!0),!0}return!1},eventInProgress:!1,setup:function(){var t,n=this,r=e(n),s={};t=e.data(this,"mobile-events"),t||(t={length:0},e.data(this,"mobile-events",t)),t.length++,t.swipe=s,s.start=function(t){if(e.event.special.swipe.eventInProgress)return;e.event.special.swipe.eventInProgress=!0;var r,o=e.event.special.swipe.start(t),u=t.target,l=!1;s.move=function(t){if(!o||t.isDefaultPrevented())return;r=e.event.special.swipe.stop(t),l||(l=e.event.special.swipe.handleSwipe(o,r,n,u),l&&(e.event.special.swipe.eventInProgress=!1)),Math.abs(o.coords[0]-r.coords[0])>e.event.special.swipe.scrollSupressionThreshold&&t.preventDefault()},s.stop=function(){l=!0,e.event.special.swipe.eventInProgress=!1,i.off(f,s.move),s.move=null},i.on(f,s.move).one(a,s.stop)},r.on(u,s.start)},teardown:function(){var t,n;t=e.data(this,"mobile-events"),t&&(n=t.swipe,delete t.swipe,t.length--,t.length===0&&e.removeData(this,"mobile-events")),n&&(n.start&&e(this).off(u,n.start),n.move&&i.off(f,n.move),n.stop&&i.off(a,n.stop))}},e.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe.left",swiperight:"swipe.right"},function(t,n){e.event.special[t]={setup:function(){e(this).bind(n,e.noop)},teardown:function(){e(this).unbind(n)}}})}(e,this)});
resources/mce-button.css ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ /*i.mce-i-serious_slider:before {
2
+ font-family: "dashicons";
3
+ content: "\f116";
4
+ }*/
5
+
6
+ i.mce-i-serious_slider {
7
+ background: #FFF url(images/serious-slider-editor-icon.png) no-repeat;
8
+ }
resources/mce-button.js ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ function cryout_serious_slider_getsliders() {
3
+ output = [ {text: CRYOUT_MCE_LOCALIZED.text_retrieving_sliders, value: '0'} ]
4
+
5
+ jQuery.ajax(
6
+ cryout_serious_slider_ajax.ajaxurl,
7
+ { 'method': 'POST', 'data' : { 'action': 'cryout_serious_slider_ajax' }, async: false, dataType: 'json',
8
+ 'success': function( data ) {
9
+ output = data;
10
+ } }
11
+ ).fail(function() {
12
+ output = [ {text: CRYOUT_MCE_LOCALIZED.text_retrieving_sliders_error, value: '0'} ]
13
+ });
14
+ return output;
15
+ }
16
+
17
+ (function() {
18
+ tinymce.PluginManager.add('serious_slider', function( editor, url ) {
19
+ var sh_tag = 'serious-slider';
20
+
21
+ //helper functions
22
+ function getAttr(s, n) {
23
+ n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);
24
+ return n ? window.decodeURIComponent(n[1]) : '';
25
+ };
26
+
27
+ function html( cls, data ,con) {
28
+ var placeholder = url + '/img/' + getAttr(data,'type') + '.jpg';
29
+ data = window.encodeURIComponent( data );
30
+ content = window.encodeURIComponent( con );
31
+
32
+ return '<img src="' + placeholder + '" class="mceItem ' + cls + '" ' + 'data-sh-attr="' + data + '" data-sh-content="'+ con+'" data-mce-resize="false" data-mce-placeholder="1" />';
33
+ }
34
+
35
+ function replaceShortcodes( content ) {
36
+ return content.replace( /\[serious_slider([^\]]*)\]([^\]]*)\[\/serious_slider\]/g, function( all,attr,con) {
37
+ return html( 'wp-serious_slider', attr , con);
38
+ });
39
+ }
40
+
41
+ function restoreShortcodes( content ) {
42
+ return content.replace( /(?:<p(?: [^>]+)?>)*(<img [^>]+>)(?:<\/p>)*/g, function( match, image ) {
43
+ var data = getAttr( image, 'data-sh-attr' );
44
+ var con = getAttr( image, 'data-sh-content' );
45
+
46
+ if ( data ) {
47
+ return '<p>[' + sh_tag + data + ']' + con + '[/'+sh_tag+']</p>';
48
+ }
49
+ return match;
50
+ });
51
+ }
52
+
53
+ //add popup
54
+ editor.addCommand('serious_slider_popup', function(ui, v) {
55
+
56
+ //setup defaults
57
+ var sid = '0'; if (v.sid) sid = v.sid;
58
+
59
+ editor.windowManager.open( {
60
+ title: CRYOUT_MCE_LOCALIZED.text_serious_slider,
61
+ width: 500,
62
+ height: 150,
63
+ // style: 'padding: 2em',
64
+ buttons: [{
65
+ text: CRYOUT_MCE_LOCALIZED.text_insert_slider,
66
+ classes: 'widget btn primary first',
67
+ style: 'width: 150px',
68
+ onclick: 'submit'
69
+ },
70
+ {
71
+ text: CRYOUT_MCE_LOCALIZED.text_cancel,
72
+ classes: 'widget btn',
73
+ onclick: 'close'
74
+ }],
75
+ body: [
76
+ {
77
+ type: 'listbox',
78
+ name: 'sid',
79
+ label: CRYOUT_MCE_LOCALIZED.text_select_slider,
80
+ value: sid,
81
+ 'values': cryout_serious_slider_getsliders(),
82
+ tooltip: ''
83
+ },
84
+
85
+ ],
86
+ onsubmit: function( e ) {
87
+ var shortcode_str = '[' + sh_tag;
88
+
89
+ if ( typeof e.data.sid != 'undefined')
90
+ shortcode_str += ' id="' + e.data.sid + '"';
91
+ shortcode_str += ']';
92
+
93
+ //insert shortcode to tinymce
94
+ editor.insertContent( shortcode_str);
95
+ }
96
+ });
97
+ });
98
+
99
+ //add button
100
+ editor.addButton('serious_slider', {
101
+ title: CRYOUT_MCE_LOCALIZED.text_add_slider,
102
+ icon: 'serious_slider',
103
+ tooltip: CRYOUT_MCE_LOCALIZED.text_serious_slider_tooltip,
104
+ onclick: function() {
105
+ editor.execCommand('serious_slider_popup','',{
106
+ });
107
+ }
108
+ });
109
+
110
+ /*//replace from shortcode to an image placeholder
111
+ editor.on('BeforeSetcontent', function(event){
112
+ event.content = replaceShortcodes( event.content );
113
+ });
114
+
115
+ //replace from image placeholder to shortcode
116
+ editor.on('GetContent', function(event){
117
+ event.content = restoreShortcodes(event.content);
118
+ });
119
+
120
+ //open popup on placeholder double click
121
+ editor.on('DblClick',function(e) {
122
+ var cls = e.target.className.indexOf('wp-serious_slider');
123
+ if ( e.target.nodeName == 'IMG' && e.target.className.indexOf('wp-serious_slider') > -1 ) {
124
+ var title = e.target.attributes['data-sh-attr'].value;
125
+ title = window.decodeURIComponent(title);
126
+ console.log(title);
127
+ var content = e.target.attributes['data-sh-content'].value;
128
+ editor.execCommand('serious_slider_popup','',{
129
+ header : getAttr(title,'header'),
130
+ footer : getAttr(title,'footer'),
131
+ type : getAttr(title,'type'),
132
+ content: content
133
+ });
134
+ }
135
+ }); */
136
+ });
137
+ })();
resources/slider.js ADDED
@@ -0,0 +1,332 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap v3.3.6 (http://getbootstrap.com)
3
+ * Copyright 2011-2015 Twitter, Inc.
4
+ * Licensed under the MIT license
5
+ */
6
+
7
+ if (typeof jQuery === 'undefined') {
8
+ throw new Error('Bootstrap\'s JavaScript requires jQuery')
9
+ }
10
+
11
+ +function ($) {
12
+ 'use strict';
13
+ var version = $.fn.jquery.split(' ')[0].split('.')
14
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) {
15
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')
16
+ }
17
+ }(jQuery);
18
+
19
+ /* ========================================================================
20
+ * Bootstrap: transition.js v3.3.6
21
+ * http://getbootstrap.com/javascript/#transitions
22
+ * ========================================================================
23
+ * Copyright 2011-2015 Twitter, Inc.
24
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25
+ * ======================================================================== */
26
+
27
+
28
+ +function ($) {
29
+ 'use strict';
30
+
31
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
32
+ // ============================================================
33
+
34
+ function transitionEnd() {
35
+ var el = document.createElement('bootstrap')
36
+
37
+ var transEndEventNames = {
38
+ WebkitTransition : 'webkitTransitionEnd',
39
+ MozTransition : 'transitionend',
40
+ OTransition : 'oTransitionEnd otransitionend',
41
+ transition : 'transitionend'
42
+ }
43
+
44
+ for (var name in transEndEventNames) {
45
+ if (el.style[name] !== undefined) {
46
+ return { end: transEndEventNames[name] }
47
+ }
48
+ }
49
+
50
+ return false // explicit for ie8 (._.)
51
+ }
52
+
53
+ // http://blog.alexmaccaw.com/css-transitions
54
+ $.fn.emulateTransitionEnd = function (duration) {
55
+ var called = false
56
+ var $el = this
57
+ $(this).one('bsTransitionEnd', function () { called = true })
58
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
59
+ setTimeout(callback, duration)
60
+ return this
61
+ }
62
+
63
+ $(function () {
64
+ $.support.transition = transitionEnd()
65
+
66
+ if (!$.support.transition) return
67
+
68
+ $.event.special.bsTransitionEnd = {
69
+ bindType: $.support.transition.end,
70
+ delegateType: $.support.transition.end,
71
+ handle: function (e) {
72
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
73
+ }
74
+ }
75
+ })
76
+
77
+ }(jQuery);
78
+
79
+
80
+
81
+ /* ========================================================================
82
+ * Bootstrap: carousel.js v3.3.6
83
+ * http://getbootstrap.com/javascript/#carousel
84
+ * ========================================================================
85
+ * Copyright 2011-2015 Twitter, Inc.
86
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
87
+ * ======================================================================== */
88
+
89
+
90
+ +function ($) {
91
+ 'use strict';
92
+
93
+ // CAROUSEL CLASS DEFINITION
94
+ // =========================
95
+
96
+ var Carousel = function (element, options) {
97
+ this.$element = $(element)
98
+ this.$indicators = this.$element.find('.seriousslider-indicators')
99
+ this.options = options
100
+ this.paused = null
101
+ this.sliding = null
102
+ this.interval = null
103
+ this.$active = null
104
+ this.$items = null
105
+
106
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
107
+
108
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
109
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
110
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
111
+ }
112
+
113
+ Carousel.VERSION = '3.3.6'
114
+
115
+ Carousel.DEFAULTS = {
116
+ interval: 5000,
117
+ stransition: 600,
118
+ pause: 'hover',
119
+ wrap: true,
120
+ keyboard: true
121
+ }
122
+
123
+
124
+ Carousel.prototype.keydown = function (e) {
125
+ if (/input|textarea/i.test(e.target.tagName)) return
126
+ switch (e.which) {
127
+ case 37: this.prev(); break
128
+ case 39: this.next(); break
129
+ default: return
130
+ }
131
+
132
+ e.preventDefault()
133
+ }
134
+
135
+ Carousel.prototype.cycle = function (e) {
136
+ e || (this.paused = false)
137
+
138
+ this.interval && clearInterval(this.interval)
139
+
140
+ this.options.interval
141
+ && !this.paused
142
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
143
+
144
+ return this
145
+ }
146
+
147
+ Carousel.prototype.getItemIndex = function (item) {
148
+ this.$items = item.parent().children('.item')
149
+ return this.$items.index(item || this.$active)
150
+ }
151
+
152
+ Carousel.prototype.getItemForDirection = function (direction, active) {
153
+ var activeIndex = this.getItemIndex(active)
154
+ var willWrap = (direction == 'prev' && activeIndex === 0)
155
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
156
+ if (willWrap && !this.options.wrap) return active
157
+ var delta = direction == 'prev' ? -1 : 1
158
+ var itemIndex = (activeIndex + delta) % this.$items.length
159
+ return this.$items.eq(itemIndex)
160
+ }
161
+
162
+ Carousel.prototype.to = function (pos) {
163
+ var that = this
164
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
165
+
166
+ if (pos > (this.$items.length - 1) || pos < 0) return
167
+
168
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
169
+ if (activeIndex == pos) return this.pause().cycle()
170
+
171
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
172
+ }
173
+
174
+ Carousel.prototype.pause = function (e) {
175
+ e || (this.paused = true)
176
+
177
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
178
+ this.$element.trigger($.support.transition.end)
179
+ this.cycle(true)
180
+ }
181
+
182
+ this.interval = clearInterval(this.interval)
183
+
184
+ return this
185
+ }
186
+
187
+ Carousel.prototype.next = function () {
188
+ if (this.sliding) return
189
+ return this.slide('next')
190
+ }
191
+
192
+ Carousel.prototype.prev = function () {
193
+ if (this.sliding) return
194
+ return this.slide('prev')
195
+ }
196
+
197
+ Carousel.prototype.slide = function (type, next) {
198
+ var $active = this.$element.find('.item.active')
199
+ var $next = next || this.getItemForDirection(type, $active)
200
+ var isCycling = this.interval
201
+ var direction = type == 'next' ? 'left' : 'right'
202
+ var that = this
203
+
204
+ if ($next.hasClass('active')) return (this.sliding = false)
205
+
206
+ var relatedTarget = $next[0]
207
+ var slideEvent = $.Event('slide.bs.carousel', {
208
+ relatedTarget: relatedTarget,
209
+ direction: direction
210
+ })
211
+ this.$element.trigger(slideEvent)
212
+ if (slideEvent.isDefaultPrevented()) return
213
+
214
+ this.sliding = true
215
+
216
+ isCycling && this.pause()
217
+
218
+ if (this.$indicators.length) {
219
+ this.$indicators.find('.active').removeClass('active')
220
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
221
+ $nextIndicator && $nextIndicator.addClass('active')
222
+ }
223
+
224
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
225
+ if ($.support.transition && this.$element.hasClass('seriousslider')) {
226
+ $next.addClass(type)
227
+ $next[0].offsetWidth // force reflow
228
+ $active.addClass(direction)
229
+ $next.addClass(direction)
230
+ $active
231
+ .one('bsTransitionEnd', function () {
232
+ $next.removeClass([type, direction].join(' ')).addClass('active')
233
+ $active.removeClass(['active', direction].join(' '))
234
+ that.sliding = false
235
+ setTimeout(function () {
236
+ that.$element.trigger(slidEvent)
237
+ }, 0)
238
+ })
239
+ .emulateTransitionEnd(this.options.stransition)
240
+ //.emulateTransitionEnd(Carousel.TRANSITION_DURATION)
241
+ } else {
242
+ $active.removeClass('active')
243
+ $next.addClass('active')
244
+ this.sliding = false
245
+ this.$element.trigger(slidEvent)
246
+ }
247
+
248
+ isCycling && this.cycle()
249
+
250
+ return this
251
+ }
252
+
253
+
254
+ // CAROUSEL PLUGIN DEFINITION
255
+ // ==========================
256
+
257
+ function Plugin(option) {
258
+ return this.each(function () {
259
+ var $this = $(this);
260
+ var data = $this.data('bs.carousel');
261
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option);
262
+ var action = typeof option == 'string' ? option : options.slide;
263
+ console.log(data);
264
+
265
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
266
+ console.log(data);
267
+ if (typeof option == 'number') data.to(option)
268
+ else if (action) data[action]()
269
+ else if (options.interval) data.pause().cycle()
270
+ })
271
+ }
272
+
273
+ var old = $.fn.carousel
274
+
275
+ $.fn.carousel = Plugin
276
+ $.fn.carousel.Constructor = Carousel
277
+
278
+
279
+ // CAROUSEL NO CONFLICT
280
+ // ====================
281
+
282
+ $.fn.carousel.noConflict = function () {
283
+ $.fn.carousel = old
284
+ return this
285
+ }
286
+
287
+
288
+ // CAROUSEL DATA-API
289
+ // =================
290
+
291
+ var clickHandler = function (e) {
292
+ var href
293
+ var $this = $(this)
294
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
295
+ if (!$target.hasClass('seriousslider')) return
296
+ var options = $.extend({}, $target.data(), $this.data())
297
+ var slideIndex = $this.attr('data-slide-to')
298
+ if (slideIndex) options.interval = false
299
+
300
+ Plugin.call($target, options)
301
+
302
+ if (slideIndex) {
303
+ $target.data('bs.carousel').to(slideIndex)
304
+ }
305
+
306
+ e.preventDefault()
307
+ }
308
+
309
+ $(document)
310
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
311
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
312
+
313
+ /*$(window).on('load', function () {
314
+ $('[data-ride="carousel"]').each(function () {
315
+ var $carousel = $(this)
316
+ Plugin.call($carousel, $carousel.data())
317
+ })
318
+ })*/
319
+
320
+ }(jQuery);
321
+
322
+ /* swipe support for mobile devices */
323
+ jQuery(document).ready(function() {
324
+ jQuery(".cryout-serious-slider").swiperight(function() {
325
+ jQuery(".cryout-serious-slider").carousel('prev');
326
+ });
327
+ jQuery(".cryout-serious-slider").swipeleft(function() {
328
+ jQuery(".cryout-serious-slider").carousel('next');
329
+ });
330
+ });
331
+
332
+ /* FIN */
resources/style.css ADDED
@@ -0,0 +1,752 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap v3.3.6 (http://getbootstrap.com)
3
+ * Copyright 2011-2015 Twitter, Inc.
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ */
6
+
7
+ @font-face {
8
+ font-family: 'serioussliderglyphs';
9
+ src: url('fonts/serioussliderglyphs.eot?ap45ke');
10
+ src: url('fonts/serioussliderglyphs.eot?ap45ke#iefix') format('embedded-opentype'),
11
+ url('fonts/serioussliderglyphs.ttf?ap45ke') format('truetype'),
12
+ url('fonts/serioussliderglyphs.woff?ap45ke') format('woff'),
13
+ url('fonts/serioussliderglyphs.svg?ap45ke#serioussliderglyphs') format('svg');
14
+ font-weight: normal;
15
+ font-style: normal;
16
+ }
17
+
18
+ [class^="sicon-"], [class*=" sicon-"] {
19
+ /* use !important to prevent issues with browser extensions that change fonts */
20
+ font-family: 'serioussliderglyphs' !important;
21
+ speak: none;
22
+ font-style: normal;
23
+ font-weight: normal;
24
+ font-variant: normal;
25
+ text-transform: none;
26
+ line-height: 1;
27
+
28
+ /* Better Font Rendering =========== */
29
+ -webkit-font-smoothing: antialiased;
30
+ -moz-osx-font-smoothing: grayscale;
31
+ }
32
+
33
+ .sicon-chevron-left:before {
34
+ content: "\f053";
35
+ }
36
+ .sicon-chevron-right:before {
37
+ content: "\f054";
38
+ }
39
+ .sicon-chevron-left2:before {
40
+ content: "\e900";
41
+ }
42
+ .sicon-chevron-right2:before {
43
+ content: "\e901";
44
+ }
45
+ .sicon-chevron-small-left:before {
46
+ content: "\e902";
47
+ }
48
+ .sicon-chevron-small-right:before {
49
+ content: "\e903";
50
+ }
51
+ .sicon-chevron-thin-left:before {
52
+ content: "\e904";
53
+ }
54
+ .sicon-chevron-thin-right:before {
55
+ content: "\e905";
56
+ }
57
+ .sicon-chevron-with-circle-left:before {
58
+ content: "\e906";
59
+ }
60
+ .sicon-chevron-with-circle-right:before {
61
+ content: "\e907";
62
+ }
63
+ .sicon-rewind:before {
64
+ content: "\e051";
65
+ }
66
+ .sicon-fast-forward:before {
67
+ content: "\e055";
68
+ }
69
+
70
+ .seriousslider-inner > .item > img,
71
+ .seriousslider-inner > .item > a > img {
72
+ display: block;
73
+ max-width: 100%;
74
+ height: auto;
75
+ }
76
+
77
+ .seriousslider {
78
+ position: relative;
79
+ margin: 0 auto;
80
+ width: 100%;
81
+ }
82
+ .seriousslider-inner {
83
+ position: relative;
84
+ width: 100%;
85
+ overflow: hidden;
86
+ }
87
+ .seriousslider-inner > .item {
88
+ position: relative;
89
+ display: none;
90
+ }
91
+ .seriousslider-inner > .item > img,
92
+ .seriousslider-inner > .item > a > img {
93
+ line-height: 1;
94
+ }
95
+ @media all and (transform-3d), (-webkit-transform-3d) {
96
+ .seriousslider-inner > .item {
97
+ -webkit-backface-visibility: hidden;
98
+ backface-visibility: hidden;
99
+ -webkit-perspective: 1000px;
100
+ perspective: 1000px;
101
+ }
102
+ .seriousslider-inner > .item.next,
103
+ .seriousslider-inner > .item.active.right {
104
+ left: 0;
105
+ -webkit-transform: translate3d(100%, 0, 0);
106
+ transform: translate3d(100%, 0, 0);
107
+ }
108
+ .seriousslider-inner > .item.prev,
109
+ .seriousslider-inner > .item.active.left {
110
+ left: 0;
111
+ -webkit-transform: translate3d(-100%, 0, 0);
112
+ transform: translate3d(-100%, 0, 0);
113
+ }
114
+ .seriousslider-inner > .item.next.left,
115
+ .seriousslider-inner > .item.prev.right,
116
+ .seriousslider-inner > .item.active {
117
+ left: 0;
118
+ -webkit-transform: translate3d(0, 0, 0);
119
+ transform: translate3d(0, 0, 0);
120
+ }
121
+ }
122
+
123
+
124
+ .seriousslider-inner > .active,
125
+ .seriousslider-inner > .next,
126
+ .seriousslider-inner > .prev {
127
+ display: block;
128
+ }
129
+ .seriousslider-inner > .active {
130
+ left: 0;
131
+ }
132
+ .seriousslider-inner > .next,
133
+ .seriousslider-inner > .prev {
134
+ position: absolute;
135
+ top: 0;
136
+ width: 100%;
137
+ }
138
+ .seriousslider-inner > .next {
139
+ left: 100%;
140
+ }
141
+ .seriousslider-inner > .prev {
142
+ left: -100%;
143
+ }
144
+ .seriousslider-inner > .next.left,
145
+ .seriousslider-inner > .prev.right {
146
+ left: 0;
147
+ }
148
+ .seriousslider-inner > .active.left {
149
+ left: -100%;
150
+ }
151
+ .seriousslider-inner > .active.right {
152
+ left: 100%;
153
+ }
154
+
155
+ .seriousslider-overlay0 .seriousslider-control,
156
+ .seriousslider-overlay0 .seriousslider-indicators {
157
+ display: none;
158
+ }
159
+
160
+ .seriousslider-overlay1 .seriousslider-control,
161
+ .seriousslider-overlay1 .seriousslider-indicators {
162
+ opacity: 0;
163
+ filter: alpha(opacity=0);
164
+ transition: .6s ease-in-out opacity;
165
+ }
166
+
167
+ .seriousslider-overlay1:hover .seriousslider-control,
168
+ .seriousslider-overlay1:hover .seriousslider-indicators {
169
+ opacity: 1;
170
+ filter: alpha(opacity=100);
171
+ }
172
+
173
+ .seriousslider-overlay2 .seriousslider-control {
174
+ opacity: 0.5;
175
+ filter: alpha(opacity=50);
176
+ }
177
+
178
+ /*********************
179
+ =Transition Effects
180
+ **********************/
181
+
182
+ /* Fade transition */
183
+ .seriousslider-fade .seriousslider-inner > .item {
184
+ opacity: 0;
185
+ -webkit-transition: .6s ease-in-out opacity;
186
+ -o-transition: .6s ease-in-out opacity;
187
+ transition: .6s ease-in-out opacity;
188
+ left: 0;
189
+ }
190
+
191
+ .seriousslider-fade .seriousslider-inner .active {
192
+ opacity: 1;
193
+ }
194
+
195
+ .seriousslider-fade .seriousslider-inner .active.left,
196
+ .seriousslider-fade .seriousslider-inner .active.right {
197
+ left: 0;
198
+ opacity: 0;
199
+ z-index: 1;
200
+ }
201
+
202
+ .seriousslider-fade .seriousslider-inner .next.left,
203
+ .seriousslider-fade .seriousslider-inner .prev.right {
204
+ opacity: 1;
205
+ left: 0;
206
+ }
207
+
208
+ .seriousslider-fade .seriousslider-control {
209
+ z-index: 2;
210
+ }
211
+
212
+ @media all and (transform-3d), (-webkit-transform-3d) {
213
+ .seriousslider-fade .seriousslider-inner > .item.next,
214
+ .seriousslider-fade .seriousslider-inner > .item.active.right {
215
+ opacity: 0;
216
+ -webkit-transform: translate3d(0, 0, 0);
217
+ transform: translate3d(0, 0, 0);
218
+ }
219
+ .seriousslider-fade .seriousslider-inner > .item.prev,
220
+ .seriousslider-fade .seriousslider-inner > .item.active.left {
221
+ opacity: 0;
222
+ -webkit-transform: translate3d(0, 0, 0);
223
+ transform: translate3d(0, 0, 0);
224
+ }
225
+ .seriousslider-fade .seriousslider-inner > .item.next.left,
226
+ .seriousslider-fade .seriousslider-inner > .item.prev.right,
227
+ .seriousslider-fade .seriousslider-inner > .item.active {
228
+ opacity: 1;
229
+ -webkit-transform: translate3d(0, 0, 0);
230
+ transform: translate3d(0, 0, 0);
231
+ }
232
+ }
233
+
234
+ /*
235
+ * Overslide animation
236
+ **/
237
+
238
+ .seriousslider-overslide .seriousslider-inner > .item {
239
+ -webkit-transition: .6s ease-in-out left;
240
+ -o-transition: .6s ease-in-out left;
241
+ transition: .6s ease-in-out left;
242
+ }
243
+
244
+ .seriousslider-overslide .seriousslider-inner > .active.left,
245
+ .seriousslider-overslide .seriousslider-inner > .active.right {
246
+ left: 0;
247
+ z-index: 0;
248
+ }
249
+
250
+ .seriousslider-overslide .seriousslider-inner > .next,
251
+ .seriousslider-overslide .seriousslider-inner > .prev {
252
+ z-index: 1;
253
+
254
+ }
255
+
256
+ @media all and (transform-3d), (-webkit-transform-3d) {
257
+ .seriousslider-overslide .seriousslider-inner > .active.left,
258
+ .seriousslider-overslide .seriousslider-inner > .active.right {
259
+ -webkit-transform: translate3d(0, 0, 0);
260
+ transform: translate3d(0, 0, 0);
261
+ }
262
+ }
263
+
264
+ /*
265
+ * Underslide animation
266
+ **/
267
+
268
+ .seriousslider-underslide .seriousslider-inner > .item {
269
+ -webkit-transition: .6s ease-in-out left;
270
+ -o-transition: .6s ease-in-out left;
271
+ transition: .6s ease-in-out left;
272
+ }
273
+
274
+ .seriousslider-underslide .seriousslider-inner > .active.left,
275
+ .seriousslider-underslide .seriousslider-inner > .active.right {
276
+ z-index: 1;
277
+ }
278
+
279
+ .seriousslider-underslide .seriousslider-inner > .next,
280
+ .seriousslider-underslide .seriousslider-inner > .prev {
281
+ z-index: 0;
282
+ left: 0;
283
+ }
284
+
285
+ @media all and (transform-3d), (-webkit-transform-3d) {
286
+ .seriousslider-underslide .seriousslider-inner > .active.left,
287
+ .seriousslider-underslide .seriousslider-inner > .active.right {
288
+ -webkit-transform: translate3d(0, 0, 0);
289
+ transform: translate3d(0, 0, 0);
290
+ }
291
+ }
292
+
293
+ /* Parallax animation */
294
+
295
+ .seriousslider-parallax .seriousslider-inner > .item {
296
+ -webkit-transition: .6s ease-in-out left;
297
+ -o-transition: .6s ease-in-out left;
298
+ transition: .6s ease-in-out left;
299
+ }
300
+
301
+ .seriousslider-parallax .seriousslider-inner > .active.left {
302
+ left: -30%;
303
+ z-index: 0;
304
+ }
305
+
306
+ .seriousslider-parallax .seriousslider-inner > .active.right {
307
+ left: 30%;
308
+ z-index: 0;
309
+ }
310
+
311
+ .seriousslider-parallax .seriousslider-inner > .next,
312
+ .seriousslider-parallax .seriousslider-inner > .prev {
313
+ z-index: 1;
314
+ }
315
+
316
+ @media all and (transform-3d), (-webkit-transform-3d) {
317
+ .seriousslider-parallax .seriousslider-inner > .active.left {
318
+ left: 0;
319
+ -webkit-transform: translate3d(-30%, 0, 0);
320
+ transform: translate3d(-30%, 0, 0);
321
+ }
322
+ .seriousslider-parallax .seriousslider-inner > .active.right {
323
+ left: 0;
324
+ -webkit-transform: translate3d(30%, 0, 0);
325
+ transform: translate3d(30%, 0, 0);
326
+ }
327
+ }
328
+
329
+ /* Horizontal Flip */
330
+ .seriousslider-hflip .seriousslider-inner {
331
+ -webkit-transform-style: preserve-3d;
332
+ transform-style: preserve-3d;
333
+ }
334
+
335
+ .seriousslider-hflip .seriousslider-inner > .active {
336
+ transform: perspective( 2000px ) rotateY( 0deg );
337
+ backface-visibility: hidden;
338
+ }
339
+ .seriousslider-hflip .seriousslider-inner > .prev {
340
+ transform: perspective( 2000px ) rotateY( -180deg );
341
+ backface-visibility: hidden;
342
+ left: 0;
343
+ }
344
+ .seriousslider-hflip .seriousslider-inner > .next {
345
+ transform: perspective( 2000px ) rotateY( 180deg );
346
+ backface-visibility: hidden;
347
+ left: 0;
348
+ }
349
+
350
+ .seriousslider-hflip .seriousslider-inner > .active.left {
351
+ transform: perspective( 2000px ) rotateY( -180deg );
352
+ left: 0;
353
+ }
354
+ .seriousslider-hflip .seriousslider-inner > .active.right {
355
+ transform: perspective( 2000px ) rotateY( 180deg );
356
+ left: 0;
357
+ }
358
+ .seriousslider-hflip .seriousslider-inner > .next.left,
359
+ .seriousslider-hflip .seriousslider-inner > .prev.right {
360
+ transform: perspective( 2000px ) rotateY( 0deg );
361
+ }
362
+
363
+ /* Vertical Flip */
364
+ .seriousslider-vflip .seriousslider-inner {
365
+ -webkit-transform-style: preserve-3d;
366
+ transform-style: preserve-3d;
367
+ }
368
+
369
+ .seriousslider-vflip .seriousslider-inner > .active {
370
+ transform: perspective( 2000px ) rotateX( 0deg );
371
+ backface-visibility: hidden;
372
+ }
373
+ .seriousslider-vflip .seriousslider-inner > .prev {
374
+ transform: perspective( 2000px ) rotateX( -180deg );
375
+ backface-visibility: hidden;
376
+ left: 0;
377
+ }
378
+ .seriousslider-vflip .seriousslider-inner > .next {
379
+ transform: perspective( 2000px ) rotateX( 180deg );
380
+ backface-visibility: hidden;
381
+ left: 0;
382
+ }
383
+ .seriousslider-vflip .seriousslider-inner > .active.left {
384
+ transform: perspective( 2000px ) rotateX( -180deg );
385
+ left: 0;
386
+ }
387
+ .seriousslider-vflip .seriousslider-inner > .active.right {
388
+ transform: perspective( 2000px ) rotateX( 180deg );
389
+ left: 0;
390
+ }
391
+ .seriousslider-vflip .seriousslider-inner > .next.left,
392
+ .seriousslider-vflip .seriousslider-inner > .prev.right {
393
+ transform: perspective( 2000px ) rotateX( 0deg );
394
+ }
395
+
396
+ /***************
397
+ =Appearance
398
+ ***************/
399
+
400
+ /* General */
401
+ .seriousslider-control {
402
+ position: absolute;
403
+ top: 0;
404
+ bottom: 0;
405
+ left: 0;
406
+ text-align: center;
407
+ z-index: 15;
408
+ width: 10%;
409
+ font-size: 30px;
410
+ }
411
+ .seriousslider-control.left {}
412
+ .seriousslider-control.right {
413
+ right: 0;
414
+ left: auto;
415
+ }
416
+ .seriousslider-control:hover,
417
+ .seriousslider-control:focus {
418
+ }
419
+ .seriousslider-control .sicon-prev,
420
+ .seriousslider-control .sicon-next {
421
+ position: absolute;
422
+ top: 50%;
423
+ z-index: 5;
424
+ display: inline-block;
425
+ margin-top: -10px;
426
+ }
427
+ .seriousslider-control .sicon-prev {
428
+ left: 50%;
429
+ margin-left: -10px;
430
+ }
431
+ .seriousslider-control .sicon-next {
432
+ right: 50%;
433
+ margin-right: -10px;
434
+ }
435
+ .seriousslider-control .sicon-prev,
436
+ .seriousslider-control .sicon-next {}
437
+
438
+ .seriousslider-control .sicon-prev:before {
439
+ content: '\f053';
440
+ }
441
+ .seriousslider-control .sicon-next:before {
442
+ content: '\f054';
443
+ }
444
+
445
+ .cryout-serious-slider .seriousslider-indicators {
446
+ position: absolute;
447
+ bottom: 10px;
448
+ left: 0;
449
+ right: 0;
450
+ z-index: 15;
451
+ padding-left: 0;
452
+ text-align: center;
453
+ list-style: none;
454
+ margin-top: 0;
455
+ margin-bottom: 0;
456
+ }
457
+
458
+ ol.seriousslider-indicators li {
459
+ display: inline-block;
460
+ width: 10px;
461
+ height: 10px;
462
+ margin: 1px;
463
+ text-indent: -999px;
464
+ cursor: pointer;
465
+ }
466
+ ol.seriousslider-indicators .active {}
467
+
468
+ .seriousslider-caption {
469
+ position: absolute;
470
+ right: 15%;
471
+ bottom: 20px;
472
+ left: 15%;
473
+ z-index: 10;
474
+ padding-top: 20px;
475
+ padding-bottom: 20px;
476
+ text-align: center;
477
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
478
+ }
479
+ .seriousslider-caption .btn {
480
+ text-shadow: none;
481
+ }
482
+ @media screen and (min-width: 768px) {
483
+ .seriousslider-control .sicon-prev,
484
+ .seriousslider-control .sicon-next {
485
+ margin-top: -10px;
486
+ }
487
+ .seriousslider-control .sicon-prev {
488
+ margin-left: -10px;
489
+ }
490
+ .seriousslider-control .sicon-next {
491
+ margin-right: -10px;
492
+ }
493
+ .seriousslider-caption {
494
+ right: 20%;
495
+ left: 20%;
496
+ top: 20%;
497
+ padding-bottom: 30px;
498
+ }
499
+ .seriousslider-indicators {
500
+ bottom: 20px;
501
+ }
502
+ }
503
+
504
+ .sr-only {
505
+ position: absolute;
506
+ width: 1px;
507
+ height: 1px;
508
+ padding: 0;
509
+ margin: -1px;
510
+ overflow: hidden;
511
+ clip: rect(0, 0, 0, 0);
512
+ border: 0;
513
+ }
514
+ .sr-only-focusable:active,
515
+ .sr-only-focusable:focus {
516
+ position: static;
517
+ width: auto;
518
+ height: auto;
519
+ margin: 0;
520
+ overflow: visible;
521
+ clip: auto;
522
+ }
523
+
524
+ /* Default Theme */
525
+ .seriousslider-boots .seriousslider-control {
526
+ width: 15%;
527
+ font-size: 34px;
528
+ color: #fff;
529
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
530
+ background-color: rgba(0, 0, 0, 0);
531
+ transition: .3s ease-out;
532
+ }
533
+
534
+ .seriousslider-boots .seriousslider-control.left {
535
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
536
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
537
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
538
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
539
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
540
+ background-repeat: repeat-x;
541
+ }
542
+ .seriousslider-boots .seriousslider-control.right {
543
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
544
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
545
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
546
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
547
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
548
+ background-repeat: repeat-x;
549
+ }
550
+
551
+ .seriousslider-boots .seriousslider-control:hover,
552
+ .seriousslider-boots .seriousslider-control:focus {
553
+ color: #fff;
554
+ text-decoration: none;
555
+ filter: alpha(opacity=90);
556
+ outline: 0;
557
+ opacity: .9;
558
+ }
559
+
560
+ .seriousslider-boots .seriousslider-control .sicon-prev,
561
+ .seriousslider-boots .seriousslider-control .sicon-next {
562
+ font-family: serif;
563
+ line-height: 1;
564
+ }
565
+ .seriousslider-boots .seriousslider-control .sicon-prev:before {
566
+ content: '\f053';
567
+ }
568
+ .seriousslider-boots .seriousslider-control .sicon-next:before {
569
+ content: '\f054';
570
+ }
571
+
572
+ .seriousslider-boots .seriousslider-indicators li {
573
+ background-color: #000 \9;
574
+ background-color: rgba(0, 0, 0, 0);
575
+ border: 1px solid #fff;
576
+ border-radius: 10px;
577
+ transition: .3s ease-out;
578
+ }
579
+ .seriousslider-boots .seriousslider-indicators .active {
580
+ background-color: rgba(255, 255, 255, .8);
581
+ }
582
+
583
+ .seriousslider-boots .seriousslider-caption-title a {
584
+ color: #FFF;
585
+ }
586
+
587
+ .seriousslider-boots .seriousslider-caption-text {
588
+ color: #EEE;
589
+ }
590
+
591
+ .seriousslider-boots .seriousslider-caption-text a {
592
+ border: 2px solid #FFF;
593
+ border-radius: 100px;
594
+ color: #444;
595
+ background: #FFF;
596
+ display: inline-block;
597
+ font-weight: 400;
598
+ letter-spacing: 1px;
599
+ margin-top: 1em;
600
+ padding: 8px 30px;
601
+ text-shadow: 0 0;
602
+ transition: .3s ease-out;
603
+ font-size: .8em;
604
+ }
605
+
606
+ .seriousslider-boots .seriousslider-caption-text a:hover {
607
+ color: #FFF;
608
+ background: rgba(0, 0, 0, .15);
609
+ }
610
+
611
+ /* Light Theme */
612
+ .seriousslider-light .seriousslider-caption-title a{
613
+ text-transform: uppercase;
614
+ color: #FFF;
615
+ font-weight: bold;
616
+ }
617
+
618
+ .seriousslider-light .seriousslider-caption-text {
619
+ color: #EEE;
620
+ font-weight: normal;
621
+ }
622
+ .seriousslider-light .seriousslider-caption-text a {
623
+ border: 2px solid #FFF;
624
+ color: #FFF;
625
+ padding: 10px 30px;
626
+ text-transform: uppercase;
627
+ font-weight: bold;
628
+ display: inline-block;
629
+ margin-top: 1em;
630
+ transition: .3s ease-out;
631
+ letter-spacing: 1px;
632
+ }
633
+ .seriousslider-light .seriousslider-caption-text a:hover {
634
+ background: rgba(255, 255, 255, .15);
635
+ }
636
+ .seriousslider-light .seriousslider-control {
637
+ width: 7%;
638
+ font-size: 44px;
639
+ color: #fff;
640
+ transition: .3s ease-out;
641
+ }
642
+
643
+ .seriousslider-light .seriousslider-control:hover {
644
+ opacity: 1;
645
+ }
646
+
647
+ .seriousslider-light .seriousslider-control:active {
648
+ opacity: .5;
649
+ }
650
+
651
+ .seriousslider-light .seriousslider-control .sicon-prev:before {
652
+ content: '\e904';
653
+ }
654
+ .seriousslider-light .seriousslider-control .sicon-next:before {
655
+ content: '\e905';
656
+ }
657
+
658
+ .seriousslider-light .seriousslider-indicators li {
659
+ width: 14px;
660
+ height: 5px;
661
+ border: 1px solid #FFF;
662
+ transition: .3s ease-out;
663
+ }
664
+
665
+ .seriousslider-light .seriousslider-indicators li:hover {
666
+ background: rgba(255, 255, 255, .5);
667
+ }
668
+
669
+ .seriousslider-light .seriousslider-indicators li.active {
670
+ background: rgba(255, 255, 255, .8);
671
+ }
672
+
673
+
674
+ /* Dark Theme */
675
+ .seriousslider-dark .seriousslider-caption-title a{
676
+ text-transform: uppercase;
677
+ color: #000;
678
+ font-weight: bold;
679
+ text-shadow: none;
680
+ }
681
+
682
+ .seriousslider-dark .seriousslider-caption-text {
683
+ color: #111;
684
+ font-weight: normal;
685
+ text-shadow: none;
686
+ }
687
+ .seriousslider-dark .seriousslider-caption-text a {
688
+ color: #FFF;
689
+ background: rgba(0, 0, 0, .5);
690
+ padding: 10px 30px;
691
+ text-transform: uppercase;
692
+ font-weight: bold;
693
+ display: inline-block;
694
+ margin-top: 1em;
695
+ transition: .3s ease-out;
696
+ font-size: 14px;
697
+ letter-spacing: 1px;
698
+ text-shadow: 0 0;
699
+ border-radius: 100px;
700
+ }
701
+ .seriousslider-dark .seriousslider-caption-text a:hover {
702
+ background: rgba(0, 0, 0, .75);
703
+ }
704
+ .seriousslider-dark .seriousslider-control {
705
+ width: 7%;
706
+ font-size: 34px;
707
+ color: #fff;
708
+ transition: .3s ease-out;
709
+ }
710
+
711
+ .seriousslider-dark .seriousslider-control:hover {
712
+ opacity: 1;
713
+ }
714
+
715
+ .seriousslider-dark .seriousslider-control:active {
716
+ opacity: .5;
717
+ }
718
+
719
+ .seriousslider-dark .seriousslider-control .sicon-prev:before {
720
+ content: '\e900';
721
+ }
722
+ .seriousslider-dark .seriousslider-control .sicon-next:before {
723
+ content: '\e901';
724
+ }
725
+ .seriousslider-dark .seriousslider-control .sicon-prev,
726
+ .seriousslider-dark .seriousslider-control .sicon-next {
727
+ background: rgba(0, 0, 0, .5);
728
+ padding: 7px;
729
+ border-radius: 100px;
730
+ }
731
+
732
+ .seriousslider-dark .seriousslider-indicators {
733
+ }
734
+
735
+ .seriousslider-dark .seriousslider-indicators li {
736
+ width: 8px;
737
+ height: 8px;
738
+ border: 1px solid #FFF;
739
+ transition: .3s ease-out;
740
+ border-radius: 8px;
741
+ background: rgba(0, 0, 0, .5);
742
+ }
743
+
744
+ .seriousslider-dark .seriousslider-indicators li:hover {
745
+ background: rgba(255, 255, 255, .5);
746
+ }
747
+
748
+ .seriousslider-dark .seriousslider-indicators li.active {
749
+ background: rgba(255, 255, 255, .8);
750
+ }
751
+
752
+ /* FIN */