name; } /** * {@inheritdoc} */ public function getSkin() { return $this->skin; } /** * {@inheritdoc} */ public function getBreakpoints() { return $this->breakpoints; } /** * {@inheritdoc} */ public function getGroup() { return $this->group; } /** * {@inheritdoc} */ public function optimized() { return $this->optimized; } /** * {@inheritdoc} */ public function getOptions($group = NULL, $property = NULL) { if ($group) { if (is_array($group)) { return NestedArray::getValue($this->options, (array) $group); } elseif (isset($property) && isset($this->options[$group])) { return isset($this->options[$group][$property]) ? $this->options[$group][$property] : NULL; } return $this->options[$group]; } return $this->options; } /** * {@inheritdoc} */ public function getSettings() { // With the Optimized options, all defaults are cleaned out, merge em. return isset($this->options['settings']) ? array_merge(self::defaultSettings(), $this->options['settings']) : self::defaultSettings(); } /** * {@inheritdoc} */ public function setSettings(array $settings = []) { $this->options['settings'] = $settings; return $this; } /** * {@inheritdoc} */ public function getSetting($setting_name) { return isset($this->getSettings()[$setting_name]) ? $this->getSettings()[$setting_name] : NULL; } /** * {@inheritdoc} */ public static function defaultSettings($group = 'settings') { return self::load('default')->options[$group]; } /** * Overrides \Drupal\Core\Entity\Entity::create(). */ public static function create(array $values = []) { $optionset = parent::create($values); $optionset->setSettings($optionset->getSettings()); return $optionset; } /** * Returns the Slick responsive settings. */ public function getResponsiveOptions() { if (empty($this->breakpoints)) { return FALSE; } $options = []; if (isset($this->options['responsives']['responsive'])) { $responsives = $this->options['responsives']; if ($responsives['responsive']) { foreach ($responsives['responsive'] as $delta => $responsive) { if (empty($responsives['responsive'][$delta]['breakpoint'])) { unset($responsives['responsive'][$delta]); } if (isset($responsives['responsive'][$delta])) { $options[$delta] = $responsive; } } } } return $options; } /** * Sets the Slick responsive settings. */ public function setResponsiveSettings($settings, $delta = 0) { $this->options['responsives']['responsive'][$delta]['settings'] = $settings; return $this; } /** * Strip out options containing default values so to have real clean JSON. */ public function removeDefaultValues(array $js) { $config = []; $defaults = self::defaultSettings(); // Remove wasted dependent options if disabled, empty or not. $this->removeWastedDependentOptions($js); $config = array_diff_assoc($js, $defaults); // Remove empty lazyLoad, or left to default ondemand, to avoid JS error. if (empty($config['lazyLoad'])) { unset($config['lazyLoad']); } // Do not pass arrows HTML to JSON object as some are enforced. $excludes = [ 'downArrow', 'downArrowTarget', 'downArrowOffset', 'prevArrow', 'nextArrow', ]; foreach ($excludes as $key) { unset($config[$key]); } // Clean up responsive options if similar to defaults. if ($responsives = $this->getResponsiveOptions()) { $cleaned = []; foreach ($responsives as $key => $responsive) { $cleaned[$key]['breakpoint'] = $responsives[$key]['breakpoint']; // Destroy responsive slick if so configured. if ($responsives[$key]['unslick']) { $cleaned[$key]['settings'] = 'unslick'; unset($responsives[$key]['unslick']); } else { // Remove wasted dependent options if disabled, empty or not. $this->removeWastedDependentOptions($responsives[$key]['settings']); $cleaned[$key]['settings'] = array_diff_assoc($responsives[$key]['settings'], $defaults); } } $config['responsive'] = $cleaned; } return $config; } /** * Removes wasted dependent options, even if not empty. */ public function removeWastedDependentOptions(array &$js) { foreach (self::getDependentOptions() as $key => $option) { if (isset($js[$key]) && empty($js[$key])) { foreach ($option as $dependent) { unset($js[$dependent]); } } } if (!empty($js['useCSS']) && !empty($js['cssEaseBezier'])) { $js['cssEase'] = $js['cssEaseBezier']; } unset($js['cssEaseOverride'], $js['cssEaseBezier']); } /** * Defines the dependent options. */ public static function getDependentOptions() { $down_arrow = ['downArrowTarget', 'downArrowOffset']; return [ 'arrows' => ['prevArrow', 'nextArrow', 'downArrow'] + $down_arrow, 'downArrow' => $down_arrow, 'autoplay' => ['pauseOnHover', 'pauseOnDotsHover', 'autoplaySpeed'], 'centerMode' => ['centerPadding'], 'dots' => ['dotsClass', 'appendDots'], 'swipe' => ['swipeToSlide'], 'useCSS' => ['cssEase', 'cssEaseBezier', 'cssEaseOverride'], 'vertical' => ['verticalSwiping'], ]; } /** * Returns the trusted HTML ID of a single slick instance. * * @todo: Consider Blazy::getHtmlId() instead. */ public static function getHtmlId($string = 'slick', $id = '') { $slick_id = &drupal_static('slick_id', 0); // Do not use dynamic Html::getUniqueId, otherwise broken asnavfors. return empty($id) ? Html::getId($string . '-' . ++$slick_id) : $id; } /** * Returns HTML or layout related settings to shut up notices. */ public static function htmlSettings() { return [ 'cache' => 0, 'current_view_mode' => '', 'display' => 'main', 'grid' => 0, 'id' => '', 'nav' => FALSE, 'navpos' => FALSE, 'media_switch' => '', 'optionset' => 'default', 'ratio' => '', 'skin' => '', 'unslick' => FALSE, 'vanilla' => FALSE, 'vertical' => FALSE, 'vertical_tn' => FALSE, 'view_name' => '', ]; } /** * Defines JS options required by theme_slick(), used with optimized option. */ public static function jsSettings() { return [ 'asNavFor' => '', 'downArrowTarget' => '', 'downArrowOffset' => '', 'lazyLoad' => 'ondemand', 'prevArrow' => '', 'nextArrow' => '', 'rows' => 1, 'slidesPerRow' => 1, 'slide' => '', 'slidesToShow' => 1, ]; } }