Files
zulip/static/js/scroll_util.js
Armaan Ahluwalia 6d255efe4c app: Prepare JS files for consumption by webpack.
This commit prepares the frontend code to be consumed by webpack.

It is a hack: In theory, modules should be declaring and importing the
modules they depend on and the globals they expose directly.

However, that requires significant per-module work, which we don't
really want to block moving our toolchain to webpack on.

So we expose the modules by setting window.varName = varName; as
needed in the js files.
2018-07-05 10:53:36 +02:00

61 lines
1.4 KiB
JavaScript

var scroll_util = (function () {
var exports = {};
exports.scroll_delta = function (opts) {
var elem_top = opts.elem_top;
var container_height = opts.container_height;
var elem_bottom = opts.elem_bottom;
var delta = 0;
if (elem_top < 0) {
delta = Math.max(
elem_top,
elem_bottom - container_height
);
delta = Math.min(0, delta);
} else {
if (elem_bottom > container_height) {
delta = Math.min(
elem_top,
elem_bottom - container_height
);
delta = Math.max(0, delta);
}
}
return delta;
};
exports.scroll_element_into_container = function (elem, container) {
// This does the minimum amount of scrolling that is needed to make
// the element visible. It doesn't try to center the element, so
// this will be non-intrusive to users when they already have
// the element visible.
var elem_top = elem.position().top;
var elem_bottom = elem_top + elem.height();
var opts = {
elem_top: elem_top,
elem_bottom: elem_bottom,
container_height: container.height(),
};
var delta = exports.scroll_delta(opts);
if (delta === 0) {
return;
}
container.scrollTop(container.scrollTop() + delta);
};
return exports;
}());
if (typeof module !== 'undefined') {
module.exports = scroll_util;
}
window.scroll_util = scroll_util;