Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 361 this.treeOutline = null; | 361 this.treeOutline = null; |
| 362 this.parent = null; | 362 this.parent = null; |
| 363 this.previousSibling = null; | 363 this.previousSibling = null; |
| 364 this.nextSibling = null; | 364 this.nextSibling = null; |
| 365 | 365 |
| 366 this._listItemNode = createElement("li"); | 366 this._listItemNode = createElement("li"); |
| 367 this._listItemNode.treeElement = this; | 367 this._listItemNode.treeElement = this; |
| 368 if (title) | 368 if (title) |
| 369 this.title = title; | 369 this.title = title; |
| 370 this._listItemNode.addEventListener("mousedown", this._handleMouseDown.bind( this), false); | 370 this._listItemNode.addEventListener("mousedown", this._handleMouseDown.bind( this), false); |
| 371 this._listItemNode.addEventListener("selectstart", this._treeElementSelectSt art.bind(this), false); | |
| 372 this._listItemNode.addEventListener("click", this._treeElementToggled.bind(t his), false); | 371 this._listItemNode.addEventListener("click", this._treeElementToggled.bind(t his), false); |
| 373 this._listItemNode.addEventListener("dblclick", this._handleDoubleClick.bind (this), false); | 372 this._listItemNode.addEventListener("dblclick", this._handleDoubleClick.bind (this), false); |
| 374 | 373 |
| 375 this._childrenListNode = createElement("ol"); | 374 this._childrenListNode = createElement("ol"); |
| 376 this._childrenListNode.parentTreeElement = this; | 375 this._childrenListNode.parentTreeElement = this; |
| 377 this._childrenListNode.classList.add("children"); | 376 this._childrenListNode.classList.add("children"); |
| 378 | 377 |
| 379 this._hidden = false; | 378 this._hidden = false; |
| 380 this._selectable = true; | 379 this._selectable = true; |
| 381 this.expanded = false; | 380 this.expanded = false; |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 772 if (!this.treeOutline || !this.treeOutline._renderSelection) | 771 if (!this.treeOutline || !this.treeOutline._renderSelection) |
| 773 return; | 772 return; |
| 774 if (!this._selectionElement) | 773 if (!this._selectionElement) |
| 775 this._selectionElement = createElementWithClass("div", "selection fi ll"); | 774 this._selectionElement = createElementWithClass("div", "selection fi ll"); |
| 776 this._listItemNode.insertBefore(this._selectionElement, this.listItemEle ment.firstChild); | 775 this._listItemNode.insertBefore(this._selectionElement, this.listItemEle ment.firstChild); |
| 777 }, | 776 }, |
| 778 | 777 |
| 779 /** | 778 /** |
| 780 * @param {!Event} event | 779 * @param {!Event} event |
| 781 */ | 780 */ |
| 782 _treeElementSelectStart: function(event) | |
| 783 { | |
| 784 event.currentTarget._selectionStarted = true; | |
| 785 }, | |
| 786 | |
| 787 /** | |
| 788 * @param {!Event} event | |
| 789 */ | |
| 790 _treeElementToggled: function(event) | 781 _treeElementToggled: function(event) |
| 791 { | 782 { |
| 792 var element = event.currentTarget; | 783 var element = event.currentTarget; |
| 793 if (element._selectionStarted) { | 784 if (element.treeElement !== this || element.hasSelection()) |
|
pfeldman
2016/09/16 22:54:18
hasSelection returns true upon mouse down?
dgozman
2016/09/16 23:00:47
Correct.
| |
| 794 delete element._selectionStarted; | |
| 795 var selection = element.getComponentSelection(); | |
| 796 if (selection && !selection.isCollapsed && element.isSelfOrAncestor( selection.anchorNode) && element.isSelfOrAncestor(selection.focusNode)) | |
| 797 return; | |
| 798 } | |
| 799 | |
| 800 if (element.treeElement !== this) | |
| 801 return; | 785 return; |
| 802 | 786 |
| 803 var toggleOnClick = this.toggleOnClick && !this.selectable; | 787 var toggleOnClick = this.toggleOnClick && !this.selectable; |
| 804 var isInTriangle = this.isEventWithinDisclosureTriangle(event); | 788 var isInTriangle = this.isEventWithinDisclosureTriangle(event); |
| 805 if (!toggleOnClick && !isInTriangle) | 789 if (!toggleOnClick && !isInTriangle) |
| 806 return; | 790 return; |
| 807 | 791 |
| 808 if (event.target && event.target.enclosingNodeOrSelfWithNodeName("a")) | 792 if (event.target && event.target.enclosingNodeOrSelfWithNodeName("a")) |
| 809 return; | 793 return; |
| 810 | 794 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 823 }, | 807 }, |
| 824 | 808 |
| 825 /** | 809 /** |
| 826 * @param {!Event} event | 810 * @param {!Event} event |
| 827 */ | 811 */ |
| 828 _handleMouseDown: function(event) | 812 _handleMouseDown: function(event) |
| 829 { | 813 { |
| 830 var element = event.currentTarget; | 814 var element = event.currentTarget; |
| 831 if (!element) | 815 if (!element) |
| 832 return; | 816 return; |
| 833 delete element._selectionStarted; | |
| 834 | |
| 835 if (!this.selectable) | 817 if (!this.selectable) |
| 836 return; | 818 return; |
| 837 if (element.treeElement !== this) | 819 if (element.treeElement !== this) |
| 838 return; | 820 return; |
| 839 | 821 |
| 840 if (this.isEventWithinDisclosureTriangle(event)) | 822 if (this.isEventWithinDisclosureTriangle(event)) |
| 841 return; | 823 return; |
| 842 | 824 |
| 843 this.selectOnMouseDown(event); | 825 this.selectOnMouseDown(event); |
| 844 }, | 826 }, |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1169 isEventWithinDisclosureTriangle: function(event) | 1151 isEventWithinDisclosureTriangle: function(event) |
| 1170 { | 1152 { |
| 1171 // FIXME: We should not use getComputedStyle(). For that we need to get rid of using ::before for disclosure triangle. (http://webk.it/74446) | 1153 // FIXME: We should not use getComputedStyle(). For that we need to get rid of using ::before for disclosure triangle. (http://webk.it/74446) |
| 1172 var paddingLeftValue = window.getComputedStyle(this._listItemNode).paddi ngLeft; | 1154 var paddingLeftValue = window.getComputedStyle(this._listItemNode).paddi ngLeft; |
| 1173 console.assert(paddingLeftValue.endsWith("px")); | 1155 console.assert(paddingLeftValue.endsWith("px")); |
| 1174 var computedLeftPadding = parseFloat(paddingLeftValue); | 1156 var computedLeftPadding = parseFloat(paddingLeftValue); |
| 1175 var left = this._listItemNode.totalOffsetLeft() + computedLeftPadding; | 1157 var left = this._listItemNode.totalOffsetLeft() + computedLeftPadding; |
| 1176 return event.pageX >= left && event.pageX <= left + TreeElement._ArrowTo ggleWidth && this._expandable; | 1158 return event.pageX >= left && event.pageX <= left + TreeElement._ArrowTo ggleWidth && this._expandable; |
| 1177 } | 1159 } |
| 1178 } | 1160 } |
| OLD | NEW |