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