function workspaces_toolbar
Same name in other branches
- 9 core/modules/workspaces/workspaces.module \workspaces_toolbar()
- 8.9.x core/modules/workspaces/workspaces.module \workspaces_toolbar()
- 11.x core/modules/workspaces/workspaces.module \workspaces_toolbar()
Implements hook_toolbar().
File
-
core/
modules/ workspaces/ workspaces.module, line 255
Code
function workspaces_toolbar() {
$items['workspace'] = [
'#cache' => [
'contexts' => [
'user.permissions',
],
],
];
$current_user = \Drupal::currentUser();
if (!$current_user->hasPermission('administer workspaces') && !$current_user->hasPermission('view own workspace') && !$current_user->hasPermission('view any workspace')) {
return $items;
}
/** @var \Drupal\workspaces\WorkspaceInterface $active_workspace */
$active_workspace = \Drupal::service('workspaces.manager')->getActiveWorkspace();
$items['workspace'] += [
'#type' => 'toolbar_item',
'tab' => [
'#lazy_builder' => [
'workspaces.lazy_builders:renderToolbarTab',
[],
],
'#create_placeholder' => TRUE,
'#lazy_builder_preview' => [
'#type' => 'link',
'#title' => $active_workspace ? $active_workspace->label() : t('Live'),
'#url' => Url::fromRoute('entity.workspace.collection'),
'#attributes' => [
'class' => [
'toolbar-tray-lazy-placeholder-link',
],
],
],
],
'#wrapper_attributes' => [
'class' => [
'workspaces-toolbar-tab',
],
],
'#weight' => 500,
];
// Add a special class to the wrapper if we don't have an active workspace so
// we can highlight it with a different color.
if (!$active_workspace) {
$items['workspace']['#wrapper_attributes']['class'][] = 'workspaces-toolbar-tab--is-default';
}
// \Drupal\toolbar\Element\ToolbarItem::preRenderToolbarItem adds an
// #attributes property to each toolbar item's tab child automatically.
// Lazy builders don't support an #attributes property so we need to
// add another render callback to remove the #attributes property. We start by
// adding the defaults, and then we append our own pre render callback.
$items['workspace'] += \Drupal::service('plugin.manager.element_info')->getInfo('toolbar_item');
$items['workspace']['#pre_render'][] = 'workspaces.lazy_builders:removeTabAttributes';
return $items;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.