diff --git a/core/includes/common.inc b/core/includes/common.inc
index 35056de..fbacae6 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -4576,6 +4576,13 @@ function drupal_get_library($module, $name = NULL) {
         // Add default elements to allow for easier processing.
         $module_libraries[$key] += array('dependencies' => array(), 'js' => array(), 'css' => array());
         foreach ($module_libraries[$key]['js'] as $file => $options) {
+          if (is_scalar($options)) {
+            // The JavaScript or CSS file has been specified in shorthand
+            // format, without an array of options. In this case $options is the
+            // filename.
+            $file = $options;
+            $options = array();
+          }
           $module_libraries[$key]['js'][$file]['version'] = $module_libraries[$key]['version'];
         }
       }
diff --git a/core/includes/errors.inc b/core/includes/errors.inc
index 5fc4b7d..f29def7 100644
--- a/core/includes/errors.inc
+++ b/core/includes/errors.inc
@@ -153,7 +153,7 @@ function _drupal_render_exception_safe($exception) {
  *   TRUE if an error should be displayed.
  */
 function error_displayable($error = NULL) {
-  $error_level = config('system.logging')->get('error_level');
+  $error_level = _drupal_get_error_level();
   $updating = (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'update');
   $all_errors_displayed = ($error_level == ERROR_REPORTING_DISPLAY_ALL) ||
     ($error_level == ERROR_REPORTING_DISPLAY_VERBOSE);
@@ -254,7 +254,7 @@ function _drupal_log_error($error, $fatal = FALSE) {
       $message = format_string('%type: !message in %function (line %line of %file).', $error);
 
       // Check if verbose error reporting is on.
-      $error_level = config('system.logging')->get('error_level');
+      $error_level = _drupal_get_error_level();
 
       if ($error_level == ERROR_REPORTING_DISPLAY_VERBOSE) {
         // First trace is the error itself, already contained in the message.
@@ -287,6 +287,29 @@ function _drupal_log_error($error, $fatal = FALSE) {
 }
 
 /**
+ * Returns the current error level.
+ *
+ * This function should only be used to get the current error level pre
+ * DRUPAL_BOOTSTRAP_KERNEL or before Drupal is installed. In all other
+ * situations the following code is preferred:
+ * @code
+ * Drupal::config('system.logging')->get('error_level');
+ * @endcode
+ *
+ * @return string
+ *   The current error level.
+ */
+function _drupal_get_error_level() {
+  try {
+    return Drupal::config('system.logging')->get('error_level');
+  }
+  catch (Exception $e) {
+    // During very early install the cache_config table does not exist.
+    return ERROR_REPORTING_DISPLAY_ALL;
+  }
+}
+
+/**
  * Gets the last caller from a backtrace.
  *
  * @param $backtrace
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index df688ab..85dc45c 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -1,5 +1,6 @@
 <?php
 
+use Drupal\Core\Config\FileStorage;
 use Drupal\Core\DrupalKernel;
 use Drupal\Core\CoreBundle;
 use Drupal\Core\Database\Database;
@@ -432,6 +433,16 @@ function install_begin_request(&$install_state) {
     }
   }
 
+  // Ensure that the active configuration directory is empty before installation
+  // starts.
+  if ($install_state['config_verified'] && empty($task)) {
+    $config = glob(config_get_config_directory(CONFIG_ACTIVE_DIRECTORY) . '/*.' . FileStorage::getFileExtension());
+    if (!empty($config)) {
+      $task = NULL;
+      throw new Exception(install_already_done_error());
+    }
+  }
+
   // Modify the installation state as appropriate.
   $install_state['completed_task'] = $task;
   $install_state['database_tables_exist'] = !empty($task);
@@ -1609,7 +1620,7 @@ function install_already_done_error() {
   global $base_url;
 
   drupal_set_title(st('Drupal already installed'));
-  return st('<ul><li>To start over, you must empty your existing database.</li><li>To install to a different database, edit the appropriate <em>settings.php</em> file in the <em>sites</em> folder.</li><li>To upgrade an existing installation, proceed to the <a href="@base-url/core/update.php">update script</a>.</li><li>View your <a href="@base-url">existing site</a>.</li></ul>', array('@base-url' => $base_url));
+  return st('<ul><li>To start over, you must empty your existing database, delete your active configuration, and copy <em>default.settings.php</em> over <em>settings.php</em>.</li><li>To install to a different database, edit the appropriate <em>settings.php</em> file in the <em>sites</em> folder.</li><li>To locate your active configuration, view the appropriate <em>settings.php</em> file in the <em>sites</em> folder.</em></li></li><li>To upgrade an existing installation, proceed to the <a href="@base-url/core/update.php">update script</a>.</li><li>View your <a href="@base-url">existing site</a>.</li></ul>', array('@base-url' => $base_url));
 }
 
 /**
diff --git a/core/includes/theme.maintenance.inc b/core/includes/theme.maintenance.inc
index 37775e6..cda4109 100644
--- a/core/includes/theme.maintenance.inc
+++ b/core/includes/theme.maintenance.inc
@@ -50,7 +50,17 @@ function _drupal_maintenance_theme() {
     //   Stark otherwise. Since there is no low-level access to configuration
     //   currently, we only consult settings.php and fall back to Bartik
     //   otherwise, as it looks generic enough and way more user-friendly.
-    $custom_theme = variable_get('maintenance_theme', config('system.theme')->get('default')) ?: 'bartik';
+    $custom_theme = variable_get('maintenance_theme');
+    if (!$custom_theme)  {
+      $config = Drupal::config('system.theme');
+      // A broken install might not return an object.
+      if (is_object($config)) {
+        $custom_theme = $config->get('default');
+      }
+    }
+    if (!$custom_theme)  {
+      $custom_theme = 'bartik';
+    }
   }
 
   // Ensure that system.module is loaded.
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index 8031c2b..0e9bf49 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -122,6 +122,32 @@ public static function service($id) {
   }
 
   /**
+   * Retrieves the currently active request object.
+   *
+   * Note: The use of this wrapper in particular is especially discourged. Most
+   * code should not need to access the request directly.  Doing so means it
+   * will only function when handling an HTTP request, and will require special
+   * modification or wrapping when run from a command line tool, from certain
+   * queue processors, or from automated tests.
+   *
+   * If code must access the request, it is considerably better to register
+   * an object with the Service Container and give it a setRequest() method
+   * that is configured to run when the service is created.  That way, the
+   * correct request object can always be provided by the container and the
+   * service can still be unit tested.
+   *
+   * If this method must be used, never save the request object that is
+   * returned.  Doing so may lead to inconsistencies as the request object is
+   * volatile and may change at various times, such as during a subrequest.
+   *
+   * @return \Symfony\Component\HttpFoundation\Request
+   *   The currently active request object.
+   */
+  public static function request() {
+    return static::$container->get('request');
+  }
+
+  /**
    * Returns the current primary database.
    *
    * @return \Drupal\Core\Database\Connection
diff --git a/core/misc/create/create-editonly.js b/core/misc/create/create-editonly.js
index 4279a1b..aed84a4 100644
--- a/core/misc/create/create-editonly.js
+++ b/core/misc/create/create-editonly.js
@@ -334,7 +334,6 @@
         element: this.element,
         instance: this.options.model
       };
-
       var propertyParams = (predicate) ? {
         predicate: predicate,
         propertyEditor: this.options.propertyEditors[predicate],
@@ -517,11 +516,11 @@
 
     disable: function () {
       _.each(this.options.propertyEditors, function (editable) {
-        this.disableEditor({
+        this.disablePropertyEditor({
           widget: this,
           editable: editable,
           entity: this.options.model,
-          element: jQuery(editable)
+          element: editable.element
         });
       }, this);
       this.options.propertyEditors = {};
@@ -592,7 +591,7 @@
         return;
       }
       var widgetType = propertyElement.data('createWidgetName');
-      this.options.propertyEditors[predicate] = propertyElement.data(widgetType);
+      this.options.propertyEditors[predicate] = propertyElement.data('Midgard-' + widgetType);
 
       // Deprecated.
       this.options.editables.push(propertyElement);
@@ -673,18 +672,13 @@
     },
 
     disablePropertyEditor: function (data) {
-      var widgetName = jQuery(data.element).data('createWidgetName');
-
-      data.disabled = true;
-
-      if (widgetName) {
-        // only if there has been an editing widget registered
-        jQuery(data.element)[widgetName](data);
-        jQuery(data.element).removeClass('ui-state-disabled');
+      data.element[data.editable.widgetName]({
+        disabled: true
+      });
+      jQuery(data.element).removeClass('ui-state-disabled');
 
-        if (data.element.is(':focus')) {
-          data.element.blur();
-        }
+      if (data.element.is(':focus')) {
+        data.element.blur();
       }
     },
 
@@ -755,7 +749,7 @@
   //     jQuery.widget('Namespace.MyWidget', jQuery.Create.editWidget, {
   //       // override any properties
   //     });
-  jQuery.widget('Create.editWidget', {
+  jQuery.widget('Midgard.editWidget', {
     options: {
       disabled: false,
       vie: null
@@ -849,7 +843,7 @@
   //
   // Due to licensing incompatibilities, Aloha Editor needs to be installed
   // and configured separately.
-  jQuery.widget('Create.alohaWidget', jQuery.Create.editWidget, {
+  jQuery.widget('Midgard.alohaWidget', jQuery.Midgard.editWidget, {
     _initialize: function () {},
     enable: function () {
       var options = this.options;
@@ -912,7 +906,7 @@
   //
   // This widget allows editing textual content areas with the
   // [CKEditor](http://ckeditor.com/) rich text editor.
-  jQuery.widget('Create.ckeditorWidget', jQuery.Create.editWidget, {
+  jQuery.widget('Midgard.ckeditorWidget', jQuery.Midgard.editWidget, {
     enable: function () {
       this.element.attr('contentEditable', 'true');
       this.editor = CKEDITOR.inline(this.element.get(0));
@@ -924,6 +918,7 @@
       });
       this.editor.on('blur', function () {
         widget.options.activated();
+        widget.options.changed(widget.editor.getData());
       });
       this.editor.on('key', function () {
         widget.options.changed(widget.editor.getData());
@@ -934,6 +929,11 @@
       this.editor.on('afterCommandExec', function () {
         widget.options.changed(widget.editor.getData());
       });
+      this.editor.on('configLoaded', function() {
+        jQuery.each(widget.options.editorOptions, function(optionName, option) {
+          widget.editor.config[optionName] = option;
+        });
+      });
     },
 
     disable: function () {
@@ -964,7 +964,7 @@
   //
   // This widget allows editing textual content areas with the
   // [Hallo](http://hallojs.org) rich text editor.
-  jQuery.widget('Create.halloWidget', jQuery.Create.editWidget, {
+  jQuery.widget('Midgard.halloWidget', jQuery.Midgard.editWidget, {
     options: {
       editorOptions: {},
       disabled: true,
@@ -1006,6 +1006,10 @@
           return;
         }
         self.options.toolbarState = data.display;
+        if (!self.element.data('IKS-hallo')) {
+          // Hallo not yet instantiated
+          return;
+        }
         var newOptions = self.getHalloOptions();
         self.element.hallo('changeToolbar', newOptions.parentElement, newOptions.toolbar, true);
       });
@@ -1061,7 +1065,7 @@
   //
   // This widget allows editing textual content areas with the
   // [Redactor](http://redactorjs.com/) rich text editor.
-  jQuery.widget('Create.redactorWidget', jQuery.Create.editWidget, {
+  jQuery.widget('Midgard.redactorWidget', jQuery.Midgard.editWidget, {
     editor: null,
 
     options: {
diff --git a/core/misc/debounce.js b/core/misc/debounce.js
index 338a50d..791d7d2 100644
--- a/core/misc/debounce.js
+++ b/core/misc/debounce.js
@@ -9,10 +9,9 @@
  * function can be written in such a way that it is only invoked under specific
  * conditions.
  *
- * @param {Function} callback
+ * @param Function callback
  *   The function to be invoked.
- *
- * @param {Number} wait
+ * @param Number wait
  *   The time period within which the callback function should only be
  *   invoked once. For example if the wait period is 250ms, then the callback
  *   will only be called at most 4 times per second.
diff --git a/core/misc/displace.js b/core/misc/displace.js
index 32e4db3..6e52a52 100644
--- a/core/misc/displace.js
+++ b/core/misc/displace.js
@@ -34,11 +34,11 @@
   /**
    * Informs listeners of the current offset dimensions.
    *
-   * @param {boolean} broadcast
+   * @param boolean broadcast
    *   (optional) When true or undefined, causes the recalculated offsets values to be
    *   broadcast to listeners.
    *
-   * @return {object}
+   * @return object
    *   An object whose keys are the for sides an element -- top, right, bottom
    *   and left. The value of each key is the viewport displacement distance for
    *   that edge.
@@ -54,7 +54,7 @@
   /**
    * Determines the viewport offsets.
    *
-   * @return {object}
+   * @return object
    *   An object whose keys are the for sides an element -- top, right, bottom
    *   and left. The value of each key is the viewport displacement distance for
    *   that edge.
@@ -76,11 +76,11 @@
    * numeric value, that value will be used. If no value is provided, one will
    * be calculated using the element's dimensions and placement.
    *
-   * @param {string} edge
+   * @param string edge
    *   The name of the edge to calculate. Can be 'top', 'right',
    *   'bottom' or 'left'.
    *
-   * @return {number}
+   * @return number
    *   The viewport displacement distance for the requested edge.
    */
   function calculateOffset (edge) {
@@ -111,14 +111,13 @@
   /**
    * Calculates displacement for element based on its dimensions and placement.
    *
-   * @param {jQuery} $el
+   * @param jQuery $el
    *   The jQuery element whose dimensions and placement will be measured.
-   *
-   * @param {string} edge
+   * @param string edge
    *   The name of the edge of the viewport that the element is associated
    *   with.
    *
-   * @return {number}
+   * @return number
    *   The viewport displacement distance for the requested edge.
    */
   function getRawOffset (el, edge) {
diff --git a/core/misc/dropbutton/dropbutton.js b/core/misc/dropbutton/dropbutton.js
index daebca2..f4caca6 100644
--- a/core/misc/dropbutton/dropbutton.js
+++ b/core/misc/dropbutton/dropbutton.js
@@ -36,12 +36,11 @@ function dropbuttonClickHandler (e) {
  * All secondary actions beyond the first in the list are presented in a
  * dropdown list accessible through a toggle arrow associated with the button.
  *
- * @param {jQuery} $dropbutton
+ * @param jQuery $dropbutton
  *   A jQuery element.
- *
- * @param {Object} settings
+ * @param Object settings
  *   A list of options including:
- *    - {String} title: The text inside the toggle link element. This text is
+ *    - String title: The text inside the toggle link element. This text is
  *      hidden from visual UAs.
  */
 function DropButton (dropbutton, settings) {
@@ -102,7 +101,7 @@ $.extend(DropButton.prototype, {
   /**
    * Toggle the dropbutton open and closed.
    *
-   * @param {Boolean} show
+   * @param Boolean show
    *   (optional) Force the dropbutton to open by passing true or to close by
    *   passing false.
    */
@@ -146,11 +145,11 @@ $.extend(Drupal.theme, {
   /**
    * A toggle is an interactive element often bound to a click handler.
    *
-   * @param {Object} options
-   *   - {String} title: (optional) The HTML anchor title attribute and
+   * @param Object options
+   *   - String title: (optional) The HTML anchor title attribute and
    *     text for the inner span element.
    *
-   * @return {String}
+   * @return String
    *   A string representing a DOM fragment.
    */
   dropbuttonToggle: function (options) {
diff --git a/core/misc/drupal.js b/core/misc/drupal.js
index d7a4e40..4283c25 100644
--- a/core/misc/drupal.js
+++ b/core/misc/drupal.js
@@ -283,10 +283,10 @@ Drupal.t = function (str, args, options) {
   /**
    * Triggers audio UAs to read the supplied text.
    *
-   * @param {String} text
+   * @param String text
    *   - A string to be read by the UA.
    *
-   * @param {String} priority
+   * @param String priority
    *   - A string to indicate the priority of the message. Can be either
    *   'polite' or 'assertive'. Polite is the default.
    *
diff --git a/core/misc/matchmedia.js b/core/misc/matchmedia.js
index 0dff91e..ba98968 100644
--- a/core/misc/matchmedia.js
+++ b/core/misc/matchmedia.js
@@ -30,7 +30,7 @@ window.matchMedia = window.matchMedia || (function (doc, window) {
   /**
    * A replacement for the native MediaQueryList object.
    *
-   * @param {String} q
+   * @param String q
    *   A media query e.g. "screen" or "screen and (min-width: 28em)".
    */
   function MediaQueryList (q) {
@@ -60,10 +60,10 @@ window.matchMedia = window.matchMedia || (function (doc, window) {
     /**
      * Polyfill the addListener method of the MediaQueryList object.
      *
-     * @param {Function} callback
+     * @param Function callback
      *   The callback to be invoked when the media query is applicable.
      *
-     * @return {Object MediaQueryList}
+     * @return Object MediaQueryList
      *   A MediaQueryList object that indicates whether the registered media
      *   query applies. The matches property is true when the media query
      *   applies and false when not. The original media query is referenced in
@@ -99,7 +99,7 @@ window.matchMedia = window.matchMedia || (function (doc, window) {
     /**
      * Polyfill the removeListener method of the MediaQueryList object.
      *
-     * @param {Function} callback
+     * @param Function callback
      *   The callback to be removed from the set of listeners.
      */
     removeListener: function (callback) {
@@ -123,10 +123,10 @@ window.matchMedia = window.matchMedia || (function (doc, window) {
   /**
    * Limits the invocations of a function in a given time frame.
    *
-   * @param {Function} callback
+   * @param Function callback
    *   The function to be invoked.
    *
-   * @param {Number} wait
+   * @param Number wait
    *   The time period within which the callback function should only be
    *   invoked once. For example if the wait period is 250ms, then the callback
    *   will only be called at most 4 times per second.
@@ -149,7 +149,7 @@ window.matchMedia = window.matchMedia || (function (doc, window) {
   /**
    * Return a MediaQueryList.
    *
-   * @param {String} q
+   * @param String q
    *   A media query e.g. "screen" or "screen and (min-width: 28em)". The media
    *   query is checked for applicability before the object is returned.
    */
diff --git a/core/misc/ui/external/qunit.js b/core/misc/ui/external/qunit.js
index 302545f..cb09779 100644
--- a/core/misc/ui/external/qunit.js
+++ b/core/misc/ui/external/qunit.js
@@ -40,8 +40,9 @@ var QUnit,
 	 *
 	 * Based on http://es5.github.com/#x15.11.4.4
 	 *
-	 * @param {String|Error} error
-	 * @return {String} error message
+	 * @param String|Error error
+   *
+	 * @return String error message
 	 */
 	errorString = function( error ) {
 		var name, message,
@@ -66,8 +67,9 @@ var QUnit,
 	 * Makes a clone of an object using only Array or Object as base,
 	 * and copies over the own enumerable properties.
 	 *
-	 * @param {Object} obj
-	 * @return {Object} New object with only the own properties (recursively).
+	 * @param Object obj
+   *
+	 * @return Object New object with only the own properties (recursively).
 	 */
 	objectValues = function( obj ) {
 		// Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392.
@@ -1287,7 +1289,9 @@ function done() {
 	});
 }
 
-/** @return Boolean: true if this test should be ran */
+/** 
+ * @return Boolean: true if this test should be ran.
+ */
 function validTest( test ) {
 	var include,
 		filter = config.filter && config.filter.toLowerCase(),
@@ -1493,9 +1497,9 @@ function extend( a, b ) {
 }
 
 /**
- * @param {HTMLElement} elem
- * @param {string} type
- * @param {Function} fn
+ * @param HTMLElement elem
+ * @param string type
+ * @param Function fn
  */
 function addEvent( elem, type, fn ) {
 	// Standards-based browsers
@@ -1508,9 +1512,9 @@ function addEvent( elem, type, fn ) {
 }
 
 /**
- * @param {Array|NodeList} elems
- * @param {string} type
- * @param {Function} fn
+ * @param Array|NodeList elems
+ * @param string type
+ * @param Function fn
  */
 function addEvents( elems, type, fn ) {
 	var i = elems.length;
diff --git a/core/modules/ckeditor/js/ckeditor.admin.js b/core/modules/ckeditor/js/ckeditor.admin.js
index 7abf327..7251ea0 100644
--- a/core/modules/ckeditor/js/ckeditor.admin.js
+++ b/core/modules/ckeditor/js/ckeditor.admin.js
@@ -250,10 +250,10 @@ Drupal.behaviors.ckeditorAdmin = {
 /**
  * Returns a string describing the type and index of a toolbar row.
  *
- * @param {jQuery} $row
+ * @param jQuery $row
  *   A jQuery object containing a .ckeditor-button row.
  *
- * @return {String}
+ * @return String
  *   A string describing the type and index of a toolbar row.
  */
 function getRowInfo ($row) {
@@ -278,7 +278,7 @@ function getRowInfo ($row) {
  * toolbar row. When a row is focused, the state change is announced through
  * the aria-live message area.
  *
- * @param {jQuery} event
+ * @param jQuery event
  *   A jQuery event.
  */
 function grantRowFocus (event) {
diff --git a/core/modules/contextual/contextual.js b/core/modules/contextual/contextual.js
index f09043d..66c1699 100644
--- a/core/modules/contextual/contextual.js
+++ b/core/modules/contextual/contextual.js
@@ -137,7 +137,7 @@ Drupal.contextual.prototype.detachHighlightBehaviors = function () {
 /**
  * Toggles the highlighting of a contextual region.
  *
- * @param {Object} event
+ * @param Object event
  *   jQuery Event object.
  */
 Drupal.contextual.prototype.highlightRegion = function(event) {
@@ -163,7 +163,7 @@ Drupal.contextual.prototype.highlightRegion = function(event) {
 /**
  * Handles click on the contextual links trigger.
  *
- * @param {Object} event
+ * @param Object event
  *   jQuery Event object.
  */
 Drupal.contextual.prototype.triggerClickHandler = function (event) {
@@ -176,7 +176,7 @@ Drupal.contextual.prototype.triggerClickHandler = function (event) {
 /**
  * Handles mouseleave on the contextual links trigger.
  *
- * @param {Object} event
+ * @param Object event
  *   jQuery Event object.
  */
 Drupal.contextual.prototype.triggerLeaveHandler = function (event) {
@@ -189,7 +189,7 @@ Drupal.contextual.prototype.triggerLeaveHandler = function (event) {
 /**
  * Toggles the active state of the contextual links.
  *
- * @param {Boolean} show
+ * @param Boolean show
  *   (optional) True if the links should be shown. False is the links should be
  *   hidden.
  */
@@ -225,7 +225,7 @@ function toggleEditMode (event, data) {
 /**
  * Wraps contextual links.
  *
- * @return {String}
+ * @return String
  *   A string representing a DOM fragment.
  */
 Drupal.theme.contextualWrapper = function () {
@@ -235,7 +235,7 @@ Drupal.theme.contextualWrapper = function () {
 /**
  * A trigger is an interactive element often bound to a click handler.
  *
- * @return {String}
+ * @return String
  *   A string representing a DOM fragment.
  */
 Drupal.theme.contextualTrigger = function () {
diff --git a/core/modules/edit/js/app.js b/core/modules/edit/js/app.js
index 07f006f..14d76a0 100644
--- a/core/modules/edit/js/app.js
+++ b/core/modules/edit/js/app.js
@@ -317,7 +317,7 @@
         // Discarded if it transitions from a changed state to 'candidate'.
         if (from === 'changed' || from === 'invalid') {
           // Retrieve the storage widget from DOM.
-          var createStorageWidget = this.$el.data('createStorage');
+          var createStorageWidget = this.$el.data('DrupalCreateStorage');
           // Revert changes in the model, this will trigger the direct editable
           // content to be reset and redrawn.
           createStorageWidget.revertChanges(editor.options.entity);
diff --git a/core/modules/edit/js/createjs/editingWidgets/drupalcontenteditablewidget.js b/core/modules/edit/js/createjs/editingWidgets/drupalcontenteditablewidget.js
index bc86a04..cde6163 100644
--- a/core/modules/edit/js/createjs/editingWidgets/drupalcontenteditablewidget.js
+++ b/core/modules/edit/js/createjs/editingWidgets/drupalcontenteditablewidget.js
@@ -8,7 +8,7 @@
 
   // @todo D8: use jQuery UI Widget bridging.
   // @see http://drupal.org/node/1874934#comment-7124904
-  jQuery.widget('DrupalEditEditor.direct', jQuery.Create.editWidget, {
+  jQuery.widget('Midgard.direct', jQuery.Midgard.editWidget, {
 
     /**
      * Implements getEditUISettings() method.
diff --git a/core/modules/edit/js/createjs/editingWidgets/formwidget.js b/core/modules/edit/js/createjs/editingWidgets/formwidget.js
index 8824a5d..aa2dd0a 100644
--- a/core/modules/edit/js/createjs/editingWidgets/formwidget.js
+++ b/core/modules/edit/js/createjs/editingWidgets/formwidget.js
@@ -8,7 +8,7 @@
 
   // @todo D8: change the name to "form" + use jQuery UI Widget bridging.
   // @see http://drupal.org/node/1874934#comment-7124904
-  $.widget('DrupalEditEditor.formEditEditor', $.Create.editWidget, {
+  $.widget('Midgard.formEditEditor', $.Midgard.editWidget, {
 
     id: null,
     $formContainer: null,
diff --git a/core/modules/edit/js/util.js b/core/modules/edit/js/util.js
index e0aa490..330f4dd 100644
--- a/core/modules/edit/js/util.js
+++ b/core/modules/edit/js/util.js
@@ -28,7 +28,7 @@ Drupal.edit.util.calcPropertyID = function(entity, predicate) {
  * @param setting
  *   Name of the Edit UI integration setting.
  *
- * @return {*}
+ * @return *
  */
 Drupal.edit.util.getEditUISetting = function(editor, setting) {
   var settings = {};
diff --git a/core/modules/edit/js/views/contextuallink-view.js b/core/modules/edit/js/views/contextuallink-view.js
index efe8ddd..ff42712 100644
--- a/core/modules/edit/js/views/contextuallink-view.js
+++ b/core/modules/edit/js/views/contextuallink-view.js
@@ -40,7 +40,7 @@ Drupal.edit.views.ContextualLinkView = Backbone.View.extend({
    * Equates clicks anywhere on the overlay to clicking the active editor's (if
    * any) "close" button.
    *
-   * @param {Object} event
+   * @param Object event
    */
   onClick: function (event) {
     event.preventDefault();
diff --git a/core/modules/editor/js/editor.createjs.js b/core/modules/editor/js/editor.createjs.js
index c4bfae6..de15c77 100644
--- a/core/modules/editor/js/editor.createjs.js
+++ b/core/modules/editor/js/editor.createjs.js
@@ -18,7 +18,7 @@
 
 // @todo D8: use jQuery UI Widget bridging.
 // @see http://drupal.org/node/1874934#comment-7124904
-jQuery.widget('DrupalEditEditor.editor', jQuery.DrupalEditEditor.direct, {
+jQuery.widget('Midgard.editor', jQuery.Midgard.direct, {
 
   textFormat: null,
   textFormatHasTransformations: null,
diff --git a/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php b/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php
index 3c54ad4..89cba50 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php
@@ -477,6 +477,11 @@ function testLibraryRender() {
     $styles = drupal_get_css();
     $this->assertTrue(strpos($scripts, 'core/misc/farbtastic/farbtastic.js'), 'JavaScript of library was added to the page.');
     $this->assertTrue(strpos($styles, 'core/misc/farbtastic/farbtastic.css'), 'Stylesheet of library was added to the page.');
+
+    $result = drupal_add_library('common_test', 'shorthand.plugin');
+    $path = drupal_get_path('module', 'common_test') . '/js/shorthand.js';
+    $scripts = drupal_get_js();
+    $this->assertTrue(strpos($scripts, $path), 'JavaScript specified in hook_library_info() using shorthand format (without any options) was added to the page.');
   }
 
   /**
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index a93a124..445b27c 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -397,7 +397,9 @@ function system_requirements($phase) {
       }
     }
     else {
-      if (file_default_scheme() == 'public') {
+      // This function can be called before the config_cache table has been
+      // created.
+      if ($phase == 'install' || file_default_scheme() == 'public') {
         $requirements['file system']['value'] = $t('Writable (<em>public</em> download method)');
       }
       else {
diff --git a/core/modules/system/tests/modules/common_test/common_test.module b/core/modules/system/tests/modules/common_test/common_test.module
index f932f0f..203ead2 100644
--- a/core/modules/system/tests/modules/common_test/common_test.module
+++ b/core/modules/system/tests/modules/common_test/common_test.module
@@ -290,6 +290,21 @@ function common_test_library_info() {
       array('system', 'jquery'),
     ),
   );
+  // Nominate a library using the shorthand format, where no options are given,
+  // just the file name.
+  $libraries['shorthand.plugin'] = array(
+    'title' => 'Shorthand Plugin',
+    'website' => 'http://www.example.com/',
+    'version' => '0.8.3.37',
+    'js' => array(
+      // Here we attach the JavaScript file using the shorthand format, only
+      // the file name is given, no options.
+      drupal_get_path('module', 'common_test') . '/js/shorthand.js',
+    ),
+    'dependencies' => array(
+      array('system', 'jquery'),
+    ),
+  );
   return $libraries;
 }
 
diff --git a/core/modules/system/tests/modules/common_test/js/shorthand.js b/core/modules/system/tests/modules/common_test/js/shorthand.js
new file mode 100644
index 0000000..737d9d7
--- /dev/null
+++ b/core/modules/system/tests/modules/common_test/js/shorthand.js
@@ -0,0 +1,9 @@
+/**
+ * JavaScript file for the 'Shorthand' plugin.
+ *
+ * This file is intentionally blank. It is used to test that nominating
+ * JavaScript (and CSS) files in the shorthand format using hook_library_info().
+ *
+ * @see common_test_library_info()
+ * @see Drupal/system/Tests/Common/JavaScriptTest::testLibraryRender()
+ */
diff --git a/core/modules/toolbar/js/toolbar.js b/core/modules/toolbar/js/toolbar.js
index 446f1e6..281d68a 100644
--- a/core/modules/toolbar/js/toolbar.js
+++ b/core/modules/toolbar/js/toolbar.js
@@ -165,10 +165,9 @@ Drupal.toolbar.toggleTray = function (event) {
 /**
  * Repositions trays and sets body padding according to the height of the bar.
  *
- * @param {Event} event
+ * @param Event event
  *   - jQuery Event object.
- *
- * @param {Object} offsets
+ * @param Object offsets
  *   - Contains for keys -- top, right, bottom and left -- that indicate the
  *   viewport offset distances calculated by Drupal.displace().
  */
@@ -234,10 +233,9 @@ Drupal.toolbar.orientationChangeHandler = function (event) {
 /**
  * Change the orientation of the tray between vertical and horizontal.
  *
- * @param {String} newOrientation
+ * @param String newOrientation
  *   Either 'vertical' or 'horizontal'. The orientation to change the tray to.
- *
- * @param {Boolean} isLock
+ * @param Boolean isLock
  *   Whether the orientation of the tray should be locked if it is being toggled
  *   to vertical.
  */
@@ -313,7 +311,7 @@ function updatePeripherals () {
  *
  * The message will be read by speaking User Agents.
  *
- * @param {String} message
+ * @param String message
  *   A string to be inserted into the message area.
  */
 function setMessage (message) {
@@ -323,7 +321,7 @@ function setMessage (message) {
 /**
  * A toggle is an interactive element often bound to a click handler.
  *
- * @return {String}
+ * @return String
  *   A string representing a DOM fragment.
  */
 Drupal.theme.toolbarOrientationToggle = function () {
@@ -335,7 +333,7 @@ Drupal.theme.toolbarOrientationToggle = function () {
 /**
  * A region to post messages that a screen reading UA will announce.
  *
- * @return {String}
+ * @return String
  *   A string representing a DOM fragment.
  */
 Drupal.theme.toolbarMessageBox = function () {
@@ -345,7 +343,7 @@ Drupal.theme.toolbarMessageBox = function () {
 /**
  * Wrap a message string in a p tag.
  *
- * @return {String}
+ * @return String
  *   A string representing a DOM fragment.
  */
 Drupal.theme.toolbarTrayMessage = function (message) {
diff --git a/core/modules/toolbar/js/toolbar.menu.js b/core/modules/toolbar/js/toolbar.menu.js
index f05bcb0..164fc9e 100644
--- a/core/modules/toolbar/js/toolbar.menu.js
+++ b/core/modules/toolbar/js/toolbar.menu.js
@@ -23,7 +23,7 @@ var activeItem = drupalSettings.basePath + drupalSettings.currentPath;
     /**
      * Handle clicks from the disclosure button on an item with sub-items.
      *
-     * @param {Object} event
+     * @param Object event
      *   A jQuery Event object.
      */
     function toggleClickHandler (event) {
@@ -40,10 +40,9 @@ var activeItem = drupalSettings.basePath + drupalSettings.currentPath;
     /**
      * Toggle the open/close state of a list is a menu.
      *
-     * @param {jQuery} $item
+     * @param jQuery $item
      *   The li item to be toggled.
-     *
-     * @param {Boolean} switcher
+     * @param Boolean switcher
      *   A flag that forces toggleClass to add or a remove a class, rather than
      *   simply toggling its presence.
      */
@@ -68,7 +67,7 @@ var activeItem = drupalSettings.basePath + drupalSettings.currentPath;
      * classed with .box. The .box div provides a positioning context for the
      * item list toggle.
      *
-     * @param {jQuery} $menu
+     * @param jQuery $menu
      *   The root of the menu to be initialized.
      */
     function initItems ($menu) {
@@ -96,10 +95,9 @@ var activeItem = drupalSettings.basePath + drupalSettings.currentPath;
      * This function is called recursively on each sub level of lists elements
      * until the depth of the menu is exhausted.
      *
-     * @param {jQuery} $lists
+     * @param jQuery $lists
      *   A jQuery object of ul elements.
-     *
-     * @param {Integer} level
+     * @param Integer level
      *   The current level number to be assigned to the list elements.
      */
     function markListLevels ($lists, level) {
@@ -116,7 +114,7 @@ var activeItem = drupalSettings.basePath + drupalSettings.currentPath;
      * Marks the trail of the active link in the menu back to the root of the
      * menu with .active-trail.
      *
-     * @param {jQuery} $menu
+     * @param jQuery $menu
      *   The root of the menu.
      */
     function openActiveItem ($menu) {
@@ -149,7 +147,7 @@ var activeItem = drupalSettings.basePath + drupalSettings.currentPath;
   /**
    * A toggle is an interactive element often bound to a click handler.
    *
-   * @return {String}
+   * @return String
    *   A string representing a DOM fragment.
    */
   Drupal.theme.toolbarMenuItemToggle = function (options) {
diff --git a/core/modules/user/user.js b/core/modules/user/user.js
index ebe6cc2..4530b54 100644
--- a/core/modules/user/user.js
+++ b/core/modules/user/user.js
@@ -27,7 +27,7 @@ Drupal.behaviors.password = {
       if (settings.password.showStrengthIndicator) {
         var passwordMeter = '<div class="password-strength"><div class="password-strength-text" aria-live="assertive"></div><div class="password-strength-title">' + translate.strengthTitle + '</div><div class="password-indicator"><div class="indicator"></div></div></div>';
         confirmInput.parent().after('<div class="password-suggestions description"></div>');
-        innerWrapper.prepend(passwordMeter);
+        innerWrapper.append(passwordMeter);
         var passwordDescription = outerWrapper.find('div.password-suggestions').hide();
       }
 
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index bdf5862..46f8807 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -719,6 +719,12 @@ function user_format_name($account) {
 function user_template_preprocess_default_variables_alter(&$variables) {
   global $user;
 
+  // If this function is called from the installer after Drupal has been
+  // installed then $user will not be set.
+  if (!is_object($user)) {
+    return;
+  }
+
   $variables['user'] = clone $user;
   // Remove password and session IDs, since themes should not need nor see them.
   unset($variables['user']->pass, $variables['user']->sid, $variables['user']->ssid);
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
index a660b0d..48d195a 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
@@ -468,6 +468,7 @@ public function getDisplayDetails($view, $display) {
     $build['columns']['second']['settings'] = array();
     $build['columns']['second']['header'] = array();
     $build['columns']['second']['footer'] = array();
+    $build['columns']['second']['empty'] = array();
     $build['columns']['second']['pager'] = array();
 
     // The third column buckets are wrapped in details.
@@ -527,9 +528,9 @@ public function getDisplayDetails($view, $display) {
     $build['columns']['first']['sorts'] = $this->getFormBucket($view, 'sort', $display);
     $build['columns']['second']['header'] = $this->getFormBucket($view, 'header', $display);
     $build['columns']['second']['footer'] = $this->getFormBucket($view, 'footer', $display);
+    $build['columns']['second']['empty'] = $this->getFormBucket($view, 'empty', $display);
     $build['columns']['third']['arguments'] = $this->getFormBucket($view, 'argument', $display);
     $build['columns']['third']['relationships'] = $this->getFormBucket($view, 'relationship', $display);
-    $build['columns']['third']['empty'] = $this->getFormBucket($view, 'empty', $display);
 
     return $build;
   }
