42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
/**
|
|
* @file
|
|
* Javascript behaviors for AJAX.
|
|
*/
|
|
|
|
(function ($, Drupal) {
|
|
|
|
'use strict';
|
|
|
|
/**
|
|
* Scroll to top ajax command.
|
|
*
|
|
* @param {Drupal.Ajax} [ajax]
|
|
* A {@link Drupal.ajax} object.
|
|
* @param {object} response
|
|
* Ajax response.
|
|
* @param {string} response.selector
|
|
* Selector to use.
|
|
*
|
|
* @see Drupal.AjaxCommands.prototype.webformScrollTop
|
|
*/
|
|
Drupal.AjaxCommands.prototype.webformScrollTop = function (ajax, response) {
|
|
// Scroll to the top of the view. This will allow users
|
|
// to browse newly loaded content after e.g. clicking a pager
|
|
// link.
|
|
var offset = $(response.selector).offset();
|
|
// We can't guarantee that the scrollable object should be
|
|
// the body, as the view could be embedded in something
|
|
// more complex such as a modal popup. Recurse up the DOM
|
|
// and scroll the first element that has a non-zero top.
|
|
var scrollTarget = response.selector;
|
|
while ($(scrollTarget).scrollTop() === 0 && $(scrollTarget).parent()) {
|
|
scrollTarget = $(scrollTarget).parent();
|
|
}
|
|
// Only scroll upward.
|
|
if (offset.top - 10 < $(scrollTarget).scrollTop()) {
|
|
$(scrollTarget).animate({scrollTop: (offset.top - 10)}, 500);
|
|
}
|
|
};
|
|
|
|
})(jQuery, Drupal);
|