Chris@0: [ Chris@0: [$class, 'preRenderToolbarItem'], Chris@0: ], Chris@0: 'tab' => [ Chris@0: '#type' => 'link', Chris@0: '#title' => NULL, Chris@0: '#url' => Url::fromRoute(''), Chris@0: ], Chris@0: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Provides markup for associating a tray trigger with a tray element. Chris@0: * Chris@0: * A tray is a responsive container that wraps renderable content. Trays Chris@0: * present content well on small and large screens alike. Chris@0: * Chris@0: * @param array $element Chris@0: * A renderable array. Chris@0: * Chris@0: * @return array Chris@0: * A renderable array. Chris@0: */ Chris@0: public static function preRenderToolbarItem($element) { Chris@0: $id = $element['#id']; Chris@0: Chris@0: // Provide attributes for a toolbar item. Chris@0: $attributes = [ Chris@0: 'id' => $id, Chris@0: ]; Chris@0: Chris@0: // If tray content is present, markup the tray and its associated trigger. Chris@0: if (!empty($element['tray'])) { Chris@0: // Provide attributes necessary for trays. Chris@0: $attributes += [ Chris@0: 'data-toolbar-tray' => $id . '-tray', Chris@0: 'aria-owns' => $id . '-tray', Chris@0: 'role' => 'button', Chris@0: 'aria-pressed' => 'false', Chris@0: ]; Chris@0: Chris@0: // Merge in module-provided attributes. Chris@0: $element['tab'] += ['#attributes' => []]; Chris@0: $element['tab']['#attributes'] += $attributes; Chris@0: $element['tab']['#attributes']['class'][] = 'trigger'; Chris@0: Chris@0: // Provide attributes for the tray theme wrapper. Chris@0: $attributes = [ Chris@0: 'id' => $id . '-tray', Chris@0: 'data-toolbar-tray' => $id . '-tray', Chris@0: ]; Chris@0: // Merge in module-provided attributes. Chris@0: if (!isset($element['tray']['#wrapper_attributes'])) { Chris@0: $element['tray']['#wrapper_attributes'] = []; Chris@0: } Chris@0: $element['tray']['#wrapper_attributes'] += $attributes; Chris@0: $element['tray']['#wrapper_attributes']['class'][] = 'toolbar-tray'; Chris@0: } Chris@0: Chris@0: $element['tab']['#attributes']['class'][] = 'toolbar-item'; Chris@0: Chris@0: return $element; Chris@0: } Chris@0: Chris@0: }