ajax_view.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /**
  2. * DO NOT EDIT THIS FILE.
  3. * See the following change record for more information,
  4. * https://www.drupal.org/node/2815083
  5. * @preserve
  6. **/
  7. (function ($, Drupal, drupalSettings) {
  8. Drupal.behaviors.ViewsAjaxView = {};
  9. Drupal.behaviors.ViewsAjaxView.attach = function (context, settings) {
  10. if (settings && settings.views && settings.views.ajaxViews) {
  11. var ajaxViews = settings.views.ajaxViews;
  12. Object.keys(ajaxViews || {}).forEach(function (i) {
  13. Drupal.views.instances[i] = new Drupal.views.ajaxView(ajaxViews[i]);
  14. });
  15. }
  16. };
  17. Drupal.behaviors.ViewsAjaxView.detach = function (context, settings, trigger) {
  18. if (trigger === 'unload') {
  19. if (settings && settings.views && settings.views.ajaxViews) {
  20. var ajaxViews = settings.views.ajaxViews;
  21. Object.keys(ajaxViews || {}).forEach(function (i) {
  22. var selector = '.js-view-dom-id-' + ajaxViews[i].view_dom_id;
  23. if ($(selector, context).length) {
  24. delete Drupal.views.instances[i];
  25. delete settings.views.ajaxViews[i];
  26. }
  27. });
  28. }
  29. }
  30. };
  31. Drupal.views = {};
  32. Drupal.views.instances = {};
  33. Drupal.views.ajaxView = function (settings) {
  34. var selector = '.js-view-dom-id-' + settings.view_dom_id;
  35. this.$view = $(selector);
  36. var ajaxPath = drupalSettings.views.ajax_path;
  37. if (ajaxPath.constructor.toString().indexOf('Array') !== -1) {
  38. ajaxPath = ajaxPath[0];
  39. }
  40. var queryString = window.location.search || '';
  41. if (queryString !== '') {
  42. queryString = queryString.slice(1).replace(/q=[^&]+&?|&?render=[^&]+/, '');
  43. if (queryString !== '') {
  44. queryString = (/\?/.test(ajaxPath) ? '&' : '?') + queryString;
  45. }
  46. }
  47. this.element_settings = {
  48. url: ajaxPath + queryString,
  49. submit: settings,
  50. setClick: true,
  51. event: 'click',
  52. selector: selector,
  53. progress: { type: 'fullscreen' }
  54. };
  55. this.settings = settings;
  56. this.$exposed_form = $('form#views-exposed-form-' + settings.view_name.replace(/_/g, '-') + '-' + settings.view_display_id.replace(/_/g, '-'));
  57. this.$exposed_form.once('exposed-form').each($.proxy(this.attachExposedFormAjax, this));
  58. this.$view.filter($.proxy(this.filterNestedViews, this)).once('ajax-pager').each($.proxy(this.attachPagerAjax, this));
  59. var selfSettings = $.extend({}, this.element_settings, {
  60. event: 'RefreshView',
  61. base: this.selector,
  62. element: this.$view.get(0)
  63. });
  64. this.refreshViewAjax = Drupal.ajax(selfSettings);
  65. };
  66. Drupal.views.ajaxView.prototype.attachExposedFormAjax = function () {
  67. var that = this;
  68. this.exposedFormAjax = [];
  69. $('input[type=submit], input[type=image]', this.$exposed_form).not('[data-drupal-selector=edit-reset]').each(function (index) {
  70. var selfSettings = $.extend({}, that.element_settings, {
  71. base: $(this).attr('id'),
  72. element: this
  73. });
  74. that.exposedFormAjax[index] = Drupal.ajax(selfSettings);
  75. });
  76. };
  77. Drupal.views.ajaxView.prototype.filterNestedViews = function () {
  78. return !this.$view.parents('.view').length;
  79. };
  80. Drupal.views.ajaxView.prototype.attachPagerAjax = function () {
  81. this.$view.find('ul.js-pager__items > li > a, th.views-field a, .attachment .views-summary a').each($.proxy(this.attachPagerLinkAjax, this));
  82. };
  83. Drupal.views.ajaxView.prototype.attachPagerLinkAjax = function (id, link) {
  84. var $link = $(link);
  85. var viewData = {};
  86. var href = $link.attr('href');
  87. $.extend(viewData, this.settings, Drupal.Views.parseQueryString(href), Drupal.Views.parseViewArgs(href, this.settings.view_base_path));
  88. var selfSettings = $.extend({}, this.element_settings, {
  89. submit: viewData,
  90. base: false,
  91. element: link
  92. });
  93. this.pagerAjax = Drupal.ajax(selfSettings);
  94. };
  95. Drupal.AjaxCommands.prototype.viewsScrollTop = function (ajax, response) {
  96. var offset = $(response.selector).offset();
  97. var scrollTarget = response.selector;
  98. while ($(scrollTarget).scrollTop() === 0 && $(scrollTarget).parent()) {
  99. scrollTarget = $(scrollTarget).parent();
  100. }
  101. if (offset.top - 10 < $(scrollTarget).scrollTop()) {
  102. $(scrollTarget).animate({ scrollTop: offset.top - 10 }, 500);
  103. }
  104. };
  105. })(jQuery, Drupal, drupalSettings);