OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008 Apple Inc. All rights reserved. |
3 * Copyright (C) 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2011 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * | 8 * |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 clearTimeout(this._selectionTimeout); | 232 clearTimeout(this._selectionTimeout); |
233 | 233 |
234 this._removeSuggestionAids(); | 234 this._removeSuggestionAids(); |
235 | 235 |
236 /** | 236 /** |
237 * @this {WebInspector.TextPrompt} | 237 * @this {WebInspector.TextPrompt} |
238 */ | 238 */ |
239 function moveBackIfOutside() | 239 function moveBackIfOutside() |
240 { | 240 { |
241 delete this._selectionTimeout; | 241 delete this._selectionTimeout; |
242 if (!this.isCaretInsidePrompt() && window.getSelection().isCollapsed
) { | 242 if (!this.isCaretInsidePrompt() && this._element.window().getSelecti
on().isCollapsed) { |
243 this.moveCaretToEndOfPrompt(); | 243 this.moveCaretToEndOfPrompt(); |
244 this.autoCompleteSoon(); | 244 this.autoCompleteSoon(); |
245 } | 245 } |
246 } | 246 } |
247 | 247 |
248 this._selectionTimeout = setTimeout(moveBackIfOutside.bind(this), 100); | 248 this._selectionTimeout = setTimeout(moveBackIfOutside.bind(this), 100); |
249 }, | 249 }, |
250 | 250 |
251 /** | 251 /** |
252 * @param {boolean=} force | 252 * @param {boolean=} force |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 this._completeTimeout = setTimeout(this.complete.bind(this, force),
immediately ? 0 : this._autocompletionTimeout); | 370 this._completeTimeout = setTimeout(this.complete.bind(this, force),
immediately ? 0 : this._autocompletionTimeout); |
371 }, | 371 }, |
372 | 372 |
373 /** | 373 /** |
374 * @param {boolean=} force | 374 * @param {boolean=} force |
375 * @param {boolean=} reverse | 375 * @param {boolean=} reverse |
376 */ | 376 */ |
377 complete: function(force, reverse) | 377 complete: function(force, reverse) |
378 { | 378 { |
379 this.clearAutoComplete(true); | 379 this.clearAutoComplete(true); |
380 var selection = window.getSelection(); | 380 var selection = this._element.window().getSelection(); |
381 if (!selection.rangeCount) | 381 if (!selection.rangeCount) |
382 return; | 382 return; |
383 | 383 |
384 var selectionRange = selection.getRangeAt(0); | 384 var selectionRange = selection.getRangeAt(0); |
385 var shouldExit; | 385 var shouldExit; |
386 | 386 |
387 if (!force && !this.isCaretAtEndOfPrompt() && !this.isSuggestBoxVisible(
)) | 387 if (!force && !this.isCaretAtEndOfPrompt() && !this.isSuggestBoxVisible(
)) |
388 shouldExit = true; | 388 shouldExit = true; |
389 else if (!selection.isCollapsed) | 389 else if (!selection.isCollapsed) |
390 shouldExit = true; | 390 shouldExit = true; |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 delete this.autoCompleteElement; | 563 delete this.autoCompleteElement; |
564 } | 564 } |
565 | 565 |
566 if (isIntermediateSuggestion) | 566 if (isIntermediateSuggestion) |
567 finalSelectionRange.setStart(completionTextNode, wordPrefixLength); | 567 finalSelectionRange.setStart(completionTextNode, wordPrefixLength); |
568 else | 568 else |
569 finalSelectionRange.setStart(completionTextNode, completionText.leng
th); | 569 finalSelectionRange.setStart(completionTextNode, completionText.leng
th); |
570 | 570 |
571 finalSelectionRange.setEnd(completionTextNode, completionText.length); | 571 finalSelectionRange.setEnd(completionTextNode, completionText.length); |
572 | 572 |
573 var selection = window.getSelection(); | 573 var selection = this._element.window().getSelection(); |
574 selection.removeAllRanges(); | 574 selection.removeAllRanges(); |
575 selection.addRange(finalSelectionRange); | 575 selection.addRange(finalSelectionRange); |
576 if (isIntermediateSuggestion) | 576 if (isIntermediateSuggestion) |
577 this.dispatchEventToListeners(WebInspector.TextPrompt.Events.ItemApp
lied, { itemText: completionText }); | 577 this.dispatchEventToListeners(WebInspector.TextPrompt.Events.ItemApp
lied, { itemText: completionText }); |
578 }, | 578 }, |
579 | 579 |
580 /** | 580 /** |
581 * @override | 581 * @override |
582 */ | 582 */ |
583 acceptSuggestion: function() | 583 acceptSuggestion: function() |
(...skipping 12 matching lines...) Expand all Loading... |
596 | 596 |
597 var text = this.autoCompleteElement.textContent; | 597 var text = this.autoCompleteElement.textContent; |
598 var textNode = createTextNode(text); | 598 var textNode = createTextNode(text); |
599 this.autoCompleteElement.parentNode.replaceChild(textNode, this.autoComp
leteElement); | 599 this.autoCompleteElement.parentNode.replaceChild(textNode, this.autoComp
leteElement); |
600 delete this.autoCompleteElement; | 600 delete this.autoCompleteElement; |
601 | 601 |
602 var finalSelectionRange = this._createRange(); | 602 var finalSelectionRange = this._createRange(); |
603 finalSelectionRange.setStart(textNode, text.length); | 603 finalSelectionRange.setStart(textNode, text.length); |
604 finalSelectionRange.setEnd(textNode, text.length); | 604 finalSelectionRange.setEnd(textNode, text.length); |
605 | 605 |
606 var selection = window.getSelection(); | 606 var selection = this._element.window().getSelection(); |
607 selection.removeAllRanges(); | 607 selection.removeAllRanges(); |
608 selection.addRange(finalSelectionRange); | 608 selection.addRange(finalSelectionRange); |
609 | 609 |
610 if (!prefixAccepted) { | 610 if (!prefixAccepted) { |
611 this.hideSuggestBox(); | 611 this.hideSuggestBox(); |
612 this.dispatchEventToListeners(WebInspector.TextPrompt.Events.ItemAcc
epted); | 612 this.dispatchEventToListeners(WebInspector.TextPrompt.Events.ItemAcc
epted); |
613 } else | 613 } else |
614 this.autoCompleteSoon(true); | 614 this.autoCompleteSoon(true); |
615 | 615 |
616 return true; | 616 return true; |
(...skipping 19 matching lines...) Expand all Loading... |
636 isCaretInsidePrompt: function() | 636 isCaretInsidePrompt: function() |
637 { | 637 { |
638 return this._element.isInsertionCaretInside(); | 638 return this._element.isInsertionCaretInside(); |
639 }, | 639 }, |
640 | 640 |
641 /** | 641 /** |
642 * @return {boolean} | 642 * @return {boolean} |
643 */ | 643 */ |
644 isCaretAtEndOfPrompt: function() | 644 isCaretAtEndOfPrompt: function() |
645 { | 645 { |
646 var selection = window.getSelection(); | 646 var selection = this._element.window().getSelection(); |
647 if (!selection.rangeCount || !selection.isCollapsed) | 647 if (!selection.rangeCount || !selection.isCollapsed) |
648 return false; | 648 return false; |
649 | 649 |
650 var selectionRange = selection.getRangeAt(0); | 650 var selectionRange = selection.getRangeAt(0); |
651 var node = selectionRange.startContainer; | 651 var node = selectionRange.startContainer; |
652 if (!node.isSelfOrDescendant(this._element)) | 652 if (!node.isSelfOrDescendant(this._element)) |
653 return false; | 653 return false; |
654 | 654 |
655 if (node.nodeType === Node.TEXT_NODE && selectionRange.startOffset < nod
e.nodeValue.length) | 655 if (node.nodeType === Node.TEXT_NODE && selectionRange.startOffset < nod
e.nodeValue.length) |
656 return false; | 656 return false; |
(...skipping 10 matching lines...) Expand all Loading... |
667 } | 667 } |
668 | 668 |
669 return true; | 669 return true; |
670 }, | 670 }, |
671 | 671 |
672 /** | 672 /** |
673 * @return {boolean} | 673 * @return {boolean} |
674 */ | 674 */ |
675 isCaretOnFirstLine: function() | 675 isCaretOnFirstLine: function() |
676 { | 676 { |
677 var selection = window.getSelection(); | 677 var selection = this._element.window().getSelection(); |
678 var focusNode = selection.focusNode; | 678 var focusNode = selection.focusNode; |
679 if (!focusNode || focusNode.nodeType !== Node.TEXT_NODE || focusNode.par
entNode !== this._element) | 679 if (!focusNode || focusNode.nodeType !== Node.TEXT_NODE || focusNode.par
entNode !== this._element) |
680 return true; | 680 return true; |
681 | 681 |
682 if (focusNode.textContent.substring(0, selection.focusOffset).indexOf("\
n") !== -1) | 682 if (focusNode.textContent.substring(0, selection.focusOffset).indexOf("\
n") !== -1) |
683 return false; | 683 return false; |
684 focusNode = focusNode.previousSibling; | 684 focusNode = focusNode.previousSibling; |
685 | 685 |
686 while (focusNode) { | 686 while (focusNode) { |
687 if (focusNode.nodeType !== Node.TEXT_NODE) | 687 if (focusNode.nodeType !== Node.TEXT_NODE) |
688 return true; | 688 return true; |
689 if (focusNode.textContent.indexOf("\n") !== -1) | 689 if (focusNode.textContent.indexOf("\n") !== -1) |
690 return false; | 690 return false; |
691 focusNode = focusNode.previousSibling; | 691 focusNode = focusNode.previousSibling; |
692 } | 692 } |
693 | 693 |
694 return true; | 694 return true; |
695 }, | 695 }, |
696 | 696 |
697 /** | 697 /** |
698 * @return {boolean} | 698 * @return {boolean} |
699 */ | 699 */ |
700 isCaretOnLastLine: function() | 700 isCaretOnLastLine: function() |
701 { | 701 { |
702 var selection = window.getSelection(); | 702 var selection = this._element.window().getSelection(); |
703 var focusNode = selection.focusNode; | 703 var focusNode = selection.focusNode; |
704 if (!focusNode || focusNode.nodeType !== Node.TEXT_NODE || focusNode.par
entNode !== this._element) | 704 if (!focusNode || focusNode.nodeType !== Node.TEXT_NODE || focusNode.par
entNode !== this._element) |
705 return true; | 705 return true; |
706 | 706 |
707 if (focusNode.textContent.substring(selection.focusOffset).indexOf("\n")
!== -1) | 707 if (focusNode.textContent.substring(selection.focusOffset).indexOf("\n")
!== -1) |
708 return false; | 708 return false; |
709 focusNode = focusNode.nextSibling; | 709 focusNode = focusNode.nextSibling; |
710 | 710 |
711 while (focusNode) { | 711 while (focusNode) { |
712 if (focusNode.nodeType !== Node.TEXT_NODE) | 712 if (focusNode.nodeType !== Node.TEXT_NODE) |
713 return true; | 713 return true; |
714 if (focusNode.textContent.indexOf("\n") !== -1) | 714 if (focusNode.textContent.indexOf("\n") !== -1) |
715 return false; | 715 return false; |
716 focusNode = focusNode.nextSibling; | 716 focusNode = focusNode.nextSibling; |
717 } | 717 } |
718 | 718 |
719 return true; | 719 return true; |
720 }, | 720 }, |
721 | 721 |
722 moveCaretToEndOfPrompt: function() | 722 moveCaretToEndOfPrompt: function() |
723 { | 723 { |
724 var selection = window.getSelection(); | 724 var selection = this._element.window().getSelection(); |
725 var selectionRange = this._createRange(); | 725 var selectionRange = this._createRange(); |
726 | 726 |
727 var offset = this._element.childNodes.length; | 727 var offset = this._element.childNodes.length; |
728 selectionRange.setStart(this._element, offset); | 728 selectionRange.setStart(this._element, offset); |
729 selectionRange.setEnd(this._element, offset); | 729 selectionRange.setEnd(this._element, offset); |
730 | 730 |
731 selection.removeAllRanges(); | 731 selection.removeAllRanges(); |
732 selection.addRange(selectionRange); | 732 selection.addRange(selectionRange); |
733 }, | 733 }, |
734 | 734 |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 | 898 |
899 if (newText !== undefined) { | 899 if (newText !== undefined) { |
900 event.consume(true); | 900 event.consume(true); |
901 this.text = newText; | 901 this.text = newText; |
902 | 902 |
903 if (isPrevious) { | 903 if (isPrevious) { |
904 var firstNewlineIndex = this.text.indexOf("\n"); | 904 var firstNewlineIndex = this.text.indexOf("\n"); |
905 if (firstNewlineIndex === -1) | 905 if (firstNewlineIndex === -1) |
906 this.moveCaretToEndOfPrompt(); | 906 this.moveCaretToEndOfPrompt(); |
907 else { | 907 else { |
908 var selection = window.getSelection(); | 908 var selection = this._element.window().getSelection(); |
909 var selectionRange = this._createRange(); | 909 var selectionRange = this._createRange(); |
910 | 910 |
911 selectionRange.setStart(this._element.firstChild, firstNewli
neIndex); | 911 selectionRange.setStart(this._element.firstChild, firstNewli
neIndex); |
912 selectionRange.setEnd(this._element.firstChild, firstNewline
Index); | 912 selectionRange.setEnd(this._element.firstChild, firstNewline
Index); |
913 | 913 |
914 selection.removeAllRanges(); | 914 selection.removeAllRanges(); |
915 selection.addRange(selectionRange); | 915 selection.addRange(selectionRange); |
916 } | 916 } |
917 } | 917 } |
918 | 918 |
919 return; | 919 return; |
920 } | 920 } |
921 | 921 |
922 WebInspector.TextPrompt.prototype.onKeyDown.apply(this, arguments); | 922 WebInspector.TextPrompt.prototype.onKeyDown.apply(this, arguments); |
923 }, | 923 }, |
924 | 924 |
925 __proto__: WebInspector.TextPrompt.prototype | 925 __proto__: WebInspector.TextPrompt.prototype |
926 } | 926 } |
927 | 927 |
OLD | NEW |