Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: Source/devtools/front_end/UIUtils.js

Issue 213833016: DevTools: Fix batch updates dropping methods invocations. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
4 * Copyright (C) 2007 Matt Lilek (pewtermoose@gmail.com). 4 * Copyright (C) 2007 Matt Lilek (pewtermoose@gmail.com).
5 * Copyright (C) 2009 Joseph Pecoraro 5 * Copyright (C) 2009 Joseph Pecoraro
6 * 6 *
7 * Redistribution and use in source and binary forms, with or without 7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions 8 * modification, are permitted provided that the following conditions
9 * are met: 9 * are met:
10 * 10 *
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 var direction = null; 212 var direction = null;
213 if (event.type === "mousewheel") { 213 if (event.type === "mousewheel") {
214 if (event.wheelDeltaY > 0) 214 if (event.wheelDeltaY > 0)
215 direction = "Up"; 215 direction = "Up";
216 else if (event.wheelDeltaY < 0) 216 else if (event.wheelDeltaY < 0)
217 direction = "Down"; 217 direction = "Down";
218 } else { 218 } else {
219 if (event.keyIdentifier === "Up" || event.keyIdentifier === "PageUp") 219 if (event.keyIdentifier === "Up" || event.keyIdentifier === "PageUp")
220 direction = "Up"; 220 direction = "Up";
221 else if (event.keyIdentifier === "Down" || event.keyIdentifier === "Page Down") 221 else if (event.keyIdentifier === "Down" || event.keyIdentifier === "Page Down")
222 direction = "Down"; 222 direction = "Down";
223 } 223 }
224 return direction; 224 return direction;
225 } 225 }
226 226
227 /** 227 /**
228 * @param {string} hexString 228 * @param {string} hexString
229 * @param {!Event} event 229 * @param {!Event} event
230 */ 230 */
231 WebInspector._modifiedHexValue = function(hexString, event) 231 WebInspector._modifiedHexValue = function(hexString, event)
232 { 232 {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 265
266 /** 266 /**
267 * @param {number} number 267 * @param {number} number
268 * @param {!Event} event 268 * @param {!Event} event
269 */ 269 */
270 WebInspector._modifiedFloatNumber = function(number, event) 270 WebInspector._modifiedFloatNumber = function(number, event)
271 { 271 {
272 var direction = WebInspector._valueModificationDirection(event); 272 var direction = WebInspector._valueModificationDirection(event);
273 if (!direction) 273 if (!direction)
274 return number; 274 return number;
275 275
276 var arrowKeyOrMouseWheelEvent = (event.keyIdentifier === "Up" || event.keyId entifier === "Down" || event.type === "mousewheel"); 276 var arrowKeyOrMouseWheelEvent = (event.keyIdentifier === "Up" || event.keyId entifier === "Down" || event.type === "mousewheel");
277 277
278 // Jump by 10 when shift is down or jump by 0.1 when Alt/Option is down. 278 // Jump by 10 when shift is down or jump by 0.1 when Alt/Option is down.
279 // Also jump by 10 for page up and down, or by 100 if shift is held with a p age key. 279 // Also jump by 10 for page up and down, or by 100 if shift is held with a p age key.
280 var changeAmount = 1; 280 var changeAmount = 1;
281 if (event.shiftKey && !arrowKeyOrMouseWheelEvent) 281 if (event.shiftKey && !arrowKeyOrMouseWheelEvent)
282 changeAmount = 100; 282 changeAmount = 100;
283 else if (event.shiftKey || !arrowKeyOrMouseWheelEvent) 283 else if (event.shiftKey || !arrowKeyOrMouseWheelEvent)
284 changeAmount = 10; 284 changeAmount = 10;
285 else if (event.altKey) 285 else if (event.altKey)
(...skipping 30 matching lines...) Expand all
316 if (!selection.rangeCount) 316 if (!selection.rangeCount)
317 return false; 317 return false;
318 318
319 var selectionRange = selection.getRangeAt(0); 319 var selectionRange = selection.getRangeAt(0);
320 if (!selectionRange.commonAncestorContainer.isSelfOrDescendant(element)) 320 if (!selectionRange.commonAncestorContainer.isSelfOrDescendant(element))
321 return false; 321 return false;
322 322
323 var originalValue = element.textContent; 323 var originalValue = element.textContent;
324 var wordRange = selectionRange.startContainer.rangeOfWord(selectionRange.sta rtOffset, WebInspector.StyleValueDelimiters, element); 324 var wordRange = selectionRange.startContainer.rangeOfWord(selectionRange.sta rtOffset, WebInspector.StyleValueDelimiters, element);
325 var wordString = wordRange.toString(); 325 var wordString = wordRange.toString();
326 326
327 if (suggestionHandler && suggestionHandler(wordString)) 327 if (suggestionHandler && suggestionHandler(wordString))
328 return false; 328 return false;
329 329
330 var replacementString; 330 var replacementString;
331 var prefix, suffix, number; 331 var prefix, suffix, number;
332 332
333 var matches; 333 var matches;
334 matches = /(.*#)([\da-fA-F]+)(.*)/.exec(wordString); 334 matches = /(.*#)([\da-fA-F]+)(.*)/.exec(wordString);
335 if (matches && matches.length) { 335 if (matches && matches.length) {
336 prefix = matches[1]; 336 prefix = matches[1];
337 suffix = matches[3]; 337 suffix = matches[3];
338 number = WebInspector._modifiedHexValue(matches[2], event); 338 number = WebInspector._modifiedHexValue(matches[2], event);
339 339
340 if (customNumberHandler) 340 if (customNumberHandler)
341 number = customNumberHandler(number); 341 number = customNumberHandler(number);
342 342
343 replacementString = prefix + number + suffix; 343 replacementString = prefix + number + suffix;
344 } else { 344 } else {
345 matches = /(.*?)(-?(?:\d+(?:\.\d+)?|\.\d+))(.*)/.exec(wordString); 345 matches = /(.*?)(-?(?:\d+(?:\.\d+)?|\.\d+))(.*)/.exec(wordString);
346 if (matches && matches.length) { 346 if (matches && matches.length) {
347 prefix = matches[1]; 347 prefix = matches[1];
348 suffix = matches[3]; 348 suffix = matches[3];
349 number = WebInspector._modifiedFloatNumber(parseFloat(matches[2]), e vent); 349 number = WebInspector._modifiedFloatNumber(parseFloat(matches[2]), e vent);
350 350
351 // Need to check for null explicitly. 351 // Need to check for null explicitly.
352 if (number === null) 352 if (number === null)
353 return false; 353 return false;
354 354
355 if (customNumberHandler) 355 if (customNumberHandler)
356 number = customNumberHandler(number); 356 number = customNumberHandler(number);
357 357
358 replacementString = prefix + number + suffix; 358 replacementString = prefix + number + suffix;
359 } 359 }
360 } 360 }
361 361
362 if (replacementString) { 362 if (replacementString) {
363 var replacementTextNode = document.createTextNode(replacementString); 363 var replacementTextNode = document.createTextNode(replacementString);
364 364
365 wordRange.deleteContents(); 365 wordRange.deleteContents();
366 wordRange.insertNode(replacementTextNode); 366 wordRange.insertNode(replacementTextNode);
367 367
368 var finalSelectionRange = document.createRange(); 368 var finalSelectionRange = document.createRange();
369 finalSelectionRange.setStart(replacementTextNode, 0); 369 finalSelectionRange.setStart(replacementTextNode, 0);
370 finalSelectionRange.setEnd(replacementTextNode, replacementString.length ); 370 finalSelectionRange.setEnd(replacementTextNode, replacementString.length );
371 371
372 selection.removeAllRanges(); 372 selection.removeAllRanges();
373 selection.addRange(finalSelectionRange); 373 selection.addRange(finalSelectionRange);
374 374
375 event.handled = true; 375 event.handled = true;
376 event.preventDefault(); 376 event.preventDefault();
377 377
378 if (finishHandler) 378 if (finishHandler)
379 finishHandler(originalValue, replacementString); 379 finishHandler(originalValue, replacementString);
380 380
381 return true; 381 return true;
382 } 382 }
383 return false; 383 return false;
384 } 384 }
385 385
386 /** 386 /**
387 * @param {number} ms 387 * @param {number} ms
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 532
533 WebInspector._documentBlurred = function(event) 533 WebInspector._documentBlurred = function(event)
534 { 534 {
535 // We want to know when currentFocusElement loses focus to nowhere. 535 // We want to know when currentFocusElement loses focus to nowhere.
536 // This is the case when event.relatedTarget is null (no element is being fo cused) 536 // This is the case when event.relatedTarget is null (no element is being fo cused)
537 // and document.activeElement is reset to default (this is not a window blur ). 537 // and document.activeElement is reset to default (this is not a window blur ).
538 if (!event.relatedTarget && document.activeElement === document.body) 538 if (!event.relatedTarget && document.activeElement === document.body)
539 WebInspector.setCurrentFocusElement(null); 539 WebInspector.setCurrentFocusElement(null);
540 } 540 }
541 541
542 WebInspector._textInputTypes = ["text", "search", "tel", "url", "email", "passwo rd"].keySet(); 542 WebInspector._textInputTypes = ["text", "search", "tel", "url", "email", "passwo rd"].keySet();
543 WebInspector._isTextEditingElement = function(element) 543 WebInspector._isTextEditingElement = function(element)
544 { 544 {
545 if (element instanceof HTMLInputElement) 545 if (element instanceof HTMLInputElement)
546 return element.type in WebInspector._textInputTypes; 546 return element.type in WebInspector._textInputTypes;
547 547
548 if (element instanceof HTMLTextAreaElement) 548 if (element instanceof HTMLTextAreaElement)
549 return true; 549 return true;
550 550
551 return false; 551 return false;
552 } 552 }
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 784
785 WebInspector.endBatchUpdate = function() 785 WebInspector.endBatchUpdate = function()
786 { 786 {
787 if (--WebInspector._coalescingLevel) 787 if (--WebInspector._coalescingLevel)
788 return; 788 return;
789 789
790 var handlers = WebInspector._postUpdateHandlers; 790 var handlers = WebInspector._postUpdateHandlers;
791 delete WebInspector._postUpdateHandlers; 791 delete WebInspector._postUpdateHandlers;
792 792
793 window.requestAnimationFrame(function() { 793 window.requestAnimationFrame(function() {
794 if (WebInspector._coalescingLevel)
795 return;
796 var keys = handlers.keys(); 794 var keys = handlers.keys();
797 for (var i = 0; i < keys.length; ++i) { 795 for (var i = 0; i < keys.length; ++i) {
798 var object = keys[i]; 796 var object = keys[i];
799 var methods = handlers.get(object).keys(); 797 var methods = handlers.get(object).items();
800 for (var j = 0; j < methods.length; ++j) 798 for (var j = 0; j < methods.length; ++j)
801 methods[j].call(object); 799 methods[j].call(object);
802 } 800 }
803 }); 801 });
804 } 802 }
805 803
806 /** 804 /**
807 * @param {!Object} object 805 * @param {!Object} object
808 * @param {function()} method 806 * @param {function()} method
809 */ 807 */
810 WebInspector.invokeOnceAfterBatchUpdate = function(object, method) 808 WebInspector.invokeOnceAfterBatchUpdate = function(object, method)
811 { 809 {
812 if (!WebInspector._coalescingLevel) { 810 if (!WebInspector._coalescingLevel) {
813 window.requestAnimationFrame(function() { 811 window.requestAnimationFrame(method.bind(object));
814 if (!WebInspector._coalescingLevel)
815 method.call(object);
816 });
817 return; 812 return;
818 } 813 }
819 814
820 var methods = WebInspector._postUpdateHandlers.get(object); 815 var methods = WebInspector._postUpdateHandlers.get(object);
821 if (!methods) { 816 if (!methods) {
822 methods = new Map(); 817 methods = new Set();
823 WebInspector._postUpdateHandlers.put(object, methods); 818 WebInspector._postUpdateHandlers.put(object, methods);
824 } 819 }
825 methods.put(method); 820 methods.add(method);
826 } 821 }
827 822
828 ;(function() { 823 ;(function() {
829 824
830 function windowLoaded() 825 function windowLoaded()
831 { 826 {
832 window.addEventListener("focus", WebInspector._windowFocused, false); 827 window.addEventListener("focus", WebInspector._windowFocused, false);
833 window.addEventListener("blur", WebInspector._windowBlurred, false); 828 window.addEventListener("blur", WebInspector._windowBlurred, false);
834 document.addEventListener("focus", WebInspector._focusChanged, true); 829 document.addEventListener("focus", WebInspector._focusChanged, true);
835 document.addEventListener("blur", WebInspector._documentBlurred, true); 830 document.addEventListener("blur", WebInspector._documentBlurred, true);
836 window.removeEventListener("DOMContentLoaded", windowLoaded, false); 831 window.removeEventListener("DOMContentLoaded", windowLoaded, false);
837 } 832 }
838 833
839 window.addEventListener("DOMContentLoaded", windowLoaded, false); 834 window.addEventListener("DOMContentLoaded", windowLoaded, false);
840 835
841 })(); 836 })();
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698