Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / misc / ajax.js
index 5ea52425be535f60eed577430a0d49f01ce96b6f..58759ac7a09ba378f8f119d1939dc60e438f81a5 100644 (file)
@@ -10,55 +10,37 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
   Drupal.behaviors.AJAX = {
     attach: function attach(context, settings) {
       function loadAjaxBehavior(base) {
-        var element_settings = settings.ajax[base];
-        if (typeof element_settings.selector === 'undefined') {
-          element_settings.selector = '#' + base;
+        var elementSettings = settings.ajax[base];
+        if (typeof elementSettings.selector === 'undefined') {
+          elementSettings.selector = '#' + base;
         }
-        $(element_settings.selector).once('drupal-ajax').each(function () {
-          element_settings.element = this;
-          element_settings.base = base;
-          Drupal.ajax(element_settings);
+        $(elementSettings.selector).once('drupal-ajax').each(function () {
+          elementSettings.element = this;
+          elementSettings.base = base;
+          Drupal.ajax(elementSettings);
         });
       }
 
-      for (var base in settings.ajax) {
-        if (settings.ajax.hasOwnProperty(base)) {
-          loadAjaxBehavior(base);
-        }
-      }
-
-      $('.use-ajax').once('ajax').each(function () {
-        var element_settings = {};
-
-        element_settings.progress = { type: 'throbber' };
-
-        var href = $(this).attr('href');
-        if (href) {
-          element_settings.url = href;
-          element_settings.event = 'click';
-        }
-        element_settings.dialogType = $(this).data('dialog-type');
-        element_settings.dialogRenderer = $(this).data('dialog-renderer');
-        element_settings.dialog = $(this).data('dialog-options');
-        element_settings.base = $(this).attr('id');
-        element_settings.element = this;
-        Drupal.ajax(element_settings);
+      Object.keys(settings.ajax || {}).forEach(function (base) {
+        return loadAjaxBehavior(base);
       });
 
+      Drupal.ajax.bindAjaxLinks(document.body);
+
       $('.use-ajax-submit').once('ajax').each(function () {
-        var element_settings = {};
+        var elementSettings = {};
 
-        element_settings.url = $(this.form).attr('action');
+        elementSettings.url = $(this.form).attr('action');
 
-        element_settings.setClick = true;
+        elementSettings.setClick = true;
 
-        element_settings.event = 'click';
+        elementSettings.event = 'click';
 
-        element_settings.progress = { type: 'throbber' };
-        element_settings.base = $(this).attr('id');
-        element_settings.element = this;
+        elementSettings.progress = { type: 'throbber' };
+        elementSettings.base = $(this).attr('id');
+        elementSettings.element = this;
 
-        Drupal.ajax(element_settings);
+        Drupal.ajax(elementSettings);
       });
     },
     detach: function detach(context, settings, trigger) {
@@ -73,16 +55,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
   Drupal.AjaxError = function (xmlhttp, uri, customMessage) {
     var statusCode = void 0;
     var statusText = void 0;
-    var pathText = void 0;
     var responseText = void 0;
-    var readyStateText = void 0;
     if (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('Debugging information follows.');
-    pathText = '\n' + Drupal.t('Path: !uri', { '!uri': uri });
+    var pathText = '\n' + Drupal.t('Path: !uri', { '!uri': uri });
     statusText = '';
 
     try {
@@ -98,7 +78,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
     responseText = responseText.replace(/<("[^"]*"|'[^']*'|[^'">])*>/gi, '');
     responseText = responseText.replace(/[\n]+\s+/g, '\n');
 
-    readyStateText = xmlhttp.status === 0 ? '\n' + Drupal.t('ReadyState: !readyState', { '!readyState': xmlhttp.readyState }) : '';
+    var readyStateText = xmlhttp.status === 0 ? '\n' + Drupal.t('ReadyState: !readyState', { '!readyState': xmlhttp.readyState }) : '';
 
     customMessage = customMessage ? '\n' + Drupal.t('CustomMessage: !customMessage', { '!customMessage': customMessage }) : '';
 
@@ -139,7 +119,29 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
     });
   };
 
-  Drupal.Ajax = function (base, element, element_settings) {
+  Drupal.ajax.bindAjaxLinks = function (element) {
+    $(element).find('.use-ajax').once('ajax').each(function (i, ajaxLink) {
+      var $linkElement = $(ajaxLink);
+
+      var elementSettings = {
+        progress: { type: 'throbber' },
+        dialogType: $linkElement.data('dialog-type'),
+        dialog: $linkElement.data('dialog-options'),
+        dialogRenderer: $linkElement.data('dialog-renderer'),
+        base: $linkElement.attr('id'),
+        element: ajaxLink
+      };
+      var href = $linkElement.attr('href');
+
+      if (href) {
+        elementSettings.url = href;
+        elementSettings.event = 'click';
+      }
+      Drupal.ajax(elementSettings);
+    });
+  };
+
+  Drupal.Ajax = function (base, element, elementSettings) {
     var defaults = {
       event: element ? 'mousedown' : null,
       keypress: true,
@@ -156,7 +158,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
       }
     };
 
-    $.extend(this, defaults, element_settings);
+    $.extend(this, defaults, elementSettings);
 
     this.commands = new Drupal.AjaxCommands();
 
@@ -168,7 +170,9 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
 
     this.element = element;
 
-    this.element_settings = element_settings;
+    this.element_settings = elementSettings;
+
+    this.elementSettings = elementSettings;
 
     if (this.element && this.element.form) {
       this.$form = $(this.element.form);
@@ -196,12 +200,12 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
     ajax.options = {
       url: ajax.url,
       data: ajax.submit,
-      beforeSerialize: function beforeSerialize(element_settings, options) {
-        return ajax.beforeSerialize(element_settings, options);
+      beforeSerialize: function beforeSerialize(elementSettings, options) {
+        return ajax.beforeSerialize(elementSettings, options);
       },
-      beforeSubmit: function beforeSubmit(form_values, element_settings, options) {
+      beforeSubmit: function beforeSubmit(formValues, elementSettings, options) {
         ajax.ajaxing = true;
-        return ajax.beforeSubmit(form_values, element_settings, options);
+        return ajax.beforeSubmit(formValues, elementSettings, options);
       },
       beforeSend: function beforeSend(xmlhttprequest, options) {
         ajax.ajaxing = true;
@@ -232,8 +236,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
       type: 'POST'
     };
 
-    if (element_settings.dialog) {
-      ajax.options.data.dialogOptions = element_settings.dialog;
+    if (elementSettings.dialog) {
+      ajax.options.data.dialogOptions = elementSettings.dialog;
     }
 
     if (ajax.options.url.indexOf('?') === -1) {
@@ -242,27 +246,27 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
       ajax.options.url += '&';
     }
 
-    var wrapper = 'drupal_' + (element_settings.dialogType || 'ajax');
-    if (element_settings.dialogRenderer) {
-      wrapper += '.' + element_settings.dialogRenderer;
+    var wrapper = 'drupal_' + (elementSettings.dialogType || 'ajax');
+    if (elementSettings.dialogRenderer) {
+      wrapper += '.' + elementSettings.dialogRenderer;
     }
     ajax.options.url += Drupal.ajax.WRAPPER_FORMAT + '=' + wrapper;
 
-    $(ajax.element).on(element_settings.event, function (event) {
+    $(ajax.element).on(elementSettings.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 }));
       }
       return ajax.eventResponse(this, event);
     });
 
-    if (element_settings.keypress) {
+    if (elementSettings.keypress) {
       $(ajax.element).on('keypress', function (event) {
         return ajax.keypressResponse(this, event);
       });
     }
 
-    if (element_settings.prevent) {
-      $(ajax.element).on(element_settings.prevent, false);
+    if (elementSettings.prevent) {
+      $(ajax.element).on(elementSettings.prevent, false);
     }
   };
 
@@ -293,7 +297,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
     if (event.which === 13 || event.which === 32 && element.type !== 'text' && element.type !== 'textarea' && element.type !== 'tel' && element.type !== 'number') {
       event.preventDefault();
       event.stopPropagation();
-      $(element).trigger(ajax.element_settings.event);
+      $(element).trigger(ajax.elementSettings.event);
     }
   };
 
@@ -338,7 +342,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
     options.data['ajax_page_state[libraries]'] = pageState.libraries;
   };
 
-  Drupal.Ajax.prototype.beforeSubmit = function (form_values, element, options) {};
+  Drupal.Ajax.prototype.beforeSubmit = function (formValues, element, options) {};
 
   Drupal.Ajax.prototype.beforeSend = function (xmlhttprequest, options) {
     if (this.$form) {
@@ -391,6 +395,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
   };
 
   Drupal.Ajax.prototype.success = function (response, status) {
+    var _this = this;
+
     if (this.progress.element) {
       $(this.progress.element).remove();
     }
@@ -402,14 +408,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
     var elementParents = $(this.element).parents('[data-drupal-selector]').addBack().toArray();
 
     var focusChanged = false;
-    for (var i in response) {
-      if (response.hasOwnProperty(i) && response[i].command && this.commands[response[i].command]) {
-        this.commands[response[i].command](this, response[i], status);
+    Object.keys(response || {}).forEach(function (i) {
+      if (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') {
           focusChanged = true;
         }
       }
-    }
+    });
 
     if (!focusChanged && this.element && !$(this.element).data('disable-refocus')) {
       var target = false;
@@ -480,11 +486,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
       var effect = ajax.getEffect(response);
       var settings = void 0;
 
-      var $new_content_wrapped = $('<div></div>').html(response.data);
-      var $new_content = $new_content_wrapped.contents();
+      var $newContentWrapped = $('<div></div>').html(response.data);
+      var $newContent = $newContentWrapped.contents();
 
-      if ($new_content.length !== 1 || $new_content.get(0).nodeType !== 1) {
-        $new_content = $new_content_wrapped;
+      if ($newContent.length !== 1 || $newContent.get(0).nodeType !== 1) {
+        $newContent = $newContentWrapped;
       }
 
       switch (method) {
@@ -497,23 +503,23 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
           Drupal.detachBehaviors($wrapper.get(0), settings);
       }
 
-      $wrapper[method]($new_content);
+      $wrapper[method]($newContent);
 
       if (effect.showEffect !== 'show') {
-        $new_content.hide();
+        $newContent.hide();
       }
 
-      if ($new_content.find('.ajax-new-content').length > 0) {
-        $new_content.find('.ajax-new-content').hide();
-        $new_content.show();
-        $new_content.find('.ajax-new-content')[effect.showEffect](effect.showSpeed);
+      if ($newContent.find('.ajax-new-content').length > 0) {
+        $newContent.find('.ajax-new-content').hide();
+        $newContent.show();
+        $newContent.find('.ajax-new-content')[effect.showEffect](effect.showSpeed);
       } else if (effect.showEffect !== 'show') {
-        $new_content[effect.showEffect](effect.showSpeed);
+        $newContent[effect.showEffect](effect.showSpeed);
       }
 
-      if ($new_content.parents('html').length > 0) {
+      if ($newContent.parents('html').length > 0) {
         settings = response.settings || ajax.settings || drupalSettings;
-        Drupal.attachBehaviors($new_content.get(0), settings);
+        Drupal.attachBehaviors($newContent.get(0), settings);
       }
     },
     remove: function remove(ajax, response, status) {