diff --git a/core/modules/views/js/ajax_view.js b/core/modules/views/js/ajax_view.js index 95a803d7fe..5ee2e8ca2a 100644 --- a/core/modules/views/js/ajax_view.js +++ b/core/modules/views/js/ajax_view.js @@ -11,8 +11,9 @@ 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.views.sortByNestingLevel(settings.views.ajaxViews).forEach(function (item) { + Drupal.views.instances[item.key] = new Drupal.views.ajaxView(item.value); + }); } }; @@ -36,9 +37,28 @@ Drupal.views.instances = {}; + Drupal.views.sortByNestingLevel = function (ajaxViews) { + var ajaxViewsArray = []; + + for (var i in ajaxViews) { + if (ajaxViews.hasOwnProperty(i)) { + ajaxViews[i].selector = '.js-view-dom-id-' + ajaxViews[i].view_dom_id; + + ajaxViewsArray.push({ + key: i, + value: ajaxViews[i], + nestingLevel: $(ajaxViews[i].selector).parents('.view').length + }); + } + } + return ajaxViewsArray.sort(function (a, b) { + return b.nestingLevel - a.nestingLevel; + }); + }; + Drupal.views.ajaxView = function (settings) { var selector = '.js-view-dom-id-' + settings.view_dom_id; - this.$view = $(selector); + this.$view = $(settings.selector); var ajaxPath = drupalSettings.views.ajax_path; @@ -59,7 +79,7 @@ submit: settings, setClick: true, event: 'click', - selector: selector, + selector: settings.selector, progress: { type: 'fullscreen' } }; @@ -68,7 +88,7 @@ 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)); - this.$view.filter($.proxy(this.filterNestedViews, this)).once('ajax-pager').each($.proxy(this.attachPagerAjax, this)); + this.$view.once('ajax-pager').each($.proxy(this.attachPagerAjax, this)); var selfSettings = $.extend({}, this.element_settings, { event: 'RefreshView', @@ -91,12 +111,8 @@ }); }; - Drupal.views.ajaxView.prototype.filterNestedViews = function () { - return !this.$view.parents('.view').length; - }; - Drupal.views.ajaxView.prototype.attachPagerAjax = function () { - this.$view.find('ul.js-pager__items > li > a, th.views-field a, .attachment .views-summary a').each($.proxy(this.attachPagerLinkAjax, this)); + this.$view.find('ul.js-pager__items > li > a, th.views-field a, .attachment .views-summary a').once('attach-pager-ajax').each($.proxy(this.attachPagerLinkAjax, this)); }; Drupal.views.ajaxView.prototype.attachPagerLinkAjax = function (id, link) {