diff --git a/core/misc/active-link.es6.js b/core/misc/active-link.es6.js
index 9cf55b4344..425e4f1c98 100644
--- a/core/misc/active-link.es6.js
+++ b/core/misc/active-link.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Append is-active class.
    *
@@ -22,13 +19,13 @@
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.activeLinks = {
-    attach: function (context) {
+    attach(context) {
       // Start by finding all potentially active links.
-      var path = drupalSettings.path;
-      var queryString = JSON.stringify(path.currentQuery);
-      var querySelector = path.currentQuery ? "[data-drupal-link-query='" + queryString + "']" : ':not([data-drupal-link-query])';
-      var originalSelectors = ['[data-drupal-link-system-path="' + path.currentPath + '"]'];
-      var selectors;
+      const path = drupalSettings.path;
+      const queryString = JSON.stringify(path.currentQuery);
+      const querySelector = path.currentQuery ? `[data-drupal-link-query='${queryString}']` : ':not([data-drupal-link-query])';
+      const originalSelectors = [`[data-drupal-link-system-path="${path.currentPath}"]`];
+      let selectors;
 
       // If this is the front page, we have to check for the <front> path as
       // well.
@@ -39,30 +36,29 @@
       // Add language filtering.
       selectors = [].concat(
         // Links without any hreflang attributes (most of them).
-        originalSelectors.map(function (selector) { return selector + ':not([hreflang])'; }),
+        originalSelectors.map(selector => `${selector}:not([hreflang])`),
         // Links with hreflang equals to the current language.
-        originalSelectors.map(function (selector) { return selector + '[hreflang="' + path.currentLanguage + '"]'; })
+        originalSelectors.map(selector => `${selector}[hreflang="${path.currentLanguage}"]`),
       );
 
       // Add query string selector for pagers, exposed filters.
-      selectors = selectors.map(function (current) { return current + querySelector; });
+      selectors = selectors.map(current => current + querySelector);
 
       // Query the DOM.
-      var activeLinks = context.querySelectorAll(selectors.join(','));
-      var il = activeLinks.length;
-      for (var i = 0; i < il; i++) {
+      const activeLinks = context.querySelectorAll(selectors.join(','));
+      const il = activeLinks.length;
+      for (let i = 0; i < il; i++) {
         activeLinks[i].classList.add('is-active');
       }
     },
-    detach: function (context, settings, trigger) {
+    detach(context, settings, trigger) {
       if (trigger === 'unload') {
-        var activeLinks = context.querySelectorAll('[data-drupal-link-system-path].is-active');
-        var il = activeLinks.length;
-        for (var i = 0; i < il; i++) {
+        const activeLinks = context.querySelectorAll('[data-drupal-link-system-path].is-active');
+        const il = activeLinks.length;
+        for (let i = 0; i < il; i++) {
           activeLinks[i].classList.remove('is-active');
         }
       }
-    }
+    },
   };
-
-})(Drupal, drupalSettings);
+}(Drupal, drupalSettings));
diff --git a/core/misc/ajax.es6.js b/core/misc/ajax.es6.js
index fefe9f3031..e6c5efb5c7 100644
--- a/core/misc/ajax.es6.js
+++ b/core/misc/ajax.es6.js
@@ -12,9 +12,6 @@
  */
 
 (function ($, window, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Attaches the Ajax behavior to each Ajax form element.
    *
@@ -29,12 +26,11 @@
    *   the removed content.
    */
   Drupal.behaviors.AJAX = {
-    attach: function (context, settings) {
-
+    attach(context, settings) {
       function loadAjaxBehavior(base) {
-        var element_settings = settings.ajax[base];
+        const element_settings = settings.ajax[base];
         if (typeof element_settings.selector === 'undefined') {
-          element_settings.selector = '#' + base;
+          element_settings.selector = `#${base}`;
         }
         $(element_settings.selector).once('drupal-ajax').each(function () {
           element_settings.element = this;
@@ -44,7 +40,7 @@
       }
 
       // Load all Ajax behaviors specified in the settings.
-      for (var base in settings.ajax) {
+      for (const base in settings.ajax) {
         if (settings.ajax.hasOwnProperty(base)) {
           loadAjaxBehavior(base);
         }
@@ -52,13 +48,13 @@
 
       // Bind Ajax behaviors to all items showing the class.
       $('.use-ajax').once('ajax').each(function () {
-        var element_settings = {};
+        const element_settings = {};
         // Clicked links look better with the throbber than the progress bar.
-        element_settings.progress = {type: 'throbber'};
+        element_settings.progress = { type: 'throbber' };
 
         // For anchor tags, these will go to the target of the anchor rather
         // than the usual location.
-        var href = $(this).attr('href');
+        const href = $(this).attr('href');
         if (href) {
           element_settings.url = href;
           element_settings.event = 'click';
@@ -72,7 +68,7 @@
 
       // This class means to submit the form to the action using Ajax.
       $('.use-ajax-submit').once('ajax').each(function () {
-        var element_settings = {};
+        const element_settings = {};
 
         // Ajax submits specified in this manner automatically submit to the
         // normal form action.
@@ -84,7 +80,7 @@
         element_settings.event = 'click';
         // Clicked form buttons look better with the throbber than the progress
         // bar.
-        element_settings.progress = {type: 'throbber'};
+        element_settings.progress = { type: 'throbber' };
         element_settings.base = $(this).attr('id');
         element_settings.element = this;
 
@@ -92,15 +88,15 @@
       });
     },
 
-    detach: function (context, settings, trigger) {
+    detach(context, settings, trigger) {
       if (trigger === 'unload') {
-        Drupal.ajax.expired().forEach(function (instance) {
+        Drupal.ajax.expired().forEach((instance) => {
           // Set this to null and allow garbage collection to reclaim
           // the memory.
           Drupal.ajax.instances[instance.instanceIndex] = null;
         });
       }
-    }
+    },
   };
 
   /**
@@ -118,27 +114,26 @@
    *   The custom message.
    */
   Drupal.AjaxError = function (xmlhttp, uri, customMessage) {
-
-    var statusCode;
-    var statusText;
-    var pathText;
-    var responseText;
-    var readyStateText;
+    let statusCode;
+    let statusText;
+    let pathText;
+    let responseText;
+    let readyStateText;
     if (xmlhttp.status) {
-      statusCode = '\n' + Drupal.t('An AJAX HTTP error occurred.') + '\n' + Drupal.t('HTTP Result Code: !status', {'!status': xmlhttp.status});
+      statusCode = `\n${Drupal.t('An AJAX HTTP error occurred.')}\n${Drupal.t('HTTP Result Code: !status', { '!status': xmlhttp.status })}`;
     }
     else {
-      statusCode = '\n' + Drupal.t('An AJAX HTTP request terminated abnormally.');
+      statusCode = `\n${Drupal.t('An AJAX HTTP request terminated abnormally.')}`;
     }
-    statusCode += '\n' + Drupal.t('Debugging information follows.');
-    pathText = '\n' + Drupal.t('Path: !uri', {'!uri': uri});
+    statusCode += `\n${Drupal.t('Debugging information follows.')}`;
+    pathText = `\n${Drupal.t('Path: !uri', { '!uri': uri })}`;
     statusText = '';
     // In some cases, when statusCode === 0, xmlhttp.statusText may not be
     // defined. Unfortunately, testing for it with typeof, etc, doesn't seem to
     // catch that and the test causes an exception. So we need to catch the
     // exception here.
     try {
-      statusText = '\n' + Drupal.t('StatusText: !statusText', {'!statusText': $.trim(xmlhttp.statusText)});
+      statusText = `\n${Drupal.t('StatusText: !statusText', { '!statusText': $.trim(xmlhttp.statusText) })}`;
     }
     catch (e) {
       // Empty.
@@ -148,7 +143,7 @@
     // Again, we don't have a way to know for sure whether accessing
     // xmlhttp.responseText is going to throw an exception. So we'll catch it.
     try {
-      responseText = '\n' + Drupal.t('ResponseText: !responseText', {'!responseText': $.trim(xmlhttp.responseText)});
+      responseText = `\n${Drupal.t('ResponseText: !responseText', { '!responseText': $.trim(xmlhttp.responseText) })}`;
     }
     catch (e) {
       // Empty.
@@ -159,9 +154,9 @@
     responseText = responseText.replace(/[\n]+\s+/g, '\n');
 
     // We don't need readyState except for status == 0.
-    readyStateText = xmlhttp.status === 0 ? ('\n' + Drupal.t('ReadyState: !readyState', {'!readyState': xmlhttp.readyState})) : '';
+    readyStateText = xmlhttp.status === 0 ? (`\n${Drupal.t('ReadyState: !readyState', { '!readyState': xmlhttp.readyState })}`) : '';
 
-    customMessage = customMessage ? ('\n' + Drupal.t('CustomMessage: !customMessage', {'!customMessage': customMessage})) : '';
+    customMessage = customMessage ? (`\n${Drupal.t('CustomMessage: !customMessage', { '!customMessage': customMessage })}`) : '';
 
     /**
      * Formatted and translated error message.
@@ -237,8 +232,8 @@
       throw new Error('Drupal.ajax() function must be called with one configuration object only');
     }
     // Map those config keys to variables for the old Drupal.ajax function.
-    var base = settings.base || false;
-    var element = settings.element || false;
+    const base = settings.base || false;
+    const element = settings.element || false;
     delete settings.base;
     delete settings.element;
 
@@ -247,7 +242,7 @@
       settings.progress = false;
     }
 
-    var ajax = new Drupal.Ajax(base, element, settings);
+    const ajax = new Drupal.Ajax(base, element, settings);
     ajax.instanceIndex = Drupal.ajax.instances.length;
     Drupal.ajax.instances.push(ajax);
 
@@ -271,9 +266,7 @@
    *   The list of expired {@link Drupal.Ajax} objects.
    */
   Drupal.ajax.expired = function () {
-    return Drupal.ajax.instances.filter(function (instance) {
-      return instance && instance.element !== false && !document.body.contains(instance.element);
-    });
+    return Drupal.ajax.instances.filter(instance => instance && instance.element !== false && !document.body.contains(instance.element));
   };
 
   /**
@@ -337,20 +330,20 @@
    *   Settings for this Ajax object.
    */
   Drupal.Ajax = function (base, element, element_settings) {
-    var defaults = {
+    const defaults = {
       event: element ? 'mousedown' : null,
       keypress: true,
-      selector: base ? '#' + base : null,
+      selector: base ? `#${base}` : null,
       effect: 'none',
       speed: 'none',
       method: 'replaceWith',
       progress: {
         type: 'throbber',
-        message: Drupal.t('Please wait...')
+        message: Drupal.t('Please wait...'),
       },
       submit: {
-        js: true
-      }
+        js: true,
+      },
     };
 
     $.extend(this, defaults, element_settings);
@@ -370,11 +363,10 @@
     //   - Include the '#' for ID-based selectors.
     //   - Support non-ID-based selectors.
     if (this.wrapper) {
-
       /**
        * @type {string}
        */
-      this.wrapper = '#' + this.wrapper;
+      this.wrapper = `#${this.wrapper}`;
     }
 
     /**
@@ -390,7 +382,6 @@
     // If there isn't a form, jQuery.ajax() will be used instead, allowing us to
     // bind Ajax to links as well.
     if (this.element && this.element.form) {
-
       /**
        * @type {jQuery}
        */
@@ -399,7 +390,7 @@
 
     // If no Ajax callback URL was given, use the link href or form action.
     if (!this.url) {
-      var $element = $(this.element);
+      const $element = $(this.element);
       if ($element.is('a')) {
         this.url = $element.attr('href');
       }
@@ -415,7 +406,7 @@
     // 2. /nojs$ - The end of a URL string.
     // 3. /nojs? - Followed by a query (e.g. path/nojs?destination=foobar).
     // 4. /nojs# - Followed by a fragment (e.g.: path/nojs#myfragment).
-    var originalUrl = this.url;
+    const originalUrl = this.url;
 
     /**
      * Processed Ajax URL.
@@ -431,7 +422,7 @@
 
     // Set the options for the ajaxSubmit function.
     // The 'this' variable will not persist inside of the options object.
-    var ajax = this;
+    const ajax = this;
 
     /**
      * Options for the jQuery.ajax function.
@@ -467,18 +458,18 @@
     ajax.options = {
       url: ajax.url,
       data: ajax.submit,
-      beforeSerialize: function (element_settings, options) {
+      beforeSerialize(element_settings, options) {
         return ajax.beforeSerialize(element_settings, options);
       },
-      beforeSubmit: function (form_values, element_settings, options) {
+      beforeSubmit(form_values, element_settings, options) {
         ajax.ajaxing = true;
         return ajax.beforeSubmit(form_values, element_settings, options);
       },
-      beforeSend: function (xmlhttprequest, options) {
+      beforeSend(xmlhttprequest, options) {
         ajax.ajaxing = true;
         return ajax.beforeSend(xmlhttprequest, options);
       },
-      success: function (response, status, xmlhttprequest) {
+      success(response, status, xmlhttprequest) {
         // Sanity check for browser support (object expected).
         // When using iFrame uploads, responses must be returned as a string.
         if (typeof response === 'string') {
@@ -497,21 +488,21 @@
         //   the response headers cannot be accessed for verification.
         if (response !== null && !drupalSettings.ajaxTrustedUrl[ajax.url]) {
           if (xmlhttprequest.getResponseHeader('X-Drupal-Ajax-Token') !== '1') {
-            var customMessage = Drupal.t('The response failed verification so will not be processed.');
+            const customMessage = Drupal.t('The response failed verification so will not be processed.');
             return ajax.error(xmlhttprequest, ajax.url, customMessage);
           }
         }
 
         return ajax.success(response, status);
       },
-      complete: function (xmlhttprequest, status) {
+      complete(xmlhttprequest, status) {
         ajax.ajaxing = false;
         if (status === 'error' || status === 'parsererror') {
           return ajax.error(xmlhttprequest, ajax.url);
         }
       },
       dataType: 'json',
-      type: 'POST'
+      type: 'POST',
     };
 
     if (element_settings.dialog) {
@@ -526,12 +517,12 @@
     else {
       ajax.options.url += '&';
     }
-    ajax.options.url += Drupal.ajax.WRAPPER_FORMAT + '=drupal_' + (element_settings.dialogType || 'ajax');
+    ajax.options.url += `${Drupal.ajax.WRAPPER_FORMAT}=drupal_${element_settings.dialogType || 'ajax'}`;
 
     // Bind the ajaxSubmit function to the element event.
     $(ajax.element).on(element_settings.event, function (event) {
       if (!drupalSettings.ajaxTrustedUrl[ajax.url] && !Drupal.url.isLocal(ajax.url)) {
-        throw new Error(Drupal.t('The callback URL is not local and not trusted: !url', {'!url': ajax.url}));
+        throw new Error(Drupal.t('The callback URL is not local and not trusted: !url', { '!url': ajax.url }));
       }
       return ajax.eventResponse(this, event);
     });
@@ -600,7 +591,7 @@
       // Unset the ajax.ajaxing flag here because it won't be unset during
       // the complete response.
       this.ajaxing = false;
-      window.alert('An error occurred while attempting to process ' + this.options.url + ': ' + e.message);
+      window.alert(`An error occurred while attempting to process ${this.options.url}: ${e.message}`);
       // For consistency, return a rejected Deferred (i.e., jqXHR's superclass)
       // so that calling code can take appropriate action.
       return $.Deferred().reject();
@@ -624,7 +615,7 @@
    */
   Drupal.Ajax.prototype.keypressResponse = function (element, event) {
     // Create a synonym for this to reduce code confusion.
-    var ajax = this;
+    const ajax = this;
 
     // Detect enter key and space bar and allow the standard response for them,
     // except for form elements of type 'text', 'tel', 'number' and 'textarea',
@@ -657,7 +648,7 @@
     event.stopPropagation();
 
     // Create a synonym for this to reduce code confusion.
-    var ajax = this;
+    const ajax = this;
 
     // Do not perform another Ajax command if one is already in progress.
     if (ajax.ajaxing) {
@@ -687,7 +678,7 @@
       // Unset the ajax.ajaxing flag here because it won't be unset during
       // the complete response.
       ajax.ajaxing = false;
-      window.alert('An error occurred while attempting to process ' + ajax.options.url + ': ' + e.message);
+      window.alert(`An error occurred while attempting to process ${ajax.options.url}: ${e.message}`);
     }
   };
 
@@ -709,7 +700,7 @@
     // $.ajax(). When there is no form and $.ajax() is used, beforeSerialize()
     // isn't called, but don't rely on that: explicitly check this.$form.
     if (this.$form) {
-      var settings = this.settings || drupalSettings;
+      const settings = this.settings || drupalSettings;
       Drupal.detachBehaviors(this.$form.get(0), settings, 'serialize');
     }
 
@@ -721,7 +712,7 @@
     // @see \Drupal\Core\Theme\AjaxBasePageNegotiator
     // @see \Drupal\Core\Asset\LibraryDependencyResolverInterface::getMinimalRepresentativeSubset()
     // @see system_js_settings_alter()
-    var pageState = drupalSettings.ajaxPageState;
+    const pageState = drupalSettings.ajaxPageState;
     options.data['ajax_page_state[theme]'] = pageState.theme;
     options.data['ajax_page_state[theme_token]'] = pageState.theme_token;
     options.data['ajax_page_state[libraries]'] = pageState.libraries;
@@ -774,7 +765,7 @@
       // that value is included in the submission. As per above, submissions
       // that use $.ajax() are already serialized prior to the element being
       // disabled, so this is only needed for IFRAME submissions.
-      var v = $.fieldValue(this.element);
+      const v = $.fieldValue(this.element);
       if (v !== null) {
         options.extraData[this.element.name] = v;
       }
@@ -791,7 +782,7 @@
     }
 
     // Insert progress indicator.
-    var progressIndicatorMethod = 'setProgressIndicator' + this.progress.type.slice(0, 1).toUpperCase() + this.progress.type.slice(1).toLowerCase();
+    const progressIndicatorMethod = `setProgressIndicator${this.progress.type.slice(0, 1).toUpperCase()}${this.progress.type.slice(1).toLowerCase()}`;
     if (progressIndicatorMethod in this && typeof this[progressIndicatorMethod] === 'function') {
       this[progressIndicatorMethod].call(this);
     }
@@ -801,7 +792,7 @@
    * Sets the progress bar progress indicator.
    */
   Drupal.Ajax.prototype.setProgressIndicatorBar = function () {
-    var progressBar = new Drupal.ProgressBar('ajax-progress-' + this.element.id, $.noop, this.progress.method, $.noop);
+    const progressBar = new Drupal.ProgressBar(`ajax-progress-${this.element.id}`, $.noop, this.progress.method, $.noop);
     if (this.progress.message) {
       progressBar.setProgress(-1, this.progress.message);
     }
@@ -819,7 +810,7 @@
   Drupal.Ajax.prototype.setProgressIndicatorThrobber = function () {
     this.progress.element = $('<div class="ajax-progress ajax-progress-throbber"><div class="throbber">&nbsp;</div></div>');
     if (this.progress.message) {
-      this.progress.element.find('.throbber').after('<div class="message">' + this.progress.message + '</div>');
+      this.progress.element.find('.throbber').after(`<div class="message">${this.progress.message}</div>`);
     }
     $(this.element).after(this.progress.element);
   };
@@ -854,12 +845,12 @@
     // we can try to refocus one of its parents. Using addBack reverse the
     // result array, meaning that index 0 is the highest parent in the hierarchy
     // in this situation it is usually a <form> element.
-    var elementParents = $(this.element).parents('[data-drupal-selector]').addBack().toArray();
+    const elementParents = $(this.element).parents('[data-drupal-selector]').addBack().toArray();
 
     // Track if any command is altering the focus so we can avoid changing the
     // focus set by the Ajax command.
-    var focusChanged = false;
-    for (var i in response) {
+    let focusChanged = false;
+    for (const i in response) {
       if (response.hasOwnProperty(i) && response[i].command && this.commands[response[i].command]) {
         this.commands[response[i].command](this, response[i], status);
         if (response[i].command === 'invoke' && response[i].method === 'focus') {
@@ -872,10 +863,10 @@
     // triggering element or one of its parents if that element does not exist
     // anymore.
     if (!focusChanged && this.element && !$(this.element).data('disable-refocus')) {
-      var target = false;
+      let target = false;
 
-      for (var n = elementParents.length - 1; !target && n > 0; n--) {
-        target = document.querySelector('[data-drupal-selector="' + elementParents[n].getAttribute('data-drupal-selector') + '"]');
+      for (let n = elementParents.length - 1; !target && n > 0; n--) {
+        target = document.querySelector(`[data-drupal-selector="${elementParents[n].getAttribute('data-drupal-selector')}"]`);
       }
 
       if (target) {
@@ -888,7 +879,7 @@
     // commands is not sufficient, because behaviors from the entire form need
     // to be reattached.
     if (this.$form) {
-      var settings = this.settings || drupalSettings;
+      const settings = this.settings || drupalSettings;
       Drupal.attachBehaviors(this.$form.get(0), settings);
     }
 
@@ -912,10 +903,10 @@
    *   properties.
    */
   Drupal.Ajax.prototype.getEffect = function (response) {
-    var type = response.effect || this.effect;
-    var speed = response.speed || this.speed;
+    const type = response.effect || this.effect;
+    const speed = response.speed || this.speed;
 
-    var effect = {};
+    const effect = {};
     if (type === 'none') {
       effect.showEffect = 'show';
       effect.hideEffect = 'hide';
@@ -927,8 +918,8 @@
       effect.showSpeed = speed;
     }
     else {
-      effect.showEffect = type + 'Toggle';
-      effect.hideEffect = type + 'Toggle';
+      effect.showEffect = `${type}Toggle`;
+      effect.hideEffect = `${type}Toggle`;
       effect.showSpeed = speed;
     }
 
@@ -959,7 +950,7 @@
     $(this.element).prop('disabled', false);
     // Reattach behaviors, if they were detached in beforeSerialize().
     if (this.$form) {
-      var settings = this.settings || drupalSettings;
+      const settings = this.settings || drupalSettings;
       Drupal.attachBehaviors(this.$form.get(0), settings);
     }
     throw new Drupal.AjaxError(xmlhttprequest, uri, customMessage);
@@ -1014,21 +1005,21 @@
      * @param {number} [status]
      *   The XMLHttpRequest status.
      */
-    insert: function (ajax, response, status) {
+    insert(ajax, response, status) {
       // Get information from the response. If it is not there, default to
       // our presets.
-      var $wrapper = response.selector ? $(response.selector) : $(ajax.wrapper);
-      var method = response.method || ajax.method;
-      var effect = ajax.getEffect(response);
-      var settings;
+      const $wrapper = response.selector ? $(response.selector) : $(ajax.wrapper);
+      const method = response.method || ajax.method;
+      const effect = ajax.getEffect(response);
+      let settings;
 
       // We don't know what response.data contains: it might be a string of text
       // without HTML, so don't rely on jQuery correctly interpreting
       // $(response.data) as new HTML rather than a CSS selector. Also, if
       // response.data contains top-level text nodes, they get lost with either
       // $(response.data) or $('<div></div>').replaceWith(response.data).
-      var $new_content_wrapped = $('<div></div>').html(response.data);
-      var $new_content = $new_content_wrapped.contents();
+      const $new_content_wrapped = $('<div></div>').html(response.data);
+      let $new_content = $new_content_wrapped.contents();
 
       // For legacy reasons, the effects processing code assumes that
       // $new_content consists of a single top-level element. Also, it has not
@@ -1099,8 +1090,8 @@
      * @param {number} [status]
      *   The XMLHttpRequest status.
      */
-    remove: function (ajax, response, status) {
-      var settings = response.settings || ajax.settings || drupalSettings;
+    remove(ajax, response, status) {
+      const settings = response.settings || ajax.settings || drupalSettings;
       $(response.selector).each(function () {
         Drupal.detachBehaviors(this, settings);
       })
@@ -1122,12 +1113,12 @@
      * @param {number} [status]
      *   The request status.
      */
-    changed: function (ajax, response, status) {
-      var $element = $(response.selector);
+    changed(ajax, response, status) {
+      const $element = $(response.selector);
       if (!$element.hasClass('ajax-changed')) {
         $element.addClass('ajax-changed');
         if (response.asterisk) {
-          $element.find(response.asterisk).append(' <abbr class="ajax-changed" title="' + Drupal.t('Changed') + '">*</abbr> ');
+          $element.find(response.asterisk).append(` <abbr class="ajax-changed" title="${Drupal.t('Changed')}">*</abbr> `);
         }
       }
     },
@@ -1144,7 +1135,7 @@
      * @param {number} [status]
      *   The XMLHttpRequest status.
      */
-    alert: function (ajax, response, status) {
+    alert(ajax, response, status) {
       window.alert(response.text, response.title);
     },
 
@@ -1160,7 +1151,7 @@
      * @param {number} [status]
      *   The XMLHttpRequest status.
      */
-    redirect: function (ajax, response, status) {
+    redirect(ajax, response, status) {
       window.location = response.url;
     },
 
@@ -1178,7 +1169,7 @@
      * @param {number} [status]
      *   The XMLHttpRequest status.
      */
-    css: function (ajax, response, status) {
+    css(ajax, response, status) {
       $(response.selector).css(response.argument);
     },
 
@@ -1199,19 +1190,19 @@
      * @param {number} [status]
      *   The XMLHttpRequest status.
      */
-    settings: function (ajax, response, status) {
-      var ajaxSettings = drupalSettings.ajax;
+    settings(ajax, response, status) {
+      const ajaxSettings = drupalSettings.ajax;
 
       // Clean up drupalSettings.ajax.
       if (ajaxSettings) {
-        Drupal.ajax.expired().forEach(function (instance) {
+        Drupal.ajax.expired().forEach((instance) => {
           // If the Ajax object has been created through drupalSettings.ajax
           // it will have a selector. When there is no selector the object
           // has been initialized with a special class name picked up by the
           // Ajax behavior.
 
           if (instance.selector) {
-            var selector = instance.selector.replace('#', '');
+            const selector = instance.selector.replace('#', '');
             if (selector in ajaxSettings) {
               delete ajaxSettings[selector];
             }
@@ -1244,7 +1235,7 @@
      * @param {number} [status]
      *   The XMLHttpRequest status.
      */
-    data: function (ajax, response, status) {
+    data(ajax, response, status) {
       $(response.selector).data(response.name, response.value);
     },
 
@@ -1264,9 +1255,9 @@
      * @param {number} [status]
      *   The XMLHttpRequest status.
      */
-    invoke: function (ajax, response, status) {
-      var $element = $(response.selector);
-      $element[response.method].apply($element, response.args);
+    invoke(ajax, response, status) {
+      const $element = $(response.selector);
+      $element[response.method](...response.args);
     },
 
     /**
@@ -1281,7 +1272,7 @@
      * @param {number} [status]
      *   The XMLHttpRequest status.
      */
-    restripe: function (ajax, response, status) {
+    restripe(ajax, response, status) {
       // :even and :odd are reversed because jQuery counts from 0 and
       // we count from 1, so we're out of sync.
       // Match immediate children of the parent element to allow nesting.
@@ -1305,8 +1296,8 @@
      * @param {number} [status]
      *   The XMLHttpRequest status.
      */
-    update_build_id: function (ajax, response, status) {
-      $('input[name="form_build_id"][value="' + response.old + '"]').val(response.new);
+    update_build_id(ajax, response, status) {
+      $(`input[name="form_build_id"][value="${response.old}"]`).val(response.new);
     },
 
     /**
@@ -1325,12 +1316,12 @@
      * @param {number} [status]
      *   The XMLHttpRequest status.
      */
-    add_css: function (ajax, response, status) {
+    add_css(ajax, response, status) {
       // Add the styles in the normal way.
       $('head').prepend(response.data);
       // Add imports in the styles using the addImport method if available.
-      var match;
-      var importMatch = /^@import url\("(.*)"\);$/igm;
+      let match;
+      const importMatch = /^@import url\("(.*)"\);$/igm;
       if (document.styleSheets[0].addImport && importMatch.test(response.data)) {
         importMatch.lastIndex = 0;
         do {
@@ -1338,7 +1329,6 @@
           document.styleSheets[0].addImport(match[1]);
         } while (match);
       }
-    }
+    },
   };
-
-})(jQuery, window, Drupal, drupalSettings);
+}(jQuery, window, Drupal, drupalSettings));
diff --git a/core/misc/announce.es6.js b/core/misc/announce.es6.js
index acf850a641..868ac24f02 100644
--- a/core/misc/announce.es6.js
+++ b/core/misc/announce.es6.js
@@ -19,11 +19,8 @@
  */
 
 (function (Drupal, debounce) {
-
-  'use strict';
-
-  var liveElement;
-  var announcements = [];
+  let liveElement;
+  const announcements = [];
 
   /**
    * Builds a div element with the aria-live attribute and add it to the DOM.
@@ -34,7 +31,7 @@
    *   Attaches the behavior for drupalAnnouce.
    */
   Drupal.behaviors.drupalAnnounce = {
-    attach: function (context) {
+    attach(context) {
       // Create only one aria-live element.
       if (!liveElement) {
         liveElement = document.createElement('div');
@@ -44,21 +41,21 @@
         liveElement.setAttribute('aria-busy', 'false');
         document.body.appendChild(liveElement);
       }
-    }
+    },
   };
 
   /**
    * Concatenates announcements to a single string; appends to the live region.
    */
   function announce() {
-    var text = [];
-    var priority = 'polite';
-    var announcement;
+    const text = [];
+    let priority = 'polite';
+    let announcement;
 
     // Create an array of announcement strings to be joined and appended to the
     // aria live region.
-    var il = announcements.length;
-    for (var i = 0; i < il; i++) {
+    const il = announcements.length;
+    for (let i = 0; i < il; i++) {
       announcement = announcements.pop();
       text.unshift(announcement.text);
       // If any of the announcements has a priority of assertive then the group
@@ -109,8 +106,8 @@
     // Save the text and priority into a closure variable. Multiple simultaneous
     // announcements will be concatenated and read in sequence.
     announcements.push({
-      text: text,
-      priority: priority
+      text,
+      priority,
     });
     // Immediately invoke the function that debounce returns. 200 ms is right at
     // the cusp where humans notice a pause, so we will wait
diff --git a/core/misc/autocomplete.es6.js b/core/misc/autocomplete.es6.js
index 076c48a187..eeac77e5f7 100644
--- a/core/misc/autocomplete.es6.js
+++ b/core/misc/autocomplete.es6.js
@@ -4,10 +4,7 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
-  var autocomplete;
+  let autocomplete;
 
   /**
    * Helper splitting terms from the autocomplete value.
@@ -22,13 +19,13 @@
    */
   function autocompleteSplitValues(value) {
     // We will match the value against comma-separated terms.
-    var result = [];
-    var quote = false;
-    var current = '';
-    var valueLength = value.length;
-    var character;
+    const result = [];
+    let quote = false;
+    let current = '';
+    const valueLength = value.length;
+    let character;
 
-    for (var i = 0; i < valueLength; i++) {
+    for (let i = 0; i < valueLength; i++) {
       character = value.charAt(i);
       if (character === '"') {
         current += character;
@@ -76,13 +73,13 @@
    *   Whether to perform a search or not.
    */
   function searchHandler(event) {
-    var options = autocomplete.options;
+    const options = autocomplete.options;
 
     if (options.isComposing) {
       return false;
     }
 
-    var term = autocomplete.extractLastTerm(event.target.value);
+    const term = autocomplete.extractLastTerm(event.target.value);
     // Abort search if the first character is in firstCharacterBlacklist.
     if (term.length > 0 && options.firstCharacterBlacklist.indexOf(term[0]) !== -1) {
       return false;
@@ -100,7 +97,7 @@
    *   The function to call with the response.
    */
   function sourceData(request, response) {
-    var elementId = this.element.attr('id');
+    const elementId = this.element.attr('id');
 
     if (!(elementId in autocomplete.cache)) {
       autocomplete.cache[elementId] = {};
@@ -114,10 +111,10 @@
      *   Suggestions returned by the server.
      */
     function showSuggestions(suggestions) {
-      var tagged = autocomplete.splitValues(request.term);
-      var il = tagged.length;
-      for (var i = 0; i < il; i++) {
-        var index = suggestions.indexOf(tagged[i]);
+      const tagged = autocomplete.splitValues(request.term);
+      const il = tagged.length;
+      for (let i = 0; i < il; i++) {
+        const index = suggestions.indexOf(tagged[i]);
         if (index >= 0) {
           suggestions.splice(index, 1);
         }
@@ -146,7 +143,7 @@
       showSuggestions(autocomplete.cache[elementId][term]);
     }
     else {
-      var options = $.extend({success: sourceCallbackHandler, data: {q: term}}, autocomplete.ajax);
+      const options = $.extend({ success: sourceCallbackHandler, data: { q: term } }, autocomplete.ajax);
       $.ajax(this.element.attr('data-autocomplete-path'), options);
     }
   }
@@ -173,7 +170,7 @@
    *   Returns false to indicate the event status.
    */
   function selectHandler(event, ui) {
-    var terms = autocomplete.splitValues(event.target.value);
+    const terms = autocomplete.splitValues(event.target.value);
     // Remove the current input.
     terms.pop();
     // Add the selected item.
@@ -212,14 +209,14 @@
    *   Detaches the autocomplete behaviors.
    */
   Drupal.behaviors.autocomplete = {
-    attach: function (context) {
+    attach(context) {
       // Act on textfields with the "form-autocomplete" class.
-      var $autocomplete = $(context).find('input.form-autocomplete').once('autocomplete');
+      const $autocomplete = $(context).find('input.form-autocomplete').once('autocomplete');
       if ($autocomplete.length) {
         // Allow options to be overriden per instance.
-        var blacklist = $autocomplete.attr('data-autocomplete-first-character-blacklist');
+        const blacklist = $autocomplete.attr('data-autocomplete-first-character-blacklist');
         $.extend(autocomplete.options, {
-          firstCharacterBlacklist: (blacklist) ? blacklist : ''
+          firstCharacterBlacklist: (blacklist) || '',
         });
         // Use jQuery UI Autocomplete on the textfield.
         $autocomplete.autocomplete(autocomplete.options)
@@ -228,21 +225,21 @@
           });
 
         // Use CompositionEvent to handle IME inputs. It requests remote server on "compositionend" event only.
-        $autocomplete.on('compositionstart.autocomplete', function () {
+        $autocomplete.on('compositionstart.autocomplete', () => {
           autocomplete.options.isComposing = true;
         });
-        $autocomplete.on('compositionend.autocomplete', function () {
+        $autocomplete.on('compositionend.autocomplete', () => {
           autocomplete.options.isComposing = false;
         });
       }
     },
-    detach: function (context, settings, trigger) {
+    detach(context, settings, trigger) {
       if (trigger === 'unload') {
         $(context).find('input.form-autocomplete')
           .removeOnce('autocomplete')
           .autocomplete('destroy');
       }
-    }
+    },
   };
 
   /**
@@ -254,7 +251,7 @@
     cache: {},
     // Exposes options to allow overriding by contrib.
     splitValues: autocompleteSplitValues,
-    extractLastTerm: extractLastTerm,
+    extractLastTerm,
     // jQuery UI autocomplete options.
 
     /**
@@ -267,18 +264,17 @@
       focus: focusHandler,
       search: searchHandler,
       select: selectHandler,
-      renderItem: renderItem,
+      renderItem,
       minLength: 1,
       // Custom options, used by Drupal.autocomplete.
       firstCharacterBlacklist: '',
       // Custom options, indicate IME usage status.
-      isComposing: false
+      isComposing: false,
     },
     ajax: {
-      dataType: 'json'
-    }
+      dataType: 'json',
+    },
   };
 
   Drupal.autocomplete = autocomplete;
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/misc/batch.es6.js b/core/misc/batch.es6.js
index 411badba42..995d1c51d1 100644
--- a/core/misc/batch.es6.js
+++ b/core/misc/batch.es6.js
@@ -4,25 +4,22 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Attaches the batch behavior to progress bars.
    *
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.batch = {
-    attach: function (context, settings) {
-      var batch = settings.batch;
-      var $progress = $('[data-drupal-progress]').once('batch');
-      var progressBar;
+    attach(context, settings) {
+      const batch = settings.batch;
+      const $progress = $('[data-drupal-progress]').once('batch');
+      let progressBar;
 
       // Success: redirect to the summary.
       function updateCallback(progress, status, pb) {
         if (progress === '100') {
           pb.stopMonitoring();
-          window.location = batch.uri + '&op=finished';
+          window.location = `${batch.uri}&op=finished`;
         }
       }
 
@@ -34,13 +31,12 @@
       if ($progress.length) {
         progressBar = new Drupal.ProgressBar('updateprogress', updateCallback, 'POST', errorCallback);
         progressBar.setProgress(-1, batch.initMessage);
-        progressBar.startMonitoring(batch.uri + '&op=do', 10);
+        progressBar.startMonitoring(`${batch.uri}&op=do`, 10);
         // Remove HTML from no-js progress bar.
         $progress.empty();
         // Append the JS progressbar element.
         $progress.append(progressBar.element);
       }
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/misc/collapse.es6.js b/core/misc/collapse.es6.js
index 767325ec1a..4683e848da 100644
--- a/core/misc/collapse.es6.js
+++ b/core/misc/collapse.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Modernizr, Drupal) {
-
-  'use strict';
-
   /**
    * The collapsible details object represents a single details element.
    *
@@ -20,8 +17,8 @@
     this.$node.data('details', this);
     // Expand details if there are errors inside, or if it contains an
     // element that is targeted by the URI fragment identifier.
-    var anchor = location.hash && location.hash !== '#' ? ', ' + location.hash : '';
-    if (this.$node.find('.error' + anchor).length) {
+    const anchor = location.hash && location.hash !== '#' ? `, ${location.hash}` : '';
+    if (this.$node.find(`.error${anchor}`).length) {
       this.$node.attr('open', true);
     }
     // Initialize and setup the summary,
@@ -37,7 +34,7 @@
      *
      * @type {Array.<Drupal.CollapsibleDetails>}
      */
-    instances: []
+    instances: [],
   });
 
   $.extend(CollapsibleDetails.prototype, /** @lends Drupal.CollapsibleDetails# */{
@@ -49,7 +46,7 @@
      *
      * @listens event:summaryUpdated
      */
-    setupSummary: function () {
+    setupSummary() {
       this.$summary = $('<span class="summary"></span>');
       this.$node
         .on('summaryUpdated', $.proxy(this.onSummaryUpdated, this))
@@ -59,9 +56,9 @@
     /**
      * Initialize and setup legend markup.
      */
-    setupLegend: function () {
+    setupLegend() {
       // Turn the summary into a clickable link.
-      var $legend = this.$node.find('> summary');
+      const $legend = this.$node.find('> summary');
 
       $('<span class="details-summary-prefix visually-hidden"></span>')
         .append(this.$node.attr('open') ? Drupal.t('Hide') : Drupal.t('Show'))
@@ -70,7 +67,7 @@
 
       // .wrapInner() does not retain bound events.
       $('<a class="details-title"></a>')
-        .attr('href', '#' + this.$node.attr('id'))
+        .attr('href', `#${this.$node.attr('id')}`)
         .prepend($legend.contents())
         .appendTo($legend);
 
@@ -85,7 +82,7 @@
      * @param {jQuery.Event} e
      *   The event triggered.
      */
-    onLegendClick: function (e) {
+    onLegendClick(e) {
       this.toggle();
       e.preventDefault();
     },
@@ -93,17 +90,17 @@
     /**
      * Update summary.
      */
-    onSummaryUpdated: function () {
-      var text = $.trim(this.$node.drupalGetSummary());
-      this.$summary.html(text ? ' (' + text + ')' : '');
+    onSummaryUpdated() {
+      const text = $.trim(this.$node.drupalGetSummary());
+      this.$summary.html(text ? ` (${text})` : '');
     },
 
     /**
      * Toggle the visibility of a details element using smooth animations.
      */
-    toggle: function () {
-      var isOpen = !!this.$node.attr('open');
-      var $summaryPrefix = this.$node.find('> summary span.details-summary-prefix');
+    toggle() {
+      const isOpen = !!this.$node.attr('open');
+      const $summaryPrefix = this.$node.find('> summary span.details-summary-prefix');
       if (isOpen) {
         $summaryPrefix.html(Drupal.t('Show'));
       }
@@ -112,10 +109,10 @@
       }
       // Delay setting the attribute to emulate chrome behavior and make
       // details-aria.js work as expected with this polyfill.
-      setTimeout(function () {
+      setTimeout(() => {
         this.$node.attr('open', !isOpen);
-      }.bind(this), 0);
-    }
+      }, 0);
+    },
   });
 
   /**
@@ -127,20 +124,19 @@
    *   Attaches behavior for the details element.
    */
   Drupal.behaviors.collapse = {
-    attach: function (context) {
+    attach(context) {
       if (Modernizr.details) {
         return;
       }
-      var $collapsibleDetails = $(context).find('details').once('collapse').addClass('collapse-processed');
+      const $collapsibleDetails = $(context).find('details').once('collapse').addClass('collapse-processed');
       if ($collapsibleDetails.length) {
-        for (var i = 0; i < $collapsibleDetails.length; i++) {
+        for (let i = 0; i < $collapsibleDetails.length; i++) {
           CollapsibleDetails.instances.push(new CollapsibleDetails($collapsibleDetails[i]));
         }
       }
-    }
+    },
   };
 
   // Expose constructor in the public space.
   Drupal.CollapsibleDetails = CollapsibleDetails;
-
-})(jQuery, Modernizr, Drupal);
+}(jQuery, Modernizr, Drupal));
diff --git a/core/misc/date.es6.js b/core/misc/date.es6.js
index 8b6b71cb1d..1098ce6b27 100644
--- a/core/misc/date.es6.js
+++ b/core/misc/date.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Modernizr, Drupal) {
-
-  'use strict';
-
   /**
    * Attach datepicker fallback on date elements.
    *
@@ -20,16 +17,16 @@
    *   Detach the behavior destroying datepickers on effected elements.
    */
   Drupal.behaviors.date = {
-    attach: function (context, settings) {
-      var $context = $(context);
+    attach(context, settings) {
+      const $context = $(context);
       // Skip if date are supported by the browser.
       if (Modernizr.inputtypes.date === true) {
         return;
       }
       $context.find('input[data-drupal-date-format]').once('datePicker').each(function () {
-        var $input = $(this);
-        var datepickerSettings = {};
-        var dateFormat = $input.data('drupalDateFormat');
+        const $input = $(this);
+        const datepickerSettings = {};
+        const dateFormat = $input.data('drupalDateFormat');
         // The date format is saved in PHP style, we need to convert to jQuery
         // datepicker.
         datepickerSettings.dateFormat = dateFormat
@@ -46,11 +43,10 @@
         $input.datepicker(datepickerSettings);
       });
     },
-    detach: function (context, settings, trigger) {
+    detach(context, settings, trigger) {
       if (trigger === 'unload') {
         $(context).find('input[data-drupal-date-format]').findOnce('datePicker').datepicker('destroy');
       }
-    }
+    },
   };
-
-})(jQuery, Modernizr, Drupal);
+}(jQuery, Modernizr, Drupal));
diff --git a/core/misc/debounce.es6.js b/core/misc/debounce.es6.js
index 995e3d7135..56ba0db681 100644
--- a/core/misc/debounce.es6.js
+++ b/core/misc/debounce.es6.js
@@ -27,21 +27,18 @@
  *   The debounced function.
  */
 Drupal.debounce = function (func, wait, immediate) {
-
-  'use strict';
-
-  var timeout;
-  var result;
+  let timeout;
+  let result;
   return function () {
-    var context = this;
-    var args = arguments;
-    var later = function () {
+    const context = this;
+    const args = arguments;
+    const later = function () {
       timeout = null;
       if (!immediate) {
         result = func.apply(context, args);
       }
     };
-    var callNow = immediate && !timeout;
+    const callNow = immediate && !timeout;
     clearTimeout(timeout);
     timeout = setTimeout(later, wait);
     if (callNow) {
diff --git a/core/misc/details-aria.es6.js b/core/misc/details-aria.es6.js
index d341422351..bf92846dac 100644
--- a/core/misc/details-aria.es6.js
+++ b/core/misc/details-aria.es6.js
@@ -4,26 +4,22 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Handles `aria-expanded` and `aria-pressed` attributes on details elements.
    *
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.detailsAria = {
-    attach: function () {
-      $('body').once('detailsAria').on('click.detailsAria', 'summary', function (event) {
-        var $summary = $(event.currentTarget);
-        var open = $(event.currentTarget.parentNode).attr('open') === 'open' ? 'false' : 'true';
+    attach() {
+      $('body').once('detailsAria').on('click.detailsAria', 'summary', (event) => {
+        const $summary = $(event.currentTarget);
+        const open = $(event.currentTarget.parentNode).attr('open') === 'open' ? 'false' : 'true';
 
         $summary.attr({
           'aria-expanded': open,
-          'aria-pressed': open
+          'aria-pressed': open,
         });
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/misc/dialog/dialog.ajax.es6.js b/core/misc/dialog/dialog.ajax.es6.js
index 3f1b0c2efd..798673a1d8 100644
--- a/core/misc/dialog/dialog.ajax.es6.js
+++ b/core/misc/dialog/dialog.ajax.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Initialize dialogs for Ajax purposes.
    *
@@ -16,8 +13,8 @@
    *   Attaches the behaviors for dialog ajax functionality.
    */
   Drupal.behaviors.dialog = {
-    attach: function (context, settings) {
-      var $context = $(context);
+    attach(context, settings) {
+      const $context = $(context);
 
       // Provide a known 'drupal-modal' DOM element for Drupal-based modal
       // dialogs. Non-modal dialogs are responsible for creating their own
@@ -31,7 +28,7 @@
 
       // Special behaviors specific when attaching content within a dialog.
       // These behaviors usually fire after a validation error inside a dialog.
-      var $dialog = $context.closest('.ui-dialog-content');
+      const $dialog = $context.closest('.ui-dialog-content');
       if ($dialog.length) {
         // Remove and replace the dialog buttons with those from the new form.
         if ($dialog.dialog('option', 'drupalAutoButtons')) {
@@ -43,7 +40,7 @@
         $dialog.dialog('widget').trigger('focus');
       }
 
-      var originalClose = settings.dialog.close;
+      const originalClose = settings.dialog.close;
       // Overwrite the close method to remove the dialog on closing.
       settings.dialog.close = function (event) {
         originalClose.apply(settings.dialog, arguments);
@@ -60,27 +57,27 @@
      * @return {Array}
      *   An array of buttons that need to be added to the button area.
      */
-    prepareDialogButtons: function ($dialog) {
-      var buttons = [];
-      var $buttons = $dialog.find('.form-actions input[type=submit], .form-actions a.button');
+    prepareDialogButtons($dialog) {
+      const buttons = [];
+      const $buttons = $dialog.find('.form-actions input[type=submit], .form-actions a.button');
       $buttons.each(function () {
         // Hidden form buttons need special attention. For browser consistency,
         // the button needs to be "visible" in order to have the enter key fire
         // the form submit event. So instead of a simple "hide" or
         // "display: none", we set its dimensions to zero.
         // See http://mattsnider.com/how-forms-submit-when-pressing-enter/
-        var $originalButton = $(this).css({
+        const $originalButton = $(this).css({
           display: 'block',
           width: 0,
           height: 0,
           padding: 0,
           border: 0,
-          overflow: 'hidden'
+          overflow: 'hidden',
         });
         buttons.push({
           text: $originalButton.html() || $originalButton.attr('value'),
           class: $originalButton.attr('class'),
-          click: function (e) {
+          click(e) {
             // If the original button is an anchor tag, triggering the "click"
             // event will not simulate a click. Use the click method instead.
             if ($originalButton.is('a')) {
@@ -90,11 +87,11 @@
               $originalButton.trigger('mousedown').trigger('mouseup').trigger('click');
               e.preventDefault();
             }
-          }
+          },
         });
       });
       return buttons;
-    }
+    },
   };
 
   /**
@@ -114,10 +111,10 @@
     if (!response.selector) {
       return false;
     }
-    var $dialog = $(response.selector);
+    let $dialog = $(response.selector);
     if (!$dialog.length) {
       // Create the element if needed.
-      $dialog = $('<div id="' + response.selector.replace(/^#/, '') + '" class="ui-front"/>').appendTo('body');
+      $dialog = $(`<div id="${response.selector.replace(/^#/, '')}" class="ui-front"/>`).appendTo('body');
     }
     // Set up the wrapper, if there isn't one.
     if (!ajax.wrapper) {
@@ -136,14 +133,14 @@
     }
 
     // Bind dialogButtonsChange.
-    $dialog.on('dialogButtonsChange', function () {
-      var buttons = Drupal.behaviors.dialog.prepareDialogButtons($dialog);
+    $dialog.on('dialogButtonsChange', () => {
+      const buttons = Drupal.behaviors.dialog.prepareDialogButtons($dialog);
       $dialog.dialog('option', 'buttons', buttons);
     });
 
     // Open the dialog itself.
     response.dialogOptions = response.dialogOptions || {};
-    var dialog = Drupal.dialog($dialog.get(0), response.dialogOptions);
+    const dialog = Drupal.dialog($dialog.get(0), response.dialogOptions);
     if (response.dialogOptions.modal) {
       dialog.showModal();
     }
@@ -172,7 +169,7 @@
    *   The HTTP status code.
    */
   Drupal.AjaxCommands.prototype.closeDialog = function (ajax, response, status) {
-    var $dialog = $(response.selector);
+    const $dialog = $(response.selector);
     if ($dialog.length) {
       Drupal.dialog($dialog.get(0)).close();
       if (!response.persist) {
@@ -203,7 +200,7 @@
    *   The HTTP status code.
    */
   Drupal.AjaxCommands.prototype.setDialogOption = function (ajax, response, status) {
-    var $dialog = $(response.selector);
+    const $dialog = $(response.selector);
     if ($dialog.length) {
       $dialog.dialog('option', response.optionName, response.optionValue);
     }
@@ -221,8 +218,8 @@
    * @param {object} [settings]
    *   Dialog settings.
    */
-  $(window).on('dialog:aftercreate', function (e, dialog, $element, settings) {
-    $element.on('click.dialog', '.dialog-cancel', function (e) {
+  $(window).on('dialog:aftercreate', (e, dialog, $element, settings) => {
+    $element.on('click.dialog', '.dialog-cancel', (e) => {
       dialog.close('cancel');
       e.preventDefault();
       e.stopPropagation();
@@ -239,8 +236,7 @@
    * @param {jQuery} $element
    *   jQuery collection of the dialog element.
    */
-  $(window).on('dialog:beforeclose', function (e, dialog, $element) {
+  $(window).on('dialog:beforeclose', (e, dialog, $element) => {
     $element.off('.dialog');
   });
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/misc/dialog/dialog.es6.js b/core/misc/dialog/dialog.es6.js
index ea1e52c8dc..545afc34ca 100644
--- a/core/misc/dialog/dialog.es6.js
+++ b/core/misc/dialog/dialog.es6.js
@@ -6,9 +6,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Default dialog options.
    *
@@ -30,10 +27,10 @@
     // side), you may want to override this method and do
     // `jQuery(event.target).remove()` as well, to remove the dialog on
     // closing.
-    close: function (event) {
+    close(event) {
       Drupal.dialog(event.target).close();
       Drupal.detachBehaviors(event.target, null, 'unload');
-    }
+    },
   };
 
   /**
@@ -63,18 +60,18 @@
    *   The dialog instance.
    */
   Drupal.dialog = function (element, options) {
-    var undef;
-    var $element = $(element);
-    var dialog = {
+    let undef;
+    const $element = $(element);
+    const dialog = {
       open: false,
       returnValue: undef,
-      show: function () {
-        openDialog({modal: false});
+      show() {
+        openDialog({ modal: false });
       },
-      showModal: function () {
-        openDialog({modal: true});
+      showModal() {
+        openDialog({ modal: true });
       },
-      close: closeDialog
+      close: closeDialog,
     };
 
     function openDialog(settings) {
@@ -96,5 +93,4 @@
 
     return dialog;
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/misc/dialog/dialog.jquery-ui.es6.js b/core/misc/dialog/dialog.jquery-ui.es6.js
index 2526e30953..f30489b28d 100644
--- a/core/misc/dialog/dialog.jquery-ui.es6.js
+++ b/core/misc/dialog/dialog.jquery-ui.es6.js
@@ -4,20 +4,17 @@
  */
 
 (function ($) {
-
-  'use strict';
-
   $.widget('ui.dialog', $.ui.dialog, {
     options: {
       buttonClass: 'button',
-      buttonPrimaryClass: 'button--primary'
+      buttonPrimaryClass: 'button--primary',
     },
-    _createButtons: function () {
-      var opts = this.options;
-      var primaryIndex;
-      var $buttons;
-      var index;
-      var il = opts.buttons.length;
+    _createButtons() {
+      const opts = this.options;
+      let primaryIndex;
+      let $buttons;
+      let index;
+      const il = opts.buttons.length;
       for (index = 0; index < il; index++) {
         if (opts.buttons[index].primary && opts.buttons[index].primary === true) {
           primaryIndex = index;
@@ -30,7 +27,6 @@
       if (typeof primaryIndex !== 'undefined') {
         $buttons.eq(index).addClass(opts.buttonPrimaryClass);
       }
-    }
+    },
   });
-
-})(jQuery);
+}(jQuery));
diff --git a/core/misc/dialog/dialog.position.es6.js b/core/misc/dialog/dialog.position.es6.js
index e3c058f844..d2d35a3263 100644
--- a/core/misc/dialog/dialog.position.es6.js
+++ b/core/misc/dialog/dialog.position.es6.js
@@ -10,11 +10,8 @@
  */
 
 (function ($, Drupal, drupalSettings, debounce, displace) {
-
-  'use strict';
-
   // autoResize option will turn off resizable and draggable.
-  drupalSettings.dialog = $.extend({autoResize: true, maxHeight: '95%'}, drupalSettings.dialog);
+  drupalSettings.dialog = $.extend({ autoResize: true, maxHeight: '95%' }, drupalSettings.dialog);
 
   /**
    * Resets the current options for positioning.
@@ -32,13 +29,13 @@
    * @fires event:dialogContentResize
    */
   function resetSize(event) {
-    var positionOptions = ['width', 'height', 'minWidth', 'minHeight', 'maxHeight', 'maxWidth', 'position'];
-    var adjustedOptions = {};
-    var windowHeight = $(window).height();
-    var option;
-    var optionValue;
-    var adjustedValue;
-    for (var n = 0; n < positionOptions.length; n++) {
+    const positionOptions = ['width', 'height', 'minWidth', 'minHeight', 'maxHeight', 'maxWidth', 'position'];
+    let adjustedOptions = {};
+    let windowHeight = $(window).height();
+    let option;
+    let optionValue;
+    let adjustedValue;
+    for (let n = 0; n < positionOptions.length; n++) {
       option = positionOptions[n];
       optionValue = event.data.settings[option];
       if (optionValue) {
@@ -76,26 +73,26 @@
    *   Altered options object.
    */
   function resetPosition(options) {
-    var offsets = displace.offsets;
-    var left = offsets.left - offsets.right;
-    var top = offsets.top - offsets.bottom;
+    const offsets = displace.offsets;
+    const left = offsets.left - offsets.right;
+    const top = offsets.top - offsets.bottom;
 
-    var leftString = (left > 0 ? '+' : '-') + Math.abs(Math.round(left / 2)) + 'px';
-    var topString = (top > 0 ? '+' : '-') + Math.abs(Math.round(top / 2)) + 'px';
+    const leftString = `${(left > 0 ? '+' : '-') + Math.abs(Math.round(left / 2))}px`;
+    const topString = `${(top > 0 ? '+' : '-') + Math.abs(Math.round(top / 2))}px`;
     options.position = {
-      my: 'center' + (left !== 0 ? leftString : '') + ' center' + (top !== 0 ? topString : ''),
-      of: window
+      my: `center${left !== 0 ? leftString : ''} center${top !== 0 ? topString : ''}`,
+      of: window,
     };
     return options;
   }
 
   $(window).on({
     'dialog:aftercreate': function (event, dialog, $element, settings) {
-      var autoResize = debounce(resetSize, 20);
-      var eventData = {settings: settings, $element: $element};
+      const autoResize = debounce(resetSize, 20);
+      const eventData = { settings, $element };
       if (settings.autoResize === true || settings.autoResize === 'true') {
         $element
-          .dialog('option', {resizable: false, draggable: false})
+          .dialog('option', { resizable: false, draggable: false })
           .dialog('widget').css('position', 'fixed');
         $(window)
           .on('resize.dialogResize scroll.dialogResize', eventData, autoResize)
@@ -106,7 +103,6 @@
     'dialog:beforeclose': function (event, dialog, $element) {
       $(window).off('.dialogResize');
       $(document).off('.dialogResize');
-    }
+    },
   });
-
-})(jQuery, Drupal, drupalSettings, Drupal.debounce, Drupal.displace);
+}(jQuery, Drupal, drupalSettings, Drupal.debounce, Drupal.displace));
diff --git a/core/misc/displace.es6.js b/core/misc/displace.es6.js
index 3e89c563ec..0424d80fa5 100644
--- a/core/misc/displace.es6.js
+++ b/core/misc/displace.es6.js
@@ -25,19 +25,16 @@
  */
 
 (function ($, Drupal, debounce) {
-
-  'use strict';
-
   /**
    * @name Drupal.displace.offsets
    *
    * @type {Drupal~displaceOffset}
    */
-  var offsets = {
+  let offsets = {
     top: 0,
     right: 0,
     bottom: 0,
-    left: 0
+    left: 0,
   };
 
   /**
@@ -46,7 +43,7 @@
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.drupalDisplace = {
-    attach: function () {
+    attach() {
       // Mark this behavior as processed on the first pass.
       if (this.displaceProcessed) {
         return;
@@ -54,7 +51,7 @@
       this.displaceProcessed = true;
 
       $(window).on('resize.drupalDisplace', debounce(displace, 200));
-    }
+    },
   };
 
   /**
@@ -96,7 +93,7 @@
       top: calculateOffset('top'),
       right: calculateOffset('right'),
       bottom: calculateOffset('bottom'),
-      left: calculateOffset('left')
+      left: calculateOffset('left'),
     };
   }
 
@@ -118,17 +115,17 @@
    *   The viewport displacement distance for the requested edge.
    */
   function calculateOffset(edge) {
-    var edgeOffset = 0;
-    var displacingElements = document.querySelectorAll('[data-offset-' + edge + ']');
-    var n = displacingElements.length;
-    for (var i = 0; i < n; i++) {
-      var el = displacingElements[i];
+    let edgeOffset = 0;
+    const displacingElements = document.querySelectorAll(`[data-offset-${edge}]`);
+    const n = displacingElements.length;
+    for (let i = 0; i < n; i++) {
+      const el = displacingElements[i];
       // If the element is not visible, do consider its dimensions.
       if (el.style.display === 'none') {
         continue;
       }
       // If the offset data attribute contains a displacing value, use it.
-      var displacement = parseInt(el.getAttribute('data-offset-' + edge), 10);
+      let displacement = parseInt(el.getAttribute(`data-offset-${edge}`), 10);
       // If the element's offset data attribute exits
       // but is not a valid number then get the displacement
       // dimensions directly from the element.
@@ -157,15 +154,15 @@
    *   The viewport displacement distance for the requested edge.
    */
   function getRawOffset(el, edge) {
-    var $el = $(el);
-    var documentElement = document.documentElement;
-    var displacement = 0;
-    var horizontal = (edge === 'left' || edge === 'right');
+    const $el = $(el);
+    const documentElement = document.documentElement;
+    let displacement = 0;
+    const horizontal = (edge === 'left' || edge === 'right');
     // Get the offset of the element itself.
-    var placement = $el.offset()[horizontal ? 'left' : 'top'];
+    let placement = $el.offset()[horizontal ? 'left' : 'top'];
     // Subtract scroll distance from placement to get the distance
     // to the edge of the viewport.
-    placement -= window['scroll' + (horizontal ? 'X' : 'Y')] || document.documentElement['scroll' + (horizontal ? 'Left' : 'Top')] || 0;
+    placement -= window[`scroll${horizontal ? 'X' : 'Y'}`] || document.documentElement[`scroll${horizontal ? 'Left' : 'Top'}`] || 0;
     // Find the displacement value according to the edge.
     switch (edge) {
       // Left and top elements displace as a sum of their own offset value
@@ -209,14 +206,13 @@
      *
      * @ignore
      */
-    offsets: offsets,
+    offsets,
 
     /**
      * Expose method to compute a single edge offsets.
      *
      * @ignore
      */
-    calculateOffset: calculateOffset
+    calculateOffset,
   });
-
-})(jQuery, Drupal, Drupal.debounce);
+}(jQuery, Drupal, Drupal.debounce));
diff --git a/core/misc/dropbutton/dropbutton.es6.js b/core/misc/dropbutton/dropbutton.es6.js
index 04f9491ad7..6fe2b67db7 100644
--- a/core/misc/dropbutton/dropbutton.es6.js
+++ b/core/misc/dropbutton/dropbutton.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Process elements with the .dropbutton class on page load.
    *
@@ -16,21 +13,21 @@
    *   Attaches dropButton behaviors.
    */
   Drupal.behaviors.dropButton = {
-    attach: function (context, settings) {
-      var $dropbuttons = $(context).find('.dropbutton-wrapper').once('dropbutton');
+    attach(context, settings) {
+      const $dropbuttons = $(context).find('.dropbutton-wrapper').once('dropbutton');
       if ($dropbuttons.length) {
         // Adds the delegated handler that will toggle dropdowns on click.
-        var $body = $('body').once('dropbutton-click');
+        const $body = $('body').once('dropbutton-click');
         if ($body.length) {
           $body.on('click', '.dropbutton-toggle', dropbuttonClickHandler);
         }
         // Initialize all buttons.
-        var il = $dropbuttons.length;
-        for (var i = 0; i < il; i++) {
+        const il = $dropbuttons.length;
+        for (let i = 0; i < il; i++) {
           DropButton.dropbuttons.push(new DropButton($dropbuttons[i], settings.dropbutton));
         }
       }
-    }
+    },
   };
 
   /**
@@ -64,8 +61,8 @@
    */
   function DropButton(dropbutton, settings) {
     // Merge defaults with settings.
-    var options = $.extend({title: Drupal.t('List additional actions')}, settings);
-    var $dropbutton = $(dropbutton);
+    const options = $.extend({ title: Drupal.t('List additional actions') }, settings);
+    const $dropbutton = $(dropbutton);
 
     /**
      * @type {jQuery}
@@ -87,9 +84,9 @@
     // Add the special dropdown only if there are hidden actions.
     if (this.$actions.length > 1) {
       // Identify the first element of the collection.
-      var $primary = this.$actions.slice(0, 1);
+      const $primary = this.$actions.slice(0, 1);
       // Identify the secondary actions.
-      var $secondary = this.$actions.slice(1);
+      const $secondary = this.$actions.slice(1);
       $secondary.addClass('secondary-action');
       // Add toggle link.
       $primary.after(Drupal.theme('dropbuttonToggle', options));
@@ -122,7 +119,7 @@
           /**
            * @ignore
            */
-          'focusin.dropbutton': $.proxy(this.focusIn, this)
+          'focusin.dropbutton': $.proxy(this.focusIn, this),
         });
     }
     else {
@@ -139,7 +136,7 @@
      *
      * @type {Array.<Drupal.DropButton>}
      */
-    dropbuttons: []
+    dropbuttons: [],
   });
 
   /**
@@ -154,8 +151,8 @@
      *   Force the dropbutton to open by passing true or to close by
      *   passing false.
      */
-    toggle: function (show) {
-      var isBool = typeof show === 'boolean';
+    toggle(show) {
+      const isBool = typeof show === 'boolean';
       show = isBool ? show : !this.$dropbutton.hasClass('open');
       this.$dropbutton.toggleClass('open', show);
     },
@@ -163,7 +160,7 @@
     /**
      * @method
      */
-    hoverIn: function () {
+    hoverIn() {
       // Clear any previous timer we were using.
       if (this.timerID) {
         window.clearTimeout(this.timerID);
@@ -173,7 +170,7 @@
     /**
      * @method
      */
-    hoverOut: function () {
+    hoverOut() {
       // Wait half a second before closing.
       this.timerID = window.setTimeout($.proxy(this, 'close'), 500);
     },
@@ -181,14 +178,14 @@
     /**
      * @method
      */
-    open: function () {
+    open() {
       this.toggle(true);
     },
 
     /**
      * @method
      */
-    close: function () {
+    close() {
       this.toggle(false);
     },
 
@@ -196,7 +193,7 @@
      * @param {jQuery.Event} e
      *   The event triggered.
      */
-    focusOut: function (e) {
+    focusOut(e) {
       this.hoverOut.call(this, e);
     },
 
@@ -204,9 +201,9 @@
      * @param {jQuery.Event} e
      *   The event triggered.
      */
-    focusIn: function (e) {
+    focusIn(e) {
       this.hoverIn.call(this, e);
-    }
+    },
   });
 
   $.extend(Drupal.theme, /** @lends Drupal.theme */{
@@ -222,12 +219,11 @@
      * @return {string}
      *   A string representing a DOM fragment.
      */
-    dropbuttonToggle: function (options) {
-      return '<li class="dropbutton-toggle"><button type="button"><span class="dropbutton-arrow"><span class="visually-hidden">' + options.title + '</span></span></button></li>';
-    }
+    dropbuttonToggle(options) {
+      return `<li class="dropbutton-toggle"><button type="button"><span class="dropbutton-arrow"><span class="visually-hidden">${options.title}</span></span></button></li>`;
+    },
   });
 
   // Expose constructor in the public space.
   Drupal.DropButton = DropButton;
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/misc/drupal.es6.js b/core/misc/drupal.es6.js
index d509795b86..e64f9dac0d 100644
--- a/core/misc/drupal.es6.js
+++ b/core/misc/drupal.es6.js
@@ -38,14 +38,11 @@
  *
  * @namespace
  */
-window.Drupal = {behaviors: {}, locale: {}};
+window.Drupal = { behaviors: {}, locale: {} };
 
 // JavaScript should be made compatible with libraries other than jQuery by
 // wrapping it in an anonymous closure.
 (function (Drupal, drupalSettings, drupalTranslations) {
-
-  'use strict';
-
   /**
    * Helper to rethrow errors asynchronously.
    *
@@ -56,7 +53,9 @@ window.Drupal = {behaviors: {}, locale: {}};
    *   The error to be thrown.
    */
   Drupal.throwError = function (error) {
-    setTimeout(function () { throw error; }, 0);
+    setTimeout(() => {
+      throw error;
+    }, 0);
   };
 
   /**
@@ -151,9 +150,9 @@ window.Drupal = {behaviors: {}, locale: {}};
   Drupal.attachBehaviors = function (context, settings) {
     context = context || document;
     settings = settings || drupalSettings;
-    var behaviors = Drupal.behaviors;
+    const behaviors = Drupal.behaviors;
     // Execute all of them.
-    for (var i in behaviors) {
+    for (const i in behaviors) {
       if (behaviors.hasOwnProperty(i) && typeof behaviors[i].attach === 'function') {
         // Don't stop the execution of behaviors in case of an error.
         try {
@@ -211,9 +210,9 @@ window.Drupal = {behaviors: {}, locale: {}};
     context = context || document;
     settings = settings || drupalSettings;
     trigger = trigger || 'unload';
-    var behaviors = Drupal.behaviors;
+    const behaviors = Drupal.behaviors;
     // Execute all of them.
-    for (var i in behaviors) {
+    for (const i in behaviors) {
       if (behaviors.hasOwnProperty(i) && typeof behaviors[i].detach === 'function') {
         // Don't stop the execution of behaviors in case of an error.
         try {
@@ -268,9 +267,9 @@ window.Drupal = {behaviors: {}, locale: {}};
    */
   Drupal.formatString = function (str, args) {
     // Keep args intact.
-    var processedArgs = {};
+    const processedArgs = {};
     // Transform arguments before inserting them.
-    for (var key in args) {
+    for (const key in args) {
       if (args.hasOwnProperty(key)) {
         switch (key.charAt(0)) {
           // Escaped only.
@@ -318,14 +317,14 @@ window.Drupal = {behaviors: {}, locale: {}};
     // If the array of keys is not passed then collect the keys from the args.
     if (!Array.isArray(keys)) {
       keys = [];
-      for (var k in args) {
+      for (const k in args) {
         if (args.hasOwnProperty(k)) {
           keys.push(k);
         }
       }
 
       // Order the keys by the character length. The shortest one is the first.
-      keys.sort(function (a, b) { return a.length - b.length; });
+      keys.sort((a, b) => a.length - b.length);
     }
 
     if (keys.length === 0) {
@@ -333,11 +332,11 @@ window.Drupal = {behaviors: {}, locale: {}};
     }
 
     // Take next longest one from the end.
-    var key = keys.pop();
-    var fragments = str.split(key);
+    const key = keys.pop();
+    const fragments = str.split(key);
 
     if (keys.length) {
-      for (var i = 0; i < fragments.length; i++) {
+      for (let i = 0; i < fragments.length; i++) {
         // Process each fragment with a copy of remaining keys.
         fragments[i] = Drupal.stringReplace(fragments[i], args, keys.slice(0));
       }
@@ -408,7 +407,7 @@ window.Drupal = {behaviors: {}, locale: {}};
    * @see https://github.com/jquery/jquery-ui/blob/1.11.4/ui/tabs.js#L53
    */
   Drupal.url.toAbsolute = function (url) {
-    var urlParsingNode = document.createElement('a');
+    const urlParsingNode = document.createElement('a');
 
     // Decode the URL first; this is required by IE <= 6. Decoding non-UTF-8
     // strings may throw an exception.
@@ -440,15 +439,15 @@ window.Drupal = {behaviors: {}, locale: {}};
   Drupal.url.isLocal = function (url) {
     // Always use browser-derived absolute URLs in the comparison, to avoid
     // attempts to break out of the base path using directory traversal.
-    var absoluteUrl = Drupal.url.toAbsolute(url);
-    var protocol = location.protocol;
+    let absoluteUrl = Drupal.url.toAbsolute(url);
+    let protocol = location.protocol;
 
     // Consider URLs that match this site's base URL but use HTTPS instead of HTTP
     // as local as well.
     if (protocol === 'http:' && absoluteUrl.indexOf('https:') === 0) {
       protocol = 'https:';
     }
-    var baseUrl = protocol + '//' + location.host + drupalSettings.path.baseUrl.slice(0, -1);
+    let baseUrl = `${protocol}//${location.host}${drupalSettings.path.baseUrl.slice(0, -1)}`;
 
     // Decoding non-UTF-8 strings may throw an exception.
     try {
@@ -466,7 +465,7 @@ window.Drupal = {behaviors: {}, locale: {}};
 
     // The given URL matches the site's base URL, or has a path under the site's
     // base URL.
-    return absoluteUrl === baseUrl || absoluteUrl.indexOf(baseUrl + '/') === 0;
+    return absoluteUrl === baseUrl || absoluteUrl.indexOf(`${baseUrl}/`) === 0;
   };
 
   /**
@@ -506,13 +505,13 @@ window.Drupal = {behaviors: {}, locale: {}};
     args = args || {};
     args['@count'] = count;
 
-    var pluralDelimiter = drupalSettings.pluralDelimiter;
-    var translations = Drupal.t(singular + pluralDelimiter + plural, args, options).split(pluralDelimiter);
-    var index = 0;
+    const pluralDelimiter = drupalSettings.pluralDelimiter;
+    const translations = Drupal.t(singular + pluralDelimiter + plural, args, options).split(pluralDelimiter);
+    let index = 0;
 
     // Determine the index of the plural form.
     if (typeof drupalTranslations !== 'undefined' && drupalTranslations.pluralFormula) {
-      index = count in drupalTranslations.pluralFormula ? drupalTranslations.pluralFormula[count] : drupalTranslations.pluralFormula['default'];
+      index = count in drupalTranslations.pluralFormula ? drupalTranslations.pluralFormula[count] : drupalTranslations.pluralFormula.default;
     }
     else if (args['@count'] !== 1) {
       index = 1;
@@ -561,7 +560,7 @@ window.Drupal = {behaviors: {}, locale: {}};
    *   but also a complex object.
    */
   Drupal.theme = function (func) {
-    var args = Array.prototype.slice.apply(arguments, [1]);
+    const args = Array.prototype.slice.apply(arguments, [1]);
     if (func in Drupal.theme) {
       return Drupal.theme[func].apply(this, args);
     }
@@ -577,7 +576,6 @@ window.Drupal = {behaviors: {}, locale: {}};
    *   The formatted text (html).
    */
   Drupal.theme.placeholder = function (str) {
-    return '<em class="placeholder">' + Drupal.checkPlain(str) + '</em>';
+    return `<em class="placeholder">${Drupal.checkPlain(str)}</em>`;
   };
-
-})(Drupal, window.drupalSettings, window.drupalTranslations);
+}(Drupal, window.drupalSettings, window.drupalTranslations));
diff --git a/core/misc/drupal.init.es6.js b/core/misc/drupal.init.es6.js
index 0e55e190ef..62cd029e46 100644
--- a/core/misc/drupal.init.es6.js
+++ b/core/misc/drupal.init.es6.js
@@ -10,10 +10,8 @@ document.documentElement.className += ' js';
 // wrapping it in an anonymous closure.
 
 (function (domready, Drupal, drupalSettings) {
-
-  'use strict';
-
   // Attach all behaviors.
-  domready(function () { Drupal.attachBehaviors(document, drupalSettings); });
-
-})(domready, Drupal, window.drupalSettings);
+  domready(() => {
+    Drupal.attachBehaviors(document, drupalSettings);
+  });
+}(domready, Drupal, window.drupalSettings));
diff --git a/core/misc/drupalSettingsLoader.es6.js b/core/misc/drupalSettingsLoader.es6.js
index 7ff292efbf..2e58071f31 100644
--- a/core/misc/drupalSettingsLoader.es6.js
+++ b/core/misc/drupalSettingsLoader.es6.js
@@ -4,11 +4,8 @@
  */
 
 (function () {
-
-  'use strict';
-
   // Use direct child elements to harden against XSS exploits when CSP is on.
-  var settingsElement = document.querySelector('head > script[type="application/json"][data-drupal-selector="drupal-settings-json"], body > script[type="application/json"][data-drupal-selector="drupal-settings-json"]');
+  const settingsElement = document.querySelector('head > script[type="application/json"][data-drupal-selector="drupal-settings-json"], body > script[type="application/json"][data-drupal-selector="drupal-settings-json"]');
 
   /**
    * Variable generated by Drupal with all the configuration created from PHP.
@@ -22,4 +19,4 @@
   if (settingsElement !== null) {
     window.drupalSettings = JSON.parse(settingsElement.textContent);
   }
-})();
+}());
diff --git a/core/misc/entity-form.es6.js b/core/misc/entity-form.es6.js
index 87253c9022..a0433010f2 100644
--- a/core/misc/entity-form.es6.js
+++ b/core/misc/entity-form.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Sets summaries about revision and translation of entities.
    *
@@ -19,11 +16,11 @@
    *   translation options.
    */
   Drupal.behaviors.entityContentDetailsSummaries = {
-    attach: function (context) {
-      var $context = $(context);
-      $context.find('.entity-content-form-revision-information').drupalSetSummary(function (context) {
-        var $revisionContext = $(context);
-        var revisionCheckbox = $revisionContext.find('.js-form-item-revision input');
+    attach(context) {
+      const $context = $(context);
+      $context.find('.entity-content-form-revision-information').drupalSetSummary((context) => {
+        const $revisionContext = $(context);
+        const revisionCheckbox = $revisionContext.find('.js-form-item-revision input');
 
         // Return 'New revision' if the 'Create new revision' checkbox is checked,
         // or if the checkbox doesn't exist, but the revision log does. For users
@@ -36,10 +33,10 @@
         return Drupal.t('No revision');
       });
 
-      $context.find('details.entity-translation-options').drupalSetSummary(function (context) {
-        var $translationContext = $(context);
-        var translate;
-        var $checkbox = $translationContext.find('.js-form-item-translation-translate input');
+      $context.find('details.entity-translation-options').drupalSetSummary((context) => {
+        const $translationContext = $(context);
+        let translate;
+        let $checkbox = $translationContext.find('.js-form-item-translation-translate input');
 
         if ($checkbox.length) {
           translate = $checkbox.is(':checked') ? Drupal.t('Needs to be updated') : Drupal.t('Does not need to be updated');
@@ -51,7 +48,6 @@
 
         return translate;
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/misc/form.es6.js b/core/misc/form.es6.js
index 7ca64fc425..581eca4b16 100644
--- a/core/misc/form.es6.js
+++ b/core/misc/form.es6.js
@@ -13,9 +13,6 @@
  */
 
 (function ($, Drupal, debounce) {
-
-  'use strict';
-
   /**
    * Retrieves the summary for the first element.
    *
@@ -23,7 +20,7 @@
    *   The text of the summary.
    */
   $.fn.drupalGetSummary = function () {
-    var callback = this.data('summaryCallback');
+    const callback = this.data('summaryCallback');
     return (this[0] && callback) ? $.trim(callback(this[0])) : '';
   };
 
@@ -42,13 +39,15 @@
    * @listens event:formUpdated
    */
   $.fn.drupalSetSummary = function (callback) {
-    var self = this;
+    const self = this;
 
     // To facilitate things, the callback should always be a function. If it's
     // not, we wrap it into an anonymous function which just returns the value.
     if (typeof callback !== 'function') {
-      var val = callback;
-      callback = function () { return val; };
+      const val = callback;
+      callback = function () {
+        return val;
+      };
     }
 
     return this
@@ -56,7 +55,7 @@
       // To prevent duplicate events, the handlers are first removed and then
       // (re-)added.
       .off('formUpdated.summary')
-      .on('formUpdated.summary', function () {
+      .on('formUpdated.summary', () => {
         self.trigger('summaryUpdated');
       })
       // The actual summaryUpdated handler doesn't fire when the callback is
@@ -105,11 +104,11 @@
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.formSingleSubmit = {
-    attach: function () {
+    attach() {
       function onFormSubmit(e) {
-        var $form = $(e.currentTarget);
-        var formValues = $form.serialize();
-        var previousValues = $form.attr('data-drupal-form-submit-last');
+        const $form = $(e.currentTarget);
+        const formValues = $form.serialize();
+        const previousValues = $form.attr('data-drupal-form-submit-last');
         if (previousValues === formValues) {
           e.preventDefault();
         }
@@ -120,7 +119,7 @@
 
       $('body').once('form-single-submit')
         .on('submit.singleSubmit', 'form:not([method~="GET"])', onFormSubmit);
-    }
+    },
   };
 
   /**
@@ -145,11 +144,10 @@
    *   Array of IDs for form fields.
    */
   function fieldsList(form) {
-    var $fieldList = $(form).find('[name]').map(function (index, element) {
+    const $fieldList = $(form).find('[name]').map((index, element) =>
       // We use id to avoid name duplicates on radio fields and filter out
       // elements with a name but no id.
-      return element.getAttribute('id');
-    });
+       element.getAttribute('id'));
     // Return a true array.
     return $.makeArray($fieldList);
   }
@@ -167,19 +165,21 @@
    * @fires event:formUpdated
    */
   Drupal.behaviors.formUpdated = {
-    attach: function (context) {
-      var $context = $(context);
-      var contextIsForm = $context.is('form');
-      var $forms = (contextIsForm ? $context : $context.find('form')).once('form-updated');
-      var formFields;
+    attach(context) {
+      const $context = $(context);
+      const contextIsForm = $context.is('form');
+      const $forms = (contextIsForm ? $context : $context.find('form')).once('form-updated');
+      let formFields;
 
       if ($forms.length) {
         // Initialize form behaviors, use $.makeArray to be able to use native
         // forEach array method and have the callback parameters in the right
         // order.
-        $.makeArray($forms).forEach(function (form) {
-          var events = 'change.formUpdated input.formUpdated ';
-          var eventHandler = debounce(function (event) { triggerFormUpdated(event.target); }, 300);
+        $.makeArray($forms).forEach((form) => {
+          const events = 'change.formUpdated input.formUpdated ';
+          const eventHandler = debounce((event) => {
+            triggerFormUpdated(event.target);
+          }, 300);
           formFields = fieldsList(form).join(',');
 
           form.setAttribute('data-drupal-form-fields', formFields);
@@ -190,28 +190,27 @@
       if (contextIsForm) {
         formFields = fieldsList(context).join(',');
         // @todo replace with form.getAttribute() when #1979468 is in.
-        var currentFields = $(context).attr('data-drupal-form-fields');
+        const currentFields = $(context).attr('data-drupal-form-fields');
         // If there has been a change in the fields or their order, trigger
         // formUpdated.
         if (formFields !== currentFields) {
           triggerFormUpdated(context);
         }
       }
-
     },
-    detach: function (context, settings, trigger) {
-      var $context = $(context);
-      var contextIsForm = $context.is('form');
+    detach(context, settings, trigger) {
+      const $context = $(context);
+      const contextIsForm = $context.is('form');
       if (trigger === 'unload') {
-        var $forms = (contextIsForm ? $context : $context.find('form')).removeOnce('form-updated');
+        const $forms = (contextIsForm ? $context : $context.find('form')).removeOnce('form-updated');
         if ($forms.length) {
-          $.makeArray($forms).forEach(function (form) {
+          $.makeArray($forms).forEach((form) => {
             form.removeAttribute('data-drupal-form-fields');
             $(form).off('.formUpdated');
           });
         }
       }
-    }
+    },
   };
 
   /**
@@ -223,28 +222,27 @@
    *   Attaches the behavior for filling user info from browser.
    */
   Drupal.behaviors.fillUserInfoFromBrowser = {
-    attach: function (context, settings) {
-      var userInfo = ['name', 'mail', 'homepage'];
-      var $forms = $('[data-user-info-from-browser]').once('user-info-from-browser');
+    attach(context, settings) {
+      const userInfo = ['name', 'mail', 'homepage'];
+      const $forms = $('[data-user-info-from-browser]').once('user-info-from-browser');
       if ($forms.length) {
-        userInfo.map(function (info) {
-          var $element = $forms.find('[name=' + info + ']');
-          var browserData = localStorage.getItem('Drupal.visitor.' + info);
-          var emptyOrDefault = ($element.val() === '' || ($element.attr('data-drupal-default-value') === $element.val()));
+        userInfo.map((info) => {
+          const $element = $forms.find(`[name=${info}]`);
+          const browserData = localStorage.getItem(`Drupal.visitor.${info}`);
+          const emptyOrDefault = ($element.val() === '' || ($element.attr('data-drupal-default-value') === $element.val()));
           if ($element.length && emptyOrDefault && browserData) {
             $element.val(browserData);
           }
         });
       }
-      $forms.on('submit', function () {
-        userInfo.map(function (info) {
-          var $element = $forms.find('[name=' + info + ']');
+      $forms.on('submit', () => {
+        userInfo.map((info) => {
+          const $element = $forms.find(`[name=${info}]`);
           if ($element.length) {
-            localStorage.setItem('Drupal.visitor.' + info, $element.val());
+            localStorage.setItem(`Drupal.visitor.${info}`, $element.val());
           }
         });
       });
-    }
+    },
   };
-
-})(jQuery, Drupal, Drupal.debounce);
+}(jQuery, Drupal, Drupal.debounce));
diff --git a/core/misc/machine-name.es6.js b/core/misc/machine-name.es6.js
index e76292e265..67a38a7e33 100644
--- a/core/misc/machine-name.es6.js
+++ b/core/misc/machine-name.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Attach the machine-readable name form element behavior.
    *
@@ -42,14 +39,14 @@
      *   - field_prefix: The #field_prefix of the form element.
      *   - field_suffix: The #field_suffix of the form element.
      */
-    attach: function (context, settings) {
-      var self = this;
-      var $context = $(context);
-      var timeout = null;
-      var xhr = null;
+    attach(context, settings) {
+      const self = this;
+      const $context = $(context);
+      let timeout = null;
+      let xhr = null;
 
       function clickEditHandler(e) {
-        var data = e.data;
+        const data = e.data;
         data.$wrapper.removeClass('visually-hidden');
         data.$target.trigger('focus');
         data.$suffix.hide();
@@ -57,12 +54,12 @@
       }
 
       function machineNameHandler(e) {
-        var data = e.data;
-        var options = data.options;
-        var baseValue = $(e.target).val();
+        const data = e.data;
+        const options = data.options;
+        const baseValue = $(e.target).val();
 
-        var rx = new RegExp(options.replace_pattern, 'g');
-        var expected = baseValue.toLowerCase().replace(rx, options.replace).substr(0, options.maxlength);
+        const rx = new RegExp(options.replace_pattern, 'g');
+        const expected = baseValue.toLowerCase().replace(rx, options.replace).substr(0, options.maxlength);
 
         // Abort the last pending request because the label has changed and it
         // is no longer valid.
@@ -78,8 +75,8 @@
           timeout = null;
         }
         if (baseValue.toLowerCase() !== expected) {
-          timeout = setTimeout(function () {
-            xhr = self.transliterate(baseValue, options).done(function (machine) {
+          timeout = setTimeout(() => {
+            xhr = self.transliterate(baseValue, options).done((machine) => {
               self.showMachineName(machine.substr(0, options.maxlength), data);
             });
           }, 300);
@@ -89,15 +86,15 @@
         }
       }
 
-      Object.keys(settings.machineName).forEach(function (source_id) {
-        var machine = '';
-        var eventData;
-        var options = settings.machineName[source_id];
+      Object.keys(settings.machineName).forEach((source_id) => {
+        let machine = '';
+        let eventData;
+        const options = settings.machineName[source_id];
 
-        var $source = $context.find(source_id).addClass('machine-name-source').once('machine-name');
-        var $target = $context.find(options.target).addClass('machine-name-target');
-        var $suffix = $context.find(options.suffix);
-        var $wrapper = $target.closest('.js-form-item');
+        const $source = $context.find(source_id).addClass('machine-name-source').once('machine-name');
+        const $target = $context.find(options.target).addClass('machine-name-target');
+        const $suffix = $context.find(options.suffix);
+        const $wrapper = $target.closest('.js-form-item');
         // All elements have to exist.
         if (!$source.length || !$target.length || !$suffix.length || !$wrapper.length) {
           return;
@@ -120,10 +117,10 @@
           machine = self.transliterate($source.val(), options);
         }
         // Append the machine name preview to the source field.
-        var $preview = $('<span class="machine-name-value">' + options.field_prefix + Drupal.checkPlain(machine) + options.field_suffix + '</span>');
+        const $preview = $(`<span class="machine-name-value">${options.field_prefix}${Drupal.checkPlain(machine)}${options.field_suffix}</span>`);
         $suffix.empty();
         if (options.label) {
-          $suffix.append('<span class="machine-name-label">' + options.label + ': </span>');
+          $suffix.append(`<span class="machine-name-label">${options.label}: </span>`);
         }
         $suffix.append($preview);
 
@@ -133,15 +130,15 @@
         }
 
         eventData = {
-          $source: $source,
-          $target: $target,
-          $suffix: $suffix,
-          $wrapper: $wrapper,
-          $preview: $preview,
-          options: options
+          $source,
+          $target,
+          $suffix,
+          $wrapper,
+          $preview,
+          options,
         };
         // If it is editable, append an edit link.
-        var $link = $('<span class="admin-link"><button type="button" class="link">' + Drupal.t('Edit') + '</button></span>').on('click', eventData, clickEditHandler);
+        const $link = $(`<span class="admin-link"><button type="button" class="link">${Drupal.t('Edit')}</button></span>`).on('click', eventData, clickEditHandler);
         $suffix.append($link);
 
         // Preview the machine name in realtime when the human-readable name
@@ -159,8 +156,8 @@
       });
     },
 
-    showMachineName: function (machine, data) {
-      var settings = data.options;
+    showMachineName(machine, data) {
+      const settings = data.options;
       // Set the machine name to the transliterated value.
       if (machine !== '') {
         if (machine !== settings.replace) {
@@ -196,16 +193,15 @@
      * @return {jQuery}
      *   The transliterated source string.
      */
-    transliterate: function (source, settings) {
+    transliterate(source, settings) {
       return $.get(Drupal.url('machine_name/transliterate'), {
         text: source,
         langcode: drupalSettings.langcode,
         replace_pattern: settings.replace_pattern,
         replace_token: settings.replace_token,
         replace: settings.replace,
-        lowercase: true
+        lowercase: true,
       });
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/misc/progress.es6.js b/core/misc/progress.es6.js
index a6694892b2..bec63d535a 100644
--- a/core/misc/progress.es6.js
+++ b/core/misc/progress.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Theme function for the progress bar.
    *
@@ -17,7 +14,7 @@
    *   The HTML for the progress bar.
    */
   Drupal.theme.progressBar = function (id) {
-    return '<div id="' + id + '" class="progress" aria-live="polite">' +
+    return `<div id="${id}" class="progress" aria-live="polite">` +
       '<div class="progress__label">&nbsp;</div>' +
       '<div class="progress__track"><div class="progress__bar"></div></div>' +
       '<div class="progress__percentage"></div>' +
@@ -72,10 +69,10 @@
      * @param {string} label
      *   The text for the progressbar label.
      */
-    setProgress: function (percentage, message, label) {
+    setProgress(percentage, message, label) {
       if (percentage >= 0 && percentage <= 100) {
-        $(this.element).find('div.progress__bar').css('width', percentage + '%');
-        $(this.element).find('div.progress__percentage').html(percentage + '%');
+        $(this.element).find('div.progress__bar').css('width', `${percentage}%`);
+        $(this.element).find('div.progress__percentage').html(`${percentage}%`);
       }
       $('div.progress__description', this.element).html(message);
       $('div.progress__label', this.element).html(label);
@@ -92,7 +89,7 @@
      * @param {number} delay
      *   The delay for calling the monitoring URI.
      */
-    startMonitoring: function (uri, delay) {
+    startMonitoring(uri, delay) {
       this.delay = delay;
       this.uri = uri;
       this.sendPing();
@@ -101,7 +98,7 @@
     /**
      * Stop monitoring progress via Ajax.
      */
-    stopMonitoring: function () {
+    stopMonitoring() {
       clearTimeout(this.timer);
       // This allows monitoring to be stopped from within the callback.
       this.uri = null;
@@ -110,15 +107,15 @@
     /**
      * Request progress data from server.
      */
-    sendPing: function () {
+    sendPing() {
       if (this.timer) {
         clearTimeout(this.timer);
       }
       if (this.uri) {
-        var pb = this;
+        const pb = this;
         // When doing a post request, you need non-null data. Otherwise a
         // HTTP 411 or HTTP 406 (with Apache mod_security) error may result.
-        var uri = this.uri;
+        let uri = this.uri;
         if (uri.indexOf('?') === -1) {
           uri += '?';
         }
@@ -131,7 +128,7 @@
           url: uri,
           data: '',
           dataType: 'json',
-          success: function (progress) {
+          success(progress) {
             // Display errors.
             if (progress.status === 0) {
               pb.displayError(progress.data);
@@ -140,12 +137,14 @@
             // Update display.
             pb.setProgress(progress.percentage, progress.message, progress.label);
             // Schedule next timer.
-            pb.timer = setTimeout(function () { pb.sendPing(); }, pb.delay);
+            pb.timer = setTimeout(() => {
+              pb.sendPing();
+            }, pb.delay);
+          },
+          error(xmlhttp) {
+            const e = new Drupal.AjaxError(xmlhttp, pb.uri);
+            pb.displayError(`<pre>${e.message}</pre>`);
           },
-          error: function (xmlhttp) {
-            var e = new Drupal.AjaxError(xmlhttp, pb.uri);
-            pb.displayError('<pre>' + e.message + '</pre>');
-          }
         });
       }
     },
@@ -156,14 +155,13 @@
      * @param {string} string
      *   The error message to show the user.
      */
-    displayError: function (string) {
-      var error = $('<div class="messages messages--error"></div>').html(string);
+    displayError(string) {
+      const error = $('<div class="messages messages--error"></div>').html(string);
       $(this.element).before(error).hide();
 
       if (this.errorCallback) {
         this.errorCallback(this);
       }
-    }
+    },
   });
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/misc/states.es6.js b/core/misc/states.es6.js
index 24374b625f..3e77b078b6 100644
--- a/core/misc/states.es6.js
+++ b/core/misc/states.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * The base States namespace.
    *
@@ -15,12 +12,12 @@
    *
    * @namespace Drupal.states
    */
-  var states = Drupal.states = {
+  const states = Drupal.states = {
 
     /**
      * An array of functions that should be postponed.
      */
-    postponed: []
+    postponed: [],
   };
 
   /**
@@ -32,19 +29,19 @@
    *   Attaches states behaviors.
    */
   Drupal.behaviors.states = {
-    attach: function (context, settings) {
-      var $states = $(context).find('[data-drupal-states]');
-      var config;
-      var state;
-      var il = $states.length;
-      for (var i = 0; i < il; i++) {
+    attach(context, settings) {
+      const $states = $(context).find('[data-drupal-states]');
+      let config;
+      let state;
+      const il = $states.length;
+      for (let i = 0; i < il; i++) {
         config = JSON.parse($states[i].getAttribute('data-drupal-states'));
         for (state in config) {
           if (config.hasOwnProperty(state)) {
             new states.Dependent({
               element: $($states[i]),
               state: states.State.sanitize(state),
-              constraints: config[state]
+              constraints: config[state],
             });
           }
         }
@@ -54,7 +51,7 @@
       while (states.postponed.length) {
         (states.postponed.shift())();
       }
-    }
+    },
   };
 
   /**
@@ -74,10 +71,10 @@
    *   arbitrary AND and OR clauses.
    */
   states.Dependent = function (args) {
-    $.extend(this, {values: {}, oldValue: null}, args);
+    $.extend(this, { values: {}, oldValue: null }, args);
 
     this.dependees = this.getDependees();
-    for (var selector in this.dependees) {
+    for (const selector in this.dependees) {
       if (this.dependees.hasOwnProperty(selector)) {
         this.initializeDependee(selector, this.dependees[selector]);
       }
@@ -96,21 +93,21 @@
    * @prop {function} Number
    */
   states.Dependent.comparisons = {
-    RegExp: function (reference, value) {
+    RegExp(reference, value) {
       return reference.test(value);
     },
-    Function: function (reference, value) {
+    Function(reference, value) {
       // The "reference" variable is a comparison function.
       return reference(value);
     },
-    Number: function (reference, value) {
+    Number(reference, value) {
       // If "reference" is a number and "value" is a string, then cast
       // reference as a string before applying the strict comparison in
       // compare().
       // Otherwise numeric keys in the form's #states array fail to match
       // string values returned from jQuery's val().
       return (typeof value === 'string') ? compare(reference.toString(), value) : compare(reference, value);
-    }
+    },
   };
 
   states.Dependent.prototype = {
@@ -126,9 +123,9 @@
      *   The list of states that have to be monitored for tracking the
      *   dependee's compliance status.
      */
-    initializeDependee: function (selector, dependeeStates) {
-      var state;
-      var self = this;
+    initializeDependee(selector, dependeeStates) {
+      let state;
+      const self = this;
 
       function stateEventHandler(e) {
         self.update(e.data.selector, e.data.state, e.value);
@@ -137,7 +134,7 @@
       // Cache for the states of this dependee.
       this.values[selector] = {};
 
-      for (var i in dependeeStates) {
+      for (const i in dependeeStates) {
         if (dependeeStates.hasOwnProperty(i)) {
           state = dependeeStates[i];
           // Make sure we're not initializing this selector/state combination
@@ -152,10 +149,10 @@
           this.values[selector][state.name] = null;
 
           // Monitor state changes of the specified state for this dependee.
-          $(selector).on('state:' + state, {selector: selector, state: state}, stateEventHandler);
+          $(selector).on(`state:${state}`, { selector, state }, stateEventHandler);
 
           // Make sure the event we just bound ourselves to is actually fired.
-          new states.Trigger({selector: selector, state: state});
+          new states.Trigger({ selector, state });
         }
       }
     },
@@ -175,16 +172,15 @@
      * @return {bool}
      *   true or false.
      */
-    compare: function (reference, selector, state) {
-      var value = this.values[selector][state.name];
+    compare(reference, selector, state) {
+      const value = this.values[selector][state.name];
       if (reference.constructor.name in states.Dependent.comparisons) {
         // Use a custom compare function for certain reference value types.
         return states.Dependent.comparisons[reference.constructor.name](reference, value);
       }
-      else {
+
         // Do a plain comparison otherwise.
-        return compare(reference, value);
-      }
+      return compare(reference, value);
     },
 
     /**
@@ -199,7 +195,7 @@
      * @param {string} value
      *   The new value for the dependee's updated state.
      */
-    update: function (selector, state, value) {
+    update(selector, state, value) {
       // Only act when the 'new' value is actually new.
       if (value !== this.values[selector][state.name]) {
         this.values[selector][state.name] = value;
@@ -212,9 +208,9 @@
      *
      * @memberof Drupal.states.Dependent#
      */
-    reevaluate: function () {
+    reevaluate() {
       // Check whether any constraint for this dependent state is satisfied.
-      var value = this.verifyConstraints(this.constraints);
+      let value = this.verifyConstraints(this.constraints);
 
       // Only invoke a state change event when the value actually changed.
       if (value !== this.oldValue) {
@@ -227,7 +223,7 @@
 
         // By adding "trigger: true", we ensure that state changes don't go into
         // infinite loops.
-        this.element.trigger({type: 'state:' + this.state, value: value, trigger: true});
+        this.element.trigger({ type: `state:${this.state}`, value, trigger: true });
       }
     },
 
@@ -246,15 +242,15 @@
      * @return {bool}
      *   true or false, depending on whether these constraints are satisfied.
      */
-    verifyConstraints: function (constraints, selector) {
-      var result;
+    verifyConstraints(constraints, selector) {
+      let result;
       if ($.isArray(constraints)) {
         // This constraint is an array (OR or XOR).
-        var hasXor = $.inArray('xor', constraints) === -1;
-        var len = constraints.length;
-        for (var i = 0; i < len; i++) {
+        const hasXor = $.inArray('xor', constraints) === -1;
+        const len = constraints.length;
+        for (let i = 0; i < len; i++) {
           if (constraints[i] !== 'xor') {
-            var constraint = this.checkConstraints(constraints[i], selector, i);
+            const constraint = this.checkConstraints(constraints[i], selector, i);
             // Return if this is OR and we have a satisfied constraint or if
             // this is XOR and we have a second satisfied constraint.
             if (constraint && (hasXor || result)) {
@@ -269,12 +265,14 @@
       // bogus, we don't want to end up with an infinite loop.
       else if ($.isPlainObject(constraints)) {
         // This constraint is an object (AND).
-        for (var n in constraints) {
+        for (const n in constraints) {
           if (constraints.hasOwnProperty(n)) {
             result = ternary(result, this.checkConstraints(constraints[n], selector, n));
             // False and anything else will evaluate to false, so return when
             // any false condition is found.
-            if (result === false) { return false; }
+            if (result === false) {
+              return false;
+            }
           }
         }
       }
@@ -303,7 +301,7 @@
      * @return {bool}
      *   true or false, depending on whether this constraint is satisfied.
      */
-    checkConstraints: function (value, selector, state) {
+    checkConstraints(value, selector, state) {
       // Normalize the last parameter. If it's non-numeric, we treat it either
       // as a selector (in case there isn't one yet) or as a trigger/state.
       if (typeof state !== 'string' || (/[0-9]/).test(state[0])) {
@@ -320,10 +318,9 @@
         state = states.State.sanitize(state);
         return invert(this.compare(value, selector, state), state.invert);
       }
-      else {
+
         // Resolve this constraint as an AND/OR operator.
-        return this.verifyConstraints(value, selector);
-      }
+      return this.verifyConstraints(value, selector);
     },
 
     /**
@@ -334,11 +331,11 @@
      * @return {object}
      *   An object describing the required triggers.
      */
-    getDependees: function () {
-      var cache = {};
+    getDependees() {
+      const cache = {};
       // Swivel the lookup function so that we can record all available
       // selector- state combinations for initialization.
-      var _compare = this.compare;
+      const _compare = this.compare;
       this.compare = function (reference, selector, state) {
         (cache[selector] || (cache[selector] = [])).push(state.name);
         // Return nothing (=== undefined) so that the constraint loops are not
@@ -356,7 +353,7 @@
       this.compare = _compare;
 
       return cache;
-    }
+    },
   };
 
   /**
@@ -373,7 +370,7 @@
 
       // Only call the trigger initializer when it wasn't yet attached to this
       // element. Otherwise we'd end up with duplicate events.
-      if (!this.element.data('trigger:' + this.state)) {
+      if (!this.element.data(`trigger:${this.state}`)) {
         this.initialize();
       }
     }
@@ -384,15 +381,15 @@
     /**
      * @memberof Drupal.states.Trigger#
      */
-    initialize: function () {
-      var trigger = states.Trigger.states[this.state];
+    initialize() {
+      const trigger = states.Trigger.states[this.state];
 
       if (typeof trigger === 'function') {
         // We have a custom trigger initialization function.
         trigger.call(window, this.element);
       }
       else {
-        for (var event in trigger) {
+        for (const event in trigger) {
           if (trigger.hasOwnProperty(event)) {
             this.defaultTrigger(event, trigger[event]);
           }
@@ -400,7 +397,7 @@
       }
 
       // Mark this trigger as initialized for this element.
-      this.element.data('trigger:' + this.state, true);
+      this.element.data(`trigger:${this.state}`, true);
     },
 
     /**
@@ -411,24 +408,24 @@
      * @param {function} valueFn
      *   The function to call.
      */
-    defaultTrigger: function (event, valueFn) {
-      var oldValue = valueFn.call(this.element);
+    defaultTrigger(event, valueFn) {
+      let oldValue = valueFn.call(this.element);
 
       // Attach the event callback.
       this.element.on(event, $.proxy(function (e) {
-        var value = valueFn.call(this.element, e);
+        const value = valueFn.call(this.element, e);
         // Only trigger the event if the value has actually changed.
         if (oldValue !== value) {
-          this.element.trigger({type: 'state:' + this.state, value: value, oldValue: oldValue});
+          this.element.trigger({ type: `state:${this.state}`, value, oldValue });
           oldValue = value;
         }
       }, this));
 
       states.postponed.push($.proxy(function () {
         // Trigger the event once for initialization purposes.
-        this.element.trigger({type: 'state:' + this.state, value: oldValue, oldValue: null});
+        this.element.trigger({ type: `state:${this.state}`, value: oldValue, oldValue: null });
       }, this));
-    }
+    },
   };
 
   /**
@@ -448,19 +445,19 @@
     // 'empty' describes the state to be monitored.
     empty: {
       // 'keyup' is the (native DOM) event that we watch for.
-      keyup: function () {
+      keyup() {
         // The function associated with that trigger returns the new value for
         // the state.
         return this.val() === '';
-      }
+      },
     },
 
     checked: {
-      change: function () {
+      change() {
         // prop() and attr() only takes the first element into account. To
         // support selectors matching multiple checkboxes, iterate over all and
         // return whether any is checked.
-        var checked = false;
+        let checked = false;
         this.each(function () {
           // Use prop() here as we want a boolean of the checkbox state.
           // @see http://api.jquery.com/prop/
@@ -469,12 +466,12 @@
           return !checked;
         });
         return checked;
-      }
+      },
     },
 
     // For radio buttons, only return the value if the radio button is selected.
     value: {
-      keyup: function () {
+      keyup() {
         // Radio buttons share the same :input[name="key"] selector.
         if (this.length > 1) {
           // Initial checked value of radios is undefined, so we return false.
@@ -482,21 +479,21 @@
         }
         return this.val();
       },
-      change: function () {
+      change() {
         // Radio buttons share the same :input[name="key"] selector.
         if (this.length > 1) {
           // Initial checked value of radios is undefined, so we return false.
           return this.filter(':checked').val() || false;
         }
         return this.val();
-      }
+      },
     },
 
     collapsed: {
-      collapsed: function (e) {
+      collapsed(e) {
         return (typeof e !== 'undefined' && 'value' in e) ? e.value : !this.is('[open]');
-      }
-    }
+      },
+    },
   };
 
   /**
@@ -508,14 +505,13 @@
    *   The name of the state.
    */
   states.State = function (state) {
-
     /**
      * Original unresolved name.
      */
     this.pristine = this.name = state;
 
     // Normalize the state name.
-    var process = true;
+    let process = true;
     do {
       // Iteratively remove exclamation marks and invert the value.
       while (this.name.charAt(0) === '!') {
@@ -548,9 +544,8 @@
     if (state instanceof states.State) {
       return state;
     }
-    else {
-      return new states.State(state);
-    }
+
+    return new states.State(state);
   };
 
   /**
@@ -571,7 +566,7 @@
     expanded: '!collapsed',
     open: '!collapsed',
     closed: 'collapsed',
-    readwrite: '!readonly'
+    readwrite: '!readonly',
   };
 
   states.State.prototype = {
@@ -589,9 +584,9 @@
      * @return {string}
      *   The name of the state.
      */
-    toString: function () {
+    toString() {
       return this.name;
-    }
+    },
   };
 
   /**
@@ -601,8 +596,8 @@
    * can override these state change handlers for particular parts of a page.
    */
 
-  var $document = $(document);
-  $document.on('state:disabled', function (e) {
+  const $document = $(document);
+  $document.on('state:disabled', (e) => {
     // Only act when this change was triggered by a dependency and not by the
     // element monitoring itself.
     if (e.trigger) {
@@ -616,11 +611,11 @@
     }
   });
 
-  $document.on('state:required', function (e) {
+  $document.on('state:required', (e) => {
     if (e.trigger) {
       if (e.value) {
-        var label = 'label' + (e.target.id ? '[for=' + e.target.id + ']' : '');
-        var $label = $(e.target).attr({'required': 'required', 'aria-required': 'aria-required'}).closest('.js-form-item, .js-form-wrapper').find(label);
+        const label = `label${e.target.id ? `[for=${e.target.id}]` : ''}`;
+        const $label = $(e.target).attr({ required: 'required', 'aria-required': 'aria-required' }).closest('.js-form-item, .js-form-wrapper').find(label);
         // Avoids duplicate required markers on initialization.
         if (!$label.hasClass('js-form-required').length) {
           $label.addClass('js-form-required form-required');
@@ -632,19 +627,19 @@
     }
   });
 
-  $document.on('state:visible', function (e) {
+  $document.on('state:visible', (e) => {
     if (e.trigger) {
       $(e.target).closest('.js-form-item, .js-form-submit, .js-form-wrapper').toggle(e.value);
     }
   });
 
-  $document.on('state:checked', function (e) {
+  $document.on('state:checked', (e) => {
     if (e.trigger) {
       $(e.target).prop('checked', e.value);
     }
   });
 
-  $document.on('state:collapsed', function (e) {
+  $document.on('state:collapsed', (e) => {
     if (e.trigger) {
       if ($(e.target).is('[open]') === e.value) {
         $(e.target).find('> summary').trigger('click');
@@ -677,9 +672,8 @@
     else if (typeof b === 'undefined') {
       return a;
     }
-    else {
-      return a && b;
-    }
+
+    return a && b;
   }
 
   /**
@@ -716,9 +710,7 @@
     if (a === b) {
       return typeof a === 'undefined' ? a : true;
     }
-    else {
-      return typeof a === 'undefined' || typeof b === 'undefined';
-    }
-  }
 
-})(jQuery, Drupal);
+    return typeof a === 'undefined' || typeof b === 'undefined';
+  }
+}(jQuery, Drupal));
diff --git a/core/misc/tabbingmanager.es6.js b/core/misc/tabbingmanager.es6.js
index 134523f5bf..075dda5177 100644
--- a/core/misc/tabbingmanager.es6.js
+++ b/core/misc/tabbingmanager.es6.js
@@ -28,16 +28,12 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Provides an API for managing page tabbing order modifications.
    *
    * @constructor Drupal~TabbingManager
    */
   function TabbingManager() {
-
     /**
      * Tabbing sets are stored as a stack. The active set is at the top of the
      * stack. We use a JavaScript array as if it were a stack; we consider the
@@ -70,24 +66,24 @@
      *
      * @fires event:drupalTabbingConstrained
      */
-    constrain: function (elements) {
+    constrain(elements) {
       // Deactivate all tabbingContexts to prepare for the new constraint. A
       // tabbingContext instance will only be reactivated if the stack is
       // unwound to it in the _unwindStack() method.
-      var il = this.stack.length;
-      for (var i = 0; i < il; i++) {
+      const il = this.stack.length;
+      for (let i = 0; i < il; i++) {
         this.stack[i].deactivate();
       }
 
       // The "active tabbing set" are the elements tabbing should be constrained
       // to.
-      var $elements = $(elements).find(':tabbable').addBack(':tabbable');
+      const $elements = $(elements).find(':tabbable').addBack(':tabbable');
 
-      var tabbingContext = new TabbingContext({
+      const tabbingContext = new TabbingContext({
         // The level is the current height of the stack before this new
         // tabbingContext is pushed on top of the stack.
         level: this.stack.length,
-        $tabbableElements: $elements
+        $tabbableElements: $elements,
       });
 
       this.stack.push(tabbingContext);
@@ -109,10 +105,10 @@
      * from the top-most released tabbingContext down to the first non-released
      * tabbingContext instance. This non-released instance is then activated.
      */
-    release: function () {
+    release() {
       // Unwind as far as possible: find the topmost non-released
       // tabbingContext.
-      var toActivate = this.stack.length - 1;
+      let toActivate = this.stack.length - 1;
       while (toActivate >= 0 && this.stack[toActivate].released) {
         toActivate--;
       }
@@ -137,18 +133,18 @@
      * @param {Drupal~TabbingContext} tabbingContext
      *   The TabbingContext instance that has been activated.
      */
-    activate: function (tabbingContext) {
-      var $set = tabbingContext.$tabbableElements;
-      var level = tabbingContext.level;
+    activate(tabbingContext) {
+      const $set = tabbingContext.$tabbableElements;
+      const level = tabbingContext.level;
       // Determine which elements are reachable via tabbing by default.
-      var $disabledSet = $(':tabbable')
+      const $disabledSet = $(':tabbable')
         // Exclude elements of the active tabbing set.
         .not($set);
       // Set the disabled set on the tabbingContext.
       tabbingContext.$disabledElements = $disabledSet;
       // Record the tabindex for each element, so we can restore it later.
-      var il = $disabledSet.length;
-      for (var i = 0; i < il; i++) {
+      const il = $disabledSet.length;
+      for (let i = 0; i < il; i++) {
         this.recordTabindex($disabledSet.eq(i), level);
       }
       // Make all tabbable elements outside of the active tabbing set
@@ -160,7 +156,7 @@
       // Set focus on an element in the tabbingContext's set of tabbable
       // elements. First, check if there is an element with an autofocus
       // attribute. Select the last one from the DOM order.
-      var $hasFocus = $set.filter('[autofocus]').eq(-1);
+      let $hasFocus = $set.filter('[autofocus]').eq(-1);
       // If no element in the tabbable set has an autofocus attribute, select
       // the first element in the set.
       if ($hasFocus.length === 0) {
@@ -178,11 +174,11 @@
      * @param {Drupal~TabbingContext} tabbingContext
      *   The TabbingContext instance that has been deactivated.
      */
-    deactivate: function (tabbingContext) {
-      var $set = tabbingContext.$disabledElements;
-      var level = tabbingContext.level;
-      var il = $set.length;
-      for (var i = 0; i < il; i++) {
+    deactivate(tabbingContext) {
+      const $set = tabbingContext.$disabledElements;
+      const level = tabbingContext.level;
+      const il = $set.length;
+      for (let i = 0; i < il; i++) {
         this.restoreTabindex($set.eq(i), level);
       }
     },
@@ -195,11 +191,11 @@
      * @param {number} level
      *   The stack level for which the tabindex attribute should be recorded.
      */
-    recordTabindex: function ($el, level) {
-      var tabInfo = $el.data('drupalOriginalTabIndices') || {};
+    recordTabindex($el, level) {
+      const tabInfo = $el.data('drupalOriginalTabIndices') || {};
       tabInfo[level] = {
         tabindex: $el[0].getAttribute('tabindex'),
-        autofocus: $el[0].hasAttribute('autofocus')
+        autofocus: $el[0].hasAttribute('autofocus'),
       };
       $el.data('drupalOriginalTabIndices', tabInfo);
     },
@@ -212,10 +208,10 @@
      * @param {number} level
      *   The stack level for which the tabindex attribute should be restored.
      */
-    restoreTabindex: function ($el, level) {
-      var tabInfo = $el.data('drupalOriginalTabIndices');
+    restoreTabindex($el, level) {
+      const tabInfo = $el.data('drupalOriginalTabIndices');
       if (tabInfo && tabInfo[level]) {
-        var data = tabInfo[level];
+        const data = tabInfo[level];
         if (data.tabindex) {
           $el[0].setAttribute('tabindex', data.tabindex);
         }
@@ -235,7 +231,7 @@
         }
         else {
           // Remove the data for this stack level and higher.
-          var levelToDelete = level;
+          let levelToDelete = level;
           while (tabInfo.hasOwnProperty(levelToDelete)) {
             delete tabInfo[levelToDelete];
             levelToDelete++;
@@ -243,7 +239,7 @@
           $el.data('drupalOriginalTabIndices', tabInfo);
         }
       }
-    }
+    },
   });
 
   /**
@@ -272,7 +268,6 @@
    *   tabbingContext can be active at a time.
    */
   function TabbingContext(options) {
-
     $.extend(this, /** @lends Drupal~TabbingContext# */{
 
       /**
@@ -298,7 +293,7 @@
       /**
        * @type {bool}
        */
-      active: false
+      active: false,
     }, options);
   }
 
@@ -315,7 +310,7 @@
      *
      * @fires event:drupalTabbingContextReleased
      */
-    release: function () {
+    release() {
       if (!this.released) {
         this.deactivate();
         this.released = true;
@@ -330,7 +325,7 @@
      *
      * @fires event:drupalTabbingContextActivated
      */
-    activate: function () {
+    activate() {
       // A released TabbingContext object can never be activated again.
       if (!this.active && !this.released) {
         this.active = true;
@@ -345,14 +340,14 @@
      *
      * @fires event:drupalTabbingContextDeactivated
      */
-    deactivate: function () {
+    deactivate() {
       if (this.active) {
         this.active = false;
         Drupal.tabbingManager.deactivate(this);
         // Allow modules to respond to the constrain event.
         $(document).trigger('drupalTabbingContextDeactivated', this);
       }
-    }
+    },
   });
 
   // Mark this behavior as processed on the first pass and return if it is
@@ -365,5 +360,4 @@
    * @type {Drupal~TabbingManager}
    */
   Drupal.tabbingManager = new TabbingManager();
-
 }(jQuery, Drupal));
diff --git a/core/misc/tabledrag.es6.js b/core/misc/tabledrag.es6.js
index 75468e60dd..9292f5017f 100644
--- a/core/misc/tabledrag.es6.js
+++ b/core/misc/tabledrag.es6.js
@@ -10,15 +10,12 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Store the state of weight columns display for all tables.
    *
    * Default value is to hide weight columns.
    */
-  var showWeight = JSON.parse(localStorage.getItem('Drupal.tableDrag.showWeight'));
+  let showWeight = JSON.parse(localStorage.getItem('Drupal.tableDrag.showWeight'));
 
   /**
    * Drag and drop table rows with field manipulation.
@@ -35,7 +32,7 @@
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.tableDrag = {
-    attach: function (context, settings) {
+    attach(context, settings) {
       function initTableDrag(table, base) {
         if (table.length) {
           // Create the new tableDrag instance. Save in the Drupal variable
@@ -44,12 +41,12 @@
         }
       }
 
-      for (var base in settings.tableDrag) {
+      for (const base in settings.tableDrag) {
         if (settings.tableDrag.hasOwnProperty(base)) {
-          initTableDrag($(context).find('#' + base).once('tabledrag'), base);
+          initTableDrag($(context).find(`#${base}`).once('tabledrag'), base);
         }
       }
-    }
+    },
   };
 
   /**
@@ -63,8 +60,8 @@
    *   Settings for the table added via drupal_add_dragtable().
    */
   Drupal.tableDrag = function (table, tableSettings) {
-    var self = this;
-    var $table = $(table);
+    const self = this;
+    const $table = $(table);
 
     /**
      * @type {jQuery}
@@ -146,7 +143,7 @@
      * @prop {number} interval
      * @prop {number} trigger
      */
-    this.scrollSettings = {amount: 4, interval: 50, trigger: 70};
+    this.scrollSettings = { amount: 4, interval: 50, trigger: 70 };
 
     /**
      *
@@ -175,9 +172,9 @@
      * @type {bool}
      */
     this.indentEnabled = false;
-    for (var group in tableSettings) {
+    for (const group in tableSettings) {
       if (tableSettings.hasOwnProperty(group)) {
-        for (var n in tableSettings[group]) {
+        for (const n in tableSettings[group]) {
           if (tableSettings[group].hasOwnProperty(n)) {
             if (tableSettings[group][n].relationship === 'parent') {
               this.indentEnabled = true;
@@ -190,7 +187,6 @@
       }
     }
     if (this.indentEnabled) {
-
       /**
        * Total width of indents, set in makeDraggable.
        *
@@ -201,10 +197,10 @@
       // Because the table doesn't need to start with any indentations, we
       // manually append 2 indentations in the first draggable row, measure
       // the offset, then remove.
-      var indent = Drupal.theme('tableDragIndentation');
-      var testRow = $('<tr/>').addClass('draggable').appendTo(table);
-      var testCell = $('<td/>').appendTo(testRow).prepend(indent).prepend(indent);
-      var $indentation = testCell.find('.js-indentation');
+      const indent = Drupal.theme('tableDragIndentation');
+      const testRow = $('<tr/>').addClass('draggable').appendTo(table);
+      const testCell = $('<td/>').appendTo(testRow).prepend(indent).prepend(indent);
+      const $indentation = testCell.find('.js-indentation');
 
       /**
        *
@@ -216,7 +212,9 @@
 
     // Make each applicable row draggable.
     // Match immediate children of the parent element to allow nesting.
-    $table.find('> tr.draggable, > tbody > tr.draggable').each(function () { self.makeDraggable(this); });
+    $table.find('> tr.draggable, > tbody > tr.draggable').each(function () {
+      self.makeDraggable(this);
+    });
 
     // Add a link before the table for users to show or hide weight columns.
     $table.before($('<button type="button" class="link tabledrag-toggle-weight"></button>')
@@ -226,7 +224,7 @@
         this.toggleColumns();
       }, this))
       .wrap('<div class="tabledrag-toggle-weight-wrapper"></div>')
-      .parent()
+      .parent(),
     );
 
     // Initialize the specified columns (for example, weight or parent columns)
@@ -237,10 +235,10 @@
 
     // Add event bindings to the document. The self variable is passed along
     // as event handlers do not have direct access to the tableDrag object.
-    $(document).on('touchmove', function (event) { return self.dragRow(event.originalEvent.touches[0], self); });
-    $(document).on('touchend', function (event) { return self.dropRow(event.originalEvent.touches[0], self); });
-    $(document).on('mousemove pointermove', function (event) { return self.dragRow(event, self); });
-    $(document).on('mouseup pointerup', function (event) { return self.dropRow(event, self); });
+    $(document).on('touchmove', event => self.dragRow(event.originalEvent.touches[0], self));
+    $(document).on('touchend', event => self.dropRow(event.originalEvent.touches[0], self));
+    $(document).on('mousemove pointermove', event => self.dragRow(event, self));
+    $(document).on('mouseup pointerup', event => self.dropRow(event, self));
 
     // React to localStorage event showing or hiding weight columns.
     $(window).on('storage', $.proxy(function (e) {
@@ -262,17 +260,16 @@
    * 'Drupal.tableDrag.showWeight' localStorage value.
    */
   Drupal.tableDrag.prototype.initColumns = function () {
-    var $table = this.$table;
-    var hidden;
-    var cell;
-    var columnIndex;
-    for (var group in this.tableSettings) {
+    const $table = this.$table;
+    let hidden;
+    let cell;
+    let columnIndex;
+    for (const group in this.tableSettings) {
       if (this.tableSettings.hasOwnProperty(group)) {
-
         // Find the first field in this group.
-        for (var d in this.tableSettings[group]) {
+        for (const d in this.tableSettings[group]) {
           if (this.tableSettings[group].hasOwnProperty(d)) {
-            var field = $table.find('.' + this.tableSettings[group][d].target).eq(0);
+            const field = $table.find(`.${this.tableSettings[group][d].target}`).eq(0);
             if (field.length && this.tableSettings[group][d].hidden) {
               hidden = this.tableSettings[group][d].hidden;
               cell = field.closest('td');
@@ -308,17 +305,17 @@
   Drupal.tableDrag.prototype.addColspanClass = function (columnIndex) {
     return function () {
       // Get the columnIndex and adjust for any colspans in this row.
-      var $row = $(this);
-      var index = columnIndex;
-      var cells = $row.children();
-      var cell;
+      const $row = $(this);
+      let index = columnIndex;
+      const cells = $row.children();
+      let cell;
       cells.each(function (n) {
         if (n < index && this.colSpan && this.colSpan > 1) {
           index -= this.colSpan - 1;
         }
       });
       if (index > 0) {
-        cell = cells.filter(':nth-child(' + index + ')');
+        cell = cells.filter(`:nth-child(${index})`);
         if (cell[0].colSpan && cell[0].colSpan > 1) {
           // If this cell has a colspan, mark it so we can reduce the colspan.
           cell.addClass('tabledrag-has-colspan');
@@ -376,7 +373,7 @@
    * Undo showColumns().
    */
   Drupal.tableDrag.prototype.hideColumns = function () {
-    var $tables = $('table').findOnce('tabledrag');
+    const $tables = $('table').findOnce('tabledrag');
     // Hide weight/parent cells and headers.
     $tables.find('.tabledrag-hide').css('display', 'none');
     // Show TableDrag handles.
@@ -395,7 +392,7 @@
    * Undo hideColumns().
    */
   Drupal.tableDrag.prototype.showColumns = function () {
-    var $tables = $('table').findOnce('tabledrag');
+    const $tables = $('table').findOnce('tabledrag');
     // Show weight/parent cells and headers.
     $tables.find('.tabledrag-hide').css('display', '');
     // Hide TableDrag handles.
@@ -420,15 +417,15 @@
    *   The table row settings.
    */
   Drupal.tableDrag.prototype.rowSettings = function (group, row) {
-    var field = $(row).find('.' + group);
-    var tableSettingsGroup = this.tableSettings[group];
-    for (var delta in tableSettingsGroup) {
+    const field = $(row).find(`.${group}`);
+    const tableSettingsGroup = this.tableSettings[group];
+    for (const delta in tableSettingsGroup) {
       if (tableSettingsGroup.hasOwnProperty(delta)) {
-        var targetClass = tableSettingsGroup[delta].target;
-        if (field.is('.' + targetClass)) {
+        const targetClass = tableSettingsGroup[delta].target;
+        if (field.is(`.${targetClass}`)) {
           // Return a copy of the row settings.
-          var rowSettings = {};
-          for (var n in tableSettingsGroup[delta]) {
+          const rowSettings = {};
+          for (const n in tableSettingsGroup[delta]) {
             if (tableSettingsGroup[delta].hasOwnProperty(n)) {
               rowSettings[n] = tableSettingsGroup[delta][n];
             }
@@ -446,14 +443,14 @@
    *   The item to add event handlers to.
    */
   Drupal.tableDrag.prototype.makeDraggable = function (item) {
-    var self = this;
-    var $item = $(item);
+    const self = this;
+    const $item = $(item);
     // Add a class to the title link.
     $item.find('td:first-of-type').find('a').addClass('menu-item__link');
     // Create the handle.
-    var handle = $('<a href="#" class="tabledrag-handle"><div class="handle">&nbsp;</div></a>').attr('title', Drupal.t('Drag to re-order'));
+    const handle = $('<a href="#" class="tabledrag-handle"><div class="handle">&nbsp;</div></a>').attr('title', Drupal.t('Drag to re-order'));
     // Insert the handle after indentations (if any).
-    var $indentationLast = $item.find('td:first-of-type').find('.js-indentation').eq(-1);
+    const $indentationLast = $item.find('td:first-of-type').find('.js-indentation').eq(-1);
     if ($indentationLast.length) {
       $indentationLast.after(handle);
       // Update the total width of indentation in this entire table.
@@ -463,7 +460,7 @@
       $item.find('td').eq(0).prepend(handle);
     }
 
-    handle.on('mousedown touchstart pointerdown', function (event) {
+    handle.on('mousedown touchstart pointerdown', (event) => {
       event.preventDefault();
       if (event.originalEvent.type === 'touchstart') {
         event = event.originalEvent.touches[0];
@@ -472,32 +469,32 @@
     });
 
     // Prevent the anchor tag from jumping us to the top of the page.
-    handle.on('click', function (e) {
+    handle.on('click', (e) => {
       e.preventDefault();
     });
 
     // Set blur cleanup when a handle is focused.
-    handle.on('focus', function () {
+    handle.on('focus', () => {
       self.safeBlur = true;
     });
 
     // On blur, fire the same function as a touchend/mouseup. This is used to
     // update values after a row has been moved through the keyboard support.
-    handle.on('blur', function (event) {
+    handle.on('blur', (event) => {
       if (self.rowObject && self.safeBlur) {
         self.dropRow(event, self);
       }
     });
 
     // Add arrow-key support to the handle.
-    handle.on('keydown', function (event) {
+    handle.on('keydown', (event) => {
       // If a rowObject doesn't yet exist and this isn't the tab key.
       if (event.keyCode !== 9 && !self.rowObject) {
         self.rowObject = new self.row(item, 'keyboard', self.indentEnabled, self.maxDepth, true);
       }
 
-      var keyChange = false;
-      var groupHeight;
+      let keyChange = false;
+      let groupHeight;
 
       /* eslint-disable no-fallthrough */
 
@@ -580,12 +577,12 @@
             if ($(item).is('.tabledrag-root')) {
               // Swap with the next group (necessarily a top-level one).
               groupHeight = 0;
-              var nextGroup = new self.row(nextRow, 'keyboard', self.indentEnabled, self.maxDepth, false);
+              const nextGroup = new self.row(nextRow, 'keyboard', self.indentEnabled, self.maxDepth, false);
               if (nextGroup) {
                 $(nextGroup.group).each(function () {
                   groupHeight += $(this).is(':hidden') ? 0 : this.offsetHeight;
                 });
-                var nextGroupRow = $(nextGroup.group).eq(-1).get(0);
+                const nextGroupRow = $(nextGroup.group).eq(-1).get(0);
                 self.rowObject.swap('after', nextGroupRow);
                 // No need to check for indentation, 0 is the only valid one.
                 window.scrollBy(0, parseInt(groupHeight, 10));
@@ -628,8 +625,7 @@
     // scrolling. IE and Safari will suppress scrolling on keydown, but all
     // other browsers need to return false on keypress.
     // http://www.quirksmode.org/js/keys.html
-    handle.on('keypress', function (event) {
-
+    handle.on('keypress', (event) => {
       /* eslint-disable no-fallthrough */
 
       switch (event.keyCode) {
@@ -645,7 +641,6 @@
       }
 
       /* eslint-enable no-fallthrough */
-
     });
   };
 
@@ -704,8 +699,8 @@
   Drupal.tableDrag.prototype.dragRow = function (event, self) {
     if (self.dragObject) {
       self.currentPointerCoords = self.pointerCoords(event);
-      var y = self.currentPointerCoords.y - self.dragObject.initOffset.y;
-      var x = self.currentPointerCoords.x - self.dragObject.initOffset.x;
+      const y = self.currentPointerCoords.y - self.dragObject.initOffset.y;
+      const x = self.currentPointerCoords.x - self.dragObject.initOffset.x;
 
       // Check for row swapping and vertical scrolling.
       if (y !== self.oldY) {
@@ -713,7 +708,7 @@
         // Update the old value.
         self.oldY = y;
         // Check if the window should be scrolled (and how fast).
-        var scrollAmount = self.checkScroll(self.currentPointerCoords.y);
+        const scrollAmount = self.checkScroll(self.currentPointerCoords.y);
         // Stop any current scrolling.
         clearInterval(self.scrollInterval);
         // Continue scrolling if the mouse has moved in the scroll direction.
@@ -722,7 +717,7 @@
         }
 
         // If we have a valid target, perform the swap and restripe the table.
-        var currentRow = self.findDropTargetRow(x, y);
+        const currentRow = self.findDropTargetRow(x, y);
         if (currentRow) {
           if (self.rowObject.direction === 'down') {
             self.rowObject.swap('after', currentRow, self);
@@ -738,13 +733,13 @@
 
       // Similar to row swapping, handle indentations.
       if (self.indentEnabled) {
-        var xDiff = self.currentPointerCoords.x - self.dragObject.indentPointerPos.x;
+        const xDiff = self.currentPointerCoords.x - self.dragObject.indentPointerPos.x;
         // Set the number of indentations the pointer has been moved left or
         // right.
-        var indentDiff = Math.round(xDiff / self.indentAmount);
+        const indentDiff = Math.round(xDiff / self.indentAmount);
         // Indent the row with our estimated diff, which may be further
         // restricted according to the rows around this row.
-        var indentChange = self.rowObject.indent(indentDiff);
+        const indentChange = self.rowObject.indent(indentDiff);
         // Update table and pointer indentations.
         self.dragObject.indentPointerPos.x += self.indentAmount * indentChange * self.rtl;
         self.indentCount = Math.max(self.indentCount, self.rowObject.indents);
@@ -763,8 +758,8 @@
    *   The tableDrag instance.
    */
   Drupal.tableDrag.prototype.dropRow = function (event, self) {
-    var droppedRow;
-    var $droppedRow;
+    let droppedRow;
+    let $droppedRow;
 
     // Drop row functionality.
     if (self.rowObject !== null) {
@@ -777,11 +772,11 @@
 
         // If a setting exists for affecting the entire group, update all the
         // fields in the entire dragged group.
-        for (var group in self.tableSettings) {
+        for (const group in self.tableSettings) {
           if (self.tableSettings.hasOwnProperty(group)) {
-            var rowSettings = self.rowSettings(group, droppedRow);
+            const rowSettings = self.rowSettings(group, droppedRow);
             if (rowSettings.relationship === 'group') {
-              for (var n in self.rowObject.children) {
+              for (const n in self.rowObject.children) {
                 if (self.rowObject.children.hasOwnProperty(n)) {
                   self.updateField(self.rowObject.children[n], group);
                 }
@@ -828,11 +823,11 @@
    */
   Drupal.tableDrag.prototype.pointerCoords = function (event) {
     if (event.pageX || event.pageY) {
-      return {x: event.pageX, y: event.pageY};
+      return { x: event.pageX, y: event.pageY };
     }
     return {
       x: event.clientX + document.body.scrollLeft - document.body.clientLeft,
-      y: event.clientY + document.body.scrollTop - document.body.clientTop
+      y: event.clientY + document.body.scrollTop - document.body.clientTop,
     };
   };
 
@@ -851,9 +846,9 @@
    *   An object with `x` and `y` keys indicating the position.
    */
   Drupal.tableDrag.prototype.getPointerOffset = function (target, event) {
-    var docPos = $(target).offset();
-    var pointerPos = this.pointerCoords(event);
-    return {x: pointerPos.x - docPos.left, y: pointerPos.y - docPos.top};
+    const docPos = $(target).offset();
+    const pointerPos = this.pointerCoords(event);
+    return { x: pointerPos.x - docPos.left, y: pointerPos.y - docPos.top };
   };
 
   /**
@@ -870,11 +865,11 @@
    *   The drop target row, if found.
    */
   Drupal.tableDrag.prototype.findDropTargetRow = function (x, y) {
-    var rows = $(this.table.tBodies[0].rows).not(':hidden');
-    for (var n = 0; n < rows.length; n++) {
-      var row = rows[n];
-      var $row = $(row);
-      var rowY = $row.offset().top;
+    const rows = $(this.table.tBodies[0].rows).not(':hidden');
+    for (let n = 0; n < rows.length; n++) {
+      let row = rows[n];
+      let $row = $(row);
+      const rowY = $row.offset().top;
       var rowHeight;
       // Because Safari does not report offsetHeight on table rows, but does on
       // table cells, grab the firstChild of the row and use that instead.
@@ -929,7 +924,7 @@
    *   DOM object for the row that was just dropped.
    */
   Drupal.tableDrag.prototype.updateFields = function (changedRow) {
-    for (var group in this.tableSettings) {
+    for (const group in this.tableSettings) {
       if (this.tableSettings.hasOwnProperty(group)) {
         // Each group may have a different setting for relationship, so we find
         // the source rows for each separately.
@@ -947,12 +942,12 @@
    *   The settings group on which field updates will occur.
    */
   Drupal.tableDrag.prototype.updateField = function (changedRow, group) {
-    var rowSettings = this.rowSettings(group, changedRow);
-    var $changedRow = $(changedRow);
-    var sourceRow;
-    var $previousRow;
-    var previousRow;
-    var useSibling;
+    let rowSettings = this.rowSettings(group, changedRow);
+    const $changedRow = $(changedRow);
+    let sourceRow;
+    let $previousRow;
+    let previousRow;
+    let useSibling;
     // Set the row as its own target.
     if (rowSettings.relationship === 'self' || rowSettings.relationship === 'group') {
       sourceRow = changedRow;
@@ -961,10 +956,10 @@
     else if (rowSettings.relationship === 'sibling') {
       $previousRow = $changedRow.prev('tr:first-of-type');
       previousRow = $previousRow.get(0);
-      var $nextRow = $changedRow.next('tr:first-of-type');
-      var nextRow = $nextRow.get(0);
+      const $nextRow = $changedRow.next('tr:first-of-type');
+      const nextRow = $nextRow.get(0);
       sourceRow = changedRow;
-      if ($previousRow.is('.draggable') && $previousRow.find('.' + group).length) {
+      if ($previousRow.is('.draggable') && $previousRow.find(`.${group}`).length) {
         if (this.indentEnabled) {
           if ($previousRow.find('.js-indentations').length === $changedRow.find('.js-indentations').length) {
             sourceRow = previousRow;
@@ -974,7 +969,7 @@
           sourceRow = previousRow;
         }
       }
-      else if ($nextRow.is('.draggable') && $nextRow.find('.' + group).length) {
+      else if ($nextRow.is('.draggable') && $nextRow.find(`.${group}`).length) {
         if (this.indentEnabled) {
           if ($nextRow.find('.js-indentations').length === $changedRow.find('.js-indentations').length) {
             sourceRow = nextRow;
@@ -1024,13 +1019,13 @@
       rowSettings.source = rowSettings.target;
     }
 
-    var targetClass = '.' + rowSettings.target;
-    var targetElement = $changedRow.find(targetClass).get(0);
+    const targetClass = `.${rowSettings.target}`;
+    const targetElement = $changedRow.find(targetClass).get(0);
 
     // Check if a target element exists in this row.
     if (targetElement) {
-      var sourceClass = '.' + rowSettings.source;
-      var sourceElement = $(sourceClass, sourceRow).get(0);
+      const sourceClass = `.${rowSettings.source}`;
+      const sourceElement = $(sourceClass, sourceRow).get(0);
       switch (rowSettings.action) {
         case 'depth':
           // Get the depth of the target row.
@@ -1046,11 +1041,11 @@
           var siblings = this.rowObject.findSiblings(rowSettings);
           if ($(targetElement).is('select')) {
             // Get a list of acceptable values.
-            var values = [];
+            const values = [];
             $(targetElement).find('option').each(function () {
               values.push(this.value);
             });
-            var maxVal = values[values.length - 1];
+            const maxVal = values[values.length - 1];
             // Populate the values in the siblings.
             $(siblings).find(targetClass).each(function () {
               // If there are more items than possible values, assign the
@@ -1065,7 +1060,7 @@
           }
           else {
             // Assume a numeric input field.
-            var weight = parseInt($(siblings[0]).find(targetClass).val(), 10) || 0;
+            let weight = parseInt($(siblings[0]).find(targetClass).val(), 10) || 0;
             $(siblings).find(targetClass).each(function () {
               this.value = weight;
               weight++;
@@ -1091,8 +1086,8 @@
    *   The group selector.
    */
   Drupal.tableDrag.prototype.copyDragClasses = function (sourceRow, targetRow, group) {
-    var sourceElement = $(sourceRow).find('.' + group);
-    var targetElement = $(targetRow).find('.' + group);
+    const sourceElement = $(sourceRow).find(`.${group}`);
+    const targetElement = $(targetRow).find(`.${group}`);
     if (sourceElement.length && targetElement.length) {
       targetElement[0].className = sourceElement[0].className;
     }
@@ -1108,19 +1103,19 @@
    *   The suggested scroll.
    */
   Drupal.tableDrag.prototype.checkScroll = function (cursorY) {
-    var de = document.documentElement;
-    var b = document.body;
+    const de = document.documentElement;
+    const b = document.body;
 
-    var windowHeight = this.windowHeight = window.innerHeight || (de.clientHeight && de.clientWidth !== 0 ? de.clientHeight : b.offsetHeight);
-    var scrollY;
+    const windowHeight = this.windowHeight = window.innerHeight || (de.clientHeight && de.clientWidth !== 0 ? de.clientHeight : b.offsetHeight);
+    let scrollY;
     if (document.all) {
       scrollY = this.scrollY = !de.scrollTop ? b.scrollTop : de.scrollTop;
     }
     else {
       scrollY = this.scrollY = window.pageYOffset ? window.pageYOffset : window.scrollY;
     }
-    var trigger = this.scrollSettings.trigger;
-    var delta = 0;
+    const trigger = this.scrollSettings.trigger;
+    let delta = 0;
 
     // Return a scroll speed relative to the edge of the screen.
     if (cursorY - scrollY > windowHeight - trigger) {
@@ -1142,13 +1137,13 @@
    *   The amount of scroll to apply to the window.
    */
   Drupal.tableDrag.prototype.setScroll = function (scrollAmount) {
-    var self = this;
+    const self = this;
 
-    this.scrollInterval = setInterval(function () {
+    this.scrollInterval = setInterval(() => {
       // Update the scroll values stored in the object.
       self.checkScroll(self.currentPointerCoords.y);
-      var aboveTable = self.scrollY > self.table.topY;
-      var belowTable = self.scrollY + self.windowHeight < self.table.bottomY;
+      const aboveTable = self.scrollY > self.table.topY;
+      const belowTable = self.scrollY + self.windowHeight < self.table.bottomY;
       if (scrollAmount > 0 && belowTable || scrollAmount < 0 && aboveTable) {
         window.scrollBy(0, scrollAmount);
       }
@@ -1205,7 +1200,7 @@
    *   relationships.
    */
   Drupal.tableDrag.prototype.row = function (tableRow, method, indentEnabled, maxDepth, addClasses) {
-    var $tableRow = $(tableRow);
+    const $tableRow = $(tableRow);
 
     this.element = tableRow;
     this.method = method;
@@ -1222,7 +1217,7 @@
       this.children = this.findChildren(addClasses);
       this.group = $.merge(this.group, this.children);
       // Find the depth of this entire group.
-      for (var n = 0; n < this.group.length; n++) {
+      for (let n = 0; n < this.group.length; n++) {
         this.groupDepth = Math.max($(this.group[n]).find('.js-indentation').length, this.groupDepth);
       }
     }
@@ -1239,13 +1234,13 @@
    *   An array of children of the row.
    */
   Drupal.tableDrag.prototype.row.prototype.findChildren = function (addClasses) {
-    var parentIndentation = this.indents;
-    var currentRow = $(this.element, this.table).next('tr.draggable');
-    var rows = [];
-    var child = 0;
+    const parentIndentation = this.indents;
+    let currentRow = $(this.element, this.table).next('tr.draggable');
+    const rows = [];
+    let child = 0;
 
     function rowIndentation(indentNum, el) {
-      var self = $(el);
+      const self = $(el);
       if (child === 1 && (indentNum === parentIndentation)) {
         self.addClass('tree-child-first');
       }
@@ -1272,7 +1267,7 @@
       currentRow = currentRow.next('tr.draggable');
     }
     if (addClasses && rows.length) {
-      $(rows[rows.length - 1]).find('.js-indentation:nth-child(' + (parentIndentation + 1) + ')').addClass('tree-child-last');
+      $(rows[rows.length - 1]).find(`.js-indentation:nth-child(${parentIndentation + 1})`).addClass('tree-child-last');
     }
     return rows;
   };
@@ -1287,10 +1282,10 @@
    *   Whether the swap is a valid swap or not.
    */
   Drupal.tableDrag.prototype.row.prototype.isValidSwap = function (row) {
-    var $row = $(row);
+    const $row = $(row);
     if (this.indentEnabled) {
-      var prevRow;
-      var nextRow;
+      let prevRow;
+      let nextRow;
       if (this.direction === 'down') {
         prevRow = row;
         nextRow = $row.next('tr').get(0);
@@ -1325,12 +1320,12 @@
    */
   Drupal.tableDrag.prototype.row.prototype.swap = function (position, row) {
     // Makes sure only DOM object are passed to Drupal.detachBehaviors().
-    this.group.forEach(function (row) {
+    this.group.forEach((row) => {
       Drupal.detachBehaviors(row, drupalSettings, 'move');
     });
     $(row)[position](this.group);
     // Makes sure only DOM object are passed to Drupal.attachBehaviors()s.
-    this.group.forEach(function (row) {
+    this.group.forEach((row) => {
       Drupal.attachBehaviors(row, drupalSettings);
     });
     this.changed = true;
@@ -1352,9 +1347,9 @@
    *   interval.
    */
   Drupal.tableDrag.prototype.row.prototype.validIndentInterval = function (prevRow, nextRow) {
-    var $prevRow = $(prevRow);
-    var minIndent;
-    var maxIndent;
+    const $prevRow = $(prevRow);
+    let minIndent;
+    let maxIndent;
 
     // Minimum indentation:
     // Do not orphan the next row.
@@ -1377,7 +1372,7 @@
       }
     }
 
-    return {min: minIndent, max: maxIndent};
+    return { min: minIndent, max: maxIndent };
   };
 
   /**
@@ -1392,21 +1387,21 @@
    *   The number of indentations applied.
    */
   Drupal.tableDrag.prototype.row.prototype.indent = function (indentDiff) {
-    var $group = $(this.group);
+    const $group = $(this.group);
     // Determine the valid indentations interval if not available yet.
     if (!this.interval) {
-      var prevRow = $(this.element).prev('tr').get(0);
-      var nextRow = $group.eq(-1).next('tr').get(0);
+      const prevRow = $(this.element).prev('tr').get(0);
+      const nextRow = $group.eq(-1).next('tr').get(0);
       this.interval = this.validIndentInterval(prevRow, nextRow);
     }
 
     // Adjust to the nearest valid indentation.
-    var indent = this.indents + indentDiff;
+    let indent = this.indents + indentDiff;
     indent = Math.max(indent, this.interval.min);
     indent = Math.min(indent, this.interval.max);
     indentDiff = indent - this.indents;
 
-    for (var n = 1; n <= Math.abs(indentDiff); n++) {
+    for (let n = 1; n <= Math.abs(indentDiff); n++) {
       // Add or remove indentations.
       if (indentDiff < 0) {
         $group.find('.js-indentation:first-of-type').remove();
@@ -1440,15 +1435,15 @@
    *   An array of siblings.
    */
   Drupal.tableDrag.prototype.row.prototype.findSiblings = function (rowSettings) {
-    var siblings = [];
-    var directions = ['prev', 'next'];
-    var rowIndentation = this.indents;
-    var checkRowIndentation;
-    for (var d = 0; d < directions.length; d++) {
-      var checkRow = $(this.element)[directions[d]]();
+    const siblings = [];
+    const directions = ['prev', 'next'];
+    const rowIndentation = this.indents;
+    let checkRowIndentation;
+    for (let d = 0; d < directions.length; d++) {
+      let checkRow = $(this.element)[directions[d]]();
       while (checkRow.length) {
         // Check that the sibling contains a similar target field.
-        if (checkRow.find('.' + rowSettings.target)) {
+        if (checkRow.find(`.${rowSettings.target}`)) {
           // Either add immediately if this is a flat table, or check to ensure
           // that this row has the same level of indentation.
           if (this.indentEnabled) {
@@ -1482,7 +1477,7 @@
    * Remove indentation helper classes from the current row group.
    */
   Drupal.tableDrag.prototype.row.prototype.removeIndentClasses = function () {
-    for (var n in this.children) {
+    for (const n in this.children) {
       if (this.children.hasOwnProperty(n)) {
         $(this.children[n]).find('.js-indentation')
           .removeClass('tree-child')
@@ -1497,8 +1492,8 @@
    * Add an asterisk or other marker to the changed row.
    */
   Drupal.tableDrag.prototype.row.prototype.markChanged = function () {
-    var marker = Drupal.theme('tableDragChangedMarker');
-    var cell = $(this.element).find('td:first-of-type');
+    const marker = Drupal.theme('tableDragChangedMarker');
+    const cell = $(this.element).find('td:first-of-type');
     if (cell.find('abbr.tabledrag-changed').length === 0) {
       cell.append(marker);
     }
@@ -1533,15 +1528,15 @@
      * @return {string}
      *  Markup for the marker.
      */
-    tableDragChangedMarker: function () {
-      return '<abbr class="warning tabledrag-changed" title="' + Drupal.t('Changed') + '">*</abbr>';
+    tableDragChangedMarker() {
+      return `<abbr class="warning tabledrag-changed" title="${Drupal.t('Changed')}">*</abbr>`;
     },
 
     /**
      * @return {string}
      *   Markup for the indentation.
      */
-    tableDragIndentation: function () {
+    tableDragIndentation() {
       return '<div class="js-indentation indentation">&nbsp;</div>';
     },
 
@@ -1549,9 +1544,8 @@
      * @return {string}
      *   Markup for the warning.
      */
-    tableDragChangedWarning: function () {
-      return '<div class="tabledrag-changed-warning messages messages--warning" role="alert">' + Drupal.theme('tableDragChangedMarker') + ' ' + Drupal.t('You have unsaved changes.') + '</div>';
-    }
+    tableDragChangedWarning() {
+      return `<div class="tabledrag-changed-warning messages messages--warning" role="alert">${Drupal.theme('tableDragChangedMarker')} ${Drupal.t('You have unsaved changes.')}</div>`;
+    },
   });
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/misc/tableheader.es6.js b/core/misc/tableheader.es6.js
index 8fc1b04896..a5aa6635d3 100644
--- a/core/misc/tableheader.es6.js
+++ b/core/misc/tableheader.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, displace) {
-
-  'use strict';
-
   /**
    * Attaches sticky table headers.
    *
@@ -16,9 +13,9 @@
    *   Attaches the sticky table header behavior.
    */
   Drupal.behaviors.tableHeader = {
-    attach: function (context) {
-      $(window).one('scroll.TableHeaderInit', {context: context}, tableHeaderInitHandler);
-    }
+    attach(context) {
+      $(window).one('scroll.TableHeaderInit', { context }, tableHeaderInitHandler);
+    },
   };
 
   function scrollValue(position) {
@@ -27,9 +24,9 @@
 
   // Select and initialize sticky table headers.
   function tableHeaderInitHandler(e) {
-    var $tables = $(e.data.context).find('table.sticky-enabled').once('tableheader');
-    var il = $tables.length;
-    for (var i = 0; i < il; i++) {
+    const $tables = $(e.data.context).find('table.sticky-enabled').once('tableheader');
+    const il = $tables.length;
+    for (let i = 0; i < il; i++) {
       TableHeader.tables.push(new TableHeader($tables[i]));
     }
     forTables('onScroll');
@@ -37,9 +34,9 @@
 
   // Helper method to loop through tables and execute a method.
   function forTables(method, arg) {
-    var tables = TableHeader.tables;
-    var il = tables.length;
-    for (var i = 0; i < il; i++) {
+    const tables = TableHeader.tables;
+    const il = tables.length;
+    for (let i = 0; i < il; i++) {
       tables[i][method](arg);
     }
   }
@@ -71,7 +68,7 @@
      *
      * @ignore
      */
-    'scroll.TableHeader': tableHeaderOnScrollHandler
+    'scroll.TableHeader': tableHeaderOnScrollHandler,
   });
   // Bind to custom Drupal events.
   $(document).on({
@@ -89,7 +86,7 @@
      *
      * @ignore
      */
-    'drupalViewportOffsetChange.TableHeader': tableHeaderOffsetChangeHandler
+    'drupalViewportOffsetChange.TableHeader': tableHeaderOffsetChangeHandler,
   });
 
   /**
@@ -106,7 +103,7 @@
    * @listens event:columnschange
    */
   function TableHeader(table) {
-    var $table = $(table);
+    const $table = $(table);
 
     /**
      * @name Drupal.TableHeader#$originalTable
@@ -134,8 +131,8 @@
     this.tableOffset = this.$originalTable.offset();
 
     // React to columns change to avoid making checks in the scroll callback.
-    this.$originalTable.on('columnschange', {tableHeader: this}, function (e, display) {
-      var tableHeader = e.data.tableHeader;
+    this.$originalTable.on('columnschange', { tableHeader: this }, (e, display) => {
+      const tableHeader = e.data.tableHeader;
       if (tableHeader.displayWeight === null || tableHeader.displayWeight !== display) {
         tableHeader.recalculateSticky();
       }
@@ -156,7 +153,7 @@
      *
      * @type {Array.<Drupal.TableHeader>}
      */
-    tables: []
+    tables: [],
   });
 
   /**
@@ -195,15 +192,15 @@
     /**
      * Create the duplicate header.
      */
-    createSticky: function () {
+    createSticky() {
       // Clone the table header so it inherits original jQuery properties.
-      var $stickyHeader = this.$originalHeader.clone(true);
+      const $stickyHeader = this.$originalHeader.clone(true);
       // Hide the table to avoid a flash of the header clone upon page load.
       this.$stickyTable = $('<table class="sticky-header"/>')
         .css({
           visibility: 'hidden',
           position: 'fixed',
-          top: '0px'
+          top: '0px',
         })
         .append($stickyHeader)
         .insertBefore(this.$originalTable);
@@ -225,13 +222,13 @@
      * @return {jQuery}
      *   The sticky table as a jQuery collection.
      */
-    stickyPosition: function (offsetTop, offsetLeft) {
-      var css = {};
+    stickyPosition(offsetTop, offsetLeft) {
+      const css = {};
       if (typeof offsetTop === 'number') {
-        css.top = offsetTop + 'px';
+        css.top = `${offsetTop}px`;
       }
       if (typeof offsetLeft === 'number') {
-        css.left = (this.tableOffset.left - offsetLeft) + 'px';
+        css.left = `${this.tableOffset.left - offsetLeft}px`;
       }
       return this.$stickyTable.css(css);
     },
@@ -242,11 +239,11 @@
      * @return {bool}
      *   The visibility status.
      */
-    checkStickyVisible: function () {
-      var scrollTop = scrollValue('scrollTop');
-      var tableTop = this.tableOffset.top - displace.offsets.top;
-      var tableBottom = tableTop + this.tableHeight;
-      var visible = false;
+    checkStickyVisible() {
+      const scrollTop = scrollValue('scrollTop');
+      const tableTop = this.tableOffset.top - displace.offsets.top;
+      const tableBottom = tableTop + this.tableHeight;
+      let visible = false;
 
       if (tableTop < scrollTop && scrollTop < (tableBottom - this.minHeight)) {
         visible = true;
@@ -265,7 +262,7 @@
      * @param {jQuery.Event} e
      *   The scroll event.
      */
-    onScroll: function (e) {
+    onScroll(e) {
       this.checkStickyVisible();
       // Track horizontal positioning relative to the viewport.
       this.stickyPosition(null, scrollValue('scrollLeft'));
@@ -278,7 +275,7 @@
      * @param {jQuery.Event} event
      *   Event being triggered.
      */
-    recalculateSticky: function (event) {
+    recalculateSticky(event) {
       // Update table size.
       this.tableHeight = this.$originalTable[0].clientHeight;
 
@@ -288,29 +285,28 @@
       this.stickyPosition(displace.offsets.top, scrollValue('scrollLeft'));
 
       // Update columns width.
-      var $that = null;
-      var $stickyCell = null;
-      var display = null;
+      let $that = null;
+      let $stickyCell = null;
+      let display = null;
       // Resize header and its cell widths.
       // Only apply width to visible table cells. This prevents the header from
       // displaying incorrectly when the sticky header is no longer visible.
-      var il = this.$originalHeaderCells.length;
-      for (var i = 0; i < il; i++) {
+      const il = this.$originalHeaderCells.length;
+      for (let i = 0; i < il; i++) {
         $that = $(this.$originalHeaderCells[i]);
         $stickyCell = this.$stickyHeaderCells.eq($that.index());
         display = $that.css('display');
         if (display !== 'none') {
-          $stickyCell.css({width: $that.css('width'), display: display});
+          $stickyCell.css({ width: $that.css('width'), display });
         }
         else {
           $stickyCell.css('display', 'none');
         }
       }
       this.$stickyTable.css('width', this.$originalTable.outerWidth());
-    }
+    },
   });
 
   // Expose constructor in the public space.
   Drupal.TableHeader = TableHeader;
-
 }(jQuery, Drupal, window.parent.Drupal.displace));
diff --git a/core/misc/tableresponsive.es6.js b/core/misc/tableresponsive.es6.js
index 0127ec8873..69d72679f9 100644
--- a/core/misc/tableresponsive.es6.js
+++ b/core/misc/tableresponsive.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, window) {
-
-  'use strict';
-
   /**
    * Attach the tableResponsive function to {@link Drupal.behaviors}.
    *
@@ -16,15 +13,15 @@
    *   Attaches tableResponsive functionality.
    */
   Drupal.behaviors.tableResponsive = {
-    attach: function (context, settings) {
-      var $tables = $(context).find('table.responsive-enabled').once('tableresponsive');
+    attach(context, settings) {
+      const $tables = $(context).find('table.responsive-enabled').once('tableresponsive');
       if ($tables.length) {
-        var il = $tables.length;
-        for (var i = 0; i < il; i++) {
+        const il = $tables.length;
+        for (let i = 0; i < il; i++) {
           TableResponsive.tables.push(new TableResponsive($tables[i]));
         }
       }
-    }
+    },
   };
 
   /**
@@ -73,7 +70,7 @@
      *
      * @type {Array.<Drupal.TableResponsive>}
      */
-    tables: []
+    tables: [],
   });
 
   /**
@@ -88,9 +85,9 @@
      * @param {jQuery.Event} e
      *   The event triggered.
      */
-    eventhandlerEvaluateColumnVisibility: function (e) {
-      var pegged = parseInt(this.$link.data('pegged'), 10);
-      var hiddenLength = this.$headers.filter('.priority-medium:hidden, .priority-low:hidden').length;
+    eventhandlerEvaluateColumnVisibility(e) {
+      const pegged = parseInt(this.$link.data('pegged'), 10);
+      const hiddenLength = this.$headers.filter('.priority-medium:hidden, .priority-low:hidden').length;
       // If the table has hidden columns, associate an action link with the
       // table to show the columns.
       if (hiddenLength > 0) {
@@ -112,18 +109,18 @@
      * @param {jQuery.Event} e
      *   The event triggered.
      */
-    eventhandlerToggleColumns: function (e) {
+    eventhandlerToggleColumns(e) {
       e.preventDefault();
-      var self = this;
-      var $hiddenHeaders = this.$headers.filter('.priority-medium:hidden, .priority-low:hidden');
+      const self = this;
+      const $hiddenHeaders = this.$headers.filter('.priority-medium:hidden, .priority-low:hidden');
       this.$revealedCells = this.$revealedCells || $();
       // Reveal hidden columns.
       if ($hiddenHeaders.length > 0) {
         $hiddenHeaders.each(function (index, element) {
-          var $header = $(this);
-          var position = $header.prevAll('th').length;
+          const $header = $(this);
+          const position = $header.prevAll('th').length;
           self.$table.find('tbody tr').each(function () {
-            var $cells = $(this).find('td').eq(position);
+            const $cells = $(this).find('td').eq(position);
             $cells.show();
             // Keep track of the revealed cells, so they can be hidden later.
             self.$revealedCells = $().add(self.$revealedCells).add($cells);
@@ -140,19 +137,19 @@
         // Strip the 'display:none' declaration from the style attributes of
         // the table cells that .hide() added.
         this.$revealedCells.each(function (index, element) {
-          var $cell = $(this);
-          var properties = $cell.attr('style').split(';');
-          var newProps = [];
+          const $cell = $(this);
+          const properties = $cell.attr('style').split(';');
+          const newProps = [];
           // The hide method adds display none to the element. The element
           // should be returned to the same state it was in before the columns
           // were revealed, so it is necessary to remove the display none value
           // from the style attribute.
-          var match = /^display\s*\:\s*none$/;
-          for (var i = 0; i < properties.length; i++) {
-            var prop = properties[i];
+          const match = /^display\s*\:\s*none$/;
+          for (let i = 0; i < properties.length; i++) {
+            const prop = properties[i];
             prop.trim();
             // Find the display:none property and remove it.
-            var isDisplayNone = match.exec(prop);
+            const isDisplayNone = match.exec(prop);
             if (isDisplayNone) {
               continue;
             }
@@ -165,10 +162,9 @@
         // Refresh the toggle link.
         $(window).trigger('resize.tableresponsive');
       }
-    }
+    },
   });
 
   // Make the TableResponsive object available in the Drupal namespace.
   Drupal.TableResponsive = TableResponsive;
-
-})(jQuery, Drupal, window);
+}(jQuery, Drupal, window));
diff --git a/core/misc/tableselect.es6.js b/core/misc/tableselect.es6.js
index 243e000110..a92fdd5f17 100644
--- a/core/misc/tableselect.es6.js
+++ b/core/misc/tableselect.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Initialize tableSelects.
    *
@@ -16,10 +13,10 @@
    *   Attaches tableSelect functionality.
    */
   Drupal.behaviors.tableSelect = {
-    attach: function (context, settings) {
+    attach(context, settings) {
       // Select the inner-most table in case of nested tables.
       $(context).find('th.select-all').closest('table').once('table-select').each(Drupal.tableSelect);
-    }
+    },
   };
 
   /**
@@ -34,19 +31,19 @@
 
     // Keep track of the table, which checkbox is checked and alias the
     // settings.
-    var table = this;
-    var checkboxes;
-    var lastChecked;
-    var $table = $(table);
-    var strings = {
+    const table = this;
+    let checkboxes;
+    let lastChecked;
+    const $table = $(table);
+    const strings = {
       selectAll: Drupal.t('Select all rows in this table'),
-      selectNone: Drupal.t('Deselect all rows in this table')
+      selectNone: Drupal.t('Deselect all rows in this table'),
     };
-    var updateSelectAll = function (state) {
+    const updateSelectAll = function (state) {
       // Update table's select-all checkbox (and sticky header's if available).
       $table.prev('table.sticky-header').addBack().find('th.select-all input[type="checkbox"]').each(function () {
-        var $checkbox = $(this);
-        var stateChanged = $checkbox.prop('checked') !== state;
+        const $checkbox = $(this);
+        const stateChanged = $checkbox.prop('checked') !== state;
 
         $checkbox.attr('title', state ? strings.selectNone : strings.selectAll);
 
@@ -60,13 +57,13 @@
     };
 
     // Find all <th> with class select-all, and insert the check all checkbox.
-    $table.find('th.select-all').prepend($('<input type="checkbox" class="form-checkbox" />').attr('title', strings.selectAll)).on('click', function (event) {
+    $table.find('th.select-all').prepend($('<input type="checkbox" class="form-checkbox" />').attr('title', strings.selectAll)).on('click', (event) => {
       if ($(event.target).is('input[type="checkbox"]')) {
         // Loop through all checkboxes and set their state to the select all
         // checkbox' state.
         checkboxes.each(function () {
-          var $checkbox = $(this);
-          var stateChanged = $checkbox.prop('checked') !== event.target.checked;
+          const $checkbox = $(this);
+          const stateChanged = $checkbox.prop('checked') !== event.target.checked;
 
           /**
            * @checkbox {HTMLElement}
@@ -128,10 +125,10 @@
    */
   Drupal.tableSelectRange = function (from, to, state) {
     // We determine the looping mode based on the order of from and to.
-    var mode = from.rowIndex > to.rowIndex ? 'previousSibling' : 'nextSibling';
+    const mode = from.rowIndex > to.rowIndex ? 'previousSibling' : 'nextSibling';
 
     // Traverse through the sibling nodes.
-    for (var i = from[mode]; i; i = i[mode]) {
+    for (let i = from[mode]; i; i = i[mode]) {
       var $i;
       // Make sure that we're only dealing with elements.
       if (i.nodeType !== 1) {
@@ -155,5 +152,4 @@
       }
     }
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/misc/timezone.es6.js b/core/misc/timezone.es6.js
index 3c88d463dd..0df3f9f150 100644
--- a/core/misc/timezone.es6.js
+++ b/core/misc/timezone.es6.js
@@ -4,39 +4,36 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Set the client's system time zone as default values of form fields.
    *
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.setTimezone = {
-    attach: function (context, settings) {
-      var $timezone = $(context).find('.timezone-detect').once('timezone');
+    attach(context, settings) {
+      const $timezone = $(context).find('.timezone-detect').once('timezone');
       if ($timezone.length) {
-        var dateString = Date();
+        const dateString = Date();
         // In some client environments, date strings include a time zone
         // abbreviation, between 3 and 5 letters enclosed in parentheses,
         // which can be interpreted by PHP.
-        var matches = dateString.match(/\(([A-Z]{3,5})\)/);
-        var abbreviation = matches ? matches[1] : 0;
+        const matches = dateString.match(/\(([A-Z]{3,5})\)/);
+        const abbreviation = matches ? matches[1] : 0;
 
         // For all other client environments, the abbreviation is set to "0"
         // and the current offset from UTC and daylight saving time status are
         // used to guess the time zone.
-        var dateNow = new Date();
-        var offsetNow = dateNow.getTimezoneOffset() * -60;
+        const dateNow = new Date();
+        const offsetNow = dateNow.getTimezoneOffset() * -60;
 
         // Use January 1 and July 1 as test dates for determining daylight
         // saving time status by comparing their offsets.
-        var dateJan = new Date(dateNow.getFullYear(), 0, 1, 12, 0, 0, 0);
-        var dateJul = new Date(dateNow.getFullYear(), 6, 1, 12, 0, 0, 0);
-        var offsetJan = dateJan.getTimezoneOffset() * -60;
-        var offsetJul = dateJul.getTimezoneOffset() * -60;
+        const dateJan = new Date(dateNow.getFullYear(), 0, 1, 12, 0, 0, 0);
+        const dateJul = new Date(dateNow.getFullYear(), 6, 1, 12, 0, 0, 0);
+        const offsetJan = dateJan.getTimezoneOffset() * -60;
+        const offsetJul = dateJul.getTimezoneOffset() * -60;
 
-        var isDaylightSavingTime;
+        let isDaylightSavingTime;
         // If the offset from UTC is identical on January 1 and July 1,
         // assume daylight saving time is not used in this time zone.
         if (offsetJan === offsetJul) {
@@ -57,20 +54,19 @@
         // callback for debugging purposes. Submit a synchronous request to
         // avoid database errors associated with concurrent requests
         // during install.
-        var path = 'system/timezone/' + abbreviation + '/' + offsetNow + '/' + isDaylightSavingTime;
+        const path = `system/timezone/${abbreviation}/${offsetNow}/${isDaylightSavingTime}`;
         $.ajax({
           async: false,
           url: Drupal.url(path),
-          data: {date: dateString},
+          data: { date: dateString },
           dataType: 'json',
-          success: function (data) {
+          success(data) {
             if (data) {
               $timezone.val(data);
             }
-          }
+          },
         });
       }
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/misc/vertical-tabs.es6.js b/core/misc/vertical-tabs.es6.js
index c7ad2fd2b4..9c351d7e60 100644
--- a/core/misc/vertical-tabs.es6.js
+++ b/core/misc/vertical-tabs.es6.js
@@ -13,9 +13,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * This script transforms a set of details into a stack of vertical tabs.
    *
@@ -31,36 +28,36 @@
    *   Attaches behaviors for vertical tabs.
    */
   Drupal.behaviors.verticalTabs = {
-    attach: function (context) {
-      var width = drupalSettings.widthBreakpoint || 640;
-      var mq = '(max-width: ' + width + 'px)';
+    attach(context) {
+      const width = drupalSettings.widthBreakpoint || 640;
+      const mq = `(max-width: ${width}px)`;
 
       if (window.matchMedia(mq).matches) {
         return;
       }
 
       $(context).find('[data-vertical-tabs-panes]').once('vertical-tabs').each(function () {
-        var $this = $(this).addClass('vertical-tabs__panes');
-        var focusID = $this.find(':hidden.vertical-tabs__active-tab').val();
-        var tab_focus;
+        const $this = $(this).addClass('vertical-tabs__panes');
+        const focusID = $this.find(':hidden.vertical-tabs__active-tab').val();
+        let tab_focus;
 
         // Check if there are some details that can be converted to
         // vertical-tabs.
-        var $details = $this.find('> details');
+        const $details = $this.find('> details');
         if ($details.length === 0) {
           return;
         }
 
         // Create the tab column.
-        var tab_list = $('<ul class="vertical-tabs__menu"></ul>');
+        const tab_list = $('<ul class="vertical-tabs__menu"></ul>');
         $this.wrap('<div class="vertical-tabs clearfix"></div>').before(tab_list);
 
         // Transform each details into a tab.
         $details.each(function () {
-          var $that = $(this);
-          var vertical_tab = new Drupal.verticalTab({
+          const $that = $(this);
+          const vertical_tab = new Drupal.verticalTab({
             title: $that.find('> summary').text(),
-            details: $that
+            details: $that,
           });
           tab_list.append(vertical_tab.item);
           $that
@@ -81,7 +78,7 @@
         if (!tab_focus) {
           // If the current URL has a fragment and one of the tabs contains an
           // element that matches the URL fragment, activate that tab.
-          var $locationHash = $this.find(window.location.hash);
+          const $locationHash = $this.find(window.location.hash);
           if (window.location.hash && $locationHash.length) {
             tab_focus = $locationHash.closest('.vertical-tabs__pane');
           }
@@ -93,7 +90,7 @@
           tab_focus.data('verticalTab').focus();
         }
       });
-    }
+    },
   };
 
   /**
@@ -113,19 +110,19 @@
    * @listens event:summaryUpdated
    */
   Drupal.verticalTab = function (settings) {
-    var self = this;
+    const self = this;
     $.extend(this, settings, Drupal.theme('verticalTab', settings));
 
-    this.link.attr('href', '#' + settings.details.attr('id'));
+    this.link.attr('href', `#${settings.details.attr('id')}`);
 
-    this.link.on('click', function (e) {
+    this.link.on('click', (e) => {
       e.preventDefault();
       self.focus();
     });
 
     // Keyboard events added:
     // Pressing the Enter key will open the tab pane.
-    this.link.on('keydown', function (event) {
+    this.link.on('keydown', (event) => {
       if (event.keyCode === 13) {
         event.preventDefault();
         self.focus();
@@ -135,7 +132,7 @@
     });
 
     this.details
-      .on('summaryUpdated', function () {
+      .on('summaryUpdated', () => {
         self.updateSummary();
       })
       .trigger('summaryUpdated');
@@ -146,11 +143,11 @@
     /**
      * Displays the tab's content pane.
      */
-    focus: function () {
+    focus() {
       this.details
         .siblings('.vertical-tabs__pane')
         .each(function () {
-          var tab = $(this).data('verticalTab');
+          const tab = $(this).data('verticalTab');
           tab.details.hide();
           tab.item.removeClass('is-selected');
         })
@@ -161,13 +158,13 @@
       this.item.addClass('is-selected');
       // Mark the active tab for screen readers.
       $('#active-vertical-tab').remove();
-      this.link.append('<span id="active-vertical-tab" class="visually-hidden">' + Drupal.t('(active tab)') + '</span>');
+      this.link.append(`<span id="active-vertical-tab" class="visually-hidden">${Drupal.t('(active tab)')}</span>`);
     },
 
     /**
      * Updates the tab's summary.
      */
-    updateSummary: function () {
+    updateSummary() {
       this.summary.html(this.details.drupalGetSummary());
     },
 
@@ -177,7 +174,7 @@
      * @return {Drupal.verticalTab}
      *   The verticalTab instance.
      */
-    tabShow: function () {
+    tabShow() {
       // Display the tab.
       this.item.show();
       // Show the vertical tabs.
@@ -200,7 +197,7 @@
      * @return {Drupal.verticalTab}
      *   The verticalTab instance.
      */
-    tabHide: function () {
+    tabHide() {
       // Hide this tab.
       this.item.hide();
       // Update .first marker for items. We need recurse from parent to retain
@@ -211,7 +208,7 @@
       // Hide the details element.
       this.details.addClass('vertical-tab--hidden').hide();
       // Focus the first visible tab (if there is one).
-      var $firstTab = this.details.siblings('.vertical-tabs__pane:not(.vertical-tab--hidden)').eq(0);
+      const $firstTab = this.details.siblings('.vertical-tabs__pane:not(.vertical-tab--hidden)').eq(0);
       if ($firstTab.length) {
         $firstTab.data('verticalTab').focus();
       }
@@ -220,7 +217,7 @@
         this.item.closest('.js-form-type-vertical-tabs').hide();
       }
       return this;
-    }
+    },
   };
 
   /**
@@ -239,14 +236,13 @@
    *   - summary: The jQuery element that contains the tab summary
    */
   Drupal.theme.verticalTab = function (settings) {
-    var tab = {};
+    const tab = {};
     tab.item = $('<li class="vertical-tabs__menu-item" tabindex="-1"></li>')
       .append(tab.link = $('<a href="#"></a>')
         .append(tab.title = $('<strong class="vertical-tabs__menu-item-title"></strong>').text(settings.title))
-        .append(tab.summary = $('<span class="vertical-tabs__menu-item-summary"></span>')
-        )
+        .append(tab.summary = $('<span class="vertical-tabs__menu-item-summary"></span>'),
+        ),
       );
     return tab;
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/big_pipe/js/big_pipe.es6.js b/core/modules/big_pipe/js/big_pipe.es6.js
index cdfd766f13..a05fb0eb68 100644
--- a/core/modules/big_pipe/js/big_pipe.es6.js
+++ b/core/modules/big_pipe/js/big_pipe.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Executes Ajax commands in <script type="application/vnd.drupal-ajax"> tag.
    *
@@ -18,8 +15,8 @@
    *   Script tag created by BigPipe.
    */
   function bigPipeProcessPlaceholderReplacement(index, placeholderReplacement) {
-    var placeholderId = placeholderReplacement.getAttribute('data-big-pipe-replacement-for-placeholder-with-id');
-    var content = this.textContent.trim();
+    const placeholderId = placeholderReplacement.getAttribute('data-big-pipe-replacement-for-placeholder-with-id');
+    const content = this.textContent.trim();
     // Ignore any placeholders that are not in the known placeholder list. Used
     // to avoid someone trying to XSS the site via the placeholdering mechanism.
     if (typeof drupalSettings.bigPipePlaceholderIds[placeholderId] !== 'undefined') {
@@ -32,14 +29,14 @@
         $(this).removeOnce('big-pipe');
       }
       else {
-        var response = JSON.parse(content);
+        const response = JSON.parse(content);
         // Create a Drupal.Ajax object without associating an element, a
         // progress indicator or a URL.
-        var ajaxObject = Drupal.ajax({
+        const ajaxObject = Drupal.ajax({
           url: '',
           base: false,
           element: false,
-          progress: false
+          progress: false,
         });
         // Then, simulate an AJAX response having arrived, and let the Ajax
         // system handle it.
@@ -82,7 +79,7 @@
   }
 
   function bigPipeProcess() {
-    timeoutID = setTimeout(function () {
+    timeoutID = setTimeout(() => {
       if (!bigPipeProcessDocument(document)) {
         bigPipeProcess();
       }
@@ -94,17 +91,16 @@
   // more would cause the user to see content appear noticeably slower.
   var interval = drupalSettings.bigPipeInterval || 50;
   // The internal ID to contain the watcher service.
-  var timeoutID;
+  let timeoutID;
 
   bigPipeProcess();
 
   // If something goes wrong, make sure everything is cleaned up and has had a
   // chance to be processed with everything loaded.
-  $(window).on('load', function () {
+  $(window).on('load', () => {
     if (timeoutID) {
       clearTimeout(timeoutID);
     }
     bigPipeProcessDocument(document);
   });
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/block/js/block.admin.es6.js b/core/modules/block/js/block.admin.es6.js
index 9f99b7faba..1cd13d0cc1 100644
--- a/core/modules/block/js/block.admin.es6.js
+++ b/core/modules/block/js/block.admin.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Filters the block list by a text input search string.
    *
@@ -24,10 +21,10 @@
    *   Attaches the behavior for the block filtering.
    */
   Drupal.behaviors.blockFilterByText = {
-    attach: function (context, settings) {
-      var $input = $('input.block-filter-text').once('block-filter-text');
-      var $table = $($input.attr('data-element'));
-      var $filter_rows;
+    attach(context, settings) {
+      const $input = $('input.block-filter-text').once('block-filter-text');
+      const $table = $($input.attr('data-element'));
+      let $filter_rows;
 
       /**
        * Filters the block list.
@@ -36,7 +33,7 @@
        *   The jQuery event for the keyup event that triggered the filter.
        */
       function filterBlockList(e) {
-        var query = $(e.target).val().toLowerCase();
+        const query = $(e.target).val().toLowerCase();
 
         /**
          * Shows or hides the block entry based on the query.
@@ -47,9 +44,9 @@
          *   The label of the block.
          */
         function toggleBlockEntry(index, label) {
-          var $label = $(label);
-          var $row = $label.parent().parent();
-          var textMatch = $label.text().toLowerCase().indexOf(query) !== -1;
+          const $label = $(label);
+          const $row = $label.parent().parent();
+          const textMatch = $label.text().toLowerCase().indexOf(query) !== -1;
           $row.toggle(textMatch);
         }
 
@@ -68,7 +65,7 @@
         $filter_rows = $table.find('div.block-filter-text-source');
         $input.on('keyup', filterBlockList);
       }
-    }
+    },
   };
 
   /**
@@ -80,18 +77,17 @@
    *   Attaches the behavior for the block placement highlighting.
    */
   Drupal.behaviors.blockHighlightPlacement = {
-    attach: function (context, settings) {
+    attach(context, settings) {
       if (settings.blockPlacement) {
         $(context).find('[data-drupal-selector="edit-blocks"]').once('block-highlight').each(function () {
-          var $container = $(this);
+          const $container = $(this);
           // Just scrolling the document.body will not work in Firefox. The html
           // element is needed as well.
           $('html, body').animate({
-            scrollTop: $('.js-block-placed').offset().top - $container.offset().top + $container.scrollTop()
+            scrollTop: $('.js-block-placed').offset().top - $container.offset().top + $container.scrollTop(),
           }, 500);
         });
       }
-    }
+    },
   };
-
 }(jQuery, Drupal));
diff --git a/core/modules/block/js/block.es6.js b/core/modules/block/js/block.es6.js
index f276527365..3d1802a277 100644
--- a/core/modules/block/js/block.es6.js
+++ b/core/modules/block/js/block.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, window, Drupal) {
-
-  'use strict';
-
   /**
    * Provide the summary information for the block settings vertical tabs.
    *
@@ -16,7 +13,7 @@
    *   Attaches the behavior for the block settings summaries.
    */
   Drupal.behaviors.blockSettingsSummary = {
-    attach: function () {
+    attach() {
       // The drupalSetSummary method required for this behavior is not available
       // on the Blocks administration page, so we need to make sure this
       // behavior is processed only if drupalSetSummary is defined.
@@ -34,10 +31,10 @@
        *   A string with the summary.
        */
       function checkboxesSummary(context) {
-        var vals = [];
-        var $checkboxes = $(context).find('input[type="checkbox"]:checked + label');
-        var il = $checkboxes.length;
-        for (var i = 0; i < il; i++) {
+        const vals = [];
+        const $checkboxes = $(context).find('input[type="checkbox"]:checked + label');
+        const il = $checkboxes.length;
+        for (let i = 0; i < il; i++) {
           vals.push($($checkboxes[i]).html());
         }
         if (!vals.length) {
@@ -48,16 +45,15 @@
 
       $('[data-drupal-selector="edit-visibility-node-type"], [data-drupal-selector="edit-visibility-language"], [data-drupal-selector="edit-visibility-user-role"]').drupalSetSummary(checkboxesSummary);
 
-      $('[data-drupal-selector="edit-visibility-request-path"]').drupalSetSummary(function (context) {
-        var $pages = $(context).find('textarea[name="visibility[request_path][pages]"]');
+      $('[data-drupal-selector="edit-visibility-request-path"]').drupalSetSummary((context) => {
+        const $pages = $(context).find('textarea[name="visibility[request_path][pages]"]');
         if (!$pages.val()) {
           return Drupal.t('Not restricted');
         }
-        else {
-          return Drupal.t('Restricted to certain pages');
-        }
+
+        return Drupal.t('Restricted to certain pages');
       });
-    }
+    },
   };
 
   /**
@@ -72,7 +68,7 @@
    *   Attaches the tableDrag behaviour for blocks in block administration.
    */
   Drupal.behaviors.blockDrag = {
-    attach: function (context, settings) {
+    attach(context, settings) {
       // tableDrag is required and we should be on the blocks admin page.
       if (typeof Drupal.tableDrag === 'undefined' || typeof Drupal.tableDrag.blocks === 'undefined') {
         return;
@@ -88,7 +84,7 @@
        */
       function checkEmptyRegions(table, rowObject) {
         table.find('tr.region-message').each(function () {
-          var $this = $(this);
+          const $this = $(this);
           // If the dragged row is in this region, but above the message row,
           // swap it down one space.
           if ($this.prev('tr').get(0) === rowObject.element) {
@@ -121,7 +117,7 @@
         // Remove the color-success class from new block if applicable.
         table.find('.color-success').removeClass('color-success');
 
-        var $rowObject = $(rowObject);
+        const $rowObject = $(rowObject);
         if (!$rowObject.is('.drag-previous')) {
           table.find('.drag-previous').removeClass('drag-previous');
           $rowObject.addClass('drag-previous');
@@ -138,21 +134,20 @@
        */
       function updateBlockWeights(table, region) {
         // Calculate minimum weight.
-        var weight = -Math.round(table.find('.draggable').length / 2);
+        let weight = -Math.round(table.find('.draggable').length / 2);
         // Update the block weights.
-        table.find('.region-' + region + '-message').nextUntil('.region-title')
-          .find('select.block-weight').val(function () {
+        table.find(`.region-${region}-message`).nextUntil('.region-title')
+          .find('select.block-weight').val(() =>
             // Increment the weight before assigning it to prevent using the
             // absolute minimum available weight. This way we always have an
             // unused upper and lower bound, which makes manually setting the
             // weights easier for users who prefer to do it that way.
-            return ++weight;
-          });
+             ++weight);
       }
 
-      var table = $('#blocks');
+      const table = $('#blocks');
       // Get the blocks tableDrag object.
-      var tableDrag = Drupal.tableDrag.blocks;
+      const tableDrag = Drupal.tableDrag.blocks;
       // Add a handler for when a row is swapped, update empty regions.
       tableDrag.row.prototype.onSwap = function (swappedRow) {
         checkEmptyRegions(table, this);
@@ -162,15 +157,15 @@
       // Add a handler so when a row is dropped, update fields dropped into
       // new regions.
       tableDrag.onDrop = function () {
-        var dragObject = this;
-        var $rowElement = $(dragObject.rowObject.element);
+        const dragObject = this;
+        const $rowElement = $(dragObject.rowObject.element);
         // Use "region-message" row instead of "region" row because
         // "region-{region_name}-message" is less prone to regexp match errors.
-        var regionRow = $rowElement.prevAll('tr.region-message').get(0);
-        var regionName = regionRow.className.replace(/([^ ]+[ ]+)*region-([^ ]+)-message([ ]+[^ ]+)*/, '$2');
-        var regionField = $rowElement.find('select.block-region-select');
+        const regionRow = $rowElement.prevAll('tr.region-message').get(0);
+        const regionName = regionRow.className.replace(/([^ ]+[ ]+)*region-([^ ]+)-message([ ]+[^ ]+)*/, '$2');
+        const regionField = $rowElement.find('select.block-region-select');
         // Check whether the newly picked region is available for this block.
-        if (regionField.find('option[value=' + regionName + ']').length === 0) {
+        if (regionField.find(`option[value=${regionName}]`).length === 0) {
           // If not, alert the user and keep the block in its old region
           // setting.
           window.alert(Drupal.t('The block cannot be placed in this region.'));
@@ -180,11 +175,11 @@
         }
 
         // Update region and weight fields if the region has been changed.
-        if (!regionField.is('.block-region-' + regionName)) {
-          var weightField = $rowElement.find('select.block-weight');
-          var oldRegionName = weightField[0].className.replace(/([^ ]+[ ]+)*block-weight-([^ ]+)([ ]+[^ ]+)*/, '$2');
-          regionField.removeClass('block-region-' + oldRegionName).addClass('block-region-' + regionName);
-          weightField.removeClass('block-weight-' + oldRegionName).addClass('block-weight-' + regionName);
+        if (!regionField.is(`.block-region-${regionName}`)) {
+          const weightField = $rowElement.find('select.block-weight');
+          const oldRegionName = weightField[0].className.replace(/([^ ]+[ ]+)*block-weight-([^ ]+)([ ]+[^ ]+)*/, '$2');
+          regionField.removeClass(`block-region-${oldRegionName}`).addClass(`block-region-${regionName}`);
+          weightField.removeClass(`block-weight-${oldRegionName}`).addClass(`block-weight-${regionName}`);
           regionField.val(regionName);
         }
 
@@ -195,13 +190,13 @@
       $(context).find('select.block-region-select').once('block-region-select')
         .on('change', function (event) {
           // Make our new row and select field.
-          var row = $(this).closest('tr');
-          var select = $(this);
+          const row = $(this).closest('tr');
+          const select = $(this);
           // Find the correct region and insert the row as the last in the
           // region.
           tableDrag.rowObject = new tableDrag.row(row[0]);
-          var region_message = table.find('.region-' + select[0].value + '-message');
-          var region_items = region_message.nextUntil('.region-message, .region-title');
+          const region_message = table.find(`.region-${select[0].value}-message`);
+          const region_items = region_message.nextUntil('.region-message, .region-title');
           if (region_items.length) {
             region_items.last().after(row);
           }
@@ -222,7 +217,6 @@
           // Remove focus from selectbox.
           select.trigger('blur');
         });
-    }
+    },
   };
-
-})(jQuery, window, Drupal);
+}(jQuery, window, Drupal));
diff --git a/core/modules/book/book.es6.js b/core/modules/book/book.es6.js
index 2cc7881264..c04929bf20 100644
--- a/core/modules/book/book.es6.js
+++ b/core/modules/book/book.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Adds summaries to the book outline form.
    *
@@ -16,10 +13,10 @@
    *   Attaches summary behavior to book outline forms.
    */
   Drupal.behaviors.bookDetailsSummaries = {
-    attach: function (context) {
-      $(context).find('.book-outline-form').drupalSetSummary(function (context) {
-        var $select = $(context).find('.book-title-select');
-        var val = $select.val();
+    attach(context) {
+      $(context).find('.book-outline-form').drupalSetSummary((context) => {
+        const $select = $(context).find('.book-title-select');
+        const val = $select.val();
 
         if (val === '0') {
           return Drupal.t('Not in book');
@@ -27,11 +24,9 @@
         else if (val === 'new') {
           return Drupal.t('New book');
         }
-        else {
-          return Drupal.checkPlain($select.find(':selected').text());
-        }
+
+        return Drupal.checkPlain($select.find(':selected').text());
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/ckeditor/js/ckeditor.admin.es6.js b/core/modules/ckeditor/js/ckeditor.admin.es6.js
index 11fd369586..92e225caec 100644
--- a/core/modules/ckeditor/js/ckeditor.admin.es6.js
+++ b/core/modules/ckeditor/js/ckeditor.admin.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings, _) {
-
-  'use strict';
-
   Drupal.ckeditor = Drupal.ckeditor || {};
 
   /**
@@ -20,11 +17,11 @@
    *   Detaches admin behaviour from the CKEditor buttons on 'unload'.
    */
   Drupal.behaviors.ckeditorAdmin = {
-    attach: function (context) {
+    attach(context) {
       // Process the CKEditor configuration fragment once.
-      var $configurationForm = $(context).find('.ckeditor-toolbar-configuration').once('ckeditor-configuration');
+      const $configurationForm = $(context).find('.ckeditor-toolbar-configuration').once('ckeditor-configuration');
       if ($configurationForm.length) {
-        var $textarea = $configurationForm
+        const $textarea = $configurationForm
           // Hide the textarea that contains the serialized representation of the
           // CKEditor configuration.
           .find('.js-form-item-editor-settings-toolbar-button-groups')
@@ -37,26 +34,26 @@
         $configurationForm.append(drupalSettings.ckeditor.toolbarAdmin);
 
         // Create a configuration model.
-        var model = Drupal.ckeditor.models.Model = new Drupal.ckeditor.Model({
-          $textarea: $textarea,
+        const model = Drupal.ckeditor.models.Model = new Drupal.ckeditor.Model({
+          $textarea,
           activeEditorConfig: JSON.parse($textarea.val()),
-          hiddenEditorConfig: drupalSettings.ckeditor.hiddenCKEditorConfig
+          hiddenEditorConfig: drupalSettings.ckeditor.hiddenCKEditorConfig,
         });
 
         // Create the configuration Views.
-        var viewDefaults = {
-          model: model,
-          el: $('.ckeditor-toolbar-configuration')
+        const viewDefaults = {
+          model,
+          el: $('.ckeditor-toolbar-configuration'),
         };
         Drupal.ckeditor.views = {
           controller: new Drupal.ckeditor.ControllerView(viewDefaults),
           visualView: new Drupal.ckeditor.VisualView(viewDefaults),
           keyboardView: new Drupal.ckeditor.KeyboardView(viewDefaults),
-          auralView: new Drupal.ckeditor.AuralView(viewDefaults)
+          auralView: new Drupal.ckeditor.AuralView(viewDefaults),
         };
       }
     },
-    detach: function (context, settings, trigger) {
+    detach(context, settings, trigger) {
       // Early-return if the trigger for detachment is something else than
       // unload.
       if (trigger !== 'unload') {
@@ -67,16 +64,16 @@
       // really means that all CKEditor toolbar buttons have been removed.
       // Hence,all editor features will be removed, so any reactions from
       // filters will be undone.
-      var $configurationForm = $(context).find('.ckeditor-toolbar-configuration').findOnce('ckeditor-configuration');
+      const $configurationForm = $(context).find('.ckeditor-toolbar-configuration').findOnce('ckeditor-configuration');
       if ($configurationForm.length && Drupal.ckeditor.models && Drupal.ckeditor.models.Model) {
-        var config = Drupal.ckeditor.models.Model.toJSON().activeEditorConfig;
-        var buttons = Drupal.ckeditor.views.controller.getButtonList(config);
-        var $activeToolbar = $('.ckeditor-toolbar-configuration').find('.ckeditor-toolbar-active');
-        for (var i = 0; i < buttons.length; i++) {
+        const config = Drupal.ckeditor.models.Model.toJSON().activeEditorConfig;
+        const buttons = Drupal.ckeditor.views.controller.getButtonList(config);
+        const $activeToolbar = $('.ckeditor-toolbar-configuration').find('.ckeditor-toolbar-active');
+        for (let i = 0; i < buttons.length; i++) {
           $activeToolbar.trigger('CKEditorToolbarChanged', ['removed', buttons[i]]);
         }
       }
-    }
+    },
   };
 
   /**
@@ -117,8 +114,8 @@
      *   been closed.
      *
      */
-    registerButtonMove: function (view, $button, callback) {
-      var $group = $button.closest('.ckeditor-toolbar-group');
+    registerButtonMove(view, $button, callback) {
+      const $group = $button.closest('.ckeditor-toolbar-group');
 
       // If dropped in a placeholder button group, the user must name it.
       if ($group.hasClass('placeholder')) {
@@ -147,9 +144,9 @@
      * @param {jQuery} $group
      *   A jQuery set that contains an li element that wraps a group of buttons.
      */
-    registerGroupMove: function (view, $group) {
+    registerGroupMove(view, $group) {
       // Remove placeholder classes if necessary.
-      var $row = $group.closest('.ckeditor-row');
+      let $row = $group.closest('.ckeditor-row');
       if ($row.hasClass('placeholder')) {
         $row.removeClass('placeholder');
       }
@@ -175,7 +172,7 @@
      *   A callback to invoke after the button group naming modal dialog has
      *   been closed.
      */
-    openGroupNameDialog: function (view, $group, callback) {
+    openGroupNameDialog(view, $group, callback) {
       callback = callback || function () {};
 
       /**
@@ -190,14 +187,14 @@
        */
       function validateForm(form) {
         if (form.elements[0].value.length === 0) {
-          var $form = $(form);
+          const $form = $(form);
           if (!$form.hasClass('errors')) {
             $form
               .addClass('errors')
               .find('input')
               .addClass('error')
               .attr('aria-invalid', 'true');
-            $('<div class=\"description\" >' + Drupal.t('Please provide a name for the button group.') + '</div>').insertAfter(form.elements[0]);
+            $(`<div class=\"description\" >${Drupal.t('Please provide a name for the button group.')}</div>`).insertAfter(form.elements[0]);
           }
           return true;
         }
@@ -214,7 +211,6 @@
        *   group title string.
        */
       function closeDialog(action, form) {
-
         /**
          * Closes the dialog when the user cancels or supplies valid data.
          */
@@ -242,7 +238,7 @@
             // Remove all whitespace from the name, lowercase it and ensure
             // HTML-safe encoding, then use this as the group ID for CKEditor
             // configuration UI accessibility purposes only.
-            var groupID = 'ckeditor-toolbar-group-aria-label-for-' + Drupal.checkPlain(name.toLowerCase().replace(/\s/g, '-'));
+            const groupID = `ckeditor-toolbar-group-aria-label-for-${Drupal.checkPlain(name.toLowerCase().replace(/\s/g, '-'))}`;
             $group
               // Update the group container.
               .removeAttr('aria-label')
@@ -293,7 +289,7 @@
       }
 
       // Create a Drupal dialog that will get a button group name from the user.
-      var $ckeditorButtonGroupNameForm = $(Drupal.theme('ckeditorButtonGroupNameForm'));
+      const $ckeditorButtonGroupNameForm = $(Drupal.theme('ckeditorButtonGroupNameForm'));
       var dialog = Drupal.dialog($ckeditorButtonGroupNameForm.get(0), {
         title: Drupal.t('Button group name'),
         dialogClass: 'ckeditor-name-toolbar-group',
@@ -301,30 +297,30 @@
         buttons: [
           {
             text: Drupal.t('Apply'),
-            click: function () {
+            click() {
               closeDialog('apply', this);
             },
-            primary: true
+            primary: true,
           },
           {
             text: Drupal.t('Cancel'),
-            click: function () {
+            click() {
               closeDialog('cancel');
-            }
-          }
+            },
+          },
         ],
-        open: function () {
-          var form = this;
-          var $form = $(this);
-          var $widget = $form.parent();
+        open() {
+          const form = this;
+          const $form = $(this);
+          const $widget = $form.parent();
           $widget.find('.ui-dialog-titlebar-close').remove();
           // Set a click handler on the input and button in the form.
-          $widget.on('keypress.ckeditor', 'input, button', function (event) {
+          $widget.on('keypress.ckeditor', 'input, button', (event) => {
             // React to enter key press.
             if (event.keyCode === 13) {
-              var $target = $(event.currentTarget);
-              var data = $target.data('ui-button');
-              var action = 'apply';
+              const $target = $(event.currentTarget);
+              const data = $target.data('ui-button');
+              let action = 'apply';
               // Assume 'apply', but take into account that the user might have
               // pressed the enter key on the dialog buttons.
               if (data && data.options && data.options.label) {
@@ -337,18 +333,18 @@
             }
           });
           // Announce to the user that a modal dialog is open.
-          var text = Drupal.t('Editing the name of the new button group in a dialog.');
+          let text = Drupal.t('Editing the name of the new button group in a dialog.');
           if (typeof $group.attr('data-drupal-ckeditor-toolbar-group-name') !== 'undefined') {
             text = Drupal.t('Editing the name of the "@groupName" button group in a dialog.', {
-              '@groupName': $group.attr('data-drupal-ckeditor-toolbar-group-name')
+              '@groupName': $group.attr('data-drupal-ckeditor-toolbar-group-name'),
             });
           }
           Drupal.announce(text);
         },
-        close: function (event) {
+        close(event) {
           // Automatically destroy the DOM element that was used for the dialog.
           $(event.target).remove();
-        }
+        },
       });
       // A modal dialog is used because the user must provide a button group
       // name or cancel the button placement before taking any other action.
@@ -360,7 +356,7 @@
         .attr('value', $group.attr('data-drupal-ckeditor-toolbar-group-name'))
         // Focus on the "group name" input in the form.
         .trigger('focus');
-    }
+    },
 
   };
 
@@ -373,13 +369,13 @@
    *   Attaches show/hide behaviour to Plugin Settings buttons.
    */
   Drupal.behaviors.ckeditorAdminButtonPluginSettings = {
-    attach: function (context) {
-      var $context = $(context);
-      var $ckeditorPluginSettings = $context.find('#ckeditor-plugin-settings').once('ckeditor-plugin-settings');
+    attach(context) {
+      const $context = $(context);
+      const $ckeditorPluginSettings = $context.find('#ckeditor-plugin-settings').once('ckeditor-plugin-settings');
       if ($ckeditorPluginSettings.length) {
         // Hide all button-dependent plugin settings initially.
         $ckeditorPluginSettings.find('[data-ckeditor-buttons]').each(function () {
-          var $this = $(this);
+          const $this = $(this);
           if ($this.data('verticalTab')) {
             $this.data('verticalTab').tabHide();
           }
@@ -398,17 +394,17 @@
         $context
           .find('.ckeditor-toolbar-active')
           .off('CKEditorToolbarChanged.ckeditorAdminPluginSettings')
-          .on('CKEditorToolbarChanged.ckeditorAdminPluginSettings', function (event, action, button) {
-            var $pluginSettings = $ckeditorPluginSettings
-              .find('[data-ckeditor-buttons~=' + button + ']');
+          .on('CKEditorToolbarChanged.ckeditorAdminPluginSettings', (event, action, button) => {
+            const $pluginSettings = $ckeditorPluginSettings
+              .find(`[data-ckeditor-buttons~=${button}]`);
 
             // No settings for this button.
             if ($pluginSettings.length === 0) {
               return;
             }
 
-            var verticalTab = $pluginSettings.data('verticalTab');
-            var activeButtons = $pluginSettings.data('ckeditorButtonPluginSettingsActiveButtons');
+            const verticalTab = $pluginSettings.data('verticalTab');
+            const activeButtons = $pluginSettings.data('ckeditorButtonPluginSettingsActiveButtons');
             if (action === 'added') {
               activeButtons.push(button);
               // Show this plugin's settings if >=1 of its buttons are active.
@@ -419,7 +415,6 @@
                 // On very narrow viewports, Vertical Tabs remain fieldsets.
                 $pluginSettings.show();
               }
-
             }
             else {
               // Remove this button from the list of active buttons.
@@ -438,7 +433,7 @@
             $pluginSettings.data('ckeditorButtonPluginSettingsActiveButtons', activeButtons);
           });
       }
-    }
+    },
   };
 
   /**
@@ -458,9 +453,9 @@
    *   A HTML string for a CKEditor button group.
    */
   Drupal.theme.ckeditorToolbarGroup = function () {
-    var group = '';
-    group += '<li class="ckeditor-toolbar-group placeholder" role="presentation" aria-label="' + Drupal.t('Place a button to create a new button group.') + '">';
-    group += '<h3 class="ckeditor-toolbar-group-name">' + Drupal.t('New group') + '</h3>';
+    let group = '';
+    group += `<li class="ckeditor-toolbar-group placeholder" role="presentation" aria-label="${Drupal.t('Place a button to create a new button group.')}">`;
+    group += `<h3 class="ckeditor-toolbar-group-name">${Drupal.t('New group')}</h3>`;
     group += '<ul class="ckeditor-buttons ckeditor-toolbar-group-buttons" role="toolbar" data-drupal-ckeditor-button-sorting="target"></ul>';
     group += '</li>';
     return group;
@@ -493,7 +488,6 @@
    *   A HTML string for the button to create a name for a new button group.
    */
   Drupal.theme.ckeditorNewButtonGroup = function () {
-    return '<li class="ckeditor-add-new-group"><button aria-label="' + Drupal.t('Add a CKEditor button group to the end of this row.') + '">' + Drupal.t('Add group') + '</button></li>';
+    return `<li class="ckeditor-add-new-group"><button aria-label="${Drupal.t('Add a CKEditor button group to the end of this row.')}">${Drupal.t('Add group')}</button></li>`;
   };
-
-})(jQuery, Drupal, drupalSettings, _);
+}(jQuery, Drupal, drupalSettings, _));
diff --git a/core/modules/ckeditor/js/ckeditor.drupalimage.admin.es6.js b/core/modules/ckeditor/js/ckeditor.drupalimage.admin.es6.js
index 256bb41c02..89ab29feda 100644
--- a/core/modules/ckeditor/js/ckeditor.drupalimage.admin.es6.js
+++ b/core/modules/ckeditor/js/ckeditor.drupalimage.admin.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Provides the summary for the "drupalimage" plugin settings vertical tab.
    *
@@ -16,30 +13,29 @@
    *   Attaches summary behaviour to the "drupalimage" settings vertical tab.
    */
   Drupal.behaviors.ckeditorDrupalImageSettingsSummary = {
-    attach: function () {
-      $('[data-ckeditor-plugin-id="drupalimage"]').drupalSetSummary(function (context) {
-        var root = 'input[name="editor[settings][plugins][drupalimage][image_upload]';
-        var $status = $(root + '[status]"]');
-        var $maxFileSize = $(root + '[max_size]"]');
-        var $maxWidth = $(root + '[max_dimensions][width]"]');
-        var $maxHeight = $(root + '[max_dimensions][height]"]');
-        var $scheme = $(root + '[scheme]"]:checked');
+    attach() {
+      $('[data-ckeditor-plugin-id="drupalimage"]').drupalSetSummary((context) => {
+        const root = 'input[name="editor[settings][plugins][drupalimage][image_upload]';
+        const $status = $(`${root}[status]"]`);
+        const $maxFileSize = $(`${root}[max_size]"]`);
+        const $maxWidth = $(`${root}[max_dimensions][width]"]`);
+        const $maxHeight = $(`${root}[max_dimensions][height]"]`);
+        const $scheme = $(`${root}[scheme]"]:checked`);
 
-        var maxFileSize = $maxFileSize.val() ? $maxFileSize.val() : $maxFileSize.attr('placeholder');
-        var maxDimensions = ($maxWidth.val() && $maxHeight.val()) ? '(' + $maxWidth.val() + 'x' + $maxHeight.val() + ')' : '';
+        const maxFileSize = $maxFileSize.val() ? $maxFileSize.val() : $maxFileSize.attr('placeholder');
+        const maxDimensions = ($maxWidth.val() && $maxHeight.val()) ? `(${$maxWidth.val()}x${$maxHeight.val()})` : '';
 
         if (!$status.is(':checked')) {
           return Drupal.t('Uploads disabled');
         }
 
-        var output = '';
-        output += Drupal.t('Uploads enabled, max size: @size @dimensions', {'@size': maxFileSize, '@dimensions': maxDimensions});
+        let output = '';
+        output += Drupal.t('Uploads enabled, max size: @size @dimensions', { '@size': maxFileSize, '@dimensions': maxDimensions });
         if ($scheme.length) {
-          output += '<br />' + $scheme.attr('data-label');
+          output += `<br />${$scheme.attr('data-label')}`;
         }
         return output;
       });
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/ckeditor/js/ckeditor.es6.js b/core/modules/ckeditor/js/ckeditor.es6.js
index 2b469c8037..21f6e4bb45 100644
--- a/core/modules/ckeditor/js/ckeditor.es6.js
+++ b/core/modules/ckeditor/js/ckeditor.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, debounce, CKEDITOR, $, displace, AjaxCommands) {
-
-  'use strict';
-
   /**
    * @namespace
    */
@@ -23,18 +20,18 @@
      * @return {bool}
      *   Whether the call to `CKEDITOR.replace()` created an editor or not.
      */
-    attach: function (element, format) {
+    attach(element, format) {
       this._loadExternalPlugins(format);
       // Also pass settings that are Drupal-specific.
       format.editorSettings.drupal = {
-        format: format.format
+        format: format.format,
       };
 
       // Set a title on the CKEditor instance that includes the text field's
       // label so that screen readers say something that is understandable
       // for end users.
-      var label = $('label[for=' + element.getAttribute('id') + ']').html();
-      format.editorSettings.title = Drupal.t('Rich Text Editor, !label field', {'!label': label});
+      const label = $(`label[for=${element.getAttribute('id')}]`).html();
+      format.editorSettings.title = Drupal.t('Rich Text Editor, !label field', { '!label': label });
 
       return !!CKEDITOR.replace(element, format.editorSettings);
     },
@@ -53,8 +50,8 @@
      *   Whether the call to `CKEDITOR.dom.element.get(element).getEditor()`
      *   found an editor or not.
      */
-    detach: function (element, format, trigger) {
-      var editor = CKEDITOR.dom.element.get(element).getEditor();
+    detach(element, format, trigger) {
+      const editor = CKEDITOR.dom.element.get(element).getEditor();
       if (editor) {
         if (trigger === 'serialize') {
           editor.updateElement();
@@ -79,22 +76,22 @@
      *   Whether the call to `CKEDITOR.dom.element.get(element).getEditor()`
      *   found an editor or not.
      */
-    onChange: function (element, callback) {
-      var editor = CKEDITOR.dom.element.get(element).getEditor();
+    onChange(element, callback) {
+      const editor = CKEDITOR.dom.element.get(element).getEditor();
       if (editor) {
-        editor.on('change', debounce(function () {
+        editor.on('change', debounce(() => {
           callback(editor.getData());
         }, 400));
 
         // A temporary workaround to control scrollbar appearance when using
         // autoGrow event to control editor's height.
         // @todo Remove when http://dev.ckeditor.com/ticket/12120 is fixed.
-        editor.on('mode', function () {
-          var editable = editor.editable();
+        editor.on('mode', () => {
+          const editable = editor.editable();
           if (!editable.isInline()) {
-            editor.on('autoGrow', function (evt) {
-              var doc = evt.editor.document;
-              var scrollable = CKEDITOR.env.quirks ? doc.getBody() : doc.getDocumentElement();
+            editor.on('autoGrow', (evt) => {
+              const doc = evt.editor.document;
+              const scrollable = CKEDITOR.env.quirks ? doc.getBody() : doc.getDocumentElement();
 
               if (scrollable.$.scrollHeight < scrollable.$.clientHeight) {
                 scrollable.setStyle('overflow-y', 'hidden');
@@ -124,34 +121,34 @@
      * @return {bool}
      *   Whether the call to `CKEDITOR.replace()` created an editor or not.
      */
-    attachInlineEditor: function (element, format, mainToolbarId, floatedToolbarId) {
+    attachInlineEditor(element, format, mainToolbarId, floatedToolbarId) {
       this._loadExternalPlugins(format);
       // Also pass settings that are Drupal-specific.
       format.editorSettings.drupal = {
-        format: format.format
+        format: format.format,
       };
 
-      var settings = $.extend(true, {}, format.editorSettings);
+      const settings = $.extend(true, {}, format.editorSettings);
 
       // If a toolbar is already provided for "true WYSIWYG" (in-place editing),
       // then use that toolbar instead: override the default settings to render
       // CKEditor UI's top toolbar into mainToolbar, and don't render the bottom
       // toolbar at all. (CKEditor doesn't need a floated toolbar.)
       if (mainToolbarId) {
-        var settingsOverride = {
+        const settingsOverride = {
           extraPlugins: 'sharedspace',
           removePlugins: 'floatingspace,elementspath',
           sharedSpaces: {
-            top: mainToolbarId
-          }
+            top: mainToolbarId,
+          },
         };
 
         // Find the "Source" button, if any, and replace it with "Sourcedialog".
         // (The 'sourcearea' plugin only works in CKEditor's iframe mode.)
-        var sourceButtonFound = false;
-        for (var i = 0; !sourceButtonFound && i < settings.toolbar.length; i++) {
+        let sourceButtonFound = false;
+        for (let i = 0; !sourceButtonFound && i < settings.toolbar.length; i++) {
           if (settings.toolbar[i] !== '/') {
-            for (var j = 0; !sourceButtonFound && j < settings.toolbar[i].items.length; j++) {
+            for (let j = 0; !sourceButtonFound && j < settings.toolbar[i].items.length; j++) {
               if (settings.toolbar[i].items[j] === 'Source') {
                 sourceButtonFound = true;
                 // Swap sourcearea's "Source" button for sourcedialog's.
@@ -163,8 +160,8 @@
           }
         }
 
-        settings.extraPlugins += ',' + settingsOverride.extraPlugins;
-        settings.removePlugins += ',' + settingsOverride.removePlugins;
+        settings.extraPlugins += `,${settingsOverride.extraPlugins}`;
+        settings.removePlugins += `,${settingsOverride.removePlugins}`;
         settings.sharedSpaces = settingsOverride.sharedSpaces;
       }
 
@@ -181,18 +178,18 @@
      * @param {object} format
      *   The text format used in the editor.
      */
-    _loadExternalPlugins: function (format) {
-      var externalPlugins = format.editorSettings.drupalExternalPlugins;
+    _loadExternalPlugins(format) {
+      const externalPlugins = format.editorSettings.drupalExternalPlugins;
       // Register and load additional CKEditor plugins as necessary.
       if (externalPlugins) {
-        for (var pluginName in externalPlugins) {
+        for (const pluginName in externalPlugins) {
           if (externalPlugins.hasOwnProperty(pluginName)) {
             CKEDITOR.plugins.addExternal(pluginName, externalPlugins[pluginName], '');
           }
         }
         delete format.editorSettings.drupalExternalPlugins;
       }
-    }
+    },
 
   };
 
@@ -223,9 +220,9 @@
      * @param {object} dialogSettings
      *   An object containing settings to be passed to the jQuery UI.
      */
-    openDialog: function (editor, url, existingValues, saveCallback, dialogSettings) {
+    openDialog(editor, url, existingValues, saveCallback, dialogSettings) {
       // Locate a suitable place to display our loading indicator.
-      var $target = $(editor.container.$);
+      let $target = $(editor.container.$);
       if (editor.elementMode === CKEDITOR.ELEMENT_MODE_REPLACE) {
         $target = $target.find('.cke_contents');
       }
@@ -234,7 +231,7 @@
       $target.css('position', 'relative').find('.ckeditor-dialog-loading').remove();
 
       // Add a consistent dialog class.
-      var classes = dialogSettings.dialogClass ? dialogSettings.dialogClass.split(' ') : [];
+      const classes = dialogSettings.dialogClass ? dialogSettings.dialogClass.split(' ') : [];
       classes.push('ui-dialog--narrow');
       dialogSettings.dialogClass = classes.join(' ');
       dialogSettings.autoResize = window.matchMedia('(min-width: 600px)').matches;
@@ -242,71 +239,71 @@
 
       // Add a "Loading…" message, hide it underneath the CKEditor toolbar,
       // create a Drupal.Ajax instance to load the dialog and trigger it.
-      var $content = $('<div class="ckeditor-dialog-loading"><span style="top: -40px;" class="ckeditor-dialog-loading-link">' + Drupal.t('Loading...') + '</span></div>');
+      const $content = $(`<div class="ckeditor-dialog-loading"><span style="top: -40px;" class="ckeditor-dialog-loading-link">${Drupal.t('Loading...')}</span></div>`);
       $content.appendTo($target);
 
-      var ckeditorAjaxDialog = Drupal.ajax({
+      const ckeditorAjaxDialog = Drupal.ajax({
         dialog: dialogSettings,
         dialogType: 'modal',
         selector: '.ckeditor-dialog-loading-link',
-        url: url,
-        progress: {type: 'throbber'},
+        url,
+        progress: { type: 'throbber' },
         submit: {
-          editor_object: existingValues
-        }
+          editor_object: existingValues,
+        },
       });
       ckeditorAjaxDialog.execute();
 
       // After a short delay, show "Loading…" message.
-      window.setTimeout(function () {
-        $content.find('span').animate({top: '0px'});
+      window.setTimeout(() => {
+        $content.find('span').animate({ top: '0px' });
       }, 1000);
 
       // Store the save callback to be executed when this dialog is closed.
       Drupal.ckeditor.saveCallback = saveCallback;
-    }
+    },
   };
 
   // Moves the dialog to the top of the CKEDITOR stack.
-  $(window).on('dialogcreate', function (e, dialog, $element, settings) {
+  $(window).on('dialogcreate', (e, dialog, $element, settings) => {
     $('.ui-dialog--narrow').css('zIndex', CKEDITOR.config.baseFloatZIndex + 1);
   });
 
   // Respond to new dialogs that are opened by CKEditor, closing the AJAX loader.
-  $(window).on('dialog:beforecreate', function (e, dialog, $element, settings) {
-    $('.ckeditor-dialog-loading').animate({top: '-40px'}, function () {
+  $(window).on('dialog:beforecreate', (e, dialog, $element, settings) => {
+    $('.ckeditor-dialog-loading').animate({ top: '-40px' }, function () {
       $(this).remove();
     });
   });
 
   // Respond to dialogs that are saved, sending data back to CKEditor.
-  $(window).on('editor:dialogsave', function (e, values) {
+  $(window).on('editor:dialogsave', (e, values) => {
     if (Drupal.ckeditor.saveCallback) {
       Drupal.ckeditor.saveCallback(values);
     }
   });
 
   // Respond to dialogs that are closed, removing the current save handler.
-  $(window).on('dialog:afterclose', function (e, dialog, $element) {
+  $(window).on('dialog:afterclose', (e, dialog, $element) => {
     if (Drupal.ckeditor.saveCallback) {
       Drupal.ckeditor.saveCallback = null;
     }
   });
 
   // Formulate a default formula for the maximum autoGrow height.
-  $(document).on('drupalViewportOffsetChange', function () {
+  $(document).on('drupalViewportOffsetChange', () => {
     CKEDITOR.config.autoGrow_maxHeight = 0.7 * (window.innerHeight - displace.offsets.top - displace.offsets.bottom);
   });
 
   // Redirect on hash change when the original hash has an associated CKEditor.
   function redirectTextareaFragmentToCKEditorInstance() {
-    var hash = location.hash.substr(1);
-    var element = document.getElementById(hash);
+    const hash = location.hash.substr(1);
+    const element = document.getElementById(hash);
     if (element) {
-      var editor = CKEDITOR.dom.element.get(element).getEditor();
+      const editor = CKEDITOR.dom.element.get(element).getEditor();
       if (editor) {
-        var id = editor.container.getAttribute('id');
-        location.replace('#' + id);
+        const id = editor.container.getAttribute('id');
+        location.replace(`#${id}`);
       }
     }
   }
@@ -319,7 +316,6 @@
   CKEDITOR.timestamp = drupalSettings.ckeditor.timestamp;
 
   if (AjaxCommands) {
-
     /**
      * Command to add style sheets to a CKEditor instance.
      *
@@ -337,14 +333,13 @@
      * @see http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document
      */
     AjaxCommands.prototype.ckeditor_add_stylesheet = function (ajax, response, status) {
-      var editor = CKEDITOR.instances[response.editor_id];
+      const editor = CKEDITOR.instances[response.editor_id];
 
       if (editor) {
-        response.stylesheets.forEach(function (url) {
+        response.stylesheets.forEach((url) => {
           editor.document.appendStyleSheet(url);
         });
       }
     };
   }
-
-})(Drupal, Drupal.debounce, CKEDITOR, jQuery, Drupal.displace, Drupal.AjaxCommands);
+}(Drupal, Drupal.debounce, CKEDITOR, jQuery, Drupal.displace, Drupal.AjaxCommands));
diff --git a/core/modules/ckeditor/js/ckeditor.language.admin.es6.js b/core/modules/ckeditor/js/ckeditor.language.admin.es6.js
index 1b9b5a66f0..f68dbd6c79 100644
--- a/core/modules/ckeditor/js/ckeditor.language.admin.es6.js
+++ b/core/modules/ckeditor/js/ckeditor.language.admin.es6.js
@@ -1,16 +1,10 @@
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Provides the summary for the "language" plugin settings vertical tab.
    */
   Drupal.behaviors.ckeditorLanguageSettingsSummary = {
-    attach: function () {
-      $('#edit-editor-settings-plugins-language').drupalSetSummary(function (context) {
-        return $('#edit-editor-settings-plugins-language-language-list-type option:selected').text();
-      });
-    }
+    attach() {
+      $('#edit-editor-settings-plugins-language').drupalSetSummary(context => $('#edit-editor-settings-plugins-language-language-list-type option:selected').text());
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/ckeditor/js/ckeditor.stylescombo.admin.es6.js b/core/modules/ckeditor/js/ckeditor.stylescombo.admin.es6.js
index c425dbb300..9fd145e711 100644
--- a/core/modules/ckeditor/js/ckeditor.stylescombo.admin.es6.js
+++ b/core/modules/ckeditor/js/ckeditor.stylescombo.admin.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings, _) {
-
-  'use strict';
-
   /**
    * Ensures that the "stylescombo" button's metadata remains up-to-date.
    *
@@ -21,8 +18,8 @@
    *   Attaches admin behaviour to the "stylescombo" button.
    */
   Drupal.behaviors.ckeditorStylesComboSettings = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
 
       // React to changes in the list of user-defined styles: calculate the new
       // stylesSet setting up to 2 times per second, and if it is different,
@@ -30,19 +27,19 @@
       // the CKEditor configuration. (This will, in turn, cause the hidden
       // CKEditor instance to be updated and a drupalEditorFeatureModified event
       // to fire.)
-      var $ckeditorActiveToolbar = $context
+      const $ckeditorActiveToolbar = $context
         .find('.ckeditor-toolbar-configuration')
         .find('.ckeditor-toolbar-active');
-      var previousStylesSet = drupalSettings.ckeditor.hiddenCKEditorConfig.stylesSet;
-      var that = this;
+      let previousStylesSet = drupalSettings.ckeditor.hiddenCKEditorConfig.stylesSet;
+      const that = this;
       $context.find('[name="editor[settings][plugins][stylescombo][styles]"]')
         .on('blur.ckeditorStylesComboSettings', function () {
-          var styles = $.trim($(this).val());
-          var stylesSet = that._generateStylesSetSetting(styles);
+          const styles = $.trim($(this).val());
+          const stylesSet = that._generateStylesSetSetting(styles);
           if (!_.isEqual(previousStylesSet, stylesSet)) {
             previousStylesSet = stylesSet;
             $ckeditorActiveToolbar.trigger('CKEditorPluginSettingsChanged', [
-              {stylesSet: stylesSet}
+              { stylesSet },
             ]);
           }
         });
@@ -63,13 +60,13 @@
      * @return {Array}
      *   An array containing the "stylesSet" configuration.
      */
-    _generateStylesSetSetting: function (styles) {
-      var stylesSet = [];
+    _generateStylesSetSetting(styles) {
+      const stylesSet = [];
 
       styles = styles.replace(/\r/g, '\n');
-      var lines = styles.split('\n');
-      for (var i = 0; i < lines.length; i++) {
-        var style = $.trim(lines[i]);
+      const lines = styles.split('\n');
+      for (let i = 0; i < lines.length; i++) {
+        const style = $.trim(lines[i]);
 
         // Ignore empty lines in between non-empty lines.
         if (style.length === 0) {
@@ -83,23 +80,23 @@
         }
 
         // Parse.
-        var parts = style.split('|');
-        var selector = parts[0];
-        var label = parts[1];
-        var classes = selector.split('.');
-        var element = classes.shift();
+        const parts = style.split('|');
+        const selector = parts[0];
+        const label = parts[1];
+        const classes = selector.split('.');
+        const element = classes.shift();
 
         // Build the data structure CKEditor's stylescombo plugin expects.
         // @see http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Styles
         stylesSet.push({
-          attributes: {class: classes.join(' ')},
-          element: element,
-          name: label
+          attributes: { class: classes.join(' ') },
+          element,
+          name: label,
         });
       }
 
       return stylesSet;
-    }
+    },
   };
 
   /**
@@ -111,18 +108,16 @@
    *   Attaches summary behaviour to the plugin settings vertical tab.
    */
   Drupal.behaviors.ckeditorStylesComboSettingsSummary = {
-    attach: function () {
-      $('[data-ckeditor-plugin-id="stylescombo"]').drupalSetSummary(function (context) {
-        var styles = $.trim($('[data-drupal-selector="edit-editor-settings-plugins-stylescombo-styles"]').val());
+    attach() {
+      $('[data-ckeditor-plugin-id="stylescombo"]').drupalSetSummary((context) => {
+        const styles = $.trim($('[data-drupal-selector="edit-editor-settings-plugins-stylescombo-styles"]').val());
         if (styles.length === 0) {
           return Drupal.t('No styles configured');
         }
-        else {
-          var count = $.trim(styles).split('\n').length;
-          return Drupal.t('@count styles configured', {'@count': count});
-        }
+
+        const count = $.trim(styles).split('\n').length;
+        return Drupal.t('@count styles configured', { '@count': count });
       });
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings, _);
+}(jQuery, Drupal, drupalSettings, _));
diff --git a/core/modules/ckeditor/js/models/Model.es6.js b/core/modules/ckeditor/js/models/Model.es6.js
index 162e363ead..40c0ac6160 100644
--- a/core/modules/ckeditor/js/models/Model.es6.js
+++ b/core/modules/ckeditor/js/models/Model.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, Backbone) {
-
-  'use strict';
-
   /**
    * Backbone model for the CKEditor toolbar configuration state.
    *
@@ -60,16 +57,15 @@
       /**
        * Whether the button group names are currently visible.
        */
-      groupNamesVisible: false
+      groupNamesVisible: false,
     },
 
     /**
      * @method
      */
-    sync: function () {
+    sync() {
       // Push the settings into the textarea.
       this.get('$textarea').val(JSON.stringify(this.get('activeEditorConfig')));
-    }
+    },
   });
-
-})(Drupal, Backbone);
+}(Drupal, Backbone));
diff --git a/core/modules/ckeditor/js/plugins/drupalimage/plugin.es6.js b/core/modules/ckeditor/js/plugins/drupalimage/plugin.es6.js
index 0025664e09..ac4fba44e4 100644
--- a/core/modules/ckeditor/js/plugins/drupalimage/plugin.es6.js
+++ b/core/modules/ckeditor/js/plugins/drupalimage/plugin.es6.js
@@ -14,19 +14,16 @@
  */
 
 (function ($, Drupal, CKEDITOR) {
-
-  'use strict';
-
   CKEDITOR.plugins.add('drupalimage', {
     requires: 'image2',
     icons: 'drupalimage',
     hidpi: true,
 
-    beforeInit: function (editor) {
+    beforeInit(editor) {
       // Override the image2 widget definition to require and handle the
       // additional data-entity-type and data-entity-uuid attributes.
-      editor.on('widgetDefinition', function (event) {
-        var widgetDefinition = event.data;
+      editor.on('widgetDefinition', (event) => {
+        const widgetDefinition = event.data;
         if (widgetDefinition.name !== 'image') {
           return;
         }
@@ -46,11 +43,11 @@
             attributes: {
               '!src': true,
               '!alt': true,
-              'width': true,
-              'height': true
+              width: true,
+              height: true,
             },
-            classes: {}
-          }
+            classes: {},
+          },
         };
         // Mapped from image2's requiredContent: "img[src,alt]". This does not
         // use the object format unlike above, but a CKEDITOR.style instance,
@@ -60,15 +57,15 @@
           element: 'img',
           attributes: {
             src: '',
-            alt: ''
-          }
+            alt: '',
+          },
         });
 
         // Extend requiredContent & allowedContent.
         // CKEDITOR.style is an immutable object: we cannot modify its
         // definition to extend requiredContent. Hence we get the definition,
         // modify it, and pass it to a new CKEDITOR.style instance.
-        var requiredContent = widgetDefinition.requiredContent.getDefinition();
+        const requiredContent = widgetDefinition.requiredContent.getDefinition();
         requiredContent.attributes['data-entity-type'] = '';
         requiredContent.attributes['data-entity-uuid'] = '';
         widgetDefinition.requiredContent = new CKEDITOR.style(requiredContent);
@@ -113,13 +110,13 @@
         // add that class, because the widget template already contains it.
         // @see http://dev.ckeditor.com/ticket/13888
         // @see https://www.drupal.org/node/2268941
-        var originalGetClasses = widgetDefinition.getClasses;
+        const originalGetClasses = widgetDefinition.getClasses;
         widgetDefinition.getClasses = function () {
-          var classes = originalGetClasses.call(this);
-          var captionedClasses = (this.editor.config.image2_captionedClass || '').split(/\s+/);
+          const classes = originalGetClasses.call(this);
+          const captionedClasses = (this.editor.config.image2_captionedClass || '').split(/\s+/);
 
           if (captionedClasses.length && classes) {
-            for (var i = 0; i < captionedClasses.length; i++) {
+            for (let i = 0; i < captionedClasses.length; i++) {
               if (captionedClasses[i] in classes) {
                 delete classes[captionedClasses[i]];
               }
@@ -133,21 +130,21 @@
         // Keys in the hash are the keys for image2's data, values are the keys
         // that the Drupal dialog uses.
         widgetDefinition._mapDataToDialog = {
-          'src': 'src',
-          'alt': 'alt',
-          'width': 'width',
-          'height': 'height',
+          src: 'src',
+          alt: 'alt',
+          width: 'width',
+          height: 'height',
           'data-entity-type': 'data-entity-type',
-          'data-entity-uuid': 'data-entity-uuid'
+          'data-entity-uuid': 'data-entity-uuid',
         };
 
         // Protected; transforms widget's data object to the format used by the
         // \Drupal\editor\Form\EditorImageDialog dialog, keeping only the data
         // listed in widgetDefinition._dataForDialog.
         widgetDefinition._dataToDialogValues = function (data) {
-          var dialogValues = {};
-          var map = widgetDefinition._mapDataToDialog;
-          Object.keys(widgetDefinition._mapDataToDialog).forEach(function (key) {
+          const dialogValues = {};
+          const map = widgetDefinition._mapDataToDialog;
+          Object.keys(widgetDefinition._mapDataToDialog).forEach((key) => {
             dialogValues[map[key]] = data[key];
           });
           return dialogValues;
@@ -155,9 +152,9 @@
 
         // Protected; the inverse of _dataToDialogValues.
         widgetDefinition._dialogValuesToData = function (dialogReturnValues) {
-          var data = {};
-          var map = widgetDefinition._mapDataToDialog;
-          Object.keys(widgetDefinition._mapDataToDialog).forEach(function (key) {
+          const data = {};
+          const map = widgetDefinition._mapDataToDialog;
+          Object.keys(widgetDefinition._mapDataToDialog).forEach((key) => {
             if (dialogReturnValues.hasOwnProperty(map[key])) {
               data[key] = dialogReturnValues[map[key]];
             }
@@ -168,7 +165,7 @@
         // Protected; creates Drupal dialog save callback.
         widgetDefinition._createDialogSaveCallback = function (editor, widget) {
           return function (dialogReturnValues) {
-            var firstEdit = !widget.ready;
+            const firstEdit = !widget.ready;
 
             // Dialog may have blurred the widget. Re-focus it first.
             if (!firstEdit) {
@@ -178,13 +175,13 @@
             editor.fire('saveSnapshot');
 
             // Pass `true` so DocumentFragment will also be returned.
-            var container = widget.wrapper.getParent(true);
-            var image = widget.parts.image;
+            const container = widget.wrapper.getParent(true);
+            const image = widget.parts.image;
 
             // Set the updated widget data, after the necessary conversions from
             // the dialog's return values.
             // Note: on widget#setData this widget instance might be destroyed.
-            var data = widgetDefinition._dialogValuesToData(dialogReturnValues.attributes);
+            const data = widgetDefinition._dialogValuesToData(dialogReturnValues.attributes);
             widget.setData(data);
 
             // Retrieve the widget once again. It could've been destroyed
@@ -199,7 +196,7 @@
               editor.widgets.finalizeCreation(container);
             }
 
-            setTimeout(function () {
+            setTimeout(() => {
               // (Re-)focus the widget.
               widget.focus();
               // Save snapshot for undo support.
@@ -210,7 +207,7 @@
           };
         };
 
-        var originalInit = widgetDefinition.init;
+        const originalInit = widgetDefinition.init;
         widgetDefinition.init = function () {
           originalInit.call(this);
 
@@ -227,14 +224,14 @@
       // to handle its editing with a Drupal-native dialog.
       // This includes also a case just after the image was created
       // and dialog should be opened for it for the first time.
-      editor.widgets.on('instanceCreated', function (event) {
-        var widget = event.data;
+      editor.widgets.on('instanceCreated', (event) => {
+        const widget = event.data;
 
         if (widget.name !== 'image') {
           return;
         }
 
-        widget.on('edit', function (event) {
+        widget.on('edit', (event) => {
           // Cancel edit event to break image2's dialog binding
           // (and also to prevent automatic insertion before opening dialog).
           event.cancel();
@@ -246,7 +243,7 @@
             // Drupal.t() will not work inside CKEditor plugins because CKEditor
             // loads the JavaScript file instead of Drupal. Pull translated
             // strings from the plugin settings that are translated server-side.
-            dialogTitle: widget.data.src ? editor.config.drupalImage_dialogTitleEdit : editor.config.drupalImage_dialogTitleAdd
+            dialogTitle: widget.data.src ? editor.config.drupalImage_dialogTitleEdit : editor.config.drupalImage_dialogTitleAdd,
           });
         });
       });
@@ -256,15 +253,15 @@
       editor.addCommand('editdrupalimage', {
         allowedContent: 'img[alt,!src,width,height,!data-entity-type,!data-entity-uuid]',
         requiredContent: 'img[alt,src,data-entity-type,data-entity-uuid]',
-        modes: {wysiwyg: 1},
+        modes: { wysiwyg: 1 },
         canUndo: true,
-        exec: function (editor, data) {
-          var dialogSettings = {
+        exec(editor, data) {
+          const dialogSettings = {
             title: data.dialogTitle,
-            dialogClass: 'editor-image-dialog'
+            dialogClass: 'editor-image-dialog',
           };
-          Drupal.ckeditor.openDialog(editor, Drupal.url('editor/dialog/image/' + editor.config.drupal.format), data.existingValues, data.saveCallback, dialogSettings);
-        }
+          Drupal.ckeditor.openDialog(editor, Drupal.url(`editor/dialog/image/${editor.config.drupal.format}`), data.existingValues, data.saveCallback, dialogSettings);
+        },
       });
 
       // Register the toolbar button.
@@ -272,14 +269,14 @@
         editor.ui.addButton('DrupalImage', {
           label: Drupal.t('Image'),
           // Note that we use the original image2 command!
-          command: 'image'
+          command: 'image',
         });
       }
     },
 
-    afterInit: function (editor) {
+    afterInit(editor) {
       linkCommandIntegrator(editor);
-    }
+    },
 
   });
 
@@ -308,7 +305,7 @@
 
     // Override default behaviour of 'drupalunlink' command.
     editor.getCommand('drupalunlink').on('exec', function (evt) {
-      var widget = getFocusedWidget(editor);
+      const widget = getFocusedWidget(editor);
 
       // Override 'drupalunlink' only when link truly belongs to the widget. If
       // wrapped inline widget in a link, let default unlink work.
@@ -329,7 +326,7 @@
 
     // Override default refresh of 'drupalunlink' command.
     editor.getCommand('drupalunlink').on('refresh', function (evt) {
-      var widget = getFocusedWidget(editor);
+      const widget = getFocusedWidget(editor);
 
       if (!widget) {
         return;
@@ -354,7 +351,7 @@
    *   The focused image2 widget instance, or null.
    */
   function getFocusedWidget(editor) {
-    var widget = editor.widgets.focused;
+    const widget = editor.widgets.focused;
 
     if (widget && widget.name === 'image') {
       return widget;
@@ -365,7 +362,6 @@
 
   // Expose an API for other plugins to interact with drupalimage widgets.
   CKEDITOR.plugins.drupalimage = {
-    getFocusedWidget: getFocusedWidget
+    getFocusedWidget,
   };
-
-})(jQuery, Drupal, CKEDITOR);
+}(jQuery, Drupal, CKEDITOR));
diff --git a/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js b/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js
index d1d666c5b9..1d51bcb82d 100644
--- a/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js
+++ b/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js
@@ -11,13 +11,10 @@
  */
 
 (function (CKEDITOR) {
-
-  'use strict';
-
   CKEDITOR.plugins.add('drupalimagecaption', {
     requires: 'drupalimage',
 
-    beforeInit: function (editor) {
+    beforeInit(editor) {
       // Disable default placeholder text that comes with CKEditor's image2
       // plugin: it has an inferior UX (it requires the user to manually delete
       // the place holder text).
@@ -26,35 +23,35 @@
       // Drupal.t() will not work inside CKEditor plugins because CKEditor loads
       // the JavaScript file instead of Drupal. Pull translated strings from the
       // plugin settings that are translated server-side.
-      var placeholderText = editor.config.drupalImageCaption_captionPlaceholderText;
+      const placeholderText = editor.config.drupalImageCaption_captionPlaceholderText;
 
       // Override the image2 widget definition to handle the additional
       // data-align and data-caption attributes.
-      editor.on('widgetDefinition', function (event) {
-        var widgetDefinition = event.data;
+      editor.on('widgetDefinition', (event) => {
+        const widgetDefinition = event.data;
         if (widgetDefinition.name !== 'image') {
           return;
         }
 
         // Only perform the downcasting/upcasting for to the enabled filters.
-        var captionFilterEnabled = editor.config.drupalImageCaption_captionFilterEnabled;
-        var alignFilterEnabled = editor.config.drupalImageCaption_alignFilterEnabled;
+        const captionFilterEnabled = editor.config.drupalImageCaption_captionFilterEnabled;
+        const alignFilterEnabled = editor.config.drupalImageCaption_alignFilterEnabled;
 
         // Override default features definitions for drupalimagecaption.
         CKEDITOR.tools.extend(widgetDefinition.features, {
           caption: {
-            requiredContent: 'img[data-caption]'
+            requiredContent: 'img[data-caption]',
           },
           align: {
-            requiredContent: 'img[data-align]'
-          }
+            requiredContent: 'img[data-align]',
+          },
         }, true);
 
         // Extend requiredContent & allowedContent.
         // CKEDITOR.style is an immutable object: we cannot modify its
         // definition to extend requiredContent. Hence we get the definition,
         // modify it, and pass it to a new CKEDITOR.style instance.
-        var requiredContent = widgetDefinition.requiredContent.getDefinition();
+        const requiredContent = widgetDefinition.requiredContent.getDefinition();
         requiredContent.attributes['data-align'] = '';
         requiredContent.attributes['data-caption'] = '';
         widgetDefinition.requiredContent = new CKEDITOR.style(requiredContent);
@@ -70,14 +67,14 @@
         // Override downcast(): ensure we *only* output <img>, but also ensure
         // we include the data-entity-type, data-entity-uuid, data-align and
         // data-caption attributes.
-        var originalDowncast = widgetDefinition.downcast;
+        const originalDowncast = widgetDefinition.downcast;
         widgetDefinition.downcast = function (element) {
-          var img = findElementByName(element, 'img');
+          const img = findElementByName(element, 'img');
           originalDowncast.call(this, img);
 
-          var caption = this.editables.caption;
-          var captionHtml = caption && caption.getData();
-          var attrs = img.attributes;
+          const caption = this.editables.caption;
+          const captionHtml = caption && caption.getData();
+          const attrs = img.attributes;
 
           if (captionFilterEnabled) {
             // If image contains a non-empty caption, serialize caption to the
@@ -96,9 +93,8 @@
           if (img.parent.name === 'a') {
             return img.parent;
           }
-          else {
-            return img;
-          }
+
+          return img;
         };
 
         // We want to upcast <img> elements to a DOM structure required by the
@@ -107,7 +103,7 @@
         //   - <img> tag in a paragraph (non-captioned, centered image),
         //   - <figure> tag (captioned image).
         // We take the same attributes into account as downcast() does.
-        var originalUpcast = widgetDefinition.upcast;
+        const originalUpcast = widgetDefinition.upcast;
         widgetDefinition.upcast = function (element, data) {
           if (element.name !== 'img' || !element.attributes['data-entity-type'] || !element.attributes['data-entity-uuid']) {
             return;
@@ -118,14 +114,14 @@
           }
 
           element = originalUpcast.call(this, element, data);
-          var attrs = element.attributes;
+          const attrs = element.attributes;
 
           if (element.parent.name === 'a') {
             element = element.parent;
           }
 
-          var retElement = element;
-          var caption;
+          let retElement = element;
+          let caption;
 
           // We won't need the attributes during editing: we'll use widget.data
           // to store them (except the caption, which is stored in the DOM).
@@ -147,9 +143,9 @@
             // image. The captioned image will be transformed to <figure>, so we
             // don't want the <p> anymore.
             if (element.parent.name === 'p' && caption) {
-              var index = element.getIndex();
-              var splitBefore = index > 0;
-              var splitAfter = index + 1 < element.parent.children.length;
+              let index = element.getIndex();
+              const splitBefore = index > 0;
+              const splitAfter = index + 1 < element.parent.children.length;
 
               if (splitBefore) {
                 element.parent.split(index);
@@ -165,7 +161,7 @@
 
             // If this image has a caption, create a full <figure> structure.
             if (caption) {
-              var figure = new CKEDITOR.htmlParser.element('figure');
+              const figure = new CKEDITOR.htmlParser.element('figure');
               caption = new CKEDITOR.htmlParser.fragment.fromHtml(caption, 'figcaption');
 
               // Use Drupal's data-placeholder attribute to insert a CSS-based,
@@ -177,7 +173,7 @@
               element.replaceWith(figure);
               figure.add(element);
               figure.add(caption);
-              figure.attributes['class'] = editor.config.image2_captionedClass;
+              figure.attributes.class = editor.config.image2_captionedClass;
               retElement = figure;
             }
           }
@@ -187,7 +183,7 @@
             // disabled), but it is centered, make sure that it's wrapped with
             // <p>, which will become a part of the widget.
             if (data.align === 'center' && (!captionFilterEnabled || !caption)) {
-              var p = new CKEDITOR.htmlParser.element('p');
+              const p = new CKEDITOR.htmlParser.element('p');
               element.replaceWith(p);
               p.add(element);
               // Apply the class for centered images.
@@ -204,15 +200,15 @@
         // Append to the values defined by the drupalimage plugin.
         // @see core/modules/ckeditor/js/plugins/drupalimage/plugin.js
         CKEDITOR.tools.extend(widgetDefinition._mapDataToDialog, {
-          'align': 'data-align',
+          align: 'data-align',
           'data-caption': 'data-caption',
-          'hasCaption': 'hasCaption'
+          hasCaption: 'hasCaption',
         });
 
         // Override Drupal dialog save callback.
-        var originalCreateDialogSaveCallback = widgetDefinition._createDialogSaveCallback;
+        const originalCreateDialogSaveCallback = widgetDefinition._createDialogSaveCallback;
         widgetDefinition._createDialogSaveCallback = function (editor, widget) {
-          var saveCallback = originalCreateDialogSaveCallback.call(this, editor, widget);
+          const saveCallback = originalCreateDialogSaveCallback.call(this, editor, widget);
 
           return function (dialogReturnValues) {
             // Ensure hasCaption is a boolean. image2 assumes it always works
@@ -223,7 +219,7 @@
             // shifter" to enter the wrong branch of the algorithm and blow up.
             dialogReturnValues.attributes.hasCaption = !!dialogReturnValues.attributes.hasCaption;
 
-            var actualWidget = saveCallback(dialogReturnValues);
+            const actualWidget = saveCallback(dialogReturnValues);
 
             // By default, the template of captioned widget has no
             // data-placeholder attribute. Note that it also must be done when
@@ -235,7 +231,7 @@
               // element with no content. Remove this <br> if it is the only
               // thing in the caption. Our placeholder support requires the
               // element be entirely empty. See filter-caption.css.
-              var captionElement = actualWidget.editables.caption.$;
+              const captionElement = actualWidget.editables.caption.$;
               if (captionElement.childNodes.length === 1 && captionElement.childNodes.item(0).nodeName === 'BR') {
                 captionElement.removeChild(captionElement.childNodes.item(0));
               }
@@ -246,9 +242,9 @@
       }, null, null, 20);
     },
 
-    afterInit: function (editor) {
-      var disableButtonIfOnWidget = function (evt) {
-        var widget = editor.widgets.focused;
+    afterInit(editor) {
+      const disableButtonIfOnWidget = function (evt) {
+        const widget = editor.widgets.focused;
         if (widget && widget.name === 'image') {
           this.setState(CKEDITOR.TRISTATE_DISABLED);
           evt.cancel();
@@ -257,15 +253,15 @@
 
       // Disable alignment buttons if the align filter is not enabled.
       if (editor.plugins.justify && !editor.config.drupalImageCaption_alignFilterEnabled) {
-        var cmd;
-        var commands = ['justifyleft', 'justifycenter', 'justifyright', 'justifyblock'];
-        for (var n = 0; n < commands.length; n++) {
+        let cmd;
+        const commands = ['justifyleft', 'justifycenter', 'justifyright', 'justifyblock'];
+        for (let n = 0; n < commands.length; n++) {
           cmd = editor.getCommand(commands[n]);
           cmd.contextSensitive = 1;
           cmd.on('refresh', disableButtonIfOnWidget, null, null, 4);
         }
       }
-    }
+    },
   });
 
   /**
@@ -287,8 +283,8 @@
       return element;
     }
 
-    var found = null;
-    element.forEach(function (el) {
+    let found = null;
+    element.forEach((el) => {
       if (el.name === name) {
         found = el;
         // Stop here.
@@ -297,5 +293,4 @@
     }, CKEDITOR.NODE_ELEMENT);
     return found;
   }
-
-})(CKEDITOR);
+}(CKEDITOR));
diff --git a/core/modules/ckeditor/js/plugins/drupallink/plugin.es6.js b/core/modules/ckeditor/js/plugins/drupallink/plugin.es6.js
index 9bd4dce985..7444fcc243 100644
--- a/core/modules/ckeditor/js/plugins/drupallink/plugin.es6.js
+++ b/core/modules/ckeditor/js/plugins/drupallink/plugin.es6.js
@@ -6,16 +6,13 @@
  */
 
 (function ($, Drupal, drupalSettings, CKEDITOR) {
-
-  'use strict';
-
   function parseAttributes(editor, element) {
-    var parsedAttributes = {};
+    const parsedAttributes = {};
 
-    var domElement = element.$;
-    var attribute;
-    var attributeName;
-    for (var attrIndex = 0; attrIndex < domElement.attributes.length; attrIndex++) {
+    const domElement = element.$;
+    let attribute;
+    let attributeName;
+    for (let attrIndex = 0; attrIndex < domElement.attributes.length; attrIndex++) {
       attribute = domElement.attributes.item(attrIndex);
       attributeName = attribute.nodeName.toLowerCase();
       // Ignore data-cke-* attributes; they're CKEditor internals.
@@ -24,7 +21,7 @@
       }
       // Store the value for this attribute, unless there's a data-cke-saved-
       // alternative for it, which will contain the quirk-free, original value.
-      parsedAttributes[attributeName] = element.data('cke-saved-' + attributeName) || attribute.nodeValue;
+      parsedAttributes[attributeName] = element.data(`cke-saved-${attributeName}`) || attribute.nodeValue;
     }
 
     // Remove any cke_* classes.
@@ -36,8 +33,8 @@
   }
 
   function getAttributes(editor, data) {
-    var set = {};
-    for (var attributeName in data) {
+    const set = {};
+    for (const attributeName in data) {
       if (data.hasOwnProperty(attributeName)) {
         set[attributeName] = data[attributeName];
       }
@@ -48,16 +45,16 @@
     set['data-cke-saved-href'] = set.href;
 
     // Remove all attributes which are not currently set.
-    var removed = {};
-    for (var s in set) {
+    const removed = {};
+    for (const s in set) {
       if (set.hasOwnProperty(s)) {
         delete removed[s];
       }
     }
 
     return {
-      set: set,
-      removed: CKEDITOR.tools.objectKeys(removed)
+      set,
+      removed: CKEDITOR.tools.objectKeys(removed),
     };
   }
 
@@ -65,32 +62,32 @@
     icons: 'drupallink,drupalunlink',
     hidpi: true,
 
-    init: function (editor) {
+    init(editor) {
       // Add the commands for link and unlink.
       editor.addCommand('drupallink', {
         allowedContent: {
           a: {
             attributes: {
-              '!href': true
+              '!href': true,
             },
-            classes: {}
-          }
+            classes: {},
+          },
         },
         requiredContent: new CKEDITOR.style({
           element: 'a',
           attributes: {
-            href: ''
-          }
+            href: '',
+          },
         }),
-        modes: {wysiwyg: 1},
+        modes: { wysiwyg: 1 },
         canUndo: true,
-        exec: function (editor) {
-          var drupalImageUtils = CKEDITOR.plugins.drupalimage;
-          var focusedImageWidget = drupalImageUtils && drupalImageUtils.getFocusedWidget(editor);
-          var linkElement = getSelectedLink(editor);
+        exec(editor) {
+          const drupalImageUtils = CKEDITOR.plugins.drupalimage;
+          const focusedImageWidget = drupalImageUtils && drupalImageUtils.getFocusedWidget(editor);
+          let linkElement = getSelectedLink(editor);
 
           // Set existing values based on selected element.
-          var existingValues = {};
+          let existingValues = {};
           if (linkElement && linkElement.$) {
             existingValues = parseAttributes(editor, linkElement);
           }
@@ -101,7 +98,7 @@
           }
 
           // Prepare a save callback to be used upon saving the dialog.
-          var saveCallback = function (returnValues) {
+          const saveCallback = function (returnValues) {
             // If an image widget is focused, we're not editing an independent
             // link, but we're wrapping an image widget in a link.
             if (focusedImageWidget) {
@@ -114,19 +111,19 @@
 
             // Create a new link element if needed.
             if (!linkElement && returnValues.attributes.href) {
-              var selection = editor.getSelection();
-              var range = selection.getRanges(1)[0];
+              const selection = editor.getSelection();
+              const range = selection.getRanges(1)[0];
 
               // Use link URL as text with a collapsed cursor.
               if (range.collapsed) {
                 // Shorten mailto URLs to just the email address.
-                var text = new CKEDITOR.dom.text(returnValues.attributes.href.replace(/^mailto:/, ''), editor.document);
+                const text = new CKEDITOR.dom.text(returnValues.attributes.href.replace(/^mailto:/, ''), editor.document);
                 range.insertNode(text);
                 range.selectNodeContents(text);
               }
 
               // Create the new link by applying a style to the new text.
-              var style = new CKEDITOR.style({element: 'a', attributes: returnValues.attributes});
+              const style = new CKEDITOR.style({ element: 'a', attributes: returnValues.attributes });
               style.type = CKEDITOR.STYLE_INLINE;
               style.applyToRange(range);
               range.select();
@@ -136,12 +133,12 @@
             }
             // Update the link properties.
             else if (linkElement) {
-              for (var attrName in returnValues.attributes) {
+              for (const attrName in returnValues.attributes) {
                 if (returnValues.attributes.hasOwnProperty(attrName)) {
                   // Update the property if a value is specified.
                   if (returnValues.attributes[attrName].length > 0) {
-                    var value = returnValues.attributes[attrName];
-                    linkElement.data('cke-saved-' + attrName, value);
+                    const value = returnValues.attributes[attrName];
+                    linkElement.data(`cke-saved-${attrName}`, value);
                     linkElement.setAttribute(attrName, value);
                   }
                   // Delete the property if set to an empty string.
@@ -158,14 +155,14 @@
           // Drupal.t() will not work inside CKEditor plugins because CKEditor
           // loads the JavaScript file instead of Drupal. Pull translated
           // strings from the plugin settings that are translated server-side.
-          var dialogSettings = {
+          const dialogSettings = {
             title: linkElement ? editor.config.drupalLink_dialogTitleEdit : editor.config.drupalLink_dialogTitleAdd,
-            dialogClass: 'editor-link-dialog'
+            dialogClass: 'editor-link-dialog',
           };
 
           // Open the dialog for the edit form.
-          Drupal.ckeditor.openDialog(editor, Drupal.url('editor/dialog/link/' + editor.config.drupal.format), existingValues, saveCallback, dialogSettings);
-        }
+          Drupal.ckeditor.openDialog(editor, Drupal.url(`editor/dialog/link/${editor.config.drupal.format}`), existingValues, saveCallback, dialogSettings);
+        },
       });
       editor.addCommand('drupalunlink', {
         contextSensitive: 1,
@@ -173,22 +170,22 @@
         requiredContent: new CKEDITOR.style({
           element: 'a',
           attributes: {
-            href: ''
-          }
+            href: '',
+          },
         }),
-        exec: function (editor) {
-          var style = new CKEDITOR.style({element: 'a', type: CKEDITOR.STYLE_INLINE, alwaysRemoveElement: 1});
+        exec(editor) {
+          const style = new CKEDITOR.style({ element: 'a', type: CKEDITOR.STYLE_INLINE, alwaysRemoveElement: 1 });
           editor.removeStyle(style);
         },
-        refresh: function (editor, path) {
-          var element = path.lastElement && path.lastElement.getAscendant('a', true);
+        refresh(editor, path) {
+          const element = path.lastElement && path.lastElement.getAscendant('a', true);
           if (element && element.getName() === 'a' && element.getAttribute('href') && element.getChildCount()) {
             this.setState(CKEDITOR.TRISTATE_OFF);
           }
           else {
             this.setState(CKEDITOR.TRISTATE_DISABLED);
           }
-        }
+        },
       });
 
       // CTRL + K.
@@ -198,16 +195,16 @@
       if (editor.ui.addButton) {
         editor.ui.addButton('DrupalLink', {
           label: Drupal.t('Link'),
-          command: 'drupallink'
+          command: 'drupallink',
         });
         editor.ui.addButton('DrupalUnlink', {
           label: Drupal.t('Unlink'),
-          command: 'drupalunlink'
+          command: 'drupalunlink',
         });
       }
 
-      editor.on('doubleclick', function (evt) {
-        var element = getSelectedLink(editor) || evt.data.element;
+      editor.on('doubleclick', (evt) => {
+        const element = getSelectedLink(editor) || evt.data.element;
 
         if (!element.isReadOnly()) {
           if (element.is('a')) {
@@ -224,37 +221,37 @@
             label: Drupal.t('Edit Link'),
             command: 'drupallink',
             group: 'link',
-            order: 1
+            order: 1,
           },
 
           unlink: {
             label: Drupal.t('Unlink'),
             command: 'drupalunlink',
             group: 'link',
-            order: 5
-          }
+            order: 5,
+          },
         });
       }
 
       // If the "contextmenu" plugin is loaded, register the listeners.
       if (editor.contextMenu) {
-        editor.contextMenu.addListener(function (element, selection) {
+        editor.contextMenu.addListener((element, selection) => {
           if (!element || element.isReadOnly()) {
             return null;
           }
-          var anchor = getSelectedLink(editor);
+          const anchor = getSelectedLink(editor);
           if (!anchor) {
             return null;
           }
 
-          var menu = {};
+          let menu = {};
           if (anchor.getAttribute('href') && anchor.getChildCount()) {
-            menu = {link: CKEDITOR.TRISTATE_OFF, unlink: CKEDITOR.TRISTATE_OFF};
+            menu = { link: CKEDITOR.TRISTATE_OFF, unlink: CKEDITOR.TRISTATE_OFF };
           }
           return menu;
         });
       }
-    }
+    },
   });
 
   /**
@@ -278,13 +275,13 @@
    *
    */
   function getSelectedLink(editor) {
-    var selection = editor.getSelection();
-    var selectedElement = selection.getSelectedElement();
+    const selection = editor.getSelection();
+    const selectedElement = selection.getSelectedElement();
     if (selectedElement && selectedElement.is('a')) {
       return selectedElement;
     }
 
-    var range = selection.getRanges(true)[0];
+    const range = selection.getRanges(true)[0];
 
     if (range) {
       range.shrink(CKEDITOR.SHRINK_TEXT);
@@ -298,7 +295,6 @@
   // http://dev.ckeditor.com/ticket/13885.)
   CKEDITOR.plugins.drupallink = {
     parseLinkAttributes: parseAttributes,
-    getLinkAttributes: getAttributes
+    getLinkAttributes: getAttributes,
   };
-
-})(jQuery, Drupal, drupalSettings, CKEDITOR);
+}(jQuery, Drupal, drupalSettings, CKEDITOR));
diff --git a/core/modules/ckeditor/js/views/AuralView.es6.js b/core/modules/ckeditor/js/views/AuralView.es6.js
index 0659eb2061..6702ae3a93 100644
--- a/core/modules/ckeditor/js/views/AuralView.es6.js
+++ b/core/modules/ckeditor/js/views/AuralView.es6.js
@@ -5,9 +5,6 @@
  */
 
 (function (Drupal, Backbone, $) {
-
-  'use strict';
-
   Drupal.ckeditor.AuralView = Backbone.View.extend(/** @lends Drupal.ckeditor.AuralView# */{
 
     /**
@@ -18,7 +15,7 @@
       'click .ckeditor-multiple-buttons a': 'announceSeparatorHelp',
       'focus .ckeditor-button a': 'onFocus',
       'focus .ckeditor-button-separator a': 'onFocus',
-      'focus .ckeditor-toolbar-group': 'onFocus'
+      'focus .ckeditor-toolbar-group': 'onFocus',
     },
 
     /**
@@ -28,7 +25,7 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
+    initialize() {
       // Announce the button and group positions when the model is no longer
       // dirty.
       this.listenTo(this.model, 'change:isDirty', this.announceMove);
@@ -43,13 +40,13 @@
      *   A model attribute that indicates if the changed toolbar configuration
      *   has been stored or not.
      */
-    announceMove: function (model, isDirty) {
+    announceMove(model, isDirty) {
       // Announce the position of a button or group after the model has been
       // updated.
       if (!isDirty) {
-        var item = document.activeElement || null;
+        const item = document.activeElement || null;
         if (item) {
-          var $item = $(item);
+          const $item = $(item);
           if ($item.hasClass('ckeditor-toolbar-group')) {
             this.announceButtonGroupPosition($item);
           }
@@ -66,12 +63,12 @@
      * @param {jQuery.Event} event
      *   The focus event that was triggered.
      */
-    onFocus: function (event) {
+    onFocus(event) {
       event.stopPropagation();
 
-      var $originalTarget = $(event.target);
-      var $currentTarget = $(event.currentTarget);
-      var $parent = $currentTarget.parent();
+      const $originalTarget = $(event.target);
+      const $currentTarget = $(event.currentTarget);
+      const $parent = $currentTarget.parent();
       if ($parent.hasClass('ckeditor-button') || $parent.hasClass('ckeditor-button-separator')) {
         this.announceButtonPosition($currentTarget.parent());
       }
@@ -86,20 +83,20 @@
      * @param {jQuery} $group
      *   A jQuery set that contains an li element that wraps a group of buttons.
      */
-    announceButtonGroupPosition: function ($group) {
-      var $groups = $group.parent().children();
-      var $row = $group.closest('.ckeditor-row');
-      var $rows = $row.parent().children();
-      var position = $groups.index($group) + 1;
-      var positionCount = $groups.not('.placeholder').length;
-      var row = $rows.index($row) + 1;
-      var rowCount = $rows.not('.placeholder').length;
-      var text = Drupal.t('@groupName button group in position @position of @positionCount in row @row of @rowCount.', {
+    announceButtonGroupPosition($group) {
+      const $groups = $group.parent().children();
+      const $row = $group.closest('.ckeditor-row');
+      const $rows = $row.parent().children();
+      const position = $groups.index($group) + 1;
+      const positionCount = $groups.not('.placeholder').length;
+      const row = $rows.index($row) + 1;
+      const rowCount = $rows.not('.placeholder').length;
+      let text = Drupal.t('@groupName button group in position @position of @positionCount in row @row of @rowCount.', {
         '@groupName': $group.attr('data-drupal-ckeditor-toolbar-group-name'),
         '@position': position,
         '@positionCount': positionCount,
         '@row': row,
-        '@rowCount': rowCount
+        '@rowCount': rowCount,
       });
       // If this position is the first in the last row then tell the user that
       // pressing the down arrow key will create a new row.
@@ -116,30 +113,30 @@
      * @param {jQuery} $button
      *   A jQuery set that contains an li element that wraps a button.
      */
-    announceButtonPosition: function ($button) {
-      var $row = $button.closest('.ckeditor-row');
-      var $rows = $row.parent().children();
-      var $buttons = $button.closest('.ckeditor-buttons').children();
-      var $group = $button.closest('.ckeditor-toolbar-group');
-      var $groups = $group.parent().children();
-      var groupPosition = $groups.index($group) + 1;
-      var groupPositionCount = $groups.not('.placeholder').length;
-      var position = $buttons.index($button) + 1;
-      var positionCount = $buttons.length;
-      var row = $rows.index($row) + 1;
-      var rowCount = $rows.not('.placeholder').length;
+    announceButtonPosition($button) {
+      const $row = $button.closest('.ckeditor-row');
+      const $rows = $row.parent().children();
+      const $buttons = $button.closest('.ckeditor-buttons').children();
+      const $group = $button.closest('.ckeditor-toolbar-group');
+      const $groups = $group.parent().children();
+      const groupPosition = $groups.index($group) + 1;
+      const groupPositionCount = $groups.not('.placeholder').length;
+      const position = $buttons.index($button) + 1;
+      const positionCount = $buttons.length;
+      const row = $rows.index($row) + 1;
+      const rowCount = $rows.not('.placeholder').length;
       // The name of the button separator is 'button separator' and its type
       // is 'separator', so we do not want to print the type of this item,
       // otherwise the UA will speak 'button separator separator'.
-      var type = ($button.attr('data-drupal-ckeditor-type') === 'separator') ? '' : Drupal.t('button');
-      var text;
+      const type = ($button.attr('data-drupal-ckeditor-type') === 'separator') ? '' : Drupal.t('button');
+      let text;
       // The button is located in the available button set.
       if ($button.closest('.ckeditor-toolbar-disabled').length > 0) {
         text = Drupal.t('@name @type.', {
           '@name': $button.children().attr('aria-label'),
-          '@type': type
+          '@type': type,
         });
-        text += '\n' + Drupal.t('Press the down arrow key to activate.');
+        text += `\n${Drupal.t('Press the down arrow key to activate.')}`;
 
         Drupal.announce(text, 'assertive');
       }
@@ -152,7 +149,7 @@
           '@positionCount': positionCount,
           '@groupName': $group.attr('data-drupal-ckeditor-toolbar-group-name'),
           '@row': row,
-          '@rowCount': rowCount
+          '@rowCount': rowCount,
         });
         // If this position is the first in the last row then tell the user that
         // pressing the down arrow key will create a new row.
@@ -176,24 +173,24 @@
      * @param {jQuery.Event} event
      *   The click event for the button click.
      */
-    announceButtonHelp: function (event) {
-      var $link = $(event.currentTarget);
-      var $button = $link.parent();
-      var enabled = $button.closest('.ckeditor-toolbar-active').length > 0;
-      var message;
+    announceButtonHelp(event) {
+      const $link = $(event.currentTarget);
+      const $button = $link.parent();
+      const enabled = $button.closest('.ckeditor-toolbar-active').length > 0;
+      let message;
 
       if (enabled) {
         message = Drupal.t('The "@name" button is currently enabled.', {
-          '@name': $link.attr('aria-label')
+          '@name': $link.attr('aria-label'),
         });
-        message += '\n' + Drupal.t('Use the keyboard arrow keys to change the position of this button.');
-        message += '\n' + Drupal.t('Press the up arrow key on the top row to disable the button.');
+        message += `\n${Drupal.t('Use the keyboard arrow keys to change the position of this button.')}`;
+        message += `\n${Drupal.t('Press the up arrow key on the top row to disable the button.')}`;
       }
       else {
         message = Drupal.t('The "@name" button is currently disabled.', {
-          '@name': $link.attr('aria-label')
+          '@name': $link.attr('aria-label'),
         });
-        message += '\n' + Drupal.t('Use the down arrow key to move this button into the active toolbar.');
+        message += `\n${Drupal.t('Use the down arrow key to move this button into the active toolbar.')}`;
       }
       Drupal.announce(message);
       event.preventDefault();
@@ -205,29 +202,28 @@
      * @param {jQuery.Event} event
      *   The click event for the separator click.
      */
-    announceSeparatorHelp: function (event) {
-      var $link = $(event.currentTarget);
-      var $button = $link.parent();
-      var enabled = $button.closest('.ckeditor-toolbar-active').length > 0;
-      var message;
+    announceSeparatorHelp(event) {
+      const $link = $(event.currentTarget);
+      const $button = $link.parent();
+      const enabled = $button.closest('.ckeditor-toolbar-active').length > 0;
+      let message;
 
       if (enabled) {
         message = Drupal.t('This @name is currently enabled.', {
-          '@name': $link.attr('aria-label')
+          '@name': $link.attr('aria-label'),
         });
-        message += '\n' + Drupal.t('Use the keyboard arrow keys to change the position of this separator.');
+        message += `\n${Drupal.t('Use the keyboard arrow keys to change the position of this separator.')}`;
       }
       else {
         message = Drupal.t('Separators are used to visually split individual buttons.');
-        message += '\n' + Drupal.t('This @name is currently disabled.', {
-          '@name': $link.attr('aria-label')
-        });
-        message += '\n' + Drupal.t('Use the down arrow key to move this separator into the active toolbar.');
-        message += '\n' + Drupal.t('You may add multiple separators to each button group.');
+        message += `\n${Drupal.t('This @name is currently disabled.', {
+          '@name': $link.attr('aria-label'),
+        })}`;
+        message += `\n${Drupal.t('Use the down arrow key to move this separator into the active toolbar.')}`;
+        message += `\n${Drupal.t('You may add multiple separators to each button group.')}`;
       }
       Drupal.announce(message);
       event.preventDefault();
-    }
+    },
   });
-
-})(Drupal, Backbone, jQuery);
+}(Drupal, Backbone, jQuery));
diff --git a/core/modules/ckeditor/js/views/ControllerView.es6.js b/core/modules/ckeditor/js/views/ControllerView.es6.js
index 0f48373a79..869a004b96 100644
--- a/core/modules/ckeditor/js/views/ControllerView.es6.js
+++ b/core/modules/ckeditor/js/views/ControllerView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, Backbone, CKEDITOR, _) {
-
-  'use strict';
-
   Drupal.ckeditor.ControllerView = Backbone.View.extend(/** @lends Drupal.ckeditor.ControllerView# */{
 
     /**
@@ -21,7 +18,7 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
+    initialize() {
       this.getCKEditorFeatures(this.model.get('hiddenEditorConfig'), this.disableFeaturesDisallowedByFilters.bind(this));
 
       // Push the active editor configuration to the textarea.
@@ -45,24 +42,24 @@
      *
      * @fires event:CKEditorToolbarChanged
      */
-    parseEditorDOM: function (model, isDirty, options) {
+    parseEditorDOM(model, isDirty, options) {
       if (isDirty) {
-        var currentConfig = this.model.get('activeEditorConfig');
+        const currentConfig = this.model.get('activeEditorConfig');
 
         // Process the rows.
-        var rows = [];
+        const rows = [];
         this.$el
           .find('.ckeditor-active-toolbar-configuration')
           .children('.ckeditor-row').each(function () {
-            var groups = [];
+            const groups = [];
             // Process the button groups.
             $(this).find('.ckeditor-toolbar-group').each(function () {
-              var $group = $(this);
-              var $buttons = $group.find('.ckeditor-button');
+              const $group = $(this);
+              const $buttons = $group.find('.ckeditor-button');
               if ($buttons.length) {
-                var group = {
+                const group = {
                   name: $group.attr('data-drupal-ckeditor-toolbar-group-name'),
-                  items: []
+                  items: [],
                 };
                 $group.find('.ckeditor-button, .ckeditor-multiple-button').each(function () {
                   group.items.push($(this).attr('data-drupal-ckeditor-button-name'));
@@ -83,14 +80,14 @@
 
         // Determine whether we should trigger an event.
         if (options.broadcast !== false) {
-          var prev = this.getButtonList(currentConfig);
-          var next = this.getButtonList(rows);
+          const prev = this.getButtonList(currentConfig);
+          const next = this.getButtonList(rows);
           if (prev.length !== next.length) {
             this.$el
               .find('.ckeditor-toolbar-active')
               .trigger('CKEditorToolbarChanged', [
                 (prev.length < next.length) ? 'added' : 'removed',
-                _.difference(_.union(prev, next), _.intersection(prev, next))[0]
+                _.difference(_.union(prev, next), _.intersection(prev, next))[0],
               ]);
           }
         }
@@ -113,18 +110,18 @@
      *   A function to invoke when the instanceReady event is fired by the
      *   CKEditor object.
      */
-    getCKEditorFeatures: function (CKEditorConfig, callback) {
-      var getProperties = function (CKEPropertiesList) {
+    getCKEditorFeatures(CKEditorConfig, callback) {
+      const getProperties = function (CKEPropertiesList) {
         return (_.isObject(CKEPropertiesList)) ? _.keys(CKEPropertiesList) : [];
       };
 
-      var convertCKERulesToEditorFeature = function (feature, CKEFeatureRules) {
-        for (var i = 0; i < CKEFeatureRules.length; i++) {
-          var CKERule = CKEFeatureRules[i];
-          var rule = new Drupal.EditorFeatureHTMLRule();
+      const convertCKERulesToEditorFeature = function (feature, CKEFeatureRules) {
+        for (let i = 0; i < CKEFeatureRules.length; i++) {
+          const CKERule = CKEFeatureRules[i];
+          const rule = new Drupal.EditorFeatureHTMLRule();
 
           // Tags.
-          var tags = getProperties(CKERule.elements);
+          const tags = getProperties(CKERule.elements);
           rule.required.tags = (CKERule.propertiesOnly) ? [] : tags;
           rule.allowed.tags = tags;
           // Attributes.
@@ -145,32 +142,32 @@
 
       // Create hidden CKEditor with all features enabled, retrieve metadata.
       // @see \Drupal\ckeditor\Plugin\Editor\CKEditor::buildConfigurationForm().
-      var hiddenCKEditorID = 'ckeditor-hidden';
+      const hiddenCKEditorID = 'ckeditor-hidden';
       if (CKEDITOR.instances[hiddenCKEditorID]) {
         CKEDITOR.instances[hiddenCKEditorID].destroy(true);
       }
       // Load external plugins, if any.
-      var hiddenEditorConfig = this.model.get('hiddenEditorConfig');
+      const hiddenEditorConfig = this.model.get('hiddenEditorConfig');
       if (hiddenEditorConfig.drupalExternalPlugins) {
-        var externalPlugins = hiddenEditorConfig.drupalExternalPlugins;
-        for (var pluginName in externalPlugins) {
+        const externalPlugins = hiddenEditorConfig.drupalExternalPlugins;
+        for (const pluginName in externalPlugins) {
           if (externalPlugins.hasOwnProperty(pluginName)) {
             CKEDITOR.plugins.addExternal(pluginName, externalPlugins[pluginName], '');
           }
         }
       }
-      CKEDITOR.inline($('#' + hiddenCKEditorID).get(0), CKEditorConfig);
+      CKEDITOR.inline($(`#${hiddenCKEditorID}`).get(0), CKEditorConfig);
 
       // Once the instance is ready, retrieve the allowedContent filter rules
       // and convert them to Drupal.EditorFeature objects.
-      CKEDITOR.once('instanceReady', function (e) {
+      CKEDITOR.once('instanceReady', (e) => {
         if (e.editor.name === hiddenCKEditorID) {
           // First collect all CKEditor allowedContent rules.
-          var CKEFeatureRulesMap = {};
-          var rules = e.editor.filter.allowedContent;
-          var rule;
-          var name;
-          for (var i = 0; i < rules.length; i++) {
+          const CKEFeatureRulesMap = {};
+          const rules = e.editor.filter.allowedContent;
+          let rule;
+          let name;
+          for (let i = 0; i < rules.length; i++) {
             rule = rules[i];
             name = rule.featureName || ':(';
             if (!CKEFeatureRulesMap[name]) {
@@ -182,14 +179,14 @@
           // Now convert these to Drupal.EditorFeature objects. And track which
           // buttons are mapped to which features.
           // @see getFeatureForButton()
-          var features = {};
-          var buttonsToFeatures = {};
-          for (var featureName in CKEFeatureRulesMap) {
+          const features = {};
+          const buttonsToFeatures = {};
+          for (const featureName in CKEFeatureRulesMap) {
             if (CKEFeatureRulesMap.hasOwnProperty(featureName)) {
-              var feature = new Drupal.EditorFeature(featureName);
+              const feature = new Drupal.EditorFeature(featureName);
               convertCKERulesToEditorFeature(feature, CKEFeatureRulesMap[featureName]);
               features[featureName] = feature;
-              var command = e.editor.getCommand(featureName);
+              const command = e.editor.getCommand(featureName);
               if (command) {
                 buttonsToFeatures[command.uiItems[0].name] = featureName;
               }
@@ -211,7 +208,7 @@
      * @return {object}
      *   The feature metadata object for a button.
      */
-    getFeatureForButton: function (button) {
+    getFeatureForButton(button) {
       // Return false if the button being added is a divider.
       if (button === '-') {
         return false;
@@ -220,13 +217,13 @@
       // Get a Drupal.editorFeature object that contains all metadata for
       // the feature that was just added or removed. Not every feature has
       // such metadata.
-      var featureName = this.model.get('buttonsToFeatures')[button.toLowerCase()];
+      let featureName = this.model.get('buttonsToFeatures')[button.toLowerCase()];
       // Features without an associated command do not have a 'feature name' by
       // default, so we use the lowercased button name instead.
       if (!featureName) {
         featureName = button.toLowerCase();
       }
-      var featuresMetadata = this.model.get('featuresMetadata');
+      const featuresMetadata = this.model.get('featuresMetadata');
       if (!featuresMetadata[featureName]) {
         featuresMetadata[featureName] = new Drupal.EditorFeature(featureName);
         this.model.set('featuresMetadata', featuresMetadata);
@@ -244,7 +241,7 @@
      *
      * @see Drupal.ckeditor.ControllerView#getFeatureForButton
      */
-    disableFeaturesDisallowedByFilters: function (features, buttonsToFeatures) {
+    disableFeaturesDisallowedByFilters(features, buttonsToFeatures) {
       this.model.set('featuresMetadata', features);
       // Store the button-to-feature mapping. Needs to happen only once, because
       // the same buttons continue to have the same features; only the rules for
@@ -259,23 +256,23 @@
       // by the current filter settings. Remove any of the default toolbar
       // buttons that require more permissive filter settings. The remaining
       // default toolbar buttons are marked as "added".
-      var existingButtons = [];
+      let existingButtons = [];
       // Loop through each button group after flattening the groups from the
       // toolbar row arrays.
-      var buttonGroups = _.flatten(this.model.get('activeEditorConfig'));
-      for (var i = 0; i < buttonGroups.length; i++) {
+      const buttonGroups = _.flatten(this.model.get('activeEditorConfig'));
+      for (let i = 0; i < buttonGroups.length; i++) {
         // Pull the button names from each toolbar button group.
-        var buttons = buttonGroups[i].items;
-        for (var k = 0; k < buttons.length; k++) {
+        const buttons = buttonGroups[i].items;
+        for (let k = 0; k < buttons.length; k++) {
           existingButtons.push(buttons[k]);
         }
       }
       // Remove duplicate buttons.
       existingButtons = _.unique(existingButtons);
       // Prepare the active toolbar and available-button toolbars.
-      for (var n = 0; n < existingButtons.length; n++) {
-        var button = existingButtons[n];
-        var feature = this.getFeatureForButton(button);
+      for (let n = 0; n < existingButtons.length; n++) {
+        const button = existingButtons[n];
+        const feature = this.getFeatureForButton(button);
         // Skip dividers.
         if (feature === false) {
           continue;
@@ -288,11 +285,11 @@
         else {
           // Move the button element from the active the active toolbar to the
           // list of available buttons.
-          $('.ckeditor-toolbar-active li[data-drupal-ckeditor-button-name="' + button + '"]')
+          $(`.ckeditor-toolbar-active li[data-drupal-ckeditor-button-name="${button}"]`)
             .detach()
             .appendTo('.ckeditor-toolbar-disabled > .ckeditor-toolbar-available > ul');
           // Update the toolbar value field.
-          this.model.set({isDirty: true}, {broadcast: false});
+          this.model.set({ isDirty: true }, { broadcast: false });
         }
       }
     },
@@ -303,17 +300,17 @@
      * @param {jQuery} $ckeditorToolbar
      *   The active toolbar DOM element wrapped in jQuery.
      */
-    broadcastConfigurationChanges: function ($ckeditorToolbar) {
-      var view = this;
-      var hiddenEditorConfig = this.model.get('hiddenEditorConfig');
-      var getFeatureForButton = this.getFeatureForButton.bind(this);
-      var getCKEditorFeatures = this.getCKEditorFeatures.bind(this);
+    broadcastConfigurationChanges($ckeditorToolbar) {
+      const view = this;
+      const hiddenEditorConfig = this.model.get('hiddenEditorConfig');
+      const getFeatureForButton = this.getFeatureForButton.bind(this);
+      const getCKEditorFeatures = this.getCKEditorFeatures.bind(this);
       $ckeditorToolbar
         .find('.ckeditor-toolbar-active')
         // Listen for CKEditor toolbar configuration changes. When a button is
         // added/removed, call an appropriate Drupal.editorConfiguration method.
-        .on('CKEditorToolbarChanged.ckeditorAdmin', function (event, action, button) {
-          var feature = getFeatureForButton(button);
+        .on('CKEditorToolbarChanged.ckeditorAdmin', (event, action, button) => {
+          const feature = getFeatureForButton(button);
 
           // Early-return if the button being added is a divider.
           if (feature === false) {
@@ -322,27 +319,27 @@
 
           // Trigger a standardized text editor configuration event to indicate
           // whether a feature was added or removed, so that filters can react.
-          var configEvent = (action === 'added') ? 'addedFeature' : 'removedFeature';
+          const configEvent = (action === 'added') ? 'addedFeature' : 'removedFeature';
           Drupal.editorConfiguration[configEvent](feature);
         })
         // Listen for CKEditor plugin settings changes. When a plugin setting is
         // changed, rebuild the CKEditor features metadata.
-        .on('CKEditorPluginSettingsChanged.ckeditorAdmin', function (event, settingsChanges) {
+        .on('CKEditorPluginSettingsChanged.ckeditorAdmin', (event, settingsChanges) => {
           // Update hidden CKEditor configuration.
-          for (var key in settingsChanges) {
+          for (const key in settingsChanges) {
             if (settingsChanges.hasOwnProperty(key)) {
               hiddenEditorConfig[key] = settingsChanges[key];
             }
           }
 
           // Retrieve features for the updated hidden CKEditor configuration.
-          getCKEditorFeatures(hiddenEditorConfig, function (features) {
+          getCKEditorFeatures(hiddenEditorConfig, (features) => {
             // Trigger a standardized text editor configuration event for each
             // feature that was modified by the configuration changes.
-            var featuresMetadata = view.model.get('featuresMetadata');
-            for (var name in features) {
+            const featuresMetadata = view.model.get('featuresMetadata');
+            for (const name in features) {
               if (features.hasOwnProperty(name)) {
-                var feature = features[name];
+                const feature = features[name];
                 if (featuresMetadata.hasOwnProperty(name) && !_.isEqual(featuresMetadata[name], feature)) {
                   Drupal.editorConfiguration.modifiedFeature(feature);
                 }
@@ -363,21 +360,20 @@
      * @return {Array}
      *   A list of buttons in the CKEditor configuration.
      */
-    getButtonList: function (config) {
-      var buttons = [];
+    getButtonList(config) {
+      const buttons = [];
       // Remove the rows.
       config = _.flatten(config);
 
       // Loop through the button groups and pull out the buttons.
-      config.forEach(function (group) {
-        group.items.forEach(function (button) {
+      config.forEach((group) => {
+        group.items.forEach((button) => {
           buttons.push(button);
         });
       });
 
       // Remove the dividing elements if any.
       return _.without(buttons, '-');
-    }
+    },
   });
-
-})(jQuery, Drupal, Backbone, CKEDITOR, _);
+}(jQuery, Drupal, Backbone, CKEDITOR, _));
diff --git a/core/modules/ckeditor/js/views/KeyboardView.es6.js b/core/modules/ckeditor/js/views/KeyboardView.es6.js
index f44764e3aa..094f390cd0 100644
--- a/core/modules/ckeditor/js/views/KeyboardView.es6.js
+++ b/core/modules/ckeditor/js/views/KeyboardView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, Backbone, _) {
-
-  'use strict';
-
   Drupal.ckeditor.KeyboardView = Backbone.View.extend(/** @lends Drupal.ckeditor.KeyboardView# */{
 
     /**
@@ -16,7 +13,7 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
+    initialize() {
       // Add keyboard arrow support.
       this.$el.on('keydown.ckeditor', '.ckeditor-buttons a, .ckeditor-multiple-buttons a', this.onPressButton.bind(this));
       this.$el.on('keydown.ckeditor', '[data-drupal-ckeditor-type="group"]', this.onPressGroup.bind(this));
@@ -25,7 +22,7 @@
     /**
      * @inheritdoc
      */
-    render: function () {
+    render() {
     },
 
     /**
@@ -34,18 +31,18 @@
      * @param {jQuery.Event} event
      *   The keypress event triggered.
      */
-    onPressButton: function (event) {
-      var upDownKeys = [
+    onPressButton(event) {
+      const upDownKeys = [
         38, // Up arrow.
         63232, // Safari up arrow.
         40, // Down arrow.
-        63233 // Safari down arrow.
+        63233, // Safari down arrow.
       ];
-      var leftRightKeys = [
+      const leftRightKeys = [
         37, // Left arrow.
         63234, // Safari left arrow.
         39, // Right arrow.
-        63235 // Safari right arrow.
+        63235, // Safari right arrow.
       ];
 
       // Respond to an enter key press. Prevent the bubbling of the enter key
@@ -56,19 +53,19 @@
 
       // Only take action when a direction key is pressed.
       if (_.indexOf(_.union(upDownKeys, leftRightKeys), event.keyCode) > -1) {
-        var view = this;
-        var $target = $(event.currentTarget);
-        var $button = $target.parent();
-        var $container = $button.parent();
-        var $group = $button.closest('.ckeditor-toolbar-group');
-        var $row;
-        var containerType = $container.data('drupal-ckeditor-button-sorting');
-        var $availableButtons = this.$el.find('[data-drupal-ckeditor-button-sorting="source"]');
-        var $activeButtons = this.$el.find('.ckeditor-toolbar-active');
+        let view = this;
+        let $target = $(event.currentTarget);
+        let $button = $target.parent();
+        const $container = $button.parent();
+        let $group = $button.closest('.ckeditor-toolbar-group');
+        let $row;
+        const containerType = $container.data('drupal-ckeditor-button-sorting');
+        const $availableButtons = this.$el.find('[data-drupal-ckeditor-button-sorting="source"]');
+        const $activeButtons = this.$el.find('.ckeditor-toolbar-active');
         // The current location of the button, just in case it needs to be put
         // back.
-        var $originalGroup = $group;
-        var dir;
+        const $originalGroup = $group;
+        let dir;
 
         // Move available buttons between their container and the active
         // toolbar.
@@ -85,8 +82,8 @@
           // Move buttons between sibling buttons in a group and between groups.
           if (_.indexOf(leftRightKeys, event.keyCode) > -1) {
             // Move left.
-            var $siblings = $container.children();
-            var index = $siblings.index($button);
+            const $siblings = $container.children();
+            const index = $siblings.index($button);
             if (_.indexOf([37, 63234], event.keyCode) > -1) {
               // Move between sibling buttons.
               if (index > 0) {
@@ -157,8 +154,7 @@
 
         view = this;
         // Attempt to move the button to the new toolbar position.
-        Drupal.ckeditor.registerButtonMove(this, $button, function (result) {
-
+        Drupal.ckeditor.registerButtonMove(this, $button, (result) => {
           // Put the button back if the registration failed.
           // If the button was in a row, then it was in the active toolbar
           // configuration. The button was probably placed in a new group, but
@@ -187,28 +183,28 @@
      * @param {jQuery.Event} event
      *   The keypress event triggered.
      */
-    onPressGroup: function (event) {
-      var upDownKeys = [
+    onPressGroup(event) {
+      const upDownKeys = [
         38, // Up arrow.
         63232, // Safari up arrow.
         40, // Down arrow.
-        63233 // Safari down arrow.
+        63233, // Safari down arrow.
       ];
-      var leftRightKeys = [
+      const leftRightKeys = [
         37, // Left arrow.
         63234, // Safari left arrow.
         39, // Right arrow.
-        63235 // Safari right arrow.
+        63235, // Safari right arrow.
       ];
 
       // Respond to an enter key press.
       if (event.keyCode === 13) {
-        var view = this;
+        const view = this;
         // Open the group renaming dialog in the next evaluation cycle so that
         // this event can be cancelled and the bubbling wiped out. Otherwise,
         // Firefox has issues because the page focus is shifted to the dialog
         // along with the keydown event.
-        window.setTimeout(function () {
+        window.setTimeout(() => {
           Drupal.ckeditor.openGroupNameDialog(view, $(event.currentTarget));
         }, 0);
         event.preventDefault();
@@ -217,11 +213,11 @@
 
       // Respond to direction key presses.
       if (_.indexOf(_.union(upDownKeys, leftRightKeys), event.keyCode) > -1) {
-        var $group = $(event.currentTarget);
-        var $container = $group.parent();
-        var $siblings = $container.children();
-        var index;
-        var dir;
+        const $group = $(event.currentTarget);
+        const $container = $group.parent();
+        const $siblings = $container.children();
+        let index;
+        let dir;
         // Move groups between sibling groups.
         if (_.indexOf(leftRightKeys, event.keyCode) > -1) {
           index = $siblings.index($group);
@@ -247,7 +243,6 @@
               $container.closest('.ckeditor-row').next().find('.ckeditor-toolbar-groups').prepend($group);
             }
           }
-
         }
         // Move groups between rows.
         else if (_.indexOf(upDownKeys, event.keyCode) > -1) {
@@ -260,7 +255,6 @@
         event.preventDefault();
         event.stopPropagation();
       }
-    }
+    },
   });
-
-})(jQuery, Drupal, Backbone, _);
+}(jQuery, Drupal, Backbone, _));
diff --git a/core/modules/ckeditor/js/views/VisualView.es6.js b/core/modules/ckeditor/js/views/VisualView.es6.js
index 2d8042ebbf..413e69be85 100644
--- a/core/modules/ckeditor/js/views/VisualView.es6.js
+++ b/core/modules/ckeditor/js/views/VisualView.es6.js
@@ -5,15 +5,12 @@
  */
 
 (function (Drupal, Backbone, $) {
-
-  'use strict';
-
   Drupal.ckeditor.VisualView = Backbone.View.extend(/** @lends Drupal.ckeditor.VisualView# */{
 
     events: {
       'click .ckeditor-toolbar-group-name': 'onGroupNameClick',
       'click .ckeditor-groupnames-toggle': 'onGroupNamesToggleClick',
-      'click .ckeditor-add-new-group button': 'onAddGroupButtonClick'
+      'click .ckeditor-add-new-group button': 'onAddGroupButtonClick',
     },
 
     /**
@@ -23,7 +20,7 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
+    initialize() {
       this.listenTo(this.model, 'change:isDirty change:groupNamesVisible', this.render);
 
       // Add a toggle for the button group names.
@@ -46,16 +43,16 @@
      * @return {Drupal.ckeditor.VisualView}
      *   The {@link Drupal.ckeditor.VisualView} object.
      */
-    render: function (model, value, changedAttributes) {
+    render(model, value, changedAttributes) {
       this.insertPlaceholders();
       this.applySorting();
 
       // Toggle button group names.
-      var groupNamesVisible = this.model.get('groupNamesVisible');
+      let groupNamesVisible = this.model.get('groupNamesVisible');
       // If a button was just placed in the active toolbar, ensure that the
       // button group names are visible.
       if (changedAttributes && changedAttributes.changes && changedAttributes.changes.isDirty) {
-        this.model.set({groupNamesVisible: true}, {silent: true});
+        this.model.set({ groupNamesVisible: true }, { silent: true });
         groupNamesVisible = true;
       }
       this.$el.find('[data-toolbar="active"]').toggleClass('ckeditor-group-names-are-visible', groupNamesVisible);
@@ -72,8 +69,8 @@
      * @param {jQuery.Event} event
      *   The click event on the button group.
      */
-    onGroupNameClick: function (event) {
-      var $group = $(event.currentTarget).closest('.ckeditor-toolbar-group');
+    onGroupNameClick(event) {
+      const $group = $(event.currentTarget).closest('.ckeditor-toolbar-group');
       Drupal.ckeditor.openGroupNameDialog(this, $group);
 
       event.stopPropagation();
@@ -86,7 +83,7 @@
      * @param {jQuery.Event} event
      *   The click event on the toggle button.
      */
-    onGroupNamesToggleClick: function (event) {
+    onGroupNamesToggleClick(event) {
       this.model.set('groupNamesVisible', !this.model.get('groupNamesVisible'));
       event.preventDefault();
     },
@@ -97,8 +94,7 @@
      * @param {jQuery.Event} event
      *   The event of the button click.
      */
-    onAddGroupButtonClick: function (event) {
-
+    onAddGroupButtonClick(event) {
       /**
        * Inserts a new button if the openGroupNameDialog function returns true.
        *
@@ -133,9 +129,9 @@
      *   A jQuery.ui.sortable argument that contains information about the
      *   elements involved in the sort action.
      */
-    endGroupDrag: function (event, ui) {
-      var view = this;
-      Drupal.ckeditor.registerGroupMove(this, ui.item, function (success) {
+    endGroupDrag(event, ui) {
+      const view = this;
+      Drupal.ckeditor.registerGroupMove(this, ui.item, (success) => {
         if (!success) {
           // Cancel any sorting in the configuration area.
           view.$el.find('.ckeditor-toolbar-configuration').find('.ui-sortable').sortable('cancel');
@@ -152,7 +148,7 @@
      *   A jQuery.ui.sortable argument that contains information about the
      *   elements involved in the sort action.
      */
-    startButtonDrag: function (event, ui) {
+    startButtonDrag(event, ui) {
       this.$el.find('a:focus').trigger('blur');
 
       // Show the button group names as soon as the user starts dragging.
@@ -168,9 +164,9 @@
      *   A jQuery.ui.sortable argument that contains information about the
      *   elements involved in the sort action.
      */
-    endButtonDrag: function (event, ui) {
-      var view = this;
-      Drupal.ckeditor.registerButtonMove(this, ui.item, function (success) {
+    endButtonDrag(event, ui) {
+      const view = this;
+      Drupal.ckeditor.registerButtonMove(this, ui.item, (success) => {
         if (!success) {
           // Cancel any sorting in the configuration area.
           view.$el.find('.ui-sortable').sortable('cancel');
@@ -184,7 +180,7 @@
     /**
      * Invokes jQuery.sortable() on new buttons and groups in a CKEditor config.
      */
-    applySorting: function () {
+    applySorting() {
       // Make the buttons sortable.
       this.$el.find('.ckeditor-buttons').not('.ui-sortable').sortable({
         // Change this to .ckeditor-toolbar-group-buttons.
@@ -195,7 +191,7 @@
         cursor: 'move',
         start: this.startButtonDrag.bind(this),
         // Sorting within a sortable.
-        stop: this.endButtonDrag.bind(this)
+        stop: this.endButtonDrag.bind(this),
       }).disableSelection();
 
       // Add the drag and drop functionality to button groups.
@@ -205,20 +201,20 @@
         placeholder: 'ckeditor-toolbar-group-placeholder',
         forcePlaceholderSize: true,
         cursor: 'move',
-        stop: this.endGroupDrag.bind(this)
+        stop: this.endGroupDrag.bind(this),
       });
 
       // Add the drag and drop functionality to buttons.
       this.$el.find('.ckeditor-multiple-buttons li').draggable({
         connectToSortable: '.ckeditor-toolbar-active .ckeditor-buttons',
-        helper: 'clone'
+        helper: 'clone',
       });
     },
 
     /**
      * Wraps the invocation of methods to insert blank groups and rows.
      */
-    insertPlaceholders: function () {
+    insertPlaceholders() {
       this.insertPlaceholderRow();
       this.insertNewGroupButtons();
     },
@@ -226,8 +222,8 @@
     /**
      * Inserts a blank row at the bottom of the CKEditor configuration.
      */
-    insertPlaceholderRow: function () {
-      var $rows = this.$el.find('.ckeditor-row');
+    insertPlaceholderRow() {
+      let $rows = this.$el.find('.ckeditor-row');
       // Add a placeholder row. to the end of the list if one does not exist.
       if (!$rows.eq(-1).hasClass('placeholder')) {
         this.$el
@@ -238,8 +234,8 @@
       // Update the $rows variable to include the new row.
       $rows = this.$el.find('.ckeditor-row');
       // Remove blank rows except the last one.
-      var len = $rows.length;
-      $rows.filter(function (index, row) {
+      const len = $rows.length;
+      $rows.filter((index, row) => {
         // Do not remove the last row.
         if (index + 1 === len) {
           return false;
@@ -253,12 +249,12 @@
     /**
      * Inserts a button in each row that will add a new CKEditor button group.
      */
-    insertNewGroupButtons: function () {
+    insertNewGroupButtons() {
       // Insert an add group button to each row.
       this.$el.find('.ckeditor-row').each(function () {
-        var $row = $(this);
-        var $groups = $row.find('.ckeditor-toolbar-group');
-        var $button = $row.find('.ckeditor-add-new-group');
+        const $row = $(this);
+        const $groups = $row.find('.ckeditor-toolbar-group');
+        const $button = $row.find('.ckeditor-add-new-group');
         if ($button.length === 0) {
           $row.children('.ckeditor-toolbar-groups').append(Drupal.theme('ckeditorNewButtonGroup'));
         }
@@ -267,7 +263,6 @@
           $button.appendTo($row.children('.ckeditor-toolbar-groups'));
         }
       });
-    }
+    },
   });
-
-})(Drupal, Backbone, jQuery);
+}(Drupal, Backbone, jQuery));
diff --git a/core/modules/ckeditor/tests/modules/js/ajax-css.es6.js b/core/modules/ckeditor/tests/modules/js/ajax-css.es6.js
index 142b4eea0f..af97a3bde5 100644
--- a/core/modules/ckeditor/tests/modules/js/ajax-css.es6.js
+++ b/core/modules/ckeditor/tests/modules/js/ajax-css.es6.js
@@ -4,12 +4,9 @@
  */
 
 (function (Drupal, ckeditor, editorSettings, $) {
-
-  'use strict';
-
   Drupal.behaviors.ajaxCssForm = {
 
-    attach: function (context) {
+    attach(context) {
       // Initialize an inline CKEditor on the #edit-inline element if it
       // isn't editable already.
       $(context)
@@ -18,7 +15,6 @@
         .each(function () {
           ckeditor.attachInlineEditor(this, editorSettings.formats.test_format);
         });
-    }
+    },
   };
-
-})(Drupal, Drupal.editors.ckeditor, drupalSettings.editor, jQuery);
+}(Drupal, Drupal.editors.ckeditor, drupalSettings.editor, jQuery));
diff --git a/core/modules/color/color.es6.js b/core/modules/color/color.es6.js
index 984f740126..c8668cfbf5 100644
--- a/core/modules/color/color.es6.js
+++ b/core/modules/color/color.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Displays farbtastic color selector and initialize color administration UI.
    *
@@ -16,26 +13,26 @@
    *   Attach color selection behavior to relevant context.
    */
   Drupal.behaviors.color = {
-    attach: function (context, settings) {
-      var i;
-      var j;
-      var colors;
+    attach(context, settings) {
+      let i;
+      let j;
+      let colors;
       // This behavior attaches by ID, so is only valid once on a page.
-      var form = $(context).find('#system-theme-settings .color-form').once('color');
+      const form = $(context).find('#system-theme-settings .color-form').once('color');
       if (form.length === 0) {
         return;
       }
-      var inputs = [];
-      var hooks = [];
-      var locks = [];
-      var focused = null;
+      const inputs = [];
+      const hooks = [];
+      const locks = [];
+      let focused = null;
 
       // Add Farbtastic.
       $('<div class="color-placeholder"></div>').once('color').prependTo(form);
-      var farb = $.farbtastic('.color-placeholder');
+      const farb = $.farbtastic('.color-placeholder');
 
       // Decode reference colors to HSL.
-      var reference = settings.color.reference;
+      const reference = settings.color.reference;
       for (i in reference) {
         if (reference.hasOwnProperty(i)) {
           reference[i] = farb.RGBToHSL(farb.unpack(reference[i]));
@@ -43,14 +40,14 @@
       }
 
       // Build a preview.
-      var height = [];
-      var width = [];
+      const height = [];
+      const width = [];
       // Loop through all defined gradients.
       for (i in settings.gradients) {
         if (settings.gradients.hasOwnProperty(i)) {
           // Add element to display the gradient.
-          $('.color-preview').once('color').append('<div id="gradient-' + i + '"></div>');
-          var gradient = $('.color-preview #gradient-' + i);
+          $('.color-preview').once('color').append(`<div id="gradient-${i}"></div>`);
+          const gradient = $(`.color-preview #gradient-${i}`);
           // Add height of current gradient to the list (divided by 10).
           height.push(parseInt(gradient.css('height'), 10) / 10);
           // Add width of current gradient to the list (divided by 10).
@@ -67,14 +64,14 @@
 
       // Set up colorScheme selector.
       form.find('#edit-scheme').on('change', function () {
-        var schemes = settings.color.schemes;
-        var colorScheme = this.options[this.selectedIndex].value;
+        const schemes = settings.color.schemes;
+        const colorScheme = this.options[this.selectedIndex].value;
         if (colorScheme !== '' && schemes[colorScheme]) {
           // Get colors of active scheme.
           colors = schemes[colorScheme];
-          for (var fieldName in colors) {
+          for (const fieldName in colors) {
             if (colors.hasOwnProperty(fieldName)) {
-              callback($('#edit-palette-' + fieldName), colors[fieldName], false, true);
+              callback($(`#edit-palette-${fieldName}`), colors[fieldName], false, true);
             }
           }
           preview();
@@ -110,7 +107,7 @@
        *   A hex color, shifted.
        */
       function shift_color(given, ref1, ref2) {
-        var d;
+        let d;
         // Convert to HSL.
         given = farb.RGBToHSL(farb.unpack(given));
 
@@ -162,11 +159,11 @@
        *   the color.
        */
       function callback(input, color, propagate, colorScheme) {
-        var matched;
+        let matched;
         // Set background/foreground colors.
         $(input).css({
           backgroundColor: color,
-          color: farb.RGBToHSL(farb.unpack(color))[2] > 0.5 ? '#000' : '#fff'
+          color: farb.RGBToHSL(farb.unpack(color))[2] > 0.5 ? '#000' : '#fff',
         });
 
         // Change input value.
@@ -218,7 +215,7 @@
        *   The focus event on the field.
        */
       function focus(e) {
-        var input = e.target;
+        const input = e.target;
         // Remove old bindings.
         if (focused) {
           $(focused).off('keyup', farb.updateValue)
@@ -228,7 +225,9 @@
 
         // Add new bindings.
         focused = input;
-        farb.linkTo(function (color) { callback(input, color, true, false); });
+        farb.linkTo((color) => {
+          callback(input, color, true, false);
+        });
         farb.setColor(input.value);
         $(focused).on('keyup', farb.updateValue).on('keyup', preview).on('keyup', resetScheme)
           .parent().addClass('item-selected');
@@ -241,30 +240,30 @@
           this.key = this.id.substring(13);
 
           // Link to color picker temporarily to initialize.
-          farb.linkTo(function () {}).setColor('#000').linkTo(this);
+          farb.linkTo(() => {}).setColor('#000').linkTo(this);
 
           // Add lock.
-          var i = inputs.length;
+          const i = inputs.length;
           if (inputs.length) {
-            var toggleClick = true;
-            var lock = $('<button class="color-palette__lock">' + Drupal.t('Unlock') + '</button>').on('click', function (e) {
+            let toggleClick = true;
+            const lock = $(`<button class="color-palette__lock">${Drupal.t('Unlock')}</button>`).on('click', function (e) {
               e.preventDefault();
               if (toggleClick) {
                 $(this).addClass('is-unlocked').html(Drupal.t('Lock'));
                 $(hooks[i - 1]).attr('class',
-                  locks[i - 2] && $(locks[i - 2]).is(':not(.is-unlocked)') ? 'color-palette__hook is-up' : 'color-palette__hook'
+                  locks[i - 2] && $(locks[i - 2]).is(':not(.is-unlocked)') ? 'color-palette__hook is-up' : 'color-palette__hook',
                 );
                 $(hooks[i]).attr('class',
-                  locks[i] && $(locks[i]).is(':not(.is-unlocked)') ? 'color-palette__hook is-down' : 'color-palette__hook'
+                  locks[i] && $(locks[i]).is(':not(.is-unlocked)') ? 'color-palette__hook is-down' : 'color-palette__hook',
                 );
               }
               else {
                 $(this).removeClass('is-unlocked').html(Drupal.t('Unlock'));
                 $(hooks[i - 1]).attr('class',
-                  locks[i - 2] && $(locks[i - 2]).is(':not(.is-unlocked)') ? 'color-palette__hook is-both' : 'color-palette__hook is-down'
+                  locks[i - 2] && $(locks[i - 2]).is(':not(.is-unlocked)') ? 'color-palette__hook is-both' : 'color-palette__hook is-down',
                 );
                 $(hooks[i]).attr('class',
-                  locks[i] && $(locks[i]).is(':not(.is-unlocked)') ? 'color-palette__hook is-both' : 'color-palette__hook is-up'
+                  locks[i] && $(locks[i]).is(':not(.is-unlocked)') ? 'color-palette__hook is-both' : 'color-palette__hook is-up',
                 );
               }
               toggleClick = !toggleClick;
@@ -274,7 +273,7 @@
           }
 
           // Add hook.
-          var hook = $('<div class="color-palette__hook"></div>');
+          const hook = $('<div class="color-palette__hook"></div>');
           $(this).after(hook);
           hooks.push(hook);
 
@@ -291,7 +290,6 @@
 
       // Render preview.
       preview();
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/color/preview.es6.js b/core/modules/color/preview.es6.js
index 38c62aef26..357a62680b 100644
--- a/core/modules/color/preview.es6.js
+++ b/core/modules/color/preview.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Namespace for color-related functionality for Drupal.
    *
@@ -30,9 +27,9 @@
      * @param {number} width
      *   Width of gradient.
      */
-    callback: function (context, settings, form, farb, height, width) {
-      var accum;
-      var delta;
+    callback(context, settings, form, farb, height, width) {
+      let accum;
+      let delta;
       // Solid background.
       form.find('.color-preview').css('backgroundColor', form.find('.color-palette input[name="palette[base]"]').val());
 
@@ -41,7 +38,7 @@
       form.find('#text a, #text h2').css('color', form.find('.color-palette input[name="palette[link]"]').val());
 
       function gradientLineColor(i, element) {
-        for (var k in accum) {
+        for (const k in accum) {
           if (accum.hasOwnProperty(k)) {
             accum[k] += delta[k];
           }
@@ -50,25 +47,25 @@
       }
 
       // Set up gradients if there are some.
-      var color_start;
-      var color_end;
-      for (var i in settings.gradients) {
+      let color_start;
+      let color_end;
+      for (const i in settings.gradients) {
         if (settings.gradients.hasOwnProperty(i)) {
-          color_start = farb.unpack(form.find('.color-palette input[name="palette[' + settings.gradients[i].colors[0] + ']"]').val());
-          color_end = farb.unpack(form.find('.color-palette input[name="palette[' + settings.gradients[i].colors[1] + ']"]').val());
+          color_start = farb.unpack(form.find(`.color-palette input[name="palette[${settings.gradients[i].colors[0]}]"]`).val());
+          color_end = farb.unpack(form.find(`.color-palette input[name="palette[${settings.gradients[i].colors[1]}]"]`).val());
           if (color_start && color_end) {
             delta = [];
-            for (var j in color_start) {
+            for (const j in color_start) {
               if (color_start.hasOwnProperty(j)) {
                 delta[j] = (color_end[j] - color_start[j]) / (settings.gradients[i].vertical ? height[i] : width[i]);
               }
             }
             accum = color_start;
             // Render gradient lines.
-            form.find('#gradient-' + i + ' > div').each(gradientLineColor);
+            form.find(`#gradient-${i} > div`).each(gradientLineColor);
           }
         }
       }
-    }
+    },
   };
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/color/tests/modules/color_test/themes/color_test_theme/js/color_test_theme-fontsize.es6.js b/core/modules/color/tests/modules/color_test/themes/color_test_theme/js/color_test_theme-fontsize.es6.js
index 232428164a..1095df1bff 100644
--- a/core/modules/color/tests/modules/color_test/themes/color_test_theme/js/color_test_theme-fontsize.es6.js
+++ b/core/modules/color/tests/modules/color_test/themes/color_test_theme/js/color_test_theme-fontsize.es6.js
@@ -3,7 +3,5 @@
  * Adds javascript functions for font resizing.
  */
 (function ($) {
-  'use strict';
-
-  $(document).ready(function () {});
-})(jQuery);
+  $(document).ready(() => {});
+}(jQuery));
diff --git a/core/modules/comment/comment-entity-form.es6.js b/core/modules/comment/comment-entity-form.es6.js
index fd16d8bfb0..00a3404ab3 100644
--- a/core/modules/comment/comment-entity-form.es6.js
+++ b/core/modules/comment/comment-entity-form.es6.js
@@ -4,20 +4,14 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    *
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.commentFieldsetSummaries = {
-    attach: function (context) {
-      var $context = $(context);
-      $context.find('fieldset.comment-entity-settings-form').drupalSetSummary(function (context) {
-        return Drupal.checkPlain($(context).find('.js-form-item-comment input:checked').next('label').text());
-      });
-    }
+    attach(context) {
+      const $context = $(context);
+      $context.find('fieldset.comment-entity-settings-form').drupalSetSummary(context => Drupal.checkPlain($(context).find('.js-form-item-comment input:checked').next('label').text()));
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/comment/js/comment-by-viewer.es6.js b/core/modules/comment/js/comment-by-viewer.es6.js
index 22d4b54561..db561539a9 100644
--- a/core/modules/comment/js/comment-by-viewer.es6.js
+++ b/core/modules/comment/js/comment-by-viewer.es6.js
@@ -4,23 +4,19 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Add 'by-viewer' class to comments written by the current user.
    *
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.commentByViewer = {
-    attach: function (context) {
-      var currentUserID = parseInt(drupalSettings.user.uid, 10);
+    attach(context) {
+      const currentUserID = parseInt(drupalSettings.user.uid, 10);
       $('[data-comment-user-id]')
         .filter(function () {
           return parseInt(this.getAttribute('data-comment-user-id'), 10) === currentUserID;
         })
         .addClass('by-viewer');
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/comment/js/comment-new-indicator.es6.js b/core/modules/comment/js/comment-new-indicator.es6.js
index d5f0a4f45c..dd1fadf3ad 100644
--- a/core/modules/comment/js/comment-new-indicator.es6.js
+++ b/core/modules/comment/js/comment-new-indicator.es6.js
@@ -7,9 +7,6 @@
  */
 
 (function ($, Drupal, window) {
-
-  'use strict';
-
   /**
    * Renders "new" comment indicators wherever necessary.
    *
@@ -19,25 +16,24 @@
    *   Attaches "new" comment indicators behavior.
    */
   Drupal.behaviors.commentNewIndicator = {
-    attach: function (context) {
+    attach(context) {
       // Collect all "new" comment indicator placeholders (and their
       // corresponding node IDs) newer than 30 days ago that have not already
       // been read after their last comment timestamp.
-      var nodeIDs = [];
-      var $placeholders = $(context)
+      const nodeIDs = [];
+      const $placeholders = $(context)
         .find('[data-comment-timestamp]')
         .once('history')
         .filter(function () {
-          var $placeholder = $(this);
-          var commentTimestamp = parseInt($placeholder.attr('data-comment-timestamp'), 10);
-          var nodeID = $placeholder.closest('[data-history-node-id]').attr('data-history-node-id');
+          const $placeholder = $(this);
+          const commentTimestamp = parseInt($placeholder.attr('data-comment-timestamp'), 10);
+          const nodeID = $placeholder.closest('[data-history-node-id]').attr('data-history-node-id');
           if (Drupal.history.needsServerCheck(nodeID, commentTimestamp)) {
             nodeIDs.push(nodeID);
             return true;
           }
-          else {
-            return false;
-          }
+
+          return false;
         });
 
       if ($placeholders.length === 0) {
@@ -45,10 +41,10 @@
       }
 
       // Fetch the node read timestamps from the server.
-      Drupal.history.fetchTimestamps(nodeIDs, function () {
+      Drupal.history.fetchTimestamps(nodeIDs, () => {
         processCommentNewIndicators($placeholders);
       });
-    }
+    },
   };
 
   /**
@@ -58,20 +54,20 @@
    *   The elements that should be processed.
    */
   function processCommentNewIndicators($placeholders) {
-    var isFirstNewComment = true;
-    var newCommentString = Drupal.t('new');
-    var $placeholder;
+    let isFirstNewComment = true;
+    const newCommentString = Drupal.t('new');
+    let $placeholder;
 
-    $placeholders.each(function (index, placeholder) {
+    $placeholders.each((index, placeholder) => {
       $placeholder = $(placeholder);
-      var timestamp = parseInt($placeholder.attr('data-comment-timestamp'), 10);
-      var $node = $placeholder.closest('[data-history-node-id]');
-      var nodeID = $node.attr('data-history-node-id');
-      var lastViewTimestamp = Drupal.history.getLastRead(nodeID);
+      const timestamp = parseInt($placeholder.attr('data-comment-timestamp'), 10);
+      const $node = $placeholder.closest('[data-history-node-id]');
+      const nodeID = $node.attr('data-history-node-id');
+      const lastViewTimestamp = Drupal.history.getLastRead(nodeID);
 
       if (timestamp > lastViewTimestamp) {
         // Turn the placeholder into an actual "new" indicator.
-        var $comment = $(placeholder)
+        const $comment = $(placeholder)
           .removeClass('hidden')
           .text(newCommentString)
           .closest('.js-comment')
@@ -92,5 +88,4 @@
       }
     });
   }
-
-})(jQuery, Drupal, window);
+}(jQuery, Drupal, window));
diff --git a/core/modules/comment/js/node-new-comments-link.es6.js b/core/modules/comment/js/node-new-comments-link.es6.js
index 291bcbd116..9f1588fd99 100644
--- a/core/modules/comment/js/node-new-comments-link.es6.js
+++ b/core/modules/comment/js/node-new-comments-link.es6.js
@@ -7,9 +7,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Render "X new comments" links wherever necessary.
    *
@@ -19,30 +16,29 @@
    *   Attaches new comment links behavior.
    */
   Drupal.behaviors.nodeNewCommentsLink = {
-    attach: function (context) {
+    attach(context) {
       // Collect all "X new comments" node link placeholders (and their
       // corresponding node IDs) newer than 30 days ago that have not already
       // been read after their last comment timestamp.
-      var nodeIDs = [];
-      var $placeholders = $(context)
+      const nodeIDs = [];
+      const $placeholders = $(context)
         .find('[data-history-node-last-comment-timestamp]')
         .once('history')
         .filter(function () {
-          var $placeholder = $(this);
-          var lastCommentTimestamp = parseInt($placeholder.attr('data-history-node-last-comment-timestamp'), 10);
-          var nodeID = $placeholder.closest('[data-history-node-id]').attr('data-history-node-id');
+          const $placeholder = $(this);
+          const lastCommentTimestamp = parseInt($placeholder.attr('data-history-node-last-comment-timestamp'), 10);
+          const nodeID = $placeholder.closest('[data-history-node-id]').attr('data-history-node-id');
           if (Drupal.history.needsServerCheck(nodeID, lastCommentTimestamp)) {
             nodeIDs.push(nodeID);
             // Hide this placeholder link until it is certain we'll need it.
             hide($placeholder);
             return true;
           }
-          else {
+
             // Remove this placeholder link from the DOM because we won't need
             // it.
-            remove($placeholder);
-            return false;
-          }
+          remove($placeholder);
+          return false;
         });
 
       if ($placeholders.length === 0) {
@@ -50,10 +46,10 @@
       }
 
       // Perform an AJAX request to retrieve node read timestamps.
-      Drupal.history.fetchTimestamps(nodeIDs, function () {
+      Drupal.history.fetchTimestamps(nodeIDs, () => {
         processNodeNewCommentLinks($placeholders);
       });
-    }
+    },
   };
 
   /**
@@ -112,15 +108,15 @@
    */
   function processNodeNewCommentLinks($placeholders) {
     // Figure out which placeholders need the "x new comments" links.
-    var $placeholdersToUpdate = {};
-    var fieldName = 'comment';
-    var $placeholder;
-    $placeholders.each(function (index, placeholder) {
+    const $placeholdersToUpdate = {};
+    let fieldName = 'comment';
+    let $placeholder;
+    $placeholders.each((index, placeholder) => {
       $placeholder = $(placeholder);
-      var timestamp = parseInt($placeholder.attr('data-history-node-last-comment-timestamp'), 10);
+      const timestamp = parseInt($placeholder.attr('data-history-node-last-comment-timestamp'), 10);
       fieldName = $placeholder.attr('data-history-node-field-name');
-      var nodeID = $placeholder.closest('[data-history-node-id]').attr('data-history-node-id');
-      var lastViewTimestamp = Drupal.history.getLastRead(nodeID);
+      const nodeID = $placeholder.closest('[data-history-node-id]').attr('data-history-node-id');
+      const lastViewTimestamp = Drupal.history.getLastRead(nodeID);
 
       // Queue this placeholder's "X new comments" link to be downloaded from
       // the server.
@@ -134,7 +130,7 @@
     });
 
     // Perform an AJAX request to retrieve node view timestamps.
-    var nodeIDs = Object.keys($placeholdersToUpdate);
+    const nodeIDs = Object.keys($placeholdersToUpdate);
     if (nodeIDs.length === 0) {
       return;
     }
@@ -149,7 +145,7 @@
      *   Data about new comment links indexed by nodeID.
      */
     function render(results) {
-      for (var nodeID in results) {
+      for (const nodeID in results) {
         if (results.hasOwnProperty(nodeID) && $placeholdersToUpdate.hasOwnProperty(nodeID)) {
           $placeholdersToUpdate[nodeID]
             .attr('href', results[nodeID].first_new_comment_link)
@@ -167,11 +163,10 @@
       $.ajax({
         url: Drupal.url('comments/render_new_comments_node_links'),
         type: 'POST',
-        data: {'node_ids[]': nodeIDs, 'field_name': fieldName},
+        data: { 'node_ids[]': nodeIDs, field_name: fieldName },
         dataType: 'json',
-        success: render
+        success: render,
       });
     }
   }
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/content_translation/content_translation.admin.es6.js b/core/modules/content_translation/content_translation.admin.es6.js
index fcbf699f73..1b9e952840 100644
--- a/core/modules/content_translation/content_translation.admin.es6.js
+++ b/core/modules/content_translation/content_translation.admin.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Forces applicable options to be checked as translatable.
    *
@@ -16,11 +13,11 @@
    *   Attaches content translation dependent options to the UI.
    */
   Drupal.behaviors.contentTranslationDependentOptions = {
-    attach: function (context) {
-      var $context = $(context);
-      var options = drupalSettings.contentTranslationDependentOptions;
-      var $fields;
-      var dependent_columns;
+    attach(context) {
+      const $context = $(context);
+      const options = drupalSettings.contentTranslationDependentOptions;
+      let $fields;
+      let dependent_columns;
 
       function fieldsChangeHandler($fields, dependent_columns) {
         return function (e) {
@@ -32,9 +29,9 @@
       // that name and copy over the input values that require all columns to be
       // translatable.
       if (options && options.dependent_selectors) {
-        for (var field in options.dependent_selectors) {
+        for (const field in options.dependent_selectors) {
           if (options.dependent_selectors.hasOwnProperty(field)) {
-            $fields = $context.find('input[name^="' + field + '"]');
+            $fields = $context.find(`input[name^="${field}"]`);
             dependent_columns = options.dependent_selectors[field];
 
             $fields.on('change', fieldsChangeHandler($fields, dependent_columns));
@@ -43,9 +40,9 @@
         }
       }
     },
-    check: function ($fields, dependent_columns, $changed) {
-      var $element = $changed;
-      var column;
+    check($fields, dependent_columns, $changed) {
+      let $element = $changed;
+      let column;
 
       function filterFieldsList(index, field) {
         return $(field).val() === column;
@@ -53,7 +50,7 @@
 
       // A field that has many different translatable parts can also define one
       // or more columns that require all columns to be translatable.
-      for (var index in dependent_columns) {
+      for (const index in dependent_columns) {
         if (dependent_columns.hasOwnProperty(index)) {
           column = dependent_columns[index];
 
@@ -61,17 +58,16 @@
             $element = $fields.filter(filterFieldsList);
           }
 
-          if ($element.is('input[value="' + column + '"]:checked')) {
+          if ($element.is(`input[value="${column}"]:checked`)) {
             $fields.prop('checked', true)
               .not($element).prop('disabled', true);
           }
           else {
             $fields.prop('disabled', false);
           }
-
         }
       }
-    }
+    },
   };
 
   /**
@@ -83,12 +79,12 @@
    *   Attaches content translation behavior.
    */
   Drupal.behaviors.contentTranslation = {
-    attach: function (context) {
+    attach(context) {
       // Initially hide all field rows for non translatable bundles and all
       // column rows for non translatable fields.
       $(context).find('table .bundle-settings .translatable :input').once('translation-entity-admin-hide').each(function () {
-        var $input = $(this);
-        var $bundleSettings = $input.closest('.bundle-settings');
+        const $input = $(this);
+        const $bundleSettings = $input.closest('.bundle-settings');
         if (!$input.is(':checked')) {
           $bundleSettings.nextUntil('.bundle-settings').hide();
         }
@@ -100,11 +96,11 @@
       // When a bundle is made translatable all of its fields should inherit
       // this setting. Instead when it is made non translatable its fields are
       // hidden, since their translatability no longer matters.
-      $('body').once('translation-entity-admin-bind').on('click', 'table .bundle-settings .translatable :input', function (e) {
-        var $target = $(e.target);
-        var $bundleSettings = $target.closest('.bundle-settings');
-        var $settings = $bundleSettings.nextUntil('.bundle-settings');
-        var $fieldSettings = $settings.filter('.field-settings');
+      $('body').once('translation-entity-admin-bind').on('click', 'table .bundle-settings .translatable :input', (e) => {
+        const $target = $(e.target);
+        const $bundleSettings = $target.closest('.bundle-settings');
+        const $settings = $bundleSettings.nextUntil('.bundle-settings');
+        const $fieldSettings = $settings.filter('.field-settings');
         if ($target.is(':checked')) {
           $bundleSettings.find('.operations :input[name$="[language_alterable]"]').prop('checked', true);
           $fieldSettings.find('.translatable :input').prop('checked', true);
@@ -114,10 +110,10 @@
           $settings.hide();
         }
       })
-        .on('click', 'table .field-settings .translatable :input', function (e) {
-          var $target = $(e.target);
-          var $fieldSettings = $target.closest('.field-settings');
-          var $columnSettings = $fieldSettings.nextUntil('.field-settings, .bundle-settings');
+        .on('click', 'table .field-settings .translatable :input', (e) => {
+          const $target = $(e.target);
+          const $fieldSettings = $target.closest('.field-settings');
+          const $columnSettings = $fieldSettings.nextUntil('.field-settings, .bundle-settings');
           if ($target.is(':checked')) {
             $columnSettings.show();
           }
@@ -125,7 +121,6 @@
             $columnSettings.hide();
           }
         });
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/contextual/js/contextual.es6.js b/core/modules/contextual/js/contextual.es6.js
index 558ea105cc..e231e80b95 100644
--- a/core/modules/contextual/js/contextual.es6.js
+++ b/core/modules/contextual/js/contextual.es6.js
@@ -4,26 +4,23 @@
  */
 
 (function ($, Drupal, drupalSettings, _, Backbone, JSON, storage) {
-
-  'use strict';
-
-  var options = $.extend(drupalSettings.contextual,
+  const options = $.extend(drupalSettings.contextual,
     // Merge strings on top of drupalSettings so that they are not mutable.
     {
       strings: {
         open: Drupal.t('Open'),
-        close: Drupal.t('Close')
-      }
-    }
+        close: Drupal.t('Close'),
+      },
+    },
   );
 
   // Clear the cached contextual links whenever the current user's set of
   // permissions changes.
-  var cachedPermissionsHash = storage.getItem('Drupal.contextual.permissionsHash');
-  var permissionsHash = drupalSettings.user.permissionsHash;
+  const cachedPermissionsHash = storage.getItem('Drupal.contextual.permissionsHash');
+  const permissionsHash = drupalSettings.user.permissionsHash;
   if (cachedPermissionsHash !== permissionsHash) {
     if (typeof permissionsHash === 'string') {
-      _.chain(storage).keys().each(function (key) {
+      _.chain(storage).keys().each((key) => {
         if (key.substring(0, 18) === 'Drupal.contextual.') {
           storage.removeItem(key);
         }
@@ -42,8 +39,8 @@
    *   The server-side rendered HTML for this contextual link.
    */
   function initContextual($contextual, html) {
-    var $region = $contextual.closest('.contextual-region');
-    var contextual = Drupal.contextual;
+    const $region = $contextual.closest('.contextual-region');
+    const contextual = Drupal.contextual;
 
     $contextual
       // Update the placeholder to contain its rendered contextual links.
@@ -55,25 +52,25 @@
       .prepend(Drupal.theme('contextualTrigger'));
 
     // Set the destination parameter on each of the contextual links.
-    var destination = 'destination=' + Drupal.encodePath(drupalSettings.path.currentPath);
+    const destination = `destination=${Drupal.encodePath(drupalSettings.path.currentPath)}`;
     $contextual.find('.contextual-links a').each(function () {
-      var url = this.getAttribute('href');
-      var glue = (url.indexOf('?') === -1) ? '?' : '&';
+      const url = this.getAttribute('href');
+      const glue = (url.indexOf('?') === -1) ? '?' : '&';
       this.setAttribute('href', url + glue + destination);
     });
 
     // Create a model and the appropriate views.
-    var model = new contextual.StateModel({
-      title: $region.find('h2').eq(0).text().trim()
+    const model = new contextual.StateModel({
+      title: $region.find('h2').eq(0).text().trim(),
     });
-    var viewOptions = $.extend({el: $contextual, model: model}, options);
+    const viewOptions = $.extend({ el: $contextual, model }, options);
     contextual.views.push({
       visual: new contextual.VisualView(viewOptions),
       aural: new contextual.AuralView(viewOptions),
-      keyboard: new contextual.KeyboardView(viewOptions)
+      keyboard: new contextual.KeyboardView(viewOptions),
     });
     contextual.regionViews.push(new contextual.RegionView(
-      $.extend({el: $region, model: model}, options))
+      $.extend({ el: $region, model }, options)),
     );
 
     // Add the model to the collection. This must happen after the views have
@@ -84,8 +81,8 @@
     // Let other JavaScript react to the adding of a new contextual link.
     $(document).trigger('drupalContextualLinkAdded', {
       $el: $contextual,
-      $region: $region,
-      model: model
+      $region,
+      model,
     });
 
     // Fix visual collisions between contextual link triggers.
@@ -102,7 +99,7 @@
    *   contextual links as rendered by the server.
    */
   function adjustIfNestedAndOverlapping($contextual) {
-    var $contextuals = $contextual
+    const $contextuals = $contextual
       // @todo confirm that .closest() is not sufficient
       .parents('.contextual-region').eq(-1)
       .find('.contextual');
@@ -113,14 +110,14 @@
     }
 
     // If the two contextual links overlap, then we move the second one.
-    var firstTop = $contextuals.eq(0).offset().top;
-    var secondTop = $contextuals.eq(1).offset().top;
+    const firstTop = $contextuals.eq(0).offset().top;
+    const secondTop = $contextuals.eq(1).offset().top;
     if (firstTop === secondTop) {
-      var $nestedContextual = $contextuals.eq(1);
+      const $nestedContextual = $contextuals.eq(1);
 
       // Retrieve height of nested contextual link.
-      var height = 0;
-      var $trigger = $nestedContextual.find('.trigger');
+      let height = 0;
+      const $trigger = $nestedContextual.find('.trigger');
       // Elements with the .visually-hidden class have no dimensions, so this
       // class must be temporarily removed to the calculate the height.
       $trigger.removeClass('visually-hidden');
@@ -128,7 +125,7 @@
       $trigger.addClass('visually-hidden');
 
       // Adjust nested contextual link's position.
-      $nestedContextual.css({top: $nestedContextual.position().top + height});
+      $nestedContextual.css({ top: $nestedContextual.position().top + height });
     }
   }
 
@@ -145,32 +142,32 @@
    *  Attaches the outline behavior to the right context.
    */
   Drupal.behaviors.contextual = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
 
       // Find all contextual links placeholders, if any.
-      var $placeholders = $context.find('[data-contextual-id]').once('contextual-render');
+      let $placeholders = $context.find('[data-contextual-id]').once('contextual-render');
       if ($placeholders.length === 0) {
         return;
       }
 
       // Collect the IDs for all contextual links placeholders.
-      var ids = [];
+      const ids = [];
       $placeholders.each(function () {
         ids.push($(this).attr('data-contextual-id'));
       });
 
       // Update all contextual links placeholders whose HTML is cached.
-      var uncachedIDs = _.filter(ids, function initIfCached(contextualID) {
-        var html = storage.getItem('Drupal.contextual.' + contextualID);
+      const uncachedIDs = _.filter(ids, (contextualID) => {
+        const html = storage.getItem(`Drupal.contextual.${contextualID}`);
         if (html && html.length) {
           // Initialize after the current execution cycle, to make the AJAX
           // request for retrieving the uncached contextual links as soon as
           // possible, but also to ensure that other Drupal behaviors have had
           // the chance to set up an event listener on the Backbone collection
           // Drupal.contextual.collection.
-          window.setTimeout(function () {
-            initContextual($context.find('[data-contextual-id="' + contextualID + '"]'), html);
+          window.setTimeout(() => {
+            initContextual($context.find(`[data-contextual-id="${contextualID}"]`), html);
           });
           return false;
         }
@@ -183,12 +180,12 @@
         $.ajax({
           url: Drupal.url('contextual/render'),
           type: 'POST',
-          data: {'ids[]': uncachedIDs},
+          data: { 'ids[]': uncachedIDs },
           dataType: 'json',
-          success: function (results) {
-            _.each(results, function (html, contextualID) {
+          success(results) {
+            _.each(results, (html, contextualID) => {
               // Store the metadata.
-              storage.setItem('Drupal.contextual.' + contextualID, html);
+              storage.setItem(`Drupal.contextual.${contextualID}`, html);
               // If the rendered contextual links are empty, then the current
               // user does not have permission to access the associated links:
               // don't render anything.
@@ -198,18 +195,18 @@
                 // possible for multiple identical placeholders exist on the
                 // page (probably because the same content appears more than
                 // once).
-                $placeholders = $context.find('[data-contextual-id="' + contextualID + '"]');
+                $placeholders = $context.find(`[data-contextual-id="${contextualID}"]`);
 
                 // Initialize the contextual links.
-                for (var i = 0; i < $placeholders.length; i++) {
+                for (let i = 0; i < $placeholders.length; i++) {
                   initContextual($placeholders.eq(i), html);
                 }
               }
             });
-          }
+          },
         });
       }
-    }
+    },
   };
 
   /**
@@ -233,7 +230,7 @@
      *
      * @type {Array}
      */
-    regionViews: []
+    regionViews: [],
   };
 
   /**
@@ -241,7 +238,7 @@
    *
    * @type {Backbone.Collection}
    */
-  Drupal.contextual.collection = new Backbone.Collection([], {model: Drupal.contextual.StateModel});
+  Drupal.contextual.collection = new Backbone.Collection([], { model: Drupal.contextual.StateModel });
 
   /**
    * A trigger is an interactive element often bound to a click handler.
@@ -252,5 +249,4 @@
   Drupal.theme.contextualTrigger = function () {
     return '<button class="trigger visually-hidden focusable" type="button"></button>';
   };
-
-})(jQuery, Drupal, drupalSettings, _, Backbone, window.JSON, window.sessionStorage);
+}(jQuery, Drupal, drupalSettings, _, Backbone, window.JSON, window.sessionStorage));
diff --git a/core/modules/contextual/js/contextual.toolbar.es6.js b/core/modules/contextual/js/contextual.toolbar.es6.js
index b5a9053490..7d0ae12073 100644
--- a/core/modules/contextual/js/contextual.toolbar.es6.js
+++ b/core/modules/contextual/js/contextual.toolbar.es6.js
@@ -4,13 +4,10 @@
  */
 
 (function ($, Drupal, Backbone) {
-
-  'use strict';
-
-  var strings = {
+  const strings = {
     tabbingReleased: Drupal.t('Tabbing is no longer constrained by the Contextual module.'),
     tabbingConstrained: Drupal.t('Tabbing is constrained to a set of @contextualsCount and the edit mode toggle.'),
-    pressEsc: Drupal.t('Press the esc key to exit.')
+    pressEsc: Drupal.t('Press the esc key to exit.'),
   };
 
   /**
@@ -24,20 +21,20 @@
       return;
     }
 
-    var contextualToolbar = Drupal.contextualToolbar;
-    var model = contextualToolbar.model = new contextualToolbar.StateModel({
+    const contextualToolbar = Drupal.contextualToolbar;
+    const model = contextualToolbar.model = new contextualToolbar.StateModel({
       // Checks whether localStorage indicates we should start in edit mode
       // rather than view mode.
       // @see Drupal.contextualToolbar.VisualView.persist
-      isViewing: localStorage.getItem('Drupal.contextualToolbar.isViewing') !== 'false'
+      isViewing: localStorage.getItem('Drupal.contextualToolbar.isViewing') !== 'false',
     }, {
-      contextualCollection: Drupal.contextual.collection
+      contextualCollection: Drupal.contextual.collection,
     });
 
-    var viewOptions = {
+    const viewOptions = {
       el: $('.toolbar .toolbar-bar .contextual-toolbar-tab'),
-      model: model,
-      strings: strings
+      model,
+      strings,
     };
     new contextualToolbar.VisualView(viewOptions);
     new contextualToolbar.AuralView(viewOptions);
@@ -52,11 +49,11 @@
    *   Attaches contextual toolbar behavior on a contextualToolbar-init event.
    */
   Drupal.behaviors.contextualToolbar = {
-    attach: function (context) {
+    attach(context) {
       if ($('body').once('contextualToolbar-init').length) {
         initContextualToolbar(context);
       }
-    }
+    },
   };
 
   /**
@@ -71,7 +68,6 @@
      *
      * @type {?Drupal.contextualToolbar.StateModel}
      */
-    model: null
+    model: null,
   };
-
-})(jQuery, Drupal, Backbone);
+}(jQuery, Drupal, Backbone));
diff --git a/core/modules/contextual/js/models/StateModel.es6.js b/core/modules/contextual/js/models/StateModel.es6.js
index 465d717d56..2eab4a6352 100644
--- a/core/modules/contextual/js/models/StateModel.es6.js
+++ b/core/modules/contextual/js/models/StateModel.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, Backbone) {
-
-  'use strict';
-
   /**
    * Models the state of a contextual link's trigger, list & region.
    *
@@ -61,7 +58,7 @@
        *
        * @type {bool}
        */
-      isLocked: false
+      isLocked: false,
     },
 
     /**
@@ -72,8 +69,8 @@
      * @return {Drupal.contextual.StateModel}
      *   The current contextual state model.
      */
-    toggleOpen: function () {
-      var newIsOpen = !this.get('isOpen');
+    toggleOpen() {
+      const newIsOpen = !this.get('isOpen');
       this.set('isOpen', newIsOpen);
       if (newIsOpen) {
         this.focus();
@@ -90,7 +87,7 @@
      * @return {Drupal.contextual.StateModel}
      *   The current contextual state model.
      */
-    close: function () {
+    close() {
       this.set('isOpen', false);
       return this;
     },
@@ -103,10 +100,10 @@
      * @return {Drupal.contextual.StateModel}
      *   The current contextual state model.
      */
-    focus: function () {
+    focus() {
       this.set('hasFocus', true);
-      var cid = this.cid;
-      this.collection.each(function (model) {
+      const cid = this.cid;
+      this.collection.each((model) => {
         if (model.cid !== cid) {
           model.close().blur();
         }
@@ -120,13 +117,12 @@
      * @return {Drupal.contextual.StateModel}
      *   The current contextual state model.
      */
-    blur: function () {
+    blur() {
       if (!this.get('isOpen')) {
         this.set('hasFocus', false);
       }
       return this;
-    }
+    },
 
   });
-
-})(Drupal, Backbone);
+}(Drupal, Backbone));
diff --git a/core/modules/contextual/js/toolbar/models/StateModel.es6.js b/core/modules/contextual/js/toolbar/models/StateModel.es6.js
index d9159e4e97..0a1b161468 100644
--- a/core/modules/contextual/js/toolbar/models/StateModel.es6.js
+++ b/core/modules/contextual/js/toolbar/models/StateModel.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, Backbone) {
-
-  'use strict';
-
   Drupal.contextualToolbar.StateModel = Backbone.Model.extend(/** @lends Drupal.contextualToolbar.StateModel# */{
 
     /**
@@ -47,7 +44,7 @@
        *
        * @type {?Drupal~TabbingContext}
        */
-      tabbingContext: null
+      tabbingContext: null,
     },
 
     /**
@@ -65,7 +62,7 @@
      *   The collection of {@link Drupal.contextual.StateModel} models that
      *   represent the contextual links on the page.
      */
-    initialize: function (attrs, options) {
+    initialize(attrs, options) {
       // Respond to new/removed contextual links.
       this.listenTo(options.contextualCollection, 'reset remove add', this.countContextualLinks);
       this.listenTo(options.contextualCollection, 'add', this.lockNewContextualLinks);
@@ -74,8 +71,8 @@
       this.listenTo(this, 'change:contextualCount', this.updateVisibility);
 
       // Whenever edit mode is toggled, lock all contextual links.
-      this.listenTo(this, 'change:isViewing', function (model, isViewing) {
-        options.contextualCollection.each(function (contextualModel) {
+      this.listenTo(this, 'change:isViewing', (model, isViewing) => {
+        options.contextualCollection.each((contextualModel) => {
           contextualModel.set('isLocked', !isViewing);
         });
       });
@@ -89,7 +86,7 @@
      * @param {Backbone.Collection} contextualCollection
      *    The collection of contextual link models.
      */
-    countContextualLinks: function (contextualModel, contextualCollection) {
+    countContextualLinks(contextualModel, contextualCollection) {
       this.set('contextualCount', contextualCollection.length);
     },
 
@@ -101,7 +98,7 @@
      * @param {Backbone.Collection} [contextualCollection]
      *    The collection of contextual link models.
      */
-    lockNewContextualLinks: function (contextualModel, contextualCollection) {
+    lockNewContextualLinks(contextualModel, contextualCollection) {
       if (!this.get('isViewing')) {
         contextualModel.set('isLocked', true);
       }
@@ -110,10 +107,9 @@
     /**
      * Automatically updates visibility of the view/edit mode toggle.
      */
-    updateVisibility: function () {
+    updateVisibility() {
       this.set('isVisible', this.get('contextualCount') > 0);
-    }
+    },
 
   });
-
-})(Drupal, Backbone);
+}(Drupal, Backbone));
diff --git a/core/modules/contextual/js/toolbar/views/AuralView.es6.js b/core/modules/contextual/js/toolbar/views/AuralView.es6.js
index 66fbbd8dcd..f243e4bd34 100644
--- a/core/modules/contextual/js/toolbar/views/AuralView.es6.js
+++ b/core/modules/contextual/js/toolbar/views/AuralView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, Backbone, _) {
-
-  'use strict';
-
   Drupal.contextualToolbar.AuralView = Backbone.View.extend(/** @lends Drupal.contextualToolbar.AuralView# */{
 
     /**
@@ -26,7 +23,7 @@
      * @param {object} options
      *   Options for the view.
      */
-    initialize: function (options) {
+    initialize(options) {
       this.options = options;
 
       this.listenTo(this.model, 'change', this.render);
@@ -41,7 +38,7 @@
      * @return {Drupal.contextualToolbar.AuralView}
      *   The current contextual toolbar aural view.
      */
-    render: function () {
+    render() {
       // Render the state.
       this.$el.find('button').attr('aria-pressed', !this.model.get('isViewing'));
 
@@ -51,8 +48,8 @@
     /**
      * Limits tabbing to the contextual links and edit mode toolbar tab.
      */
-    manageTabbing: function () {
-      var tabbingContext = this.model.get('tabbingContext');
+    manageTabbing() {
+      let tabbingContext = this.model.get('tabbingContext');
       // Always release an existing tabbing context.
       if (tabbingContext) {
         // Only announce release when the context was active.
@@ -73,10 +70,10 @@
     /**
      * Announces the current tabbing constraint.
      */
-    announceTabbingConstraint: function () {
-      var strings = this.options.strings;
+    announceTabbingConstraint() {
+      const strings = this.options.strings;
       Drupal.announce(Drupal.formatString(strings.tabbingConstrained, {
-        '@contextualsCount': Drupal.formatPlural(Drupal.contextual.collection.length, '@count contextual link', '@count contextual links')
+        '@contextualsCount': Drupal.formatPlural(Drupal.contextual.collection.length, '@count contextual link', '@count contextual links'),
       }));
       Drupal.announce(strings.pressEsc);
     },
@@ -87,7 +84,7 @@
      * @param {jQuery.Event} event
      *   The keypress event.
      */
-    onKeypress: function (event) {
+    onKeypress(event) {
       // The first tab key press is tracked so that an annoucement about tabbing
       // constraints can be raised if edit mode is enabled when the page is
       // loaded.
@@ -100,8 +97,7 @@
       if (event.keyCode === 27) {
         this.model.set('isViewing', true);
       }
-    }
+    },
 
   });
-
-})(jQuery, Drupal, Backbone, _);
+}(jQuery, Drupal, Backbone, _));
diff --git a/core/modules/contextual/js/toolbar/views/VisualView.es6.js b/core/modules/contextual/js/toolbar/views/VisualView.es6.js
index d1d413502d..56bae27859 100644
--- a/core/modules/contextual/js/toolbar/views/VisualView.es6.js
+++ b/core/modules/contextual/js/toolbar/views/VisualView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, Backbone) {
-
-  'use strict';
-
   Drupal.contextualToolbar.VisualView = Backbone.View.extend(/** @lends Drupal.contextualToolbar.VisualView# */{
 
     /**
@@ -15,18 +12,18 @@
      * @return {object}
      *   A mapping of events to be used in the view.
      */
-    events: function () {
+    events() {
       // Prevents delay and simulated mouse events.
-      var touchEndToClick = function (event) {
+      const touchEndToClick = function (event) {
         event.preventDefault();
         event.target.click();
       };
 
       return {
-        click: function () {
+        click() {
           this.model.set('isViewing', !this.model.get('isViewing'));
         },
-        touchend: touchEndToClick
+        touchend: touchEndToClick,
       };
     },
 
@@ -39,7 +36,7 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
+    initialize() {
       this.listenTo(this.model, 'change', this.render);
       this.listenTo(this.model, 'change:isViewing', this.persist);
     },
@@ -50,7 +47,7 @@
      * @return {Drupal.contextualToolbar.VisualView}
      *   The current contextual toolbar visual view.
      */
-    render: function () {
+    render() {
       // Render the visibility.
       this.$el.toggleClass('hidden', !this.model.get('isVisible'));
       // Render the state.
@@ -70,15 +67,14 @@
      * @param {bool} isViewing
      *   The value of the isViewing attribute in the model.
      */
-    persist: function (model, isViewing) {
+    persist(model, isViewing) {
       if (!isViewing) {
         localStorage.setItem('Drupal.contextualToolbar.isViewing', 'false');
       }
       else {
         localStorage.removeItem('Drupal.contextualToolbar.isViewing');
       }
-    }
+    },
 
   });
-
-})(Drupal, Backbone);
+}(Drupal, Backbone));
diff --git a/core/modules/contextual/js/views/AuralView.es6.js b/core/modules/contextual/js/views/AuralView.es6.js
index 8ba2e33e34..0141b04ba1 100644
--- a/core/modules/contextual/js/views/AuralView.es6.js
+++ b/core/modules/contextual/js/views/AuralView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, Backbone) {
-
-  'use strict';
-
   Drupal.contextual.AuralView = Backbone.View.extend(/** @lends Drupal.contextual.AuralView# */{
 
     /**
@@ -19,7 +16,7 @@
      * @param {object} options
      *   Options for the view.
      */
-    initialize: function (options) {
+    initialize(options) {
       this.options = options;
 
       this.listenTo(this.model, 'change', this.render);
@@ -34,8 +31,8 @@
     /**
      * @inheritdoc
      */
-    render: function () {
-      var isOpen = this.model.get('isOpen');
+    render() {
+      const isOpen = this.model.get('isOpen');
 
       // Set the hidden property of the links.
       this.$el.find('.contextual-links')
@@ -45,11 +42,10 @@
       this.$el.find('.trigger')
         .text(Drupal.t('@action @title configuration options', {
           '@action': (!isOpen) ? this.options.strings.open : this.options.strings.close,
-          '@title': this.model.get('title')
+          '@title': this.model.get('title'),
         }))
         .attr('aria-pressed', isOpen);
-    }
+    },
 
   });
-
-})(Drupal, Backbone);
+}(Drupal, Backbone));
diff --git a/core/modules/contextual/js/views/KeyboardView.es6.js b/core/modules/contextual/js/views/KeyboardView.es6.js
index 9c247730e3..908b249593 100644
--- a/core/modules/contextual/js/views/KeyboardView.es6.js
+++ b/core/modules/contextual/js/views/KeyboardView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, Backbone) {
-
-  'use strict';
-
   Drupal.contextual.KeyboardView = Backbone.View.extend(/** @lends Drupal.contextual.KeyboardView# */{
 
     /**
@@ -15,15 +12,17 @@
     events: {
       'focus .trigger': 'focus',
       'focus .contextual-links a': 'focus',
-      'blur .trigger': function () { this.model.blur(); },
+      'blur .trigger': function () {
+        this.model.blur();
+      },
       'blur .contextual-links a': function () {
         // Set up a timeout to allow a user to tab between the trigger and the
         // contextual links without the menu dismissing.
-        var that = this;
-        this.timer = window.setTimeout(function () {
+        const that = this;
+        this.timer = window.setTimeout(() => {
           that.model.close().blur();
         }, 150);
-      }
+      },
     },
 
     /**
@@ -33,8 +32,7 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
-
+    initialize() {
       /**
        * The timer is used to create a delay before dismissing the contextual
        * links on blur. This is only necessary when keyboard users tab into
@@ -50,12 +48,11 @@
     /**
      * Sets focus on the model; Clears the timer that dismisses the links.
      */
-    focus: function () {
+    focus() {
       // Clear the timeout that might have been set by blurring a link.
       window.clearTimeout(this.timer);
       this.model.focus();
-    }
+    },
 
   });
-
-})(Drupal, Backbone);
+}(Drupal, Backbone));
diff --git a/core/modules/contextual/js/views/RegionView.es6.js b/core/modules/contextual/js/views/RegionView.es6.js
index e960db36bf..c1d3e8fe37 100644
--- a/core/modules/contextual/js/views/RegionView.es6.js
+++ b/core/modules/contextual/js/views/RegionView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, Backbone, Modernizr) {
-
-  'use strict';
-
   Drupal.contextual.RegionView = Backbone.View.extend(/** @lends Drupal.contextual.RegionView# */{
 
     /**
@@ -15,12 +12,14 @@
      * @return {object}
      *   A mapping of events to be used in the view.
      */
-    events: function () {
-      var mapping = {
-        mouseenter: function () { this.model.set('regionIsHovered', true); },
-        mouseleave: function () {
+    events() {
+      let mapping = {
+        mouseenter() {
+          this.model.set('regionIsHovered', true);
+        },
+        mouseleave() {
           this.model.close().blur().set('regionIsHovered', false);
-        }
+        },
       };
       // We don't want mouse hover events on touch.
       if (Modernizr.touchevents) {
@@ -36,7 +35,7 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
+    initialize() {
       this.listenTo(this.model, 'change:hasFocus', this.render);
     },
 
@@ -46,12 +45,11 @@
      * @return {Drupal.contextual.RegionView}
      *   The current contextual region view.
      */
-    render: function () {
+    render() {
       this.$el.toggleClass('focus', this.model.get('hasFocus'));
 
       return this;
-    }
+    },
 
   });
-
-})(Drupal, Backbone, Modernizr);
+}(Drupal, Backbone, Modernizr));
diff --git a/core/modules/contextual/js/views/VisualView.es6.js b/core/modules/contextual/js/views/VisualView.es6.js
index b22bb373dd..385fa7deca 100644
--- a/core/modules/contextual/js/views/VisualView.es6.js
+++ b/core/modules/contextual/js/views/VisualView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, Backbone, Modernizr) {
-
-  'use strict';
-
   Drupal.contextual.VisualView = Backbone.View.extend(/** @lends Drupal.contextual.VisualView# */{
 
     /**
@@ -15,21 +12,27 @@
      * @return {object}
      *   A mapping of events to be used in the view.
      */
-    events: function () {
+    events() {
       // Prevents delay and simulated mouse events.
-      var touchEndToClick = function (event) {
+      const touchEndToClick = function (event) {
         event.preventDefault();
         event.target.click();
       };
-      var mapping = {
-        'click .trigger': function () { this.model.toggleOpen(); },
+      const mapping = {
+        'click .trigger': function () {
+          this.model.toggleOpen();
+        },
         'touchend .trigger': touchEndToClick,
-        'click .contextual-links a': function () { this.model.close().blur(); },
-        'touchend .contextual-links a': touchEndToClick
+        'click .contextual-links a': function () {
+          this.model.close().blur();
+        },
+        'touchend .contextual-links a': touchEndToClick,
       };
       // We only want mouse hover events on non-touch.
       if (!Modernizr.touchevents) {
-        mapping.mouseenter = function () { this.model.focus(); };
+        mapping.mouseenter = function () {
+          this.model.focus();
+        };
       }
       return mapping;
     },
@@ -41,7 +44,7 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
+    initialize() {
       this.listenTo(this.model, 'change', this.render);
     },
 
@@ -51,13 +54,13 @@
      * @return {Drupal.contextual.VisualView}
      *   The current contextual visual view.
      */
-    render: function () {
-      var isOpen = this.model.get('isOpen');
+    render() {
+      const isOpen = this.model.get('isOpen');
       // The trigger should be visible when:
       //  - the mouse hovered over the region,
       //  - the trigger is locked,
       //  - and for as long as the contextual menu is open.
-      var isVisible = this.model.get('isLocked') || this.model.get('regionIsHovered') || isOpen;
+      const isVisible = this.model.get('isLocked') || this.model.get('regionIsHovered') || isOpen;
 
       this.$el
         // The open state determines if the links are visible.
@@ -73,8 +76,7 @@
       }
 
       return this;
-    }
+    },
 
   });
-
-})(Drupal, Backbone, Modernizr);
+}(Drupal, Backbone, Modernizr));
diff --git a/core/modules/editor/js/editor.admin.es6.js b/core/modules/editor/js/editor.admin.es6.js
index 1fdb353202..b02fe8bc44 100644
--- a/core/modules/editor/js/editor.admin.es6.js
+++ b/core/modules/editor/js/editor.admin.es6.js
@@ -8,9 +8,6 @@
  */
 
 (function ($, _, Drupal, document) {
-
-  'use strict';
-
   /**
    * Editor configuration namespace.
    *
@@ -30,7 +27,7 @@
      *
      * @fires event:drupalEditorFeatureAdded
      */
-    addedFeature: function (feature) {
+    addedFeature(feature) {
       $(document).trigger('drupalEditorFeatureAdded', feature);
     },
 
@@ -46,7 +43,7 @@
      *
      * @fires event:drupalEditorFeatureRemoved
      */
-    removedFeature: function (feature) {
+    removedFeature(feature) {
       $(document).trigger('drupalEditorFeatureRemoved', feature);
     },
 
@@ -65,7 +62,7 @@
      *
      * @fires event:drupalEditorFeatureModified
      */
-    modifiedFeature: function (feature) {
+    modifiedFeature(feature) {
       $(document).trigger('drupalEditorFeatureModified', feature);
     },
 
@@ -90,8 +87,7 @@
      * @return {bool}
      *   Whether the given feature is allowed by the current filters.
      */
-    featureIsAllowedByFilters: function (feature) {
-
+    featureIsAllowedByFilters(feature) {
       /**
        * Generate the universe U of possible values that can result from the
        * feature's rules' requirements.
@@ -143,16 +139,16 @@
        * @see filterStatusAllowsFeature()
        */
       function generateUniverseFromFeatureRequirements(feature) {
-        var properties = ['attributes', 'styles', 'classes'];
-        var universe = {};
+        const properties = ['attributes', 'styles', 'classes'];
+        const universe = {};
 
-        for (var r = 0; r < feature.rules.length; r++) {
-          var featureRule = feature.rules[r];
+        for (let r = 0; r < feature.rules.length; r++) {
+          const featureRule = feature.rules[r];
 
           // For each tag required by this feature rule, create a basic entry in
           // the universe.
-          var requiredTags = featureRule.required.tags;
-          for (var t = 0; t < requiredTags.length; t++) {
+          const requiredTags = featureRule.required.tags;
+          for (let t = 0; t < requiredTags.length; t++) {
             universe[requiredTags[t]] = {
               // Whether this tag was allowed or not.
               tag: false,
@@ -161,7 +157,7 @@
               // allowed property rule.
               touchedByAllowedPropertyRule: false,
               // Analogous, but for forbidden property rule.
-              touchedBytouchedByForbiddenPropertyRule: false
+              touchedBytouchedByForbiddenPropertyRule: false,
             };
           }
 
@@ -174,11 +170,11 @@
           // Expand the existing universe, assume that each tags' property
           // value is disallowed. If the filter rules allow everything in the
           // feature's universe, then the feature is allowed.
-          for (var p = 0; p < properties.length; p++) {
-            var property = properties[p];
-            for (var pv = 0; pv < featureRule.required[property].length; pv++) {
-              var propertyValue = featureRule.required[property];
-              universe[requiredTags][property + ':' + propertyValue] = false;
+          for (let p = 0; p < properties.length; p++) {
+            const property = properties[p];
+            for (let pv = 0; pv < featureRule.required[property].length; pv++) {
+              const propertyValue = featureRule.required[property];
+              universe[requiredTags][`${property}:${propertyValue}`] = false;
             }
           }
         }
@@ -225,8 +221,8 @@
           return findPropertyValuesOnAllTags(universe, property, propertyValues, allowing);
         }
 
-        var atLeastOneFound = false;
-        _.each(propertyValues, function (propertyValue) {
+        let atLeastOneFound = false;
+        _.each(propertyValues, (propertyValue) => {
           if (findPropertyValueOnTag(universe, tag, property, propertyValue, allowing)) {
             atLeastOneFound = true;
           }
@@ -250,8 +246,8 @@
        *   Returns true if found, false otherwise.
        */
       function findPropertyValuesOnAllTags(universe, property, propertyValues, allowing) {
-        var atLeastOneFound = false;
-        _.each(_.keys(universe), function (tag) {
+        let atLeastOneFound = false;
+        _.each(_.keys(universe), (tag) => {
           if (findPropertyValuesOnTag(universe, tag, property, propertyValues, allowing)) {
             atLeastOneFound = true;
           }
@@ -286,7 +282,7 @@
           return false;
         }
 
-        var key = property + ':' + propertyValue;
+        const key = `${property}:${propertyValue}`;
 
         // Track whether a tag was touched by a filter rule that allows specific
         // property values on this particular tag.
@@ -306,19 +302,18 @@
           return false;
         }
         // The complex case: wildcard in property value.
-        else {
-          var atLeastOneFound = false;
-          var regex = key.replace(/\*/g, '[^ ]*');
-          _.each(_.keys(universe[tag]), function (key) {
-            if (key.match(regex)) {
-              atLeastOneFound = true;
-              if (allowing) {
-                universe[tag][key] = true;
-              }
+
+        let atLeastOneFound = false;
+        const regex = key.replace(/\*/g, '[^ ]*');
+        _.each(_.keys(universe[tag]), (key) => {
+          if (key.match(regex)) {
+            atLeastOneFound = true;
+            if (allowing) {
+              universe[tag][key] = true;
             }
-          });
-          return atLeastOneFound;
-        }
+          }
+        });
+        return atLeastOneFound;
       }
 
       /**
@@ -355,8 +350,8 @@
        *   Whether something was deleted from the universe.
        */
       function deleteAllTagsFromUniverseIfAllowed(universe) {
-        var atLeastOneDeleted = false;
-        _.each(_.keys(universe), function (tag) {
+        let atLeastOneDeleted = false;
+        _.each(_.keys(universe), (tag) => {
           if (deleteFromUniverseIfAllowed(universe, tag)) {
             atLeastOneDeleted = true;
           }
@@ -377,12 +372,12 @@
        *   Whether any filter rule forbids something in the universe.
        */
       function anyForbiddenFilterRuleMatches(universe, filterStatus) {
-        var properties = ['attributes', 'styles', 'classes'];
+        const properties = ['attributes', 'styles', 'classes'];
 
         // Check if a tag in the universe is forbidden.
-        var allRequiredTags = _.keys(universe);
-        var filterRule;
-        for (var i = 0; i < filterStatus.rules.length; i++) {
+        const allRequiredTags = _.keys(universe);
+        let filterRule;
+        for (let i = 0; i < filterStatus.rules.length; i++) {
           filterRule = filterStatus.rules[i];
           if (filterRule.allow === false) {
             if (_.intersection(allRequiredTags, filterRule.tags).length > 0) {
@@ -393,16 +388,16 @@
 
         // Check if a property value of a tag in the universe is forbidden.
         // For all filter rules…
-        for (var n = 0; n < filterStatus.rules.length; n++) {
+        for (let n = 0; n < filterStatus.rules.length; n++) {
           filterRule = filterStatus.rules[n];
           // … if there are tags with restricted property values …
           if (filterRule.restrictedTags.tags.length && !emptyProperties(filterRule.restrictedTags.forbidden)) {
             // … for all those tags …
-            for (var j = 0; j < filterRule.restrictedTags.tags.length; j++) {
-              var tag = filterRule.restrictedTags.tags[j];
+            for (let j = 0; j < filterRule.restrictedTags.tags.length; j++) {
+              const tag = filterRule.restrictedTags.tags[j];
               // … then iterate over all properties …
-              for (var k = 0; k < properties.length; k++) {
-                var property = properties[k];
+              for (let k = 0; k < properties.length; k++) {
+                const property = properties[k];
                 // … and return true if just one of the forbidden property
                 // values for this tag and property is listed in the universe.
                 if (findPropertyValuesOnTag(universe, tag, property, filterRule.restrictedTags.forbidden[property], false)) {
@@ -428,15 +423,15 @@
        *   The filter status in question.
        */
       function markAllowedTagsAndPropertyValues(universe, filterStatus) {
-        var properties = ['attributes', 'styles', 'classes'];
+        const properties = ['attributes', 'styles', 'classes'];
 
         // Check if a tag in the universe is allowed.
-        var filterRule;
-        var tag;
-        for (var l = 0; !_.isEmpty(universe) && l < filterStatus.rules.length; l++) {
+        let filterRule;
+        let tag;
+        for (let l = 0; !_.isEmpty(universe) && l < filterStatus.rules.length; l++) {
           filterRule = filterStatus.rules[l];
           if (filterRule.allow === true) {
-            for (var m = 0; !_.isEmpty(universe) && m < filterRule.tags.length; m++) {
+            for (let m = 0; !_.isEmpty(universe) && m < filterRule.tags.length; m++) {
               tag = filterRule.tags[m];
               if (_.has(universe, tag)) {
                 universe[tag].tag = true;
@@ -448,16 +443,16 @@
 
         // Check if a property value of a tag in the universe is allowed.
         // For all filter rules…
-        for (var i = 0; !_.isEmpty(universe) && i < filterStatus.rules.length; i++) {
+        for (let i = 0; !_.isEmpty(universe) && i < filterStatus.rules.length; i++) {
           filterRule = filterStatus.rules[i];
           // … if there are tags with restricted property values …
           if (filterRule.restrictedTags.tags.length && !emptyProperties(filterRule.restrictedTags.allowed)) {
             // … for all those tags …
-            for (var j = 0; !_.isEmpty(universe) && j < filterRule.restrictedTags.tags.length; j++) {
+            for (let j = 0; !_.isEmpty(universe) && j < filterRule.restrictedTags.tags.length; j++) {
               tag = filterRule.restrictedTags.tags[j];
               // … then iterate over all properties …
-              for (var k = 0; k < properties.length; k++) {
-                var property = properties[k];
+              for (let k = 0; k < properties.length; k++) {
+                const property = properties[k];
                 // … and try to delete this tag from the universe if just one
                 // of the allowed property values for this tag and property is
                 // listed in the universe. (Because everything might be allowed
@@ -506,7 +501,7 @@
 
         // Generate the universe U of possible values that can result from the
         // feature's rules' requirements.
-        var universe = generateUniverseFromFeatureRequirements(feature);
+        const universe = generateUniverseFromFeatureRequirements(feature);
 
         // If anything that is in the universe (and is thus required by the
         // feature) is forbidden by any of the filter's rules, then this filter
@@ -534,12 +529,12 @@
             return true;
           }
           // Otherwise, it is still possible that this feature is allowed.
-          else {
+
             // Every tag must be explicitly allowed if there are filter rules
             // doing tag whitelisting.
-            if (!_.every(_.pluck(universe, 'tag'))) {
-              return false;
-            }
+          if (!_.every(_.pluck(universe, 'tag'))) {
+            return false;
+          }
             // Every tag was explicitly allowed, but since the universe is not
             // empty, one or more tag properties are disallowed. However, if
             // only blacklisting of tag properties was applied to these tags,
@@ -548,36 +543,33 @@
             // this point, and since no whitelisting was applied, it doesn't
             // matter that the properties: this could never have happened
             // anyway. It's only this late that we can know this for certain.
-            else {
-              var tags = _.keys(universe);
+
+          const tags = _.keys(universe);
               // Figure out if there was any rule applying whitelisting tag
               // restrictions to each of the remaining tags.
-              for (var i = 0; i < tags.length; i++) {
-                var tag = tags[i];
-                if (_.has(universe, tag)) {
-                  if (universe[tag].touchedByAllowedPropertyRule === false) {
-                    delete universe[tag];
-                  }
-                }
+          for (let i = 0; i < tags.length; i++) {
+            const tag = tags[i];
+            if (_.has(universe, tag)) {
+              if (universe[tag].touchedByAllowedPropertyRule === false) {
+                delete universe[tag];
               }
-              return _.isEmpty(universe);
             }
           }
+          return _.isEmpty(universe);
         }
         // Otherwise, if all filter rules were doing blacklisting, then the sole
         // fact that we got to this point indicates that this filter allows for
         // everything that is required for this feature.
-        else {
-          return true;
-        }
+
+        return true;
       }
 
       // If any filter's current status forbids the editor feature, return
       // false.
       Drupal.filterConfiguration.update();
-      for (var filterID in Drupal.filterConfiguration.statuses) {
+      for (const filterID in Drupal.filterConfiguration.statuses) {
         if (Drupal.filterConfiguration.statuses.hasOwnProperty(filterID)) {
-          var filterStatus = Drupal.filterConfiguration.statuses[filterID];
+          const filterStatus = Drupal.filterConfiguration.statuses[filterID];
           if (!(filterStatusAllowsFeature(filterStatus, feature))) {
             return false;
           }
@@ -585,7 +577,7 @@
       }
 
       return true;
-    }
+    },
   };
 
   /**
@@ -620,7 +612,6 @@
    * @see Drupal.EditorFeature
    */
   Drupal.EditorFeatureHTMLRule = function () {
-
     /**
      *
      * @type {object}
@@ -630,7 +621,7 @@
      * @prop {Array} styles
      * @prop {Array} classes
      */
-    this.required = {tags: [], attributes: [], styles: [], classes: []};
+    this.required = { tags: [], attributes: [], styles: [], classes: [] };
 
     /**
      *
@@ -641,7 +632,7 @@
      * @prop {Array} styles
      * @prop {Array} classes
      */
-    this.allowed = {tags: [], attributes: [], styles: [], classes: []};
+    this.allowed = { tags: [], attributes: [], styles: [], classes: [] };
 
     /**
      *
@@ -715,7 +706,6 @@
    * @see Drupal.FilterHTMLRule
    */
   Drupal.FilterStatus = function (name) {
-
     /**
      *
      * @type {string}
@@ -828,15 +818,15 @@
     // Apply restrictions to properties set on tags.
     this.restrictedTags = {
       tags: [],
-      allowed: {attributes: [], styles: [], classes: []},
-      forbidden: {attributes: [], styles: [], classes: []}
+      allowed: { attributes: [], styles: [], classes: [] },
+      forbidden: { attributes: [], styles: [], classes: [] },
     };
 
     return this;
   };
 
   Drupal.FilterHTMLRule.prototype.clone = function () {
-    var clone = new Drupal.FilterHTMLRule();
+    const clone = new Drupal.FilterHTMLRule();
     clone.tags = this.tags.slice(0);
     clone.allow = this.allow;
     clone.restrictedTags.tags = this.restrictedTags.tags.slice(0);
@@ -888,11 +878,11 @@
      * keep the HTML rules for the {@link Drupal.FilterStatus} object
      * up-to-date.
      */
-    update: function () {
-      for (var filterID in Drupal.filterConfiguration.statuses) {
+    update() {
+      for (const filterID in Drupal.filterConfiguration.statuses) {
         if (Drupal.filterConfiguration.statuses.hasOwnProperty(filterID)) {
           // Update status.
-          Drupal.filterConfiguration.statuses[filterID].active = $('[name="filters[' + filterID + '][status]"]').is(':checked');
+          Drupal.filterConfiguration.statuses[filterID].active = $(`[name="filters[${filterID}][status]"]`).is(':checked');
 
           // Update current rules.
           if (Drupal.filterConfiguration.liveSettingParsers[filterID]) {
@@ -900,7 +890,7 @@
           }
         }
       }
-    }
+    },
 
   };
 
@@ -913,23 +903,22 @@
    *   Gets filter configuration from filter form input.
    */
   Drupal.behaviors.initializeFilterConfiguration = {
-    attach: function (context, settings) {
-      var $context = $(context);
+    attach(context, settings) {
+      const $context = $(context);
 
       $context.find('#filters-status-wrapper input.form-checkbox').once('filter-editor-status').each(function () {
-        var $checkbox = $(this);
-        var nameAttribute = $checkbox.attr('name');
+        const $checkbox = $(this);
+        const nameAttribute = $checkbox.attr('name');
 
         // The filter's checkbox has a name attribute of the form
         // "filters[<name of filter>][status]", parse "<name of filter>"
         // from it.
-        var filterID = nameAttribute.substring(8, nameAttribute.indexOf(']'));
+        const filterID = nameAttribute.substring(8, nameAttribute.indexOf(']'));
 
         // Create a Drupal.FilterStatus object to track the state (whether it's
         // active or not and its current settings, if any) of each filter.
         Drupal.filterConfiguration.statuses[filterID] = new Drupal.FilterStatus(filterID);
       });
-    }
+    },
   };
-
-})(jQuery, _, Drupal, document);
+}(jQuery, _, Drupal, document));
diff --git a/core/modules/editor/js/editor.dialog.es6.js b/core/modules/editor/js/editor.dialog.es6.js
index 3bf6120c7a..498ee28b94 100644
--- a/core/modules/editor/js/editor.dialog.es6.js
+++ b/core/modules/editor/js/editor.dialog.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Command to save the contents of an editor-provided modal.
    *
@@ -30,5 +27,4 @@
   Drupal.AjaxCommands.prototype.editorDialogSave = function (ajax, response, status) {
     $(window).trigger('editor:dialogsave', [response.values]);
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/editor/js/editor.es6.js b/core/modules/editor/js/editor.es6.js
index 2be16f57c5..03c50d958c 100644
--- a/core/modules/editor/js/editor.es6.js
+++ b/core/modules/editor/js/editor.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Finds the text area field associated with the given text format selector.
    *
@@ -17,10 +14,10 @@
    *   The text area DOM element, if it was found.
    */
   function findFieldForFormatSelector($formatSelector) {
-    var field_id = $formatSelector.attr('data-editor-for');
+    const field_id = $formatSelector.attr('data-editor-for');
     // This selector will only find text areas in the top-level document. We do
     // not support attaching editors on text areas within iframes.
-    return $('#' + field_id).get(0);
+    return $(`#${field_id}`).get(0);
   }
 
   /**
@@ -34,7 +31,7 @@
    *   format will be attached.
    */
   function changeTextEditor(field, newFormatID) {
-    var previousFormatID = field.getAttribute('data-editor-active-text-format');
+    const previousFormatID = field.getAttribute('data-editor-active-text-format');
 
     // Detach the current editor (if any) and attach a new editor.
     if (drupalSettings.editor.formats[previousFormatID]) {
@@ -47,7 +44,7 @@
 
     // Attach the new text editor (if any).
     if (drupalSettings.editor.formats[newFormatID]) {
-      var format = drupalSettings.editor.formats[newFormatID];
+      const format = drupalSettings.editor.formats[newFormatID];
       filterXssWhenSwitching(field, format, previousFormatID, Drupal.editorAttach);
     }
 
@@ -62,10 +59,10 @@
    *   The text format change event.
    */
   function onTextFormatChange(event) {
-    var $select = $(event.target);
-    var field = event.data.field;
-    var activeFormatID = field.getAttribute('data-editor-active-text-format');
-    var newFormatID = $select.val();
+    const $select = $(event.target);
+    const field = event.data.field;
+    const activeFormatID = field.getAttribute('data-editor-active-text-format');
+    const newFormatID = $select.val();
 
     // Prevent double-attaching if the change event is triggered manually.
     if (newFormatID === activeFormatID) {
@@ -76,14 +73,14 @@
     // with it that supports content filtering, then first ask for
     // confirmation, because switching text formats might cause certain
     // markup to be stripped away.
-    var supportContentFiltering = drupalSettings.editor.formats[newFormatID] && drupalSettings.editor.formats[newFormatID].editorSupportsContentFiltering;
+    const supportContentFiltering = drupalSettings.editor.formats[newFormatID] && drupalSettings.editor.formats[newFormatID].editorSupportsContentFiltering;
     // If there is no content yet, it's always safe to change the text format.
-    var hasContent = field.value !== '';
+    const hasContent = field.value !== '';
     if (hasContent && supportContentFiltering) {
-      var message = Drupal.t('Changing the text format to %text_format will permanently remove content that is not allowed in that text format.<br><br>Save your changes before switching the text format to avoid losing data.', {
-        '%text_format': $select.find('option:selected').text()
+      const message = Drupal.t('Changing the text format to %text_format will permanently remove content that is not allowed in that text format.<br><br>Save your changes before switching the text format to avoid losing data.', {
+        '%text_format': $select.find('option:selected').text(),
       });
-      var confirmationDialog = Drupal.dialog('<div>' + message + '</div>', {
+      var confirmationDialog = Drupal.dialog(`<div>${message}</div>`, {
         title: Drupal.t('Change text format?'),
         dialogClass: 'editor-change-text-format-modal',
         resizable: false,
@@ -91,35 +88,35 @@
           {
             text: Drupal.t('Continue'),
             class: 'button button--primary',
-            click: function () {
+            click() {
               changeTextEditor(field, newFormatID);
               confirmationDialog.close();
-            }
+            },
           },
           {
             text: Drupal.t('Cancel'),
             class: 'button',
-            click: function () {
+            click() {
               // Restore the active format ID: cancel changing text format. We
               // cannot simply call event.preventDefault() because jQuery's
               // change event is only triggered after the change has already
               // been accepted.
               $select.val(activeFormatID);
               confirmationDialog.close();
-            }
-          }
+            },
+          },
         ],
         // Prevent this modal from being closed without the user making a choice
         // as per http://stackoverflow.com/a/5438771.
         closeOnEscape: false,
-        create: function () {
+        create() {
           $(this).parent().find('.ui-dialog-titlebar-close').remove();
         },
         beforeClose: false,
-        close: function (event) {
+        close(event) {
           // Automatically destroy the DOM element that was used for the dialog.
           $(event.target).remove();
-        }
+        },
       });
 
       confirmationDialog.showModal();
@@ -147,15 +144,15 @@
    *   Detaches an editor from an input element.
    */
   Drupal.behaviors.editor = {
-    attach: function (context, settings) {
+    attach(context, settings) {
       // If there are no editor settings, there are no editors to enable.
       if (!settings.editor) {
         return;
       }
 
       $(context).find('[data-editor-for]').once('editor').each(function () {
-        var $this = $(this);
-        var field = findFieldForFormatSelector($this);
+        const $this = $(this);
+        const field = findFieldForFormatSelector($this);
 
         // Opt-out if no supported text area was found.
         if (!field) {
@@ -163,7 +160,7 @@
         }
 
         // Store the current active format.
-        var activeFormatID = $this.val();
+        const activeFormatID = $this.val();
         field.setAttribute('data-editor-active-text-format', activeFormatID);
 
         // Directly attach this text editor, if the text format is enabled.
@@ -175,7 +172,7 @@
         // When there is no text editor for this text format, still track
         // changes, because the user has the ability to switch to some text
         // editor, otherwise this code would not be executed.
-        $(field).on('change.editor keypress.editor', function () {
+        $(field).on('change.editor keypress.editor', () => {
           field.setAttribute('data-editor-value-is-changed', 'true');
           // Just knowing that the value was changed is enough, stop tracking.
           $(field).off('.editor');
@@ -183,10 +180,10 @@
 
         // Attach onChange handler to text format selector element.
         if ($this.is('select')) {
-          $this.on('change.editorAttach', {field: field}, onTextFormatChange);
+          $this.on('change.editorAttach', { field }, onTextFormatChange);
         }
         // Detach any editor when the containing form is submitted.
-        $this.parents('form').on('submit', function (event) {
+        $this.parents('form').on('submit', (event) => {
           // Do not detach if the event was canceled.
           if (event.isDefaultPrevented()) {
             return;
@@ -199,8 +196,8 @@
       });
     },
 
-    detach: function (context, settings, trigger) {
-      var editors;
+    detach(context, settings, trigger) {
+      let editors;
       // The 'serialize' trigger indicates that we should simply update the
       // underlying element with the new text, without destroying the editor.
       if (trigger === 'serialize') {
@@ -213,14 +210,14 @@
       }
 
       editors.each(function () {
-        var $this = $(this);
-        var activeFormatID = $this.val();
-        var field = findFieldForFormatSelector($this);
+        const $this = $(this);
+        const activeFormatID = $this.val();
+        const field = findFieldForFormatSelector($this);
         if (field && activeFormatID in settings.editor.formats) {
           Drupal.editorDetach(field, settings.editor.formats[activeFormatID], trigger);
         }
       });
-    }
+    },
   };
 
   /**
@@ -243,7 +240,7 @@
 
       // Ensures form.js' 'formUpdated' event is triggered even for changes that
       // happen within the text editor.
-      Drupal.editors[format.editor].onChange(field, function () {
+      Drupal.editors[format.editor].onChange(field, () => {
         $(field).trigger('formUpdated');
 
         // Keep track of changes, so we know what to do when switching text
@@ -297,22 +294,21 @@
     // Otherwise, ensure XSS safety: let the server XSS filter this value.
     else {
       $.ajax({
-        url: Drupal.url('editor/filter_xss/' + format.format),
+        url: Drupal.url(`editor/filter_xss/${format.format}`),
         type: 'POST',
         data: {
           value: field.value,
-          original_format_id: originalFormatID
+          original_format_id: originalFormatID,
         },
         dataType: 'json',
-        success: function (xssFilteredValue) {
+        success(xssFilteredValue) {
           // If the server returns false, then no XSS filtering is needed.
           if (xssFilteredValue !== false) {
             field.value = xssFilteredValue;
           }
           callback(field, format);
-        }
+        },
       });
     }
   }
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/editor/js/editor.formattedTextEditor.es6.js b/core/modules/editor/js/editor.formattedTextEditor.es6.js
index fec73e03a0..3005a38712 100644
--- a/core/modules/editor/js/editor.formattedTextEditor.es6.js
+++ b/core/modules/editor/js/editor.formattedTextEditor.es6.js
@@ -12,9 +12,6 @@
  */
 
 (function ($, Drupal, drupalSettings, _) {
-
-  'use strict';
-
   Drupal.quickedit.editors.editor = Drupal.quickedit.EditorView.extend(/** @lends Drupal.quickedit.editors.editor# */{
 
     /**
@@ -53,17 +50,17 @@
      * @param {object} options
      *   Options for the editor view.
      */
-    initialize: function (options) {
+    initialize(options) {
       Drupal.quickedit.EditorView.prototype.initialize.call(this, options);
 
-      var metadata = Drupal.quickedit.metadata.get(this.fieldModel.get('fieldID'), 'custom');
+      const metadata = Drupal.quickedit.metadata.get(this.fieldModel.get('fieldID'), 'custom');
       this.textFormat = drupalSettings.editor.formats[metadata.format];
       this.textFormatHasTransformations = metadata.formatHasTransformations;
       this.textEditor = Drupal.editors[this.textFormat.editor];
 
       // Store the actual value of this field. We'll need this to restore the
       // original value when the user discards his modifications.
-      var $fieldItems = this.$el.find('.quickedit-field');
+      const $fieldItems = this.$el.find('.quickedit-field');
       if ($fieldItems.length) {
         this.$textElement = $fieldItems.eq(0);
       }
@@ -79,7 +76,7 @@
      * @return {jQuery}
      *   The text element edited.
      */
-    getEditedElement: function () {
+    getEditedElement() {
       return this.$textElement;
     },
 
@@ -91,10 +88,10 @@
      * @param {string} state
      *   The current state.
      */
-    stateChange: function (fieldModel, state) {
-      var editorModel = this.model;
-      var from = fieldModel.previous('state');
-      var to = state;
+    stateChange(fieldModel, state) {
+      const editorModel = this.model;
+      const from = fieldModel.previous('state');
+      const to = state;
       switch (to) {
         case 'inactive':
           break;
@@ -126,8 +123,8 @@
           // of this field, then we'll need to load a re-formatted version of it
           // without the transformation filters.
           if (this.textFormatHasTransformations) {
-            var $textElement = this.$textElement;
-            this._getUntransformedText(function (untransformedText) {
+            const $textElement = this.$textElement;
+            this._getUntransformedText((untransformedText) => {
               $textElement.html(untransformedText);
               fieldModel.set('state', 'active');
             });
@@ -137,7 +134,7 @@
           else {
             // Defer updating the model until the current state change has
             // propagated, to not trigger a nested state change event.
-            _.defer(function () {
+            _.defer(() => {
               fieldModel.set('state', 'active');
             });
           }
@@ -150,10 +147,10 @@
             textElement,
             this.textFormat,
             toolbarView.getMainWysiwygToolgroupId(),
-            toolbarView.getFloatedWysiwygToolgroupId()
+            toolbarView.getFloatedWysiwygToolgroupId(),
           );
           // Set the state to 'changed' whenever the content has changed.
-          this.textEditor.onChange(textElement, function (htmlText) {
+          this.textEditor.onChange(textElement, (htmlText) => {
             editorModel.set('currentValue', htmlText);
             fieldModel.set('state', 'changed');
           });
@@ -184,14 +181,14 @@
      * @return {object}
      *   The sttings for the quick edit UI.
      */
-    getQuickEditUISettings: function () {
-      return {padding: true, unifiedToolbar: true, fullWidthToolbar: true, popup: false};
+    getQuickEditUISettings() {
+      return { padding: true, unifiedToolbar: true, fullWidthToolbar: true, popup: false };
     },
 
     /**
      * @inheritdoc
      */
-    revert: function () {
+    revert() {
       this.$textElement.html(this.model.get('originalValue'));
     },
 
@@ -206,13 +203,13 @@
      *
      * @see \Drupal\editor\Ajax\GetUntransformedTextCommand
      */
-    _getUntransformedText: function (callback) {
-      var fieldID = this.fieldModel.get('fieldID');
+    _getUntransformedText(callback) {
+      const fieldID = this.fieldModel.get('fieldID');
 
       // Create a Drupal.ajax instance to load the form.
-      var textLoaderAjax = Drupal.ajax({
+      const textLoaderAjax = Drupal.ajax({
         url: Drupal.quickedit.util.buildUrl(fieldID, Drupal.url('editor/!entity_type/!id/!field_name/!langcode/!view_mode')),
-        submit: {nocssjs: true}
+        submit: { nocssjs: true },
       });
 
       // Implement a scoped editorGetUntransformedText AJAX command: calls the
@@ -224,8 +221,7 @@
       // This will ensure our scoped editorGetUntransformedText AJAX command
       // gets called.
       textLoaderAjax.execute();
-    }
+    },
 
   });
-
-})(jQuery, Drupal, drupalSettings, _);
+}(jQuery, Drupal, drupalSettings, _));
diff --git a/core/modules/field_ui/field_ui.es6.js b/core/modules/field_ui/field_ui.es6.js
index 30e983a143..e8f9f9aba5 100644
--- a/core/modules/field_ui/field_ui.es6.js
+++ b/core/modules/field_ui/field_ui.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * @type {Drupal~behavior}
    *
@@ -14,8 +11,8 @@
    *   Adds behaviors to the field storage add form.
    */
   Drupal.behaviors.fieldUIFieldStorageAddForm = {
-    attach: function (context) {
-      var $form = $(context).find('[data-drupal-selector="field-ui-field-storage-add-form"]').once('field_ui_add');
+    attach(context) {
+      const $form = $(context).find('[data-drupal-selector="field-ui-field-storage-add-form"]').once('field_ui_add');
       if ($form.length) {
         // Add a few 'js-form-required' and 'form-required' css classes here.
         // We can not use the Form API '#required' property because both label
@@ -28,9 +25,9 @@
           '.js-form-item-existing-storage-label label')
           .addClass('js-form-required form-required');
 
-        var $newFieldType = $form.find('select[name="new_storage_type"]');
-        var $existingStorageName = $form.find('select[name="existing_storage_name"]');
-        var $existingStorageLabel = $form.find('input[name="existing_storage_label"]');
+        const $newFieldType = $form.find('select[name="new_storage_type"]');
+        const $existingStorageName = $form.find('select[name="existing_storage_name"]');
+        const $existingStorageLabel = $form.find('input[name="existing_storage_label"]');
 
         // When the user selects a new field type, clear the "existing field"
         // selection.
@@ -44,7 +41,7 @@
         // When the user selects an existing storage name, clear the "new field
         // type" selection and populate the 'existing_storage_label' element.
         $existingStorageName.on('change', function () {
-          var value = $(this).val();
+          const value = $(this).val();
           if (value !== '') {
             // Reset the "new field type" selection.
             $newFieldType.val('').trigger('change');
@@ -56,7 +53,7 @@
           }
         });
       }
-    }
+    },
   };
 
   /**
@@ -70,11 +67,11 @@
    * @see Drupal.fieldUIOverview.attach
    */
   Drupal.behaviors.fieldUIDisplayOverview = {
-    attach: function (context, settings) {
+    attach(context, settings) {
       $(context).find('table#field-display-overview').once('field-display-overview').each(function () {
         Drupal.fieldUIOverview.attach(this, settings.fieldUIRowsData, Drupal.fieldUIDisplayOverview);
       });
-    }
+    },
   };
 
   /**
@@ -94,8 +91,8 @@
      * @param {object} rowHandlers
      *   Handlers to be added to the rows.
      */
-    attach: function (table, rowsData, rowHandlers) {
-      var tableDrag = Drupal.tableDrag[table.id];
+    attach(table, rowsData, rowHandlers) {
+      const tableDrag = Drupal.tableDrag[table.id];
 
       // Add custom tabledrag callbacks.
       tableDrag.onDrop = this.onDrop;
@@ -104,14 +101,14 @@
       // Create row handlers.
       $(table).find('tr.draggable').each(function () {
         // Extract server-side data for the row.
-        var row = this;
+        const row = this;
         if (row.id in rowsData) {
-          var data = rowsData[row.id];
+          const data = rowsData[row.id];
           data.tableDrag = tableDrag;
 
           // Create the row handler, make it accessible from the DOM row
           // element.
-          var rowHandler = new rowHandlers[data.rowHandler](row, data);
+          const rowHandler = new rowHandlers[data.rowHandler](row, data);
           $(row).data('fieldUIRowHandler', rowHandler);
         }
       });
@@ -120,16 +117,16 @@
     /**
      * Event handler to be attached to form inputs triggering a region change.
      */
-    onChange: function () {
-      var $trigger = $(this);
-      var $row = $trigger.closest('tr');
-      var rowHandler = $row.data('fieldUIRowHandler');
+    onChange() {
+      const $trigger = $(this);
+      const $row = $trigger.closest('tr');
+      const rowHandler = $row.data('fieldUIRowHandler');
 
-      var refreshRows = {};
+      const refreshRows = {};
       refreshRows[rowHandler.name] = $trigger.get(0);
 
       // Handle region change.
-      var region = rowHandler.getRegion();
+      const region = rowHandler.getRegion();
       if (region !== rowHandler.region) {
         // Remove parenting.
         $row.find('select.js-field-parent').val('');
@@ -146,18 +143,18 @@
     /**
      * Lets row handlers react when a row is dropped into a new region.
      */
-    onDrop: function () {
-      var dragObject = this;
-      var row = dragObject.rowObject.element;
-      var $row = $(row);
-      var rowHandler = $row.data('fieldUIRowHandler');
+    onDrop() {
+      const dragObject = this;
+      const row = dragObject.rowObject.element;
+      const $row = $(row);
+      const rowHandler = $row.data('fieldUIRowHandler');
       if (typeof rowHandler !== 'undefined') {
-        var regionRow = $row.prevAll('tr.region-message').get(0);
-        var region = regionRow.className.replace(/([^ ]+[ ]+)*region-([^ ]+)-message([ ]+[^ ]+)*/, '$2');
+        const regionRow = $row.prevAll('tr.region-message').get(0);
+        const region = regionRow.className.replace(/([^ ]+[ ]+)*region-([^ ]+)-message([ ]+[^ ]+)*/, '$2');
 
         if (region !== rowHandler.region) {
           // Let the row handler deal with the region change.
-          var refreshRows = rowHandler.regionChange(region);
+          const refreshRows = rowHandler.regionChange(region);
           // Update the row region.
           rowHandler.region = region;
           // Ajax-update the rows.
@@ -174,10 +171,10 @@
      * @param {HTMLElement} draggedRow
      *   The tableDrag rowObject for the row being dragged.
      */
-    onSwap: function (draggedRow) {
-      var rowObject = this;
+    onSwap(draggedRow) {
+      const rowObject = this;
       $(rowObject.table).find('tr.region-message').each(function () {
-        var $this = $(this);
+        const $this = $(this);
         // If the dragged row is in this region, but above the message row, swap
         // it down one space.
         if ($this.prev('tr').get(0) === rowObject.group[rowObject.group.length - 1]) {
@@ -211,11 +208,11 @@
      *   whose values are the DOM element in the row that should get an Ajax
      *   throbber.
      */
-    AJAXRefreshRows: function (rows) {
+    AJAXRefreshRows(rows) {
       // Separate keys and values.
-      var rowNames = [];
-      var ajaxElements = [];
-      var rowName;
+      const rowNames = [];
+      const ajaxElements = [];
+      let rowName;
       for (rowName in rows) {
         if (rows.hasOwnProperty(rowName)) {
           rowNames.push(rowName);
@@ -235,7 +232,7 @@
         // elements disabled only after firing the request.
         $(ajaxElements).prop('disabled', true);
       }
-    }
+    },
   };
 
   /**
@@ -286,7 +283,7 @@
      * @return {string}
      *   Either 'hidden' or 'content'.
      */
-    getRegion: function () {
+    getRegion() {
       return this.$regionSelect.val();
     },
 
@@ -309,7 +306,7 @@
      *   of the change, in the format expected by
      *   {@link Drupal.fieldUIOverview.AJAXRefreshRows}.
      */
-    regionChange: function (region) {
+    regionChange(region) {
       // Replace dashes with underscores.
       region = region.replace(/-/g, '_');
 
@@ -319,17 +316,16 @@
       // Restore the formatter back to the default formatter. Pseudo-fields
       // do not have default formatters, we just return to 'visible' for
       // those.
-      var value = (typeof this.defaultPlugin !== 'undefined') ? this.defaultPlugin : this.$pluginSelect.find('option').val();
+      const value = (typeof this.defaultPlugin !== 'undefined') ? this.defaultPlugin : this.$pluginSelect.find('option').val();
 
       if (typeof value !== 'undefined') {
         this.$pluginSelect.val(value);
       }
 
-      var refreshRows = {};
+      const refreshRows = {};
       refreshRows[this.name] = this.$pluginSelect.get(0);
 
       return refreshRows;
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/file/file.es6.js b/core/modules/file/file.es6.js
index 8ed377eec3..9ab5dc2da3 100644
--- a/core/modules/file/file.es6.js
+++ b/core/modules/file/file.es6.js
@@ -8,9 +8,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Attach behaviors to the file fields passed in the settings.
    *
@@ -22,14 +19,14 @@
    *   Detaches validation for file extensions.
    */
   Drupal.behaviors.fileValidateAutoAttach = {
-    attach: function (context, settings) {
-      var $context = $(context);
-      var elements;
+    attach(context, settings) {
+      const $context = $(context);
+      let elements;
 
       function initFileValidation(selector) {
         $context.find(selector)
           .once('fileValidate')
-          .on('change.fileValidate', {extensions: elements[selector]}, Drupal.file.validateExtension);
+          .on('change.fileValidate', { extensions: elements[selector] }, Drupal.file.validateExtension);
       }
 
       if (settings.file && settings.file.elements) {
@@ -37,9 +34,9 @@
         Object.keys(elements).forEach(initFileValidation);
       }
     },
-    detach: function (context, settings, trigger) {
-      var $context = $(context);
-      var elements;
+    detach(context, settings, trigger) {
+      const $context = $(context);
+      let elements;
 
       function removeFileValidation(selector) {
         $context.find(selector)
@@ -51,7 +48,7 @@
         elements = settings.file.elements;
         Object.keys(elements).forEach(removeFileValidation);
       }
-    }
+    },
   };
 
   /**
@@ -65,14 +62,14 @@
    *   Detaches auto file upload trigger.
    */
   Drupal.behaviors.fileAutoUpload = {
-    attach: function (context) {
+    attach(context) {
       $(context).find('input[type="file"]').once('auto-file-upload').on('change.autoFileUpload', Drupal.file.triggerUploadButton);
     },
-    detach: function (context, setting, trigger) {
+    detach(context, setting, trigger) {
       if (trigger === 'unload') {
         $(context).find('input[type="file"]').removeOnce('auto-file-upload').off('.autoFileUpload');
       }
-    }
+    },
   };
 
   /**
@@ -86,16 +83,16 @@
    *   Detaches form submit events.
    */
   Drupal.behaviors.fileButtons = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
       $context.find('.js-form-submit').on('mousedown', Drupal.file.disableFields);
       $context.find('.js-form-managed-file .js-form-submit').on('mousedown', Drupal.file.progressBar);
     },
-    detach: function (context) {
-      var $context = $(context);
+    detach(context) {
+      const $context = $(context);
       $context.find('.js-form-submit').off('mousedown', Drupal.file.disableFields);
       $context.find('.js-form-managed-file .js-form-submit').off('mousedown', Drupal.file.progressBar);
-    }
+    },
   };
 
   /**
@@ -109,12 +106,12 @@
    *   Detaches triggers.
    */
   Drupal.behaviors.filePreviewLinks = {
-    attach: function (context) {
+    attach(context) {
       $(context).find('div.js-form-managed-file .file a').on('click', Drupal.file.openInNewWindow);
     },
-    detach: function (context) {
+    detach(context) {
       $(context).find('div.js-form-managed-file .file a').off('click', Drupal.file.openInNewWindow);
-    }
+    },
   };
 
   /**
@@ -132,17 +129,17 @@
      * @param {jQuery.Event} event
      *   The event triggered. For example `change.fileValidate`.
      */
-    validateExtension: function (event) {
+    validateExtension(event) {
       event.preventDefault();
       // Remove any previous errors.
       $('.file-upload-js-error').remove();
 
       // Add client side validation for the input[type=file].
-      var extensionPattern = event.data.extensions.replace(/,\s*/g, '|');
+      const extensionPattern = event.data.extensions.replace(/,\s*/g, '|');
       if (extensionPattern.length > 1 && this.value.length > 0) {
-        var acceptableMatch = new RegExp('\\.(' + extensionPattern + ')$', 'gi');
+        const acceptableMatch = new RegExp(`\\.(${extensionPattern})$`, 'gi');
         if (!acceptableMatch.test(this.value)) {
-          var error = Drupal.t('The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.', {
+          const error = Drupal.t('The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.', {
             // According to the specifications of HTML5, a file upload control
             // should not reveal the real local path to the file that a user
             // has selected. Some web browsers implement this restriction by
@@ -151,9 +148,9 @@
             // find the file because it messed up the file path. To avoid this
             // confusion, therefore, we strip out the bogus fakepath string.
             '%filename': this.value.replace('C:\\fakepath\\', ''),
-            '%extensions': extensionPattern.replace(/\|/g, ', ')
+            '%extensions': extensionPattern.replace(/\|/g, ', '),
           });
-          $(this).closest('div.js-form-managed-file').prepend('<div class="messages messages--error file-upload-js-error" aria-live="polite">' + error + '</div>');
+          $(this).closest('div.js-form-managed-file').prepend(`<div class="messages messages--error file-upload-js-error" aria-live="polite">${error}</div>`);
           this.value = '';
           // Cancel all other change event handlers.
           event.stopImmediatePropagation();
@@ -169,7 +166,7 @@
      * @param {jQuery.Event} event
      *   The event triggered. For example `change.autoFileUpload`.
      */
-    triggerUploadButton: function (event) {
+    triggerUploadButton(event) {
       $(event.target).closest('.js-form-managed-file').find('.js-form-submit').trigger('mousedown');
     },
 
@@ -181,8 +178,8 @@
      * @param {jQuery.Event} event
      *   The event triggered, most likely a `mousedown` event.
      */
-    disableFields: function (event) {
-      var $clickedButton = $(this).findOnce('ajax');
+    disableFields(event) {
+      const $clickedButton = $(this).findOnce('ajax');
 
       // Only disable upload fields for Ajax buttons.
       if (!$clickedButton.length) {
@@ -190,7 +187,7 @@
       }
 
       // Check if we're working with an "Upload" button.
-      var $enabledFields = [];
+      let $enabledFields = [];
       if ($clickedButton.closest('div.js-form-managed-file').length > 0) {
         $enabledFields = $clickedButton.closest('div.js-form-managed-file').find('input.js-form-file');
       }
@@ -204,9 +201,9 @@
       // functions are called, so we don't have to worry about the fields being
       // re-enabled too soon. @todo If the previous sentence is true, why not
       // set the timeout to 0?
-      var $fieldsToTemporarilyDisable = $('div.js-form-managed-file input.js-form-file').not($enabledFields).not(':disabled');
+      const $fieldsToTemporarilyDisable = $('div.js-form-managed-file input.js-form-file').not($enabledFields).not(':disabled');
       $fieldsToTemporarilyDisable.prop('disabled', true);
-      setTimeout(function () {
+      setTimeout(() => {
         $fieldsToTemporarilyDisable.prop('disabled', false);
       }, 1000);
     },
@@ -219,22 +216,22 @@
      * @param {jQuery.Event} event
      *   The event triggered, most likely a `mousedown` event.
      */
-    progressBar: function (event) {
-      var $clickedButton = $(this);
-      var $progressId = $clickedButton.closest('div.js-form-managed-file').find('input.file-progress');
+    progressBar(event) {
+      const $clickedButton = $(this);
+      const $progressId = $clickedButton.closest('div.js-form-managed-file').find('input.file-progress');
       if ($progressId.length) {
-        var originalName = $progressId.attr('name');
+        const originalName = $progressId.attr('name');
 
         // Replace the name with the required identifier.
         $progressId.attr('name', originalName.match(/APC_UPLOAD_PROGRESS|UPLOAD_IDENTIFIER/)[0]);
 
         // Restore the original name after the upload begins.
-        setTimeout(function () {
+        setTimeout(() => {
           $progressId.attr('name', originalName);
         }, 1000);
       }
       // Show the progress bar if the upload takes longer than half a second.
-      setTimeout(function () {
+      setTimeout(() => {
         $clickedButton.closest('div.js-form-managed-file').find('div.ajax-progress-bar').slideDown();
       }, 500);
     },
@@ -247,11 +244,10 @@
      * @param {jQuery.Event} event
      *   The event triggered, most likely a `click` event.
      */
-    openInNewWindow: function (event) {
+    openInNewWindow(event) {
       event.preventDefault();
       $(this).attr('target', '_blank');
       window.open(this.href, 'filePreview', 'toolbar=0,scrollbars=1,location=1,statusbar=1,menubar=0,resizable=1,width=500,height=550');
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/filter/filter.admin.es6.js b/core/modules/filter/filter.admin.es6.js
index 31e0582c18..e109fab26a 100644
--- a/core/modules/filter/filter.admin.es6.js
+++ b/core/modules/filter/filter.admin.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Displays and updates the status of filters on the admin page.
    *
@@ -16,19 +13,19 @@
    *   Attaches behaviors to the filter admin view.
    */
   Drupal.behaviors.filterStatus = {
-    attach: function (context, settings) {
-      var $context = $(context);
+    attach(context, settings) {
+      const $context = $(context);
       $context.find('#filters-status-wrapper input.form-checkbox').once('filter-status').each(function () {
-        var $checkbox = $(this);
+        const $checkbox = $(this);
         // Retrieve the tabledrag row belonging to this filter.
-        var $row = $context.find('#' + $checkbox.attr('id').replace(/-status$/, '-weight')).closest('tr');
+        const $row = $context.find(`#${$checkbox.attr('id').replace(/-status$/, '-weight')}`).closest('tr');
         // Retrieve the vertical tab belonging to this filter.
-        var $filterSettings = $context.find('#' + $checkbox.attr('id').replace(/-status$/, '-settings'));
-        var filterSettingsTab = $filterSettings.data('verticalTab');
+        const $filterSettings = $context.find(`#${$checkbox.attr('id').replace(/-status$/, '-settings')}`);
+        const filterSettingsTab = $filterSettings.data('verticalTab');
 
         // Bind click handler to this checkbox to conditionally show and hide
         // the filter's tableDrag row and vertical tab pane.
-        $checkbox.on('click.filterUpdate', function () {
+        $checkbox.on('click.filterUpdate', () => {
           if ($checkbox.is(':checked')) {
             $row.show();
             if (filterSettingsTab) {
@@ -55,15 +52,12 @@
 
         // Attach summary for configurable filters (only for screen readers).
         if (filterSettingsTab) {
-          filterSettingsTab.details.drupalSetSummary(function (tabContext) {
-            return $checkbox.is(':checked') ? Drupal.t('Enabled') : Drupal.t('Disabled');
-          });
+          filterSettingsTab.details.drupalSetSummary(tabContext => $checkbox.is(':checked') ? Drupal.t('Enabled') : Drupal.t('Disabled'));
         }
 
         // Trigger our bound click handler to update elements to initial state.
         $checkbox.triggerHandler('click.filterUpdate');
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/filter/filter.es6.js b/core/modules/filter/filter.es6.js
index b79104733e..97c5501a51 100644
--- a/core/modules/filter/filter.es6.js
+++ b/core/modules/filter/filter.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Displays the guidelines of the selected text format automatically.
    *
@@ -16,14 +13,13 @@
    *   Attaches behavior for updating filter guidelines.
    */
   Drupal.behaviors.filterGuidelines = {
-    attach: function (context) {
-
+    attach(context) {
       function updateFilterGuidelines(event) {
-        var $this = $(event.target);
-        var value = $this.val();
+        const $this = $(event.target);
+        const value = $this.val();
         $this.closest('.filter-wrapper')
           .find('.filter-guidelines-item').hide()
-          .filter('.filter-guidelines-' + value).show();
+          .filter(`.filter-guidelines-${value}`).show();
       }
 
       $(context).find('.filter-guidelines').once('filter-guidelines')
@@ -33,7 +29,6 @@
         // Need to trigger the namespaced event to avoid triggering formUpdated
         // when initializing the select.
         .trigger('change.filterGuidelines');
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/filter/filter.filter_html.admin.es6.js b/core/modules/filter/filter.filter_html.admin.es6.js
index 7ddca90bba..c5809c09e8 100644
--- a/core/modules/filter/filter.filter_html.admin.es6.js
+++ b/core/modules/filter/filter.filter_html.admin.es6.js
@@ -4,11 +4,7 @@
  */
 
 (function ($, Drupal, _, document) {
-
-  'use strict';
-
   if (Drupal.filterConfiguration) {
-
     /**
      * Implement a live setting parser to prevent text editors from automatically
      * enabling buttons that are not allowed by this filter's configuration.
@@ -21,19 +17,19 @@
        * @return {Array}
        *   An array of filter rules.
        */
-      getRules: function () {
-        var currentValue = $('#edit-filters-filter-html-settings-allowed-html').val();
-        var rules = Drupal.behaviors.filterFilterHtmlUpdating._parseSetting(currentValue);
+      getRules() {
+        const currentValue = $('#edit-filters-filter-html-settings-allowed-html').val();
+        const rules = Drupal.behaviors.filterFilterHtmlUpdating._parseSetting(currentValue);
 
         // Build a FilterHTMLRule that reflects the hard-coded behavior that
         // strips all "style" attribute and all "on*" attributes.
-        var rule = new Drupal.FilterHTMLRule();
+        const rule = new Drupal.FilterHTMLRule();
         rule.restrictedTags.tags = ['*'];
         rule.restrictedTags.forbidden.attributes = ['style', 'on*'];
         rules.push(rule);
 
         return rules;
-      }
+      },
     };
   }
 
@@ -68,8 +64,8 @@
     // Track which new features have been added to the text editor.
     newFeatures: {},
 
-    attach: function (context, settings) {
-      var that = this;
+    attach(context, settings) {
+      const that = this;
       $(context).find('[name="filters[filter_html][settings][allowed_html]"]').once('filter-filter_html-updating').each(function () {
         that.$allowedHTMLFormItem = $(this);
         that.$allowedHTMLDescription = that.$allowedHTMLFormItem.closest('.js-form-item').find('.description');
@@ -77,17 +73,17 @@
 
         // Update the new allowed tags based on added text editor features.
         $(document)
-          .on('drupalEditorFeatureAdded', function (e, feature) {
+          .on('drupalEditorFeatureAdded', (e, feature) => {
             that.newFeatures[feature.name] = feature.rules;
             that._updateAllowedTags();
           })
-          .on('drupalEditorFeatureModified', function (e, feature) {
+          .on('drupalEditorFeatureModified', (e, feature) => {
             if (that.newFeatures.hasOwnProperty(feature.name)) {
               that.newFeatures[feature.name] = feature.rules;
               that._updateAllowedTags();
             }
           })
-          .on('drupalEditorFeatureRemoved', function (e, feature) {
+          .on('drupalEditorFeatureRemoved', (e, feature) => {
             if (that.newFeatures.hasOwnProperty(feature.name)) {
               delete that.newFeatures[feature.name];
               that._updateAllowedTags();
@@ -104,7 +100,7 @@
     /**
      * Updates the "Allowed HTML tags" setting and shows an informative message.
      */
-    _updateAllowedTags: function () {
+    _updateAllowedTags() {
       // Update the list of auto-created tags.
       this.autoTags = this._calculateAutoAllowedTags(this.userTags, this.newFeatures);
 
@@ -114,8 +110,8 @@
       // If any auto-created tags: insert message and update form item.
       if (!_.isEmpty(this.autoTags)) {
         this.$allowedHTMLDescription.append(Drupal.theme('filterFilterHTMLUpdateMessage', this.autoTags));
-        var userTagsWithoutOverrides = _.omit(this.userTags, _.keys(this.autoTags));
-        this.$allowedHTMLFormItem.val(this._generateSetting(userTagsWithoutOverrides) + ' ' + this._generateSetting(this.autoTags));
+        const userTagsWithoutOverrides = _.omit(this.userTags, _.keys(this.autoTags));
+        this.$allowedHTMLFormItem.val(`${this._generateSetting(userTagsWithoutOverrides)} ${this._generateSetting(this.autoTags)}`);
       }
       // Restore to original state.
       else {
@@ -138,21 +134,21 @@
      * @return {Array}
      *   A list of new allowed tags.
      */
-    _calculateAutoAllowedTags: function (userAllowedTags, newFeatures) {
-      var featureName;
-      var feature;
-      var featureRule;
-      var filterRule;
-      var tag;
-      var editorRequiredTags = {};
+    _calculateAutoAllowedTags(userAllowedTags, newFeatures) {
+      let featureName;
+      let feature;
+      let featureRule;
+      let filterRule;
+      let tag;
+      const editorRequiredTags = {};
       // Map the newly added Text Editor features to Drupal.FilterHtmlRule
       // objects (to allow comparing userTags with autoTags).
       for (featureName in newFeatures) {
         if (newFeatures.hasOwnProperty(featureName)) {
           feature = newFeatures[featureName];
-          for (var f = 0; f < feature.length; f++) {
+          for (let f = 0; f < feature.length; f++) {
             featureRule = feature[f];
-            for (var t = 0; t < featureRule.required.tags.length; t++) {
+            for (let t = 0; t < featureRule.required.tags.length; t++) {
               tag = featureRule.required.tags[t];
               if (!_.has(editorRequiredTags, tag)) {
                 filterRule = new Drupal.FilterHTMLRule();
@@ -186,7 +182,7 @@
       //   that are additionally going to be allowed)
       // - any tags in editorRequiredTags that already exists in userAllowedTags
       //   but does not allow all attributes or attribute values
-      var autoAllowedTags = {};
+      const autoAllowedTags = {};
       for (tag in editorRequiredTags) {
         // If userAllowedTags does not contain a rule for this editor-required
         // tag, then add it to the list of automatically allowed tags.
@@ -197,12 +193,12 @@
         // additional attributes and classes on this tag are required by the
         // editor.
         else {
-          var requiredAttributes = editorRequiredTags[tag].restrictedTags.allowed.attributes;
-          var allowedAttributes = userAllowedTags[tag].restrictedTags.allowed.attributes;
-          var needsAdditionalAttributes = requiredAttributes.length && _.difference(requiredAttributes, allowedAttributes).length;
-          var requiredClasses = editorRequiredTags[tag].restrictedTags.allowed.classes;
-          var allowedClasses = userAllowedTags[tag].restrictedTags.allowed.classes;
-          var needsAdditionalClasses = requiredClasses.length && _.difference(requiredClasses, allowedClasses).length;
+          const requiredAttributes = editorRequiredTags[tag].restrictedTags.allowed.attributes;
+          const allowedAttributes = userAllowedTags[tag].restrictedTags.allowed.attributes;
+          const needsAdditionalAttributes = requiredAttributes.length && _.difference(requiredAttributes, allowedAttributes).length;
+          const requiredClasses = editorRequiredTags[tag].restrictedTags.allowed.classes;
+          const allowedClasses = userAllowedTags[tag].restrictedTags.allowed.classes;
+          const needsAdditionalClasses = requiredClasses.length && _.difference(requiredClasses, allowedClasses).length;
           if (needsAdditionalAttributes || needsAdditionalClasses) {
             autoAllowedTags[tag] = userAllowedTags[tag].clone();
           }
@@ -229,16 +225,16 @@
      *   The corresponding text filter HTML rule objects, one per tag, keyed by
      *   tag name.
      */
-    _parseSetting: function (setting) {
-      var node;
-      var tag;
-      var rule;
-      var attributes;
-      var attribute;
-      var allowedTags = setting.match(/(<[^>]+>)/g);
-      var sandbox = document.createElement('div');
-      var rules = {};
-      for (var t = 0; t < allowedTags.length; t++) {
+    _parseSetting(setting) {
+      let node;
+      let tag;
+      let rule;
+      let attributes;
+      let attribute;
+      const allowedTags = setting.match(/(<[^>]+>)/g);
+      const sandbox = document.createElement('div');
+      const rules = {};
+      for (let t = 0; t < allowedTags.length; t++) {
         // Let the browser do the parsing work for us.
         sandbox.innerHTML = allowedTags[t];
         node = sandbox.firstChild;
@@ -250,16 +246,16 @@
         rule.restrictedTags.tags = [tag];
         // Add the attribute restrictions.
         attributes = node.attributes;
-        for (var i = 0; i < attributes.length; i++) {
+        for (let i = 0; i < attributes.length; i++) {
           attribute = attributes.item(i);
-          var attributeName = attribute.nodeName;
+          const attributeName = attribute.nodeName;
           // @todo Drupal.FilterHtmlRule does not allow for generic attribute
           //   value restrictions, only for the "class" and "style" attribute's
           //   values. The filter_html filter always disallows the "style"
           //   attribute, so we only need to support "class" attribute value
           //   restrictions. Fix once https://www.drupal.org/node/2567801 lands.
           if (attributeName === 'class') {
-            var attributeValue = attribute.textContent;
+            const attributeValue = attribute.textContent;
             rule.restrictedTags.allowed.classes = attributeValue.split(' ');
           }
           else {
@@ -281,15 +277,15 @@
      * @return {Array}
      *   The string representation of the setting. e.g. "<p> <br> <a>"
      */
-    _generateSetting: function (tags) {
-      return _.reduce(tags, function (setting, rule, tag) {
+    _generateSetting(tags) {
+      return _.reduce(tags, (setting, rule, tag) => {
         if (setting.length) {
           setting += ' ';
         }
 
-        setting += '<' + tag;
+        setting += `<${tag}`;
         if (rule.restrictedTags.allowed.attributes.length) {
-          setting += ' ' + rule.restrictedTags.allowed.attributes.join(' ');
+          setting += ` ${rule.restrictedTags.allowed.attributes.join(' ')}`;
         }
         // @todo Drupal.FilterHtmlRule does not allow for generic attribute
         //   value restrictions, only for the "class" and "style" attribute's
@@ -297,13 +293,13 @@
         //   attribute, so we only need to support "class" attribute value
         //   restrictions. Fix once https://www.drupal.org/node/2567801 lands.
         if (rule.restrictedTags.allowed.classes.length) {
-          setting += ' class="' + rule.restrictedTags.allowed.classes.join(' ') + '"';
+          setting += ` class="${rule.restrictedTags.allowed.classes.join(' ')}"`;
         }
 
         setting += '>';
         return setting;
       }, '');
-    }
+    },
 
   };
 
@@ -317,12 +313,11 @@
    *   The corresponding HTML.
    */
   Drupal.theme.filterFilterHTMLUpdateMessage = function (tags) {
-    var html = '';
-    var tagList = Drupal.behaviors.filterFilterHtmlUpdating._generateSetting(tags);
+    let html = '';
+    const tagList = Drupal.behaviors.filterFilterHtmlUpdating._generateSetting(tags);
     html += '<p class="editor-update-message">';
-    html += Drupal.t('Based on the text editor configuration, these tags have automatically been added: <strong>@tag-list</strong>.', {'@tag-list': tagList});
+    html += Drupal.t('Based on the text editor configuration, these tags have automatically been added: <strong>@tag-list</strong>.', { '@tag-list': tagList });
     html += '</p>';
     return html;
   };
-
-})(jQuery, Drupal, _, document);
+}(jQuery, Drupal, _, document));
diff --git a/core/modules/history/js/history.es6.js b/core/modules/history/js/history.es6.js
index 6ce807c074..53a1d05f25 100644
--- a/core/modules/history/js/history.es6.js
+++ b/core/modules/history/js/history.es6.js
@@ -6,17 +6,14 @@
  */
 
 (function ($, Drupal, drupalSettings, storage) {
-
-  'use strict';
-
-  var currentUserID = parseInt(drupalSettings.user.uid, 10);
+  const currentUserID = parseInt(drupalSettings.user.uid, 10);
 
   // Any comment that is older than 30 days is automatically considered read,
   // so for these we don't need to perform a request at all!
-  var thirtyDaysAgo = Math.round(new Date().getTime() / 1000) - 30 * 24 * 60 * 60;
+  const thirtyDaysAgo = Math.round(new Date().getTime() / 1000) - 30 * 24 * 60 * 60;
 
   // Use the data embedded in the page, if available.
-  var embeddedLastReadTimestamps = false;
+  let embeddedLastReadTimestamps = false;
   if (drupalSettings.history && drupalSettings.history.lastReadTimestamps) {
     embeddedLastReadTimestamps = drupalSettings.history.lastReadTimestamps;
   }
@@ -34,7 +31,7 @@
      * @param {function} callback
      *   A callback that is called after the requested timestamps were fetched.
      */
-    fetchTimestamps: function (nodeIDs, callback) {
+    fetchTimestamps(nodeIDs, callback) {
       // Use the data embedded in the page, if available.
       if (embeddedLastReadTimestamps) {
         callback();
@@ -44,16 +41,16 @@
       $.ajax({
         url: Drupal.url('history/get_node_read_timestamps'),
         type: 'POST',
-        data: {'node_ids[]': nodeIDs},
+        data: { 'node_ids[]': nodeIDs },
         dataType: 'json',
-        success: function (results) {
-          for (var nodeID in results) {
+        success(results) {
+          for (const nodeID in results) {
             if (results.hasOwnProperty(nodeID)) {
-              storage.setItem('Drupal.history.' + currentUserID + '.' + nodeID, results[nodeID]);
+              storage.setItem(`Drupal.history.${currentUserID}.${nodeID}`, results[nodeID]);
             }
           }
           callback();
-        }
+        },
       });
     },
 
@@ -66,12 +63,12 @@
      * @return {number}
      *   A UNIX timestamp.
      */
-    getLastRead: function (nodeID) {
+    getLastRead(nodeID) {
       // Use the data embedded in the page, if available.
       if (embeddedLastReadTimestamps && embeddedLastReadTimestamps[nodeID]) {
         return parseInt(embeddedLastReadTimestamps[nodeID], 10);
       }
-      return parseInt(storage.getItem('Drupal.history.' + currentUserID + '.' + nodeID) || 0, 10);
+      return parseInt(storage.getItem(`Drupal.history.${currentUserID}.${nodeID}`) || 0, 10);
     },
 
     /**
@@ -80,20 +77,20 @@
      * @param {number|string} nodeID
      *   A node ID.
      */
-    markAsRead: function (nodeID) {
+    markAsRead(nodeID) {
       $.ajax({
-        url: Drupal.url('history/' + nodeID + '/read'),
+        url: Drupal.url(`history/${nodeID}/read`),
         type: 'POST',
         dataType: 'json',
-        success: function (timestamp) {
+        success(timestamp) {
           // If the data is embedded in the page, don't store on the client
           // side.
           if (embeddedLastReadTimestamps && embeddedLastReadTimestamps[nodeID]) {
             return;
           }
 
-          storage.setItem('Drupal.history.' + currentUserID + '.' + nodeID, timestamp);
-        }
+          storage.setItem(`Drupal.history.${currentUserID}.${nodeID}`, timestamp);
+        },
       });
     },
 
@@ -114,7 +111,7 @@
      *   Whether a server check is necessary for the given node and its
      *   timestamp.
      */
-    needsServerCheck: function (nodeID, contentTimestamp) {
+    needsServerCheck(nodeID, contentTimestamp) {
       // First check if the content is older than 30 days, then we can bail
       // early.
       if (contentTimestamp < thirtyDaysAgo) {
@@ -126,9 +123,8 @@
         return contentTimestamp > parseInt(embeddedLastReadTimestamps[nodeID], 10);
       }
 
-      var minLastReadTimestamp = parseInt(storage.getItem('Drupal.history.' + currentUserID + '.' + nodeID) || 0, 10);
+      const minLastReadTimestamp = parseInt(storage.getItem(`Drupal.history.${currentUserID}.${nodeID}`) || 0, 10);
       return contentTimestamp > minLastReadTimestamp;
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings, window.localStorage);
+}(jQuery, Drupal, drupalSettings, window.localStorage));
diff --git a/core/modules/history/js/mark-as-read.es6.js b/core/modules/history/js/mark-as-read.es6.js
index e225401e33..92d1d4ae8a 100644
--- a/core/modules/history/js/mark-as-read.es6.js
+++ b/core/modules/history/js/mark-as-read.es6.js
@@ -8,16 +8,12 @@
  */
 
 (function (window, Drupal, drupalSettings) {
-
-  'use strict';
-
   // When the window's "load" event is triggered, mark all enumerated nodes as
   // read. This still allows for Drupal behaviors (which are triggered on the
   // "DOMContentReady" event) to add "new" and "updated" indicators.
-  window.addEventListener('load', function () {
+  window.addEventListener('load', () => {
     if (drupalSettings.history && drupalSettings.history.nodesToMarkAsRead) {
       Object.keys(drupalSettings.history.nodesToMarkAsRead).forEach(Drupal.history.markAsRead);
     }
   });
-
-})(window, Drupal, drupalSettings);
+}(window, Drupal, drupalSettings));
diff --git a/core/modules/image/js/editors/image.es6.js b/core/modules/image/js/editors/image.es6.js
index dea08df59e..fe0e6f56d6 100644
--- a/core/modules/image/js/editors/image.es6.js
+++ b/core/modules/image/js/editors/image.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, _, Drupal) {
-
-  'use strict';
-
   Drupal.quickedit.editors.image = Drupal.quickedit.EditorView.extend(/** @lends Drupal.quickedit.editors.image# */{
 
     /**
@@ -17,18 +14,18 @@
      * @param {object} options
      *   Options for the image editor.
      */
-    initialize: function (options) {
+    initialize(options) {
       Drupal.quickedit.EditorView.prototype.initialize.call(this, options);
       // Set our original value to our current HTML (for reverting).
       this.model.set('originalValue', this.$el.html().trim());
       // $.val() callback function for copying input from our custom form to
       // the Quick Edit Field Form.
       this.model.set('currentValue', function (index, value) {
-        var matches = $(this).attr('name').match(/(alt|title)]$/);
+        const matches = $(this).attr('name').match(/(alt|title)]$/);
         if (matches) {
-          var name = matches[1];
-          var $toolgroup = $('#' + options.fieldModel.toolbarView.getMainWysiwygToolgroupId());
-          var $input = $toolgroup.find('.quickedit-image-field-info input[name="' + name + '"]');
+          const name = matches[1];
+          const $toolgroup = $(`#${options.fieldModel.toolbarView.getMainWysiwygToolgroupId()}`);
+          const $input = $toolgroup.find(`.quickedit-image-field-info input[name="${name}"]`);
           if ($input.length) {
             return $input.val();
           }
@@ -46,8 +43,8 @@
      * @param {object} options
      *   State options, if needed by the state change.
      */
-    stateChange: function (fieldModel, state, options) {
-      var from = fieldModel.previous('state');
+    stateChange(fieldModel, state, options) {
+      const from = fieldModel.previous('state');
       switch (state) {
         case 'inactive':
           break;
@@ -68,7 +65,7 @@
         case 'activating':
           // Defer updating the field model until the current state change has
           // propagated, to not trigger a nested state change event.
-          _.defer(function () {
+          _.defer(() => {
             fieldModel.set('state', 'active');
           });
           break;
@@ -98,7 +95,7 @@
             }
           });
 
-          $dropzone.on('click', function (e) {
+          $dropzone.on('click', (e) => {
             // Create an <input> element without appending it to the DOM, and
             // trigger a click event. This is the easiest way to arbitrarily
             // open the browser's upload dialog.
@@ -113,7 +110,7 @@
 
           // Prevent the browser's default behavior when dragging files onto
           // the document (usually opens them in the same tab).
-          $dropzone.on('dragover dragenter dragleave drop click', function (e) {
+          $dropzone.on('dragover dragenter dragleave drop click', (e) => {
             e.preventDefault();
             e.stopPropagation();
           });
@@ -147,26 +144,26 @@
      * @param {File} file
      *   The file to upload.
      */
-    uploadImage: function (file) {
+    uploadImage(file) {
       // Indicate loading by adding a special class to our icon.
-      this.renderDropzone('upload loading', Drupal.t('Uploading <i>@file</i>…', {'@file': file.name}));
+      this.renderDropzone('upload loading', Drupal.t('Uploading <i>@file</i>…', { '@file': file.name }));
 
       // Build a valid URL for our endpoint.
-      var fieldID = this.fieldModel.get('fieldID');
-      var url = Drupal.quickedit.util.buildUrl(fieldID, Drupal.url('quickedit/image/upload/!entity_type/!id/!field_name/!langcode/!view_mode'));
+      const fieldID = this.fieldModel.get('fieldID');
+      const url = Drupal.quickedit.util.buildUrl(fieldID, Drupal.url('quickedit/image/upload/!entity_type/!id/!field_name/!langcode/!view_mode'));
 
       // Construct form data that our endpoint can consume.
-      var data = new FormData();
+      const data = new FormData();
       data.append('files[image]', file);
 
       // Construct a POST request to our endpoint.
-      var self = this;
+      const self = this;
       this.ajax({
         type: 'POST',
-        url: url,
-        data: data,
-        success: function (response) {
-          var $el = $(self.fieldModel.get('el'));
+        url,
+        data,
+        success(response) {
+          const $el = $(self.fieldModel.get('el'));
           // Indicate that the field has changed - this enables the
           // "Save" button.
           self.fieldModel.set('state', 'changed');
@@ -176,9 +173,9 @@
           // Replace our html with the new image. If we replaced our entire
           // element with data.html, we would have to implement complicated logic
           // like what's in Drupal.quickedit.AppView.renderUpdatedField.
-          var $content = $(response.html).closest('[data-quickedit-field-id]').children();
+          const $content = $(response.html).closest('[data-quickedit-field-id]').children();
           $el.empty().append($content);
-        }
+        },
       });
     },
 
@@ -204,20 +201,20 @@
      * @param {function} options.success
      *   A callback function used when a request is successful, without errors.
      */
-    ajax: function (options) {
-      var defaultOptions = {
+    ajax(options) {
+      const defaultOptions = {
         context: this,
         dataType: 'json',
         cache: false,
         contentType: false,
         processData: false,
-        error: function () {
+        error() {
           this.renderDropzone('error', Drupal.t('A server error has occurred.'));
-        }
+        },
       };
 
-      var ajaxOptions = $.extend(defaultOptions, options);
-      var successCallback = ajaxOptions.success;
+      const ajaxOptions = $.extend(defaultOptions, options);
+      const successCallback = ajaxOptions.success;
 
       // Handle the success callback.
       ajaxOptions.success = function (response) {
@@ -242,26 +239,26 @@
      * @param {Drupal.quickedit.FieldModel} fieldModel
      *   The current Field Model.
      */
-    renderToolbar: function (fieldModel) {
-      var $toolgroup = $('#' + fieldModel.toolbarView.getMainWysiwygToolgroupId());
-      var $toolbar = $toolgroup.find('.quickedit-image-field-info');
+    renderToolbar(fieldModel) {
+      const $toolgroup = $(`#${fieldModel.toolbarView.getMainWysiwygToolgroupId()}`);
+      let $toolbar = $toolgroup.find('.quickedit-image-field-info');
       if ($toolbar.length === 0) {
         // Perform an AJAX request for extra image info (alt/title).
-        var fieldID = fieldModel.get('fieldID');
-        var url = Drupal.quickedit.util.buildUrl(fieldID, Drupal.url('quickedit/image/info/!entity_type/!id/!field_name/!langcode/!view_mode'));
-        var self = this;
+        const fieldID = fieldModel.get('fieldID');
+        const url = Drupal.quickedit.util.buildUrl(fieldID, Drupal.url('quickedit/image/info/!entity_type/!id/!field_name/!langcode/!view_mode'));
+        const self = this;
         self.ajax({
           type: 'GET',
-          url: url,
-          success: function (response) {
+          url,
+          success(response) {
             $toolbar = $(Drupal.theme.quickeditImageToolbar(response));
             $toolgroup.append($toolbar);
-            $toolbar.on('keyup paste', function () {
+            $toolbar.on('keyup paste', () => {
               fieldModel.set('state', 'changed');
             });
             // Re-position the toolbar, which could have changed size.
             fieldModel.get('entity').toolbarView.position();
-          }
+          },
         });
       }
     },
@@ -277,20 +274,20 @@
      * @return {jQuery}
      *   The rendered dropzone.
      */
-    renderDropzone: function (state, text) {
-      var $dropzone = this.$el.find('.quickedit-image-dropzone');
+    renderDropzone(state, text) {
+      let $dropzone = this.$el.find('.quickedit-image-dropzone');
       // If the element already exists, modify its contents.
       if ($dropzone.length) {
         $dropzone
           .removeClass('upload error hover loading')
-          .addClass('.quickedit-image-dropzone ' + state)
+          .addClass(`.quickedit-image-dropzone ${state}`)
           .children('.quickedit-image-text')
             .html(text);
       }
       else {
         $dropzone = $(Drupal.theme('quickeditImageDropzone', {
-          state: state,
-          text: text
+          state,
+          text,
         }));
         this.$el.append($dropzone);
       }
@@ -301,25 +298,25 @@
     /**
      * @inheritdoc
      */
-    revert: function () {
+    revert() {
       this.$el.html(this.model.get('originalValue'));
     },
 
     /**
      * @inheritdoc
      */
-    getQuickEditUISettings: function () {
-      return {padding: false, unifiedToolbar: true, fullWidthToolbar: true, popup: false};
+    getQuickEditUISettings() {
+      return { padding: false, unifiedToolbar: true, fullWidthToolbar: true, popup: false };
     },
 
     /**
      * @inheritdoc
      */
-    showValidationErrors: function () {
-      var errors = Drupal.theme('quickeditImageErrors', {
-        errors: this.model.get('validationErrors')
+    showValidationErrors() {
+      const errors = Drupal.theme('quickeditImageErrors', {
+        errors: this.model.get('validationErrors'),
       });
-      $('#' + this.fieldModel.toolbarView.getMainWysiwygToolgroupId())
+      $(`#${this.fieldModel.toolbarView.getMainWysiwygToolgroupId()}`)
         .append(errors);
       this.getEditedElement()
         .addClass('quickedit-validation-error');
@@ -330,13 +327,12 @@
     /**
      * @inheritdoc
      */
-    removeValidationErrors: function () {
-      $('#' + this.fieldModel.toolbarView.getMainWysiwygToolgroupId())
+    removeValidationErrors() {
+      $(`#${this.fieldModel.toolbarView.getMainWysiwygToolgroupId()}`)
         .find('.quickedit-image-errors').remove();
       this.getEditedElement()
         .removeClass('quickedit-validation-error');
-    }
+    },
 
   });
-
-})(jQuery, _, Drupal);
+}(jQuery, _, Drupal));
diff --git a/core/modules/image/js/theme.es6.js b/core/modules/image/js/theme.es6.js
index cba8f7bbca..b2c4688b7c 100644
--- a/core/modules/image/js/theme.es6.js
+++ b/core/modules/image/js/theme.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal) {
-
-  'use strict';
-
   /**
    * Theme function for validation errors of the Image in-place editor.
    *
@@ -19,7 +16,7 @@
    *   The corresponding HTML.
    */
   Drupal.theme.quickeditImageErrors = function (settings) {
-    return '<div class="quickedit-image-errors">' + settings.errors + '</div>';
+    return `<div class="quickedit-image-errors">${settings.errors}</div>`;
   };
 
   /**
@@ -37,9 +34,9 @@
    *   The corresponding HTML.
    */
   Drupal.theme.quickeditImageDropzone = function (settings) {
-    return '<div class="quickedit-image-dropzone ' + settings.state + '">' +
+    return `<div class="quickedit-image-dropzone ${settings.state}">` +
       '  <i class="quickedit-image-icon"></i>' +
-      '  <span class="quickedit-image-text">' + settings.text + '</span>' +
+      `  <span class="quickedit-image-text">${settings.text}</span>` +
       '</div>';
   };
 
@@ -65,22 +62,21 @@
    *   The corresponding HTML.
    */
   Drupal.theme.quickeditImageToolbar = function (settings) {
-    var html = '<form class="quickedit-image-field-info">';
+    let html = '<form class="quickedit-image-field-info">';
     if (settings.alt_field) {
-      html += '  <div>' +
-        '    <label for="alt" class="' + (settings.alt_field_required ? 'required' : '') + '">' + Drupal.t('Alternative text') + '</label>' +
-        '    <input type="text" placeholder="' + settings.alt + '" value="' + settings.alt + '" name="alt" ' + (settings.alt_field_required ? 'required' : '') + '/>' +
+      html += `${'  <div>' +
+        '    <label for="alt" class="'}${settings.alt_field_required ? 'required' : ''}">${Drupal.t('Alternative text')}</label>` +
+        `    <input type="text" placeholder="${settings.alt}" value="${settings.alt}" name="alt" ${settings.alt_field_required ? 'required' : ''}/>` +
         '  </div>';
     }
     if (settings.title_field) {
-      html += '  <div>' +
-        '    <label for="title" class="' + (settings.title_field_required ? 'form-required' : '') + '">' + Drupal.t('Title') + '</label>' +
-        '    <input type="text" placeholder="' + settings.title + '" value="' + settings.title + '" name="title" ' + (settings.title_field_required ? 'required' : '') + '/>' +
+      html += `${'  <div>' +
+        '    <label for="title" class="'}${settings.title_field_required ? 'form-required' : ''}">${Drupal.t('Title')}</label>` +
+        `    <input type="text" placeholder="${settings.title}" value="${settings.title}" name="title" ${settings.title_field_required ? 'required' : ''}/>` +
         '  </div>';
     }
     html += '</form>';
 
     return html;
   };
-
-})(Drupal);
+}(Drupal));
diff --git a/core/modules/language/language.admin.es6.js b/core/modules/language/language.admin.es6.js
index 9d3daa4ce2..0c0bdf9b69 100644
--- a/core/modules/language/language.admin.es6.js
+++ b/core/modules/language/language.admin.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Makes language negotiation inherit user interface negotiation.
    *
@@ -16,12 +13,12 @@
    *   Attach behavior to language negotiation admin user interface.
    */
   Drupal.behaviors.negotiationLanguage = {
-    attach: function () {
-      var $configForm = $('#language-negotiation-configure-form');
-      var inputSelector = 'input[name$="[configurable]"]';
+    attach() {
+      const $configForm = $('#language-negotiation-configure-form');
+      const inputSelector = 'input[name$="[configurable]"]';
       // Given a customization checkbox derive the language type being changed.
       function toggleTable(checkbox) {
-        var $checkbox = $(checkbox);
+        const $checkbox = $(checkbox);
         // Get the language detection type such as Interface text language
         // detection or Content language detection.
         $checkbox.closest('.table-language-group')
@@ -30,14 +27,13 @@
       }
 
       // Bind hide/show and rearrange customization checkboxes.
-      $configForm.once('negotiation-language-admin-bind').on('change', inputSelector, function (event) {
+      $configForm.once('negotiation-language-admin-bind').on('change', inputSelector, (event) => {
         toggleTable(event.target);
       });
       // Initially, hide language detection types that are not customized.
-      $configForm.find(inputSelector + ':not(:checked)').each(function (index, element) {
+      $configForm.find(`${inputSelector}:not(:checked)`).each((index, element) => {
         toggleTable(element);
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/locale/locale.admin.es6.js b/core/modules/locale/locale.admin.es6.js
index d9701ef94d..90b983e9fa 100644
--- a/core/modules/locale/locale.admin.es6.js
+++ b/core/modules/locale/locale.admin.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Marks changes of translations.
    *
@@ -18,20 +15,20 @@
    *   Detach behavior to show the user if translations has changed.
    */
   Drupal.behaviors.localeTranslateDirty = {
-    attach: function () {
-      var $form = $('#locale-translate-edit-form').once('localetranslatedirty');
+    attach() {
+      const $form = $('#locale-translate-edit-form').once('localetranslatedirty');
       if ($form.length) {
         // Display a notice if any row changed.
         $form.one('formUpdated.localeTranslateDirty', 'table', function () {
-          var $marker = $(Drupal.theme('localeTranslateChangedWarning')).hide();
+          const $marker = $(Drupal.theme('localeTranslateChangedWarning')).hide();
           $(this).addClass('changed').before($marker);
           $marker.fadeIn('slow');
         });
         // Highlight changed row.
         $form.on('formUpdated.localeTranslateDirty', 'tr', function () {
-          var $row = $(this);
-          var $rowToMark = $row.once('localemark');
-          var marker = Drupal.theme('localeTranslateChangedMarker');
+          const $row = $(this);
+          const $rowToMark = $row.once('localemark');
+          const marker = Drupal.theme('localeTranslateChangedMarker');
 
           $row.addClass('changed');
           // Add an asterisk only once if row changed.
@@ -41,14 +38,14 @@
         });
       }
     },
-    detach: function (context, settings, trigger) {
+    detach(context, settings, trigger) {
       if (trigger === 'unload') {
-        var $form = $('#locale-translate-edit-form').removeOnce('localetranslatedirty');
+        const $form = $('#locale-translate-edit-form').removeOnce('localetranslatedirty');
         if ($form.length) {
           $form.off('formUpdated.localeTranslateDirty');
         }
       }
-    }
+    },
   };
 
   /**
@@ -60,10 +57,10 @@
    *   Attaches behavior for toggling details on the translation update page.
    */
   Drupal.behaviors.hideUpdateInformation = {
-    attach: function (context, settings) {
-      var $table = $('#locale-translation-status-form').once('expand-updates');
+    attach(context, settings) {
+      const $table = $('#locale-translation-status-form').once('expand-updates');
       if ($table.length) {
-        var $tbodies = $table.find('tbody');
+        const $tbodies = $table.find('tbody');
 
         // Open/close the description details by toggling a tr class.
         $tbodies.on('click keydown', '.description', function (e) {
@@ -71,23 +68,22 @@
             return;
           }
           e.preventDefault();
-          var $tr = $(this).closest('tr');
+          const $tr = $(this).closest('tr');
 
           $tr.toggleClass('expanded');
 
           // Change screen reader text.
-          $tr.find('.locale-translation-update__prefix').text(function () {
+          $tr.find('.locale-translation-update__prefix').text(() => {
             if ($tr.hasClass('expanded')) {
               return Drupal.t('Hide description');
             }
-            else {
-              return Drupal.t('Show description');
-            }
+
+            return Drupal.t('Show description');
           });
         });
         $table.find('.requirements, .links').hide();
       }
-    }
+    },
   };
 
   $.extend(Drupal.theme, /** @lends Drupal.theme */{
@@ -98,8 +94,8 @@
      * @return {string}
      *   Markup for the marker.
      */
-    localeTranslateChangedMarker: function () {
-      return '<abbr class="warning ajax-changed" title="' + Drupal.t('Changed') + '">*</abbr>';
+    localeTranslateChangedMarker() {
+      return `<abbr class="warning ajax-changed" title="${Drupal.t('Changed')}">*</abbr>`;
     },
 
     /**
@@ -108,9 +104,8 @@
      * @return {string}
      *   Markup for the warning.
      */
-    localeTranslateChangedWarning: function () {
-      return '<div class="clearfix messages messages--warning">' + Drupal.theme('localeTranslateChangedMarker') + ' ' + Drupal.t('Changes made in this table will not be saved until the form is submitted.') + '</div>';
-    }
+    localeTranslateChangedWarning() {
+      return `<div class="clearfix messages messages--warning">${Drupal.theme('localeTranslateChangedMarker')} ${Drupal.t('Changes made in this table will not be saved until the form is submitted.')}</div>`;
+    },
   });
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/locale/locale.bulk.es6.js b/core/modules/locale/locale.bulk.es6.js
index c6743e8321..1d72a0bad7 100644
--- a/core/modules/locale/locale.bulk.es6.js
+++ b/core/modules/locale/locale.bulk.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Select the language code of an imported file based on its filename.
    *
@@ -18,21 +15,20 @@
    *   Attaches behavior for preselecting language code based on filename.
    */
   Drupal.behaviors.importLanguageCodeSelector = {
-    attach: function (context, settings) {
-      var $form = $('#locale-translate-import-form').once('autodetect-lang');
+    attach(context, settings) {
+      const $form = $('#locale-translate-import-form').once('autodetect-lang');
       if ($form.length) {
-        var $langcode = $form.find('.langcode-input');
+        const $langcode = $form.find('.langcode-input');
         $form.find('.file-import-input')
           .on('change', function () {
             // If the filename is fully the language code or the filename
             // ends with a language code, pre-select that one.
-            var matches = $(this).val().match(/([^.][\.]*)([\w-]+)\.po$/);
-            if (matches && $langcode.find('option[value="' + matches[2] + '"]').length) {
+            const matches = $(this).val().match(/([^.][\.]*)([\w-]+)\.po$/);
+            if (matches && $langcode.find(`option[value="${matches[2]}"]`).length) {
               $langcode.val(matches[2]);
             }
           });
       }
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/locale/locale.datepicker.es6.js b/core/modules/locale/locale.datepicker.es6.js
index a952ade320..7704fc3554 100644
--- a/core/modules/locale/locale.datepicker.es6.js
+++ b/core/modules/locale/locale.datepicker.es6.js
@@ -4,16 +4,13 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Attaches language support to the jQuery UI datepicker component.
    *
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.localeDatepicker = {
-    attach: function (context, settings) {
+    attach(context, settings) {
       // This code accesses drupalSettings and localized strings via Drupal.t().
       // So this code should run after these are initialized. By placing it in an
       // attach behavior this is assured.
@@ -23,18 +20,18 @@
         nextText: Drupal.t('Next'),
         currentText: Drupal.t('Today'),
         monthNames: [
-          Drupal.t('January', {}, {context: 'Long month name'}),
-          Drupal.t('February', {}, {context: 'Long month name'}),
-          Drupal.t('March', {}, {context: 'Long month name'}),
-          Drupal.t('April', {}, {context: 'Long month name'}),
-          Drupal.t('May', {}, {context: 'Long month name'}),
-          Drupal.t('June', {}, {context: 'Long month name'}),
-          Drupal.t('July', {}, {context: 'Long month name'}),
-          Drupal.t('August', {}, {context: 'Long month name'}),
-          Drupal.t('September', {}, {context: 'Long month name'}),
-          Drupal.t('October', {}, {context: 'Long month name'}),
-          Drupal.t('November', {}, {context: 'Long month name'}),
-          Drupal.t('December', {}, {context: 'Long month name'})
+          Drupal.t('January', {}, { context: 'Long month name' }),
+          Drupal.t('February', {}, { context: 'Long month name' }),
+          Drupal.t('March', {}, { context: 'Long month name' }),
+          Drupal.t('April', {}, { context: 'Long month name' }),
+          Drupal.t('May', {}, { context: 'Long month name' }),
+          Drupal.t('June', {}, { context: 'Long month name' }),
+          Drupal.t('July', {}, { context: 'Long month name' }),
+          Drupal.t('August', {}, { context: 'Long month name' }),
+          Drupal.t('September', {}, { context: 'Long month name' }),
+          Drupal.t('October', {}, { context: 'Long month name' }),
+          Drupal.t('November', {}, { context: 'Long month name' }),
+          Drupal.t('December', {}, { context: 'Long month name' }),
         ],
         monthNamesShort: [
           Drupal.t('Jan'),
@@ -48,7 +45,7 @@
           Drupal.t('Sep'),
           Drupal.t('Oct'),
           Drupal.t('Nov'),
-          Drupal.t('Dec')
+          Drupal.t('Dec'),
         ],
         dayNames: [
           Drupal.t('Sunday'),
@@ -57,7 +54,7 @@
           Drupal.t('Wednesday'),
           Drupal.t('Thursday'),
           Drupal.t('Friday'),
-          Drupal.t('Saturday')
+          Drupal.t('Saturday'),
         ],
         dayNamesShort: [
           Drupal.t('Sun'),
@@ -66,7 +63,7 @@
           Drupal.t('Wed'),
           Drupal.t('Thu'),
           Drupal.t('Fri'),
-          Drupal.t('Sat')
+          Drupal.t('Sat'),
         ],
         dayNamesMin: [
           Drupal.t('Su'),
@@ -75,14 +72,13 @@
           Drupal.t('We'),
           Drupal.t('Th'),
           Drupal.t('Fr'),
-          Drupal.t('Sa')
+          Drupal.t('Sa'),
         ],
         dateFormat: Drupal.t('mm/dd/yy'),
         firstDay: 0,
-        isRTL: 0
+        isRTL: 0,
       }, drupalSettings.jquery.ui.datepicker);
       $.datepicker.setDefaults($.datepicker.regional['drupal-locale']);
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/locale/tests/locale_test.es6.js b/core/modules/locale/tests/locale_test.es6.js
deleted file mode 100644
index ba62b7504e..0000000000
--- a/core/modules/locale/tests/locale_test.es6.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * @file
- * JavaScript for locale_test.module.
- *
- * @ignore
- */
-
-Drupal.t("Standard Call t");
-Drupal
-  .
-  t
-  (
-    "Whitespace Call t"
-  )
-;
-
-Drupal.t('Single Quote t');
-Drupal.t('Single Quote \'Escaped\' t');
-Drupal.t('Single Quote ' + 'Concat ' + 'strings ' + 't');
-
-Drupal.t("Double Quote t");
-Drupal.t("Double Quote \"Escaped\" t");
-Drupal.t("Double Quote " + "Concat " + "strings " + "t");
-
-Drupal.t("Context Unquoted t", {}, {context: "Context string unquoted"});
-Drupal.t("Context Single Quoted t", {}, {'context': "Context string single quoted"});
-Drupal.t("Context Double Quoted t", {}, {"context": "Context string double quoted"});
-
-Drupal.t("Context !key Args t", {'!key': 'value'}, {context: "Context string"});
-
-Drupal.formatPlural(1, "Standard Call plural", "Standard Call @count plural");
-Drupal
-  .
-  formatPlural
-  (
-    1,
-    "Whitespace Call plural",
-    "Whitespace Call @count plural"
-  )
-;
-
-Drupal.formatPlural(1, 'Single Quote plural', 'Single Quote @count plural');
-Drupal.formatPlural(1, 'Single Quote \'Escaped\' plural', 'Single Quote \'Escaped\' @count plural');
-
-Drupal.formatPlural(1, "Double Quote plural", "Double Quote @count plural");
-Drupal.formatPlural(1, "Double Quote \"Escaped\" plural", "Double Quote \"Escaped\" @count plural");
-
-Drupal.formatPlural(1, "Context Unquoted plural", "Context Unquoted @count plural", {}, {context: "Context string unquoted"});
-Drupal.formatPlural(1, "Context Single Quoted plural", "Context Single Quoted @count plural", {}, {'context': "Context string single quoted"});
-Drupal.formatPlural(1, "Context Double Quoted plural", "Context Double Quoted @count plural", {}, {"context": "Context string double quoted"});
-
-Drupal.formatPlural(1, "Context !key Args plural", "Context !key Args @count plural", {'!key': 'value'}, {context: "Context string"});
diff --git a/core/modules/locale/tests/locale_test.js b/core/modules/locale/tests/locale_test.js
index 86acc4a13c..ba62b7504e 100644
--- a/core/modules/locale/tests/locale_test.js
+++ b/core/modules/locale/tests/locale_test.js
@@ -1,12 +1,18 @@
 /**
-* DO NOT EDIT THIS FILE.
-* See the following change record for more information,
-* https://www.drupal.org/node/2815083
-* @preserve
-**/
+ * @file
+ * JavaScript for locale_test.module.
+ *
+ * @ignore
+ */
 
 Drupal.t("Standard Call t");
-Drupal.t("Whitespace Call t");
+Drupal
+  .
+  t
+  (
+    "Whitespace Call t"
+  )
+;
 
 Drupal.t('Single Quote t');
 Drupal.t('Single Quote \'Escaped\' t');
@@ -16,14 +22,22 @@ Drupal.t("Double Quote t");
 Drupal.t("Double Quote \"Escaped\" t");
 Drupal.t("Double Quote " + "Concat " + "strings " + "t");
 
-Drupal.t("Context Unquoted t", {}, { context: "Context string unquoted" });
-Drupal.t("Context Single Quoted t", {}, { 'context': "Context string single quoted" });
-Drupal.t("Context Double Quoted t", {}, { "context": "Context string double quoted" });
+Drupal.t("Context Unquoted t", {}, {context: "Context string unquoted"});
+Drupal.t("Context Single Quoted t", {}, {'context': "Context string single quoted"});
+Drupal.t("Context Double Quoted t", {}, {"context": "Context string double quoted"});
 
-Drupal.t("Context !key Args t", { '!key': 'value' }, { context: "Context string" });
+Drupal.t("Context !key Args t", {'!key': 'value'}, {context: "Context string"});
 
 Drupal.formatPlural(1, "Standard Call plural", "Standard Call @count plural");
-Drupal.formatPlural(1, "Whitespace Call plural", "Whitespace Call @count plural");
+Drupal
+  .
+  formatPlural
+  (
+    1,
+    "Whitespace Call plural",
+    "Whitespace Call @count plural"
+  )
+;
 
 Drupal.formatPlural(1, 'Single Quote plural', 'Single Quote @count plural');
 Drupal.formatPlural(1, 'Single Quote \'Escaped\' plural', 'Single Quote \'Escaped\' @count plural');
@@ -31,8 +45,8 @@ Drupal.formatPlural(1, 'Single Quote \'Escaped\' plural', 'Single Quote \'Escape
 Drupal.formatPlural(1, "Double Quote plural", "Double Quote @count plural");
 Drupal.formatPlural(1, "Double Quote \"Escaped\" plural", "Double Quote \"Escaped\" @count plural");
 
-Drupal.formatPlural(1, "Context Unquoted plural", "Context Unquoted @count plural", {}, { context: "Context string unquoted" });
-Drupal.formatPlural(1, "Context Single Quoted plural", "Context Single Quoted @count plural", {}, { 'context': "Context string single quoted" });
-Drupal.formatPlural(1, "Context Double Quoted plural", "Context Double Quoted @count plural", {}, { "context": "Context string double quoted" });
+Drupal.formatPlural(1, "Context Unquoted plural", "Context Unquoted @count plural", {}, {context: "Context string unquoted"});
+Drupal.formatPlural(1, "Context Single Quoted plural", "Context Single Quoted @count plural", {}, {'context': "Context string single quoted"});
+Drupal.formatPlural(1, "Context Double Quoted plural", "Context Double Quoted @count plural", {}, {"context": "Context string double quoted"});
 
-Drupal.formatPlural(1, "Context !key Args plural", "Context !key Args @count plural", { '!key': 'value' }, { context: "Context string" });
\ No newline at end of file
+Drupal.formatPlural(1, "Context !key Args plural", "Context !key Args @count plural", {'!key': 'value'}, {context: "Context string"});
diff --git a/core/modules/media/js/media_form.es6.js b/core/modules/media/js/media_form.es6.js
index c93eac6644..cb0da60dc8 100644
--- a/core/modules/media/js/media_form.es6.js
+++ b/core/modules/media/js/media_form.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Behaviors for summaries for tabs in the media edit form.
    *
@@ -16,25 +13,24 @@
    *   Attaches summary behavior for tabs in the media edit form.
    */
   Drupal.behaviors.mediaFormSummaries = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
 
-      $context.find('.media-form-author').drupalSetSummary(function (context) {
-        var $authorContext = $(context);
-        var name = $authorContext.find('.field--name-uid input').val();
-        var date = $authorContext.find('.field--name-created input').val();
+      $context.find('.media-form-author').drupalSetSummary((context) => {
+        const $authorContext = $(context);
+        const name = $authorContext.find('.field--name-uid input').val();
+        const date = $authorContext.find('.field--name-created input').val();
 
         if (name && date) {
-          return Drupal.t('By @name on @date', {'@name': name, '@date': date});
+          return Drupal.t('By @name on @date', { '@name': name, '@date': date });
         }
         else if (name) {
-          return Drupal.t('By @name', {'@name': name});
+          return Drupal.t('By @name', { '@name': name });
         }
         else if (date) {
-          return Drupal.t('Authored on @date', {'@date': date});
+          return Drupal.t('Authored on @date', { '@date': date });
         }
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/media/js/media_type_form.es6.js b/core/modules/media/js/media_type_form.es6.js
index 0c1d906e01..4c664a3ded 100644
--- a/core/modules/media/js/media_type_form.es6.js
+++ b/core/modules/media/js/media_type_form.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Behaviors for setting summaries on media type form.
    *
@@ -16,11 +13,11 @@
    *   Attaches summary behaviors on media type edit forms.
    */
   Drupal.behaviors.mediaTypeFormSummaries = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
       // Provide the vertical tab summaries.
-      $context.find('#edit-workflow').drupalSetSummary(function (context) {
-        var vals = [];
+      $context.find('#edit-workflow').drupalSetSummary((context) => {
+        const vals = [];
         $(context).find('input[name^="options"]:checked').parent().each(function () {
           vals.push(Drupal.checkPlain($(this).find('label').text()));
         });
@@ -29,8 +26,8 @@
         }
         return vals.join(', ');
       });
-      $(context).find('#edit-language').drupalSetSummary(function (context) {
-        var vals = [];
+      $(context).find('#edit-language').drupalSetSummary((context) => {
+        const vals = [];
 
         vals.push($(context).find('.js-form-item-language-configuration-langcode select option:selected').text());
 
@@ -40,7 +37,6 @@
 
         return vals.join(', ');
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/menu_ui/menu_ui.admin.es6.js b/core/modules/menu_ui/menu_ui.admin.es6.js
index 345138f17a..fabcec048d 100644
--- a/core/modules/menu_ui/menu_ui.admin.es6.js
+++ b/core/modules/menu_ui/menu_ui.admin.es6.js
@@ -4,16 +4,13 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    *
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.menuUiChangeParentItems = {
-    attach: function (context, settings) {
-      var $menu = $('#edit-menu').once('menu-parent');
+    attach(context, settings) {
+      const $menu = $('#edit-menu').once('menu-parent');
       if ($menu.length) {
         // Update the list of available parent menu items to match the initial
         // available menus.
@@ -22,15 +19,15 @@
         // Update list of available parent menu items.
         $menu.on('change', 'input', Drupal.menuUiUpdateParentList);
       }
-    }
+    },
   };
 
   /**
    * Function to set the options of the menu parent item dropdown.
    */
   Drupal.menuUiUpdateParentList = function () {
-    var $menu = $('#edit-menu');
-    var values = [];
+    const $menu = $('#edit-menu');
+    const values = [];
 
     $menu.find('input:checked').each(function () {
       // Get the names of all checked menus.
@@ -38,22 +35,22 @@
     });
 
     $.ajax({
-      url: location.protocol + '//' + location.host + Drupal.url('admin/structure/menu/parents'),
+      url: `${location.protocol}//${location.host}${Drupal.url('admin/structure/menu/parents')}`,
       type: 'POST',
-      data: {'menus[]': values},
+      data: { 'menus[]': values },
       dataType: 'json',
-      success: function (options) {
-        var $select = $('#edit-menu-parent');
+      success(options) {
+        const $select = $('#edit-menu-parent');
         // Save key of last selected element.
-        var selected = $select.val();
+        const selected = $select.val();
         // Remove all existing options from dropdown.
         $select.children().remove();
         // Add new options to dropdown. Keep a count of options for testing later.
-        var totalOptions = 0;
-        for (var machineName in options) {
+        let totalOptions = 0;
+        for (const machineName in options) {
           if (options.hasOwnProperty(machineName)) {
             $select.append(
-              $('<option ' + (machineName === selected ? ' selected="selected"' : '') + '></option>').val(machineName).text(options[machineName])
+              $(`<option ${machineName === selected ? ' selected="selected"' : ''}></option>`).val(machineName).text(options[machineName]),
             );
             totalOptions++;
           }
@@ -61,8 +58,7 @@
 
         // Hide the parent options if there are no options for it.
         $select.closest('div').toggle(totalOptions > 0).attr('hidden', totalOptions === 0);
-      }
+      },
     });
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/menu_ui/menu_ui.es6.js b/core/modules/menu_ui/menu_ui.es6.js
index 5eb10e0781..f384f1113f 100644
--- a/core/modules/menu_ui/menu_ui.es6.js
+++ b/core/modules/menu_ui/menu_ui.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Set a summary on the menu link form.
    *
@@ -16,17 +13,16 @@
    *   Find the form and call `drupalSetSummary` on it.
    */
   Drupal.behaviors.menuUiDetailsSummaries = {
-    attach: function (context) {
-      $(context).find('.menu-link-form').drupalSetSummary(function (context) {
-        var $context = $(context);
+    attach(context) {
+      $(context).find('.menu-link-form').drupalSetSummary((context) => {
+        const $context = $(context);
         if ($context.find('.js-form-item-menu-enabled input').is(':checked')) {
           return Drupal.checkPlain($context.find('.js-form-item-menu-title input').val());
         }
-        else {
-          return Drupal.t('Not in menu');
-        }
+
+        return Drupal.t('Not in menu');
       });
-    }
+    },
   };
 
   /**
@@ -39,16 +35,16 @@
    *   link titles.
    */
   Drupal.behaviors.menuUiLinkAutomaticTitle = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
       $context.find('.menu-link-form').each(function () {
-        var $this = $(this);
+        const $this = $(this);
         // Try to find menu settings widget elements as well as a 'title' field
         // in the form, but play nicely with user permissions and form
         // alterations.
-        var $checkbox = $this.find('.js-form-item-menu-enabled input');
-        var $link_title = $context.find('.js-form-item-menu-title input');
-        var $title = $this.closest('form').find('.js-form-item-title-0-value input');
+        const $checkbox = $this.find('.js-form-item-menu-enabled input');
+        const $link_title = $context.find('.js-form-item-menu-title input');
+        const $title = $this.closest('form').find('.js-form-item-title-0-value input');
         // Bail out if we do not have all required fields.
         if (!($checkbox.length && $link_title.length && $title.length)) {
           return;
@@ -60,11 +56,11 @@
           $link_title.data('menuLinkAutomaticTitleOverridden', true);
         }
         // Whenever the value is changed manually, disable this behavior.
-        $link_title.on('keyup', function () {
+        $link_title.on('keyup', () => {
           $link_title.data('menuLinkAutomaticTitleOverridden', true);
         });
         // Global trigger on checkbox (do not fill-in a value when disabled).
-        $checkbox.on('change', function () {
+        $checkbox.on('change', () => {
           if ($checkbox.is(':checked')) {
             if (!$link_title.data('menuLinkAutomaticTitleOverridden')) {
               $link_title.val($title.val());
@@ -78,14 +74,13 @@
           $checkbox.trigger('formUpdated');
         });
         // Take over any title change.
-        $title.on('keyup', function () {
+        $title.on('keyup', () => {
           if (!$link_title.data('menuLinkAutomaticTitleOverridden') && $checkbox.is(':checked')) {
             $link_title.val($title.val());
             $link_title.val($title.val()).trigger('formUpdated');
           }
         });
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/node/content_types.es6.js b/core/modules/node/content_types.es6.js
index 4ec34aa05e..e7c01dd88a 100644
--- a/core/modules/node/content_types.es6.js
+++ b/core/modules/node/content_types.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Behaviors for setting summaries on content type form.
    *
@@ -16,16 +13,16 @@
    *   Attaches summary behaviors on content type edit forms.
    */
   Drupal.behaviors.contentTypes = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
       // Provide the vertical tab summaries.
-      $context.find('#edit-submission').drupalSetSummary(function (context) {
-        var vals = [];
+      $context.find('#edit-submission').drupalSetSummary((context) => {
+        const vals = [];
         vals.push(Drupal.checkPlain($(context).find('#edit-title-label').val()) || Drupal.t('Requires a title'));
         return vals.join(', ');
       });
-      $context.find('#edit-workflow').drupalSetSummary(function (context) {
-        var vals = [];
+      $context.find('#edit-workflow').drupalSetSummary((context) => {
+        const vals = [];
         $(context).find('input[name^="options"]:checked').next('label').each(function () {
           vals.push(Drupal.checkPlain($(this).text()));
         });
@@ -34,8 +31,8 @@
         }
         return vals.join(', ');
       });
-      $('#edit-language', context).drupalSetSummary(function (context) {
-        var vals = [];
+      $('#edit-language', context).drupalSetSummary((context) => {
+        const vals = [];
 
         vals.push($('.js-form-item-language-configuration-langcode select option:selected', context).text());
 
@@ -45,9 +42,9 @@
 
         return vals.join(', ');
       });
-      $context.find('#edit-display').drupalSetSummary(function (context) {
-        var vals = [];
-        var $editContext = $(context);
+      $context.find('#edit-display').drupalSetSummary((context) => {
+        const vals = [];
+        const $editContext = $(context);
         $editContext.find('input:checked').next('label').each(function () {
           vals.push(Drupal.checkPlain($(this).text()));
         });
@@ -56,7 +53,6 @@
         }
         return vals.join(', ');
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/node/node.es6.js b/core/modules/node/node.es6.js
index 086263d2a8..6d6beb92fb 100644
--- a/core/modules/node/node.es6.js
+++ b/core/modules/node/node.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Behaviors for tabs in the node edit form.
    *
@@ -16,28 +13,28 @@
    *   Attaches summary behavior for tabs in the node edit form.
    */
   Drupal.behaviors.nodeDetailsSummaries = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
 
-      $context.find('.node-form-author').drupalSetSummary(function (context) {
-        var $authorContext = $(context);
-        var name = $authorContext.find('.field--name-uid input').val();
-        var date = $authorContext.find('.field--name-created input').val();
+      $context.find('.node-form-author').drupalSetSummary((context) => {
+        const $authorContext = $(context);
+        const name = $authorContext.find('.field--name-uid input').val();
+        const date = $authorContext.find('.field--name-created input').val();
 
         if (name && date) {
-          return Drupal.t('By @name on @date', {'@name': name, '@date': date});
+          return Drupal.t('By @name on @date', { '@name': name, '@date': date });
         }
         else if (name) {
-          return Drupal.t('By @name', {'@name': name});
+          return Drupal.t('By @name', { '@name': name });
         }
         else if (date) {
-          return Drupal.t('Authored on @date', {'@date': date});
+          return Drupal.t('Authored on @date', { '@date': date });
         }
       });
 
-      $context.find('.node-form-options').drupalSetSummary(function (context) {
-        var $optionsContext = $(context);
-        var vals = [];
+      $context.find('.node-form-options').drupalSetSummary((context) => {
+        const $optionsContext = $(context);
+        const vals = [];
 
         if ($optionsContext.find('input').is(':checked')) {
           $optionsContext.find('input:checked').next('label').each(function () {
@@ -45,11 +42,9 @@
           });
           return vals.join(', ');
         }
-        else {
-          return Drupal.t('Not promoted');
-        }
+
+        return Drupal.t('Not promoted');
       });
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/node/node.preview.es6.js b/core/modules/node/node.preview.es6.js
index 4054183a1f..abd670acf8 100644
--- a/core/modules/node/node.preview.es6.js
+++ b/core/modules/node/node.preview.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Disables all non-relevant links in node previews.
    *
@@ -21,47 +18,46 @@
    *   Detaches confirmation prompt for clicking links in node preview mode.
    */
   Drupal.behaviors.nodePreviewDestroyLinks = {
-    attach: function (context) {
-
+    attach(context) {
       function clickPreviewModal(event) {
         // Only confirm leaving previews when left-clicking and user is not
         // pressing the ALT, CTRL, META (Command key on the Macintosh keyboard)
         // or SHIFT key.
         if (event.button === 0 && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) {
           event.preventDefault();
-          var $previewDialog = $('<div>' + Drupal.theme('nodePreviewModal') + '</div>').appendTo('body');
+          const $previewDialog = $(`<div>${Drupal.theme('nodePreviewModal')}</div>`).appendTo('body');
           Drupal.dialog($previewDialog, {
             title: Drupal.t('Leave preview?'),
             buttons: [
               {
                 text: Drupal.t('Cancel'),
-                click: function () {
+                click() {
                   $(this).dialog('close');
-                }
+                },
               }, {
                 text: Drupal.t('Leave preview'),
-                click: function () {
+                click() {
                   window.top.location.href = event.target.href;
-                }
-              }
-            ]
+                },
+              },
+            ],
           }).showModal();
         }
       }
 
-      var $preview = $(context).find('.content').once('node-preview');
+      const $preview = $(context).find('.content').once('node-preview');
       if ($(context).find('.node-preview-container').length) {
         $preview.on('click.preview', 'a:not([href^=#], #edit-backlink, #toolbar-administration a)', clickPreviewModal);
       }
     },
-    detach: function (context, settings, trigger) {
+    detach(context, settings, trigger) {
       if (trigger === 'unload') {
-        var $preview = $(context).find('.content').removeOnce('node-preview');
+        const $preview = $(context).find('.content').removeOnce('node-preview');
         if ($preview.length) {
           $preview.off('click.preview');
         }
       }
-    }
+    },
   };
 
   /**
@@ -73,14 +69,14 @@
    *   Attaches automatic submit on `formUpdated.preview` events.
    */
   Drupal.behaviors.nodePreviewSwitchViewMode = {
-    attach: function (context) {
-      var $autosubmit = $(context).find('[data-drupal-autosubmit]').once('autosubmit');
+    attach(context) {
+      const $autosubmit = $(context).find('[data-drupal-autosubmit]').once('autosubmit');
       if ($autosubmit.length) {
         $autosubmit.on('formUpdated.preview', function () {
           $(this.form).trigger('submit');
         });
       }
-    }
+    },
   };
 
   /**
@@ -90,10 +86,9 @@
    *   Markup for the node preview modal.
    */
   Drupal.theme.nodePreviewModal = function () {
-    return '<p>' +
-      Drupal.t('Leaving the preview will cause unsaved changes to be lost. Are you sure you want to leave the preview?') +
-      '</p><small class="description">' +
-      Drupal.t('CTRL+Left click will prevent this dialog from showing and proceed to the clicked link.') + '</small>';
+    return `<p>${
+      Drupal.t('Leaving the preview will cause unsaved changes to be lost. Are you sure you want to leave the preview?')
+      }</p><small class="description">${
+      Drupal.t('CTRL+Left click will prevent this dialog from showing and proceed to the clicked link.')}</small>`;
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/outside_in/js/off-canvas.es6.js b/core/modules/outside_in/js/off-canvas.es6.js
index d7c8d906f6..01262bef02 100644
--- a/core/modules/outside_in/js/off-canvas.es6.js
+++ b/core/modules/outside_in/js/off-canvas.es6.js
@@ -8,21 +8,18 @@
  */
 
 (function ($, Drupal, debounce, displace) {
-
-  'use strict';
-
   // The minimum width to use body displace needs to match the width at which
   // the tray will be %100 width. @see outside_in.module.css
-  var minDisplaceWidth = 768;
+  const minDisplaceWidth = 768;
 
   /**
    * The edge of the screen that the dialog should appear on.
    *
    * @type {string}
    */
-  var edge = document.documentElement.dir === 'rtl' ? 'left' : 'right';
+  const edge = document.documentElement.dir === 'rtl' ? 'left' : 'right';
 
-  var $mainCanvasWrapper = $('[data-off-canvas-main-canvas]');
+  const $mainCanvasWrapper = $('[data-off-canvas-main-canvas]');
 
   /**
    * Resets the size of the dialog.
@@ -31,22 +28,22 @@
    *   The event triggered.
    */
   function resetSize(event) {
-    var offsets = displace.offsets;
-    var $element = event.data.$element;
-    var $widget = $element.dialog('widget');
+    const offsets = displace.offsets;
+    const $element = event.data.$element;
+    const $widget = $element.dialog('widget');
 
-    var adjustedOptions = {
+    const adjustedOptions = {
       // @see http://api.jqueryui.com/position/
       position: {
-        my: edge + ' top',
-        at: edge + ' top' + (offsets.top !== 0 ? '+' + offsets.top : ''),
-        of: window
-      }
+        my: `${edge} top`,
+        at: `${edge} top${offsets.top !== 0 ? `+${offsets.top}` : ''}`,
+        of: window,
+      },
     };
 
     $widget.css({
       position: 'fixed',
-      height: ($(window).height() - (offsets.top + offsets.bottom)) + 'px'
+      height: `${$(window).height() - (offsets.top + offsets.bottom)}px`,
     });
 
     $element
@@ -61,20 +58,22 @@
    *   The event triggered.
    */
   function handleDialogResize(event) {
-    var $element = event.data.$element;
-    var $widget = $element.dialog('widget');
+    const $element = event.data.$element;
+    const $widget = $element.dialog('widget');
 
-    var $offsets = $widget.find('> :not(#drupal-off-canvas, .ui-resizable-handle)');
-    var offset = 0;
-    var modalHeight;
+    const $offsets = $widget.find('> :not(#drupal-off-canvas, .ui-resizable-handle)');
+    let offset = 0;
+    let modalHeight;
 
     // Let scroll element take all the height available.
-    $element.css({height: 'auto'});
+    $element.css({ height: 'auto' });
     modalHeight = $widget.height();
-    $offsets.each(function () { offset += $(this).outerHeight(); });
+    $offsets.each(function () {
+      offset += $(this).outerHeight();
+    });
 
     // Take internal padding into account.
-    var scrollOffset = $element.outerHeight() - $element.height();
+    const scrollOffset = $element.outerHeight() - $element.height();
     $element.height(modalHeight - offset - scrollOffset);
   }
 
@@ -88,14 +87,14 @@
     if ($('body').outerWidth() < minDisplaceWidth) {
       return;
     }
-    var $element = event.data.$element;
-    var $widget = $element.dialog('widget');
+    const $element = event.data.$element;
+    const $widget = $element.dialog('widget');
 
-    var width = $widget.outerWidth();
-    var mainCanvasPadding = $mainCanvasWrapper.css('padding-' + edge);
+    const width = $widget.outerWidth();
+    const mainCanvasPadding = $mainCanvasWrapper.css(`padding-${edge}`);
     if (width !== mainCanvasPadding) {
-      $mainCanvasWrapper.css('padding-' + edge, width + 'px');
-      $widget.attr('data-offset-' + edge, width);
+      $mainCanvasWrapper.css(`padding-${edge}`, `${width}px`);
+      $widget.attr(`data-offset-${edge}`, width);
       displace();
     }
   }
@@ -109,11 +108,11 @@
    *   Attaches event listeners for off-canvas dialogs.
    */
   Drupal.behaviors.offCanvasEvents = {
-    attach: function () {
+    attach() {
       $(window).once('off-canvas').on({
         'dialog:aftercreate': function (event, dialog, $element, settings) {
           if ($element.is('#drupal-off-canvas')) {
-            var eventData = {settings: settings, $element: $element};
+            const eventData = { settings, $element };
             $('.ui-dialog-off-canvas, .ui-dialog-off-canvas .ui-dialog-titlebar').toggleClass('ui-dialog-empty-title', !settings.title);
 
             $element
@@ -122,7 +121,7 @@
               .on('dialogContentResize.off-canvas', eventData, debounce(bodyPadding, 100))
               .trigger('dialogresize.off-canvas');
 
-            $element.dialog('widget').attr('data-offset-' + edge, '');
+            $element.dialog('widget').attr(`data-offset-${edge}`, '');
 
             $(window)
               .on('resize.off-canvas scroll.off-canvas', eventData, debounce(resetSize, 100))
@@ -135,8 +134,8 @@
             // @see http://api.jqueryui.com/position/
             settings.position = {
               my: 'left top',
-              at: edge + ' top',
-              of: window
+              at: `${edge} top`,
+              of: window,
             };
             settings.dialogClass += ' ui-dialog-off-canvas';
             // Applies initial height to dialog based on window height.
@@ -150,11 +149,10 @@
             // Remove all *.off-canvas events
             $(document).off('.off-canvas');
             $(window).off('.off-canvas');
-            $mainCanvasWrapper.css('padding-' + edge, 0);
+            $mainCanvasWrapper.css(`padding-${edge}`, 0);
           }
-        }
+        },
       });
-    }
+    },
   };
-
-})(jQuery, Drupal, Drupal.debounce, Drupal.displace);
+}(jQuery, Drupal, Drupal.debounce, Drupal.displace));
diff --git a/core/modules/outside_in/js/outside_in.es6.js b/core/modules/outside_in/js/outside_in.es6.js
index eea9075cab..66708cea0d 100644
--- a/core/modules/outside_in/js/outside_in.es6.js
+++ b/core/modules/outside_in/js/outside_in.es6.js
@@ -4,14 +4,11 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
-  var blockConfigureSelector = '[data-outside-in-edit]';
-  var toggleEditSelector = '[data-drupal-outsidein="toggle"]';
-  var itemsToToggleSelector = '[data-off-canvas-main-canvas], #toolbar-bar, [data-drupal-outsidein="editable"] a, [data-drupal-outsidein="editable"] button';
-  var contextualItemsSelector = '[data-contextual-id] a, [data-contextual-id] button';
-  var quickEditItemSelector = '[data-quickedit-entity-id]';
+  const blockConfigureSelector = '[data-outside-in-edit]';
+  const toggleEditSelector = '[data-drupal-outsidein="toggle"]';
+  const itemsToToggleSelector = '[data-off-canvas-main-canvas], #toolbar-bar, [data-drupal-outsidein="editable"] a, [data-drupal-outsidein="editable"] button';
+  const contextualItemsSelector = '[data-contextual-id] a, [data-contextual-id] button';
+  const quickEditItemSelector = '[data-quickedit-entity-id]';
 
   /**
    * Reacts to contextual links being added.
@@ -23,7 +20,7 @@
    *
    * @listens event:drupalContextualLinkAdded
    */
-  $(document).on('drupalContextualLinkAdded', function (event, data) {
+  $(document).on('drupalContextualLinkAdded', (event, data) => {
     // Bind Ajax behaviors to all items showing the class.
     // @todo Fix contextual links to work with use-ajax links in
     //    https://www.drupal.org/node/2764931.
@@ -33,7 +30,7 @@
     // Click "Edit" button in toolbar to force Contextual Edit which starts
     // Settings Tray edit mode also.
     data.$el.find(blockConfigureSelector)
-      .on('click.outsidein', function () {
+      .on('click.outsidein', () => {
         if (!isInEditMode()) {
           $(toggleEditSelector).trigger('click').trigger('click.outside_in');
         }
@@ -42,10 +39,10 @@
       });
   });
 
-  $(document).on('keyup.outsidein', function (e) {
+  $(document).on('keyup.outsidein', (e) => {
     if (isInEditMode() && e.keyCode === 27) {
       Drupal.announce(
-        Drupal.t('Exited edit mode.')
+        Drupal.t('Exited edit mode.'),
       );
       toggleEditMode();
     }
@@ -128,8 +125,8 @@
       throw new Error('data-off-canvas-main-canvas is missing from outside-in-page-wrapper.html.twig');
     }
     editMode = !!editMode;
-    var $editButton = $(toggleEditSelector);
-    var $editables;
+    const $editButton = $(toggleEditSelector);
+    let $editables;
     // Turn on edit mode.
     if (editMode) {
       $editButton.text(Drupal.t('Editing'));
@@ -144,7 +141,7 @@
         // and click it.
         $editables
           .not(contextualItemsSelector)
-          .on('click.outsidein', function (e) {
+          .on('click.outsidein', (e) => {
             // Contextual links are allowed to function in Edit mode.
             if ($(e.target).closest('.contextual').length || !localStorage.getItem('Drupal.contextualToolbar.isViewing')) {
               return;
@@ -154,7 +151,7 @@
           });
         $(quickEditItemSelector)
           .not(contextualItemsSelector)
-          .on('click.outsidein', function (e) {
+          .on('click.outsidein', (e) => {
             // For all non-contextual links or the contextual QuickEdit link close the off-canvas dialog.
             if (!$(e.target).parent().hasClass('contextual') || $(e.target).parent().hasClass('quickedit')) {
               closeOffCanvas();
@@ -193,12 +190,12 @@
    *   Attaches contextual toolbar behavior on a contextualToolbar-init event.
    */
   Drupal.behaviors.outsideInEdit = {
-    attach: function () {
-      var editMode = localStorage.getItem('Drupal.contextualToolbar.isViewing') === 'false';
+    attach() {
+      const editMode = localStorage.getItem('Drupal.contextualToolbar.isViewing') === 'false';
       if (editMode) {
         setEditModeState(true);
       }
-    }
+    },
   };
 
   /**
@@ -210,26 +207,25 @@
    *   Toggle the js-outside-edit-mode class.
    */
   Drupal.behaviors.toggleEditMode = {
-    attach: function () {
-
+    attach() {
       $(toggleEditSelector).once('outsidein').on('click.outsidein', toggleEditMode);
 
-      var search = Drupal.ajax.WRAPPER_FORMAT + '=drupal_dialog';
-      var replace = Drupal.ajax.WRAPPER_FORMAT + '=drupal_dialog_off_canvas';
+      const search = `${Drupal.ajax.WRAPPER_FORMAT}=drupal_dialog`;
+      const replace = `${Drupal.ajax.WRAPPER_FORMAT}=drupal_dialog_off_canvas`;
       // Loop through all Ajax links and change the format to dialog-off-canvas when
       // needed.
       Drupal.ajax.instances
-        .filter(function (instance) {
-          var hasElement = instance && !!instance.element;
-          var rendererOffCanvas = false;
-          var wrapperOffCanvas = false;
+        .filter((instance) => {
+          const hasElement = instance && !!instance.element;
+          let rendererOffCanvas = false;
+          let wrapperOffCanvas = false;
           if (hasElement) {
             rendererOffCanvas = $(instance.element).attr('data-dialog-renderer') === 'off_canvas';
             wrapperOffCanvas = instance.options.url.indexOf('drupal_dialog_off_canvas') === -1;
           }
           return hasElement && rendererOffCanvas && wrapperOffCanvas;
         })
-        .forEach(function (instance) {
+        .forEach((instance) => {
           // @todo Move logic for data-dialog-renderer attribute into ajax.js
           //   https://www.drupal.org/node/2784443
           instance.options.url = instance.options.url.replace(search, replace);
@@ -238,9 +234,9 @@
             instance.options.data.dialogOptions = {};
           }
           instance.options.data.dialogOptions.outsideInActiveEditableId = $(instance.element).parents('.outside-in-editable').attr('id');
-          instance.progress = {type: 'fullscreen'};
+          instance.progress = { type: 'fullscreen' };
         });
-    }
+    },
   };
 
   // Manage Active editable class on opening and closing of the dialog.
@@ -248,7 +244,7 @@
     'dialog:beforecreate': function (event, dialog, $element, settings) {
       if ($element.is('#drupal-off-canvas')) {
         $('body .outside-in-active-editable').removeClass('outside-in-active-editable');
-        var $activeElement = $('#' + settings.outsideInActiveEditableId);
+        const $activeElement = $(`#${settings.outsideInActiveEditableId}`);
         if ($activeElement.length) {
           $activeElement.addClass('outside-in-active-editable');
           settings.dialogClass += ' ui-dialog-outside-in';
@@ -259,7 +255,6 @@
       if ($element.is('#drupal-off-canvas')) {
         $('body .outside-in-active-editable').removeClass('outside-in-active-editable');
       }
-    }
+    },
   });
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/path/path.es6.js b/core/modules/path/path.es6.js
index dfa2c052a1..97ea9f4d82 100644
--- a/core/modules/path/path.es6.js
+++ b/core/modules/path/path.es6.js
@@ -3,9 +3,6 @@
  * Attaches behaviors for the Path module.
  */
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Behaviors for settings summaries on path edit forms.
    *
@@ -15,15 +12,14 @@
    *   Attaches summary behavior on path edit forms.
    */
   Drupal.behaviors.pathDetailsSummaries = {
-    attach: function (context) {
-      $(context).find('.path-form').drupalSetSummary(function (context) {
-        var path = $('.js-form-item-path-0-alias input').val();
+    attach(context) {
+      $(context).find('.path-form').drupalSetSummary((context) => {
+        const path = $('.js-form-item-path-0-alias input').val();
 
         return path ?
-          Drupal.t('Alias: @alias', {'@alias': path}) :
+          Drupal.t('Alias: @alias', { '@alias': path }) :
           Drupal.t('No alias');
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/quickedit/js/editors/formEditor.es6.js b/core/modules/quickedit/js/editors/formEditor.es6.js
index 374e5c21eb..7864f67c6f 100644
--- a/core/modules/quickedit/js/editors/formEditor.es6.js
+++ b/core/modules/quickedit/js/editors/formEditor.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, _) {
-
-  'use strict';
-
   /**
    * @constructor
    *
@@ -36,9 +33,9 @@
      * @param {string} state
      *   The state to change to.
      */
-    stateChange: function (fieldModel, state) {
-      var from = fieldModel.previous('state');
-      var to = state;
+    stateChange(fieldModel, state) {
+      const from = fieldModel.previous('state');
+      const to = state;
       switch (to) {
         case 'inactive':
           break;
@@ -84,23 +81,23 @@
      * @return {object}
      *   A settings object for the quick edit UI.
      */
-    getQuickEditUISettings: function () {
-      return {padding: true, unifiedToolbar: true, fullWidthToolbar: true, popup: true};
+    getQuickEditUISettings() {
+      return { padding: true, unifiedToolbar: true, fullWidthToolbar: true, popup: true };
     },
 
     /**
      * Loads the form for this field, displays it on top of the actual field.
      */
-    loadForm: function () {
-      var fieldModel = this.fieldModel;
+    loadForm() {
+      const fieldModel = this.fieldModel;
 
       // Generate a DOM-compatible ID for the form container DOM element.
-      var id = 'quickedit-form-for-' + fieldModel.id.replace(/[\/\[\]]/g, '_');
+      const id = `quickedit-form-for-${fieldModel.id.replace(/[\/\[\]]/g, '_')}`;
 
       // Render form container.
-      var $formContainer = this.$formContainer = $(Drupal.theme('quickeditFormContainer', {
-        id: id,
-        loadingMsg: Drupal.t('Loading…')
+      const $formContainer = this.$formContainer = $(Drupal.theme('quickeditFormContainer', {
+        id,
+        loadingMsg: Drupal.t('Loading…'),
       }));
       $formContainer
         .find('.quickedit-form')
@@ -111,7 +108,7 @@
       if (this.$el.css('display') === 'inline') {
         $formContainer.prependTo(this.$el.offsetParent());
         // Position the form container to render on top of the field's element.
-        var pos = this.$el.position();
+        const pos = this.$el.position();
         $formContainer.css('left', pos.left).css('top', pos.top);
       }
       else {
@@ -119,7 +116,7 @@
       }
 
       // Load form, insert it into the form container and attach event handlers.
-      var formOptions = {
+      const formOptions = {
         fieldID: fieldModel.get('fieldID'),
         $el: this.$el,
         nocssjs: false,
@@ -130,17 +127,17 @@
         // request, that might not even be necessary: it is only when a user
         // loads a first changed field for an entity that this needs to happen:
         // precisely now!
-        reset: !fieldModel.get('entity').get('inTempStore')
+        reset: !fieldModel.get('entity').get('inTempStore'),
       };
-      Drupal.quickedit.util.form.load(formOptions, function (form, ajax) {
+      Drupal.quickedit.util.form.load(formOptions, (form, ajax) => {
         Drupal.AjaxCommands.prototype.insert(ajax, {
           data: form,
-          selector: '#' + id + ' .placeholder'
+          selector: `#${id} .placeholder`,
         });
 
         $formContainer
-          .on('formUpdated.quickedit', ':input', function (event) {
-            var state = fieldModel.get('state');
+          .on('formUpdated.quickedit', ':input', (event) => {
+            const state = fieldModel.get('state');
             // If the form is in an invalid state, it will persist on the page.
             // Set the field to activating so that the user can correct the
             // invalid value.
@@ -153,7 +150,7 @@
               fieldModel.set('state', 'changed');
             }
           })
-          .on('keypress.quickedit', 'input', function (event) {
+          .on('keypress.quickedit', 'input', (event) => {
             if (event.keyCode === 13) {
               return false;
             }
@@ -167,7 +164,7 @@
     /**
      * Removes the form for this field, detaches behaviors and event handlers.
      */
-    removeForm: function () {
+    removeForm() {
       if (this.$formContainer === null) {
         return;
       }
@@ -185,11 +182,11 @@
     /**
      * @inheritdoc
      */
-    save: function () {
-      var $formContainer = this.$formContainer;
-      var $submit = $formContainer.find('.quickedit-form-submit');
-      var editorModel = this.model;
-      var fieldModel = this.fieldModel;
+    save() {
+      const $formContainer = this.$formContainer;
+      const $submit = $formContainer.find('.quickedit-form-submit');
+      const editorModel = this.model;
+      const fieldModel = this.fieldModel;
 
       function cleanUpAjax() {
         Drupal.quickedit.util.form.unajaxifySaving(formSaveAjax);
@@ -199,7 +196,7 @@
       // Create an AJAX object for the form associated with the field.
       var formSaveAjax = Drupal.quickedit.util.form.ajaxifySaving({
         nocssjs: false,
-        other_view_modes: fieldModel.findOtherViewModes()
+        other_view_modes: fieldModel.findOtherViewModes(),
       }, $submit);
 
       // Successfully saved.
@@ -213,7 +210,7 @@
         fieldModel.set('htmlForOtherViewModes', response.other_view_modes);
         // Finally, set the 'html' attribute on the field model. This will cause
         // the field to be rerendered.
-        _.defer(function () {
+        _.defer(() => {
           fieldModel.set('html', response.data);
         });
       };
@@ -231,7 +228,7 @@
       formSaveAjax.commands.quickeditFieldForm = function (ajax, response, status) {
         Drupal.AjaxCommands.prototype.insert(ajax, {
           data: response.data,
-          selector: '#' + $formContainer.attr('id') + ' form'
+          selector: `#${$formContainer.attr('id')} form`,
         });
       };
 
@@ -243,13 +240,12 @@
     /**
      * @inheritdoc
      */
-    showValidationErrors: function () {
+    showValidationErrors() {
       this.$formContainer
         .find('.quickedit-form')
         .addClass('quickedit-validation-error')
         .find('form')
         .prepend(this.model.get('validationErrors'));
-    }
+    },
   });
-
-})(jQuery, Drupal, _);
+}(jQuery, Drupal, _));
diff --git a/core/modules/quickedit/js/editors/plainTextEditor.es6.js b/core/modules/quickedit/js/editors/plainTextEditor.es6.js
index 71f9b74e58..bb4bb3c2bc 100644
--- a/core/modules/quickedit/js/editors/plainTextEditor.es6.js
+++ b/core/modules/quickedit/js/editors/plainTextEditor.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, _, Drupal) {
-
-  'use strict';
-
   Drupal.quickedit.editors.plain_text = Drupal.quickedit.EditorView.extend(/** @lends Drupal.quickedit.editors.plain_text# */{
 
     /**
@@ -22,16 +19,16 @@
      * @param {object} options
      *   Options for the plain text editor.
      */
-    initialize: function (options) {
+    initialize(options) {
       Drupal.quickedit.EditorView.prototype.initialize.call(this, options);
 
-      var editorModel = this.model;
-      var fieldModel = this.fieldModel;
+      const editorModel = this.model;
+      const fieldModel = this.fieldModel;
 
       // Store the original value of this field. Necessary for reverting
       // changes.
-      var $textElement;
-      var $fieldItems = this.$el.find('.quickedit-field');
+      let $textElement;
+      const $fieldItems = this.$el.find('.quickedit-field');
       if ($fieldItems.length) {
         $textElement = this.$textElement = $fieldItems.eq(0);
       }
@@ -41,9 +38,9 @@
       editorModel.set('originalValue', $.trim(this.$textElement.text()));
 
       // Sets the state to 'changed' whenever the value changes.
-      var previousText = editorModel.get('originalValue');
-      $textElement.on('keyup paste', function (event) {
-        var currentText = $.trim($textElement.text());
+      let previousText = editorModel.get('originalValue');
+      $textElement.on('keyup paste', (event) => {
+        const currentText = $.trim($textElement.text());
         if (previousText !== currentText) {
           previousText = currentText;
           editorModel.set('currentValue', currentText);
@@ -58,7 +55,7 @@
      * @return {jQuery}
      *   The text element for the plain text editor.
      */
-    getEditedElement: function () {
+    getEditedElement() {
       return this.$textElement;
     },
 
@@ -72,9 +69,9 @@
      * @param {object} options
      *   State options, if needed by the state change.
      */
-    stateChange: function (fieldModel, state, options) {
-      var from = fieldModel.previous('state');
-      var to = state;
+    stateChange(fieldModel, state, options) {
+      const from = fieldModel.previous('state');
+      const to = state;
       switch (to) {
         case 'inactive':
           break;
@@ -94,7 +91,7 @@
         case 'activating':
           // Defer updating the field model until the current state change has
           // propagated, to not trigger a nested state change event.
-          _.defer(function () {
+          _.defer(() => {
             fieldModel.set('state', 'active');
           });
           break;
@@ -128,17 +125,16 @@
      * @return {object}
      *   A settings object for the quick edit UI.
      */
-    getQuickEditUISettings: function () {
-      return {padding: true, unifiedToolbar: false, fullWidthToolbar: false, popup: false};
+    getQuickEditUISettings() {
+      return { padding: true, unifiedToolbar: false, fullWidthToolbar: false, popup: false };
     },
 
     /**
      * @inheritdoc
      */
-    revert: function () {
+    revert() {
       this.$textElement.html(this.model.get('originalValue'));
-    }
+    },
 
   });
-
-})(jQuery, _, Drupal);
+}(jQuery, _, Drupal));
diff --git a/core/modules/quickedit/js/models/AppModel.es6.js b/core/modules/quickedit/js/models/AppModel.es6.js
index 6c473ac974..3648666a63 100644
--- a/core/modules/quickedit/js/models/AppModel.es6.js
+++ b/core/modules/quickedit/js/models/AppModel.es6.js
@@ -6,9 +6,6 @@
  */
 
 (function (Backbone, Drupal) {
-
-  'use strict';
-
   /**
    * @constructor
    *
@@ -49,9 +46,8 @@
        *
        * @type {Drupal.dialog~dialogDefinition}
        */
-      activeModal: null
-    }
+      activeModal: null,
+    },
 
   });
-
 }(Backbone, Drupal));
diff --git a/core/modules/quickedit/js/models/BaseModel.es6.js b/core/modules/quickedit/js/models/BaseModel.es6.js
index 7579b6f03b..83d581fdc2 100644
--- a/core/modules/quickedit/js/models/BaseModel.es6.js
+++ b/core/modules/quickedit/js/models/BaseModel.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, Backbone) {
-
-  'use strict';
-
   Drupal.quickedit.BaseModel = Backbone.Model.extend(/** @lends Drupal.quickedit.BaseModel# */{
 
     /**
@@ -20,7 +17,7 @@
      * @return {Drupal.quickedit.BaseModel}
      *   A quickedit base model.
      */
-    initialize: function (options) {
+    initialize(options) {
       this.__initialized = true;
       return Backbone.Model.prototype.initialize.call(this, options);
     },
@@ -39,7 +36,7 @@
      *   The result of `Backbone.Model.prototype.set` with the specified
      *   parameters.
      */
-    set: function (key, val, options) {
+    set(key, val, options) {
       if (this.__initialized) {
         // Deal with both the "key", value and {key:value}-style arguments.
         if (typeof key === 'object') {
@@ -53,8 +50,7 @@
         }
       }
       return Backbone.Model.prototype.set.call(this, key, val, options);
-    }
+    },
 
   });
-
 }(Drupal, Backbone));
diff --git a/core/modules/quickedit/js/models/EditorModel.es6.js b/core/modules/quickedit/js/models/EditorModel.es6.js
index 4b6177bc43..0de298536d 100644
--- a/core/modules/quickedit/js/models/EditorModel.es6.js
+++ b/core/modules/quickedit/js/models/EditorModel.es6.js
@@ -6,9 +6,6 @@
  */
 
 (function (Backbone, Drupal) {
-
-  'use strict';
-
   /**
    * @constructor
    *
@@ -46,9 +43,8 @@
        *
        * @type {Array}
        */
-      validationErrors: null
-    }
+      validationErrors: null,
+    },
 
   });
-
 }(Backbone, Drupal));
diff --git a/core/modules/quickedit/js/models/EntityModel.es6.js b/core/modules/quickedit/js/models/EntityModel.es6.js
index f444fbb917..7c36e362bb 100644
--- a/core/modules/quickedit/js/models/EntityModel.es6.js
+++ b/core/modules/quickedit/js/models/EntityModel.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (_, $, Backbone, Drupal) {
-
-  'use strict';
-
   Drupal.quickedit.EntityModel = Drupal.quickedit.BaseModel.extend(/** @lends Drupal.quickedit.EntityModel# */{
 
     /**
@@ -133,7 +130,7 @@
        *
        * @type {bool}
        */
-      reload: false
+      reload: false,
     },
 
     /**
@@ -141,7 +138,7 @@
      *
      * @augments Drupal.quickedit.BaseModel
      */
-    initialize: function () {
+    initialize() {
       this.set('fields', new Drupal.quickedit.FieldCollection());
 
       // Respond to entity state changes.
@@ -166,14 +163,14 @@
      * @param {object} options
      *   Options for the entity model.
      */
-    stateChange: function (entityModel, state, options) {
-      var to = state;
+    stateChange(entityModel, state, options) {
+      const to = state;
       switch (to) {
         case 'closed':
           this.set({
             isActive: false,
             inTempStore: false,
-            isDirty: false
+            isDirty: false,
           });
           break;
 
@@ -182,7 +179,7 @@
 
         case 'opening':
           // Set the fields to candidate state.
-          entityModel.get('fields').each(function (fieldModel) {
+          entityModel.get('fields').each((fieldModel) => {
             fieldModel.set('state', 'candidate', options);
           });
           break;
@@ -198,28 +195,22 @@
           // For fields that are in an active state, transition them to
           // candidate.
           fields.chain()
-            .filter(function (fieldModel) {
-              return _.intersection([fieldModel.get('state')], ['active']).length;
-            })
-            .each(function (fieldModel) {
+            .filter(fieldModel => _.intersection([fieldModel.get('state')], ['active']).length)
+            .each((fieldModel) => {
               fieldModel.set('state', 'candidate');
             });
           // For fields that are in a changed state, field values must first be
           // stored in PrivateTempStore.
           fields.chain()
-            .filter(function (fieldModel) {
-              return _.intersection([fieldModel.get('state')], Drupal.quickedit.app.changedFieldStates).length;
-            })
-            .each(function (fieldModel) {
+            .filter(fieldModel => _.intersection([fieldModel.get('state')], Drupal.quickedit.app.changedFieldStates).length)
+            .each((fieldModel) => {
               fieldModel.set('state', 'saving');
             });
           break;
 
         case 'deactivating':
           var changedFields = this.get('fields')
-            .filter(function (fieldModel) {
-              return _.intersection([fieldModel.get('state')], ['changed', 'invalid']).length;
-            });
+            .filter(fieldModel => _.intersection([fieldModel.get('state')], ['changed', 'invalid']).length);
           // If the entity contains unconfirmed or unsaved changes, return the
           // entity to an opened state and ask the user if they would like to
           // save the changes or discard the changes.
@@ -232,23 +223,21 @@
           //   proceed to set the fields to candidate state.
           if ((changedFields.length || this.get('fieldsInTempStore').length) && (!options.saved && !options.confirmed)) {
             // Cancel deactivation until the user confirms save or discard.
-            this.set('state', 'opened', {confirming: true});
+            this.set('state', 'opened', { confirming: true });
             // An action in reaction to state change must be deferred.
-            _.defer(function () {
+            _.defer(() => {
               Drupal.quickedit.app.confirmEntityDeactivation(entityModel);
             });
           }
           else {
-            var invalidFields = this.get('fields')
-              .filter(function (fieldModel) {
-                return _.intersection([fieldModel.get('state')], ['invalid']).length;
-              });
+            const invalidFields = this.get('fields')
+              .filter(fieldModel => _.intersection([fieldModel.get('state')], ['invalid']).length);
             // Indicate if this EntityModel needs to be reloaded in order to
             // restore the original values of its fields.
             entityModel.set('reload', (this.get('fieldsInTempStore').length || invalidFields.length));
             // Set all fields to the 'candidate' state. A changed field may have
             // to go through confirmation first.
-            entityModel.get('fields').each(function (fieldModel) {
+            entityModel.get('fields').each((fieldModel) => {
               // If the field is already in the candidate state, trigger a
               // change event so that the entityModel can move to the next state
               // in deactivation.
@@ -265,10 +254,10 @@
         case 'closing':
           // Set all fields to the 'inactive' state.
           options.reason = 'stop';
-          this.get('fields').each(function (fieldModel) {
+          this.get('fields').each((fieldModel) => {
             fieldModel.set({
               inTempStore: false,
-              state: 'inactive'
+              state: 'inactive',
             }, options);
           });
           break;
@@ -288,10 +277,10 @@
      *
      * @see Drupal.quickedit.EntityModel#fieldStateChange
      */
-    _updateInTempStoreAttributes: function (entityModel, fieldModel) {
-      var current = fieldModel.get('state');
-      var previous = fieldModel.previous('state');
-      var fieldsInTempStore = entityModel.get('fieldsInTempStore');
+    _updateInTempStoreAttributes(entityModel, fieldModel) {
+      const current = fieldModel.get('state');
+      const previous = fieldModel.previous('state');
+      let fieldsInTempStore = entityModel.get('fieldsInTempStore');
       // If the fieldModel changed to the 'saved' state: remember that this
       // field was saved to PrivateTempStore.
       if (current === 'saved') {
@@ -325,9 +314,9 @@
      *   The state of the associated field. One of
      *   {@link Drupal.quickedit.FieldModel.states}.
      */
-    fieldStateChange: function (fieldModel, state) {
-      var entityModel = this;
-      var fieldState = state;
+    fieldStateChange(fieldModel, state) {
+      const entityModel = this;
+      const fieldState = state;
       // Switch on the entityModel state.
       // The EntityModel responds to FieldModel state changes as a function of
       // its state. For example, a field switching back to 'candidate' state
@@ -351,9 +340,9 @@
           // goal of having all fieldModels in the 'candidate' state.
           // A state change in reaction to another state change must be
           // deferred.
-          _.defer(function () {
+          _.defer(() => {
             entityModel.set('state', 'opened', {
-              'accept-field-states': Drupal.quickedit.app.readyFieldStates
+              'accept-field-states': Drupal.quickedit.app.readyFieldStates,
             });
           });
           break;
@@ -381,8 +370,8 @@
           if (fieldState === 'invalid') {
             // A state change in reaction to another state change must be
             // deferred.
-            _.defer(function () {
-              entityModel.set('state', 'opened', {reason: 'invalid'});
+            _.defer(() => {
+              entityModel.set('state', 'opened', { reason: 'invalid' });
             });
           }
           else {
@@ -392,26 +381,26 @@
           // Attempt to save the entity. If the entity's fields are not yet all
           // in a ready state, the save will not be processed.
           var options = {
-            'accept-field-states': Drupal.quickedit.app.readyFieldStates
+            'accept-field-states': Drupal.quickedit.app.readyFieldStates,
           };
           if (entityModel.set('isCommitting', true, options)) {
             entityModel.save({
-              success: function () {
+              success() {
                 entityModel.set({
                   state: 'deactivating',
-                  isCommitting: false
-                }, {saved: true});
+                  isCommitting: false,
+                }, { saved: true });
               },
-              error: function () {
+              error() {
                 // Reset the "isCommitting" mutex.
                 entityModel.set('isCommitting', false);
                 // Change the state back to "opened", to allow the user to hit
                 // the "Save" button again.
-                entityModel.set('state', 'opened', {reason: 'networkerror'});
+                entityModel.set('state', 'opened', { reason: 'networkerror' });
                 // Show a modal to inform the user of the network error.
-                var message = Drupal.t('Your changes to <q>@entity-title</q> could not be saved, either due to a website problem or a network connection problem.<br>Please try again.', {'@entity-title': entityModel.get('label')});
+                const message = Drupal.t('Your changes to <q>@entity-title</q> could not be saved, either due to a website problem or a network connection problem.<br>Please try again.', { '@entity-title': entityModel.get('label') });
                 Drupal.quickedit.util.networkErrorModal(Drupal.t('Network problem!'), message);
-              }
+              },
             });
           }
           break;
@@ -421,9 +410,9 @@
           // are in either the 'candidate' or 'highlighted' state.
           // A state change in reaction to another state change must be
           // deferred.
-          _.defer(function () {
+          _.defer(() => {
             entityModel.set('state', 'closing', {
-              'accept-field-states': Drupal.quickedit.app.readyFieldStates
+              'accept-field-states': Drupal.quickedit.app.readyFieldStates,
             });
           });
           break;
@@ -433,9 +422,9 @@
           // are in the 'inactive' state.
           // A state change in reaction to another state change must be
           // deferred.
-          _.defer(function () {
+          _.defer(() => {
             entityModel.set('state', 'closed', {
-              'accept-field-states': ['inactive']
+              'accept-field-states': ['inactive'],
             });
           });
           break;
@@ -450,24 +439,24 @@
      * @param {function} [options.success]
      *   A function to invoke if the entity is successfully saved.
      */
-    save: function (options) {
-      var entityModel = this;
+    save(options) {
+      const entityModel = this;
 
       // Create a Drupal.ajax instance to save the entity.
-      var entitySaverAjax = Drupal.ajax({
-        url: Drupal.url('quickedit/entity/' + entityModel.get('entityID')),
-        error: function () {
+      const entitySaverAjax = Drupal.ajax({
+        url: Drupal.url(`quickedit/entity/${entityModel.get('entityID')}`),
+        error() {
           // Let the Drupal.quickedit.EntityModel Backbone model's error()
           // method handle errors.
           options.error.call(entityModel);
-        }
+        },
       });
       // Entity saved successfully.
       entitySaverAjax.commands.quickeditEntitySaved = function (ajax, response, status) {
         // All fields have been moved from PrivateTempStore to permanent
         // storage, update the "inTempStore" attribute on FieldModels, on the
         // EntityModel and clear EntityModel's "fieldInTempStore" attribute.
-        entityModel.get('fields').each(function (fieldModel) {
+        entityModel.get('fields').each((fieldModel) => {
           fieldModel.set('inTempStore', false);
         });
         entityModel.set('inTempStore', false);
@@ -503,16 +492,16 @@
      * @return {string}
      *   A string to say something about the state of the entity model.
      */
-    validate: function (attrs, options) {
-      var acceptedFieldStates = options['accept-field-states'] || [];
+    validate(attrs, options) {
+      const acceptedFieldStates = options['accept-field-states'] || [];
 
       // Validate state change.
-      var currentState = this.get('state');
-      var nextState = attrs.state;
+      const currentState = this.get('state');
+      const nextState = attrs.state;
       if (currentState !== nextState) {
         // Ensure it's a valid state.
         if (_.indexOf(this.constructor.states, nextState) === -1) {
-          return '"' + nextState + '" is an invalid state';
+          return `"${nextState}" is an invalid state`;
         }
 
         // Ensure it's a state change that is allowed.
@@ -528,8 +517,8 @@
       }
 
       // Validate setting isCommitting = true.
-      var currentIsCommitting = this.get('isCommitting');
-      var nextIsCommitting = attrs.isCommitting;
+      const currentIsCommitting = this.get('isCommitting');
+      const nextIsCommitting = attrs.isCommitting;
       if (currentIsCommitting === false && nextIsCommitting === true) {
         if (!this._fieldsHaveAcceptableStates(acceptedFieldStates)) {
           return 'isCommitting change not accepted because fields are not in acceptable state';
@@ -559,8 +548,8 @@
      *
      * @see Drupal.quickedit.AppView#acceptEditorStateChange
      */
-    _acceptStateChange: function (from, to, context) {
-      var accept = true;
+    _acceptStateChange(from, to, context) {
+      let accept = true;
 
       // In general, enforce the states sequence. Disallow going back from a
       // "later" state to an "earlier" state, except in explicitly allowed
@@ -605,14 +594,14 @@
      *
      * @see Drupal.quickedit.EntityModel#validate
      */
-    _fieldsHaveAcceptableStates: function (acceptedFieldStates) {
-      var accept = true;
+    _fieldsHaveAcceptableStates(acceptedFieldStates) {
+      let accept = true;
 
       // If no acceptable field states are provided, assume all field states are
       // acceptable. We want to let validation pass as a default and only
       // check validity on calls to set that explicitly request it.
       if (acceptedFieldStates.length > 0) {
-        var fieldStates = this.get('fields').pluck('state') || [];
+        const fieldStates = this.get('fields').pluck('state') || [];
         // If not all fields are in one of the accepted field states, then we
         // still can't allow this state change.
         if (_.difference(fieldStates, acceptedFieldStates).length) {
@@ -629,7 +618,7 @@
      * @param {object} options
      *   Options for the entity model.
      */
-    destroy: function (options) {
+    destroy(options) {
       Drupal.quickedit.BaseModel.prototype.destroy.call(this, options);
 
       this.stopListening();
@@ -641,10 +630,10 @@
     /**
      * @inheritdoc
      */
-    sync: function () {
+    sync() {
       // We don't use REST updates to sync.
-      return;
-    }
+
+    },
 
   }, /** @lends Drupal.quickedit.EntityModel */{
 
@@ -705,7 +694,7 @@
       // - Trigger: EntityModel.
       // - Guarantees: all fields are in the 'candidate' state.
       // - Expected behavior: change all fields to the 'inactive' state.
-      'closing'
+      'closing',
     ],
 
     /**
@@ -719,9 +708,9 @@
      * @return {bool}
      *   Whether the 'from' state comes before the 'to' state.
      */
-    followsStateSequence: function (from, to) {
+    followsStateSequence(from, to) {
       return _.indexOf(this.states, from) < _.indexOf(this.states, to);
-    }
+    },
 
   });
 
@@ -735,7 +724,6 @@
     /**
      * @type {Drupal.quickedit.EntityModel}
      */
-    model: Drupal.quickedit.EntityModel
+    model: Drupal.quickedit.EntityModel,
   });
-
 }(_, jQuery, Backbone, Drupal));
diff --git a/core/modules/quickedit/js/models/FieldModel.es6.js b/core/modules/quickedit/js/models/FieldModel.es6.js
index 8aeff107d9..776c331f32 100644
--- a/core/modules/quickedit/js/models/FieldModel.es6.js
+++ b/core/modules/quickedit/js/models/FieldModel.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (_, Backbone, Drupal) {
-
-  'use strict';
-
   Drupal.quickedit.FieldModel = Drupal.quickedit.BaseModel.extend(/** @lends Drupal.quickedit.FieldModel# */{
 
     /**
@@ -103,7 +100,7 @@
        * view modes (keys) of this field, for other instances of this field
        * displayed in a different view mode.
        */
-      htmlForOtherViewModes: null
+      htmlForOtherViewModes: null,
     },
 
     /**
@@ -116,7 +113,7 @@
      * @param {object} options
      *   Options for the field model.
      */
-    initialize: function (options) {
+    initialize(options) {
       // Store the original full HTML representation of this field.
       this.set('html', options.el.outerHTML);
 
@@ -136,7 +133,7 @@
      * @param {object} options
      *   Options for the field model.
      */
-    destroy: function (options) {
+    destroy(options) {
       if (this.get('state') !== 'inactive') {
         throw new Error('FieldModel cannot be destroyed if it is not inactive state.');
       }
@@ -146,9 +143,9 @@
     /**
      * @inheritdoc
      */
-    sync: function () {
+    sync() {
       // We don't use REST updates to sync.
-      return;
+
     },
 
     /**
@@ -171,13 +168,13 @@
      * @return {string}
      *   A string to say something about the state of the field model.
      */
-    validate: function (attrs, options) {
-      var current = this.get('state');
-      var next = attrs.state;
+    validate(attrs, options) {
+      const current = this.get('state');
+      const next = attrs.state;
       if (current !== next) {
         // Ensure it's a valid state.
         if (_.indexOf(this.constructor.states, next) === -1) {
-          return '"' + next + '" is an invalid state';
+          return `"${next}" is an invalid state`;
         }
         // Check if the acceptStateChange callback accepts it.
         if (!this.get('acceptStateChange')(current, next, options, this)) {
@@ -192,7 +189,7 @@
      * @return {string}
      *   An entity ID: a string of the format `<entity type>/<id>`.
      */
-    getEntityID: function () {
+    getEntityID() {
       return this.get('fieldID').split('/').slice(0, 2).join('/');
     },
 
@@ -202,7 +199,7 @@
      * @return {string}
      *   A view mode ID.
      */
-    getViewMode: function () {
+    getViewMode() {
       return this.get('fieldID').split('/').pop();
     },
 
@@ -212,29 +209,29 @@
      * @return {Array}
      *   An array containing view mode IDs.
      */
-    findOtherViewModes: function () {
-      var currentField = this;
-      var otherViewModes = [];
+    findOtherViewModes() {
+      const currentField = this;
+      const otherViewModes = [];
       Drupal.quickedit.collections.fields
         // Find all instances of fields that display the same logical field
         // (same entity, same field, just a different instance and maybe a
         // different view mode).
-        .where({logicalFieldID: currentField.get('logicalFieldID')})
-        .forEach(function (field) {
+        .where({ logicalFieldID: currentField.get('logicalFieldID') })
+        .forEach((field) => {
           // Ignore the current field.
           if (field === currentField) {
-            return;
+
           }
           // Also ignore other fields with the same view mode.
           else if (field.get('fieldID') === currentField.get('fieldID')) {
-            return;
+
           }
           else {
             otherViewModes.push(field.getViewMode());
           }
         });
       return otherViewModes;
-    }
+    },
 
   }, /** @lends Drupal.quickedit.FieldModel */{
 
@@ -312,7 +309,7 @@
       // - Guarantees: see 'candidate' and 'active'.
       // - Expected behavior: remain in 'invalid' state, let the user make more
       //   changes so that he can save it again, without validation errors.
-      'invalid'
+      'invalid',
     ],
 
     /**
@@ -326,9 +323,9 @@
      * @return {bool}
      *   Whether the 'from' state comes before the 'to' state.
      */
-    followsStateSequence: function (from, to) {
+    followsStateSequence(from, to) {
       return _.indexOf(this.states, from) < _.indexOf(this.states, to);
-    }
+    },
 
   });
 
@@ -342,7 +339,6 @@
     /**
      * @type {Drupal.quickedit.FieldModel}
      */
-    model: Drupal.quickedit.FieldModel
+    model: Drupal.quickedit.FieldModel,
   });
-
 }(_, Backbone, Drupal));
diff --git a/core/modules/quickedit/js/quickedit.es6.js b/core/modules/quickedit/js/quickedit.es6.js
index 40bdd3e609..3fe50076a2 100644
--- a/core/modules/quickedit/js/quickedit.es6.js
+++ b/core/modules/quickedit/js/quickedit.es6.js
@@ -18,16 +18,13 @@
  */
 
 (function ($, _, Backbone, Drupal, drupalSettings, JSON, storage) {
-
-  'use strict';
-
-  var options = $.extend(drupalSettings.quickedit,
+  const options = $.extend(drupalSettings.quickedit,
     // Merge strings on top of drupalSettings so that they are not mutable.
     {
       strings: {
-        quickEdit: Drupal.t('Quick edit')
-      }
-    }
+        quickEdit: Drupal.t('Quick edit'),
+      },
+    },
   );
 
   /**
@@ -36,7 +33,7 @@
    *   - String fieldID
    *   - String entityID
    */
-  var fieldsMetadataQueue = [];
+  let fieldsMetadataQueue = [];
 
   /**
    * Tracks fields ready for use. Contains objects with the following keys:
@@ -44,7 +41,7 @@
    *   - String fieldID
    *   - String entityID
    */
-  var fieldsAvailableQueue = [];
+  let fieldsAvailableQueue = [];
 
   /**
    * Tracks contextual links on entities. Contains objects with the following
@@ -53,7 +50,7 @@
    *   - DOM el
    *   - DOM region
    */
-  var contextualLinksQueue = [];
+  let contextualLinksQueue = [];
 
   /**
    * Tracks how many instances exist for each unique entity. Contains key-value
@@ -61,26 +58,26 @@
    * - String entityID
    * - Number count
    */
-  var entityInstancesTracker = {};
+  const entityInstancesTracker = {};
 
   /**
    *
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.quickedit = {
-    attach: function (context) {
+    attach(context) {
       // Initialize the Quick Edit app once per page load.
       $('body').once('quickedit-init').each(initQuickEdit);
 
       // Find all in-place editable fields, if any.
-      var $fields = $(context).find('[data-quickedit-field-id]').once('quickedit');
+      const $fields = $(context).find('[data-quickedit-field-id]').once('quickedit');
       if ($fields.length === 0) {
         return;
       }
 
       // Process each entity element: identical entities that appear multiple
       // times will get a numeric identifier, starting at 0.
-      $(context).find('[data-quickedit-entity-id]').once('quickedit').each(function (index, entityElement) {
+      $(context).find('[data-quickedit-entity-id]').once('quickedit').each((index, entityElement) => {
         processEntity(entityElement);
       });
 
@@ -89,34 +86,30 @@
       // immediately. New fields will be unable to be processed immediately,
       // but will instead be queued to have their metadata fetched, which occurs
       // below in fetchMissingMetaData().
-      $fields.each(function (index, fieldElement) {
+      $fields.each((index, fieldElement) => {
         processField(fieldElement);
       });
 
       // Entities and fields on the page have been detected, try to set up the
       // contextual links for those entities that already have the necessary
       // meta- data in the client-side cache.
-      contextualLinksQueue = _.filter(contextualLinksQueue, function (contextualLink) {
-        return !initializeEntityContextualLink(contextualLink);
-      });
+      contextualLinksQueue = _.filter(contextualLinksQueue, contextualLink => !initializeEntityContextualLink(contextualLink));
 
       // Fetch metadata for any fields that are queued to retrieve it.
-      fetchMissingMetadata(function (fieldElementsWithFreshMetadata) {
+      fetchMissingMetadata((fieldElementsWithFreshMetadata) => {
         // Metadata has been fetched, reprocess fields whose metadata was
         // missing.
         _.each(fieldElementsWithFreshMetadata, processField);
 
         // Metadata has been fetched, try to set up more contextual links now.
-        contextualLinksQueue = _.filter(contextualLinksQueue, function (contextualLink) {
-          return !initializeEntityContextualLink(contextualLink);
-        });
+        contextualLinksQueue = _.filter(contextualLinksQueue, contextualLink => !initializeEntityContextualLink(contextualLink));
       });
     },
-    detach: function (context, settings, trigger) {
+    detach(context, settings, trigger) {
       if (trigger === 'unload') {
         deleteContainedModelsAndQueues($(context));
       }
-    }
+    },
   };
 
   /**
@@ -141,7 +134,7 @@
       // page.
       entities: null,
       // All in-place editable fields (Drupal.quickedit.FieldModel) on the page.
-      fields: null
+      fields: null,
     },
 
     /**
@@ -168,7 +161,7 @@
        * @return {bool}
        *   Whether it was found or not.
        */
-      has: function (fieldID) {
+      has(fieldID) {
         return storage.getItem(this._prefixFieldID(fieldID)) !== null;
       },
 
@@ -180,7 +173,7 @@
        * @param {object} metadata
        *   Metadata to add.
        */
-      add: function (fieldID, metadata) {
+      add(fieldID, metadata) {
         storage.setItem(this._prefixFieldID(fieldID), JSON.stringify(metadata));
       },
 
@@ -197,8 +190,8 @@
        *   for the specified field id.
        *
        */
-      get: function (fieldID, key) {
-        var metadata = JSON.parse(storage.getItem(this._prefixFieldID(fieldID)));
+      get(fieldID, key) {
+        const metadata = JSON.parse(storage.getItem(this._prefixFieldID(fieldID)));
         return (typeof key === 'undefined') ? metadata : metadata[key];
       },
 
@@ -211,8 +204,8 @@
        * @return {string}
        *   A prefixed field id.
        */
-      _prefixFieldID: function (fieldID) {
-        return 'Drupal.quickedit.metadata.' + fieldID;
+      _prefixFieldID(fieldID) {
+        return `Drupal.quickedit.metadata.${fieldID}`;
       },
 
       /**
@@ -224,7 +217,7 @@
        * @return {string}
        *   An unprefixed field id.
        */
-      _unprefixFieldID: function (fieldID) {
+      _unprefixFieldID(fieldID) {
         // Strip "Drupal.quickedit.metadata.", which is 26 characters long.
         return fieldID.substring(26);
       },
@@ -238,22 +231,22 @@
        * @return {Array}
        *   The intersection found.
        */
-      intersection: function (fieldIDs) {
-        var prefixedFieldIDs = _.map(fieldIDs, this._prefixFieldID);
-        var intersection = _.intersection(prefixedFieldIDs, _.keys(sessionStorage));
+      intersection(fieldIDs) {
+        const prefixedFieldIDs = _.map(fieldIDs, this._prefixFieldID);
+        const intersection = _.intersection(prefixedFieldIDs, _.keys(sessionStorage));
         return _.map(intersection, this._unprefixFieldID);
-      }
-    }
+      },
+    },
   };
 
   // Clear the Quick Edit metadata cache whenever the current user's set of
   // permissions changes.
-  var permissionsHashKey = Drupal.quickedit.metadata._prefixFieldID('permissionsHash');
-  var permissionsHashValue = storage.getItem(permissionsHashKey);
-  var permissionsHash = drupalSettings.user.permissionsHash;
+  const permissionsHashKey = Drupal.quickedit.metadata._prefixFieldID('permissionsHash');
+  const permissionsHashValue = storage.getItem(permissionsHashKey);
+  const permissionsHash = drupalSettings.user.permissionsHash;
   if (permissionsHashValue !== permissionsHash) {
     if (typeof permissionsHash === 'string') {
-      _.chain(storage).keys().each(function (key) {
+      _.chain(storage).keys().each((key) => {
         if (key.substring(0, 26) === 'Drupal.quickedit.metadata.') {
           storage.removeItem(key);
         }
@@ -274,7 +267,7 @@
    *
    * @listens event:drupalContextualLinkAdded
    */
-  $(document).on('drupalContextualLinkAdded', function (event, data) {
+  $(document).on('drupalContextualLinkAdded', (event, data) => {
     if (data.$region.is('[data-quickedit-entity-id]')) {
       // If the contextual link is cached on the client side, an entity instance
       // will not yet have been assigned. So assign one.
@@ -282,11 +275,11 @@
         data.$region.once('quickedit');
         processEntity(data.$region.get(0));
       }
-      var contextualLink = {
+      const contextualLink = {
         entityID: data.$region.attr('data-quickedit-entity-id'),
         entityInstanceID: data.$region.attr('data-quickedit-entity-instance-id'),
         el: data.$el[0],
-        region: data.$region[0]
+        region: data.$region[0],
       };
       // Set up contextual links for this, otherwise queue it to be set up
       // later.
@@ -326,7 +319,7 @@
       el: bodyElement,
       model: new Drupal.quickedit.AppModel(),
       entitiesCollection: Drupal.quickedit.collections.entities,
-      fieldsCollection: Drupal.quickedit.collections.fields
+      fieldsCollection: Drupal.quickedit.collections.fields,
     });
   }
 
@@ -338,7 +331,7 @@
    *   attribute.
    */
   function processEntity(entityElement) {
-    var entityID = entityElement.getAttribute('data-quickedit-entity-id');
+    const entityID = entityElement.getAttribute('data-quickedit-entity-id');
     if (!entityInstancesTracker.hasOwnProperty(entityID)) {
       entityInstancesTracker[entityID] = 0;
     }
@@ -347,7 +340,7 @@
     }
 
     // Set the calculated entity instance ID for this element.
-    var entityInstanceID = entityInstancesTracker[entityID];
+    const entityInstanceID = entityInstancesTracker[entityID];
     entityElement.setAttribute('data-quickedit-entity-instance-id', entityInstanceID);
   }
 
@@ -359,23 +352,23 @@
    *   attribute.
    */
   function processField(fieldElement) {
-    var metadata = Drupal.quickedit.metadata;
-    var fieldID = fieldElement.getAttribute('data-quickedit-field-id');
-    var entityID = extractEntityID(fieldID);
+    const metadata = Drupal.quickedit.metadata;
+    const fieldID = fieldElement.getAttribute('data-quickedit-field-id');
+    const entityID = extractEntityID(fieldID);
     // Figure out the instance ID by looking at the ancestor
     // [data-quickedit-entity-id] element's data-quickedit-entity-instance-id
     // attribute.
-    var entityElementSelector = '[data-quickedit-entity-id="' + entityID + '"]';
-    var entityElement = $(fieldElement).closest(entityElementSelector);
+    const entityElementSelector = `[data-quickedit-entity-id="${entityID}"]`;
+    let entityElement = $(fieldElement).closest(entityElementSelector);
     // In the case of a full entity view page, the entity title is rendered
     // outside of "the entity DOM node": it's rendered as the page title. So in
     // this case, we find the lowest common parent element (deepest in the tree)
     // and consider that the entity element.
     if (entityElement.length === 0) {
-      var $lowestCommonParent = $(entityElementSelector).parents().has(fieldElement).first();
+      const $lowestCommonParent = $(entityElementSelector).parents().has(fieldElement).first();
       entityElement = $lowestCommonParent.find(entityElementSelector);
     }
-    var entityInstanceID = entityElement
+    const entityInstanceID = entityElement
       .get(0)
       .getAttribute('data-quickedit-entity-instance-id');
 
@@ -383,9 +376,9 @@
     if (!metadata.has(fieldID)) {
       fieldsMetadataQueue.push({
         el: fieldElement,
-        fieldID: fieldID,
-        entityID: entityID,
-        entityInstanceID: entityInstanceID
+        fieldID,
+        entityID,
+        entityInstanceID,
       });
       return;
     }
@@ -396,13 +389,13 @@
 
     // If an EntityModel for this field already exists (and hence also a "Quick
     // edit" contextual link), then initialize it immediately.
-    if (Drupal.quickedit.collections.entities.findWhere({entityID: entityID, entityInstanceID: entityInstanceID})) {
+    if (Drupal.quickedit.collections.entities.findWhere({ entityID, entityInstanceID })) {
       initializeField(fieldElement, fieldID, entityID, entityInstanceID);
     }
     // Otherwise: queue the field. It is now available to be set up when its
     // corresponding entity becomes in-place editable.
     else {
-      fieldsAvailableQueue.push({el: fieldElement, fieldID: fieldID, entityID: entityID, entityInstanceID: entityInstanceID});
+      fieldsAvailableQueue.push({ el: fieldElement, fieldID, entityID, entityInstanceID });
     }
   }
 
@@ -419,21 +412,21 @@
    *   The field's entity's instance ID.
    */
   function initializeField(fieldElement, fieldID, entityID, entityInstanceID) {
-    var entity = Drupal.quickedit.collections.entities.findWhere({
-      entityID: entityID,
-      entityInstanceID: entityInstanceID
+    const entity = Drupal.quickedit.collections.entities.findWhere({
+      entityID,
+      entityInstanceID,
     });
 
     $(fieldElement).addClass('quickedit-field');
 
     // The FieldModel stores the state of an in-place editable entity field.
-    var field = new Drupal.quickedit.FieldModel({
+    const field = new Drupal.quickedit.FieldModel({
       el: fieldElement,
-      fieldID: fieldID,
-      id: fieldID + '[' + entity.get('entityInstanceID') + ']',
-      entity: entity,
+      fieldID,
+      id: `${fieldID}[${entity.get('entityInstanceID')}]`,
+      entity,
       metadata: Drupal.quickedit.metadata.get(fieldID),
-      acceptStateChange: _.bind(Drupal.quickedit.app.acceptEditorStateChange, Drupal.quickedit.app)
+      acceptStateChange: _.bind(Drupal.quickedit.app.acceptEditorStateChange, Drupal.quickedit.app),
     });
 
     // Track all fields on the page.
@@ -451,9 +444,9 @@
    */
   function fetchMissingMetadata(callback) {
     if (fieldsMetadataQueue.length) {
-      var fieldIDs = _.pluck(fieldsMetadataQueue, 'fieldID');
-      var fieldElementsWithoutMetadata = _.pluck(fieldsMetadataQueue, 'el');
-      var entityIDs = _.uniq(_.pluck(fieldsMetadataQueue, 'entityID'), true);
+      const fieldIDs = _.pluck(fieldsMetadataQueue, 'fieldID');
+      const fieldElementsWithoutMetadata = _.pluck(fieldsMetadataQueue, 'el');
+      let entityIDs = _.uniq(_.pluck(fieldsMetadataQueue, 'entityID'), true);
       // Ensure we only request entityIDs for which we don't have metadata yet.
       entityIDs = _.difference(entityIDs, Drupal.quickedit.metadata.intersection(entityIDs));
       fieldsMetadataQueue = [];
@@ -463,17 +456,17 @@
         type: 'POST',
         data: {
           'fields[]': fieldIDs,
-          'entities[]': entityIDs
+          'entities[]': entityIDs,
         },
         dataType: 'json',
-        success: function (results) {
+        success(results) {
           // Store the metadata.
-          _.each(results, function (fieldMetadata, fieldID) {
+          _.each(results, (fieldMetadata, fieldID) => {
             Drupal.quickedit.metadata.add(fieldID, fieldMetadata);
           });
 
           callback(fieldElementsWithoutMetadata);
-        }
+        },
       });
     }
   }
@@ -489,10 +482,10 @@
    *   have been inserted into the DOM. i.e. they may still be loading.
    */
   function loadMissingEditors(callback) {
-    var loadedEditors = _.keys(Drupal.quickedit.editors);
-    var missingEditors = [];
-    Drupal.quickedit.collections.fields.each(function (fieldModel) {
-      var metadata = Drupal.quickedit.metadata.get(fieldModel.get('fieldID'));
+    const loadedEditors = _.keys(Drupal.quickedit.editors);
+    let missingEditors = [];
+    Drupal.quickedit.collections.fields.each((fieldModel) => {
+      const metadata = Drupal.quickedit.metadata.get(fieldModel.get('fieldID'));
       if (metadata.access && _.indexOf(loadedEditors, metadata.editor) === -1) {
         missingEditors.push(metadata.editor);
         // Set a stub, to prevent subsequent calls to loadMissingEditors() from
@@ -511,13 +504,13 @@
 
     // @see https://www.drupal.org/node/2029999.
     // Create a Drupal.Ajax instance to load the form.
-    var loadEditorsAjax = Drupal.ajax({
+    const loadEditorsAjax = Drupal.ajax({
       url: Drupal.url('quickedit/attachments'),
-      submit: {'editors[]': missingEditors}
+      submit: { 'editors[]': missingEditors },
     });
     // Implement a scoped insert AJAX command: calls the callback after all AJAX
     // command functions have been executed (hence the deferred calling).
-    var realInsert = Drupal.AjaxCommands.prototype.insert;
+    const realInsert = Drupal.AjaxCommands.prototype.insert;
     loadEditorsAjax.commands.insert = function (ajax, response, status) {
       _.defer(callback);
       realInsert(ajax, response, status);
@@ -548,11 +541,11 @@
    *   of its fields). Returns false otherwise.
    */
   function initializeEntityContextualLink(contextualLink) {
-    var metadata = Drupal.quickedit.metadata;
+    const metadata = Drupal.quickedit.metadata;
     // Check if the user has permission to edit at least one of them.
     function hasFieldWithPermission(fieldIDs) {
-      for (var i = 0; i < fieldIDs.length; i++) {
-        var fieldID = fieldIDs[i];
+      for (let i = 0; i < fieldIDs.length; i++) {
+        const fieldID = fieldIDs[i];
         if (metadata.get(fieldID, 'access') === true) {
           return true;
         }
@@ -566,11 +559,11 @@
     }
 
     // Find all fields for this entity instance and collect their field IDs.
-    var fields = _.where(fieldsAvailableQueue, {
+    const fields = _.where(fieldsAvailableQueue, {
       entityID: contextualLink.entityID,
-      entityInstanceID: contextualLink.entityInstanceID
+      entityInstanceID: contextualLink.entityInstanceID,
     });
-    var fieldIDs = _.pluck(fields, 'fieldID');
+    const fieldIDs = _.pluck(fields, 'fieldID');
 
     // No fields found yet.
     if (fieldIDs.length === 0) {
@@ -580,36 +573,36 @@
     // the current user may edit in-place; instantiate EntityModel,
     // EntityDecorationView and ContextualLinkView.
     else if (hasFieldWithPermission(fieldIDs)) {
-      var entityModel = new Drupal.quickedit.EntityModel({
+      const entityModel = new Drupal.quickedit.EntityModel({
         el: contextualLink.region,
         entityID: contextualLink.entityID,
         entityInstanceID: contextualLink.entityInstanceID,
-        id: contextualLink.entityID + '[' + contextualLink.entityInstanceID + ']',
-        label: Drupal.quickedit.metadata.get(contextualLink.entityID, 'label')
+        id: `${contextualLink.entityID}[${contextualLink.entityInstanceID}]`,
+        label: Drupal.quickedit.metadata.get(contextualLink.entityID, 'label'),
       });
       Drupal.quickedit.collections.entities.add(entityModel);
       // Create an EntityDecorationView associated with the root DOM node of the
       // entity.
-      var entityDecorationView = new Drupal.quickedit.EntityDecorationView({
+      const entityDecorationView = new Drupal.quickedit.EntityDecorationView({
         el: contextualLink.region,
-        model: entityModel
+        model: entityModel,
       });
       entityModel.set('entityDecorationView', entityDecorationView);
 
       // Initialize all queued fields within this entity (creates FieldModels).
-      _.each(fields, function (field) {
+      _.each(fields, (field) => {
         initializeField(field.el, field.fieldID, contextualLink.entityID, contextualLink.entityInstanceID);
       });
       fieldsAvailableQueue = _.difference(fieldsAvailableQueue, fields);
 
       // Initialization should only be called once. Use Underscore's once method
       // to get a one-time use version of the function.
-      var initContextualLink = _.once(function () {
-        var $links = $(contextualLink.el).find('.contextual-links');
-        var contextualLinkView = new Drupal.quickedit.ContextualLinkView($.extend({
+      const initContextualLink = _.once(() => {
+        const $links = $(contextualLink.el).find('.contextual-links');
+        const contextualLinkView = new Drupal.quickedit.ContextualLinkView($.extend({
           el: $('<li class="quickedit"><a href="" role="button" aria-pressed="false"></a></li>').prependTo($links),
           model: entityModel,
-          appModel: Drupal.quickedit.app.model
+          appModel: Drupal.quickedit.app.model,
         }, options));
         entityModel.set('contextualLinkView', contextualLinkView);
       });
@@ -646,11 +639,11 @@
    *   The context within which to delete.
    */
   function deleteContainedModelsAndQueues($context) {
-    $context.find('[data-quickedit-entity-id]').addBack('[data-quickedit-entity-id]').each(function (index, entityElement) {
+    $context.find('[data-quickedit-entity-id]').addBack('[data-quickedit-entity-id]').each((index, entityElement) => {
       // Delete entity model.
-      var entityModel = Drupal.quickedit.collections.entities.findWhere({el: entityElement});
+      const entityModel = Drupal.quickedit.collections.entities.findWhere({ el: entityElement });
       if (entityModel) {
-        var contextualLinkView = entityModel.get('contextualLinkView');
+        const contextualLinkView = entityModel.get('contextualLinkView');
         contextualLinkView.undelegateEvents();
         contextualLinkView.remove();
         // Remove the EntityDecorationView.
@@ -667,10 +660,10 @@
       contextualLinksQueue = _.filter(contextualLinksQueue, hasOtherRegion);
     });
 
-    $context.find('[data-quickedit-field-id]').addBack('[data-quickedit-field-id]').each(function (index, fieldElement) {
+    $context.find('[data-quickedit-field-id]').addBack('[data-quickedit-field-id]').each((index, fieldElement) => {
       // Delete field models.
       Drupal.quickedit.collections.fields.chain()
-        .filter(function (fieldModel) { return fieldModel.get('el') === fieldElement; })
+        .filter(fieldModel => fieldModel.get('el') === fieldElement)
         .invoke('destroy');
 
       // Filter queues.
@@ -682,5 +675,4 @@
       fieldsAvailableQueue = _.filter(fieldsAvailableQueue, hasOtherFieldElement);
     });
   }
-
-})(jQuery, _, Backbone, Drupal, drupalSettings, window.JSON, window.sessionStorage);
+}(jQuery, _, Backbone, Drupal, drupalSettings, window.JSON, window.sessionStorage));
diff --git a/core/modules/quickedit/js/theme.es6.js b/core/modules/quickedit/js/theme.es6.js
index 93dc3f238d..5b43f427bd 100644
--- a/core/modules/quickedit/js/theme.es6.js
+++ b/core/modules/quickedit/js/theme.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Theme function for a "backstage" for the Quick Edit module.
    *
@@ -19,8 +16,8 @@
    *   The corresponding HTML.
    */
   Drupal.theme.quickeditBackstage = function (settings) {
-    var html = '';
-    html += '<div id="' + settings.id + '" />';
+    let html = '';
+    html += `<div id="${settings.id}" />`;
     return html;
   };
 
@@ -36,8 +33,8 @@
    *   The corresponding HTML.
    */
   Drupal.theme.quickeditEntityToolbar = function (settings) {
-    var html = '';
-    html += '<div id="' + settings.id + '" class="quickedit quickedit-toolbar-container clearfix">';
+    let html = '';
+    html += `<div id="${settings.id}" class="quickedit quickedit-toolbar-container clearfix">`;
     html += '<i class="quickedit-toolbar-pointer"></i>';
     html += '<div class="quickedit-toolbar-content">';
     html += '<div class="quickedit-toolbar quickedit-toolbar-entity clearfix icon icon-pencil">';
@@ -63,7 +60,7 @@
    */
   Drupal.theme.quickeditEntityToolbarLabel = function (settings) {
     // @todo Add XSS regression test coverage in https://www.drupal.org/node/2547437
-    return '<span class="field">' + Drupal.checkPlain(settings.fieldLabel) + '</span>' + Drupal.checkPlain(settings.entityLabel);
+    return `<span class="field">${Drupal.checkPlain(settings.fieldLabel)}</span>${Drupal.checkPlain(settings.entityLabel)}`;
   };
 
   /**
@@ -88,7 +85,7 @@
    *   The corresponding HTML.
    */
   Drupal.theme.quickeditFieldToolbar = function (settings) {
-    return '<div id="' + settings.id + '" />';
+    return `<div id="${settings.id}" />`;
   };
 
   /**
@@ -108,15 +105,15 @@
    */
   Drupal.theme.quickeditToolgroup = function (settings) {
     // Classes.
-    var classes = (settings.classes || []);
+    const classes = (settings.classes || []);
     classes.unshift('quickedit-toolgroup');
-    var html = '';
-    html += '<div class="' + classes.join(' ') + '"';
+    let html = '';
+    html += `<div class="${classes.join(' ')}"`;
     if (settings.id) {
-      html += ' id="' + settings.id + '"';
+      html += ` id="${settings.id}"`;
     }
     html += '>';
-    html += Drupal.theme('quickeditButtons', {buttons: settings.buttons});
+    html += Drupal.theme('quickeditButtons', { buttons: settings.buttons });
     html += '</div>';
     return html;
   };
@@ -138,21 +135,21 @@
    *   The corresponding HTML.
    */
   Drupal.theme.quickeditButtons = function (settings) {
-    var html = '';
-    for (var i = 0; i < settings.buttons.length; i++) {
-      var button = settings.buttons[i];
+    let html = '';
+    for (let i = 0; i < settings.buttons.length; i++) {
+      const button = settings.buttons[i];
       if (!button.hasOwnProperty('type')) {
         button.type = 'button';
       }
       // Attributes.
-      var attributes = [];
-      var attrMap = settings.buttons[i].attributes || {};
-      for (var attr in attrMap) {
+      const attributes = [];
+      const attrMap = settings.buttons[i].attributes || {};
+      for (const attr in attrMap) {
         if (attrMap.hasOwnProperty(attr)) {
-          attributes.push(attr + ((attrMap[attr]) ? '="' + attrMap[attr] + '"' : ''));
+          attributes.push(attr + ((attrMap[attr]) ? `="${attrMap[attr]}"` : ''));
         }
       }
-      html += '<button type="' + button.type + '" class="' + button.classes + '"' + ' ' + attributes.join(' ') + '>';
+      html += `<button type="${button.type}" class="${button.classes}"` + ` ${attributes.join(' ')}>`;
       html += button.label;
       html += '</button>';
     }
@@ -173,8 +170,8 @@
    *   The corresponding HTML.
    */
   Drupal.theme.quickeditFormContainer = function (settings) {
-    var html = '';
-    html += '<div id="' + settings.id + '" class="quickedit-form-container">';
+    let html = '';
+    html += `<div id="${settings.id}" class="quickedit-form-container">`;
     html += '  <div class="quickedit-form">';
     html += '    <div class="placeholder">';
     html += settings.loadingMsg;
@@ -183,5 +180,4 @@
     html += '</div>';
     return html;
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/quickedit/js/util.es6.js b/core/modules/quickedit/js/util.es6.js
index 4b0a4c43e6..7fa952be5c 100644
--- a/core/modules/quickedit/js/util.es6.js
+++ b/core/modules/quickedit/js/util.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * @namespace
    */
@@ -41,13 +38,13 @@
    *   The formatted URL.
    */
   Drupal.quickedit.util.buildUrl = function (id, urlFormat) {
-    var parts = id.split('/');
+    const parts = id.split('/');
     return Drupal.formatString(decodeURIComponent(urlFormat), {
       '!entity_type': parts[0],
       '!id': parts[1],
       '!field_name': parts[2],
       '!langcode': parts[3],
-      '!view_mode': parts[4]
+      '!view_mode': parts[4],
     });
   };
 
@@ -60,26 +57,26 @@
    *   The message to use in the modal dialog.
    */
   Drupal.quickedit.util.networkErrorModal = function (title, message) {
-    var $message = $('<div>' + message + '</div>');
+    const $message = $(`<div>${message}</div>`);
     var networkErrorModal = Drupal.dialog($message.get(0), {
-      title: title,
+      title,
       dialogClass: 'quickedit-network-error',
       buttons: [
         {
           text: Drupal.t('OK'),
-          click: function () {
+          click() {
             networkErrorModal.close();
           },
-          primary: true
-        }
+          primary: true,
+        },
       ],
-      create: function () {
+      create() {
         $(this).parent().find('.ui-dialog-titlebar-close').remove();
       },
-      close: function (event) {
+      close(event) {
         // Automatically destroy the DOM element that was used for the dialog.
         $(event.target).remove();
-      }
+      },
     });
     networkErrorModal.showModal();
   };
@@ -111,27 +108,27 @@
      *   as the ajax object, necessary if the callback wants to perform other
      *   Ajax commands.
      */
-    load: function (options, callback) {
-      var fieldID = options.fieldID;
+    load(options, callback) {
+      const fieldID = options.fieldID;
 
       // Create a Drupal.ajax instance to load the form.
-      var formLoaderAjax = Drupal.ajax({
+      const formLoaderAjax = Drupal.ajax({
         url: Drupal.quickedit.util.buildUrl(fieldID, Drupal.url('quickedit/form/!entity_type/!id/!field_name/!langcode/!view_mode')),
         submit: {
           nocssjs: options.nocssjs,
-          reset: options.reset
+          reset: options.reset,
         },
-        error: function (xhr, url) {
+        error(xhr, url) {
           // Show a modal to inform the user of the network error.
-          var fieldLabel = Drupal.quickedit.metadata.get(fieldID, 'label');
-          var message = Drupal.t('Could not load the form for <q>@field-label</q>, either due to a website problem or a network connection problem.<br>Please try again.', {'@field-label': fieldLabel});
+          const fieldLabel = Drupal.quickedit.metadata.get(fieldID, 'label');
+          const message = Drupal.t('Could not load the form for <q>@field-label</q>, either due to a website problem or a network connection problem.<br>Please try again.', { '@field-label': fieldLabel });
           Drupal.quickedit.util.networkErrorModal(Drupal.t('Network problem!'), message);
 
           // Change the state back to "candidate", to allow the user to start
           // in-place editing of the field again.
-          var fieldModel = Drupal.quickedit.app.model.get('activeField');
+          const fieldModel = Drupal.quickedit.app.model.get('activeField');
           fieldModel.set('state', 'candidate');
-        }
+        },
       });
       // Implement a scoped quickeditFieldForm AJAX command: calls the callback.
       formLoaderAjax.commands.quickeditFieldForm = function (ajax, response, status) {
@@ -160,16 +157,16 @@
      * @return {Drupal.Ajax}
      *   A {@link Drupal.Ajax} instance.
      */
-    ajaxifySaving: function (options, $submit) {
+    ajaxifySaving(options, $submit) {
       // Re-wire the form to handle submit.
-      var settings = {
+      const settings = {
         url: $submit.closest('form').attr('action'),
         setClick: true,
         event: 'click.quickedit',
         progress: false,
         submit: {
           nocssjs: options.nocssjs,
-          other_view_modes: options.other_view_modes
+          other_view_modes: options.other_view_modes,
         },
 
         /**
@@ -183,15 +180,15 @@
          * @param {number} [status]
          *   The HTTP status code.
          */
-        success: function (response, status) {
-          for (var i in response) {
+        success(response, status) {
+          for (const i in response) {
             if (response.hasOwnProperty(i) && response[i].command && this.commands[response[i].command]) {
               this.commands[response[i].command](this, response[i], status);
             }
           }
         },
         base: $submit.attr('id'),
-        element: $submit[0]
+        element: $submit[0],
       };
 
       return Drupal.ajax(settings);
@@ -204,10 +201,9 @@
      *   A {@link Drupal.Ajax} instance that was returned by
      *   {@link Drupal.quickedit.form.ajaxifySaving}.
      */
-    unajaxifySaving: function (ajax) {
+    unajaxifySaving(ajax) {
       $(ajax.element).off('click.quickedit');
-    }
+    },
 
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/quickedit/js/views/AppView.es6.js b/core/modules/quickedit/js/views/AppView.es6.js
index b09a110b8b..1e3093e12a 100644
--- a/core/modules/quickedit/js/views/AppView.es6.js
+++ b/core/modules/quickedit/js/views/AppView.es6.js
@@ -6,9 +6,6 @@
  */
 
 (function ($, _, Backbone, Drupal) {
-
-  'use strict';
-
   // Indicates whether the page should be reloaded after in-place editing has
   // shut down. A page reload is necessary to re-instate the original HTML of
   // the edited fields if in-place editing has been canceled and one or more of
@@ -16,7 +13,7 @@
   // been changed to the empty value and hence may have been rerendered as the
   // empty string, which makes it impossible for Quick Edit to know where to
   // restore the original HTML.
-  var reload = false;
+  let reload = false;
 
   Drupal.quickedit.AppView = Backbone.View.extend(/** @lends Drupal.quickedit.AppView# */{
 
@@ -34,7 +31,7 @@
      * @param {Drupal.quickedit.FieldCollection} options.fieldsCollection
      *   All on-page fields
      */
-    initialize: function (options) {
+    initialize(options) {
       // AppView's configuration for handling states.
       // @see Drupal.quickedit.FieldModel.states
       this.activeFieldStates = ['activating', 'active'];
@@ -66,27 +63,27 @@
      *   The state of the associated field. One of
      *   {@link Drupal.quickedit.EntityModel.states}.
      */
-    appStateChange: function (entityModel, state) {
-      var app = this;
-      var entityToolbarView;
+    appStateChange(entityModel, state) {
+      const app = this;
+      let entityToolbarView;
       switch (state) {
         case 'launching':
           reload = false;
           // First, create an entity toolbar view.
           entityToolbarView = new Drupal.quickedit.EntityToolbarView({
             model: entityModel,
-            appModel: this.model
+            appModel: this.model,
           });
           entityModel.toolbarView = entityToolbarView;
           // Second, set up in-place editors.
           // They must be notified of state changes, hence this must happen
           // while the associated fields are still in the 'inactive' state.
-          entityModel.get('fields').each(function (fieldModel) {
+          entityModel.get('fields').each((fieldModel) => {
             app.setupEditor(fieldModel);
           });
           // Third, transition the entity to the 'opening' state, which will
           // transition all fields from 'inactive' to 'candidate'.
-          _.defer(function () {
+          _.defer(() => {
             entityModel.set('state', 'opening');
           });
           break;
@@ -94,7 +91,7 @@
         case 'closed':
           entityToolbarView = entityModel.toolbarView;
           // First, tear down the in-place editors.
-          entityModel.get('fields').each(function (fieldModel) {
+          entityModel.get('fields').each((fieldModel) => {
             app.teardownEditor(fieldModel);
           });
           // Second, tear down the entity toolbar view.
@@ -129,8 +126,8 @@
      * @return {bool}
      *   Whether the editor change was accepted or rejected.
      */
-    acceptEditorStateChange: function (from, to, context, fieldModel) {
-      var accept = true;
+    acceptEditorStateChange(from, to, context, fieldModel) {
+      let accept = true;
 
       // If the app is in view mode, then reject all state changes except for
       // those to 'inactive'.
@@ -183,8 +180,8 @@
         // If it's not against the general principle, then here are more
         // disallowed cases to check.
         if (accept) {
-          var activeField;
-          var activeFieldState;
+          let activeField;
+          let activeFieldState;
           // Ensure only one field (editor) at a time is active … but allow a
           // user to hop from one field to the next, even if we still have to
           // start saving the field that is currently active: assume it will be
@@ -255,38 +252,38 @@
      * @param {Drupal.quickedit.FieldModel} fieldModel
      *   The field for which an in-place editor must be set up.
      */
-    setupEditor: function (fieldModel) {
+    setupEditor(fieldModel) {
       // Get the corresponding entity toolbar.
-      var entityModel = fieldModel.get('entity');
-      var entityToolbarView = entityModel.toolbarView;
+      const entityModel = fieldModel.get('entity');
+      const entityToolbarView = entityModel.toolbarView;
       // Get the field toolbar DOM root from the entity toolbar.
-      var fieldToolbarRoot = entityToolbarView.getToolbarRoot();
+      const fieldToolbarRoot = entityToolbarView.getToolbarRoot();
       // Create in-place editor.
-      var editorName = fieldModel.get('metadata').editor;
-      var editorModel = new Drupal.quickedit.EditorModel();
-      var editorView = new Drupal.quickedit.editors[editorName]({
+      const editorName = fieldModel.get('metadata').editor;
+      const editorModel = new Drupal.quickedit.EditorModel();
+      const editorView = new Drupal.quickedit.editors[editorName]({
         el: $(fieldModel.get('el')),
         model: editorModel,
-        fieldModel: fieldModel
+        fieldModel,
       });
 
       // Create in-place editor's toolbar for this field — stored inside the
       // entity toolbar, the entity toolbar will position itself appropriately
       // above (or below) the edited element.
-      var toolbarView = new Drupal.quickedit.FieldToolbarView({
+      const toolbarView = new Drupal.quickedit.FieldToolbarView({
         el: fieldToolbarRoot,
         model: fieldModel,
         $editedElement: $(editorView.getEditedElement()),
-        editorView: editorView,
-        entityModel: entityModel
+        editorView,
+        entityModel,
       });
 
       // Create decoration for edited element: padding if necessary, sets
       // classes on the element to style it according to the current state.
-      var decorationView = new Drupal.quickedit.FieldDecorationView({
+      const decorationView = new Drupal.quickedit.FieldDecorationView({
         el: $(editorView.getEditedElement()),
         model: fieldModel,
-        editorView: editorView
+        editorView,
       });
 
       // Track these three views in FieldModel so that we can tear them down
@@ -304,7 +301,7 @@
      * @param {Drupal.quickedit.FieldModel} fieldModel
      *   The field for which an in-place editor must be torn down.
      */
-    teardownEditor: function (fieldModel) {
+    teardownEditor(fieldModel) {
       // Early-return if this field was not yet decorated.
       if (typeof fieldModel.editorView === 'undefined') {
         return;
@@ -333,9 +330,9 @@
      *
      * @see Drupal.quickedit.AppView#acceptEditorStateChange
      */
-    confirmEntityDeactivation: function (entityModel) {
-      var that = this;
-      var discardDialog;
+    confirmEntityDeactivation(entityModel) {
+      const that = this;
+      let discardDialog;
 
       function closeDiscardDialog(action) {
         discardDialog.close(action);
@@ -345,10 +342,10 @@
         // If the targetState is saving, the field must be saved, then the
         // entity must be saved.
         if (action === 'save') {
-          entityModel.set('state', 'committing', {confirmed: true});
+          entityModel.set('state', 'committing', { confirmed: true });
         }
         else {
-          entityModel.set('state', 'deactivating', {confirmed: true});
+          entityModel.set('state', 'deactivating', { confirmed: true });
           // Editing has been canceled and the changes will not be saved. Mark
           // the page for reload if the entityModel declares that it requires
           // a reload.
@@ -361,7 +358,7 @@
 
       // Only instantiate if there isn't a modal instance visible yet.
       if (!this.model.get('activeModal')) {
-        var $unsavedChanges = $('<div>' + Drupal.t('You have unsaved changes') + '</div>');
+        const $unsavedChanges = $(`<div>${Drupal.t('You have unsaved changes')}</div>`);
         discardDialog = Drupal.dialog($unsavedChanges.get(0), {
           title: Drupal.t('Discard changes?'),
           dialogClass: 'quickedit-discard-modal',
@@ -369,30 +366,30 @@
           buttons: [
             {
               text: Drupal.t('Save'),
-              click: function () {
+              click() {
                 closeDiscardDialog('save');
               },
-              primary: true
+              primary: true,
             },
             {
               text: Drupal.t('Discard changes'),
-              click: function () {
+              click() {
                 closeDiscardDialog('discard');
-              }
-            }
+              },
+            },
           ],
           // Prevent this modal from being closed without the user making a
           // choice as per http://stackoverflow.com/a/5438771.
           closeOnEscape: false,
-          create: function () {
+          create() {
             $(this).parent().find('.ui-dialog-titlebar-close').remove();
           },
           beforeClose: false,
-          close: function (event) {
+          close(event) {
             // Automatically destroy the DOM element that was used for the
             // dialog.
             $(event.target).remove();
-          }
+          },
         });
         this.model.set('activeModal', discardDialog);
 
@@ -409,9 +406,9 @@
      *   The state of the associated field. One of
      *   {@link Drupal.quickedit.FieldModel.states}.
      */
-    editorStateChange: function (fieldModel, state) {
-      var from = fieldModel.previous('state');
-      var to = state;
+    editorStateChange(fieldModel, state) {
+      const from = fieldModel.previous('state');
+      const to = state;
 
       // Keep track of the highlighted field in the global state.
       if (_.indexOf(this.singleFieldStates, to) !== -1 && this.model.get('highlightedField') !== fieldModel) {
@@ -447,12 +444,12 @@
      *   Whether this change to the 'html' attribute occurred because of the
      *   propagation of changes to another instance of this field.
      */
-    renderUpdatedField: function (fieldModel, html, options) {
+    renderUpdatedField(fieldModel, html, options) {
       // Get data necessary to rerender property before it is unavailable.
-      var $fieldWrapper = $(fieldModel.get('el'));
-      var $context = $fieldWrapper.parent();
+      const $fieldWrapper = $(fieldModel.get('el'));
+      const $context = $fieldWrapper.parent();
 
-      var renderField = function () {
+      const renderField = function () {
         // Destroy the field model; this will cause all attached views to be
         // destroyed too, and removal from all collections in which it exists.
         fieldModel.destroy();
@@ -475,17 +472,17 @@
         // Deferred because renderUpdatedField is reacting to a field model
         // change event, and we want to make sure that event fully propagates
         // before making another change to the same model.
-        _.defer(function () {
+        _.defer(() => {
           // First set the state to 'candidate', to allow all attached views to
           // clean up all their "active state"-related changes.
           fieldModel.set('state', 'candidate');
 
           // Similarly, the above .set() call's change event must fully
           // propagate before calling it again.
-          _.defer(function () {
+          _.defer(() => {
             // Set the field's state to 'inactive', to enable the updating of
             // its DOM value.
-            fieldModel.set('state', 'inactive', {reason: 'rerender'});
+            fieldModel.set('state', 'inactive', { reason: 'rerender' });
 
             renderField();
           });
@@ -511,23 +508,23 @@
      *
      * @see Drupal.quickedit.AppView#renderUpdatedField
      */
-    propagateUpdatedField: function (updatedField, html, options) {
+    propagateUpdatedField(updatedField, html, options) {
       // Don't propagate field updates that themselves were caused by
       // propagation.
       if (options.propagation) {
         return;
       }
 
-      var htmlForOtherViewModes = updatedField.get('htmlForOtherViewModes');
+      const htmlForOtherViewModes = updatedField.get('htmlForOtherViewModes');
       Drupal.quickedit.collections.fields
         // Find all instances of fields that display the same logical field
         // (same entity, same field, just a different instance and maybe a
         // different view mode).
-        .where({logicalFieldID: updatedField.get('logicalFieldID')})
-        .forEach(function (field) {
+        .where({ logicalFieldID: updatedField.get('logicalFieldID') })
+        .forEach((field) => {
           // Ignore the field that was already updated.
           if (field === updatedField) {
-            return;
+
           }
           // If this other instance of the field has the same view mode, we can
           // update it easily.
@@ -539,10 +536,8 @@
           // available (and that should be the case unless this field was only
           // added to the page after editing of the updated field began), then
           // use that view mode's re-rendered version.
-          else {
-            if (field.getViewMode() in htmlForOtherViewModes) {
-              field.set('html', htmlForOtherViewModes[field.getViewMode()], {propagation: true});
-            }
+          else if (field.getViewMode() in htmlForOtherViewModes) {
+            field.set('html', htmlForOtherViewModes[field.getViewMode()], { propagation: true });
           }
         });
     },
@@ -556,8 +551,8 @@
      * @param {Drupal.quickedit.FieldModel} fieldModel
      *   A field that was just added to the collection of fields.
      */
-    rerenderedFieldToCandidate: function (fieldModel) {
-      var activeEntity = Drupal.quickedit.collections.entities.findWhere({isActive: true});
+    rerenderedFieldToCandidate(fieldModel) {
+      const activeEntity = Drupal.quickedit.collections.entities.findWhere({ isActive: true });
 
       // Early-return if there is no active entity.
       if (!activeEntity) {
@@ -579,7 +574,7 @@
      * @param {Drupal.quickedit.EntityModel} changedEntityModel
      *   The entityModel instance whose active state has changed.
      */
-    enforceSingleActiveEntity: function (changedEntityModel) {
+    enforceSingleActiveEntity(changedEntityModel) {
       // When an entity is deactivated, we don't need to enforce anything.
       if (changedEntityModel.get('isActive') === false) {
         return;
@@ -587,14 +582,11 @@
 
       // This entity was activated; deactivate all other entities.
       changedEntityModel.collection.chain()
-        .filter(function (entityModel) {
-          return entityModel.get('isActive') === true && entityModel !== changedEntityModel;
-        })
-        .each(function (entityModel) {
+        .filter(entityModel => entityModel.get('isActive') === true && entityModel !== changedEntityModel)
+        .each((entityModel) => {
           entityModel.set('state', 'deactivating');
         });
-    }
+    },
 
   });
-
 }(jQuery, _, Backbone, Drupal));
diff --git a/core/modules/quickedit/js/views/ContextualLinkView.es6.js b/core/modules/quickedit/js/views/ContextualLinkView.es6.js
index bf50f616c7..00a152869f 100644
--- a/core/modules/quickedit/js/views/ContextualLinkView.es6.js
+++ b/core/modules/quickedit/js/views/ContextualLinkView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Backbone, Drupal) {
-
-  'use strict';
-
   Drupal.quickedit.ContextualLinkView = Backbone.View.extend(/** @lends Drupal.quickedit.ContextualLinkView# */{
 
     /**
@@ -15,7 +12,7 @@
      * @return {object}
      *   A map of events.
      */
-    events: function () {
+    events() {
       // Prevents delay and simulated mouse events.
       function touchEndToClick(event) {
         event.preventDefault();
@@ -27,7 +24,7 @@
           event.preventDefault();
           this.model.set('state', 'launching');
         },
-        'touchEnd a': touchEndToClick
+        'touchEnd a': touchEndToClick,
       };
     },
 
@@ -47,7 +44,7 @@
      * @param {object} options.strings
      *   The strings for the "Quick edit" link.
      */
-    initialize: function (options) {
+    initialize(options) {
       // Insert the text of the quick edit toggle.
       this.$el.find('a').text(options.strings.quickEdit);
       // Initial render.
@@ -67,15 +64,14 @@
      * @return {Drupal.quickedit.ContextualLinkView}
      *   The `ContextualLinkView` in question.
      */
-    render: function (entityModel, isActive) {
+    render(entityModel, isActive) {
       this.$el.find('a').attr('aria-pressed', isActive);
 
       // Hides the contextual links if an in-place editor is active.
       this.$el.closest('.contextual').toggle(!isActive);
 
       return this;
-    }
+    },
 
   });
-
-})(jQuery, Backbone, Drupal);
+}(jQuery, Backbone, Drupal));
diff --git a/core/modules/quickedit/js/views/EditorView.es6.js b/core/modules/quickedit/js/views/EditorView.es6.js
index 5e041db0d4..7eff43e42a 100644
--- a/core/modules/quickedit/js/views/EditorView.es6.js
+++ b/core/modules/quickedit/js/views/EditorView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Backbone, Drupal) {
-
-  'use strict';
-
   Drupal.quickedit.EditorView = Backbone.View.extend(/** @lends Drupal.quickedit.EditorView# */{
 
     /**
@@ -38,7 +35,7 @@
      * @see Drupal.quickedit.EditorModel
      * @see Drupal.quickedit.editors.plain_text
      */
-    initialize: function (options) {
+    initialize(options) {
       this.fieldModel = options.fieldModel;
       this.listenTo(this.fieldModel, 'change:state', this.stateChange);
     },
@@ -46,7 +43,7 @@
     /**
      * @inheritdoc
      */
-    remove: function () {
+    remove() {
       // The el property is the field, which should not be removed. Remove the
       // pointer to it, then call Backbone.View.prototype.remove().
       this.setElement();
@@ -68,7 +65,7 @@
      *
      * @see Drupal.quickedit.editors.plain_text
      */
-    getEditedElement: function () {
+    getEditedElement() {
       return this.$el;
     },
 
@@ -85,8 +82,8 @@
      *    integrated toolbar should consume the full width of the element,
      *    rather than being just long enough to accommodate a label.
      */
-    getQuickEditUISettings: function () {
-      return {padding: false, unifiedToolbar: false, fullWidthToolbar: false, popup: false};
+    getQuickEditUISettings() {
+      return { padding: false, unifiedToolbar: false, fullWidthToolbar: false, popup: false };
     },
 
     /**
@@ -98,9 +95,9 @@
      *   The state of the associated field. One of
      *   {@link Drupal.quickedit.FieldModel.states}.
      */
-    stateChange: function (fieldModel, state) {
-      var from = fieldModel.previous('state');
-      var to = state;
+    stateChange(fieldModel, state) {
+      const from = fieldModel.previous('state');
+      const to = state;
       switch (to) {
         case 'inactive':
           // An in-place editor view will not yet exist in this state, hence
@@ -131,7 +128,7 @@
             // Do the loading here.
             callback();
           };
-          loadDependencies(function () {
+          loadDependencies(() => {
             fieldModel.set('state', 'active');
           });
           break;
@@ -175,7 +172,7 @@
     /**
      * Reverts the modified value to the original, before editing started.
      */
-    revert: function () {
+    revert() {
       // A no-op by default; each editor should implement reverting itself.
       // Note that if the in-place editor does not cause the FieldModel's
       // element to be modified, then nothing needs to happen.
@@ -184,13 +181,13 @@
     /**
      * Saves the modified value in the in-place editor for this field.
      */
-    save: function () {
-      var fieldModel = this.fieldModel;
-      var editorModel = this.model;
-      var backstageId = 'quickedit_backstage-' + this.fieldModel.id.replace(/[\/\[\]\_\s]/g, '-');
+    save() {
+      const fieldModel = this.fieldModel;
+      const editorModel = this.model;
+      const backstageId = `quickedit_backstage-${this.fieldModel.id.replace(/[\/\[\]\_\s]/g, '-')}`;
 
       function fillAndSubmitForm(value) {
-        var $form = $('#' + backstageId).find('form');
+        const $form = $(`#${backstageId}`).find('form');
         // Fill in the value in any <input> that isn't hidden or a submit
         // button.
         $form.find(':input[type!="hidden"][type!="submit"]:not(select)')
@@ -200,7 +197,7 @@
         $form.find('.quickedit-form-submit').trigger('click.quickedit');
       }
 
-      var formOptions = {
+      const formOptions = {
         fieldID: this.fieldModel.get('fieldID'),
         $el: this.$el,
         nocssjs: true,
@@ -212,23 +209,23 @@
         // that might not even be necessary: it is only when a user saves a
         // first changed field for an entity that this needs to happen:
         // precisely now!
-        reset: !this.fieldModel.get('entity').get('inTempStore')
+        reset: !this.fieldModel.get('entity').get('inTempStore'),
       };
 
-      var self = this;
-      Drupal.quickedit.util.form.load(formOptions, function (form, ajax) {
+      const self = this;
+      Drupal.quickedit.util.form.load(formOptions, (form, ajax) => {
         // Create a backstage area for storing forms that are hidden from view
         // (hence "backstage" — since the editing doesn't happen in the form, it
         // happens "directly" in the content, the form is only used for saving).
-        var $backstage = $(Drupal.theme('quickeditBackstage', {id: backstageId})).appendTo('body');
+        const $backstage = $(Drupal.theme('quickeditBackstage', { id: backstageId })).appendTo('body');
         // Hidden forms are stuffed into the backstage container for this field.
-        var $form = $(form).appendTo($backstage);
+        const $form = $(form).appendTo($backstage);
         // Disable the browser's HTML5 validation; we only care about server-
         // side validation. (Not disabling this will actually cause problems
         // because browsers don't like to set HTML5 validation errors on hidden
         // forms.)
         $form.prop('novalidate', true);
-        var $submit = $form.find('.quickedit-form-submit');
+        const $submit = $form.find('.quickedit-form-submit');
         self.formSaveAjax = Drupal.quickedit.util.form.ajaxifySaving(formOptions, $submit);
 
         function removeHiddenForm() {
@@ -276,8 +273,8 @@
      *
      * Should be called when the state is changed to 'invalid'.
      */
-    showValidationErrors: function () {
-      var $errors = $('<div class="quickedit-validation-errors"></div>')
+    showValidationErrors() {
+      const $errors = $('<div class="quickedit-validation-errors"></div>')
         .append(this.model.get('validationErrors'));
       this.getEditedElement()
         .addClass('quickedit-validation-error')
@@ -292,13 +289,12 @@
      * editor again to attempt to save again. In the case of the latter: the
      * invalid value was discarded.
      */
-    removeValidationErrors: function () {
+    removeValidationErrors() {
       this.getEditedElement()
         .removeClass('quickedit-validation-error')
         .next('.quickedit-validation-errors')
         .remove();
-    }
+    },
 
   });
-
 }(jQuery, Backbone, Drupal));
diff --git a/core/modules/quickedit/js/views/EntityDecorationView.es6.js b/core/modules/quickedit/js/views/EntityDecorationView.es6.js
index ff090fe4c7..263a6d2792 100644
--- a/core/modules/quickedit/js/views/EntityDecorationView.es6.js
+++ b/core/modules/quickedit/js/views/EntityDecorationView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Drupal, $, Backbone) {
-
-  'use strict';
-
   Drupal.quickedit.EntityDecorationView = Backbone.View.extend(/** @lends Drupal.quickedit.EntityDecorationView# */{
 
     /**
@@ -16,25 +13,24 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
+    initialize() {
       this.listenTo(this.model, 'change', this.render);
     },
 
     /**
      * @inheritdoc
      */
-    render: function () {
+    render() {
       this.$el.toggleClass('quickedit-entity-active', this.model.get('isActive'));
     },
 
     /**
      * @inheritdoc
      */
-    remove: function () {
+    remove() {
       this.setElement(null);
       Backbone.View.prototype.remove.call(this);
-    }
+    },
 
   });
-
 }(Drupal, jQuery, Backbone));
diff --git a/core/modules/quickedit/js/views/EntityToolbarView.es6.js b/core/modules/quickedit/js/views/EntityToolbarView.es6.js
index 4fa0506f53..4c87d087e4 100644
--- a/core/modules/quickedit/js/views/EntityToolbarView.es6.js
+++ b/core/modules/quickedit/js/views/EntityToolbarView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, _, Backbone, Drupal, debounce) {
-
-  'use strict';
-
   Drupal.quickedit.EntityToolbarView = Backbone.View.extend(/** @lends Drupal.quickedit.EntityToolbarView# */{
 
     /**
@@ -18,11 +15,11 @@
      * @return {object}
      *   A map of events.
      */
-    events: function () {
-      var map = {
+    events() {
+      const map = {
         'click button.action-save': 'onClickSave',
         'click button.action-cancel': 'onClickCancel',
-        'mouseenter': 'onMouseenter'
+        mouseenter: 'onMouseenter',
       };
       return map;
     },
@@ -37,8 +34,8 @@
      * @param {Drupal.quickedit.AppModel} options.appModel
      *   A quickedit `AppModel` to use in the view.
      */
-    initialize: function (options) {
-      var that = this;
+    initialize(options) {
+      const that = this;
       this.appModel = options.appModel;
       this.$entity = $(this.model.get('el'));
 
@@ -55,14 +52,14 @@
 
       // Adjust the fence placement within which the entity toolbar may be
       // positioned.
-      $(document).on('drupalViewportOffsetChange.quickedit', function (event, offsets) {
+      $(document).on('drupalViewportOffsetChange.quickedit', (event, offsets) => {
         if (that.$fence) {
           that.$fence.css(offsets);
         }
       });
 
       // Set the entity toolbar DOM element as the el for this view.
-      var $toolbar = this.buildToolbarEl();
+      const $toolbar = this.buildToolbarEl();
       this.setElement($toolbar);
       this._fieldToolbarRoot = $toolbar.find('.quickedit-toolbar-field').get(0);
 
@@ -76,10 +73,10 @@
      * @return {Drupal.quickedit.EntityToolbarView}
      *   The entity toolbar view.
      */
-    render: function () {
+    render() {
       if (this.model.get('isActive')) {
         // If the toolbar container doesn't exist, create it.
-        var $body = $('body');
+        const $body = $('body');
         if ($body.children('#quickedit-entity-toolbar').length === 0) {
           $body.append(this.$el);
         }
@@ -102,8 +99,8 @@
 
       // The save button text and state varies with the state of the entity
       // model.
-      var $button = this.$el.find('.quickedit-button.action-save');
-      var isDirty = this.model.get('isDirty');
+      const $button = this.$el.find('.quickedit-button.action-save');
+      const isDirty = this.model.get('isDirty');
       // Adjust the save button according to the state of the model.
       switch (this.model.get('state')) {
         // Quick editing is active, but no field is being edited.
@@ -136,7 +133,7 @@
     /**
      * @inheritdoc
      */
-    remove: function () {
+    remove() {
       // Remove additional DOM elements controlled by this View.
       this.$fence.remove();
 
@@ -153,7 +150,7 @@
      * @param {jQuery.Event} event
      *   The scroll or resize event.
      */
-    windowChangeHandler: function (event) {
+    windowChangeHandler(event) {
       this.position();
     },
 
@@ -166,7 +163,7 @@
      *   The state of the associated field. One of
      *   {@link Drupal.quickedit.FieldModel.states}.
      */
-    fieldStateChange: function (model, state) {
+    fieldStateChange(model, state) {
       switch (state) {
         case 'active':
           this.render();
@@ -184,25 +181,25 @@
      * @param {HTMLElement} [element]
      *   The element against which the entity toolbar is positioned.
      */
-    position: function (element) {
+    position(element) {
       clearTimeout(this.timer);
 
-      var that = this;
+      const that = this;
       // Vary the edge of the positioning according to the direction of language
       // in the document.
-      var edge = (document.documentElement.dir === 'rtl') ? 'right' : 'left';
+      const edge = (document.documentElement.dir === 'rtl') ? 'right' : 'left';
       // A time unit to wait until the entity toolbar is repositioned.
-      var delay = 0;
+      let delay = 0;
       // Determines what check in the series of checks below should be
       // evaluated.
-      var check = 0;
+      let check = 0;
       // When positioned against an active field that has padding, we should
       // ignore that padding when positioning the toolbar, to not unnecessarily
       // move the toolbar horizontally, which feels annoying.
-      var horizontalPadding = 0;
-      var of;
-      var activeField;
-      var highlightedField;
+      let horizontalPadding = 0;
+      let of;
+      let activeField;
+      let highlightedField;
       // There are several elements in the page that the entity toolbar might be
       // positioned against. They are considered below in a priority order.
       do {
@@ -238,8 +235,8 @@
             var topMostPosition = 1000000;
             var topMostField = null;
             // Position against the topmost field.
-            for (var i = 0; i < fieldModels.length; i++) {
-              var pos = fieldModels[i].get('el').getBoundingClientRect().top;
+            for (let i = 0; i < fieldModels.length; i++) {
+              const pos = fieldModels[i].get('el').getBoundingClientRect().top;
               if (pos < topMostPosition) {
                 topMostPosition = pos;
                 topMostField = fieldModels[i];
@@ -278,22 +275,22 @@
        */
       function refinePosition(view, suggested, info) {
         // Determine if the pointer should be on the top or bottom.
-        var isBelow = suggested.top > info.target.top;
+        const isBelow = suggested.top > info.target.top;
         info.element.element.toggleClass('quickedit-toolbar-pointer-top', isBelow);
         // Don't position the toolbar past the first or last editable field if
         // the entity is the target.
         if (view.$entity[0] === info.target.element[0]) {
           // Get the first or last field according to whether the toolbar is
           // above or below the entity.
-          var $field = view.$entity.find('.quickedit-editable').eq((isBelow) ? -1 : 0);
+          const $field = view.$entity.find('.quickedit-editable').eq((isBelow) ? -1 : 0);
           if ($field.length > 0) {
             suggested.top = (isBelow) ? ($field.offset().top + $field.outerHeight(true)) : $field.offset().top - info.element.element.outerHeight(true);
           }
         }
         // Don't let the toolbar go outside the fence.
-        var fenceTop = view.$fence.offset().top;
-        var fenceHeight = view.$fence.height();
-        var toolbarHeight = info.element.element.outerHeight(true);
+        const fenceTop = view.$fence.offset().top;
+        const fenceHeight = view.$fence.height();
+        const toolbarHeight = info.element.element.outerHeight(true);
         if (suggested.top < fenceTop) {
           suggested.top = fenceTop;
         }
@@ -303,7 +300,7 @@
         // Position the toolbar.
         info.element.element.css({
           left: Math.floor(suggested.left),
-          top: Math.floor(suggested.top)
+          top: Math.floor(suggested.top),
         });
       }
 
@@ -313,16 +310,16 @@
       function positionToolbar() {
         that.$el
           .position({
-            my: edge + ' bottom',
+            my: `${edge} bottom`,
             // Move the toolbar 1px towards the start edge of the 'of' element,
             // plus any horizontal padding that may have been added to the
             // element that is being added, to prevent unwanted horizontal
             // movement.
-            at: edge + '+' + (1 + horizontalPadding) + ' top',
-            of: of,
+            at: `${edge}+${1 + horizontalPadding} top`,
+            of,
             collision: 'flipfit',
             using: refinePosition.bind(null, that),
-            within: that.$fence
+            within: that.$fence,
           })
           // Resize the toolbar to match the dimensions of the field, up to a
           // maximum width that is equal to 90% of the field's width.
@@ -332,14 +329,14 @@
             // of the client if it is less than 240px, so that the toolbar
             // never folds up into a squashed and jumbled mess.
             'min-width': (document.documentElement.clientWidth < 240) ? document.documentElement.clientWidth : 240,
-            'width': '100%'
+            width: '100%',
           });
       }
 
       // Uses the jQuery.ui.position() method. Use a timeout to move the toolbar
       // only after the user has focused on an editable for 250ms. This prevents
       // the toolbar from jumping around the screen.
-      this.timer = setTimeout(function () {
+      this.timer = setTimeout(() => {
         // Render the position in the next execution cycle, so that animations
         // on the field have time to process. This is not strictly speaking, a
         // guarantee that all animations will be finished, but it's a simple
@@ -354,7 +351,7 @@
      * @param {jQuery.Event} event
      *   The click event.
      */
-    onClickSave: function (event) {
+    onClickSave(event) {
       event.stopPropagation();
       event.preventDefault();
       // Save the model.
@@ -367,7 +364,7 @@
      * @param {jQuery.Event} event
      *   The click event.
      */
-    onClickCancel: function (event) {
+    onClickCancel(event) {
       event.preventDefault();
       this.model.set('state', 'deactivating');
     },
@@ -380,7 +377,7 @@
      * @param {jQuery.Event} event
      *   The mouse event.
      */
-    onMouseenter: function (event) {
+    onMouseenter(event) {
       clearTimeout(this.timer);
     },
 
@@ -390,9 +387,9 @@
      * @return {jQuery}
      *   The toolbar element.
      */
-    buildToolbarEl: function () {
-      var $toolbar = $(Drupal.theme('quickeditEntityToolbar', {
-        id: 'quickedit-entity-toolbar'
+    buildToolbarEl() {
+      const $toolbar = $(Drupal.theme('quickeditEntityToolbar', {
+        id: 'quickedit-entity-toolbar',
       }));
 
       $toolbar
@@ -406,14 +403,14 @@
               type: 'submit',
               classes: 'action-save quickedit-button icon',
               attributes: {
-                'aria-hidden': true
-              }
+                'aria-hidden': true,
+              },
             },
             {
               label: Drupal.t('Close'),
-              classes: 'action-cancel quickedit-button icon icon-close icon-only'
-            }
-          ]
+              classes: 'action-cancel quickedit-button icon icon-close icon-only',
+            },
+          ],
         }));
 
       // Give the toolbar a sensible starting position so that it doesn't
@@ -421,7 +418,7 @@
       $toolbar
         .css({
           left: this.$entity.offset().left,
-          top: this.$entity.offset().top
+          top: this.$entity.offset().top,
         });
 
       return $toolbar;
@@ -433,35 +430,35 @@
      * @return {jQuery}
      *   The DOM element that fields will attach their toolbars to.
      */
-    getToolbarRoot: function () {
+    getToolbarRoot() {
       return this._fieldToolbarRoot;
     },
 
     /**
      * Generates a state-dependent label for the entity toolbar.
      */
-    label: function () {
+    label() {
       // The entity label.
-      var label = '';
-      var entityLabel = this.model.get('label');
+      let label = '';
+      const entityLabel = this.model.get('label');
 
       // Label of an active field, if it exists.
-      var activeField = Drupal.quickedit.app.model.get('activeField');
-      var activeFieldLabel = activeField && activeField.get('metadata').label;
+      const activeField = Drupal.quickedit.app.model.get('activeField');
+      const activeFieldLabel = activeField && activeField.get('metadata').label;
       // Label of a highlighted field, if it exists.
-      var highlightedField = Drupal.quickedit.app.model.get('highlightedField');
-      var highlightedFieldLabel = highlightedField && highlightedField.get('metadata').label;
+      const highlightedField = Drupal.quickedit.app.model.get('highlightedField');
+      const highlightedFieldLabel = highlightedField && highlightedField.get('metadata').label;
       // The label is constructed in a priority order.
       if (activeFieldLabel) {
         label = Drupal.theme('quickeditEntityToolbarLabel', {
-          entityLabel: entityLabel,
-          fieldLabel: activeFieldLabel
+          entityLabel,
+          fieldLabel: activeFieldLabel,
         });
       }
       else if (highlightedFieldLabel) {
         label = Drupal.theme('quickeditEntityToolbarLabel', {
-          entityLabel: entityLabel,
-          fieldLabel: highlightedFieldLabel
+          entityLabel,
+          fieldLabel: highlightedFieldLabel,
         });
       }
       else {
@@ -483,7 +480,7 @@
      *   A string of space-delimited class names that will be applied to the
      *   wrapping element of the toolbar group.
      */
-    addClass: function (toolgroup, classes) {
+    addClass(toolgroup, classes) {
       this._find(toolgroup).addClass(classes);
     },
 
@@ -496,7 +493,7 @@
      *   A string of space-delimited class names that will be removed from the
      *   wrapping element of the toolbar group.
      */
-    removeClass: function (toolgroup, classes) {
+    removeClass(toolgroup, classes) {
       this._find(toolgroup).removeClass(classes);
     },
 
@@ -509,8 +506,8 @@
      * @return {jQuery}
      *   The toolgroup DOM element.
      */
-    _find: function (toolgroup) {
-      return this.$el.find('.quickedit-toolbar .quickedit-toolgroup.' + toolgroup);
+    _find(toolgroup) {
+      return this.$el.find(`.quickedit-toolbar .quickedit-toolgroup.${toolgroup}`);
     },
 
     /**
@@ -519,10 +516,9 @@
      * @param {string} toolgroup
      *   A toolgroup name.
      */
-    show: function (toolgroup) {
+    show(toolgroup) {
       this.$el.removeClass('quickedit-animate-invisible');
-    }
+    },
 
   });
-
-})(jQuery, _, Backbone, Drupal, Drupal.debounce);
+}(jQuery, _, Backbone, Drupal, Drupal.debounce));
diff --git a/core/modules/quickedit/js/views/FieldDecorationView.es6.js b/core/modules/quickedit/js/views/FieldDecorationView.es6.js
index 966e2b9fbc..d65cbf35f1 100644
--- a/core/modules/quickedit/js/views/FieldDecorationView.es6.js
+++ b/core/modules/quickedit/js/views/FieldDecorationView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Backbone, Drupal) {
-
-  'use strict';
-
   Drupal.quickedit.FieldDecorationView = Backbone.View.extend(/** @lends Drupal.quickedit.FieldDecorationView# */{
 
     /**
@@ -20,9 +17,9 @@
     events: {
       'mouseenter.quickedit': 'onMouseEnter',
       'mouseleave.quickedit': 'onMouseLeave',
-      'click': 'onClick',
+      click: 'onClick',
       'tabIn.quickedit': 'onMouseEnter',
-      'tabOut.quickedit': 'onMouseLeave'
+      'tabOut.quickedit': 'onMouseLeave',
     },
 
     /**
@@ -35,7 +32,7 @@
      * @param {Drupal.quickedit.EditorView} options.editorView
      *   The editor object view.
      */
-    initialize: function (options) {
+    initialize(options) {
       this.editorView = options.editorView;
 
       this.listenTo(this.model, 'change:state', this.stateChange);
@@ -45,7 +42,7 @@
     /**
      * @inheritdoc
      */
-    remove: function () {
+    remove() {
       // The el property is the field, which should not be removed. Remove the
       // pointer to it, then call Backbone.View.prototype.remove().
       this.setElement();
@@ -61,9 +58,9 @@
      *   The state of the associated field. One of
      *   {@link Drupal.quickedit.FieldModel.states}.
      */
-    stateChange: function (model, state) {
-      var from = model.previous('state');
-      var to = state;
+    stateChange(model, state) {
+      const from = model.previous('state');
+      const to = state;
       switch (to) {
         case 'inactive':
           this.undecorate();
@@ -121,7 +118,7 @@
      * changed and stored before by the user (i.e. remotely, stored in
      * PrivateTempStore).
      */
-    renderChanged: function () {
+    renderChanged() {
       this.$el.toggleClass('quickedit-changed', this.model.get('isChanged') || this.model.get('inTempStore'));
     },
 
@@ -131,8 +128,8 @@
      * @param {jQuery.Event} event
      *   The mouse event.
      */
-    onMouseEnter: function (event) {
-      var that = this;
+    onMouseEnter(event) {
+      const that = this;
       that.model.set('state', 'highlighted');
       event.stopPropagation();
     },
@@ -143,9 +140,9 @@
      * @param {jQuery.Event} event
      *   The mouse event.
      */
-    onMouseLeave: function (event) {
-      var that = this;
-      that.model.set('state', 'candidate', {reason: 'mouseleave'});
+    onMouseLeave(event) {
+      const that = this;
+      that.model.set('state', 'candidate', { reason: 'mouseleave' });
       event.stopPropagation();
     },
 
@@ -155,7 +152,7 @@
      * @param {jQuery.Event} event
      *   The click event.
      */
-    onClick: function (event) {
+    onClick(event) {
       this.model.set('state', 'activating');
       event.preventDefault();
       event.stopPropagation();
@@ -164,23 +161,23 @@
     /**
      * Adds classes used to indicate an elements editable state.
      */
-    decorate: function () {
+    decorate() {
       this.$el.addClass('quickedit-candidate quickedit-editable');
     },
 
     /**
      * Removes classes used to indicate an elements editable state.
      */
-    undecorate: function () {
+    undecorate() {
       this.$el.removeClass('quickedit-candidate quickedit-editable quickedit-highlighted quickedit-editing');
     },
 
     /**
      * Adds that class that indicates that an element is highlighted.
      */
-    startHighlight: function () {
+    startHighlight() {
       // Animations.
-      var that = this;
+      const that = this;
       // Use a timeout to grab the next available animation frame.
       that.$el.addClass('quickedit-highlighted');
     },
@@ -188,14 +185,14 @@
     /**
      * Removes the class that indicates that an element is highlighted.
      */
-    stopHighlight: function () {
+    stopHighlight() {
       this.$el.removeClass('quickedit-highlighted');
     },
 
     /**
      * Removes the class that indicates that an element as editable.
      */
-    prepareEdit: function () {
+    prepareEdit() {
       this.$el.addClass('quickedit-editing');
 
       // Allow the field to be styled differently while editing in a pop-up
@@ -211,7 +208,7 @@
      * Reapplies the class that indicates that a candidate editable element is
      * again available to be edited.
      */
-    stopEdit: function () {
+    stopEdit() {
       this.$el.removeClass('quickedit-highlighted quickedit-editing');
 
       // Done editing in a pop-up in-place editor; remove the class.
@@ -226,12 +223,12 @@
     /**
      * Adds padding around the editable element to make it pop visually.
      */
-    _pad: function () {
+    _pad() {
       // Early return if the element has already been padded.
       if (this.$el.data('quickedit-padded')) {
         return;
       }
-      var self = this;
+      const self = this;
 
       // Add 5px padding for readability. This means we'll freeze the current
       // width and *then* add 5px padding, hence ensuring the padding is added
@@ -245,22 +242,22 @@
       }
 
       // 2) Add padding; use animations.
-      var posProp = this._getPositionProperties(this.$el);
-      setTimeout(function () {
+      const posProp = this._getPositionProperties(this.$el);
+      setTimeout(() => {
         // Re-enable width animations (padding changes affect width too!).
         self.$el.removeClass('quickedit-animate-disable-width');
 
         // Pad the editable.
         self.$el
           .css({
-            'position': 'relative',
-            'top': posProp.top - 5 + 'px',
-            'left': posProp.left - 5 + 'px',
-            'padding-top': posProp['padding-top'] + 5 + 'px',
-            'padding-left': posProp['padding-left'] + 5 + 'px',
-            'padding-right': posProp['padding-right'] + 5 + 'px',
-            'padding-bottom': posProp['padding-bottom'] + 5 + 'px',
-            'margin-bottom': posProp['margin-bottom'] - 10 + 'px'
+            position: 'relative',
+            top: `${posProp.top - 5}px`,
+            left: `${posProp.left - 5}px`,
+            'padding-top': `${posProp['padding-top'] + 5}px`,
+            'padding-left': `${posProp['padding-left'] + 5}px`,
+            'padding-right': `${posProp['padding-right'] + 5}px`,
+            'padding-bottom': `${posProp['padding-bottom'] + 5}px`,
+            'margin-bottom': `${posProp['margin-bottom'] - 10}px`,
           })
           .data('quickedit-padded', true);
       }, 0);
@@ -269,12 +266,12 @@
     /**
      * Removes the padding around the element being edited when editing ceases.
      */
-    _unpad: function () {
+    _unpad() {
       // Early return if the element has not been padded.
       if (!this.$el.data('quickedit-padded')) {
         return;
       }
-      var self = this;
+      const self = this;
 
       // 1) Set the empty width again.
       if (this._widthAttributeIsEmpty) {
@@ -285,22 +282,22 @@
 
       // 2) Remove padding; use animations (these will run simultaneously with)
       // the fading out of the toolbar as its gets removed).
-      var posProp = this._getPositionProperties(this.$el);
-      setTimeout(function () {
+      const posProp = this._getPositionProperties(this.$el);
+      setTimeout(() => {
         // Re-enable width animations (padding changes affect width too!).
         self.$el.removeClass('quickedit-animate-disable-width');
 
         // Unpad the editable.
         self.$el
           .css({
-            'position': 'relative',
-            'top': posProp.top + 5 + 'px',
-            'left': posProp.left + 5 + 'px',
-            'padding-top': posProp['padding-top'] - 5 + 'px',
-            'padding-left': posProp['padding-left'] - 5 + 'px',
-            'padding-right': posProp['padding-right'] - 5 + 'px',
-            'padding-bottom': posProp['padding-bottom'] - 5 + 'px',
-            'margin-bottom': posProp['margin-bottom'] + 10 + 'px'
+            position: 'relative',
+            top: `${posProp.top + 5}px`,
+            left: `${posProp.left + 5}px`,
+            'padding-top': `${posProp['padding-top'] - 5}px`,
+            'padding-left': `${posProp['padding-left'] - 5}px`,
+            'padding-right': `${posProp['padding-right'] - 5}px`,
+            'padding-bottom': `${posProp['padding-bottom'] - 5}px`,
+            'margin-bottom': `${posProp['margin-bottom'] + 10}px`,
           });
       }, 0);
       // Remove the marker that indicates that this field has padding. This is
@@ -322,17 +319,17 @@
      * @return {object}
      *   An object containing css values for the needed properties.
      */
-    _getPositionProperties: function ($e) {
-      var p;
-      var r = {};
-      var props = [
+    _getPositionProperties($e) {
+      let p;
+      const r = {};
+      const props = [
         'top', 'left', 'bottom', 'right',
         'padding-top', 'padding-left', 'padding-right', 'padding-bottom',
-        'margin-bottom'
+        'margin-bottom',
       ];
 
-      var propCount = props.length;
-      for (var i = 0; i < propCount; i++) {
+      const propCount = props.length;
+      for (let i = 0; i < propCount; i++) {
         p = props[i];
         r[p] = parseInt(this._replaceBlankPosition($e.css(p)), 10);
       }
@@ -348,13 +345,12 @@
      * @return {string}
      *   A CSS value that is valid for `position`.
      */
-    _replaceBlankPosition: function (pos) {
+    _replaceBlankPosition(pos) {
       if (pos === 'auto' || !pos) {
         pos = '0px';
       }
       return pos;
-    }
+    },
 
   });
-
-})(jQuery, Backbone, Drupal);
+}(jQuery, Backbone, Drupal));
diff --git a/core/modules/quickedit/js/views/FieldToolbarView.es6.js b/core/modules/quickedit/js/views/FieldToolbarView.es6.js
index dbd531f441..13e0457b5d 100644
--- a/core/modules/quickedit/js/views/FieldToolbarView.es6.js
+++ b/core/modules/quickedit/js/views/FieldToolbarView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, _, Backbone, Drupal) {
-
-  'use strict';
-
   Drupal.quickedit.FieldToolbarView = Backbone.View.extend(/** @lends Drupal.quickedit.FieldToolbarView# */{
 
     /**
@@ -40,7 +37,7 @@
      * @param {Drupal.quickedit.EditorView} options.editorView
      *   The EditorView the toolbar belongs to.
      */
-    initialize: function (options) {
+    initialize(options) {
       this.$editedElement = options.$editedElement;
       this.editorView = options.editorView;
 
@@ -50,7 +47,7 @@
       this.$root = this.$el;
 
       // Generate a DOM-compatible ID for the form container DOM element.
-      this._id = 'quickedit-toolbar-for-' + this.model.id.replace(/[\/\[\]]/g, '_');
+      this._id = `quickedit-toolbar-for-${this.model.id.replace(/[\/\[\]]/g, '_')}`;
 
       this.listenTo(this.model, 'change:state', this.stateChange);
     },
@@ -61,10 +58,10 @@
      * @return {Drupal.quickedit.FieldToolbarView}
      *   The current FieldToolbarView.
      */
-    render: function () {
+    render() {
       // Render toolbar and set it as the view's element.
       this.setElement($(Drupal.theme('quickeditFieldToolbar', {
-        id: this._id
+        id: this._id,
       })));
 
       // Attach to the field toolbar $root element in the entity toolbar.
@@ -82,9 +79,9 @@
      *   The state of the associated field. One of
      *   {@link Drupal.quickedit.FieldModel.states}.
      */
-    stateChange: function (model, state) {
-      var from = model.previous('state');
-      var to = state;
+    stateChange(model, state) {
+      const from = model.previous('state');
+      const to = state;
       switch (to) {
         case 'inactive':
           break;
@@ -134,17 +131,17 @@
     /**
      * Insert WYSIWYG markup into the associated toolbar.
      */
-    insertWYSIWYGToolGroups: function () {
+    insertWYSIWYGToolGroups() {
       this.$el
         .append(Drupal.theme('quickeditToolgroup', {
           id: this.getFloatedWysiwygToolgroupId(),
           classes: ['wysiwyg-floated', 'quickedit-animate-slow', 'quickedit-animate-invisible', 'quickedit-animate-delay-veryfast'],
-          buttons: []
+          buttons: [],
         }))
         .append(Drupal.theme('quickeditToolgroup', {
           id: this.getMainWysiwygToolgroupId(),
           classes: ['wysiwyg-main', 'quickedit-animate-slow', 'quickedit-animate-invisible', 'quickedit-animate-delay-veryfast'],
-          buttons: []
+          buttons: [],
         }));
 
       // Animate the toolgroups into visibility.
@@ -160,8 +157,8 @@
      * @return {string}
      *   A string that can be used as the ID for this toolbar's container.
      */
-    getId: function () {
-      return 'quickedit-toolbar-for-' + this._id;
+    getId() {
+      return `quickedit-toolbar-for-${this._id}`;
     },
 
     /**
@@ -172,8 +169,8 @@
      * @return {string}
      *   A string that can be used as the ID.
      */
-    getFloatedWysiwygToolgroupId: function () {
-      return 'quickedit-wysiwyg-floated-toolgroup-for-' + this._id;
+    getFloatedWysiwygToolgroupId() {
+      return `quickedit-wysiwyg-floated-toolgroup-for-${this._id}`;
     },
 
     /**
@@ -184,8 +181,8 @@
      * @return {string}
      *   A string that can be used as the ID.
      */
-    getMainWysiwygToolgroupId: function () {
-      return 'quickedit-wysiwyg-main-toolgroup-for-' + this._id;
+    getMainWysiwygToolgroupId() {
+      return `quickedit-wysiwyg-main-toolgroup-for-${this._id}`;
     },
 
     /**
@@ -197,8 +194,8 @@
      * @return {jQuery}
      *   The toolgroup element.
      */
-    _find: function (toolgroup) {
-      return this.$el.find('.quickedit-toolgroup.' + toolgroup);
+    _find(toolgroup) {
+      return this.$el.find(`.quickedit-toolgroup.${toolgroup}`);
     },
 
     /**
@@ -207,21 +204,20 @@
      * @param {string} toolgroup
      *   A toolgroup name.
      */
-    show: function (toolgroup) {
-      var $group = this._find(toolgroup);
+    show(toolgroup) {
+      const $group = this._find(toolgroup);
       // Attach a transitionEnd event handler to the toolbar group so that
       // update events can be triggered after the animations have ended.
-      $group.on(Drupal.quickedit.util.constants.transitionEnd, function (event) {
+      $group.on(Drupal.quickedit.util.constants.transitionEnd, (event) => {
         $group.off(Drupal.quickedit.util.constants.transitionEnd);
       });
       // The call to remove the class and start the animation must be started in
       // the next animation frame or the event handler attached above won't be
       // triggered.
-      window.setTimeout(function () {
+      window.setTimeout(() => {
         $group.removeClass('quickedit-animate-invisible');
       }, 0);
-    }
+    },
 
   });
-
-})(jQuery, _, Backbone, Drupal);
+}(jQuery, _, Backbone, Drupal));
diff --git a/core/modules/responsive_image/js/responsive_image.ajax.es6.js b/core/modules/responsive_image/js/responsive_image.ajax.es6.js
index 52093193ec..64f630d6f6 100644
--- a/core/modules/responsive_image/js/responsive_image.ajax.es6.js
+++ b/core/modules/responsive_image/js/responsive_image.ajax.es6.js
@@ -1,16 +1,12 @@
 (function (Drupal) {
-
-  'use strict';
-
   /**
    * Call picturefill so newly added responsive images are processed.
    */
   Drupal.behaviors.responsiveImageAJAX = {
-    attach: function () {
+    attach() {
       if (window.picturefill) {
         window.picturefill();
       }
-    }
+    },
   };
-
-})(Drupal);
+}(Drupal));
diff --git a/core/modules/simpletest/simpletest.es6.js b/core/modules/simpletest/simpletest.es6.js
index ba54cbf74b..42763b24c5 100644
--- a/core/modules/simpletest/simpletest.es6.js
+++ b/core/modules/simpletest/simpletest.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Collapses table rows followed by group rows on the test listing page.
    *
@@ -16,21 +13,21 @@
    *   Attach collapse behavior on the test listing page.
    */
   Drupal.behaviors.simpleTestGroupCollapse = {
-    attach: function (context) {
+    attach(context) {
       $(context).find('.simpletest-group').once('simpletest-group-collapse').each(function () {
-        var $group = $(this);
-        var $image = $group.find('.simpletest-image');
+        const $group = $(this);
+        const $image = $group.find('.simpletest-image');
         $image
           .html(drupalSettings.simpleTest.images[0])
-          .on('click', function () {
-            var $tests = $group.nextUntil('.simpletest-group');
-            var expand = !$group.hasClass('expanded');
+          .on('click', () => {
+            const $tests = $group.nextUntil('.simpletest-group');
+            const expand = !$group.hasClass('expanded');
             $group.toggleClass('expanded', expand);
             $tests.toggleClass('js-hide', !expand);
             $image.html(drupalSettings.simpleTest.images[+expand]);
           });
       });
-    }
+    },
   };
 
   /**
@@ -42,23 +39,23 @@
    *   Attaches behavior for selecting all tests in a group.
    */
   Drupal.behaviors.simpleTestSelectAll = {
-    attach: function (context) {
+    attach(context) {
       $(context).find('.simpletest-group').once('simpletest-group-select-all').each(function () {
-        var $group = $(this);
-        var $cell = $group.find('.simpletest-group-select-all');
-        var $groupCheckbox = $('<input type="checkbox" id="' + $cell.attr('id') + '-group-select-all" class="form-checkbox" />');
-        var $testCheckboxes = $group.nextUntil('.simpletest-group').find('input[type=checkbox]');
+        const $group = $(this);
+        const $cell = $group.find('.simpletest-group-select-all');
+        const $groupCheckbox = $(`<input type="checkbox" id="${$cell.attr('id')}-group-select-all" class="form-checkbox" />`);
+        const $testCheckboxes = $group.nextUntil('.simpletest-group').find('input[type=checkbox]');
         $cell.append($groupCheckbox);
 
         // Toggle the test checkboxes when the group checkbox is toggled.
         $groupCheckbox.on('change', function () {
-          var checked = $(this).prop('checked');
+          const checked = $(this).prop('checked');
           $testCheckboxes.prop('checked', checked);
         });
 
         // Update the group checkbox when a test checkbox is toggled.
         function updateGroupCheckbox() {
-          var allChecked = true;
+          let allChecked = true;
           $testCheckboxes.each(function () {
             if (!$(this).prop('checked')) {
               allChecked = false;
@@ -70,7 +67,7 @@
 
         $testCheckboxes.on('change', updateGroupCheckbox);
       });
-    }
+    },
   };
 
   /**
@@ -86,19 +83,19 @@
    *   Attaches the filter behavior to the text input element.
    */
   Drupal.behaviors.simpletestTableFilterByText = {
-    attach: function (context) {
-      var $input = $('input.table-filter-text').once('table-filter-text');
-      var $table = $($input.attr('data-table'));
-      var $rows;
-      var searched = false;
+    attach(context) {
+      const $input = $('input.table-filter-text').once('table-filter-text');
+      const $table = $($input.attr('data-table'));
+      let $rows;
+      let searched = false;
 
       function filterTestList(e) {
-        var query = $(e.target).val().toLowerCase();
+        const query = $(e.target).val().toLowerCase();
 
         function showTestRow(index, row) {
-          var $row = $(row);
-          var $sources = $row.find('.table-filter-text-source');
-          var textMatch = $sources.text().toLowerCase().indexOf(query) !== -1;
+          const $row = $(row);
+          const $sources = $row.find('.table-filter-text-source');
+          const textMatch = $sources.text().toLowerCase().indexOf(query) !== -1;
           $row.closest('tr').toggle(textMatch);
         }
 
@@ -124,7 +121,6 @@
         $rows = $table.find('tbody tr');
         $input.trigger('focus').on('keyup', Drupal.debounce(filterTestList, 200));
       }
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/statistics/statistics.es6.js b/core/modules/statistics/statistics.es6.js
index 572cd456ff..666536d319 100644
--- a/core/modules/statistics/statistics.es6.js
+++ b/core/modules/statistics/statistics.es6.js
@@ -4,15 +4,12 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
-  $(document).ready(function () {
+  $(document).ready(() => {
     $.ajax({
       type: 'POST',
       cache: false,
       url: drupalSettings.statistics.url,
-      data: drupalSettings.statistics.data
+      data: drupalSettings.statistics.data,
     });
   });
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/system/js/system.date.es6.js b/core/modules/system/js/system.date.es6.js
index 678614d98c..962dde39c3 100644
--- a/core/modules/system/js/system.date.es6.js
+++ b/core/modules/system/js/system.date.es6.js
@@ -4,10 +4,7 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
-  var dateFormats = drupalSettings.dateFormats;
+  const dateFormats = drupalSettings.dateFormats;
 
   /**
    * Display the preview for date format entered.
@@ -18,11 +15,11 @@
    *   Attach behavior for previewing date formats on input elements.
    */
   Drupal.behaviors.dateFormat = {
-    attach: function (context) {
-      var $context = $(context);
-      var $source = $context.find('[data-drupal-date-formatter="source"]').once('dateFormat');
-      var $target = $context.find('[data-drupal-date-formatter="preview"]').once('dateFormat');
-      var $preview = $target.find('em');
+    attach(context) {
+      const $context = $(context);
+      const $source = $context.find('[data-drupal-date-formatter="source"]').once('dateFormat');
+      const $target = $context.find('[data-drupal-date-formatter="preview"]').once('dateFormat');
+      const $preview = $target.find('em');
 
       // All elements have to exist.
       if (!$source.length || !$target.length) {
@@ -36,10 +33,8 @@
        *   The jQuery event triggered.
        */
       function dateFormatHandler(e) {
-        var baseValue = $(e.target).val() || '';
-        var dateString = baseValue.replace(/\\?(.?)/gi, function (key, value) {
-          return dateFormats[key] ? dateFormats[key] : value;
-        });
+        const baseValue = $(e.target).val() || '';
+        const dateString = baseValue.replace(/\\?(.?)/gi, (key, value) => dateFormats[key] ? dateFormats[key] : value);
 
         $preview.html(dateString);
         $target.toggleClass('js-hide', !dateString.length);
@@ -51,7 +46,6 @@
       $source.on('keyup.dateFormat change.dateFormat input.dateFormat', dateFormatHandler)
         // Initialize preview.
         .trigger('keyup');
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/system/js/system.es6.js b/core/modules/system/js/system.es6.js
index 82f0de6687..18153b09ec 100644
--- a/core/modules/system/js/system.es6.js
+++ b/core/modules/system/js/system.es6.js
@@ -4,11 +4,8 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   // Cache IDs in an array for ease of use.
-  var ids = [];
+  const ids = [];
 
   /**
    * Attaches field copy behavior from input fields to other input fields.
@@ -23,10 +20,10 @@
    *   Attaches the field copy behavior to an input field.
    */
   Drupal.behaviors.copyFieldValue = {
-    attach: function (context) {
+    attach(context) {
       // List of fields IDs on which to bind the event listener.
       // Create an array of IDs to use with jQuery.
-      for (var sourceId in drupalSettings.copyFieldValue) {
+      for (const sourceId in drupalSettings.copyFieldValue) {
         if (drupalSettings.copyFieldValue.hasOwnProperty(sourceId)) {
           ids.push(sourceId);
         }
@@ -37,13 +34,13 @@
         // bubble up the DOM tree.
         $('body').once('copy-field-values').on('value:copy', this.valueTargetCopyHandler);
         // Listen on all source elements.
-        $('#' + ids.join(', #')).once('copy-field-values').on('blur', this.valueSourceBlurHandler);
+        $(`#${ids.join(', #')}`).once('copy-field-values').on('blur', this.valueSourceBlurHandler);
       }
     },
-    detach: function (context, settings, trigger) {
+    detach(context, settings, trigger) {
       if (trigger === 'unload' && ids.length) {
         $('body').removeOnce('copy-field-values').off('value:copy');
-        $('#' + ids.join(', #')).removeOnce('copy-field-values').off('blur');
+        $(`#${ids.join(', #')}`).removeOnce('copy-field-values').off('blur');
       }
     },
 
@@ -55,8 +52,8 @@
      * @param {string} value
      *   Custom value from jQuery trigger.
      */
-    valueTargetCopyHandler: function (e, value) {
-      var $target = $(e.target);
+    valueTargetCopyHandler(e, value) {
+      const $target = $(e.target);
       if ($target.val() === '') {
         $target.val(value);
       }
@@ -71,11 +68,10 @@
      * @param {jQuery.Event} e
      *   The event triggered.
      */
-    valueSourceBlurHandler: function (e) {
-      var value = $(e.target).val();
-      var targetIds = drupalSettings.copyFieldValue[e.target.id];
-      $('#' + targetIds.join(', #')).trigger('value:copy', value);
-    }
+    valueSourceBlurHandler(e) {
+      const value = $(e.target).val();
+      const targetIds = drupalSettings.copyFieldValue[e.target.id];
+      $(`#${targetIds.join(', #')}`).trigger('value:copy', value);
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/system/js/system.modules.es6.js b/core/modules/system/js/system.modules.es6.js
index d47ca7031e..9472d3b2ee 100644
--- a/core/modules/system/js/system.modules.es6.js
+++ b/core/modules/system/js/system.modules.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, debounce) {
-
-  'use strict';
-
   /**
    * Filters the module list table by a text input search string.
    *
@@ -20,29 +17,29 @@
    * @type {Drupal~behavior}
    */
   Drupal.behaviors.tableFilterByText = {
-    attach: function (context, settings) {
-      var $input = $('input.table-filter-text').once('table-filter-text');
-      var $table = $($input.attr('data-table'));
-      var $rowsAndDetails;
-      var $rows;
-      var $details;
-      var searching = false;
+    attach(context, settings) {
+      const $input = $('input.table-filter-text').once('table-filter-text');
+      const $table = $($input.attr('data-table'));
+      let $rowsAndDetails;
+      let $rows;
+      let $details;
+      let searching = false;
 
       function hidePackageDetails(index, element) {
-        var $packDetails = $(element);
-        var $visibleRows = $packDetails.find('tbody tr:visible');
+        const $packDetails = $(element);
+        const $visibleRows = $packDetails.find('tbody tr:visible');
         $packDetails.toggle($visibleRows.length > 0);
       }
 
       function filterModuleList(e) {
-        var query = $(e.target).val();
+        const query = $(e.target).val();
         // Case insensitive expression to find query at the beginning of a word.
-        var re = new RegExp('\\b' + query, 'i');
+        const re = new RegExp(`\\b${query}`, 'i');
 
         function showModuleRow(index, row) {
-          var $row = $(row);
-          var $sources = $row.find('.table-filter-text-source, .module-name, .module-description');
-          var textMatch = $sources.text().search(re) !== -1;
+          const $row = $(row);
+          const $sources = $row.find('.table-filter-text-source, .module-name, .module-description');
+          const textMatch = $sources.text().search(re) !== -1;
           $row.closest('tr').toggle(textMatch);
         }
         // Search over all rows and packages.
@@ -65,8 +62,8 @@
           Drupal.announce(
             Drupal.t(
               '!modules modules are available in the modified list.',
-              {'!modules': $rowsAndDetails.find('tbody tr:visible').length}
-            )
+              { '!modules': $rowsAndDetails.find('tbody tr:visible').length },
+            ),
           );
         }
         else if (searching) {
@@ -94,10 +91,9 @@
 
         $input.on({
           keyup: debounce(filterModuleList, 200),
-          keydown: preventEnterKey
+          keydown: preventEnterKey,
         });
       }
-    }
+    },
   };
-
 }(jQuery, Drupal, Drupal.debounce));
diff --git a/core/modules/system/tests/modules/js_webassert_test/js/js_webassert_test.wait_for_ajax_request.es6.js b/core/modules/system/tests/modules/js_webassert_test/js/js_webassert_test.wait_for_ajax_request.es6.js
index 3fa82d98bc..d2e1fea2ce 100644
--- a/core/modules/system/tests/modules/js_webassert_test/js/js_webassert_test.wait_for_ajax_request.es6.js
+++ b/core/modules/system/tests/modules/js_webassert_test/js/js_webassert_test.wait_for_ajax_request.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * @type {Drupal~behavior}
    *
@@ -14,9 +11,8 @@
    *   Makes changes in the DOM to be able to test the completion of AJAX in assertWaitOnAjaxRequest.
    */
   Drupal.behaviors.js_webassert_test_wait_for_ajax_request = {
-    attach: function (context) {
+    attach(context) {
       $('input[name="test_assert_wait_on_ajax_input"]').val('js_webassert_test');
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/system/tests/modules/js_webassert_test/js/js_webassert_test.wait_for_element.es6.js b/core/modules/system/tests/modules/js_webassert_test/js/js_webassert_test.wait_for_element.es6.js
index e11067b24c..10d911b9a4 100644
--- a/core/modules/system/tests/modules/js_webassert_test/js/js_webassert_test.wait_for_element.es6.js
+++ b/core/modules/system/tests/modules/js_webassert_test/js/js_webassert_test.wait_for_element.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * @type {Drupal~behavior}
    *
@@ -14,9 +11,8 @@
    *   Makes changes in the DOM to be able to test the completion of AJAX in assertWaitOnAjaxRequest.
    */
   Drupal.behaviors.js_webassert_test_wait_for_element = {
-    attach: function (context) {
+    attach(context) {
       $('#js_webassert_test_element_invisible').show();
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/taxonomy/taxonomy.es6.js b/core/modules/taxonomy/taxonomy.es6.js
index 99338d5a8e..ad59729082 100644
--- a/core/modules/taxonomy/taxonomy.es6.js
+++ b/core/modules/taxonomy/taxonomy.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Move a block in the blocks table from one region to another.
    *
@@ -19,13 +16,13 @@
    *   Attaches the drag behavior to a applicable table element.
    */
   Drupal.behaviors.termDrag = {
-    attach: function (context, settings) {
-      var backStep = settings.taxonomy.backStep;
-      var forwardStep = settings.taxonomy.forwardStep;
+    attach(context, settings) {
+      const backStep = settings.taxonomy.backStep;
+      const forwardStep = settings.taxonomy.forwardStep;
       // Get the blocks tableDrag object.
-      var tableDrag = Drupal.tableDrag.taxonomy;
-      var $table = $('#taxonomy');
-      var rows = $table.find('tr').length;
+      const tableDrag = Drupal.tableDrag.taxonomy;
+      const $table = $('#taxonomy');
+      const rows = $table.find('tr').length;
 
       // When a row is swapped, keep previous and next page classes set.
       tableDrag.row.prototype.onSwap = function (swappedRow) {
@@ -33,9 +30,9 @@
         $table.find('tr.taxonomy-term-divider-top').removeClass('taxonomy-term-divider-top');
         $table.find('tr.taxonomy-term-divider-bottom').removeClass('taxonomy-term-divider-bottom');
 
-        var tableBody = $table[0].tBodies[0];
+        const tableBody = $table[0].tBodies[0];
         if (backStep) {
-          for (var n = 0; n < backStep; n++) {
+          for (let n = 0; n < backStep; n++) {
             $(tableBody.rows[n]).addClass('taxonomy-term-preview');
           }
           $(tableBody.rows[backStep - 1]).addClass('taxonomy-term-divider-top');
@@ -43,14 +40,13 @@
         }
 
         if (forwardStep) {
-          for (var k = rows - forwardStep - 1; k < rows - 1; k++) {
+          for (let k = rows - forwardStep - 1; k < rows - 1; k++) {
             $(tableBody.rows[k]).addClass('taxonomy-term-preview');
           }
           $(tableBody.rows[rows - forwardStep - 2]).addClass('taxonomy-term-divider-top');
           $(tableBody.rows[rows - forwardStep - 1]).addClass('taxonomy-term-divider-bottom');
         }
       };
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/text/text.es6.js b/core/modules/text/text.es6.js
index ad89bd8ad1..6c11adae1b 100644
--- a/core/modules/text/text.es6.js
+++ b/core/modules/text/text.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Auto-hide summary textarea if empty and show hide and unhide links.
    *
@@ -16,14 +13,14 @@
    *   Attaches auto-hide behavior on `text-summary` events.
    */
   Drupal.behaviors.textSummary = {
-    attach: function (context, settings) {
+    attach(context, settings) {
       $(context).find('.js-text-summary').once('text-summary').each(function () {
-        var $widget = $(this).closest('.js-text-format-wrapper');
+        const $widget = $(this).closest('.js-text-format-wrapper');
 
-        var $summary = $widget.find('.js-text-summary-wrapper');
-        var $summaryLabel = $summary.find('label').eq(0);
-        var $full = $widget.find('.js-text-full').closest('.js-form-item');
-        var $fullLabel = $full.find('label').eq(0);
+        const $summary = $widget.find('.js-text-summary-wrapper');
+        const $summaryLabel = $summary.find('label').eq(0);
+        const $full = $widget.find('.js-text-full').closest('.js-form-item');
+        let $fullLabel = $full.find('label').eq(0);
 
         // Create a placeholder label when the field cardinality is greater
         // than 1.
@@ -32,10 +29,10 @@
         }
 
         // Set up the edit/hide summary link.
-        var $link = $('<span class="field-edit-link"> (<button type="button" class="link link-edit-summary">' + Drupal.t('Hide summary') + '</button>)</span>');
-        var $button = $link.find('button');
-        var toggleClick = true;
-        $link.on('click', function (e) {
+        const $link = $(`<span class="field-edit-link"> (<button type="button" class="link link-edit-summary">${Drupal.t('Hide summary')}</button>)</span>`);
+        const $button = $link.find('button');
+        let toggleClick = true;
+        $link.on('click', (e) => {
           if (toggleClick) {
             $summary.hide();
             $button.html(Drupal.t('Edit summary'));
@@ -55,7 +52,6 @@
           $link.trigger('click');
         }
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/toolbar/js/escapeAdmin.es6.js b/core/modules/toolbar/js/escapeAdmin.es6.js
index 6e8f992fd4..f008de8512 100644
--- a/core/modules/toolbar/js/escapeAdmin.es6.js
+++ b/core/modules/toolbar/js/escapeAdmin.es6.js
@@ -4,12 +4,9 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
-  var pathInfo = drupalSettings.path;
-  var escapeAdminPath = sessionStorage.getItem('escapeAdminPath');
-  var windowLocation = window.location;
+  const pathInfo = drupalSettings.path;
+  const escapeAdminPath = sessionStorage.getItem('escapeAdminPath');
+  const windowLocation = window.location;
 
   // Saves the last non-administrative page in the browser to be able to link
   // back to it when browsing administrative pages. If there is a destination
@@ -31,8 +28,8 @@
    *   Attaches the replacement functionality to the toolbar-escape-admin element.
    */
   Drupal.behaviors.escapeAdmin = {
-    attach: function () {
-      var $toolbarEscape = $('[data-toolbar-escape-admin]').once('escapeAdmin');
+    attach() {
+      const $toolbarEscape = $('[data-toolbar-escape-admin]').once('escapeAdmin');
       if ($toolbarEscape.length && pathInfo.currentPathIsAdmin) {
         if (escapeAdminPath !== null) {
           $toolbarEscape.attr('href', escapeAdminPath);
@@ -42,7 +39,6 @@
         }
         $toolbarEscape.closest('.toolbar-tab').removeClass('hidden');
       }
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/toolbar/js/models/MenuModel.es6.js b/core/modules/toolbar/js/models/MenuModel.es6.js
index 072a4f1415..a7898b401a 100644
--- a/core/modules/toolbar/js/models/MenuModel.es6.js
+++ b/core/modules/toolbar/js/models/MenuModel.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Backbone, Drupal) {
-
-  'use strict';
-
   /**
    * Backbone Model for collapsible menus.
    *
@@ -26,8 +23,7 @@
       /**
        * @type {object}
        */
-      subtrees: {}
-    }
+      subtrees: {},
+    },
   });
-
 }(Backbone, Drupal));
diff --git a/core/modules/toolbar/js/models/ToolbarModel.es6.js b/core/modules/toolbar/js/models/ToolbarModel.es6.js
index 537601d8f7..9d0619b2b5 100644
--- a/core/modules/toolbar/js/models/ToolbarModel.es6.js
+++ b/core/modules/toolbar/js/models/ToolbarModel.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Backbone, Drupal) {
-
-  'use strict';
-
   /**
    * Backbone model for the toolbar.
    *
@@ -130,8 +127,8 @@
         top: 0,
         right: 0,
         bottom: 0,
-        left: 0
-      }
+        left: 0,
+      },
     },
 
     /**
@@ -145,13 +142,12 @@
      * @return {string|undefined}
      *   Returns an error message if validation failed.
      */
-    validate: function (attributes, options) {
+    validate(attributes, options) {
       // Prevent the orientation being set to horizontal if it is locked, unless
       // override has not been passed as an option.
       if (attributes.orientation === 'horizontal' && this.get('locked') && !options.override) {
         return Drupal.t('The toolbar cannot be set to a horizontal orientation when it is locked.');
       }
-    }
+    },
   });
-
 }(Backbone, Drupal));
diff --git a/core/modules/toolbar/js/toolbar.es6.js b/core/modules/toolbar/js/toolbar.es6.js
index 8accad9754..022d82eca2 100644
--- a/core/modules/toolbar/js/toolbar.es6.js
+++ b/core/modules/toolbar/js/toolbar.es6.js
@@ -4,26 +4,23 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   // Merge run-time settings with the defaults.
-  var options = $.extend(
+  const options = $.extend(
     {
       breakpoints: {
         'toolbar.narrow': '',
         'toolbar.standard': '',
-        'toolbar.wide': ''
-      }
+        'toolbar.wide': '',
+      },
     },
     drupalSettings.toolbar,
     // Merge strings on top of drupalSettings so that they are not mutable.
     {
       strings: {
         horizontal: Drupal.t('Horizontal orientation'),
-        vertical: Drupal.t('Vertical orientation')
-      }
-    }
+        vertical: Drupal.t('Vertical orientation'),
+      },
+    },
   );
 
   /**
@@ -40,7 +37,7 @@
    *   Attaches the toolbar rendering functionality to the toolbar element.
    */
   Drupal.behaviors.toolbar = {
-    attach: function (context) {
+    attach(context) {
       // Verify that the user agent understands media queries. Complex admin
       // toolbar layouts require media query support.
       if (!window.matchMedia('only screen').matches) {
@@ -48,51 +45,50 @@
       }
       // Process the administrative toolbar.
       $(context).find('#toolbar-administration').once('toolbar').each(function () {
-
         // Establish the toolbar models and views.
-        var model = Drupal.toolbar.models.toolbarModel = new Drupal.toolbar.ToolbarModel({
+        const model = Drupal.toolbar.models.toolbarModel = new Drupal.toolbar.ToolbarModel({
           locked: JSON.parse(localStorage.getItem('Drupal.toolbar.trayVerticalLocked')) || false,
-          activeTab: document.getElementById(JSON.parse(localStorage.getItem('Drupal.toolbar.activeTabID')))
+          activeTab: document.getElementById(JSON.parse(localStorage.getItem('Drupal.toolbar.activeTabID'))),
         });
         Drupal.toolbar.views.toolbarVisualView = new Drupal.toolbar.ToolbarVisualView({
           el: this,
-          model: model,
-          strings: options.strings
+          model,
+          strings: options.strings,
         });
         Drupal.toolbar.views.toolbarAuralView = new Drupal.toolbar.ToolbarAuralView({
           el: this,
-          model: model,
-          strings: options.strings
+          model,
+          strings: options.strings,
         });
         Drupal.toolbar.views.bodyVisualView = new Drupal.toolbar.BodyVisualView({
           el: this,
-          model: model
+          model,
         });
 
         // Render collapsible menus.
-        var menuModel = Drupal.toolbar.models.menuModel = new Drupal.toolbar.MenuModel();
+        const menuModel = Drupal.toolbar.models.menuModel = new Drupal.toolbar.MenuModel();
         Drupal.toolbar.views.menuVisualView = new Drupal.toolbar.MenuVisualView({
           el: $(this).find('.toolbar-menu-administration').get(0),
           model: menuModel,
-          strings: options.strings
+          strings: options.strings,
         });
 
         // Handle the resolution of Drupal.toolbar.setSubtrees.
         // This is handled with a deferred so that the function may be invoked
         // asynchronously.
-        Drupal.toolbar.setSubtrees.done(function (subtrees) {
+        Drupal.toolbar.setSubtrees.done((subtrees) => {
           menuModel.set('subtrees', subtrees);
-          var theme = drupalSettings.ajaxPageState.theme;
-          localStorage.setItem('Drupal.toolbar.subtrees.' + theme, JSON.stringify(subtrees));
+          const theme = drupalSettings.ajaxPageState.theme;
+          localStorage.setItem(`Drupal.toolbar.subtrees.${theme}`, JSON.stringify(subtrees));
           // Indicate on the toolbarModel that subtrees are now loaded.
           model.set('areSubtreesLoaded', true);
         });
 
         // Attach a listener to the configured media query breakpoints.
-        for (var label in options.breakpoints) {
+        for (const label in options.breakpoints) {
           if (options.breakpoints.hasOwnProperty(label)) {
-            var mq = options.breakpoints[label];
-            var mql = Drupal.toolbar.mql[label] = window.matchMedia(mq);
+            const mq = options.breakpoints[label];
+            const mql = Drupal.toolbar.mql[label] = window.matchMedia(mq);
             // Curry the model and the label of the media query breakpoint to
             // the mediaQueryChangeHandler function.
             mql.addListener(Drupal.toolbar.mediaQueryChangeHandler.bind(null, model, label));
@@ -113,19 +109,19 @@
 
         $(document)
           // Update the model when the viewport offset changes.
-          .on('drupalViewportOffsetChange.toolbar', function (event, offsets) {
+          .on('drupalViewportOffsetChange.toolbar', (event, offsets) => {
             model.set('offsets', offsets);
           });
 
         // Broadcast model changes to other modules.
         model
-          .on('change:orientation', function (model, orientation) {
+          .on('change:orientation', (model, orientation) => {
             $(document).trigger('drupalToolbarOrientationChange', orientation);
           })
-          .on('change:activeTab', function (model, tab) {
+          .on('change:activeTab', (model, tab) => {
             $(document).trigger('drupalToolbarTabChange', tab);
           })
-          .on('change:activeTray', function (model, tray) {
+          .on('change:activeTray', (model, tray) => {
             $(document).trigger('drupalToolbarTrayChange', tray);
           });
 
@@ -134,11 +130,11 @@
         // not the first 'Home' toolbar tab).
         if (Drupal.toolbar.models.toolbarModel.get('orientation') === 'horizontal' && Drupal.toolbar.models.toolbarModel.get('activeTab') === null) {
           Drupal.toolbar.models.toolbarModel.set({
-            activeTab: $('.toolbar-bar .toolbar-tab:not(.home-toolbar-tab) a').get(0)
+            activeTab: $('.toolbar-bar .toolbar-tab:not(.home-toolbar-tab) a').get(0),
           });
         }
       });
-    }
+    },
   };
 
   /**
@@ -190,42 +186,42 @@
      * @param {object} mql
      *   A MediaQueryList object.
      */
-    mediaQueryChangeHandler: function (model, label, mql) {
+    mediaQueryChangeHandler(model, label, mql) {
       switch (label) {
         case 'toolbar.narrow':
           model.set({
             isOriented: mql.matches,
-            isTrayToggleVisible: false
+            isTrayToggleVisible: false,
           });
           // If the toolbar doesn't have an explicit orientation yet, or if the
           // narrow media query doesn't match then set the orientation to
           // vertical.
           if (!mql.matches || !model.get('orientation')) {
-            model.set({orientation: 'vertical'}, {validate: true});
+            model.set({ orientation: 'vertical' }, { validate: true });
           }
           break;
 
         case 'toolbar.standard':
           model.set({
-            isFixed: mql.matches
+            isFixed: mql.matches,
           });
           break;
 
         case 'toolbar.wide':
           model.set({
-            orientation: ((mql.matches) ? 'horizontal' : 'vertical')
-          }, {validate: true});
+            orientation: ((mql.matches) ? 'horizontal' : 'vertical'),
+          }, { validate: true });
           // The tray orientation toggle visibility does not need to be
           // validated.
           model.set({
-            isTrayToggleVisible: mql.matches
+            isTrayToggleVisible: mql.matches,
           });
           break;
 
         default:
           break;
       }
-    }
+    },
   };
 
   /**
@@ -253,5 +249,4 @@
   Drupal.AjaxCommands.prototype.setToolbarSubtrees = function (ajax, response, status) {
     Drupal.toolbar.setSubtrees.resolve(response.subtrees);
   };
-
 }(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/toolbar/js/toolbar.menu.es6.js b/core/modules/toolbar/js/toolbar.menu.es6.js
index 0ca25a9b05..03fd41f371 100644
--- a/core/modules/toolbar/js/toolbar.menu.es6.js
+++ b/core/modules/toolbar/js/toolbar.menu.es6.js
@@ -9,19 +9,15 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Store the open menu tray.
    */
-  var activeItem = Drupal.url(drupalSettings.path.currentPath);
+  let activeItem = Drupal.url(drupalSettings.path.currentPath);
 
   $.fn.drupalToolbarMenu = function () {
-
-    var ui = {
+    const ui = {
       handleOpen: Drupal.t('Extend'),
-      handleClose: Drupal.t('Collapse')
+      handleClose: Drupal.t('Collapse'),
     };
 
     /**
@@ -31,12 +27,12 @@
      *   A jQuery Event object.
      */
     function toggleClickHandler(event) {
-      var $toggle = $(event.target);
-      var $item = $toggle.closest('li');
+      const $toggle = $(event.target);
+      const $item = $toggle.closest('li');
       // Toggle the list item.
       toggleList($item);
       // Close open sibling menus.
-      var $openItems = $item.siblings().filter('.open');
+      const $openItems = $item.siblings().filter('.open');
       toggleList($openItems, false);
     }
 
@@ -71,7 +67,7 @@
      *   simply toggling its presence.
      */
     function toggleList($item, switcher) {
-      var $toggle = $item.children('.toolbar-box').children('.toolbar-handle');
+      const $toggle = $item.children('.toolbar-box').children('.toolbar-handle');
       switcher = (typeof switcher !== 'undefined') ? switcher : !$item.hasClass('open');
       // Toggle the item open state.
       $item.toggleClass('open', switcher);
@@ -96,19 +92,19 @@
      *   The root of the menu to be initialized.
      */
     function initItems($menu) {
-      var options = {
+      const options = {
         class: 'toolbar-icon toolbar-handle',
         action: ui.handleOpen,
-        text: ''
+        text: '',
       };
       // Initialize items and their links.
       $menu.find('li > a').wrap('<div class="toolbar-box">');
       // Add a handle to each list item if it has a menu.
-      $menu.find('li').each(function (index, element) {
-        var $item = $(element);
+      $menu.find('li').each((index, element) => {
+        const $item = $(element);
         if ($item.children('ul.toolbar-menu').length) {
-          var $box = $item.children('.toolbar-box');
-          options.text = Drupal.t('@label', {'@label': $box.find('a').text()});
+          const $box = $item.children('.toolbar-box');
+          options.text = Drupal.t('@label', { '@label': $box.find('a').text() });
           $item.children('.toolbar-box')
             .append(Drupal.theme('toolbarMenuItemToggle', options));
         }
@@ -129,7 +125,7 @@
      */
     function markListLevels($lists, level) {
       level = (!level) ? 1 : level;
-      var $lis = $lists.children('li').addClass('level-' + level);
+      const $lis = $lists.children('li').addClass(`level-${level}`);
       $lists = $lis.children('ul');
       if ($lists.length) {
         markListLevels($lists, level + 1);
@@ -146,20 +142,20 @@
      *   The root of the menu.
      */
     function openActiveItem($menu) {
-      var pathItem = $menu.find('a[href="' + location.pathname + '"]');
+      const pathItem = $menu.find(`a[href="${location.pathname}"]`);
       if (pathItem.length && !activeItem) {
         activeItem = location.pathname;
       }
       if (activeItem) {
-        var $activeItem = $menu.find('a[href="' + activeItem + '"]').addClass('menu-item--active');
-        var $activeTrail = $activeItem.parentsUntil('.root', 'li').addClass('menu-item--active-trail');
+        const $activeItem = $menu.find(`a[href="${activeItem}"]`).addClass('menu-item--active');
+        const $activeTrail = $activeItem.parentsUntil('.root', 'li').addClass('menu-item--active-trail');
         toggleList($activeTrail, true);
       }
     }
 
     // Return the jQuery object.
     return this.each(function (selector) {
-      var $menu = $(this).once('toolbar-menu');
+      const $menu = $(this).once('toolbar-menu');
       if ($menu.length) {
         // Bind event handlers.
         $menu
@@ -191,7 +187,6 @@
    *   A string representing a DOM fragment.
    */
   Drupal.theme.toolbarMenuItemToggle = function (options) {
-    return '<button class="' + options['class'] + '"><span class="action">' + options.action + '</span><span class="label">' + options.text + '</span></button>';
+    return `<button class="${options.class}"><span class="action">${options.action}</span><span class="label">${options.text}</span></button>`;
   };
-
 }(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/toolbar/js/views/BodyVisualView.es6.js b/core/modules/toolbar/js/views/BodyVisualView.es6.js
index 64593c9cf9..e61ff1a4ec 100644
--- a/core/modules/toolbar/js/views/BodyVisualView.es6.js
+++ b/core/modules/toolbar/js/views/BodyVisualView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, Backbone) {
-
-  'use strict';
-
   Drupal.toolbar.BodyVisualView = Backbone.View.extend(/** @lends Drupal.toolbar.BodyVisualView# */{
 
     /**
@@ -16,18 +13,18 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
+    initialize() {
       this.listenTo(this.model, 'change:orientation change:offsets change:activeTray change:isOriented change:isFixed change:isViewportOverflowConstrained', this.render);
     },
 
     /**
      * @inheritdoc
      */
-    render: function () {
-      var $body = $('body');
-      var orientation = this.model.get('orientation');
-      var isOriented = this.model.get('isOriented');
-      var isViewportOverflowConstrained = this.model.get('isViewportOverflowConstrained');
+    render() {
+      const $body = $('body');
+      const orientation = this.model.get('orientation');
+      const isOriented = this.model.get('isOriented');
+      const isViewportOverflowConstrained = this.model.get('isViewportOverflowConstrained');
 
       $body
         // We are using JavaScript to control media-query handling for two
@@ -47,7 +44,6 @@
         // Apply padding to the top of the body to offset the placement of the
         // toolbar bar element.
         .css('padding-top', this.model.get('offsets').top);
-    }
+    },
   });
-
 }(jQuery, Drupal, Backbone));
diff --git a/core/modules/toolbar/js/views/MenuVisualView.es6.js b/core/modules/toolbar/js/views/MenuVisualView.es6.js
index 92dea215bf..e956112aaf 100644
--- a/core/modules/toolbar/js/views/MenuVisualView.es6.js
+++ b/core/modules/toolbar/js/views/MenuVisualView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Backbone, Drupal) {
-
-  'use strict';
-
   Drupal.toolbar.MenuVisualView = Backbone.View.extend(/** @lends Drupal.toolbar.MenuVisualView# */{
 
     /**
@@ -16,20 +13,20 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
+    initialize() {
       this.listenTo(this.model, 'change:subtrees', this.render);
     },
 
     /**
      * @inheritdoc
      */
-    render: function () {
-      var subtrees = this.model.get('subtrees');
+    render() {
+      const subtrees = this.model.get('subtrees');
       // Add subtrees.
-      for (var id in subtrees) {
+      for (const id in subtrees) {
         if (subtrees.hasOwnProperty(id)) {
           this.$el
-            .find('#toolbar-link-' + id)
+            .find(`#toolbar-link-${id}`)
             .once('toolbar-subtrees')
             .after(subtrees[id]);
         }
@@ -40,7 +37,6 @@
           .children('.toolbar-menu')
           .drupalToolbarMenu();
       }
-    }
+    },
   });
-
 }(jQuery, Backbone, Drupal));
diff --git a/core/modules/toolbar/js/views/ToolbarAuralView.es6.js b/core/modules/toolbar/js/views/ToolbarAuralView.es6.js
index 3cc9adaf4c..e1e8986d6c 100644
--- a/core/modules/toolbar/js/views/ToolbarAuralView.es6.js
+++ b/core/modules/toolbar/js/views/ToolbarAuralView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function (Backbone, Drupal) {
-
-  'use strict';
-
   Drupal.toolbar.ToolbarAuralView = Backbone.View.extend(/** @lends Drupal.toolbar.ToolbarAuralView# */{
 
     /**
@@ -21,7 +18,7 @@
      * @param {object} options.strings
      *   Various strings to use in the view.
      */
-    initialize: function (options) {
+    initialize(options) {
       this.strings = options.strings;
 
       this.listenTo(this.model, 'change:orientation', this.onOrientationChange);
@@ -36,9 +33,9 @@
      * @param {string} orientation
      *   The new value of the orientation attribute in the model.
      */
-    onOrientationChange: function (model, orientation) {
+    onOrientationChange(model, orientation) {
       Drupal.announce(Drupal.t('Tray orientation changed to @orientation.', {
-        '@orientation': orientation
+        '@orientation': orientation,
       }));
     },
 
@@ -50,21 +47,20 @@
      * @param {HTMLElement} tray
      *   The new value of the tray attribute in the model.
      */
-    onActiveTrayChange: function (model, tray) {
-      var relevantTray = (tray === null) ? model.previous('activeTray') : tray;
-      var action = (tray === null) ? Drupal.t('closed') : Drupal.t('opened');
-      var trayNameElement = relevantTray.querySelector('.toolbar-tray-name');
-      var text;
+    onActiveTrayChange(model, tray) {
+      const relevantTray = (tray === null) ? model.previous('activeTray') : tray;
+      const action = (tray === null) ? Drupal.t('closed') : Drupal.t('opened');
+      const trayNameElement = relevantTray.querySelector('.toolbar-tray-name');
+      let text;
       if (trayNameElement !== null) {
         text = Drupal.t('Tray "@tray" @action.', {
-          '@tray': trayNameElement.textContent, '@action': action
+          '@tray': trayNameElement.textContent, '@action': action,
         });
       }
       else {
-        text = Drupal.t('Tray @action.', {'@action': action});
+        text = Drupal.t('Tray @action.', { '@action': action });
       }
       Drupal.announce(text);
-    }
+    },
   });
-
 }(Backbone, Drupal));
diff --git a/core/modules/toolbar/js/views/ToolbarVisualView.es6.js b/core/modules/toolbar/js/views/ToolbarVisualView.es6.js
index f26c98c4d9..51945151cf 100644
--- a/core/modules/toolbar/js/views/ToolbarVisualView.es6.js
+++ b/core/modules/toolbar/js/views/ToolbarVisualView.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings, Backbone) {
-
-  'use strict';
-
   Drupal.toolbar.ToolbarVisualView = Backbone.View.extend(/** @lends Drupal.toolbar.ToolbarVisualView# */{
 
     /**
@@ -15,9 +12,9 @@
      * @return {object}
      *   A map of events.
      */
-    events: function () {
+    events() {
       // Prevents delay and simulated mouse events.
-      var touchEndToClick = function (event) {
+      const touchEndToClick = function (event) {
         event.preventDefault();
         event.target.click();
       };
@@ -26,7 +23,7 @@
         'click .toolbar-bar .toolbar-tab .trigger': 'onTabClick',
         'click .toolbar-toggle-orientation button': 'onOrientationToggleClick',
         'touchend .toolbar-bar .toolbar-tab .trigger': touchEndToClick,
-        'touchend .toolbar-toggle-orientation button': touchEndToClick
+        'touchend .toolbar-toggle-orientation button': touchEndToClick,
       };
     },
 
@@ -42,7 +39,7 @@
      * @param {object} options.strings
      *   Various strings to use in the view.
      */
-    initialize: function (options) {
+    initialize(options) {
       this.strings = options.strings;
 
       this.listenTo(this.model, 'change:activeTab change:orientation change:isOriented change:isTrayToggleVisible', this.render);
@@ -65,7 +62,7 @@
      * @return {Drupal.toolbar.ToolbarVisualView}
      *   The `ToolbarVisualView` instance.
      */
-    render: function () {
+    render() {
       this.updateTabs();
       this.updateTrayOrientation();
       this.updateBarAttributes();
@@ -87,7 +84,7 @@
       // Trigger a recalculation of viewport displacing elements. Use setTimeout
       // to ensure this recalculation happens after changes to visual elements
       // have processed.
-      window.setTimeout(function () {
+      window.setTimeout(() => {
         Drupal.displace(true);
       }, 0);
       return this;
@@ -99,12 +96,12 @@
      * @param {jQuery.Event} event
      *   The event triggered.
      */
-    onTabClick: function (event) {
+    onTabClick(event) {
       // If this tab has a tray associated with it, it is considered an
       // activatable tab.
       if (event.target.hasAttribute('data-toolbar-tray')) {
-        var activeTab = this.model.get('activeTab');
-        var clickedTab = event.target;
+        const activeTab = this.model.get('activeTab');
+        const clickedTab = event.target;
 
         // Set the event target as the active item if it is not already.
         this.model.set('activeTab', (!activeTab || clickedTab !== activeTab) ? clickedTab : null);
@@ -120,11 +117,11 @@
      * @param {jQuery.Event} event
      *   The event triggered.
      */
-    onOrientationToggleClick: function (event) {
-      var orientation = this.model.get('orientation');
+    onOrientationToggleClick(event) {
+      const orientation = this.model.get('orientation');
       // Determine the toggle-to orientation.
-      var antiOrientation = (orientation === 'vertical') ? 'horizontal' : 'vertical';
-      var locked = antiOrientation === 'vertical';
+      const antiOrientation = (orientation === 'vertical') ? 'horizontal' : 'vertical';
+      const locked = antiOrientation === 'vertical';
       // Remember the locked state.
       if (locked) {
         localStorage.setItem('Drupal.toolbar.trayVerticalLocked', 'true');
@@ -134,11 +131,11 @@
       }
       // Update the model.
       this.model.set({
-        locked: locked,
-        orientation: antiOrientation
+        locked,
+        orientation: antiOrientation,
       }, {
         validate: true,
-        override: true
+        override: true,
       });
 
       event.preventDefault();
@@ -148,8 +145,8 @@
     /**
      * Updates the display of the tabs: toggles a tab and the associated tray.
      */
-    updateTabs: function () {
-      var $tab = $(this.model.get('activeTab'));
+    updateTabs() {
+      const $tab = $(this.model.get('activeTab'));
       // Deactivate the previous tab.
       $(this.model.previous('activeTab'))
         .removeClass('is-active')
@@ -164,14 +161,14 @@
           .addClass('is-active')
           // Mark the tab as pressed.
           .prop('aria-pressed', true);
-        var name = $tab.attr('data-toolbar-tray');
+        const name = $tab.attr('data-toolbar-tray');
         // Store the active tab name or remove the setting.
-        var id = $tab.get(0).id;
+        const id = $tab.get(0).id;
         if (id) {
           localStorage.setItem('Drupal.toolbar.activeTabID', JSON.stringify(id));
         }
         // Activate the associated tray.
-        var $tray = this.$el.find('[data-toolbar-tray="' + name + '"].toolbar-tray');
+        const $tray = this.$el.find(`[data-toolbar-tray="${name}"].toolbar-tray`);
         if ($tray.length) {
           $tray.addClass('is-active');
           this.model.set('activeTray', $tray.get(0));
@@ -191,8 +188,8 @@
     /**
      * Update the attributes of the toolbar bar element.
      */
-    updateBarAttributes: function () {
-      var isOriented = this.model.get('isOriented');
+    updateBarAttributes() {
+      const isOriented = this.model.get('isOriented');
       if (isOriented) {
         this.$el.find('.toolbar-bar').attr('data-offset-top', '');
       }
@@ -207,20 +204,20 @@
     /**
      * Updates the orientation of the active tray if necessary.
      */
-    updateTrayOrientation: function () {
-      var orientation = this.model.get('orientation');
+    updateTrayOrientation() {
+      const orientation = this.model.get('orientation');
       // The antiOrientation is used to render the view of action buttons like
       // the tray orientation toggle.
-      var antiOrientation = (orientation === 'vertical') ? 'horizontal' : 'vertical';
+      const antiOrientation = (orientation === 'vertical') ? 'horizontal' : 'vertical';
       // Update the orientation of the trays.
-      var $trays = this.$el.find('.toolbar-tray')
+      const $trays = this.$el.find('.toolbar-tray')
         .removeClass('toolbar-tray-horizontal toolbar-tray-vertical')
-        .addClass('toolbar-tray-' + orientation);
+        .addClass(`toolbar-tray-${orientation}`);
 
       // Update the tray orientation toggle button.
-      var iconClass = 'toolbar-icon-toggle-' + orientation;
-      var iconAntiClass = 'toolbar-icon-toggle-' + antiOrientation;
-      var $orientationToggle = this.$el.find('.toolbar-toggle-orientation')
+      const iconClass = `toolbar-icon-toggle-${orientation}`;
+      const iconAntiClass = `toolbar-icon-toggle-${antiOrientation}`;
+      const $orientationToggle = this.$el.find('.toolbar-toggle-orientation')
         .toggle(this.model.get('isTrayToggleVisible'));
       $orientationToggle.find('button')
         .val(antiOrientation)
@@ -230,12 +227,12 @@
         .addClass(iconAntiClass);
 
       // Update data offset attributes for the trays.
-      var dir = document.documentElement.dir;
-      var edge = (dir === 'rtl') ? 'right' : 'left';
+      const dir = document.documentElement.dir;
+      const edge = (dir === 'rtl') ? 'right' : 'left';
       // Remove data-offset attributes from the trays so they can be refreshed.
       $trays.removeAttr('data-offset-left data-offset-right data-offset-top');
       // If an active vertical tray exists, mark it as an offset element.
-      $trays.filter('.toolbar-tray-vertical.is-active').attr('data-offset-' + edge, '');
+      $trays.filter('.toolbar-tray-vertical.is-active').attr(`data-offset-${edge}`, '');
       // If an active horizontal tray exists, mark it as an offset element.
       $trays.filter('.toolbar-tray-horizontal.is-active').attr('data-offset-top', '');
     },
@@ -243,8 +240,8 @@
     /**
      * Sets the tops of the trays so that they align with the bottom of the bar.
      */
-    adjustPlacement: function () {
-      var $trays = this.$el.find('.toolbar-tray');
+    adjustPlacement() {
+      const $trays = this.$el.find('.toolbar-tray');
       if (!this.model.get('isOriented')) {
         $trays.css('margin-top', 0);
         $trays.removeClass('toolbar-tray-horizontal').addClass('toolbar-tray-vertical');
@@ -266,21 +263,21 @@
      * and compared to the subtreesHash in drupalSettings to determine when the
      * admin menu subtrees cache has been invalidated.
      */
-    loadSubtrees: function () {
-      var $activeTab = $(this.model.get('activeTab'));
-      var orientation = this.model.get('orientation');
+    loadSubtrees() {
+      const $activeTab = $(this.model.get('activeTab'));
+      const orientation = this.model.get('orientation');
       // Only load and render the admin menu subtrees if:
       //   (1) They have not been loaded yet.
       //   (2) The active tab is the administration menu tab, indicated by the
       //       presence of the data-drupal-subtrees attribute.
       //   (3) The orientation of the tray is vertical.
       if (!this.model.get('areSubtreesLoaded') && typeof $activeTab.data('drupal-subtrees') !== 'undefined' && orientation === 'vertical') {
-        var subtreesHash = drupalSettings.toolbar.subtreesHash;
-        var theme = drupalSettings.ajaxPageState.theme;
-        var endpoint = Drupal.url('toolbar/subtrees/' + subtreesHash);
-        var cachedSubtreesHash = localStorage.getItem('Drupal.toolbar.subtreesHash.' + theme);
-        var cachedSubtrees = JSON.parse(localStorage.getItem('Drupal.toolbar.subtrees.' + theme));
-        var isVertical = this.model.get('orientation') === 'vertical';
+        const subtreesHash = drupalSettings.toolbar.subtreesHash;
+        const theme = drupalSettings.ajaxPageState.theme;
+        const endpoint = Drupal.url(`toolbar/subtrees/${subtreesHash}`);
+        const cachedSubtreesHash = localStorage.getItem(`Drupal.toolbar.subtreesHash.${theme}`);
+        const cachedSubtrees = JSON.parse(localStorage.getItem(`Drupal.toolbar.subtrees.${theme}`));
+        const isVertical = this.model.get('orientation') === 'vertical';
         // If we have the subtrees in localStorage and the subtree hash has not
         // changed, then use the cached data.
         if (isVertical && subtreesHash === cachedSubtreesHash && cachedSubtrees) {
@@ -290,16 +287,15 @@
         // toolbar is vertical.
         else if (isVertical) {
           // Remove the cached menu information.
-          localStorage.removeItem('Drupal.toolbar.subtreesHash.' + theme);
-          localStorage.removeItem('Drupal.toolbar.subtrees.' + theme);
+          localStorage.removeItem(`Drupal.toolbar.subtreesHash.${theme}`);
+          localStorage.removeItem(`Drupal.toolbar.subtrees.${theme}`);
           // The AJAX response's command will trigger the resolve method of the
           // Drupal.toolbar.setSubtrees Promise.
-          Drupal.ajax({url: endpoint}).execute();
+          Drupal.ajax({ url: endpoint }).execute();
           // Cache the hash for the subtrees locally.
-          localStorage.setItem('Drupal.toolbar.subtreesHash.' + theme, subtreesHash);
+          localStorage.setItem(`Drupal.toolbar.subtreesHash.${theme}`, subtreesHash);
         }
       }
-    }
+    },
   });
-
 }(jQuery, Drupal, drupalSettings, Backbone));
diff --git a/core/modules/tour/js/tour.es6.js b/core/modules/tour/js/tour.es6.js
index 2c7050f75f..f3b11072b1 100644
--- a/core/modules/tour/js/tour.es6.js
+++ b/core/modules/tour/js/tour.es6.js
@@ -4,10 +4,7 @@
  */
 
 (function ($, Backbone, Drupal, document) {
-
-  'use strict';
-
-  var queryString = decodeURI(window.location.search);
+  const queryString = decodeURI(window.location.search);
 
   /**
    * Attaches the tour's toolbar tab behavior.
@@ -27,17 +24,17 @@
    *   Attach tour functionality on `tour` events.
    */
   Drupal.behaviors.tour = {
-    attach: function (context) {
-      $('body').once('tour').each(function () {
-        var model = new Drupal.tour.models.StateModel();
+    attach(context) {
+      $('body').once('tour').each(() => {
+        const model = new Drupal.tour.models.StateModel();
         new Drupal.tour.views.ToggleTourView({
           el: $(context).find('#toolbar-tab-tour'),
-          model: model
+          model,
         });
 
         model
           // Allow other scripts to respond to tour events.
-          .on('change:isActive', function (model, isActive) {
+          .on('change:isActive', (model, isActive) => {
             $(document).trigger((isActive) ? 'drupalTourStarted' : 'drupalTourStopped');
           })
           // Initialization: check whether a tour is available on the current
@@ -49,7 +46,7 @@
           model.set('isActive', true);
         }
       });
-    }
+    },
   };
 
   /**
@@ -65,7 +62,7 @@
     /**
      * @namespace Drupal.tour.views
      */
-    views: {}
+    views: {},
   };
 
   /**
@@ -101,8 +98,8 @@
        *
        * @type {Array}
        */
-      activeTour: []
-    }
+      activeTour: [],
+    },
   });
 
   Drupal.tour.views.ToggleTourView = Backbone.View.extend(/** @lends Drupal.tour.views.ToggleTourView# */{
@@ -110,7 +107,7 @@
     /**
      * @type {object}
      */
-    events: {click: 'onClick'},
+    events: { click: 'onClick' },
 
     /**
      * Handles edit mode toggle interactions.
@@ -119,7 +116,7 @@
      *
      * @augments Backbone.View
      */
-    initialize: function () {
+    initialize() {
       this.listenTo(this.model, 'change:tour change:isActive', this.render);
       this.listenTo(this.model, 'change:isActive', this.toggleTour);
     },
@@ -130,11 +127,11 @@
      * @return {Drupal.tour.views.ToggleTourView}
      *   The `ToggleTourView` view.
      */
-    render: function () {
+    render() {
       // Render the visibility.
       this.$el.toggleClass('hidden', this._getTour().length === 0);
       // Render the state.
-      var isActive = this.model.get('isActive');
+      const isActive = this.model.get('isActive');
       this.$el.find('button')
         .toggleClass('is-active', isActive)
         .prop('aria-pressed', isActive);
@@ -144,27 +141,29 @@
     /**
      * Model change handler; starts or stops the tour.
      */
-    toggleTour: function () {
+    toggleTour() {
       if (this.model.get('isActive')) {
-        var $tour = this._getTour();
+        const $tour = this._getTour();
         this._removeIrrelevantTourItems($tour, this._getDocument());
-        var that = this;
+        const that = this;
         if ($tour.find('li').length) {
           $tour.joyride({
             autoStart: true,
-            postRideCallback: function () { that.model.set('isActive', false); },
+            postRideCallback() {
+              that.model.set('isActive', false);
+            },
             // HTML segments for tip layout.
             template: {
               link: '<a href=\"#close\" class=\"joyride-close-tip\">&times;</a>',
-              button: '<a href=\"#\" class=\"button button--primary joyride-next-tip\"></a>'
-            }
+              button: '<a href=\"#\" class=\"button button--primary joyride-next-tip\"></a>',
+            },
           });
-          this.model.set({isActive: true, activeTour: $tour});
+          this.model.set({ isActive: true, activeTour: $tour });
         }
       }
       else {
         this.model.get('activeTour').joyride('destroy');
-        this.model.set({isActive: false, activeTour: []});
+        this.model.set({ isActive: false, activeTour: [] });
       }
     },
 
@@ -174,7 +173,7 @@
      * @param {jQuery.Event} event
      *   The click event.
      */
-    onClick: function (event) {
+    onClick(event) {
       this.model.set('isActive', !this.model.get('isActive'));
       event.preventDefault();
       event.stopPropagation();
@@ -186,7 +185,7 @@
      * @return {jQuery}
      *   A jQuery element pointing to a `<ol>` containing tour items.
      */
-    _getTour: function () {
+    _getTour() {
       return this.model.get('tour');
     },
 
@@ -197,7 +196,7 @@
      *   A jQuery element pointing to the document within which a tour would be
      *   started given the current state.
      */
-    _getDocument: function () {
+    _getDocument() {
       return $(document);
     },
 
@@ -219,15 +218,15 @@
      *
      * @see Drupal.tour.views.ToggleTourView#_getDocument
      */
-    _removeIrrelevantTourItems: function ($tour, $document) {
-      var removals = false;
-      var tips = /tips=([^&]+)/.exec(queryString);
+    _removeIrrelevantTourItems($tour, $document) {
+      let removals = false;
+      const tips = /tips=([^&]+)/.exec(queryString);
       $tour
         .find('li')
         .each(function () {
-          var $this = $(this);
-          var itemId = $this.attr('data-id');
-          var itemClass = $this.attr('data-class');
+          const $this = $(this);
+          const itemId = $this.attr('data-id');
+          const itemClass = $this.attr('data-class');
           // If the query parameter 'tips' is set, remove all tips that don't
           // have the matching class.
           if (tips && !$(this).hasClass(tips[1])) {
@@ -237,8 +236,8 @@
           }
           // Remove tip from the DOM if there is no corresponding page element.
           if ((!itemId && !itemClass) ||
-            (itemId && $document.find('#' + itemId).length) ||
-            (itemClass && $document.find('.' + itemClass).length)) {
+            (itemId && $document.find(`#${itemId}`).length) ||
+            (itemClass && $document.find(`.${itemClass}`).length)) {
             return;
           }
           removals = true;
@@ -247,24 +246,23 @@
 
       // If there were removals, we'll have to do some clean-up.
       if (removals) {
-        var total = $tour.find('li').length;
+        const total = $tour.find('li').length;
         if (!total) {
-          this.model.set({tour: []});
+          this.model.set({ tour: [] });
         }
 
         $tour
           .find('li')
           // Rebuild the progress data.
           .each(function (index) {
-            var progress = Drupal.t('!tour_item of !total', {'!tour_item': index + 1, '!total': total});
+            const progress = Drupal.t('!tour_item of !total', { '!tour_item': index + 1, '!total': total });
             $(this).find('.tour-progress').text(progress);
           })
           // Update the last item to have "End tour" as the button.
           .eq(-1)
           .attr('data-text', Drupal.t('End tour'));
       }
-    }
+    },
 
   });
-
-})(jQuery, Backbone, Drupal, document);
+}(jQuery, Backbone, Drupal, document));
diff --git a/core/modules/tracker/js/tracker-history.es6.js b/core/modules/tracker/js/tracker-history.es6.js
index 877a9caec7..5df3494a9c 100644
--- a/core/modules/tracker/js/tracker-history.es6.js
+++ b/core/modules/tracker/js/tracker-history.es6.js
@@ -4,54 +4,49 @@
  * May only be loaded for authenticated users, with the History module enabled.
  */
 (function ($, Drupal, window) {
-
-  'use strict';
-
   /**
    * Render "new" and "updated" node indicators, as well as "X new" replies links.
    */
   Drupal.behaviors.trackerHistory = {
-    attach: function (context) {
+    attach(context) {
       // Find all "new" comment indicator placeholders newer than 30 days ago that
       // have not already been read after their last comment timestamp.
-      var nodeIDs = [];
-      var $nodeNewPlaceholders = $(context)
+      const nodeIDs = [];
+      const $nodeNewPlaceholders = $(context)
         .find('[data-history-node-timestamp]')
         .once('history')
         .filter(function () {
-          var nodeTimestamp = parseInt(this.getAttribute('data-history-node-timestamp'), 10);
-          var nodeID = this.getAttribute('data-history-node-id');
+          const nodeTimestamp = parseInt(this.getAttribute('data-history-node-timestamp'), 10);
+          const nodeID = this.getAttribute('data-history-node-id');
           if (Drupal.history.needsServerCheck(nodeID, nodeTimestamp)) {
             nodeIDs.push(nodeID);
             return true;
           }
-          else {
-            return false;
-          }
+
+          return false;
         });
 
       // Find all "new" comment indicator placeholders newer than 30 days ago that
       // have not already been read after their last comment timestamp.
-      var $newRepliesPlaceholders = $(context)
+      const $newRepliesPlaceholders = $(context)
         .find('[data-history-node-last-comment-timestamp]')
         .once('history')
         .filter(function () {
-          var lastCommentTimestamp = parseInt(this.getAttribute('data-history-node-last-comment-timestamp'), 10);
-          var nodeTimestamp = parseInt(this.previousSibling.previousSibling.getAttribute('data-history-node-timestamp'), 10);
+          const lastCommentTimestamp = parseInt(this.getAttribute('data-history-node-last-comment-timestamp'), 10);
+          const nodeTimestamp = parseInt(this.previousSibling.previousSibling.getAttribute('data-history-node-timestamp'), 10);
           // Discard placeholders that have zero comments.
           if (lastCommentTimestamp === nodeTimestamp) {
             return false;
           }
-          var nodeID = this.previousSibling.previousSibling.getAttribute('data-history-node-id');
+          const nodeID = this.previousSibling.previousSibling.getAttribute('data-history-node-id');
           if (Drupal.history.needsServerCheck(nodeID, lastCommentTimestamp)) {
             if (nodeIDs.indexOf(nodeID) === -1) {
               nodeIDs.push(nodeID);
             }
             return true;
           }
-          else {
-            return false;
-          }
+
+          return false;
         });
 
       if ($nodeNewPlaceholders.length === 0 && $newRepliesPlaceholders.length === 0) {
@@ -59,36 +54,36 @@
       }
 
       // Fetch the node read timestamps from the server.
-      Drupal.history.fetchTimestamps(nodeIDs, function () {
+      Drupal.history.fetchTimestamps(nodeIDs, () => {
         processNodeNewIndicators($nodeNewPlaceholders);
         processNewRepliesIndicators($newRepliesPlaceholders);
       });
-    }
+    },
   };
 
   function processNodeNewIndicators($placeholders) {
-    var newNodeString = Drupal.t('new');
-    var updatedNodeString = Drupal.t('updated');
+    const newNodeString = Drupal.t('new');
+    const updatedNodeString = Drupal.t('updated');
 
-    $placeholders.each(function (index, placeholder) {
-      var timestamp = parseInt(placeholder.getAttribute('data-history-node-timestamp'), 10);
-      var nodeID = placeholder.getAttribute('data-history-node-id');
-      var lastViewTimestamp = Drupal.history.getLastRead(nodeID);
+    $placeholders.each((index, placeholder) => {
+      const timestamp = parseInt(placeholder.getAttribute('data-history-node-timestamp'), 10);
+      const nodeID = placeholder.getAttribute('data-history-node-id');
+      const lastViewTimestamp = Drupal.history.getLastRead(nodeID);
 
       if (timestamp > lastViewTimestamp) {
-        var message = (lastViewTimestamp === 0) ? newNodeString : updatedNodeString;
-        $(placeholder).append('<span class="marker">' + message + '</span>');
+        const message = (lastViewTimestamp === 0) ? newNodeString : updatedNodeString;
+        $(placeholder).append(`<span class="marker">${message}</span>`);
       }
     });
   }
 
   function processNewRepliesIndicators($placeholders) {
     // Figure out which placeholders need the "x new" replies links.
-    var placeholdersToUpdate = {};
-    $placeholders.each(function (index, placeholder) {
-      var timestamp = parseInt(placeholder.getAttribute('data-history-node-last-comment-timestamp'), 10);
-      var nodeID = placeholder.previousSibling.previousSibling.getAttribute('data-history-node-id');
-      var lastViewTimestamp = Drupal.history.getLastRead(nodeID);
+    const placeholdersToUpdate = {};
+    $placeholders.each((index, placeholder) => {
+      const timestamp = parseInt(placeholder.getAttribute('data-history-node-last-comment-timestamp'), 10);
+      const nodeID = placeholder.previousSibling.previousSibling.getAttribute('data-history-node-id');
+      const lastViewTimestamp = Drupal.history.getLastRead(nodeID);
 
       // Queue this placeholder's "X new" replies link to be downloaded from the
       // server.
@@ -98,25 +93,24 @@
     });
 
     // Perform an AJAX request to retrieve node view timestamps.
-    var nodeIDs = Object.keys(placeholdersToUpdate);
+    const nodeIDs = Object.keys(placeholdersToUpdate);
     if (nodeIDs.length === 0) {
       return;
     }
     $.ajax({
       url: Drupal.url('comments/render_new_comments_node_links'),
       type: 'POST',
-      data: {'node_ids[]': nodeIDs},
+      data: { 'node_ids[]': nodeIDs },
       dataType: 'json',
-      success: function (results) {
-        for (var nodeID in results) {
+      success(results) {
+        for (const nodeID in results) {
           if (results.hasOwnProperty(nodeID) && placeholdersToUpdate.hasOwnProperty(nodeID)) {
-            var url = results[nodeID].first_new_comment_link;
-            var text = Drupal.formatPlural(results[nodeID].new_comment_count, '1 new', '@count new');
-            $(placeholdersToUpdate[nodeID]).append('<br /><a href="' + url + '">' + text + '</a>');
+            const url = results[nodeID].first_new_comment_link;
+            const text = Drupal.formatPlural(results[nodeID].new_comment_count, '1 new', '@count new');
+            $(placeholdersToUpdate[nodeID]).append(`<br /><a href="${url}">${text}</a>`);
           }
         }
-      }
+      },
     });
   }
-
-})(jQuery, Drupal, window);
+}(jQuery, Drupal, window));
diff --git a/core/modules/user/user.es6.js b/core/modules/user/user.es6.js
index f4602c6760..74cab06f14 100644
--- a/core/modules/user/user.es6.js
+++ b/core/modules/user/user.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Attach handlers to evaluate the strength of any password fields and to
    * check that its confirmation is correct.
@@ -18,15 +15,15 @@
    *   password fields.
    */
   Drupal.behaviors.password = {
-    attach: function (context, settings) {
-      var $passwordInput = $(context).find('input.js-password-field').once('password');
+    attach(context, settings) {
+      const $passwordInput = $(context).find('input.js-password-field').once('password');
 
       if ($passwordInput.length) {
-        var translate = settings.password;
+        const translate = settings.password;
 
-        var $passwordInputParent = $passwordInput.parent();
-        var $passwordInputParentWrapper = $passwordInputParent.parent();
-        var $passwordSuggestions;
+        const $passwordInputParent = $passwordInput.parent();
+        const $passwordInputParentWrapper = $passwordInputParent.parent();
+        let $passwordSuggestions;
 
         // Add identifying class to password element parent.
         $passwordInputParent.addClass('password-parent');
@@ -35,36 +32,36 @@
         $passwordInputParentWrapper
           .find('input.js-password-confirm')
           .parent()
-          .append('<div aria-live="polite" aria-atomic="true" class="password-confirm js-password-confirm">' + translate.confirmTitle + ' <span></span></div>')
+          .append(`<div aria-live="polite" aria-atomic="true" class="password-confirm js-password-confirm">${translate.confirmTitle} <span></span></div>`)
           .addClass('confirm-parent');
 
-        var $confirmInput = $passwordInputParentWrapper.find('input.js-password-confirm');
-        var $confirmResult = $passwordInputParentWrapper.find('div.js-password-confirm');
-        var $confirmChild = $confirmResult.find('span');
+        const $confirmInput = $passwordInputParentWrapper.find('input.js-password-confirm');
+        const $confirmResult = $passwordInputParentWrapper.find('div.js-password-confirm');
+        const $confirmChild = $confirmResult.find('span');
 
         // If the password strength indicator is enabled, add its markup.
         if (settings.password.showStrengthIndicator) {
-          var passwordMeter = '<div class="password-strength"><div class="password-strength__meter"><div class="password-strength__indicator js-password-strength__indicator"></div></div><div aria-live="polite" aria-atomic="true" class="password-strength__title">' + translate.strengthTitle + ' <span class="password-strength__text js-password-strength__text"></span></div></div>';
+          const passwordMeter = `<div class="password-strength"><div class="password-strength__meter"><div class="password-strength__indicator js-password-strength__indicator"></div></div><div aria-live="polite" aria-atomic="true" class="password-strength__title">${translate.strengthTitle} <span class="password-strength__text js-password-strength__text"></span></div></div>`;
           $confirmInput.parent().after('<div class="password-suggestions description"></div>');
           $passwordInputParent.append(passwordMeter);
           $passwordSuggestions = $passwordInputParentWrapper.find('div.password-suggestions').hide();
         }
 
         // Check that password and confirmation inputs match.
-        var passwordCheckMatch = function (confirmInputVal) {
-          var success = $passwordInput.val() === confirmInputVal;
-          var confirmClass = success ? 'ok' : 'error';
+        const passwordCheckMatch = function (confirmInputVal) {
+          const success = $passwordInput.val() === confirmInputVal;
+          const confirmClass = success ? 'ok' : 'error';
 
           // Fill in the success message and set the class accordingly.
-          $confirmChild.html(translate['confirm' + (success ? 'Success' : 'Failure')])
+          $confirmChild.html(translate[`confirm${success ? 'Success' : 'Failure'}`])
             .removeClass('ok error').addClass(confirmClass);
         };
 
         // Check the password strength.
-        var passwordCheck = function () {
+        const passwordCheck = function () {
           if (settings.password.showStrengthIndicator) {
             // Evaluate the password strength.
-            var result = Drupal.evaluatePasswordStrength($passwordInput.val(), settings.password);
+            const result = Drupal.evaluatePasswordStrength($passwordInput.val(), settings.password);
 
             // Update the suggestions for how to improve the password.
             if ($passwordSuggestions.html() !== result.message) {
@@ -77,7 +74,7 @@
 
             // Adjust the length of the strength indicator.
             $passwordInputParent.find('.js-password-strength__indicator')
-              .css('width', result.strength + '%')
+              .css('width', `${result.strength}%`)
               .removeClass('is-weak is-fair is-good is-strong')
               .addClass(result.indicatorClass);
 
@@ -88,10 +85,10 @@
           // Check the value in the confirm input and show results.
           if ($confirmInput.val()) {
             passwordCheckMatch($confirmInput.val());
-            $confirmResult.css({visibility: 'visible'});
+            $confirmResult.css({ visibility: 'visible' });
           }
           else {
-            $confirmResult.css({visibility: 'hidden'});
+            $confirmResult.css({ visibility: 'hidden' });
           }
         };
 
@@ -99,7 +96,7 @@
         $passwordInput.on('input', passwordCheck);
         $confirmInput.on('input', passwordCheck);
       }
-    }
+    },
   };
 
   /**
@@ -117,21 +114,21 @@
    */
   Drupal.evaluatePasswordStrength = function (password, translate) {
     password = password.trim();
-    var indicatorText;
-    var indicatorClass;
-    var weaknesses = 0;
-    var strength = 100;
-    var msg = [];
+    let indicatorText;
+    let indicatorClass;
+    let weaknesses = 0;
+    let strength = 100;
+    let msg = [];
 
-    var hasLowercase = /[a-z]/.test(password);
-    var hasUppercase = /[A-Z]/.test(password);
-    var hasNumbers = /[0-9]/.test(password);
-    var hasPunctuation = /[^a-zA-Z0-9]/.test(password);
+    const hasLowercase = /[a-z]/.test(password);
+    const hasUppercase = /[A-Z]/.test(password);
+    const hasNumbers = /[0-9]/.test(password);
+    const hasPunctuation = /[^a-zA-Z0-9]/.test(password);
 
     // If there is a username edit box on the page, compare password to that,
     // otherwise use value from the database.
-    var $usernameBox = $('input.username');
-    var username = ($usernameBox.length > 0) ? $usernameBox.val() : translate.username;
+    const $usernameBox = $('input.username');
+    const username = ($usernameBox.length > 0) ? $usernameBox.val() : translate.username;
 
     // Lose 5 points for every character less than 12, plus a 30 point penalty.
     if (password.length < 12) {
@@ -203,15 +200,13 @@
     }
 
     // Assemble the final message.
-    msg = translate.hasWeaknesses + '<ul><li>' + msg.join('</li><li>') + '</li></ul>';
+    msg = `${translate.hasWeaknesses}<ul><li>${msg.join('</li><li>')}</li></ul>`;
 
     return {
-      strength: strength,
+      strength,
       message: msg,
-      indicatorText: indicatorText,
-      indicatorClass: indicatorClass
+      indicatorText,
+      indicatorClass,
     };
-
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/user/user.permissions.es6.js b/core/modules/user/user.permissions.es6.js
index c3dc24f1f0..7aa79bbfa6 100644
--- a/core/modules/user/user.permissions.es6.js
+++ b/core/modules/user/user.permissions.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Shows checked and disabled checkboxes for inherited permissions.
    *
@@ -16,17 +13,17 @@
    *   Attaches functionality to the permissions table.
    */
   Drupal.behaviors.permissions = {
-    attach: function (context) {
-      var self = this;
+    attach(context) {
+      const self = this;
       $('table#permissions').once('permissions').each(function () {
         // On a site with many roles and permissions, this behavior initially
         // has to perform thousands of DOM manipulations to inject checkboxes
         // and hide them. By detaching the table from the DOM, all operations
         // can be performed without triggering internal layout and re-rendering
         // processes in the browser.
-        var $table = $(this);
-        var $ancestor;
-        var method;
+        const $table = $(this);
+        let $ancestor;
+        let method;
         if ($table.prev().length) {
           $ancestor = $table.prev();
           method = 'after';
@@ -42,7 +39,7 @@
         // submitted form. If we'd automatically check existing checkboxes, the
         // permission table would be polluted with redundant entries. This
         // is deliberate, but desirable when we automatically check them.
-        var $dummy = $('<input type="checkbox" class="dummy-checkbox js-dummy-checkbox" disabled="disabled" checked="checked" />')
+        const $dummy = $('<input type="checkbox" class="dummy-checkbox js-dummy-checkbox" disabled="disabled" checked="checked" />')
           .attr('title', Drupal.t('This permission is inherited from the authenticated user role.'))
           .hide();
 
@@ -70,9 +67,9 @@
      * If the "authenticated user" checkbox is checked, the checked and disabled
      * checkboxes are shown, the real checkboxes otherwise.
      */
-    toggle: function () {
-      var authCheckbox = this;
-      var $row = $(this).closest('tr');
+    toggle() {
+      const authCheckbox = this;
+      const $row = $(this).closest('tr');
       // jQuery performs too many layout calculations for .hide() and .show(),
       // leading to a major page rendering lag on sites with many roles and
       // permissions. Therefore, we toggle visibility directly.
@@ -82,7 +79,6 @@
       $row.find('.js-dummy-checkbox').each(function () {
         this.style.display = (authCheckbox.checked ? '' : 'none');
       });
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/modules/views/js/ajax_view.es6.js b/core/modules/views/js/ajax_view.es6.js
index 85975b56ce..df2c4da639 100644
--- a/core/modules/views/js/ajax_view.es6.js
+++ b/core/modules/views/js/ajax_view.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Attaches the AJAX behavior to exposed filters forms and key View links.
    *
@@ -18,8 +15,8 @@
   Drupal.behaviors.ViewsAjaxView = {};
   Drupal.behaviors.ViewsAjaxView.attach = function () {
     if (drupalSettings && drupalSettings.views && drupalSettings.views.ajaxViews) {
-      var ajaxViews = drupalSettings.views.ajaxViews;
-      for (var i in ajaxViews) {
+      const ajaxViews = drupalSettings.views.ajaxViews;
+      for (const i in ajaxViews) {
         if (ajaxViews.hasOwnProperty(i)) {
           Drupal.views.instances[i] = new Drupal.views.ajaxView(ajaxViews[i]);
         }
@@ -48,11 +45,11 @@
    *   The DOM id of the view.
    */
   Drupal.views.ajaxView = function (settings) {
-    var selector = '.js-view-dom-id-' + settings.view_dom_id;
+    const selector = `.js-view-dom-id-${settings.view_dom_id}`;
     this.$view = $(selector);
 
     // Retrieve the path to use for views' ajax.
-    var ajax_path = drupalSettings.views.ajax_path;
+    let ajax_path = drupalSettings.views.ajax_path;
 
     // If there are multiple views this might've ended up showing up multiple
     // times.
@@ -61,7 +58,7 @@
     }
 
     // Check if there are any GET parameters to send to views.
-    var queryString = window.location.search || '';
+    let queryString = window.location.search || '';
     if (queryString !== '') {
       // Remove the question mark and Drupal path component if any.
       queryString = queryString.slice(1).replace(/q=[^&]+&?|&?render=[^&]+/, '');
@@ -77,14 +74,14 @@
       submit: settings,
       setClick: true,
       event: 'click',
-      selector: selector,
-      progress: {type: 'fullscreen'}
+      selector,
+      progress: { type: 'fullscreen' },
     };
 
     this.settings = settings;
 
     // Add the ajax to exposed forms.
-    this.$exposed_form = $('form#views-exposed-form-' + settings.view_name.replace(/_/g, '-') + '-' + settings.view_display_id.replace(/_/g, '-'));
+    this.$exposed_form = $(`form#views-exposed-form-${settings.view_name.replace(/_/g, '-')}-${settings.view_display_id.replace(/_/g, '-')}`);
     this.$exposed_form.once('exposed-form').each($.proxy(this.attachExposedFormAjax, this));
 
     // Add the ajax to pagers.
@@ -100,10 +97,10 @@
     // @code
     // $('.view-name').trigger('RefreshView');
     // @endcode
-    var self_settings = $.extend({}, this.element_settings, {
+    const self_settings = $.extend({}, this.element_settings, {
       event: 'RefreshView',
       base: this.selector,
-      element: this.$view.get(0)
+      element: this.$view.get(0),
     });
     this.refreshViewAjax = Drupal.ajax(self_settings);
   };
@@ -112,14 +109,14 @@
    * @method
    */
   Drupal.views.ajaxView.prototype.attachExposedFormAjax = function () {
-    var that = this;
+    const that = this;
     this.exposedFormAjax = [];
     // Exclude the reset buttons so no AJAX behaviours are bound. Many things
     // break during the form reset phase if using AJAX.
     $('input[type=submit], input[type=image]', this.$exposed_form).not('[data-drupal-selector=edit-reset]').each(function (index) {
-      var self_settings = $.extend({}, that.element_settings, {
+      const self_settings = $.extend({}, that.element_settings, {
         base: $(this).attr('id'),
-        element: this
+        element: this,
       });
       that.exposedFormAjax[index] = Drupal.ajax(self_settings);
     });
@@ -152,9 +149,9 @@
    *   The link element.
    */
   Drupal.views.ajaxView.prototype.attachPagerLinkAjax = function (id, link) {
-    var $link = $(link);
-    var viewData = {};
-    var href = $link.attr('href');
+    const $link = $(link);
+    const viewData = {};
+    const href = $link.attr('href');
     // Construct an object using the settings defaults and then overriding
     // with data specific to the link.
     $.extend(
@@ -162,13 +159,13 @@
       this.settings,
       Drupal.Views.parseQueryString(href),
       // Extract argument data from the URL.
-      Drupal.Views.parseViewArgs(href, this.settings.view_base_path)
+      Drupal.Views.parseViewArgs(href, this.settings.view_base_path),
     );
 
-    var self_settings = $.extend({}, this.element_settings, {
+    const self_settings = $.extend({}, this.element_settings, {
       submit: viewData,
       base: false,
-      element: link
+      element: link,
     });
     this.pagerAjax = Drupal.ajax(self_settings);
   };
@@ -187,19 +184,18 @@
     // Scroll to the top of the view. This will allow users
     // to browse newly loaded content after e.g. clicking a pager
     // link.
-    var offset = $(response.selector).offset();
+    const offset = $(response.selector).offset();
     // We can't guarantee that the scrollable object should be
     // the body, as the view could be embedded in something
     // more complex such as a modal popup. Recurse up the DOM
     // and scroll the first element that has a non-zero top.
-    var scrollTarget = response.selector;
+    let scrollTarget = response.selector;
     while ($(scrollTarget).scrollTop() === 0 && $(scrollTarget).parent()) {
       scrollTarget = $(scrollTarget).parent();
     }
     // Only scroll upward.
     if (offset.top - 10 < $(scrollTarget).scrollTop()) {
-      $(scrollTarget).animate({scrollTop: (offset.top - 10)}, 500);
+      $(scrollTarget).animate({ scrollTop: (offset.top - 10) }, 500);
     }
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/views/js/base.es6.js b/core/modules/views/js/base.es6.js
index cca3be4dde..88c5db3346 100644
--- a/core/modules/views/js/base.es6.js
+++ b/core/modules/views/js/base.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * @namespace
    */
@@ -22,14 +19,14 @@
    *   A map of query parameters.
    */
   Drupal.Views.parseQueryString = function (query) {
-    var args = {};
-    var pos = query.indexOf('?');
+    const args = {};
+    const pos = query.indexOf('?');
     if (pos !== -1) {
       query = query.substring(pos + 1);
     }
-    var pair;
-    var pairs = query.split('&');
-    for (var i = 0; i < pairs.length; i++) {
+    let pair;
+    const pairs = query.split('&');
+    for (let i = 0; i < pairs.length; i++) {
       pair = pairs[i].split('=');
       // Ignore the 'q' path argument, if present.
       if (pair[0] !== 'q' && pair[1]) {
@@ -51,12 +48,12 @@
    *   An object containing `view_args` and `view_path`.
    */
   Drupal.Views.parseViewArgs = function (href, viewPath) {
-    var returnObj = {};
-    var path = Drupal.Views.getPath(href);
+    const returnObj = {};
+    const path = Drupal.Views.getPath(href);
     // Get viewPath url without baseUrl portion.
-    var viewHref = Drupal.url(viewPath).substring(drupalSettings.path.baseUrl.length);
+    const viewHref = Drupal.url(viewPath).substring(drupalSettings.path.baseUrl.length);
     // Ensure we have a correct path.
-    if (viewHref && path.substring(0, viewHref.length + 1) === viewHref + '/') {
+    if (viewHref && path.substring(0, viewHref.length + 1) === `${viewHref}/`) {
       returnObj.view_args = decodeURIComponent(path.substring(viewHref.length + 1, path.length));
       returnObj.view_path = path;
     }
@@ -74,7 +71,7 @@
    */
   Drupal.Views.pathPortion = function (href) {
     // Remove e.g. http://example.com if present.
-    var protocol = window.location.protocol;
+    const protocol = window.location.protocol;
     if (href.substring(0, protocol.length) === protocol) {
       // 2 is the length of the '//' that normally follows the protocol.
       href = href.substring(href.indexOf('/', protocol.length + 2));
@@ -98,13 +95,12 @@
     if (href.substring(0, 3) === '?q=') {
       href = href.substring(3, href.length);
     }
-    var chars = ['#', '?', '&'];
-    for (var i = 0; i < chars.length; i++) {
+    const chars = ['#', '?', '&'];
+    for (let i = 0; i < chars.length; i++) {
       if (href.indexOf(chars[i]) > -1) {
         href = href.substr(0, href.indexOf(chars[i]));
       }
     }
     return href;
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/views_ui/js/ajax.es6.js b/core/modules/views_ui/js/ajax.es6.js
index d4ff7642f8..73f2b967d8 100644
--- a/core/modules/views_ui/js/ajax.es6.js
+++ b/core/modules/views_ui/js/ajax.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * Ajax command for highlighting elements.
    *
@@ -35,23 +32,23 @@
    *   The XHR status code?
    */
   Drupal.AjaxCommands.prototype.viewsSetForm = function (ajax, response, status) {
-    var $form = $('.js-views-ui-dialog form');
+    const $form = $('.js-views-ui-dialog form');
     // Identify the button that was clicked so that .ajaxSubmit() can use it.
     // We need to do this for both .click() and .mousedown() since JavaScript
     // code might trigger either behavior.
-    var $submit_buttons = $form.find('input[type=submit].js-form-submit, button.js-form-submit').once('views-ajax-submit');
+    const $submit_buttons = $form.find('input[type=submit].js-form-submit, button.js-form-submit').once('views-ajax-submit');
     $submit_buttons.on('click mousedown', function () {
       this.form.clk = this;
     });
     $form.once('views-ajax-submit').each(function () {
-      var $form = $(this);
-      var element_settings = {
+      const $form = $(this);
+      const element_settings = {
         url: response.url,
         event: 'submit',
         base: $form.attr('id'),
-        element: this
+        element: this,
       };
-      var ajaxForm = Drupal.ajax(element_settings);
+      const ajaxForm = Drupal.ajax(element_settings);
       ajaxForm.$form = $form;
     });
   };
@@ -106,16 +103,16 @@
    *   The HTTP status code.
    */
   Drupal.AjaxCommands.prototype.viewsReplaceTitle = function (ajax, response, status) {
-    var doc = document;
+    const doc = document;
     // For the <title> element, make a best-effort attempt to replace the page
     // title and leave the site name alone. If the theme doesn't use the site
     // name in the <title> element, this will fail.
-    var oldTitle = doc.title;
+    const oldTitle = doc.title;
     // Escape the site name, in case it has special characters in it, so we can
     // use it in our regex.
-    var escapedSiteName = response.siteName.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
-    var re = new RegExp('.+ (.) ' + escapedSiteName);
-    doc.title = oldTitle.replace(re, response.title + ' $1 ' + response.siteName);
+    const escapedSiteName = response.siteName.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
+    const re = new RegExp(`.+ (.) ${escapedSiteName}`);
+    doc.title = oldTitle.replace(re, `${response.title} $1 ${response.siteName}`);
 
     $('h1.page-title').text(response.title);
   };
@@ -140,13 +137,13 @@
    *   checked.
    */
   Drupal.behaviors.livePreview = {
-    attach: function (context) {
+    attach(context) {
       $('input#edit-displays-live-preview', context).once('views-ajax').on('click', function () {
         if ($(this).is(':checked')) {
           $('#preview-submit').trigger('click');
         }
       });
-    }
+    },
   };
 
   /**
@@ -158,15 +155,15 @@
    *   Attaches behavior to sync the preview display when needed.
    */
   Drupal.behaviors.syncPreviewDisplay = {
-    attach: function (context) {
+    attach(context) {
       $('#views-tabset a').once('views-ajax').on('click', function () {
-        var href = $(this).attr('href');
+        const href = $(this).attr('href');
         // Cut of #views-tabset.
-        var display_id = href.substr(11);
+        const display_id = href.substr(11);
         // Set the form element.
         $('#views-live-preview #preview-display-id').val(display_id);
       });
-    }
+    },
   };
 
   /**
@@ -179,14 +176,14 @@
    */
   Drupal.behaviors.viewsAjax = {
     collapseReplaced: false,
-    attach: function (context, settings) {
-      var base_element_settings = {
+    attach(context, settings) {
+      const base_element_settings = {
         event: 'click',
-        progress: {type: 'fullscreen'}
+        progress: { type: 'fullscreen' },
       };
       // Bind AJAX behaviors to all items showing the class.
       $('a.views-ajax-link', context).once('views-ajax').each(function () {
-        var element_settings = base_element_settings;
+        const element_settings = base_element_settings;
         element_settings.base = $(this).attr('id');
         element_settings.element = this;
         // Set the URL to go to the anchor.
@@ -203,7 +200,7 @@
             return true;
           }
 
-          var element_settings = base_element_settings;
+          const element_settings = base_element_settings;
           // Set the URL to go to the anchor.
           element_settings.url = $(this).attr('href');
           if (Drupal.Views.getPath(element_settings.url).substring(0, 21) !== 'admin/structure/views') {
@@ -227,7 +224,7 @@
             this.form.clk = this;
             return true;
           });
-          var element_settings = base_element_settings;
+          const element_settings = base_element_settings;
           // Set the URL to go to the anchor.
           element_settings.url = $(this.form).attr('action');
           if (Drupal.Views.getPath(element_settings.url).substring(0, 21) !== 'admin/structure/views') {
@@ -242,8 +239,6 @@
 
           Drupal.ajax(element_settings);
         });
-
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/views_ui/js/dialog.views.es6.js b/core/modules/views_ui/js/dialog.views.es6.js
index 3f40b4ad5b..15f937f540 100644
--- a/core/modules/views_ui/js/dialog.views.es6.js
+++ b/core/modules/views_ui/js/dialog.views.es6.js
@@ -4,25 +4,24 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   function handleDialogResize(e) {
-    var $modal = $(e.currentTarget);
-    var $viewsOverride = $modal.find('[data-drupal-views-offset]');
-    var $scroll = $modal.find('[data-drupal-views-scroll]');
-    var offset = 0;
-    var modalHeight;
+    const $modal = $(e.currentTarget);
+    const $viewsOverride = $modal.find('[data-drupal-views-offset]');
+    const $scroll = $modal.find('[data-drupal-views-scroll]');
+    let offset = 0;
+    let modalHeight;
     if ($scroll.length) {
       // Add a class to do some styles adjustments.
       $modal.closest('.views-ui-dialog').addClass('views-ui-dialog-scroll');
       // Let scroll element take all the height available.
-      $scroll.css({overflow: 'visible', height: 'auto'});
+      $scroll.css({ overflow: 'visible', height: 'auto' });
       modalHeight = $modal.height();
-      $viewsOverride.each(function () { offset += $(this).outerHeight(); });
+      $viewsOverride.each(function () {
+        offset += $(this).outerHeight();
+      });
 
       // Take internal padding into account.
-      var scrollOffset = $scroll.outerHeight() - $scroll.height();
+      const scrollOffset = $scroll.outerHeight() - $scroll.height();
       $scroll.height(modalHeight - offset - scrollOffset);
       // Reset scrolling properties.
       $modal.css('overflow', 'hidden');
@@ -41,18 +40,17 @@
    *   Detaches the modal functionality.
    */
   Drupal.behaviors.viewsModalContent = {
-    attach: function (context) {
+    attach(context) {
       $('body').once('viewsDialog').on('dialogContentResize.viewsDialog', '.ui-dialog-content', handleDialogResize);
       // When expanding details, make sure the modal is resized.
-      $(context).find('.scroll').once('detailsUpdate').on('click', 'summary', function (e) {
+      $(context).find('.scroll').once('detailsUpdate').on('click', 'summary', (e) => {
         $(e.currentTarget).trigger('dialogContentResize');
       });
     },
-    detach: function (context, settings, trigger) {
+    detach(context, settings, trigger) {
       if (trigger === 'unload') {
         $('body').removeOnce('viewsDialog').off('.viewsDialog');
       }
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/views_ui/js/views-admin.es6.js b/core/modules/views_ui/js/views-admin.es6.js
index 0fda808748..1078209c82 100644
--- a/core/modules/views_ui/js/views-admin.es6.js
+++ b/core/modules/views_ui/js/views-admin.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   /**
    * @namespace
    */
@@ -21,13 +18,13 @@
    *   Attaches toggling of SQL rewrite warning on the corresponding checkbox.
    */
   Drupal.behaviors.viewsUiEditView = {
-    attach: function () {
+    attach() {
       // Only show the SQL rewrite warning when the user has chosen the
       // corresponding checkbox.
-      $('[data-drupal-selector="edit-query-options-disable-sql-rewrite"]').on('click', function () {
+      $('[data-drupal-selector="edit-query-options-disable-sql-rewrite"]').on('click', () => {
         $('.sql-rewrite-warning').toggleClass('js-hide');
       });
-    }
+    },
   };
 
   /**
@@ -41,16 +38,16 @@
    *   view name.
    */
   Drupal.behaviors.viewsUiAddView = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
       // Set up regular expressions to allow only numbers, letters, and dashes.
-      var exclude = new RegExp('[^a-z0-9\\-]+', 'g');
-      var replace = '-';
-      var suffix;
+      const exclude = new RegExp('[^a-z0-9\\-]+', 'g');
+      const replace = '-';
+      let suffix;
 
       // The page title, block title, and menu link fields can all be
       // prepopulated with the view name - no regular expression needed.
-      var $fields = $context.find('[id^="edit-page-title"], [id^="edit-block-title"], [id^="edit-page-link-properties-title"]');
+      const $fields = $context.find('[id^="edit-page-title"], [id^="edit-block-title"], [id^="edit-page-link-properties-title"]');
       if ($fields.length) {
         if (!this.fieldsFiller) {
           this.fieldsFiller = new Drupal.viewsUi.FormFieldFiller($fields);
@@ -67,7 +64,7 @@
       }
 
       // Prepopulate the path field with a URLified version of the view name.
-      var $pathField = $context.find('[id^="edit-page-path"]');
+      const $pathField = $context.find('[id^="edit-page-path"]');
       if ($pathField.length) {
         if (!this.pathFiller) {
           this.pathFiller = new Drupal.viewsUi.FormFieldFiller($pathField, exclude, replace);
@@ -79,7 +76,7 @@
 
       // Populate the RSS feed field with a URLified version of the view name,
       // and an .xml suffix (to make it unique).
-      var $feedField = $context.find('[id^="edit-page-feed-properties-path"]');
+      const $feedField = $context.find('[id^="edit-page-feed-properties-path"]');
       if ($feedField.length) {
         if (!this.feedFiller) {
           suffix = '.xml';
@@ -89,7 +86,7 @@
           this.feedFiller.rebind($feedField);
         }
       }
-    }
+    },
   };
 
   /**
@@ -110,7 +107,6 @@
    *   A suffix to append at the end of the target field content.
    */
   Drupal.viewsUi.FormFieldFiller = function ($target, exclude, replace, suffix) {
-
     /**
      *
      * @type {jQuery}
@@ -146,7 +142,7 @@
     // on. NOTE: jQuery.proxy will not work for this because it assumes we want
     // only one bound version of an object method, whereas we need one version
     // per object instance.
-    var self = this;
+    const self = this;
 
     /**
      * Populate the target form field with the altered source field value.
@@ -154,7 +150,9 @@
      * @return {*}
      *   The result of the _populate call, which should be undefined.
      */
-    this.populate = function () { return self._populate.call(self); };
+    this.populate = function () {
+      return self._populate.call(self);
+    };
 
     /**
      * Stop prepopulating the form fields.
@@ -162,7 +160,9 @@
      * @return {*}
      *   The result of the _unbind call, which should be undefined.
      */
-    this.unbind = function () { return self._unbind.call(self); };
+    this.unbind = function () {
+      return self._unbind.call(self);
+    };
 
     this.bind();
     // Object constructor; no return value.
@@ -173,7 +173,7 @@
     /**
      * Bind the form-filling behavior.
      */
-    bind: function () {
+    bind() {
       this.unbind();
       // Populate the form field when the source changes.
       this.source.on('keyup.viewsUi change.viewsUi', this.populate);
@@ -187,8 +187,8 @@
      * @return {string}
      *   The source form field value.
      */
-    getTransliterated: function () {
-      var from = this.source.val();
+    getTransliterated() {
+      let from = this.source.val();
       if (this.exclude) {
         from = from.toLowerCase().replace(this.exclude, this.replace);
       }
@@ -198,12 +198,12 @@
     /**
      * Populate the target form field with the altered source field value.
      */
-    _populate: function () {
-      var transliterated = this.getTransliterated();
-      var suffix = this.suffix;
+    _populate() {
+      const transliterated = this.getTransliterated();
+      const suffix = this.suffix;
       this.target.each(function (i) {
         // Ensure that the maxlength is not exceeded by prepopulating the field.
-        var maxlength = $(this).attr('maxlength') - suffix.length;
+        const maxlength = $(this).attr('maxlength') - suffix.length;
         $(this).val(transliterated.substr(0, maxlength) + suffix);
       });
     },
@@ -211,7 +211,7 @@
     /**
      * Stop prepopulating the form fields.
      */
-    _unbind: function () {
+    _unbind() {
       this.source.off('keyup.viewsUi change.viewsUi', this.populate);
       this.target.off('focus.viewsUi', this.unbind);
     },
@@ -222,10 +222,10 @@
      * @param {jQuery} $fields
      *   Fields to rebind functionality to.
      */
-    rebind: function ($fields) {
+    rebind($fields) {
       this.target = $fields;
       this.bind();
-    }
+    },
   });
 
   /**
@@ -238,9 +238,9 @@
    *   forms in question.
    */
   Drupal.behaviors.addItemForm = {
-    attach: function (context) {
-      var $context = $(context);
-      var $form = $context;
+    attach(context) {
+      const $context = $(context);
+      let $form = $context;
       // The add handler form may have an id of views-ui-add-handler-form--n.
       if (!$context.is('form[id^="views-ui-add-handler-form"]')) {
         $form = $context.find('form[id^="views-ui-add-handler-form"]');
@@ -250,7 +250,7 @@
         // instantiate.
         new Drupal.viewsUi.AddItemForm($form);
       }
-    }
+    },
   };
 
   /**
@@ -262,7 +262,6 @@
    *   The form element used.
    */
   Drupal.viewsUi.AddItemForm = function ($form) {
-
     /**
      *
      * @type {jQuery}
@@ -290,18 +289,18 @@
    *   The event triggered.
    */
   Drupal.viewsUi.AddItemForm.prototype.handleCheck = function (event) {
-    var $target = $(event.target);
-    var label = $.trim($target.closest('td').next().html());
+    const $target = $(event.target);
+    const label = $.trim($target.closest('td').next().html());
     // Add/remove the checked item to the list.
     if ($target.is(':checked')) {
       this.$selected_div.show().css('display', 'block');
       this.checkedItems.push(label);
     }
     else {
-      var position = $.inArray(label, this.checkedItems);
+      const position = $.inArray(label, this.checkedItems);
       // Delete the item from the list and make sure that the list doesn't have
       // undefined items left.
-      for (var i = 0; i < this.checkedItems.length; i++) {
+      for (let i = 0; i < this.checkedItems.length; i++) {
         if (i === position) {
           this.checkedItems.splice(i, 1);
           i--;
@@ -338,22 +337,22 @@
    *   Fixes the input elements needed.
    */
   Drupal.behaviors.viewsUiRenderAddViewButton = {
-    attach: function (context) {
+    attach(context) {
       // Build the add display menu and pull the display input buttons into it.
-      var $menu = $(context).find('#views-display-menu-tabs').once('views-ui-render-add-view-button');
+      const $menu = $(context).find('#views-display-menu-tabs').once('views-ui-render-add-view-button');
       if (!$menu.length) {
         return;
       }
 
-      var $addDisplayDropdown = $('<li class="add"><a href="#"><span class="icon add"></span>' + Drupal.t('Add') + '</a><ul class="action-list" style="display:none;"></ul></li>');
-      var $displayButtons = $menu.nextAll('input.add-display').detach();
+      const $addDisplayDropdown = $(`<li class="add"><a href="#"><span class="icon add"></span>${Drupal.t('Add')}</a><ul class="action-list" style="display:none;"></ul></li>`);
+      const $displayButtons = $menu.nextAll('input.add-display').detach();
       $displayButtons.appendTo($addDisplayDropdown.find('.action-list')).wrap('<li>')
         .parent().eq(0).addClass('first').end().eq(-1).addClass('last');
       // Remove the 'Add ' prefix from the button labels since they're being
       // placed in an 'Add' dropdown. @todo This assumes English, but so does
       // $addDisplayDropdown above. Add support for translation.
       $displayButtons.each(function () {
-        var label = $(this).val();
+        const label = $(this).val();
         if (label.substr(0, 4) === 'Add ') {
           $(this).val(label.substr(4));
         }
@@ -363,7 +362,7 @@
       // Add the click handler for the add display button.
       $menu.find('li.add > a').on('click', function (event) {
         event.preventDefault();
-        var $trigger = $(this);
+        const $trigger = $(this);
         Drupal.behaviors.viewsUiRenderAddViewButton.toggleMenu($trigger);
       });
       // Add a mouseleave handler to close the dropdown when the user mouses
@@ -374,13 +373,13 @@
       // toggled on and off and we want the handler to take effect in the cases
       // that the class is present, but not when it isn't.
       $('li.add', $menu).on('mouseleave', function (event) {
-        var $this = $(this);
-        var $trigger = $this.children('a[href="#"]');
+        const $this = $(this);
+        const $trigger = $this.children('a[href="#"]');
         if ($this.children('.action-list').is(':visible')) {
           Drupal.behaviors.viewsUiRenderAddViewButton.toggleMenu($trigger);
         }
       });
-    }
+    },
   };
 
   /**
@@ -409,9 +408,9 @@
    *   options.
    */
   Drupal.behaviors.viewsUiSearchOptions = {
-    attach: function (context) {
-      var $context = $(context);
-      var $form = $context;
+    attach(context) {
+      const $context = $(context);
+      let $form = $context;
       // The add handler form may have an id of views-ui-add-handler-form--n.
       if (!$context.is('form[id^="views-ui-add-handler-form"]')) {
         $form = $context.find('form[id^="views-ui-add-handler-form"]');
@@ -420,7 +419,7 @@
       if ($form.once('views-ui-filter-options').length) {
         new Drupal.viewsUi.OptionsSearch($form);
       }
-    }
+    },
   };
 
   /**
@@ -436,7 +435,6 @@
    *   The form element.
    */
   Drupal.viewsUi.OptionsSearch = function ($form) {
-
     /**
      *
      * @type {jQuery}
@@ -444,14 +442,14 @@
     this.$form = $form;
 
     // Click on the title checks the box.
-    this.$form.on('click', 'td.title', function (event) {
-      var $target = $(event.currentTarget);
+    this.$form.on('click', 'td.title', (event) => {
+      const $target = $(event.currentTarget);
       $target.closest('tr').find('input').trigger('click');
     });
 
-    var searchBoxSelector = '[data-drupal-selector="edit-override-controls-options-search"]';
-    var controlGroupSelector = '[data-drupal-selector="edit-override-controls-group"]';
-    this.$form.on('formUpdated', searchBoxSelector + ',' + controlGroupSelector, $.proxy(this.handleFilter, this));
+    const searchBoxSelector = '[data-drupal-selector="edit-override-controls-options-search"]';
+    const controlGroupSelector = '[data-drupal-selector="edit-override-controls-group"]';
+    this.$form.on('formUpdated', `${searchBoxSelector},${controlGroupSelector}`, $.proxy(this.handleFilter, this));
 
     this.$searchBox = this.$form.find(searchBoxSelector);
     this.$controlGroup = this.$form.find(controlGroupSelector);
@@ -463,7 +461,7 @@
     this.options = this.getOptions(this.$form.find('.filterable-option'));
 
     // Trap the ENTER key in the search box so that it doesn't submit the form.
-    this.$searchBox.on('keypress', function (event) {
+    this.$searchBox.on('keypress', (event) => {
       if (event.which === 13) {
         event.preventDefault();
       }
@@ -482,23 +480,23 @@
      * @return {Array}
      *   An array of all the filterable options.
      */
-    getOptions: function ($allOptions) {
-      var $title;
-      var $description;
-      var $option;
-      var options = [];
-      var length = $allOptions.length;
-      for (var i = 0; i < length; i++) {
+    getOptions($allOptions) {
+      let $title;
+      let $description;
+      let $option;
+      const options = [];
+      const length = $allOptions.length;
+      for (let i = 0; i < length; i++) {
         $option = $($allOptions[i]);
         $title = $option.find('.title');
         $description = $option.find('.description');
         options[i] = {
           // Search on the lowercase version of the title text + description.
-          searchText: $title.text().toLowerCase() + ' ' + $description.text().toLowerCase(),
+          searchText: `${$title.text().toLowerCase()} ${$description.text().toLowerCase()}`,
           // Maintain a reference to the jQuery object for each row, so we don't
           // have to create a new object inside the performance-sensitive keyup
           // handler.
-          $div: $option
+          $div: $option,
         };
       }
       return options;
@@ -511,21 +509,21 @@
      * @param {jQuery.Event} event
      *   The formUpdated event.
      */
-    handleFilter: function (event) {
+    handleFilter(event) {
       // Determine the user's search query. The search text has been converted
       // to lowercase.
-      var search = this.$searchBox.val().toLowerCase();
-      var words = search.split(' ');
+      const search = this.$searchBox.val().toLowerCase();
+      const words = search.split(' ');
       // Get selected Group
-      var group = this.$controlGroup.val();
+      const group = this.$controlGroup.val();
 
       // Search through the search texts in the form for matching text.
-      this.options.forEach(function (option) {
+      this.options.forEach((option) => {
         function hasWord(word) {
           return option.searchText.indexOf(word) !== -1;
         }
 
-        var found = true;
+        let found = true;
         // Each word in the search string has to match the item in order for the
         // item to be shown.
         if (search) {
@@ -540,7 +538,7 @@
 
       // Adapt dialog to content size.
       $(event.target).trigger('dialogContentResize');
-    }
+    },
   });
 
   /**
@@ -552,9 +550,9 @@
    *   Attaches the preview functionality to the view edit form.
    */
   Drupal.behaviors.viewsUiPreview = {
-    attach: function (context) {
+    attach(context) {
       // Only act on the edit view form.
-      var $contextualFiltersBucket = $(context).find('.views-display-column .views-ui-display-tab-bucket.argument');
+      const $contextualFiltersBucket = $(context).find('.views-display-column .views-ui-display-tab-bucket.argument');
       if ($contextualFiltersBucket.length === 0) {
         return;
       }
@@ -562,7 +560,7 @@
       // If the display has no contextual filters, hide the form where you
       // enter the contextual filters for the live preview. If it has contextual
       // filters, show the form.
-      var $contextualFilters = $contextualFiltersBucket.find('.views-display-setting a');
+      const $contextualFilters = $contextualFiltersBucket.find('.views-display-setting a');
       if ($contextualFilters.length) {
         $('#preview-args').parent().show();
       }
@@ -574,7 +572,7 @@
       if ($('#edit-displays-live-preview').once('edit-displays-live-preview').is(':checked')) {
         $('#preview-submit').once('edit-displays-live-preview').trigger('click');
       }
-    }
+    },
   };
 
   /**
@@ -588,18 +586,18 @@
    *   @see Drupal.viewsUi.RearrangeFilterHandler
    */
   Drupal.behaviors.viewsUiRearrangeFilter = {
-    attach: function (context) {
+    attach(context) {
       // Only act on the rearrange filter form.
       if (typeof Drupal.tableDrag === 'undefined' || typeof Drupal.tableDrag['views-rearrange-filters'] === 'undefined') {
         return;
       }
-      var $context = $(context);
-      var $table = $context.find('#views-rearrange-filters').once('views-rearrange-filters');
-      var $operator = $context.find('.js-form-item-filter-groups-operator').once('views-rearrange-filters');
+      const $context = $(context);
+      const $table = $context.find('#views-rearrange-filters').once('views-rearrange-filters');
+      const $operator = $context.find('.js-form-item-filter-groups-operator').once('views-rearrange-filters');
       if ($table.length) {
         new Drupal.viewsUi.RearrangeFilterHandler($table, $operator);
       }
-    }
+    },
   };
 
   /**
@@ -613,7 +611,6 @@
    *   The filter groups operator element.
    */
   Drupal.viewsUi.RearrangeFilterHandler = function ($table, $operator) {
-
     /**
      * Keep a reference to the `<table>` being altered and to the div containing
      * the filter groups operator dropdown (if it exists).
@@ -658,7 +655,6 @@
     // When there is a filter groups operator dropdown on the page, create
     // duplicates of the dropdown between each pair of filter groups.
     if (this.hasGroupOperator) {
-
       /**
        * @type {jQuery}
        */
@@ -697,13 +693,12 @@
     /**
      * Insert links that allow filter groups to be added and removed.
      */
-    insertAddRemoveFilterGroupLinks: function () {
-
+    insertAddRemoveFilterGroupLinks() {
       // Insert a link for adding a new group at the top of the page, and make
       // it match the action link styling used in a typical page.html.twig.
       // Since Drupal does not provide a theme function for this markup this is
       // the best we can do.
-      $('<ul class="action-links"><li><a id="views-add-group-link" href="#">' + this.addGroupButton.val() + '</a></li></ul>')
+      $(`<ul class="action-links"><li><a id="views-add-group-link" href="#">${this.addGroupButton.val()}</a></li></ul>`)
         .prependTo(this.table.parent())
         // When the link is clicked, dynamically click the hidden form button
         // for adding a new filter group.
@@ -713,17 +708,17 @@
 
       // Find each (visually hidden) button for removing a filter group and
       // insert a link next to it.
-      var length = this.removeGroupButtons.length;
-      var i;
+      const length = this.removeGroupButtons.length;
+      let i;
       for (i = 0; i < length; i++) {
-        var $removeGroupButton = $(this.removeGroupButtons[i]);
-        var buttonId = $removeGroupButton.attr('id');
-        $('<a href="#" class="views-remove-group-link">' + Drupal.t('Remove group') + '</a>')
+        const $removeGroupButton = $(this.removeGroupButtons[i]);
+        const buttonId = $removeGroupButton.attr('id');
+        $(`<a href="#" class="views-remove-group-link">${Drupal.t('Remove group')}</a>`)
           .insertBefore($removeGroupButton)
           // When the link is clicked, dynamically click the corresponding form
           // button.
           .once('views-rearrange-filter-handler')
-          .on('click.views-rearrange-filter-handler', {buttonId: buttonId}, $.proxy(this, 'clickRemoveGroupButton'));
+          .on('click.views-rearrange-filter-handler', { buttonId }, $.proxy(this, 'clickRemoveGroupButton'));
       }
     },
 
@@ -733,7 +728,7 @@
      * @param {jQuery.Event} event
      *   The event triggered.
      */
-    clickAddGroupButton: function (event) {
+    clickAddGroupButton(event) {
       this.addGroupButton.trigger('mousedown');
       event.preventDefault();
     },
@@ -745,8 +740,8 @@
      *   Event being triggered, with event.data.buttonId set to the ID of the
      *   form button that should be clicked.
      */
-    clickRemoveGroupButton: function (event) {
-      this.table.find('#' + event.data.buttonId).trigger('mousedown');
+    clickRemoveGroupButton(event) {
+      this.table.find(`#${event.data.buttonId}`).trigger('mousedown');
       event.preventDefault();
     },
 
@@ -757,12 +752,12 @@
      * @return {jQuery}
      *   An operator element.
      */
-    duplicateGroupsOperator: function () {
-      var dropdowns;
-      var newRow;
-      var titleRow;
+    duplicateGroupsOperator() {
+      let dropdowns;
+      let newRow;
+      let titleRow;
 
-      var titleRows = $('tr.views-group-title').once('duplicateGroupsOperator');
+      const titleRows = $('tr.views-group-title').once('duplicateGroupsOperator');
 
       if (!titleRows.length) {
         return this.operator;
@@ -782,13 +777,13 @@
       newRow = $('<tr class="filter-group-operator-row"><td colspan="5"></td></tr>');
       newRow.find('td').append(this.operator);
       newRow.insertBefore(titleRow);
-      var length = titleRows.length;
+      const length = titleRows.length;
       // Starting with the third group, copy the operator to a new row above the
       // group title.
-      for (var i = 2; i < length; i++) {
+      for (let i = 2; i < length; i++) {
         titleRow = $(titleRows[i]);
         // Make a copy of the operator dropdown and put it in a new table row.
-        var fakeOperator = this.operator.clone();
+        const fakeOperator = this.operator.clone();
         fakeOperator.attr('id', '');
         newRow = $('<tr class="filter-group-operator-row"><td colspan="5"></td></tr>');
         newRow.find('td').append(fakeOperator);
@@ -802,7 +797,7 @@
     /**
      * Make the duplicated groups operators change in sync with each other.
      */
-    syncGroupsOperators: function () {
+    syncGroupsOperators() {
       if (this.dropdowns.length < 2) {
         // We only have one dropdown (or none at all), so there's nothing to
         // sync.
@@ -820,9 +815,9 @@
      * @param {jQuery.Event} event
      *   The event triggered.
      */
-    operatorChangeHandler: function (event) {
-      var $target = $(event.target);
-      var operators = this.dropdowns.find('select').not($target);
+    operatorChangeHandler(event) {
+      const $target = $(event.target);
+      const operators = this.dropdowns.find('select').not($target);
 
       // Change the other operators to match this new value.
       operators.val($target.val());
@@ -831,9 +826,9 @@
     /**
      * @method
      */
-    modifyTableDrag: function () {
-      var tableDrag = Drupal.tableDrag['views-rearrange-filters'];
-      var filterHandler = this;
+    modifyTableDrag() {
+      const tableDrag = Drupal.tableDrag['views-rearrange-filters'];
+      const filterHandler = this;
 
       /**
        * Override the row.onSwap method from tabledrag.js.
@@ -852,11 +847,11 @@
           // Make sure the row that just got moved (this.group) is inside one
           // of the filter groups (i.e. below an empty marker row or a
           // draggable). If it isn't, move it down one.
-          var thisRow = $(this.group);
-          var previousRow = thisRow.prev('tr');
+          const thisRow = $(this.group);
+          const previousRow = thisRow.prev('tr');
           if (previousRow.length && !previousRow.hasClass('group-message') && !previousRow.hasClass('draggable')) {
             // Move the dragged row down one.
-            var next = thisRow.next();
+            const next = thisRow.next();
             if (next.is('tr')) {
               this.swap('after', next);
             }
@@ -875,11 +870,11 @@
         // If the tabledrag change marker (i.e., the "*") has been inserted
         // inside a row after the operator label (i.e., "And" or "Or")
         // rearrange the items so the operator label continues to appear last.
-        var changeMarker = $(this.oldRowElement).find('.tabledrag-changed');
+        const changeMarker = $(this.oldRowElement).find('.tabledrag-changed');
         if (changeMarker.length) {
           // Search for occurrences of the operator label before the change
           // marker, and reverse them.
-          var operatorLabel = changeMarker.prevAll('.views-operator-label');
+          const operatorLabel = changeMarker.prevAll('.views-operator-label');
           if (operatorLabel.length) {
             operatorLabel.insertAfter(changeMarker);
           }
@@ -888,12 +883,12 @@
         // Make sure the "group" dropdown is properly updated when rows are
         // dragged into an empty filter group. This is borrowed heavily from
         // the block.js implementation of tableDrag.onDrop().
-        var groupRow = $(this.rowObject.element).prevAll('tr.group-message').get(0);
-        var groupName = groupRow.className.replace(/([^ ]+[ ]+)*group-([^ ]+)-message([ ]+[^ ]+)*/, '$2');
-        var groupField = $('select.views-group-select', this.rowObject.element);
-        if ($(this.rowObject.element).prev('tr').is('.group-message') && !groupField.is('.views-group-select-' + groupName)) {
-          var oldGroupName = groupField.attr('class').replace(/([^ ]+[ ]+)*views-group-select-([^ ]+)([ ]+[^ ]+)*/, '$2');
-          groupField.removeClass('views-group-select-' + oldGroupName).addClass('views-group-select-' + groupName);
+        const groupRow = $(this.rowObject.element).prevAll('tr.group-message').get(0);
+        const groupName = groupRow.className.replace(/([^ ]+[ ]+)*group-([^ ]+)-message([ ]+[^ ]+)*/, '$2');
+        const groupField = $('select.views-group-select', this.rowObject.element);
+        if ($(this.rowObject.element).prev('tr').is('.group-message') && !groupField.is(`.views-group-select-${groupName}`)) {
+          const oldGroupName = groupField.attr('class').replace(/([^ ]+[ ]+)*views-group-select-([^ ]+)([ ]+[^ ]+)*/, '$2');
+          groupField.removeClass(`views-group-select-${oldGroupName}`).addClass(`views-group-select-${groupName}`);
           groupField.val(groupName);
         }
       };
@@ -902,25 +897,25 @@
     /**
      * Redraw the operator labels that are displayed next to each filter.
      */
-    redrawOperatorLabels: function () {
-      for (var i = 0; i < this.draggableRows.length; i++) {
+    redrawOperatorLabels() {
+      for (let i = 0; i < this.draggableRows.length; i++) {
         // Within the row, the operator labels are displayed inside the first
         // table cell (next to the filter name).
-        var $draggableRow = $(this.draggableRows[i]);
-        var $firstCell = $draggableRow.find('td').eq(0);
+        const $draggableRow = $(this.draggableRows[i]);
+        const $firstCell = $draggableRow.find('td').eq(0);
         if ($firstCell.length) {
           // The value of the operator label ("And" or "Or") is taken from the
           // first operator dropdown we encounter, going backwards from the
           // current row. This dropdown is the one associated with the current
           // row's filter group.
-          var operatorValue = $draggableRow.prevAll('.views-group-title').find('option:selected').html();
-          var operatorLabel = '<span class="views-operator-label">' + operatorValue + '</span>';
+          const operatorValue = $draggableRow.prevAll('.views-group-title').find('option:selected').html();
+          const operatorLabel = `<span class="views-operator-label">${operatorValue}</span>`;
           // If the next visible row after this one is a draggable filter row,
           // display the operator label next to the current row. (Checking for
           // visibility is necessary here since the "Remove" links hide the
           // removed row but don't actually remove it from the document).
-          var $nextRow = $draggableRow.nextAll(':visible').eq(0);
-          var $existingOperatorLabel = $firstCell.find('.views-operator-label');
+          const $nextRow = $draggableRow.nextAll(':visible').eq(0);
+          const $existingOperatorLabel = $firstCell.find('.views-operator-label');
           if ($nextRow.hasClass('draggable')) {
             // If an operator label was already there, replace it with the new
             // one.
@@ -949,14 +944,14 @@
      * Update the rowspan attribute of each cell containing an operator
      * dropdown.
      */
-    updateRowspans: function () {
-      var $row;
-      var $currentEmptyRow;
-      var draggableCount;
-      var $operatorCell;
-      var rows = $(this.table).find('tr');
-      var length = rows.length;
-      for (var i = 0; i < length; i++) {
+    updateRowspans() {
+      let $row;
+      let $currentEmptyRow;
+      let draggableCount;
+      let $operatorCell;
+      const rows = $(this.table).find('tr');
+      const length = rows.length;
+      for (let i = 0; i < length; i++) {
         $row = $(rows[i]);
         if ($row.hasClass('views-group-title')) {
           // This row is a title row.
@@ -979,7 +974,7 @@
           $operatorCell.attr('rowspan', draggableCount + 1);
         }
       }
-    }
+    },
   });
 
   /**
@@ -991,12 +986,12 @@
    *   Attaches select all functionality to the views filter form.
    */
   Drupal.behaviors.viewsFilterConfigSelectAll = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
 
-      var $selectAll = $context.find('.js-form-item-options-value-all').once('filterConfigSelectAll');
-      var $selectAllCheckbox = $selectAll.find('input[type=checkbox]');
-      var $checkboxes = $selectAll.closest('.form-checkboxes').find('.js-form-type-checkbox:not(.js-form-item-options-value-all) input[type="checkbox"]');
+      const $selectAll = $context.find('.js-form-item-options-value-all').once('filterConfigSelectAll');
+      const $selectAllCheckbox = $selectAll.find('input[type=checkbox]');
+      const $checkboxes = $selectAll.closest('.form-checkboxes').find('.js-form-type-checkbox:not(.js-form-item-options-value-all) input[type="checkbox"]');
 
       if ($selectAll.length) {
          // Show the select all checkbox.
@@ -1013,7 +1008,7 @@
           }
         });
       }
-    }
+    },
   };
 
   /**
@@ -1025,9 +1020,9 @@
    *   Removes the icon class from certain views elements.
    */
   Drupal.behaviors.viewsRemoveIconClass = {
-    attach: function (context) {
+    attach(context) {
       $(context).find('.dropbutton').once('dropbutton-icon').find('.icon').removeClass('icon');
-    }
+    },
   };
 
   /**
@@ -1039,14 +1034,14 @@
    *   Changes buttons into checkboxes via {@link Drupal.viewsUi.Checkboxifier}.
    */
   Drupal.behaviors.viewsUiCheckboxify = {
-    attach: function (context, settings) {
-      var $buttons = $('[data-drupal-selector="edit-options-expose-button-button"], [data-drupal-selector="edit-options-group-button-button"]').once('views-ui-checkboxify');
-      var length = $buttons.length;
-      var i;
+    attach(context, settings) {
+      const $buttons = $('[data-drupal-selector="edit-options-expose-button-button"], [data-drupal-selector="edit-options-group-button-button"]').once('views-ui-checkboxify');
+      const length = $buttons.length;
+      let i;
       for (i = 0; i < length; i++) {
         new Drupal.viewsUi.Checkboxifier($buttons[i]);
       }
-    }
+    },
   };
 
   /**
@@ -1059,8 +1054,8 @@
    *   Changes the default widget based on user input.
    */
   Drupal.behaviors.viewsUiChangeDefaultWidget = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
 
       function changeDefaultWidget(event) {
         if ($(event.target).prop('checked')) {
@@ -1080,7 +1075,7 @@
         .on('change', changeDefaultWidget)
         // Update the first time the form is rendered.
         .trigger('change');
-    }
+    },
   };
 
   /**
@@ -1100,7 +1095,6 @@
     this.$parent.find('.exposed-description, .grouped-description').hide();
 
     this.$input.on('click', $.proxy(this, 'clickHandler'));
-
   };
 
   /**
@@ -1125,12 +1119,12 @@
    *   state.
    */
   Drupal.behaviors.viewsUiOverrideSelect = {
-    attach: function (context) {
+    attach(context) {
       $(context).find('[data-drupal-selector="edit-override-dropdown"]').once('views-ui-override-button-text').each(function () {
         // Closures! :(
-        var $context = $(context);
-        var $submit = $context.find('[id^=edit-submit]');
-        var old_value = $submit.val();
+        const $context = $(context);
+        const $submit = $context.find('[id^=edit-submit]');
+        const old_value = $submit.val();
 
         $submit.once('views-ui-override-button-text')
           .on('mouseup', function () {
@@ -1139,7 +1133,7 @@
           });
 
         $(this).on('change', function () {
-          var $this = $(this);
+          const $this = $(this);
           if ($this.val() === 'default') {
             $submit.val(Drupal.t('Apply (all displays)'));
           }
@@ -1149,13 +1143,12 @@
           else {
             $submit.val(Drupal.t('Apply (this display)'));
           }
-          var $dialog = $context.closest('.ui-dialog-content');
+          const $dialog = $context.closest('.ui-dialog-content');
           $dialog.trigger('dialogButtonsChange');
         })
           .trigger('change');
       });
-
-    }
+    },
   };
 
   /**
@@ -1167,26 +1160,25 @@
    *   Attaches behavior for the remove view and remove display links.
    */
   Drupal.behaviors.viewsUiHandlerRemoveLink = {
-    attach: function (context) {
-      var $context = $(context);
+    attach(context) {
+      const $context = $(context);
       // Handle handler deletion by looking for the hidden checkbox and hiding
       // the row.
       $context.find('a.views-remove-link').once('views').on('click', function (event) {
-        var id = $(this).attr('id').replace('views-remove-link-', '');
-        $context.find('#views-row-' + id).hide();
-        $context.find('#views-removed-' + id).prop('checked', true);
+        const id = $(this).attr('id').replace('views-remove-link-', '');
+        $context.find(`#views-row-${id}`).hide();
+        $context.find(`#views-removed-${id}`).prop('checked', true);
         event.preventDefault();
       });
 
       // Handle display deletion by looking for the hidden checkbox and hiding
       // the row.
       $context.find('a.display-remove-link').once('display').on('click', function (event) {
-        var id = $(this).attr('id').replace('display-remove-link-', '');
-        $context.find('#display-row-' + id).hide();
-        $context.find('#display-removed-' + id).prop('checked', true);
+        const id = $(this).attr('id').replace('display-remove-link-', '');
+        $context.find(`#display-row-${id}`).hide();
+        $context.find(`#display-removed-${id}`).prop('checked', true);
         event.preventDefault();
       });
-    }
+    },
   };
-
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/views_ui/js/views_ui.listing.es6.js b/core/modules/views_ui/js/views_ui.listing.es6.js
index 7d19cd498d..61a66661e7 100644
--- a/core/modules/views_ui/js/views_ui.listing.es6.js
+++ b/core/modules/views_ui/js/views_ui.listing.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Filters the view listing tables by a text input search string.
    *
@@ -20,18 +17,18 @@
    *   Attaches the filter functionality to the views admin text search field.
    */
   Drupal.behaviors.viewTableFilterByText = {
-    attach: function (context, settings) {
-      var $input = $('input.views-filter-text').once('views-filter-text');
-      var $table = $($input.attr('data-table'));
-      var $rows;
+    attach(context, settings) {
+      const $input = $('input.views-filter-text').once('views-filter-text');
+      const $table = $($input.attr('data-table'));
+      let $rows;
 
       function filterViewList(e) {
-        var query = $(e.target).val().toLowerCase();
+        const query = $(e.target).val().toLowerCase();
 
         function showViewRow(index, row) {
-          var $row = $(row);
-          var $sources = $row.find('[data-drupal-selector="views-table-filter-text-source"]');
-          var textMatch = $sources.text().toLowerCase().indexOf(query) !== -1;
+          const $row = $(row);
+          const $sources = $row.find('[data-drupal-selector="views-table-filter-text-source"]');
+          const textMatch = $sources.text().toLowerCase().indexOf(query) !== -1;
           $row.closest('tr').toggle(textMatch);
         }
 
@@ -48,7 +45,6 @@
         $rows = $table.find('tbody tr');
         $input.on('keyup', filterViewList);
       }
-    }
+    },
   };
-
 }(jQuery, Drupal));
diff --git a/core/themes/bartik/color/preview.es6.js b/core/themes/bartik/color/preview.es6.js
index da8e0ca4e0..90d3b421cb 100644
--- a/core/themes/bartik/color/preview.es6.js
+++ b/core/themes/bartik/color/preview.es6.js
@@ -3,12 +3,9 @@
  * Preview for the Bartik theme.
  */
 (function ($, Drupal, drupalSettings) {
-
-  'use strict';
-
   Drupal.color = {
     logoChanged: false,
-    callback: function (context, settings, $form) {
+    callback(context, settings, $form) {
       // Change the logo to be the real one.
       if (!this.logoChanged) {
         $('.color-preview .color-preview-logo img').attr('src', drupalSettings.color.logo);
@@ -19,8 +16,8 @@
         $('div').remove('.color-preview-logo');
       }
 
-      var $colorPreview = $form.find('.color-preview');
-      var $colorPalette = $form.find('.js-color-palette');
+      const $colorPreview = $form.find('.color-preview');
+      const $colorPalette = $form.find('.js-color-palette');
 
       // Solid background.
       $colorPreview.css('backgroundColor', $colorPalette.find('input[name="palette[bg]"]').val());
@@ -30,7 +27,7 @@
       $colorPreview.find('.color-preview-content a').css('color', $colorPalette.find('input[name="palette[link]"]').val());
 
       // Sidebar block.
-      var $colorPreviewBlock = $colorPreview.find('.color-preview-sidebar .color-preview-block');
+      const $colorPreviewBlock = $colorPreview.find('.color-preview-sidebar .color-preview-block');
       $colorPreviewBlock.css('background-color', $colorPalette.find('input[name="palette[sidebar]"]').val());
       $colorPreviewBlock.css('border-color', $colorPalette.find('input[name="palette[sidebarborders]"]').val());
 
@@ -38,12 +35,12 @@
       $colorPreview.find('.color-preview-footer-wrapper').css('background-color', $colorPalette.find('input[name="palette[footer]"]').val());
 
       // CSS3 Gradients.
-      var gradient_start = $colorPalette.find('input[name="palette[top]"]').val();
-      var gradient_end = $colorPalette.find('input[name="palette[bottom]"]').val();
+      const gradient_start = $colorPalette.find('input[name="palette[top]"]').val();
+      const gradient_end = $colorPalette.find('input[name="palette[bottom]"]').val();
 
-      $colorPreview.find('.color-preview-header').attr('style', 'background-color: ' + gradient_start + '; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(' + gradient_start + '), to(' + gradient_end + ')); background-image: -moz-linear-gradient(-90deg, ' + gradient_start + ', ' + gradient_end + ');');
+      $colorPreview.find('.color-preview-header').attr('style', `background-color: ${gradient_start}; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(${gradient_start}), to(${gradient_end})); background-image: -moz-linear-gradient(-90deg, ${gradient_start}, ${gradient_end});`);
 
       $colorPreview.find('.color-preview-site-name').css('color', $colorPalette.find('input[name="palette[titleslogan]"]').val());
-    }
+    },
   };
-})(jQuery, Drupal, drupalSettings);
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/themes/seven/js/mobile.install.es6.js b/core/themes/seven/js/mobile.install.es6.js
index e7a0b5c18a..26271c0f7d 100644
--- a/core/themes/seven/js/mobile.install.es6.js
+++ b/core/themes/seven/js/mobile.install.es6.js
@@ -1,9 +1,6 @@
 (function () {
-
-  'use strict';
-
   function findActiveStep(steps) {
-    for (var i = 0; i < steps.length; i++) {
+    for (let i = 0; i < steps.length; i++) {
       if (steps[i].className === 'is-active') {
         return i + 1;
       }
@@ -16,12 +13,12 @@
   }
 
   function installStepsSetup() {
-    var steps = document.querySelectorAll('.task-list li');
+    const steps = document.querySelectorAll('.task-list li');
     if (steps.length) {
-      var header = document.querySelector('header[role="banner"]');
-      var stepIndicator = document.createElement('div');
+      const header = document.querySelector('header[role="banner"]');
+      const stepIndicator = document.createElement('div');
       stepIndicator.className = 'step-indicator';
-      stepIndicator.innerHTML = findActiveStep(steps) + '/' + steps.length;
+      stepIndicator.innerHTML = `${findActiveStep(steps)}/${steps.length}`;
       header.appendChild(stepIndicator);
     }
   }
@@ -29,5 +26,4 @@
   if (document.addEventListener) {
     document.addEventListener('DOMContentLoaded', installStepsSetup);
   }
-
-})();
+}());
diff --git a/core/themes/seven/js/nav-tabs.es6.js b/core/themes/seven/js/nav-tabs.es6.js
index ba44ffb944..cd44775808 100644
--- a/core/themes/seven/js/nav-tabs.es6.js
+++ b/core/themes/seven/js/nav-tabs.es6.js
@@ -6,13 +6,10 @@
  * added to the main element, and a target element is included.
  */
 (function ($, Drupal) {
-
-  'use strict';
-
   function init(i, tab) {
-    var $tab = $(tab);
-    var $target = $tab.find('[data-drupal-nav-tabs-target]');
-    var isCollapsible = $tab.hasClass('is-collapsible');
+    const $tab = $(tab);
+    const $target = $tab.find('[data-drupal-nav-tabs-target]');
+    const isCollapsible = $tab.hasClass('is-collapsible');
 
     function openMenu(e) {
       $target.toggleClass('is-open');
@@ -20,8 +17,8 @@
 
     function handleResize(e) {
       $tab.addClass('is-horizontal');
-      var $tabs = $tab.find('.tabs');
-      var isHorizontal = $tabs.outerHeight() <= $tabs.find('.tabs__tab').outerHeight();
+      const $tabs = $tab.find('.tabs');
+      const isHorizontal = $tabs.outerHeight() <= $tabs.find('.tabs__tab').outerHeight();
       $tab.toggleClass('is-horizontal', isHorizontal);
       if (isCollapsible) {
         $tab.toggleClass('is-collapse-enabled', !isHorizontal);
@@ -41,15 +38,14 @@
    * Initialise the tabs JS.
    */
   Drupal.behaviors.navTabs = {
-    attach: function (context, settings) {
-      var $tabs = $(context).find('[data-drupal-nav-tabs]');
+    attach(context, settings) {
+      const $tabs = $(context).find('[data-drupal-nav-tabs]');
       if ($tabs.length) {
-        var notSmartPhone = window.matchMedia('(min-width: 300px)');
+        const notSmartPhone = window.matchMedia('(min-width: 300px)');
         if (notSmartPhone.matches) {
           $tabs.once('nav-tabs').each(init);
         }
       }
-    }
+    },
   };
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
diff --git a/core/themes/seven/js/responsive-details.es6.js b/core/themes/seven/js/responsive-details.es6.js
index 8fdb4530f3..d3cf6ccb3e 100644
--- a/core/themes/seven/js/responsive-details.es6.js
+++ b/core/themes/seven/js/responsive-details.es6.js
@@ -4,9 +4,6 @@
  */
 
 (function ($, Drupal) {
-
-  'use strict';
-
   /**
    * Initializes the responsive behaviors for details elements.
    *
@@ -16,8 +13,8 @@
    *   Attaches the responsive behavior to status report specific details elements.
    */
   Drupal.behaviors.responsiveDetails = {
-    attach: function (context) {
-      var $details = $(context).find('details').once('responsive-details');
+    attach(context) {
+      const $details = $(context).find('details').once('responsive-details');
 
       if (!$details.length) {
         return;
@@ -31,7 +28,7 @@
         }
         else {
           // If user explicitly opened one, leave it alone.
-          var $notPressed = $details
+          const $notPressed = $details
             .find('> summary[aria-pressed!=true]')
             .attr('aria-expanded', false);
           $notPressed
@@ -47,11 +44,9 @@
       }
 
       var $summaries = $details.find('> summary');
-      var mql = window.matchMedia('(min-width:48em)');
+      const mql = window.matchMedia('(min-width:48em)');
       mql.addListener(handleDetailsMQ);
       detailsToggle(mql.matches);
-    }
+    },
   };
-
-
-})(jQuery, Drupal);
+}(jQuery, Drupal));
