class BreakpointManager in Drupal 8
Same name and namespace in other branches
- 9 core/modules/breakpoint/src/BreakpointManager.php \Drupal\breakpoint\BreakpointManager
Defines a breakpoint plugin manager to deal with breakpoints.
Extension can define breakpoints in a EXTENSION_NAME.breakpoints.yml file contained in the extension's base directory. Each breakpoint has the following structure:
MACHINE_NAME:
label: STRING
mediaQuery: STRING
weight: INTEGER
multipliers:
- STRING
For example:
bartik.mobile:
label: mobile
mediaQuery: '(min-width: 0px)'
weight: 0
multipliers:
- 1x
- 2x
Optionally a breakpoint can provide a group key. By default an extensions breakpoints will be placed in a group labelled with the extension name.
Hierarchy
- class \Drupal\Component\Plugin\PluginManagerBase implements PluginManagerInterface uses DiscoveryTrait
- class \Drupal\Core\Plugin\DefaultPluginManager implements CachedDiscoveryInterface, PluginManagerInterface, CacheableDependencyInterface uses DiscoveryCachedTrait, UseCacheBackendTrait
- class \Drupal\breakpoint\BreakpointManager implements BreakpointManagerInterface uses StringTranslationTrait
- class \Drupal\Core\Plugin\DefaultPluginManager implements CachedDiscoveryInterface, PluginManagerInterface, CacheableDependencyInterface uses DiscoveryCachedTrait, UseCacheBackendTrait
Expanded class hierarchy of BreakpointManager
See also
\Drupal\breakpoint\BreakpointInterface
1 string reference to 'BreakpointManager'
- breakpoint.services.yml in core/
modules/ breakpoint/ breakpoint.services.yml - core/modules/breakpoint/breakpoint.services.yml
1 service uses BreakpointManager
- breakpoint.manager in core/
modules/ breakpoint/ breakpoint.services.yml - Drupal\breakpoint\BreakpointManager
File
- core/
modules/ breakpoint/ src/ BreakpointManager.php, line 47
Namespace
Drupal\breakpointView source
class BreakpointManager extends DefaultPluginManager implements BreakpointManagerInterface {
use StringTranslationTrait;
/**
* {@inheritdoc}
*/
protected $defaults = [
// Human readable label for breakpoint.
'label' => '',
// The media query for the breakpoint.
'mediaQuery' => '',
// Weight used for ordering breakpoints.
'weight' => 0,
// Breakpoint multipliers.
'multipliers' => [],
// The breakpoint group.
'group' => '',
// Default class for breakpoint implementations.
'class' => 'Drupal\\breakpoint\\Breakpoint',
// The plugin id. Set by the plugin system based on the top-level YAML key.
'id' => '',
];
/**
* The theme handler.
*
* @var \Drupal\Core\Extension\ThemeHandlerInterface
*/
protected $themeHandler;
/**
* Static cache of breakpoints keyed by group.
*
* @var array
*/
protected $breakpointsByGroup;
/**
* The plugin instances.
*
* @var array
*/
protected $instances = [];
/**
* Constructs a new BreakpointManager instance.
*
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* The module handler.
* @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
* The theme handler.
* @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
* The cache backend.
* @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
* The string translation service.
*/
public function __construct(ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler, CacheBackendInterface $cache_backend, TranslationInterface $string_translation) {
$this->factory = new ContainerFactory($this);
$this->moduleHandler = $module_handler;
$this->themeHandler = $theme_handler;
$this
->setStringTranslation($string_translation);
$this
->alterInfo('breakpoints');
$this
->setCacheBackend($cache_backend, 'breakpoints', [
'breakpoints',
]);
}
/**
* {@inheritdoc}
*/
protected function getDiscovery() {
if (!isset($this->discovery)) {
$this->discovery = new YamlDiscovery('breakpoints', $this->moduleHandler
->getModuleDirectories() + $this->themeHandler
->getThemeDirectories());
$this->discovery = new ContainerDerivativeDiscoveryDecorator($this->discovery);
}
return $this->discovery;
}
/**
* {@inheritdoc}
*/
public function processDefinition(&$definition, $plugin_id) {
parent::processDefinition($definition, $plugin_id);
// Allow custom groups and therefore more than one group per extension.
if (empty($definition['group'])) {
$definition['group'] = $definition['provider'];
}
// Ensure a 1x multiplier exists.
if (!in_array('1x', $definition['multipliers'])) {
$definition['multipliers'][] = '1x';
}
// Ensure that multipliers are sorted correctly.
sort($definition['multipliers']);
}
/**
* {@inheritdoc}
*/
protected function providerExists($provider) {
return $this->moduleHandler
->moduleExists($provider) || $this->themeHandler
->themeExists($provider);
}
/**
* {@inheritdoc}
*/
public function getBreakpointsByGroup($group) {
if (!isset($this->breakpointsByGroup[$group])) {
if ($cache = $this->cacheBackend
->get($this->cacheKey . ':' . $group)) {
$this->breakpointsByGroup[$group] = $cache->data;
}
else {
$breakpoints = [];
foreach ($this
->getDefinitions() as $plugin_id => $plugin_definition) {
if ($plugin_definition['group'] == $group) {
$breakpoints[$plugin_id] = $plugin_definition;
}
}
uasort($breakpoints, [
'Drupal\\Component\\Utility\\SortArray',
'sortByWeightElement',
]);
$this->cacheBackend
->set($this->cacheKey . ':' . $group, $breakpoints, Cache::PERMANENT, [
'breakpoints',
]);
$this->breakpointsByGroup[$group] = $breakpoints;
}
}
$instances = [];
foreach ($this->breakpointsByGroup[$group] as $plugin_id => $definition) {
if (!isset($this->instances[$plugin_id])) {
$this->instances[$plugin_id] = $this
->createInstance($plugin_id);
}
$instances[$plugin_id] = $this->instances[$plugin_id];
}
return $instances;
}
/**
* {@inheritdoc}
*/
public function getGroups() {
// Use a double colon so as to not clash with the cache for each group.
if ($cache = $this->cacheBackend
->get($this->cacheKey . '::groups')) {
$groups = $cache->data;
}
else {
$groups = [];
foreach ($this
->getDefinitions() as $plugin_definition) {
if (!isset($groups[$plugin_definition['group']])) {
$groups[$plugin_definition['group']] = $plugin_definition['group'];
}
}
$this->cacheBackend
->set($this->cacheKey . '::groups', $groups, Cache::PERMANENT, [
'breakpoints',
]);
}
// Get the labels. This is not cacheable due to translation.
$group_labels = [];
foreach ($groups as $group) {
$group_labels[$group] = $this
->getGroupLabel($group);
}
asort($group_labels);
return $group_labels;
}
/**
* {@inheritdoc}
*/
public function getGroupProviders($group) {
$providers = [];
$breakpoints = $this
->getBreakpointsByGroup($group);
foreach ($breakpoints as $breakpoint) {
$provider = $breakpoint
->getProvider();
$extension = FALSE;
if ($this->moduleHandler
->moduleExists($provider)) {
$extension = $this->moduleHandler
->getModule($provider);
}
elseif ($this->themeHandler
->themeExists($provider)) {
$extension = $this->themeHandler
->getTheme($provider);
}
if ($extension) {
$providers[$extension
->getName()] = $extension
->getType();
}
}
return $providers;
}
/**
* {@inheritdoc}
*/
public function clearCachedDefinitions() {
parent::clearCachedDefinitions();
$this->breakpointsByGroup = NULL;
$this->instances = [];
}
/**
* Gets the label for a breakpoint group.
*
* @param string $group
* The breakpoint group.
*
* @return string
* The label.
*/
protected function getGroupLabel($group) {
// Extension names are not translatable.
if ($this->moduleHandler
->moduleExists($group)) {
$label = $this->moduleHandler
->getName($group);
}
elseif ($this->themeHandler
->themeExists($group)) {
$label = $this->themeHandler
->getName($group);
}
else {
// Custom group label that should be translatable.
$label = $this
->t($group, [], [
'context' => 'breakpoint',
]);
}
return $label;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
BreakpointManager:: |
protected | property | Static cache of breakpoints keyed by group. | |
BreakpointManager:: |
protected | property |
A set of defaults to be referenced by $this->processDefinition() if
additional processing of plugins is necessary or helpful for development
purposes. Overrides DefaultPluginManager:: |
|
BreakpointManager:: |
protected | property | The plugin instances. | |
BreakpointManager:: |
protected | property | The theme handler. | |
BreakpointManager:: |
public | function |
Clears static and persistent plugin definition caches. Overrides DefaultPluginManager:: |
|
BreakpointManager:: |
public | function |
Gets breakpoints for the specified group. Overrides BreakpointManagerInterface:: |
|
BreakpointManager:: |
protected | function |
Gets the plugin discovery. Overrides DefaultPluginManager:: |
|
BreakpointManager:: |
protected | function | Gets the label for a breakpoint group. | |
BreakpointManager:: |
public | function |
Gets all the providers for the specified breakpoint group. Overrides BreakpointManagerInterface:: |
|
BreakpointManager:: |
public | function |
Gets all the existing breakpoint groups. Overrides BreakpointManagerInterface:: |
|
BreakpointManager:: |
public | function |
Performs extra processing on plugin definitions. Overrides DefaultPluginManager:: |
|
BreakpointManager:: |
protected | function |
Determines if the provider of a definition exists. Overrides DefaultPluginManager:: |
|
BreakpointManager:: |
public | function |
Constructs a new BreakpointManager instance. Overrides DefaultPluginManager:: |
|
DefaultPluginManager:: |
protected | property | Additional namespaces the annotation discovery mechanism should scan for annotation definitions. | |
DefaultPluginManager:: |
protected | property | Name of the alter hook if one should be invoked. | |
DefaultPluginManager:: |
protected | property | The cache key. | |
DefaultPluginManager:: |
protected | property | An array of cache tags to use for the cached definitions. | |
DefaultPluginManager:: |
protected | property | The module handler to invoke the alter hook. | 1 |
DefaultPluginManager:: |
protected | property | An object that implements \Traversable which contains the root paths keyed by the corresponding namespace to look for plugin implementations. | |
DefaultPluginManager:: |
protected | property | The name of the annotation that contains the plugin definition. | |
DefaultPluginManager:: |
protected | property | The interface each plugin should implement. | 1 |
DefaultPluginManager:: |
protected | property | The subdirectory within a namespace to look for plugins, or FALSE if the plugins are in the top level of the namespace. | |
DefaultPluginManager:: |
protected | function | Invokes the hook to alter the definitions if the alter hook is set. | 1 |
DefaultPluginManager:: |
protected | function | Sets the alter hook name. | |
DefaultPluginManager:: |
protected | function | Extracts the provider from a plugin definition. | |
DefaultPluginManager:: |
protected | function | Finds plugin definitions. | 7 |
DefaultPluginManager:: |
private | function | Fix the definitions of context-aware plugins. | |
DefaultPluginManager:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyInterface:: |
|
DefaultPluginManager:: |
protected | function | Returns the cached plugin definitions of the decorated discovery class. | |
DefaultPluginManager:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyInterface:: |
|
DefaultPluginManager:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyInterface:: |
|
DefaultPluginManager:: |
public | function |
Gets the definition of all plugins for this type. Overrides DiscoveryTrait:: |
2 |
DefaultPluginManager:: |
protected | function |
Gets the plugin factory. Overrides PluginManagerBase:: |
|
DefaultPluginManager:: |
public | function | Initialize the cache backend. | |
DefaultPluginManager:: |
protected | function | Sets a cache of plugin definitions for the decorated discovery class. | |
DefaultPluginManager:: |
public | function |
Disable the use of caches. Overrides CachedDiscoveryInterface:: |
1 |
DiscoveryCachedTrait:: |
protected | property | Cached definitions array. | 1 |
DiscoveryCachedTrait:: |
public | function |
Overrides DiscoveryTrait:: |
3 |
DiscoveryTrait:: |
protected | function | Gets a specific plugin definition. | |
DiscoveryTrait:: |
public | function | ||
PluginManagerBase:: |
protected | property | The object that discovers plugins managed by this manager. | |
PluginManagerBase:: |
protected | property | The object that instantiates plugins managed by this manager. | |
PluginManagerBase:: |
protected | property | The object that returns the preconfigured plugin instance appropriate for a particular runtime condition. | |
PluginManagerBase:: |
public | function |
Creates a pre-configured instance of a plugin. Overrides FactoryInterface:: |
12 |
PluginManagerBase:: |
public | function |
Gets a preconfigured instance of a plugin. Overrides MapperInterface:: |
7 |
PluginManagerBase:: |
protected | function | Allows plugin managers to specify custom behavior if a plugin is not found. | 1 |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
UseCacheBackendTrait:: |
protected | property | Cache backend instance. | |
UseCacheBackendTrait:: |
protected | property | Flag whether caches should be used or skipped. | |
UseCacheBackendTrait:: |
protected | function | Fetches from the cache backend, respecting the use caches flag. | 1 |
UseCacheBackendTrait:: |
protected | function | Stores data in the persistent cache, respecting the use caches flag. |