X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Fincludes%2Ftheme.inc;h=de21bfe9112f5337580878e35138eed235c1ae28;hb=f8fc16ae6b862bef59baaad5d051dd37b7ff11b2;hp=68b10b3e42e758b1f5e7f4938949d00fd3a4672b;hpb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;p=yaffs-website diff --git a/web/core/includes/theme.inc b/web/core/includes/theme.inc index 68b10b3e4..de21bfe91 100644 --- a/web/core/includes/theme.inc +++ b/web/core/includes/theme.inc @@ -12,7 +12,6 @@ use Drupal\Component\Serialization\Json; use Drupal\Component\Utility\Crypt; use Drupal\Component\Utility\Html; use Drupal\Component\Render\MarkupInterface; -use Drupal\Component\Utility\Unicode; use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Config\Config; use Drupal\Core\Config\StorageException; @@ -344,7 +343,8 @@ function theme_get_setting($setting_name, $theme = NULL) { // Generate the path to the logo image. if ($cache[$theme]->get('logo.use_default')) { - $cache[$theme]->set('logo.url', file_url_transform_relative(file_create_url($theme_object->getPath() . '/logo.svg'))); + $logo = \Drupal::service('theme.initialization')->getActiveThemeByName($theme)->getLogo(); + $cache[$theme]->set('logo.url', file_url_transform_relative(file_create_url($logo))); } elseif ($logo_path = $cache[$theme]->get('logo.path')) { $cache[$theme]->set('logo.url', file_url_transform_relative(file_create_url($logo_path))); @@ -485,7 +485,7 @@ function theme_settings_convert_to_config(array $theme_settings, Config $config) $config->set('favicon.mimetype', $value); } elseif (substr($key, 0, 7) == 'toggle_') { - $config->set('features.' . Unicode::substr($key, 7), $value); + $config->set('features.' . mb_substr($key, 7), $value); } elseif (!in_array($key, ['theme', 'logo_upload'])) { $config->set($key, $value); @@ -570,6 +570,11 @@ function template_preprocess_datetime_wrapper(&$variables) { if (!empty($element['#title'])) { $variables['title'] = $element['#title']; + // If the element title is a string, wrap it a render array so that markup + // will not be escaped (but XSS-filtered). + if (is_string($variables['title']) && $variables['title'] !== '') { + $variables['title'] = ['#markup' => $variables['title']]; + } } // Suppress error messages. @@ -624,16 +629,12 @@ function template_preprocess_datetime_wrapper(&$variables) { * of links. * - set_active_class: (optional) Whether each link should compare the * route_name + route_parameters or href (path), language and query options - * to the current URL, to determine whether the link is "active". If so, an - * "active" class will be applied to the list item containing the link, as - * well as the link itself. It is important to use this sparingly since it - * is usually unnecessary and requires extra processing. - * For anonymous users, the "active" class will be calculated on the server, - * because most sites serve each anonymous user the same cached page anyway. - * For authenticated users, the "active" class will be calculated on the - * client (through JavaScript), only data- attributes are added to list - * items and contained links, to prevent breaking the render cache. The - * JavaScript is added in system_page_attachments(). + * to the current URL, to determine whether the link is "active". If so, + * attributes will be added to the HTML elements for both the link and the + * list item that contains it, which will result in an "is-active" class + * being added to both. The class is added via JavaScript for authenticated + * users (in the active-link library), and via PHP for anonymous users (in + * the \Drupal\Core\EventSubscriber\ActiveLinkResponseFilter class). * - heading: (optional) A heading to precede the links. May be an * associative array or a string. If it's an array, it can have the * following elements: @@ -693,7 +694,16 @@ function template_preprocess_links(&$variables) { ]; // Handle links and ensure that the active class is added on the LIs, but - // only if the 'set_active_class' option is not empty. + // only if the 'set_active_class' option is not empty. Links templates + // duplicate the "is-active" class handling of l() and + // LinkGenerator::generate() because they need to be able to set the + // "is-active" class not on the links themselves ( tags), but on the + // list items (
  • tags) that contain the links. This is necessary for + // CSS to be able to style list items differently when the link is active, + // since CSS does not yet allow one to style list items only if they + // contain a certain element with a certain class. That is, we cannot yet + // convert this jQuery selector to a CSS selector: + // jQuery('li:has("a.is-active")') if (isset($link['url'])) { if (!empty($variables['set_active_class'])) { @@ -706,6 +716,8 @@ function template_preprocess_links(&$variables) { // Add a "data-drupal-link-query" attribute to let the // drupal.active-link library know the query in a standardized manner. + // Only add the data- attribute. The "is-active" class will be + // calculated using JavaScript, to prevent breaking the render cache. if (!empty($link['query'])) { $query = $link['query']; ksort($query); @@ -716,7 +728,10 @@ function template_preprocess_links(&$variables) { $url = $link['url']; if ($url->isRouted()) { // Add a "data-drupal-link-system-path" attribute to let the - // drupal.active-link library know the path in a standardized manner. + // drupal.active-link library know the path in a standardized + // manner. Only add the data- attribute. The "is-active" class will + // be calculated using JavaScript, to prevent breaking the render + // cache. $system_path = $url->getInternalPath(); // @todo System path is deprecated - use the route name and parameters. // Special case for the front page. @@ -1190,10 +1205,9 @@ function template_preprocess_maintenance_task_list(&$variables) { /** * Adds a default set of helper variables for preprocessors and templates. * - * This function is called for theme hooks implemented as templates only, not - * for theme hooks implemented as functions. This preprocess function is the - * first in the sequence of preprocessing functions that are called when - * preparing variables for a template. + * This function is called for every theme hook. It is the first in the + * sequence of preprocessing functions called when preparing variables for a + * template. * * See the @link themeable Default theme implementations topic @endlink for * details. @@ -1357,9 +1371,9 @@ function template_preprocess_page(&$variables) { } } - $variables['base_path'] = base_path(); - $variables['front_page'] = \Drupal::url(''); - $variables['language'] = $language_interface; + $variables['base_path'] = base_path(); + $variables['front_page'] = \Drupal::url(''); + $variables['language'] = $language_interface; // An exception might be thrown. try {