diff -u b/js/infinite-scroll.behaviors.js b/js/infinite-scroll.behaviors.js --- b/js/infinite-scroll.behaviors.js +++ b/js/infinite-scroll.behaviors.js @@ -9,12 +9,6 @@ return performance.navigation.type === performance.navigation.TYPE_BACK_FORWARD; } - function getDomViewIdFromDom(viewId, viewDisplay) { - var viewSelector = $('div.view-id-' + viewId + '.view-display-id-' + viewDisplay); - var matches = /(js-view-dom-id-\w+)/.exec(viewSelector.attr('class')); - return matches[1].replace('js-view-dom-id-', ''); - } - function getSessionStorageId(viewId, viewDisplay, domViewId) { return "viewPreviousData_"+viewId+"_"+viewDisplay+"_"+domViewId; } @@ -37,40 +31,39 @@ Drupal.behaviors.ViewsInfiniteScrollHistory = { attach: function (context, settings) { - $('body', context).children().find("div[class*=view-id-]").once('attachBehaviors').each(function () { - if (!window.performance) return; - var pagerSelector = '[data-drupal-views-infinite-scroll-pager]'; - var viewId = /view-id-(\w+)/.exec($(this).attr('class'))[1]; - var viewDisplay = /view-display-id-(\w+)/.exec($(this).attr('class'))[1]; - var domViewId = getDomViewIdFromDom(viewId, viewDisplay); - var view = Drupal.views.instances['views_dom_id:'+domViewId]; - var sessionStorageId = getSessionStorageId(viewId, viewDisplay, domViewId); - - if (!hasDataInSessionStorage(sessionStorageId)) { - return; - } - - if (!backButtonPressed()) { - emptySessionStorage(sessionStorageId); - return; - } - - var $existingPager = view.$view.find(pagerSelector); - var data = getDataFromSessionStorage(sessionStorageId); - var selector = $('.view-id-'+viewId+'.view-display-id-'+viewDisplay+'.js-view-dom-id-'+domViewId+' > .view-content > .views-infinite-scroll-content-wrapper'); - var decodedContent = htmlDecode(data.articles); - $(selector, context).append(decodedContent); - $existingPager.once('pagerReplaced').each(function(){ - var decodedPager = htmlDecode(data.pager); - $existingPager.html(decodedPager); - view.$view.removeOnce('ajax-pager'); - view.$exposed_form.removeOnce('exposed-form'); - $existingPager.removeOnce('infinite-scroll'); - - // Process each view. - Drupal.behaviors.ViewsAjaxView.attach(view.settings); + for (var key in settings.views.ajaxViews) { + var viewSettings = settings.views.ajaxViews[key]; + $('.js-view-dom-id-' + viewSettings.view_dom_id).once('vis-history').each(function () { + if (!window.performance) return; + var pagerSelector = '[data-drupal-views-infinite-scroll-pager]'; + var sessionStorageId = getSessionStorageId(viewSettings.view_name, viewSettings.view_display_id, viewSettings.view_dom_id); + + if (!hasDataInSessionStorage(sessionStorageId)) { + return; + } + + if (!backButtonPressed()) { + emptySessionStorage(sessionStorageId); + return; + } + + var view = Drupal.views.instances['views_dom_id:' + viewSettings.view_dom_id]; + var $existingPager = view.$view.find(pagerSelector); + var data = getDataFromSessionStorage(sessionStorageId); + var decodedContent = htmlDecode(data.articles); + $('.views-infinite-scroll-content-wrapper', this).append(decodedContent); + $existingPager.once('pagerReplaced').each(function(){ + var decodedPager = htmlDecode(data.pager); + $existingPager.html(decodedPager); + view.$view.removeOnce('ajax-pager'); + view.$exposed_form.removeOnce('exposed-form'); + $existingPager.removeOnce('infinite-scroll'); + + // Process each view. + Drupal.behaviors.ViewsAjaxView.attach(view.settings); + }); }); - }); + } } }; })(jQuery, Drupal);