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.