Mercurial > hg > cmmr2012-drupal-site
diff core/modules/toolbar/src/Element/ToolbarItem.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/toolbar/src/Element/ToolbarItem.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,87 @@ +<?php + +namespace Drupal\toolbar\Element; + +use Drupal\Core\Render\Element\RenderElement; +use Drupal\Core\Url; + +/** + * Provides a toolbar item that is wrapped in markup for common styling. + * + * The 'tray' property contains a renderable array. + * + * @RenderElement("toolbar_item") + */ +class ToolbarItem extends RenderElement { + + /** + * {@inheritdoc} + */ + public function getInfo() { + $class = get_class($this); + return [ + '#pre_render' => [ + [$class, 'preRenderToolbarItem'], + ], + 'tab' => [ + '#type' => 'link', + '#title' => NULL, + '#url' => Url::fromRoute('<front>'), + ], + ]; + } + + /** + * Provides markup for associating a tray trigger with a tray element. + * + * A tray is a responsive container that wraps renderable content. Trays + * present content well on small and large screens alike. + * + * @param array $element + * A renderable array. + * + * @return array + * A renderable array. + */ + public static function preRenderToolbarItem($element) { + $id = $element['#id']; + + // Provide attributes for a toolbar item. + $attributes = [ + 'id' => $id, + ]; + + // If tray content is present, markup the tray and its associated trigger. + if (!empty($element['tray'])) { + // Provide attributes necessary for trays. + $attributes += [ + 'data-toolbar-tray' => $id . '-tray', + 'aria-owns' => $id . '-tray', + 'role' => 'button', + 'aria-pressed' => 'false', + ]; + + // Merge in module-provided attributes. + $element['tab'] += ['#attributes' => []]; + $element['tab']['#attributes'] += $attributes; + $element['tab']['#attributes']['class'][] = 'trigger'; + + // Provide attributes for the tray theme wrapper. + $attributes = [ + 'id' => $id . '-tray', + 'data-toolbar-tray' => $id . '-tray', + ]; + // Merge in module-provided attributes. + if (!isset($element['tray']['#wrapper_attributes'])) { + $element['tray']['#wrapper_attributes'] = []; + } + $element['tray']['#wrapper_attributes'] += $attributes; + $element['tray']['#wrapper_attributes']['class'][] = 'toolbar-tray'; + } + + $element['tab']['#attributes']['class'][] = 'toolbar-item'; + + return $element; + } + +}