X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fviews%2Fjs%2Fajax_view.js;h=95a803d7fec8ab22d42b8a87704f6a5f557318f2;hb=5b8bb166bfa98770daef9de5c127fc2e6ef02340;hp=67601a121feae40b4d91e8639ca402b2b1b729cf;hpb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;p=yaffs-website diff --git a/web/core/modules/views/js/ajax_view.js b/web/core/modules/views/js/ajax_view.js index 67601a121..95a803d7f 100644 --- a/web/core/modules/views/js/ajax_view.js +++ b/web/core/modules/views/js/ajax_view.js @@ -7,13 +7,27 @@ (function ($, Drupal, drupalSettings) { 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) { - if (ajaxViews.hasOwnProperty(i)) { - Drupal.views.instances[i] = new Drupal.views.ajaxView(ajaxViews[i]); - } + Drupal.behaviors.ViewsAjaxView.attach = function (context, settings) { + if (settings && settings.views && settings.views.ajaxViews) { + var ajaxViews = settings.views.ajaxViews; + + Object.keys(ajaxViews || {}).forEach(function (i) { + Drupal.views.instances[i] = new Drupal.views.ajaxView(ajaxViews[i]); + }); + } + }; + Drupal.behaviors.ViewsAjaxView.detach = function (context, settings, trigger) { + if (trigger === 'unload') { + if (settings && settings.views && settings.views.ajaxViews) { + var ajaxViews = settings.views.ajaxViews; + + Object.keys(ajaxViews || {}).forEach(function (i) { + var selector = '.js-view-dom-id-' + ajaxViews[i].view_dom_id; + if ($(selector, context).length) { + delete Drupal.views.instances[i]; + delete settings.views.ajaxViews[i]; + } + }); } } }; @@ -26,22 +40,22 @@ var selector = '.js-view-dom-id-' + settings.view_dom_id; this.$view = $(selector); - var ajax_path = drupalSettings.views.ajax_path; + var ajaxPath = drupalSettings.views.ajax_path; - if (ajax_path.constructor.toString().indexOf('Array') !== -1) { - ajax_path = ajax_path[0]; + if (ajaxPath.constructor.toString().indexOf('Array') !== -1) { + ajaxPath = ajaxPath[0]; } var queryString = window.location.search || ''; if (queryString !== '') { queryString = queryString.slice(1).replace(/q=[^&]+&?|&?render=[^&]+/, ''); if (queryString !== '') { - queryString = (/\?/.test(ajax_path) ? '&' : '?') + queryString; + queryString = (/\?/.test(ajaxPath) ? '&' : '?') + queryString; } } this.element_settings = { - url: ajax_path + queryString, + url: ajaxPath + queryString, submit: settings, setClick: true, event: 'click', @@ -56,12 +70,12 @@ this.$view.filter($.proxy(this.filterNestedViews, this)).once('ajax-pager').each($.proxy(this.attachPagerAjax, this)); - var self_settings = $.extend({}, this.element_settings, { + var selfSettings = $.extend({}, this.element_settings, { event: 'RefreshView', base: this.selector, element: this.$view.get(0) }); - this.refreshViewAjax = Drupal.ajax(self_settings); + this.refreshViewAjax = Drupal.ajax(selfSettings); }; Drupal.views.ajaxView.prototype.attachExposedFormAjax = function () { @@ -69,11 +83,11 @@ this.exposedFormAjax = []; $('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, { + var selfSettings = $.extend({}, that.element_settings, { base: $(this).attr('id'), element: this }); - that.exposedFormAjax[index] = Drupal.ajax(self_settings); + that.exposedFormAjax[index] = Drupal.ajax(selfSettings); }); }; @@ -92,12 +106,12 @@ $.extend(viewData, this.settings, Drupal.Views.parseQueryString(href), Drupal.Views.parseViewArgs(href, this.settings.view_base_path)); - var self_settings = $.extend({}, this.element_settings, { + var selfSettings = $.extend({}, this.element_settings, { submit: viewData, base: false, element: link }); - this.pagerAjax = Drupal.ajax(self_settings); + this.pagerAjax = Drupal.ajax(selfSettings); }; Drupal.AjaxCommands.prototype.viewsScrollTop = function (ajax, response) {