summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrion <brion@smidge.(none)>2009-08-08 17:54:57 -0700
committerCraig Andrews <candrews@integralblue.com>2009-08-08 21:50:31 -0400
commitc6d2e54a7159174736f0184b7b9bc8b7e08bb9df (patch)
tree8d64c8a34b11aec47069115c532e56cad71a06a2
parentfe3ce5b6c4369584e96d5d6f78c7cfd85271744e (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.js36
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) {