diff --git a/imp/docs/CHANGES b/imp/docs/CHANGES index 1b4dbf09f50..97c2b47ee78 100644 --- a/imp/docs/CHANGES +++ b/imp/docs/CHANGES @@ -2,6 +2,8 @@ v6.3.0-git ---------- +[mms] Throttle message list keypresses in dynamic view to prevent avalanche of + preview requests sent to server (Request #13574). [mms] Filter out relative image URLs in HTML message data. [mms] Implement lazy loading for images in HTML messages. [mms] Add 'dynamic_prefs' hook to allow for changing of default values for diff --git a/imp/js/dimpbase.js b/imp/js/dimpbase.js index d3a2ffba403..a0c3711d698 100644 --- a/imp/js/dimpbase.js +++ b/imp/js/dimpbase.js @@ -14,6 +14,7 @@ var DimpBase = { // flist, INBOX: 'SU5CT1g', // 'INBOX' base64url encoded // init, + // is_keydown, mboxDragConfig: { classname: 'mboxdrag', ghosting: true, @@ -187,7 +188,7 @@ var DimpBase = { row_data = row.get('dataob').first(); if (!curr_row || row_data.VP_id != curr_row.VP_id) { this.viewport.scrollTo(row_data.VP_rownum, { bottom: bottom }); - this.viewport.select(row, { delay: 0.5 }); + this.viewport.select(row); } } else if (curr) { this.rownum = curr; @@ -1731,7 +1732,8 @@ var DimpBase = { var curr, last, p, peek, pp_uid, rows, tmp, msgload = {}; - if (!DimpCore.getPref('preview')) { + if (this.is_keydown || + !DimpCore.getPref('preview')) { return; } @@ -2584,6 +2586,8 @@ var DimpBase = { sel = this.viewport.getSelected(); + this.is_keydown = true; + switch (kc) { case Event.KEY_DELETE: case Event.KEY_BACKSPACE: @@ -2760,6 +2764,29 @@ var DimpBase = { } }, + keyupHandler: function(e) + { + if (!this.is_keydown) { + return; + + } + + this.is_keydown = false; + + switch (e.keyCode || e.charCode) { + case Event.KEY_UP: + case Event.KEY_DOWN: + case Event.KEY_LEFT: + case Event.KEY_RIGHT: + case Event.KEY_PAGEUP: + case Event.KEY_PAGEDOWN: + case Event.KEY_HOME: + case Event.KEY_END: + this.initPreviewPane(); + break; + } + }, + dblclickHandler: function(e) { var elt = e.element(), @@ -4450,6 +4477,7 @@ document.observe('dom:loaded', function() { /* Basic event handlers. */ document.observe('keydown', DimpBase.keydownHandler.bindAsEventListener(DimpBase)); +document.observe('keyup', DimpBase.keyupHandler.bindAsEventListener(DimpBase)); Event.observe(window, 'resize', DimpBase.onResize.bind(DimpBase)); /* Drag/drop listeners. */ diff --git a/imp/package.xml b/imp/package.xml index 38db5aebffa..e32807cf28b 100644 --- a/imp/package.xml +++ b/imp/package.xml @@ -33,6 +33,7 @@ GPL-2.0 +* [mms] Throttle message list keypresses in dynamic view to prevent avalanche of preview requests sent to server (Request #13574). * [mms] Filter out relative image URLs in HTML message data. * [mms] Implement lazy loading for images in HTML messages. * [mms] Add 'dynamic_prefs' hook to allow for changing of default values for browser-based preferences in dynamic view.