diff options
Diffstat (limited to 'js/AppBase.js')
-rw-r--r-- | js/AppBase.js | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/js/AppBase.js b/js/AppBase.js index 86cc44e8a..49d276341 100644 --- a/js/AppBase.js +++ b/js/AppBase.js @@ -7,6 +7,33 @@ define(["dojo/_base/declare"], function (declare) { hotkey_prefix: 0, hotkey_prefix_pressed: false, hotkey_prefix_timeout: 0, + Scrollable: { + scrollByPages: function (elem, page_offset, event) { + if (!elem) return; + + /* keep a line or so from the previous page */ + const offset = (elem.offsetHeight - (page_offset > 0 ? 50 : -50)) * page_offset; + + this.scroll(elem, offset, event); + }, + scroll: function(elem, offset, event) { + if (!elem) return; + + if (event && event.repeat) { + elem.addClassName("forbid-smooth-scroll"); + window.clearTimeout(this._scroll_reset_timeout); + + this._scroll_reset_timeout = window.setTimeout(() => { + if (elem) elem.removeClassName("forbid-smooth-scroll"); + }, 250) + + } else { + elem.removeClassName("forbid-smooth-scroll"); + } + + elem.scrollTop += offset; + }, + }, constructor: function() { window.onerror = this.Error.onWindowError; }, |