Mercurial > hg > isophonics-drupal-site
diff core/themes/seven/seven.theme @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 7a779792577d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/themes/seven/seven.theme Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,175 @@ +<?php + +/** + * @file + * Functions to support theming in the Seven theme. + */ + +use Drupal\Core\Form\FormStateInterface; + +/** + * Implements hook_preprocess_HOOK() for HTML document templates. + */ +function seven_preprocess_html(&$variables) { + // If on a node add or edit page, add a node-layout class. + $path_args = explode('/', \Drupal::request()->getPathInfo()); + if ($suggestions = theme_get_suggestions($path_args, 'page', '-')) { + foreach ($suggestions as $suggestion) { + if ($suggestion === 'page-node-edit' || strpos($suggestion, 'page-node-add') !== FALSE) { + $variables['attributes']['class'][] = 'node-form-layout'; + } + } + } +} + +/** + * Implements hook_preprocess_HOOK() for menu-local-tasks templates. + * + * Use preprocess hook to set #attached to child elements + * because they will be processed by Twig and drupal_render will + * be invoked. + */ +function seven_preprocess_menu_local_tasks(&$variables) { + if (!empty($variables['primary'])) { + $variables['primary']['#attached'] = [ + 'library' => [ + 'seven/drupal.nav-tabs', + ], + ]; + } + elseif (!empty($variables['secondary'])) { + $variables['secondary']['#attached'] = [ + 'library' => [ + 'seven/drupal.nav-tabs', + ], + ]; + } +} + +/** + * Implements hook_preprocess_HOOK() for menu-local-task templates. + */ +function seven_preprocess_menu_local_task(&$variables) { + $variables['attributes']['class'][] = 'tabs__tab'; +} + +/** + * Implements hook_preprocess_HOOK() for list of available node type templates. + */ +function seven_preprocess_node_add_list(&$variables) { + if (!empty($variables['content'])) { + /** @var \Drupal\node\NodeTypeInterface $type */ + foreach ($variables['content'] as $type) { + $variables['types'][$type->id()]['label'] = $type->label(); + $variables['types'][$type->id()]['url'] = \Drupal::url('node.add', ['node_type' => $type->id()]); + } + } +} + +/** + * Implements hook_preprocess_HOOK() for block content add list templates. + * + * Displays the list of available custom block types for creation, adding + * separate variables for the label and url. + */ +function seven_preprocess_block_content_add_list(&$variables) { + if (!empty($variables['content'])) { + foreach ($variables['content'] as $type) { + $variables['types'][$type->id()]['label'] = $type->label(); + $options = ['query' => \Drupal::request()->query->all()]; + $variables['types'][$type->id()]['url'] = \Drupal::url('block_content.add_form', ['block_content_type' => $type->id()], $options); + } + } +} + +/** + * Implements hook_preprocess_block() for block content. + * + * Disables contextual links for all blocks. + */ +function seven_preprocess_block(&$variables) { + if (isset($variables['title_suffix']['contextual_links'])) { + unset($variables['title_suffix']['contextual_links']); + unset($variables['elements']['#contextual_links']); + + $variables['attributes']['class'] = array_diff($variables['attributes']['class'], ['contextual-region']); + } +} + +/** + * Implements hook_preprocess_HOOK() for block admin page templates. + */ +function seven_preprocess_admin_block_content(&$variables) { + if (!empty($variables['content'])) { + foreach ($variables['content'] as $key => $item) { + $variables['content'][$key]['url'] = $item['url']->toString(); + } + } +} + +/** + * Implements hook_preprocess_HOOK() for menu-local-action templates. + */ +function seven_preprocess_menu_local_action(array &$variables) { + $variables['link']['#options']['attributes']['class'][] = 'button--primary'; + $variables['link']['#options']['attributes']['class'][] = 'button--small'; + + // We require Modernizr's touch test for button styling. + $variables['#attached']['library'][] = 'core/modernizr'; +} + +/** + * 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'; + } +} + +/** + * Implements hook_preprocess_install_page(). + */ +function seven_preprocess_install_page(&$variables) { + // Seven has custom styling for the install page. + $variables['#attached']['library'][] = 'seven/install-page'; +} + +/** + * Implements hook_preprocess_maintenance_page(). + */ +function seven_preprocess_maintenance_page(&$variables) { + // Seven has custom styling for the maintenance page. + $variables['#attached']['library'][] = 'seven/maintenance-page'; +} + +/** + * Implements hook_form_BASE_FORM_ID_alter() for \Drupal\node\NodeForm. + * + * Changes vertical tabs to container. + */ +function seven_form_node_form_alter(&$form, FormStateInterface $form_state) { + $form['#theme'] = ['node_edit_form']; + $form['#attached']['library'][] = 'seven/node-form'; + + $form['advanced']['#type'] = 'container'; + $form['meta']['#type'] = 'container'; + $form['meta']['#access'] = TRUE; + $form['meta']['changed']['#wrapper_attributes']['class'][] = 'container-inline'; + $form['meta']['author']['#wrapper_attributes']['class'][] = 'container-inline'; + + $form['revision_information']['#type'] = 'container'; + $form['revision_information']['#group'] = 'meta'; +} + +/** + * Implements hook_form_BASE_FORM_ID_alter() for \Drupal\media\MediaForm. + */ +function seven_form_media_form_alter(&$form, FormStateInterface $form_state) { + // @todo Revisit after https://www.drupal.org/node/2892304 is in. It + // introduces a footer region to these forms which will allow for us to + // display a top border over the published checkbox by defining a + // media-edit-form.html.twig template the same way node does. + $form['#attached']['library'][] = 'seven/media-form'; +}