diff options
author | brion <brion@smidge.(none)> | 2009-08-08 17:54:57 -0700 |
---|---|---|
committer | Craig Andrews <candrews@integralblue.com> | 2009-08-08 21:50:31 -0400 |
commit | c6d2e54a7159174736f0184b7b9bc8b7e08bb9df (patch) | |
tree | 8d64c8a34b11aec47069115c532e56cad71a06a2 | |
parent | fe3ce5b6c4369584e96d5d6f78c7cfd85271744e (diff) |
Throttles updating of the character counter to reduce the performance impact on typing, especially on slower devices (mobiles, netbooks).
http://laconi.ca/trac/ticket/1462
-rw-r--r-- | js/util.js | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/js/util.js b/js/util.js index 0ffa92ca9..440701937 100644 --- a/js/util.js +++ b/js/util.js @@ -17,21 +17,41 @@ */ $(document).ready(function(){ + var counterBlackout = false; + // count character on keyup function counter(event){ var maxLength = 140; var currentLength = $("#notice_data-text").val().length; var remaining = maxLength - currentLength; var counter = $("#notice_text-count"); - if (counter.text() != String(remaining)) { - counter.text(remaining); - } + + if (remaining.toString() != counter.text()) { + if (!counterBlackout || remaining == 0) { + if (counter.text() != String(remaining)) { + counter.text(remaining); + } - if (remaining < 0) { - $("#form_notice").addClass("warning"); - } else { - $("#form_notice").removeClass("warning"); - } + if (remaining < 0) { + $("#form_notice").addClass("warning"); + } else { + $("#form_notice").removeClass("warning"); + } + // Skip updates for the next 500ms. + // On slower hardware, updating on every keypress is unpleasant. + if (!counterBlackout) { + counterBlackout = true; + window.setTimeout(clearCounterBlackout, 500); + } + } + } + } + + function clearCounterBlackout() { + // Allow keyup events to poke the counter again + counterBlackout = false; + // Check if the string changed since we last looked + counter(null); } function submitonreturn(event) { |