Newer
Older
Dries Buytaert
committed
<?php
Dries Buytaert
committed
/**
Jennifer Hodgdon
committed
* @file
* Functions to support theming in the Seven theme.
*/
Angie Byron
committed
use Drupal\Component\Utility\Xss;
Angie Byron
committed
use Drupal\Component\Utility\String;
/**
* Implements hook_preprocess_HOOK() for page templates.
*/
function seven_preprocess_page(&$variables) {
/** @var \Drupal\Core\Page\HtmlPage $page_object */
$page_object = $variables['page']['#page'];
$attributes = $page_object->getBodyAttributes();
$classes = $attributes['class'];
// Add information about the number of sidebars.
if (!empty($variables['page']['sidebar_first'])) {
Angie Byron
committed
$classes[] = 'layout-one-sidebar';
$classes[] = 'layout-sidebar-first';
}
else {
Angie Byron
committed
$classes[] = 'layout-no-sidebars';
}
$attributes['class'] = $classes;
catch
committed
$variables['primary_local_tasks'] = $variables['tabs'];
unset($variables['primary_local_tasks']['#secondary']);
$variables['secondary_local_tasks'] = array(
'#theme' => 'menu_local_tasks',
catch
committed
'#secondary' => isset($variables['tabs']['#secondary']) ? $variables['tabs']['#secondary'] : '',
);
Dries Buytaert
committed
}
Angie Byron
committed
/**
* Overrides theme_menu_local_tasks().
*
* Returns HTML for primary and secondary local tasks.
Alex Pott
committed
*/
Angie Byron
committed
function seven_menu_local_tasks(&$variables) {
$output = '';
if (!empty($variables['primary'])) {
$variables['primary']['#attached'] = array(
'library' => array(
'seven/drupal.nav-tabs',
Angie Byron
committed
),
);
$variables['primary']['#prefix'] = '<h2 id="primary-tabs-title" class="visually-hidden">' . t('Primary tabs') . '</h2>';
$variables['primary']['#prefix'] .= '<nav role="navigation" class="is-horizontal is-collapsible" aria-labelledby="primary-tabs-title" data-drupal-nav-tabs>';
$variables['primary']['#prefix'] .= '<button class="reset-appearance tabs__tab tabs__trigger" aria-label="Primary tabs display toggle" data-drupal-nav-tabs-trigger>•••</button>';
$variables['primary']['#prefix'] .= '<ul class="tabs primary clearfix" data-drupal-nav-tabs-target>';
$variables['primary']['#suffix'] = '</ul>';
$variables['primary']['#suffix'] .= '</nav>';
$output .= drupal_render($variables['primary']);
}
if (!empty($variables['secondary'])) {
$variables['secondary']['#attached'] = array(
'library' => array(
'seven/drupal.nav-tabs',
Angie Byron
committed
),
);
$variables['secondary']['#prefix'] = '<h2 id="secondary-tabs-title" class="visually-hidden">' . t('Secondary tabs') . '</h2>';
$variables['secondary']['#prefix'] .= '<nav role="navigation" class="is-horizontal" aria-labelledby="secondary-tabs-title" data-drupal-nav-tabs>';
$variables['secondary']['#prefix'] .= '<ul class="tabs secondary clearfix">';
$variables['secondary']['#suffix'] = '</ul>';
$variables['secondary']['#suffix'] .= '</nav>';
$output .= drupal_render($variables['secondary']);
}
return $output;
}
/**
* Overrides theme_menu_local_task().
*
* Returns HTML for a local task.
Alex Pott
committed
*/
Angie Byron
committed
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
function seven_menu_local_task($variables) {
$link = $variables['element']['#link'];
$link += array(
'localized_options' => array(),
);
$link_text = $link['title'];
if (!empty($variables['element']['#active'])) {
// Add text to indicate active tab for non-visual users.
$active = '<span class="visually-hidden">' . t('(active tab)') . '</span>';
// If the link does not contain HTML already, String::checkPlain() it now.
// After we set 'html'=TRUE the link will not be sanitized by l().
if (empty($link['localized_options']['html'])) {
$link['title'] = String::checkPlain($link['title']);
}
$link['localized_options']['html'] = TRUE;
$link_text = t('!local-task-title!active', array('!local-task-title' => $link['title'], '!active' => $active));
}
if (!empty($link['href'])) {
// @todo - remove this once all pages are converted to routes.
$a_tag = l($link_text, $link['href'], $link['localized_options']);
}
else {
$a_tag = \Drupal::l($link_text, $link['route_name'], $link['route_parameters'], $link['localized_options']);
}
return '<li' . (!empty($variables['element']['#active']) ? ' class="tabs__tab active"' : ' class="tabs__tab"') . '>' . $a_tag . '</li>';
}
Dries Buytaert
committed
/**
* Implements hook_preprocess_HOOK() for list of available node type templates.
Dries Buytaert
committed
*/
function seven_preprocess_node_add_list(&$variables) {
if (!empty($variables['content'])) {
foreach ($variables['content'] as $type) {
$variables['types'][$type->type]['label'] = String::checkPlain($type->name);
$variables['types'][$type->type]['description'] = Xss::filterAdmin($type->description);
$variables['types'][$type->type]['url'] = \Drupal::url('node.add', array('node_type' => $type->type));
Dries Buytaert
committed
}
}
}
Dries Buytaert
committed
/**
* Implements hook_preprocess_HOOK() for block content add list templates.
Dries Buytaert
committed
*
* Displays the list of available custom block types for creation, adding
* separate variables for the label, description, and url.
Dries Buytaert
committed
*/
function seven_preprocess_block_content_add_list(&$variables) {
if (!empty($variables['content'])) {
foreach ($variables['content'] as $type) {
$variables['types'][$type->id()]['label'] = String::checkPlain($type->label());
$variables['types'][$type->id()]['description'] = Xss::filterAdmin($type->description);
$options = array('query' => \Drupal::request()->query->all());
$variables['types'][$type->id()]['url'] = \Drupal::url('block_content.add_form', array('block_content_type' => $type->id()), $options);
Dries Buytaert
committed
}
}
}
Dries Buytaert
committed
/**
* Implements hook_preprocess_HOOK() for block admin page templates.
Dries Buytaert
committed
*/
function seven_preprocess_admin_block_content(&$variables) {
if (!empty($variables['content'])) {
foreach ($variables['content'] as $key => $item) {
$variables['content'][$key]['url'] = $item['url']->toString();
Dries Buytaert
committed
}
}
}
/**
* Implements hook_preprocess_HOOK() for tablesort indicator templates.
Dries Buytaert
committed
*
Jennifer Hodgdon
committed
* Uses Seven's image versions, so the arrows show up as black and not gray on
* gray.
Dries Buytaert
committed
*/
function seven_preprocess_tablesort_indicator(&$variables) {
Dries Buytaert
committed
$theme_path = drupal_get_path('theme', 'seven');
$variables['arrow_asc'] = file_create_url($theme_path . '/images/arrow-asc.png');
$variables['arrow_desc'] = file_create_url($theme_path . '/images/arrow-desc.png');
Dries Buytaert
committed
}
Dries Buytaert
committed
Angie Byron
committed
/**
* Overrides theme_menu_local_action().
*/
function seven_menu_local_action($variables) {
$link = $variables['element']['#link'];
$link += array(
'href' => '',
'localized_options' => array(),
'route_parameters' => array(),
);
$link['localized_options']['attributes']['class'][] = 'button';
$link['localized_options']['attributes']['class'][] = 'button--primary';
$link['localized_options']['attributes']['class'][] = 'button--small';
// @todo Replace with a generalized solution for icons.
// See http://drupal.org/node/1849712
$link['localized_options']['attributes']['class'][] = 'button-action';
// We require Modernizr's touch test for button styling.
$libraries = array(
'#attached' => array(
'library' => array(
'core/modernizr',
Angie Byron
committed
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
),
),
);
drupal_render($libraries);
$output = '<li>';
// @todo Remove this check and the call to l() when all pages are converted to
// routes.
// @todo Figure out how to support local actions without a href properly.
if ($link['href'] === '' && !empty($link['route_name'])) {
$output .= Drupal::l($link['title'], $link['route_name'], $link['route_parameters'], $link['localized_options']);
}
else {
$output .= l($link['title'], $link['href'], $link['localized_options']);
}
$output .= "</li>";
return $output;
}
/**
* Implements hook_element_info_alter().
*/
function seven_element_info_alter(&$type) {
// We require Modernizr for button styling.
if (isset($type['button'])) {
$type['button']['#attached']['library'][] = 'core/modernizr';
Angie Byron
committed
}
}
Angie Byron
committed
/**
* Implements hook_preprocess_install_page().
*/
function seven_preprocess_install_page(&$variables) {
Angie Byron
committed
$page_object = $variables['page']['#page'];
$attributes = $page_object->getHtmlAttributes();
$classes = $attributes['class'];
$classes[] = 'install-background';
$attributes['class'] = $classes;
// Normally we could attach libraries via hook_page_alter(), but when the
// database is inactive it's not called so we add them here.
$libraries = array(
'#attached' => array(
'library' => array(
'seven/maintenance-page',
'seven/install-page',
),
),
);
drupal_render($libraries);
}
/**
* Implements hook_preprocess_maintenance_page().
*/
function seven_preprocess_maintenance_page(&$variables) {
Angie Byron
committed
$page_object = $variables['page']['#page'];
$attributes = $page_object->getHtmlAttributes();
$classes = $attributes['class'];
$classes[] = 'maintenance-background';
$attributes['class'] = $classes;
// // Normally we could attach libraries via hook_page_alter(), but when the
// // database is inactive it's not called so we add them here.
$libraries = array(
'#attached' => array(
'library' => array(
'seven/maintenance-page',
),
),
);
drupal_render($libraries);
Angie Byron
committed
}
Angie Byron
committed
/**
* Implements hook_form_BASE_FORM_ID_alter().
*
* Changes vertical tabs to container and adds meta information.
*/
function seven_form_node_form_alter(&$form, &$form_state) {
/** @var \Drupal\node\NodeInterface $node */
$node = $form_state['controller']->getEntity();
Angie Byron
committed
Dries Buytaert
committed
$form['#theme'] = array('node_edit_form');
$form['#attached']['css'][] = drupal_get_path('module', 'node') . '/css/node.module.css';
Dries Buytaert
committed
Angie Byron
committed
$form['advanced']['#type'] = 'container';
Angie Byron
committed
$is_new = !$node->isNew() ? format_date($node->getChangedTime(), 'short') : t('Not saved yet');
Alex Pott
committed
$form['meta'] = array(
Angie Byron
committed
'#attributes' => array('class' => array('entity-meta-header')),
'#type' => 'container',
'#group' => 'advanced',
'#weight' => -100,
'published' => array(
'#type' => 'item',
'#wrapper_attributes' => array('class' => array('published')),
'#markup' => $node->isPublished() ? t('Published') : t('Not published'),
'#access' => !$node->isNew(),
Angie Byron
committed
),
'changed' => array(
'#type' => 'item',
'#wrapper_attributes' => array('class' => array('changed', 'container-inline')),
Angie Byron
committed
'#markup' => '<h4 class="label inline">' . t('Last saved') . '</h4> ' . $is_new,
Angie Byron
committed
),
'author' => array(
'#type' => 'item',
'#wrapper_attributes' => array('class' => array('author', 'container-inline')),
Angie Byron
committed
'#markup' => '<h4 class="label inline">' . t('Author') . '</h4> ' . $node->getOwner()->getUsername(),
Angie Byron
committed
),
);
$form['revision_information']['#type'] = 'container';
$form['revision_information']['#group'] = 'meta';
}