annotate core/modules/toolbar/src/Element/Toolbar.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\toolbar\Element;
Chris@0 4
Chris@0 5 use Drupal\Component\Utility\Html;
Chris@0 6 use Drupal\Core\Render\Element\RenderElement;
Chris@0 7 use Drupal\Core\Render\Element;
Chris@0 8
Chris@0 9 /**
Chris@0 10 * Provides a render element for the default Drupal toolbar.
Chris@0 11 *
Chris@0 12 * @RenderElement("toolbar")
Chris@0 13 */
Chris@0 14 class Toolbar extends RenderElement {
Chris@0 15
Chris@0 16 /**
Chris@0 17 * {@inheritdoc}
Chris@0 18 */
Chris@0 19 public function getInfo() {
Chris@0 20 $class = get_class($this);
Chris@0 21 return [
Chris@0 22 '#pre_render' => [
Chris@0 23 [$class, 'preRenderToolbar'],
Chris@0 24 ],
Chris@0 25 '#theme' => 'toolbar',
Chris@0 26 '#attached' => [
Chris@0 27 'library' => [
Chris@0 28 'toolbar/toolbar',
Chris@0 29 ],
Chris@0 30 ],
Chris@0 31 // Metadata for the toolbar wrapping element.
Chris@0 32 '#attributes' => [
Chris@0 33 // The id cannot be simply "toolbar" or it will clash with the
Chris@0 34 // simpletest tests listing which produces a checkbox with attribute
Chris@0 35 // id="toolbar".
Chris@0 36 'id' => 'toolbar-administration',
Chris@0 37 'role' => 'group',
Chris@0 38 'aria-label' => $this->t('Site administration toolbar'),
Chris@0 39 ],
Chris@0 40 // Metadata for the administration bar.
Chris@0 41 '#bar' => [
Chris@0 42 '#heading' => $this->t('Toolbar items'),
Chris@0 43 '#attributes' => [
Chris@0 44 'id' => 'toolbar-bar',
Chris@0 45 'role' => 'navigation',
Chris@0 46 'aria-label' => $this->t('Toolbar items'),
Chris@0 47 ],
Chris@0 48 ],
Chris@0 49 ];
Chris@0 50 }
Chris@0 51
Chris@0 52 /**
Chris@0 53 * Builds the Toolbar as a structured array ready for drupal_render().
Chris@0 54 *
Chris@0 55 * Since building the toolbar takes some time, it is done just prior to
Chris@0 56 * rendering to ensure that it is built only if it will be displayed.
Chris@0 57 *
Chris@0 58 * @param array $element
Chris@0 59 * A renderable array.
Chris@0 60 *
Chris@0 61 * @return array
Chris@0 62 * A renderable array.
Chris@0 63 *
Chris@0 64 * @see toolbar_page_top()
Chris@0 65 */
Chris@0 66 public static function preRenderToolbar($element) {
Chris@0 67 // Get the configured breakpoints to switch from vertical to horizontal
Chris@0 68 // toolbar presentation.
Chris@0 69 $breakpoints = static::breakpointManager()->getBreakpointsByGroup('toolbar');
Chris@0 70 if (!empty($breakpoints)) {
Chris@0 71 $media_queries = [];
Chris@0 72 foreach ($breakpoints as $id => $breakpoint) {
Chris@0 73 $media_queries[$id] = $breakpoint->getMediaQuery();
Chris@0 74 }
Chris@0 75
Chris@0 76 $element['#attached']['drupalSettings']['toolbar']['breakpoints'] = $media_queries;
Chris@0 77 }
Chris@0 78
Chris@0 79 $module_handler = static::moduleHandler();
Chris@0 80 // Get toolbar items from all modules that implement hook_toolbar().
Chris@0 81 $items = $module_handler->invokeAll('toolbar');
Chris@0 82 // Allow for altering of hook_toolbar().
Chris@0 83 $module_handler->alter('toolbar', $items);
Chris@0 84 // Sort the children.
Chris@0 85 uasort($items, ['\Drupal\Component\Utility\SortArray', 'sortByWeightProperty']);
Chris@0 86
Chris@0 87 // Merge in the original toolbar values.
Chris@0 88 $element = array_merge($element, $items);
Chris@0 89
Chris@0 90 // Assign each item a unique ID, based on its key.
Chris@0 91 foreach (Element::children($element) as $key) {
Chris@0 92 $element[$key]['#id'] = Html::getId('toolbar-item-' . $key);
Chris@0 93 }
Chris@0 94
Chris@0 95 return $element;
Chris@0 96 }
Chris@0 97
Chris@0 98 /**
Chris@0 99 * Wraps the breakpoint manager.
Chris@0 100 *
Chris@0 101 * @return \Drupal\breakpoint\BreakpointManagerInterface
Chris@0 102 */
Chris@0 103 protected static function breakpointManager() {
Chris@0 104 return \Drupal::service('breakpoint.manager');
Chris@0 105 }
Chris@0 106
Chris@0 107 /**
Chris@0 108 * Wraps the module handler.
Chris@0 109 *
Chris@0 110 * @return \Drupal\Core\Extension\ModuleHandlerInterface
Chris@0 111 */
Chris@0 112 protected static function moduleHandler() {
Chris@0 113 return \Drupal::moduleHandler();
Chris@0 114 }
Chris@0 115
Chris@0 116 }