Chris@5: style_plugin->options; Chris@5: $vars['skin'] = 'default'; Chris@5: $vars['slideshow'] = ''; Chris@5: $main_frame_module = $options['slideshow_type']; Chris@5: Chris@5: if (empty($main_frame_module)) { Chris@5: // Get all slideshow types. Chris@5: $typeManager = \Drupal::service('plugin.manager.views_slideshow.slideshow_type'); Chris@5: $types = $typeManager->getDefinitions(); Chris@5: Chris@5: if ($types) { Chris@5: foreach ($types as $id => $definition) { Chris@5: $main_frame_module = $id; Chris@5: break; Chris@5: } Chris@5: } Chris@5: } Chris@5: Chris@5: // Make sure the main slideshow settings are defined before building the Chris@5: // slideshow. Chris@5: if (empty($main_frame_module)) { Chris@5: drupal_set_message( Chris@5: t('No main frame module is enabled for views slideshow. This is often because another module which Views Slideshow needs is not enabled. For example, 4.x needs a module like "Views Slideshow: Cycle" enabled.'), Chris@5: 'error' Chris@5: ); Chris@5: } Chris@5: elseif (empty($options[$main_frame_module])) { Chris@5: drupal_set_message(t('The options for @module does not exists.', ['@module' => $main_frame_module]), 'error'); Chris@5: } Chris@5: elseif (!empty($vars['rows'])) { Chris@5: $settings = $options[$main_frame_module]; Chris@5: $view = $vars['view']; Chris@5: $rows = $vars['rows']; Chris@5: Chris@5: // The #name element is not available on Views edit pages. Chris@5: $view_element_name = (isset($view->element['#name'])) ? $view->element['#name'] : ''; Chris@5: $vss_id = $view_element_name . '-' . $view->current_display; Chris@5: Chris@5: // Give each slideshow a unique id if there are more than one on the page. Chris@5: static $instances = []; Chris@5: if (isset($instances[$vss_id])) { Chris@5: $instances[$vss_id]++; Chris@5: $vss_id .= "_" . $instances[$vss_id]; Chris@5: } Chris@5: else { Chris@5: $instances[$vss_id] = 1; Chris@5: } Chris@5: Chris@5: // Building our default methods. Chris@5: $methods = [ Chris@5: 'goToSlide' => [], Chris@5: 'nextSlide' => [], Chris@5: 'pause' => [], Chris@5: 'play' => [], Chris@5: 'previousSlide' => [], Chris@5: 'transitionBegin' => [], Chris@5: 'transitionEnd' => [], Chris@5: ]; Chris@5: Chris@5: // Pull all widget info and slideshow info and merge them together. Chris@5: $widgetTypeManager = \Drupal::service('plugin.manager.views_slideshow.widget_type'); Chris@5: $widgetTypes = $widgetTypeManager->getDefinitions(); Chris@5: Chris@5: $slideshowTypeManager = \Drupal::service('plugin.manager.views_slideshow.slideshow_type'); Chris@5: $slideshowTypes = $slideshowTypeManager->getDefinitions(); Chris@5: Chris@5: $addons = array_merge($widgetTypes, $slideshowTypes); Chris@5: Chris@5: // Loop through all the addons and call their methods if needed. Chris@5: foreach ($addons as $addon_id => $addon_info) { Chris@5: foreach ($addon_info['accepts'] as $imp_key => $imp_value) { Chris@5: if (is_array($imp_value)) { Chris@5: $methods[$imp_key][] = \Drupal::service('views_slideshow.format_addons_name')->format($addon_id); Chris@5: } Chris@5: else { Chris@5: $methods[$imp_value][] = \Drupal::service('views_slideshow.format_addons_name')->format($addon_id); Chris@5: } Chris@5: } Chris@5: } Chris@5: Chris@5: $vars['#attached']['library'][] = 'views_slideshow/widget_info'; Chris@5: $vars['#attached']['drupalSettings']['viewsSlideshow'][$vss_id] = [ Chris@5: 'methods' => $methods, Chris@5: 'paused' => 0, Chris@5: ]; Chris@5: Chris@5: // Process Skins. Chris@5: $skinManager = \Drupal::service('plugin.manager.views_slideshow.slideshow_skin'); Chris@5: $skin = $skinManager->createInstance($options['slideshow_skin']); Chris@5: Chris@5: $vars['skin'] = $skin->getClass(); Chris@5: Chris@5: foreach ($skin->getLibraries() as $library) { Chris@5: $vars['#attached']['library'][] = $library; Chris@5: } Chris@5: Chris@5: // Process Widgets. Chris@5: // Build weights. Chris@5: $weight = []; Chris@5: for ($i = 1; $i <= count($widgetTypes); $i++) { Chris@5: $weight['top'][$i] = []; Chris@5: $weight['bottom'][$i] = []; Chris@5: } Chris@5: Chris@5: $slide_count = count($view->result); Chris@5: if ($slide_count && $vars['view']->style_plugin->options['slideshow_type'] == 'views_slideshow_cycle') { Chris@5: $items_per_slide = $vars['view']->style_plugin->options['views_slideshow_cycle']['items_per_slide']; Chris@5: $slide_count = $slide_count / $items_per_slide; Chris@5: } Chris@5: foreach ($widgetTypes as $widgetTypeId => $widgetTypeName) { Chris@5: foreach ($weight as $location => $order) { Chris@5: if ($options['widgets'][$location][$widgetTypeId]['enable']) { Chris@5: // If hide on single slide and only a single slide skip rendering. Chris@5: if ($options['widgets'][$location][$widgetTypeId]['hide_on_single_slide'] && $slide_count <= 1) { Chris@5: continue; Chris@5: } Chris@5: $widgetWeight = ($options['widgets'][$location][$widgetTypeId]['weight'] > count($widgetTypes)) ? count($widgetTypes) : $options['widgets'][$location][$widgetTypeId]['weight']; Chris@5: Chris@5: $weight[$location][$widgetWeight][] = [ Chris@5: 'widgetId' => $widgetTypeId, Chris@5: 'widgetSettings' => $options['widgets'][$location][$widgetTypeId], Chris@5: ]; Chris@5: } Chris@5: } Chris@5: } Chris@5: Chris@5: // Build our widgets. Chris@5: foreach ($weight as $location => $order) { Chris@5: $vars[$location . '_widget_rendered'] = []; Chris@5: foreach ($order as $widgets) { Chris@5: if (is_array($widgets)) { Chris@5: foreach ($widgets as $widgetData) { Chris@5: $vars[$location . '_widget_rendered'][] = [ Chris@5: '#theme' => $view->buildThemeFunctions($widgetData['widgetId'] . '_widget_render'), Chris@5: '#vss_id' => $vss_id, Chris@5: '#view' => $view, Chris@5: '#settings' => $widgetData['widgetSettings'], Chris@5: '#location' => $location, Chris@5: '#rows' => $rows, Chris@5: ]; Chris@5: } Chris@5: } Chris@5: } Chris@5: } Chris@5: Chris@5: // Process Slideshow. Chris@5: $slides = [ Chris@5: '#theme' => $view->buildThemeFunctions($main_frame_module . '_main_frame'), Chris@5: '#vss_id' => $vss_id, Chris@5: '#view' => $view, Chris@5: '#settings' => $settings, Chris@5: '#rows' => $rows, Chris@5: ]; Chris@5: Chris@5: $vars['slideshow'] = [ Chris@5: '#theme' => $view->buildThemeFunctions('views_slideshow_main_section'), Chris@5: '#vss_id' => $vss_id, Chris@5: '#slides' => $slides, Chris@5: '#plugin' => $main_frame_module, Chris@5: ]; Chris@5: } Chris@5: } Chris@5: Chris@5: /** Chris@5: * Views Slideshow: pager. Chris@5: */ Chris@5: function template_preprocess_views_slideshow_pager_widget_render(&$vars) { Chris@5: // Add JavaScript settings for the pager type. Chris@5: $vars['#attached']['library'][] = 'views_slideshow/widget_info'; Chris@5: $vars['#attached']['drupalSettings']['viewsSlideshowPager'][$vars['vss_id']] = [ Chris@5: $vars['location'] => [ Chris@5: 'type' => \Drupal::service('views_slideshow.format_addons_name')->format($vars['settings']['type']), Chris@5: ], Chris@5: ]; Chris@5: Chris@5: // Create some attributes. Chris@5: $attributes['class'][] = 'widget_pager widget_pager_' . $vars['location']; Chris@5: $attributes['id'] = 'widget_pager_' . $vars['location'] . '_' . $vars['vss_id']; Chris@5: Chris@5: $pager = [ Chris@5: '#theme' => $vars['view']->buildThemeFunctions($vars['settings']['type']), Chris@5: '#vss_id' => $vars['vss_id'], Chris@5: '#view' => $vars['view'], Chris@5: '#settings' => $vars['settings'], Chris@5: '#location' => $vars['location'], Chris@5: '#attributes' => $attributes, Chris@5: ]; Chris@5: Chris@5: return \Drupal::service('renderer')->render($pager); Chris@5: } Chris@5: Chris@5: /** Chris@5: * Theme pager fields. Chris@5: */ Chris@5: function template_preprocess_views_slideshow_pager_fields(&$vars) { Chris@5: // Add JavaScript settings for the field. Chris@5: $vars['#attached']['library'][] = 'views_slideshow/widget_info'; Chris@5: $vars['#attached']['drupalSettings']['viewsSlideshowPagerFields'][$vars['vss_id']] = [ Chris@5: $vars['location'] => [ Chris@5: 'activatePauseOnHover' => $vars['settings']['views_slideshow_pager_fields']['views_slideshow_pager_fields_hover'], Chris@5: ], Chris@5: ]; Chris@5: Chris@5: // Add hover intent library. Chris@5: if ($vars['settings']['views_slideshow_pager_fields']['views_slideshow_pager_fields_hover']) { Chris@5: $vars['#attached']['library'][] = 'views_slideshow/jquery_hoverIntent'; Chris@5: } Chris@5: Chris@5: $vars['widget_id'] = $vars['attributes']['id']; Chris@5: // Add our class to the wrapper. Chris@5: $vars['attributes']['class'][] = 'views_slideshow_pager_field'; Chris@5: Chris@5: // Render all the fields unless there is only 1 slide and the user specified Chris@5: // to hide them when there is only one slide. Chris@5: $vars['rendered_field_items'] = []; Chris@5: foreach ($vars['view']->result as $count => $node) { Chris@5: $rendered_fields = []; Chris@5: foreach ($vars['settings']['views_slideshow_pager_fields']['views_slideshow_pager_fields_fields'] as $field => $use) { Chris@5: if ($use !== 0 && is_object($vars['view']->field[$field])) { Chris@5: $rendered_fields[] = [ Chris@5: '#theme' => $vars['view']->buildThemeFunctions('views_slideshow_pager_field_field'), Chris@5: '#view' => $vars['view'], Chris@5: '#label' => $vars['view']->field[$field]->options['label'], Chris@5: '#output' => $vars['view']->style_plugin->getField($count, $field), Chris@5: '#css_identifier' => Html::cleanCssIdentifier($vars['view']->field[$field]->field), Chris@5: ]; Chris@5: } Chris@5: } Chris@5: Chris@5: $vars['rendered_field_items'][] = [ Chris@5: '#theme' => $vars['view']->buildThemeFunctions('views_slideshow_pager_field_item'), Chris@5: '#vss_id' => $vars['vss_id'], Chris@5: '#item' => $rendered_fields, Chris@5: '#count' => $count, Chris@5: '#location' => $vars['location'], Chris@5: '#length' => count($vars['view']->result), Chris@5: ]; Chris@5: } Chris@5: } Chris@5: Chris@5: /** Chris@5: * Views Slideshow: pager item. Chris@5: */ Chris@5: function template_preprocess_views_slideshow_pager_field_item(&$vars) { Chris@5: $vars['attributes']['class'][] = 'views_slideshow_pager_field_item'; Chris@5: $vars['attributes']['class'][] = ($vars['count'] % 2) ? 'views-row-even' : 'views-row-odd'; Chris@5: if ($vars['count'] == 0) { Chris@5: $vars['attributes']['class'][] = 'views-row-first'; Chris@5: } Chris@5: elseif ($vars['count'] == $vars['length'] - 1) { Chris@5: $vars['attributes']['class'][] = 'views-row-last'; Chris@5: } Chris@5: } Chris@5: Chris@5: /** Chris@5: * Views Slideshow: Bullets pager. Chris@5: */ Chris@5: function template_preprocess_views_slideshow_pager_bullets(&$vars) { Chris@5: $vars['#attached']['library'][] = 'views_slideshow/widget_info'; Chris@5: $vars['#attached']['library'][] = 'views_slideshow/pager_bullets'; Chris@5: $vars['#attached']['drupalSettings']['viewsSlideshowPagerFields'][$vars['vss_id']] = [ Chris@5: $vars['location'] => [ Chris@5: 'activatePauseOnHover' => $vars['settings']['views_slideshow_pager_bullets']['views_slideshow_pager_bullets_hover'], Chris@5: ], Chris@5: ]; Chris@5: Chris@5: $vars['bullet_items'] = [ Chris@5: '#theme' => 'item_list', Chris@5: '#items' => [], Chris@5: '#attributes' => $vars['attributes'], Chris@5: ]; Chris@5: $vars['bullet_items']['#attributes']['class'][] = 'views-slideshow-pager-bullets'; Chris@5: $vars['bullet_items']['#attributes']['class'][] = 'views_slideshow_pager_field'; Chris@5: Chris@5: for ($i = 0; $i < count($vars['view']->result); $i++) { Chris@5: $vars['bullet_items']['#items'][] = [ Chris@5: '#markup' => $i, Chris@5: '#wrapper_attributes' => [ Chris@5: 'id' => 'views_slideshow_pager_field_item_' . $vars['location'] . '_' . $vars['vss_id'] . '_' . $i, Chris@5: ], Chris@5: ]; Chris@5: } Chris@5: } Chris@5: Chris@5: /** Chris@5: * Views Slideshow: Controls. Chris@5: */ Chris@5: function template_preprocess_views_slideshow_controls_widget_render(&$vars) { Chris@5: // Add JavaScript settings for the controls type. Chris@5: $vars['#attached']['library'][] = 'views_slideshow/widget_info'; Chris@5: $vars['#attached']['drupalSettings']['viewsSlideshowControls'][$vars['vss_id']] = [ Chris@5: $vars['location'] => [ Chris@5: 'type' => \Drupal::service('views_slideshow.format_addons_name')->format($vars['settings']['type']), Chris@5: ], Chris@5: ]; Chris@5: Chris@5: $output = [ Chris@5: '#theme' => $vars['view']->buildThemeFunctions($vars['settings']['type']), Chris@5: '#vss_id' => $vars['vss_id'], Chris@5: '#view' => $vars['view'], Chris@5: '#settings' => $vars['settings'], Chris@5: '#location' => $vars['location'], Chris@5: '#rows' => $vars['rows'], Chris@5: ]; Chris@5: Chris@5: return \Drupal::service('renderer')->render($output); Chris@5: } Chris@5: Chris@5: /** Chris@5: * The slideshow controls. Chris@5: */ Chris@5: function template_preprocess_views_slideshow_controls_text(&$vars) { Chris@5: $vars['#attached']['library'][] = 'views_slideshow/controls_text'; Chris@5: Chris@5: $vars['attributes']['class'][] = 'views_slideshow_controls_text'; Chris@5: Chris@5: $vars['rendered_control_previous'] = [ Chris@5: '#theme' => $vars['view']->buildThemeFunctions('views_slideshow_controls_text_previous'), Chris@5: '#vss_id' => $vars['vss_id'], Chris@5: '#view' => $vars['view'], Chris@5: '#settings' => $vars['settings'], Chris@5: ]; Chris@5: Chris@5: $vars['rendered_control_pause'] = [ Chris@5: '#theme' => $vars['view']->buildThemeFunctions('views_slideshow_controls_text_pause'), Chris@5: '#vss_id' => $vars['vss_id'], Chris@5: '#view' => $vars['view'], Chris@5: '#settings' => $vars['settings'], Chris@5: ]; Chris@5: Chris@5: $vars['rendered_control_next'] = [ Chris@5: '#theme' => $vars['view']->buildThemeFunctions('views_slideshow_controls_text_next'), Chris@5: '#vss_id' => $vars['vss_id'], Chris@5: '#view' => $vars['view'], Chris@5: '#settings' => $vars['settings'], Chris@5: ]; Chris@5: } Chris@5: Chris@5: /** Chris@5: * Views Slideshow: "previous" control. Chris@5: */ Chris@5: function template_preprocess_views_slideshow_controls_text_previous(&$vars) { Chris@5: $vars['attributes']['class'][] = 'views_slideshow_controls_text_previous'; Chris@5: } Chris@5: Chris@5: /** Chris@5: * Views Slideshow: "pause" control. Chris@5: */ Chris@5: function template_preprocess_views_slideshow_controls_text_pause(&$vars) { Chris@5: $vars['attributes']['class'][] = 'views_slideshow_controls_text_pause views-slideshow-controls-text-status-play'; Chris@5: $vars['start_text'] = t('Pause'); Chris@5: } Chris@5: Chris@5: /** Chris@5: * Views Slideshow: "next" control. Chris@5: */ Chris@5: function template_preprocess_views_slideshow_controls_text_next(&$vars) { Chris@5: $vars['attributes']['class'][] = 'views_slideshow_controls_text_next'; Chris@5: } Chris@5: Chris@5: /** Chris@5: * Views Slideshow: Slide Counter. Chris@5: */ Chris@5: function template_preprocess_views_slideshow_slide_counter_widget_render(&$vars) { Chris@5: $slide = [ Chris@5: '#theme' => $vars['view']->buildThemeFunctions('views_slideshow_slide_counter'), Chris@5: '#vss_id' => $vars['vss_id'], Chris@5: '#view' => $vars['view'], Chris@5: '#settings' => $vars['settings'], Chris@5: '#location' => $vars['location'], Chris@5: '#rows' => $vars['rows'], Chris@5: ]; Chris@5: Chris@5: return \Drupal::service('renderer')->render($slide); Chris@5: } Chris@5: Chris@5: /** Chris@5: * Views Slideshow: slide counter. Chris@5: */ Chris@5: function template_preprocess_views_slideshow_slide_counter(&$vars) { Chris@5: $vars['attributes']['class'][] = 'views_slideshow_slide_counter'; Chris@5: $vars['slide_count'] = count($vars['rows']); Chris@5: } Chris@5: Chris@5: /** Chris@5: * @} End of "defgroup vss_theme". Chris@5: */