entityTypeManager = $entity_type_manager; $this->moduleHandler = $module_handler; $this->renderer = $renderer; $this->configFactory = $config_factory; $this->cache = $cache; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('entity_type.manager'), $container->get('module_handler'), $container->get('renderer'), $container->get('config.factory'), $container->get('cache.default') ); } /** * Returns the entity type manager. */ public function getEntityTypeManager() { return $this->entityTypeManager; } /** * Returns the module handler. */ public function getModuleHandler() { return $this->moduleHandler; } /** * Returns the renderer. */ public function getRenderer() { return $this->renderer; } /** * Returns the cache. */ public function getCache() { return $this->cache; } /** * Returns any config, or keyed by the $setting_name. */ public function configLoad($setting_name = '', $settings = 'blazy.settings') { $config = $this->configFactory->get($settings); $configs = $config->get(); unset($configs['_core']); return empty($setting_name) ? $configs : $config->get($setting_name); } /** * Returns a shortcut for loading a config entity: image_style, slick, etc. */ public function entityLoad($id, $entity_type = 'image_style') { return $this->entityTypeManager->getStorage($entity_type)->load($id); } /** * Returns a shortcut for loading multiple configuration entities. */ public function entityLoadMultiple($entity_type = 'image_style', $ids = NULL) { return $this->entityTypeManager->getStorage($entity_type)->loadMultiple($ids); } /** * Returns array of needed assets suitable for #attached property. */ public function attach($attach = []) { $load = []; $dummy = []; $switch = empty($attach['media_switch']) ? '' : $attach['media_switch']; if ($switch && $switch != 'content') { $attach[$switch] = $switch; if (in_array($switch, $this->getLightboxes())) { $load['library'][] = 'blazy/lightbox'; } } if (!empty($attach['colorbox'])) { \Drupal::service('colorbox.attachment')->attach($dummy); $load = isset($dummy['#attached']) ? NestedArray::mergeDeep($load, $dummy['#attached']) : $load; $load['library'][] = 'blazy/colorbox'; unset($dummy); } // Only load grid xor column, but not both. $attach['column'] = !empty($attach['style']) && $attach['style'] == 'column'; if (!empty($attach['column'])) { $attach['grid'] = FALSE; } foreach (['column', 'grid', 'media', 'photobox', 'ratio'] as $component) { if (!empty($attach[$component])) { $load['library'][] = 'blazy/' . $component; } } // Core Blazy libraries. if (!empty($attach['blazy'])) { $load['library'][] = 'blazy/load'; $load['drupalSettings']['blazy'] = $this->configLoad()['blazy']; } $this->moduleHandler->alter('blazy_attach', $load, $attach); return $load; } /** * Collects defined skins as registered via hook_MODULE_NAME_skins_info(). */ public function buildSkins($namespace, $skin_class, $methods = []) { $skins = []; $cid = $namespace . ':skins'; if ($cache = $this->cache->get($cid)) { $skins = $cache->data; } else { $classes = $this->moduleHandler->invokeAll($namespace . '_skins_info'); $classes = array_merge([$skin_class], $classes); $items = $skins = []; foreach ($classes as $class) { if (class_exists($class)) { $reflection = new \ReflectionClass($class); if ($reflection->implementsInterface($skin_class . 'Interface')) { $skin = new $class(); if (empty($methods) && method_exists($skin, 'skins')) { $items = $skin->skins(); } else { foreach ($methods as $method) { $items[$method] = method_exists($skin, $method) ? $skin->{$method}() : []; } } } } $skins = NestedArray::mergeDeep($skins, $items); } $count = isset($items['skins']) ? count($items['skins']) : count($items); $tags = Cache::buildTags($cid, ['count:' . $count]); $this->cache->set($cid, $skins, Cache::PERMANENT, $tags); } return $skins; } /** * Gets the supported lightboxes. * * @return array * The supported lightboxes. */ public function getLightboxes() { $photobox = \Drupal::root() . '/libraries/photobox/photobox/jquery.photobox.js'; $lightboxes = []; foreach (['colorbox', 'photobox'] as $lightbox) { $supported = function_exists($lightbox . '_theme'); if ($lightbox == 'photobox' && is_file($photobox)) { $supported = TRUE; } if ($supported) { $lightboxes[] = $lightbox; } } $this->moduleHandler->alter('blazy_lightboxes', $lightboxes); return $lightboxes; } /** * Returns the trusted HTML ID common for Blazy, GridStack, Mason, Slick. * * @deprecated: Removed prior to release for Blazy::getHtmlId(). */ public static function getHtmlId($string = 'blazy', $id = '') { $blazy_id = &drupal_static('blazy_id', 0); // Do not use dynamic Html::getUniqueId, otherwise broken AJAX. return empty($id) ? Html::getId($string . '-' . ++$blazy_id) : $id; } }