diff --git a/contrib/views_slideshow_cycle/js/views_slideshow_cycle.js b/contrib/views_slideshow_cycle/js/views_slideshow_cycle.js index 3e72ed5..c865b6d 100644 --- a/contrib/views_slideshow_cycle/js/views_slideshow_cycle.js +++ b/contrib/views_slideshow_cycle/js/views_slideshow_cycle.js @@ -19,7 +19,6 @@ settings.opts = { speed:settings.speed, - timeout:settings.timeout, delay:settings.delay, sync:settings.sync, random:settings.random, @@ -60,6 +59,14 @@ cleartypeNoBg:(settings.cleartypenobg)? true : false } + // Check if the timeout mode is set to dynamic + if (settings.timeout_mode == 'dynamic') { + settings.opts.timeoutFn = Drupal.viewsSlideshowCycle.timeoutDynamic; + } + else { + settings.opts.timeout = settings.timeout; + } + // Set the starting slide if we are supposed to remember the slide if (settings.remember_slide) { var startSlide = readCookie(settings.vss_id); @@ -434,6 +441,16 @@ $('#views_slideshow_cycle_teaser_section_' + options.slideshowID).cycle(options.slideNum); }; + // Callback for timeoutFn + Drupal.viewsSlideshowCycle.timeoutDynamic = function(currSlideElement, nextSlideElement, opts, isForward) { + var index = opts.currSlide; + // Get the id of the slideshow to load the settings + var fullId = '#' + $(currSlideElement).parents('.views_slideshow_cycle_main').attr('id'); + var settings = Drupal.settings.viewsSlideshowCycle[fullId]; + // Return the timeout + return settings.timeout_dynamic_items[index]; + } + // Verify that the value is a number. function IsNumeric(sText) { var ValidChars = "0123456789"; diff --git a/contrib/views_slideshow_cycle/theme/views_slideshow_cycle.theme.inc b/contrib/views_slideshow_cycle/theme/views_slideshow_cycle.theme.inc index 59ae2fa..7ac2c2e 100644 --- a/contrib/views_slideshow_cycle/theme/views_slideshow_cycle.theme.inc +++ b/contrib/views_slideshow_cycle/theme/views_slideshow_cycle.theme.inc @@ -95,8 +95,6 @@ function _views_slideshow_cycle_preprocess_views_slideshow_cycle_main_frame(&$va // Load our cycle css drupal_add_css($module_path . '/views_slideshow_cycle.css', 'file'); - drupal_add_js(array('viewsSlideshowCycle' => array('#views_slideshow_cycle_main_' . $vss_id => $settings)), 'setting'); - // Add hover intent library if ($settings['pause']) { if (module_exists('libraries')) { @@ -141,11 +139,18 @@ function _views_slideshow_cycle_preprocess_views_slideshow_cycle_main_frame(&$va $items[] = $item; if (count($items) == $items_per_slide || $count == (count($rows)-1)) { $rendered_rows .= theme(views_theme_functions('views_slideshow_cycle_main_frame_row', $vars['view'], $vars['view']->display[$vars['view']->current_display]), array('vss_id' => $vss_id, 'items' => $items, 'count' => $slideshow_count, 'view' => $vars['view'])); + if ($settings['timeout_mode'] == 'dynamic') { + // Remove non number digits and cast to int + $timeout_time = (int) preg_replace('/[^0-9]/', '', $view->render_field($settings['timeout_dynamic_field'], $count)); + $settings['timeout_dynamic_items'][$slideshow_count] = $timeout_time; + } $items = array(); $slideshow_count++; } } + drupal_add_js(array('viewsSlideshowCycle' => array('#views_slideshow_cycle_main_' . $vss_id => $settings)), 'setting'); + $vars['rendered_rows'] = $rendered_rows; } diff --git a/contrib/views_slideshow_cycle/views_slideshow_cycle.views_slideshow.inc b/contrib/views_slideshow_cycle/views_slideshow_cycle.views_slideshow.inc index 15f5217..7b33179 100644 --- a/contrib/views_slideshow_cycle/views_slideshow_cycle.views_slideshow.inc +++ b/contrib/views_slideshow_cycle/views_slideshow_cycle.views_slideshow.inc @@ -42,7 +42,9 @@ function views_slideshow_cycle_views_slideshow_option_definition() { // Transition 'effect' => array('default' => 'fade'), 'transition_advanced' => array('default' => 0), + 'timeout_mode' => array('default' => 'static'), 'timeout' => array('default' => 5000), + 'timeout_dynamic_field' => array('default' => ''), 'speed' => array('default' => 700), //normal 'delay' => array('default' => 0), 'sync' => array('default' => 1), @@ -141,6 +143,27 @@ function views_slideshow_cycle_views_slideshow_slideshow_type_form(&$form, &$for '#markup' => '