diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index d335e651d78cf4ca962aec698e291767c766d6e2..74f82baca8490e6a1b623b3cdd24814538cf2628 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -910,6 +910,7 @@ function install_display_output($output, $install_state) {
'#theme' => 'task_list',
'#items' => install_tasks_to_display($install_state),
'#active' => $active_task,
+ '#variant' => 'install',
);
drupal_add_region_content('sidebar_first', drupal_render($task_list));
}
diff --git a/core/includes/theme.maintenance.inc b/core/includes/theme.maintenance.inc
index 57183d6d4baea62469c10fcf208d63676e1b84dc..d3023b9a65f51f20c194a54819643cc152896ad8 100644
--- a/core/includes/theme.maintenance.inc
+++ b/core/includes/theme.maintenance.inc
@@ -109,16 +109,23 @@ function _drupal_maintenance_theme() {
* An associative array containing:
* - items: An associative array of maintenance tasks.
* - active: The key for the currently active maintenance task.
+ * - variant: A variant name to be used for a CSS class.
*
* @ingroup themeable
*/
function theme_task_list($variables) {
$items = $variables['items'];
$active = $variables['active'];
+ if (isset($variables['variant'])) {
+ $class = $variables['variant'] . '-task-list';
+ }
+ else {
+ $class = 'task-list';
+ }
$done = isset($items[$active]) || $active == NULL;
$output = '
Installation tasks
';
- $output .= '';
+ $output .= '';
foreach ($items as $k => $item) {
if ($active == $k) {
diff --git a/core/lib/Drupal/Component/Utility/Unicode.php b/core/lib/Drupal/Component/Utility/Unicode.php
index f819abd516c9885969977f548c1fa4b4132c611f..c5e0d82e9ac029d7efe86f93b24eb144afcbd280 100644
--- a/core/lib/Drupal/Component/Utility/Unicode.php
+++ b/core/lib/Drupal/Component/Utility/Unicode.php
@@ -258,7 +258,7 @@ public static function strlen($text) {
}
/**
- * Converts a UTF-8 string to uppercase.
+ * Uppercase a UTF-8 string.
*
* @param string $text
* The string to run the operation on.
@@ -280,7 +280,7 @@ public static function strtoupper($text) {
}
/**
- * Converts a UTF-8 string to lowercase.
+ * Lowercase a UTF-8 string.
*
* @param string $text
* The string to run the operation on.
@@ -302,52 +302,18 @@ public static function strtolower($text) {
}
/**
- * Capitalizes the first character of a UTF-8 string.
+ * Capitalizes the first letter of a UTF-8 string.
*
* @param string $text
* The string to convert.
*
* @return string
- * The string with the first character as uppercase.
+ * The string with the first letter as uppercase.
*/
public static function ucfirst($text) {
return static::strtoupper(static::substr($text, 0, 1)) . static::substr($text, 1);
}
- /**
- * Converts the first character of a UTF-8 string to lowercase.
- *
- * @param string $text
- * The string that will be converted.
- *
- * @return string
- * The string with the first character as lowercase.
- *
- * @ingroup php_wrappers
- */
- public static function lcfirst($text) {
- // Note: no mbstring equivalent!
- return static::strtolower(static::substr($text, 0, 1)) . static::substr($text, 1);
- }
-
- /**
- * Capitalizes the first character of each word in a UTF-8 string.
- *
- * @param string $text
- * The text that will be converted.
- *
- * @return string
- * The input $text with each word capitalized.
- *
- * @ingroup php_wrappers
- */
- public static function ucwords($text) {
- $regex = '/(^|[' . static::PREG_CLASS_WORD_BOUNDARY . '])([^' . static::PREG_CLASS_WORD_BOUNDARY . '])/u';
- return preg_replace_callback($regex, function(array $matches) {
- return $matches[1] . Unicode::strtoupper($matches[2]);
- }, $text);
- }
-
/**
* Cuts off a piece of a string based on character indices and counts.
*
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php
index ca764ab8e70375667feae98621ebee36cfba5be1..2b02ab0e0c1ab5d30819a19433dc48986b719ef1 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php
@@ -263,9 +263,14 @@ protected function caseTransform($string, $option) {
case 'lower':
return drupal_strtolower($string);
case 'ucfirst':
- return Unicode::ucfirst($string);
+ return drupal_strtoupper(drupal_substr($string, 0, 1)) . drupal_substr($string, 1);
case 'ucwords':
- return Unicode::ucwords($string);
+ if (Unicode::getStatus() == Unicode::STATUS_MULTIBYTE) {
+ return mb_convert_case($string, MB_CASE_TITLE);
+ }
+ else {
+ return ucwords($string);
+ }
}
}
diff --git a/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php b/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php
index 350fa25301af7919630f1a64c72d8e72668713ad..ee45829bb07cb5c2ac82d1cfc874fd2283251409 100644
--- a/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php
@@ -193,70 +193,6 @@ public function providerUcfirst() {
);
}
- /**
- * Tests Unicode::lcfirst().
- *
- * @dataProvider providerLcfirst
- */
- public function testLcfirst($text, $expected, $multibyte = FALSE) {
- $status = $multibyte ? Unicode::STATUS_MULTIBYTE : Unicode::STATUS_SINGLEBYTE;
- Unicode::setStatus($status);
- $this->assertEquals($expected, Unicode::lcfirst($text));
- }
-
- /**
- * Data provider for testLcfirst().
- *
- * @see testLcfirst()
- *
- * @return array
- * An array containing a string, its lowercase version and whether it should
- * be processed as multibyte.
- */
- public function providerLcfirst() {
- return array(
- array('tHe QUIcK bRoWn', 'tHe QUIcK bRoWn'),
- array('FrançAIS is ÜBER-åwesome', 'françAIS is ÜBER-åwesome'),
- array('Über', 'über'),
- array('Åwesome', 'åwesome'),
- // Add a multibyte string.
- array('ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΣὨ', 'αΒΓΔΕΖΗΘΙΚΛΜΝΞΟΣὨ', TRUE),
- );
- }
-
- /**
- * Tests Unicode::ucwords().
- *
- * @dataProvider providerUcwords
- */
- public function testUcwords($text, $expected, $multibyte = FALSE) {
- $status = $multibyte ? Unicode::STATUS_MULTIBYTE : Unicode::STATUS_SINGLEBYTE;
- Unicode::setStatus($status);
- $this->assertEquals($expected, Unicode::ucwords($text));
- }
-
- /**
- * Data provider for testUcwords().
- *
- * @see testUcwords()
- *
- * @return array
- * An array containing a string, its capitalized version and whether it should
- * be processed as multibyte.
- */
- public function providerUcwords() {
- return array(
- array('tHe QUIcK bRoWn', 'THe QUIcK BRoWn'),
- array('françAIS', 'FrançAIS'),
- array('über', 'Über'),
- array('åwesome', 'Åwesome'),
- // Make sure we don't mangle extra spaces.
- array('frànçAIS is über-åwesome', 'FrànçAIS Is Über-Åwesome'),
- // Add a multibyte string.
- array('σion', 'Σion', TRUE),
- );
- }
-
/**
* Tests Unicode::strlen().
*
diff --git a/core/themes/seven/install-page.css b/core/themes/seven/install-page.css
index 5c3bf83c48fb69bcec06fcd58985015898c5bb85..7981932a6db93ec40a87398887894dbe45a33108 100644
--- a/core/themes/seven/install-page.css
+++ b/core/themes/seven/install-page.css
@@ -23,6 +23,171 @@
background-position: left top, 50% 50%;
min-height: 100%;
}
+.install-page {
+ background: none;
+}
+.name-and-slogan h1 {
+ font-size: 2em;
+ line-height: 1.2em;
+ color: #0074bd;
+}
+
+/**
+ * Layout
+ */
+.install-page .l-container {
+ background: #fff;
+ width: auto;
+ margin-left: 1.25em;
+ margin-right: 1.25em;
+}
+.install-page .l-container:after { /* no reason for a clearfix in the markup */
+ content: "";
+ display: table;
+ clear: both;
+}
+@media all and (max-width: 48em) { /* 768px */
+ .install-page .l-container {
+ margin-top: 1.25em;
+ padding: 10px 20px 0;
+ }
+ .install-page .name-and-slogan {
+ margin: 0 0 1.45em 0;
+ }
+}
+
+@media all and (min-width: 48em) { /* 768px */
+ html {
+ display: table;
+ }
+ .install-page {
+ display: table-cell;
+ padding: 1em 0;
+ vertical-align: middle;
+ }
+ html, .install-page {
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ }
+ .install-page .l-container {
+ margin: 0 auto;
+ max-width: 770px;
+ width: 75%;
+ border-radius: 5px;
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
+ padding: 20px 0 40px 0;
+ }
+
+ /* Positioning sidebar & content */
+ .install-page [role="main"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ clear: none;
+ float: left;
+ padding-left: 3.85em;
+ padding-right: 3.85em;
+ width: 65%;
+ }
+ [dir="rtl"] .install-page [role="main"] {
+ float: right;
+ }
+ ul {
+ padding: 15px;
+ margin: 0.25em 0;
+ }
+ .install-page .l-sidebar-first {
+ float: left;
+ width: 35%;
+ }
+ [dir="rtl"] .install-page .l-sidebar-first {
+ float: right;
+ }
+
+ /* Margins for sitename */
+ .install-page .name-and-slogan h1 {
+ margin: 0.75em 0 0.75em 1.9em; /* LTR */
+ }
+ [dir="rtl"] .install-page .name-and-slogan h1 {
+ margin: 0.75em 1.9em 0.75em 0;
+ }
+}
+
+/**
+ * Task list & step indicator
+ */
+@media all and (max-width: 48em) { /* 768px */
+ header[role="banner"] {
+ position: relative;
+ }
+ .step-indicator {
+ display: block;
+ font-size: 1.385em;
+ position: absolute;
+ top: 0.2em;
+ right: 0.5em;
+ }
+ [dir="rtl"] .step-indicator {
+ left: 2em;
+ right: auto;
+ }
+ .install-task-list {
+ display: none;
+ }
+}
+
+@media all and (min-width: 48em) { /* 768px */
+ .step-indicator {
+ display: none;
+ }
+ .install-task-list {
+ margin-left: 0; /* LTR */
+ list-style-type: none;
+ list-style-image: none;
+ padding-left: 0; /* LTR */
+ padding-bottom: 1em;
+ }
+ [dir="rtl"] .install-task-list {
+ margin-right: 0;
+ padding-right: 0;
+ }
+ .install-task-list li {
+ padding: 0.5em 1em 0.5em 3.85em; /* LTR */
+ color: #1a1a1a;
+ }
+ [dir="rtl"] .install-task-list li {
+ padding: 0.5em 1em 0.5em 1em;
+ }
+ .install-task-list .active {
+ background: #ebeae4;
+ position: relative;
+ font-weight: normal;
+ }
+ .install-task-list .active:after {
+ left: 100%; /* LTR */
+ border: solid transparent;
+ border-color: rgba(235, 234, 228, 0);
+ border-left-color: #ebeae4; /* LTR */
+ border-width: 1.35em;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ top: 50%;
+ margin-top: -1.32em;
+ }
+ [dir="rtl"] .install-task-list .active:after {
+ left: auto;
+ right: 100%;
+ border-left-color: transparent;
+ border-right-color: #ebeae4;
+ }
+ .install-task-list .done {
+ color: #adadad;
+ }
+}
/**
* Password widget
diff --git a/core/themes/seven/js/mobile.install.js b/core/themes/seven/js/mobile.install.js
index 28268bfe0d7ef89b18e71684cfa3996e56b9f2de..2326c241f6275dcfb22cc7375fb4756469a60b56 100644
--- a/core/themes/seven/js/mobile.install.js
+++ b/core/themes/seven/js/mobile.install.js
@@ -16,7 +16,7 @@
}
function installStepsSetup () {
- var steps = document.querySelectorAll('.task-list li');
+ var steps = document.querySelectorAll('.install-task-list li');
if (steps.length) {
var header = document.querySelector('header[role="banner"]');
var stepIndicator = document.createElement('div');
diff --git a/core/themes/seven/maintenance-page.css b/core/themes/seven/maintenance-page.css
deleted file mode 100644
index bc56fa065b57e6077a25b98eef785b66b60762df..0000000000000000000000000000000000000000
--- a/core/themes/seven/maintenance-page.css
+++ /dev/null
@@ -1,184 +0,0 @@
-/**
- * @file
- * Maintenance theming.
- */
-.maintenance-background {
- background-color: #e0e0d8;
- background-image: -webkit-radial-gradient(hsl(203, 2%, 90%), hsl(203, 2%, 95%));
- background-image: -moz-radial-gradient(hsl(203, 2%, 90%), hsl(203, 2%, 95%));
- background-image: -o-radial-gradient(hsl(203, 2%, 90%), hsl(203, 2%, 95%));
- background-image: radial-gradient(hsl(203, 2%, 90%), hsl(203, 2%, 95%));
- background-repeat: repeat;
- background-position: left top, 50% 50%;
- min-height: 100%;
-}
-
-/* Maintenance theming */
-.install-page,
-.in-maintenance {
- background: none;
-}
-.name-and-slogan h1 {
- font-size: 2em;
- line-height: 1.2em;
- color: #0074bd;
-}
-
-/**
- * Task list & step indicator
- */
-@media all and (max-width: 48em) { /* 768px */
- header[role="banner"] {
- position: relative;
- }
- .step-indicator {
- display: block;
- font-size: 1.385em;
- position: absolute;
- top: 0.2em;
- right: 0.5em;
- }
- [dir="rtl"] .step-indicator {
- left: 2em;
- right: auto;
- }
- .task-list {
- display: none;
- }
-}
-
-@media all and (min-width: 48em) { /* 768px */
- .step-indicator {
- display: none;
- }
- .task-list {
- margin-left: 0; /* LTR */
- list-style-type: none;
- list-style-image: none;
- padding-left: 0; /* LTR */
- padding-bottom: 1em;
- }
- [dir="rtl"] .task-list {
- margin-right: 0;
- padding-right: 0;
- }
- .task-list li {
- padding: 0.5em 1em 0.5em 3.85em; /* LTR */
- color: #1a1a1a;
- }
- [dir="rtl"] .task-list li {
- padding: 0.5em 1em 0.5em 1em;
- }
- .task-list .active {
- background: #ebeae4;
- position: relative;
- font-weight: normal;
- }
- .task-list .active:after {
- left: 100%; /* LTR */
- border: solid transparent;
- border-color: rgba(235, 234, 228, 0);
- border-left-color: #ebeae4; /* LTR */
- border-width: 1.35em;
- content: " ";
- height: 0;
- width: 0;
- position: absolute;
- pointer-events: none;
- top: 50%;
- margin-top: -1.32em;
- }
- [dir="rtl"] .task-list .active:after {
- left: auto;
- right: 100%;
- border-left-color: transparent;
- border-right-color: #ebeae4;
- }
- .task-list .done {
- color: #adadad;
- }
-}
-
-/**
- * Layout
- */
-.l-container {
- background: #fff;
- width: auto;
- margin-left: 1.25em;
- margin-right: 1.25em;
-}
-.l-container:after { /* no reason for a clearfix in the markup */
- content: "";
- display: table;
- clear: both;
-}
-@media all and (max-width: 48em) { /* 768px */
- .l-container {
- margin: 1.25em;
- padding: 10px 20px;
- }
- .name-and-slogan {
- margin: 0 0 1.45em 0;
- }
-}
-
-@media all and (min-width: 48em) { /* 768px */
- html {
- display: table;
- }
- .in-maintenance,
- .install-page {
- display: table-cell;
- padding: 1em 0;
- vertical-align: middle;
- }
- html, .install-page, .in-maintenance {
- margin: 0;
- width: 100%;
- height: 100%;
- }
- .l-container {
- margin: 0 auto;
- max-width: 770px;
- width: 75%;
- border-radius: 5px;
- box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
- padding: 20px 0 40px 0;
- }
-
- /* Positioning sidebar & content */
- main {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- clear: none;
- float: left;
- padding-left: 3.85em;
- padding-right: 3.85em;
- width: 65%;
- }
- [dir="rtl"] main {
- float: right;
- }
- ul {
- padding: 15px;
- margin: 0.25em 0;
- }
- .l-sidebar-first {
- float: left;
- width: 35%;
- }
- [dir="rtl"] .l-sidebar-first {
- float: right;
- }
-
- /* Margins for sitename */
- h1.page-title,
- .name-and-slogan h1 {
- margin: 0.75em 0 0.75em 1.9em; /* LTR */
- }
- [dir="rtl"] .name-and-slogan h1 {
- margin: 0.75em 1.9em 0.75em 0;
- }
-}
diff --git a/core/themes/seven/seven.base.css b/core/themes/seven/seven.base.css
index 844712dad19701258842a953b4ee6f234c58c436..59f4d5e5f5a3b303fbb884d69b944649ddd569fc 100644
--- a/core/themes/seven/seven.base.css
+++ b/core/themes/seven/seven.base.css
@@ -116,7 +116,6 @@ ul {
ol {
list-style-type: decimal;
margin: 0.25em 0 0.25em 2em; /* LTR */
- padding: 0;
}
[dir="rtl"] ol {
margin: 0.25em 2em 0.25em 0;
diff --git a/core/themes/seven/seven.libraries.yml b/core/themes/seven/seven.libraries.yml
index fb22ac1287a4147a06f2c6e049fc9b33627c93f8..4d0dac11c48a7e52d429d1fdcb881941edcac80e 100644
--- a/core/themes/seven/seven.libraries.yml
+++ b/core/themes/seven/seven.libraries.yml
@@ -1,13 +1,3 @@
-maintenance-page:
- version: VERSION
- js:
- js/mobile.install.js: {}
- css:
- theme:
- maintenance-page.css: {}
- dependencies:
- - system/maintenance
-
install-page:
version: VERSION
js:
diff --git a/core/themes/seven/seven.theme b/core/themes/seven/seven.theme
index c0a5a086817eded0996e2b55dabe98793fb0c475..6f5ce6b3f0c01933c714956ad96eeae092199257 100644
--- a/core/themes/seven/seven.theme
+++ b/core/themes/seven/seven.theme
@@ -274,32 +274,7 @@ function seven_preprocess_install_page(&$variables) {
// 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) {
- $variables['styles'] = new RenderWrapper('drupal_get_css');
- $variables['scripts'] = new RenderWrapper('drupal_get_js');
- // // 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',
- ),
- ),
- );
+ $libraries['#attached']['library'][] = 'seven/install-page';
drupal_render($libraries);
}
diff --git a/core/themes/seven/style.css b/core/themes/seven/style.css
index 95daa9605966cd7a3ad241ff47ac8ff7d8334108..5bd29b00f97937b06b07f9e9ec0f251646ec6b64 100644
--- a/core/themes/seven/style.css
+++ b/core/themes/seven/style.css
@@ -999,6 +999,87 @@ div.admin-options div.form-item {
border: none;
}
+/* Maintenance theming */
+body.in-maintenance #sidebar-first {
+ float: left; /* LTR */
+ max-width: 200px;
+ width: 25%;
+}
+[dir="rtl"] body.in-maintenance #sidebar-first {
+ float: right;
+}
+body.in-maintenance #content {
+ float: right; /* LTR */
+ clear: none;
+ width: 72%;
+}
+[dir="rtl"] body.in-maintenance #content {
+ float: left;
+}
+body.in-maintenance #page {
+ max-width: 770px;
+ margin: 0 auto;
+ padding-top: 2em;
+ width: 90%;
+}
+body.in-maintenance .branding__inner {
+ max-width: 770px;
+ margin: 0 auto;
+ float: none;
+ width: 90%;
+}
+body.in-maintenance .form-radios .form-type-radio {
+ padding: 2px 0;
+}
+body.in-maintenance div.form-item:after {
+ content: "";
+ display: none;
+ clear: none;
+}
+body.in-maintenance .form-submit {
+ display: block;
+}
+body.in-maintenance #logo {
+ margin-bottom: 1.5em;
+ max-width: 180px;
+}
+@media all and (max-width: 768px) {
+ body.in-maintenance #sidebar-first,
+ body.in-maintenance #content {
+ float: none;
+ max-width: none;
+ width: auto;
+ }
+}
+.task-list {
+ margin-left: 0; /* LTR */
+ list-style-type: none;
+ list-style-image: none;
+}
+[dir="rtl"] .task-list {
+ margin-right: 0;
+}
+.task-list li {
+ padding: 0.5em 1em 0.5em 20px; /* LTR */
+ color: #adadad;
+}
+[dir="rtl"] .task-list li {
+ padding: 0.5em 20px 0.5em 1em;
+}
+.task-list li.active {
+ background: transparent url(images/task-item.png) no-repeat 3px 50%; /* LTR */
+ padding: 0.5em 1em 0.5em 20px; /* LTR */
+ color: #000;
+}
+[dir="rtl"] .task-list li.active {
+ background: transparent url(images/task-item-rtl.png) no-repeat right 50%;
+ padding: 0.5em 20px 0.5em 1em;
+}
+.task-list li.done {
+ background: transparent url(images/task-check.png) no-repeat 0 50%;
+ color: green;
+}
+
/* Field UI */
#field-display-overview input.field-plugin-settings-edit {
diff --git a/core/themes/seven/templates/maintenance-page.html.twig b/core/themes/seven/templates/maintenance-page.html.twig
index a3d78d1461cb764e957ead01368e32af1ef11e49..dc691c17b31ea5734fba65424d1be98ce531e329 100644
--- a/core/themes/seven/templates/maintenance-page.html.twig
+++ b/core/themes/seven/templates/maintenance-page.html.twig
@@ -12,53 +12,47 @@
*/
#}
-
-
- {{ head }}
- {{ head_title }}
- {{ styles }}
- {{ scripts }}
-
-
-
-
+
+
+
{{ head_title }}
+ {{ head }}
+ {{ styles }}
+ {{ scripts }}
+
+
{{ page_top }}
-
+
+
+
+
diff --git a/core/update.php b/core/update.php
index 8f7c325707b270ae99f92ad8e4364459dcaed441..cd94972eafadf95c48186c57a02a9d32afa6d476 100644
--- a/core/update.php
+++ b/core/update.php
@@ -211,7 +211,7 @@ function update_info_page() {
$output .= "
\n";
$output .= "When you have performed the steps above, you may proceed.
\n";
$form_action = check_url(drupal_current_script_url(array('op' => 'selection', 'token' => $token)));
- $output .= '
';
+ $output .= '';
$output .= "\n";
$build = array(