OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008 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 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
797 while (nextSelectedNode && !nextSelectedNode.selectable) | 797 while (nextSelectedNode && !nextSelectedNode.selectable) |
798 nextSelectedNode = nextSelectedNode.traverseNextNode(true); | 798 nextSelectedNode = nextSelectedNode.traverseNextNode(true); |
799 handled = nextSelectedNode ? true : false; | 799 handled = nextSelectedNode ? true : false; |
800 } else if (event.key === 'ArrowLeft') { | 800 } else if (event.key === 'ArrowLeft') { |
801 if (this.selectedNode.expanded) { | 801 if (this.selectedNode.expanded) { |
802 if (event.altKey) | 802 if (event.altKey) |
803 this.selectedNode.collapseRecursively(); | 803 this.selectedNode.collapseRecursively(); |
804 else | 804 else |
805 this.selectedNode.collapse(); | 805 this.selectedNode.collapse(); |
806 handled = true; | 806 handled = true; |
807 } else if (this.selectedNode.parent && !this.selectedNode.parent._isRoot) { | 807 } else if (this.selectedNode.parent() && !this.selectedNode.parent()._isRo ot) { |
808 handled = true; | 808 handled = true; |
809 if (this.selectedNode.parent.selectable) { | 809 if (this.selectedNode.parent().selectable) { |
810 nextSelectedNode = this.selectedNode.parent; | 810 nextSelectedNode = this.selectedNode.parent(); |
811 handled = nextSelectedNode ? true : false; | 811 handled = nextSelectedNode ? true : false; |
812 } else if (this.selectedNode.parent) { | 812 } else if (this.selectedNode.parent()) { |
813 this.selectedNode.parent.collapse(); | 813 this.selectedNode.parent().collapse(); |
814 } | 814 } |
815 } | 815 } |
816 } else if (event.key === 'ArrowRight') { | 816 } else if (event.key === 'ArrowRight') { |
817 if (!this.selectedNode.revealed) { | 817 if (!this.selectedNode.revealed) { |
818 this.selectedNode.reveal(); | 818 this.selectedNode.reveal(); |
819 handled = true; | 819 handled = true; |
820 } else if (this.selectedNode.hasChildren()) { | 820 } else if (this.selectedNode.hasChildren()) { |
821 handled = true; | 821 handled = true; |
822 if (this.selectedNode.expanded) { | 822 if (this.selectedNode.expanded) { |
823 nextSelectedNode = this.selectedNode.children[0]; | 823 nextSelectedNode = this.selectedNode.children[0]; |
(...skipping 25 matching lines...) Expand all Loading... | |
849 event.consume(true); | 849 event.consume(true); |
850 } | 850 } |
851 | 851 |
852 /** | 852 /** |
853 * @param {?NODE_TYPE} root | 853 * @param {?NODE_TYPE} root |
854 * @param {boolean} onlyAffectsSubtree | 854 * @param {boolean} onlyAffectsSubtree |
855 */ | 855 */ |
856 updateSelectionBeforeRemoval(root, onlyAffectsSubtree) { | 856 updateSelectionBeforeRemoval(root, onlyAffectsSubtree) { |
857 var ancestor = this.selectedNode; | 857 var ancestor = this.selectedNode; |
858 while (ancestor && ancestor !== root) | 858 while (ancestor && ancestor !== root) |
859 ancestor = ancestor.parent; | 859 ancestor = ancestor.parent(); |
860 // Selection is not in the subtree being deleted. | 860 // Selection is not in the subtree being deleted. |
861 if (!ancestor) | 861 if (!ancestor) |
862 return; | 862 return; |
863 | 863 |
864 var nextSelectedNode; | 864 var nextSelectedNode; |
865 // Skip subtree being deleted when looking for the next selectable node. | 865 // Skip subtree being deleted when looking for the next selectable node. |
866 for (ancestor = root; ancestor && !ancestor.nextSibling; ancestor = ancestor .parent) { | 866 for (ancestor = root; ancestor && !ancestor.nextSibling; ancestor = ancestor .parent()) { |
867 } | 867 } |
868 if (ancestor) | 868 if (ancestor) |
869 nextSelectedNode = ancestor.nextSibling; | 869 nextSelectedNode = ancestor.nextSibling; |
870 while (nextSelectedNode && !nextSelectedNode.selectable) | 870 while (nextSelectedNode && !nextSelectedNode.selectable) |
871 nextSelectedNode = nextSelectedNode.traverseNextNode(true); | 871 nextSelectedNode = nextSelectedNode.traverseNextNode(true); |
872 | 872 |
873 if (!nextSelectedNode || nextSelectedNode.isCreationNode) { | 873 if (!nextSelectedNode || nextSelectedNode.isCreationNode) { |
874 nextSelectedNode = root.traversePreviousNode(true); | 874 nextSelectedNode = root.traversePreviousNode(true); |
875 while (nextSelectedNode && !nextSelectedNode.selectable) | 875 while (nextSelectedNode && !nextSelectedNode.selectable) |
876 nextSelectedNode = nextSelectedNode.traversePreviousNode(true); | 876 nextSelectedNode = nextSelectedNode.traversePreviousNode(true); |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1250 this._shouldRefreshChildren = true; | 1250 this._shouldRefreshChildren = true; |
1251 /** @type {!Object.<string, *>} */ | 1251 /** @type {!Object.<string, *>} */ |
1252 this._data = data || {}; | 1252 this._data = data || {}; |
1253 /** @type {boolean} */ | 1253 /** @type {boolean} */ |
1254 this._hasChildren = hasChildren || false; | 1254 this._hasChildren = hasChildren || false; |
1255 /** @type {!Array.<!NODE_TYPE>} */ | 1255 /** @type {!Array.<!NODE_TYPE>} */ |
1256 this.children = []; | 1256 this.children = []; |
1257 /** @type {?DataGrid.DataGrid} */ | 1257 /** @type {?DataGrid.DataGrid} */ |
1258 this.dataGrid = null; | 1258 this.dataGrid = null; |
1259 /** @type {?NODE_TYPE} */ | 1259 /** @type {?NODE_TYPE} */ |
1260 this.parent = null; | 1260 this._parent = null; |
1261 /** @type {?NODE_TYPE} */ | 1261 /** @type {?NODE_TYPE} */ |
1262 this.previousSibling = null; | 1262 this.previousSibling = null; |
1263 /** @type {?NODE_TYPE} */ | 1263 /** @type {?NODE_TYPE} */ |
1264 this.nextSibling = null; | 1264 this.nextSibling = null; |
1265 /** @type {number} */ | 1265 /** @type {number} */ |
1266 this.disclosureToggleWidth = 10; | 1266 this.disclosureToggleWidth = 10; |
1267 | 1267 |
1268 /** @type {boolean} */ | 1268 /** @type {boolean} */ |
1269 this.selectable = true; | 1269 this.selectable = true; |
1270 | 1270 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1326 */ | 1326 */ |
1327 createCells(element) { | 1327 createCells(element) { |
1328 element.removeChildren(); | 1328 element.removeChildren(); |
1329 var columnsArray = this.dataGrid._visibleColumnsArray; | 1329 var columnsArray = this.dataGrid._visibleColumnsArray; |
1330 for (var i = 0; i < columnsArray.length; ++i) | 1330 for (var i = 0; i < columnsArray.length; ++i) |
1331 element.appendChild(this.createCell(columnsArray[i].id)); | 1331 element.appendChild(this.createCell(columnsArray[i].id)); |
1332 element.appendChild(this._createTDWithClass('corner')); | 1332 element.appendChild(this._createTDWithClass('corner')); |
1333 } | 1333 } |
1334 | 1334 |
1335 /** | 1335 /** |
1336 * @param {?NODE_TYPE} parentNode | |
1337 */ | |
1338 setParent(parentNode) { | |
1339 delete this._depth; | |
1340 this._parent = parentNode; | |
luoe
2017/03/06 16:56:40
Do we need to recalculate depth of this node's gra
allada
2017/03/06 18:18:32
Done.
| |
1341 } | |
1342 | |
1343 /** | |
1344 * @return {?NODE_TYPE} | |
1345 */ | |
1346 parent() { | |
1347 return this._parent; | |
1348 } | |
1349 | |
1350 /** | |
1336 * @return {!Object.<string, *>} | 1351 * @return {!Object.<string, *>} |
1337 */ | 1352 */ |
1338 get data() { | 1353 get data() { |
1339 return this._data; | 1354 return this._data; |
1340 } | 1355 } |
1341 | 1356 |
1342 /** | 1357 /** |
1343 * @param {!Object.<string, *>} x | 1358 * @param {!Object.<string, *>} x |
1344 */ | 1359 */ |
1345 set data(x) { | 1360 set data(x) { |
1346 this._data = x || {}; | 1361 this._data = x || {}; |
1347 this.refresh(); | 1362 this.refresh(); |
1348 } | 1363 } |
1349 | 1364 |
1350 /** | 1365 /** |
1351 * @return {boolean} | 1366 * @return {boolean} |
1352 */ | 1367 */ |
1353 get revealed() { | 1368 get revealed() { |
1354 if (this._revealed !== undefined) | 1369 if (this._revealed !== undefined) |
1355 return this._revealed; | 1370 return this._revealed; |
1356 | 1371 |
1357 var currentAncestor = this.parent; | 1372 var currentAncestor = this.parent(); |
1358 while (currentAncestor && !currentAncestor._isRoot) { | 1373 while (currentAncestor && !currentAncestor._isRoot) { |
1359 if (!currentAncestor.expanded) { | 1374 if (!currentAncestor.expanded) { |
1360 this._revealed = false; | 1375 this._revealed = false; |
1361 return false; | 1376 return false; |
1362 } | 1377 } |
1363 | 1378 |
1364 currentAncestor = currentAncestor.parent; | 1379 currentAncestor = currentAncestor.parent(); |
1365 } | 1380 } |
1366 | 1381 |
1367 this._revealed = true; | 1382 this._revealed = true; |
1368 return true; | 1383 return true; |
1369 } | 1384 } |
1370 | 1385 |
1371 /** | 1386 /** |
1372 * @param {boolean} x | 1387 * @param {boolean} x |
1373 */ | 1388 */ |
1374 set revealed(x) { | 1389 set revealed(x) { |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1451 this._element.classList.toggle('parent', this._hasChildren); | 1466 this._element.classList.toggle('parent', this._hasChildren); |
1452 this._element.classList.toggle('expanded', this._hasChildren && this.expande d); | 1467 this._element.classList.toggle('expanded', this._hasChildren && this.expande d); |
1453 } | 1468 } |
1454 | 1469 |
1455 /** | 1470 /** |
1456 * @return {number} | 1471 * @return {number} |
1457 */ | 1472 */ |
1458 get depth() { | 1473 get depth() { |
1459 if (this._depth !== undefined) | 1474 if (this._depth !== undefined) |
1460 return this._depth; | 1475 return this._depth; |
1461 if (this.parent && !this.parent._isRoot) | 1476 if (this.parent() && !this.parent()._isRoot) |
1462 this._depth = this.parent.depth + 1; | 1477 this._depth = this.parent().depth + 1; |
1463 else | 1478 else |
1464 this._depth = 0; | 1479 this._depth = 0; |
1465 return this._depth; | 1480 return this._depth; |
1466 } | 1481 } |
1467 | 1482 |
1468 /** | 1483 /** |
1469 * @return {number} | 1484 * @return {number} |
1470 */ | 1485 */ |
1471 get leftPadding() { | 1486 get leftPadding() { |
1472 return this.depth * this.dataGrid.indentWidth; | 1487 return this.depth * this.dataGrid.indentWidth; |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1596 this.insertChild(child, this.children.length); | 1611 this.insertChild(child, this.children.length); |
1597 } | 1612 } |
1598 | 1613 |
1599 /** | 1614 /** |
1600 * @param {!NODE_TYPE} child | 1615 * @param {!NODE_TYPE} child |
1601 * @param {number} index | 1616 * @param {number} index |
1602 */ | 1617 */ |
1603 insertChild(child, index) { | 1618 insertChild(child, index) { |
1604 if (!child) | 1619 if (!child) |
1605 throw 'insertChild: Node can\'t be undefined or null.'; | 1620 throw 'insertChild: Node can\'t be undefined or null.'; |
1606 if (child.parent === this) { | 1621 if (child.parent() === this) { |
1607 var currentIndex = this.children.indexOf(child); | 1622 var currentIndex = this.children.indexOf(child); |
1608 if (currentIndex < 0) | 1623 if (currentIndex < 0) |
1609 console.assert(false, 'Inconsistent DataGrid state'); | 1624 console.assert(false, 'Inconsistent DataGrid state'); |
1610 if (currentIndex === index) | 1625 if (currentIndex === index) |
1611 return; | 1626 return; |
1612 if (currentIndex < index) | 1627 if (currentIndex < index) |
1613 --index; | 1628 --index; |
1614 } | 1629 } |
1615 | 1630 |
1616 child.remove(); | 1631 child.remove(); |
1617 | 1632 |
1618 this.children.splice(index, 0, child); | 1633 this.children.splice(index, 0, child); |
1619 this.setHasChildren(true); | 1634 this.setHasChildren(true); |
1620 | 1635 |
1621 child.parent = this; | 1636 child.setParent(this); |
1622 child.dataGrid = this.dataGrid; | 1637 child.dataGrid = this.dataGrid; |
1623 child.recalculateSiblings(index); | 1638 child.recalculateSiblings(index); |
1624 | 1639 |
1625 child._depth = undefined; | 1640 child._depth = undefined; |
luoe
2017/03/06 16:56:40
No longer need this since setParent deletes it?
| |
1626 child._revealed = undefined; | 1641 child._revealed = undefined; |
1627 child._attached = false; | 1642 child._attached = false; |
1628 child._shouldRefreshChildren = true; | 1643 child._shouldRefreshChildren = true; |
1629 | 1644 |
1630 var current = child.children[0]; | 1645 var current = child.children[0]; |
1631 while (current) { | 1646 while (current) { |
1632 current.dataGrid = this.dataGrid; | 1647 current.dataGrid = this.dataGrid; |
1633 current._depth = undefined; | 1648 current._depth = undefined; |
1634 current._revealed = undefined; | 1649 current._revealed = undefined; |
1635 current._attached = false; | 1650 current._attached = false; |
1636 current._shouldRefreshChildren = true; | 1651 current._shouldRefreshChildren = true; |
1637 current = current.traverseNextNode(false, child, true); | 1652 current = current.traverseNextNode(false, child, true); |
1638 } | 1653 } |
1639 | 1654 |
1640 if (this.expanded) | 1655 if (this.expanded) |
1641 child._attach(); | 1656 child._attach(); |
1642 if (!this.revealed) | 1657 if (!this.revealed) |
1643 child.revealed = false; | 1658 child.revealed = false; |
1644 } | 1659 } |
1645 | 1660 |
1646 remove() { | 1661 remove() { |
1647 if (this.parent) | 1662 if (this.parent()) |
1648 this.parent.removeChild(this); | 1663 this.parent().removeChild(this); |
1649 } | 1664 } |
1650 | 1665 |
1651 /** | 1666 /** |
1652 * @param {!NODE_TYPE} child | 1667 * @param {!NODE_TYPE} child |
1653 */ | 1668 */ |
1654 removeChild(child) { | 1669 removeChild(child) { |
1655 if (!child) | 1670 if (!child) |
1656 throw 'removeChild: Node can\'t be undefined or null.'; | 1671 throw 'removeChild: Node can\'t be undefined or null.'; |
1657 if (child.parent !== this) | 1672 if (child.parent() !== this) |
1658 throw 'removeChild: Node is not a child of this node.'; | 1673 throw 'removeChild: Node is not a child of this node.'; |
1659 | 1674 |
1660 if (this.dataGrid) | 1675 if (this.dataGrid) |
1661 this.dataGrid.updateSelectionBeforeRemoval(child, false); | 1676 this.dataGrid.updateSelectionBeforeRemoval(child, false); |
1662 child._detach(); | 1677 child._detach(); |
1663 | 1678 |
1664 this.children.remove(child, true); | 1679 this.children.remove(child, true); |
1665 | 1680 |
1666 if (child.previousSibling) | 1681 if (child.previousSibling) |
1667 child.previousSibling.nextSibling = child.nextSibling; | 1682 child.previousSibling.nextSibling = child.nextSibling; |
1668 if (child.nextSibling) | 1683 if (child.nextSibling) |
1669 child.nextSibling.previousSibling = child.previousSibling; | 1684 child.nextSibling.previousSibling = child.previousSibling; |
1670 | 1685 |
1671 child.dataGrid = null; | 1686 child.dataGrid = null; |
1672 child.parent = null; | 1687 child.setParent(null); |
1673 child.nextSibling = null; | 1688 child.nextSibling = null; |
1674 child.previousSibling = null; | 1689 child.previousSibling = null; |
1675 | 1690 |
1676 if (this.children.length <= 0) | 1691 if (this.children.length <= 0) |
1677 this.setHasChildren(false); | 1692 this.setHasChildren(false); |
1678 } | 1693 } |
1679 | 1694 |
1680 removeChildren() { | 1695 removeChildren() { |
1681 if (this.dataGrid) | 1696 if (this.dataGrid) |
1682 this.dataGrid.updateSelectionBeforeRemoval(this, true); | 1697 this.dataGrid.updateSelectionBeforeRemoval(this, true); |
1683 for (var i = 0; i < this.children.length; ++i) { | 1698 for (var i = 0; i < this.children.length; ++i) { |
1684 var child = this.children[i]; | 1699 var child = this.children[i]; |
1685 child._detach(); | 1700 child._detach(); |
1686 child.dataGrid = null; | 1701 child.dataGrid = null; |
1687 child.parent = null; | 1702 child.setParent(null); |
1688 child.nextSibling = null; | 1703 child.nextSibling = null; |
1689 child.previousSibling = null; | 1704 child.previousSibling = null; |
1690 } | 1705 } |
1691 | 1706 |
1692 this.children = []; | 1707 this.children = []; |
1693 this.setHasChildren(false); | 1708 this.setHasChildren(false); |
1694 } | 1709 } |
1695 | 1710 |
1696 /** | 1711 /** |
1697 * @param {number} myIndex | 1712 * @param {number} myIndex |
1698 */ | 1713 */ |
1699 recalculateSiblings(myIndex) { | 1714 recalculateSiblings(myIndex) { |
1700 if (!this.parent) | 1715 if (!this.parent()) |
1701 return; | 1716 return; |
1702 | 1717 |
1703 var previousChild = this.parent.children[myIndex - 1] || null; | 1718 var previousChild = this.parent().children[myIndex - 1] || null; |
1704 if (previousChild) | 1719 if (previousChild) |
1705 previousChild.nextSibling = this; | 1720 previousChild.nextSibling = this; |
1706 this.previousSibling = previousChild; | 1721 this.previousSibling = previousChild; |
1707 | 1722 |
1708 var nextChild = this.parent.children[myIndex + 1] || null; | 1723 var nextChild = this.parent().children[myIndex + 1] || null; |
1709 if (nextChild) | 1724 if (nextChild) |
1710 nextChild.previousSibling = this; | 1725 nextChild.previousSibling = this; |
1711 this.nextSibling = nextChild; | 1726 this.nextSibling = nextChild; |
1712 } | 1727 } |
1713 | 1728 |
1714 collapse() { | 1729 collapse() { |
1715 if (this._isRoot) | 1730 if (this._isRoot) |
1716 return; | 1731 return; |
1717 if (this._element) | 1732 if (this._element) |
1718 this._element.classList.remove('expanded'); | 1733 this._element.classList.remove('expanded'); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1774 var item = this; | 1789 var item = this; |
1775 while (item) { | 1790 while (item) { |
1776 item.expand(); | 1791 item.expand(); |
1777 item = item.traverseNextNode(false, this); | 1792 item = item.traverseNextNode(false, this); |
1778 } | 1793 } |
1779 } | 1794 } |
1780 | 1795 |
1781 reveal() { | 1796 reveal() { |
1782 if (this._isRoot) | 1797 if (this._isRoot) |
1783 return; | 1798 return; |
1784 var currentAncestor = this.parent; | 1799 var currentAncestor = this.parent(); |
1785 while (currentAncestor && !currentAncestor._isRoot) { | 1800 while (currentAncestor && !currentAncestor._isRoot) { |
1786 if (!currentAncestor.expanded) | 1801 if (!currentAncestor.expanded) |
1787 currentAncestor.expand(); | 1802 currentAncestor.expand(); |
1788 currentAncestor = currentAncestor.parent; | 1803 currentAncestor = currentAncestor.parent(); |
1789 } | 1804 } |
1790 | 1805 |
1791 this.element().scrollIntoViewIfNeeded(false); | 1806 this.element().scrollIntoViewIfNeeded(false); |
1792 } | 1807 } |
1793 | 1808 |
1794 /** | 1809 /** |
1795 * @param {boolean=} supressSelectedEvent | 1810 * @param {boolean=} supressSelectedEvent |
1796 */ | 1811 */ |
1797 select(supressSelectedEvent) { | 1812 select(supressSelectedEvent) { |
1798 if (!this.dataGrid || !this.selectable || this.selected) | 1813 if (!this.dataGrid || !this.selectable || this.selected) |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1858 | 1873 |
1859 if (this === stayWithin) | 1874 if (this === stayWithin) |
1860 return null; | 1875 return null; |
1861 | 1876 |
1862 node = (!skipHidden || this.revealed) ? this.nextSibling : null; | 1877 node = (!skipHidden || this.revealed) ? this.nextSibling : null; |
1863 if (node) | 1878 if (node) |
1864 return node; | 1879 return node; |
1865 | 1880 |
1866 node = this; | 1881 node = this; |
1867 while (node && !node._isRoot && !((!skipHidden || node.revealed) ? node.next Sibling : null) && | 1882 while (node && !node._isRoot && !((!skipHidden || node.revealed) ? node.next Sibling : null) && |
1868 node.parent !== stayWithin) { | 1883 node.parent() !== stayWithin) { |
1869 if (info) | 1884 if (info) |
1870 info.depthChange -= 1; | 1885 info.depthChange -= 1; |
1871 node = node.parent; | 1886 node = node.parent(); |
1872 } | 1887 } |
1873 | 1888 |
1874 if (!node) | 1889 if (!node) |
1875 return null; | 1890 return null; |
1876 | 1891 |
1877 return (!skipHidden || node.revealed) ? node.nextSibling : null; | 1892 return (!skipHidden || node.revealed) ? node.nextSibling : null; |
1878 } | 1893 } |
1879 | 1894 |
1880 /** | 1895 /** |
1881 * @param {boolean} skipHidden | 1896 * @param {boolean} skipHidden |
1882 * @param {boolean=} dontPopulate | 1897 * @param {boolean=} dontPopulate |
1883 * @return {?NODE_TYPE} | 1898 * @return {?NODE_TYPE} |
1884 */ | 1899 */ |
1885 traversePreviousNode(skipHidden, dontPopulate) { | 1900 traversePreviousNode(skipHidden, dontPopulate) { |
1886 var node = (!skipHidden || this.revealed) ? this.previousSibling : null; | 1901 var node = (!skipHidden || this.revealed) ? this.previousSibling : null; |
1887 if (!dontPopulate && node && node._hasChildren) | 1902 if (!dontPopulate && node && node._hasChildren) |
1888 node.populate(); | 1903 node.populate(); |
1889 | 1904 |
1890 while (node && | 1905 while (node && |
1891 ((!skipHidden || (node.revealed && node.expanded)) ? node.children[no de.children.length - 1] : null)) { | 1906 ((!skipHidden || (node.revealed && node.expanded)) ? node.children[no de.children.length - 1] : null)) { |
1892 if (!dontPopulate && node._hasChildren) | 1907 if (!dontPopulate && node._hasChildren) |
1893 node.populate(); | 1908 node.populate(); |
1894 node = ((!skipHidden || (node.revealed && node.expanded)) ? node.children[ node.children.length - 1] : null); | 1909 node = ((!skipHidden || (node.revealed && node.expanded)) ? node.children[ node.children.length - 1] : null); |
1895 } | 1910 } |
1896 | 1911 |
1897 if (node) | 1912 if (node) |
1898 return node; | 1913 return node; |
1899 | 1914 |
1900 if (!this.parent || this.parent._isRoot) | 1915 if (!this.parent() || this.parent()._isRoot) |
1901 return null; | 1916 return null; |
1902 | 1917 |
1903 return this.parent; | 1918 return this.parent(); |
1904 } | 1919 } |
1905 | 1920 |
1906 /** | 1921 /** |
1907 * @param {!Event} event | 1922 * @param {!Event} event |
1908 * @return {boolean} | 1923 * @return {boolean} |
1909 */ | 1924 */ |
1910 isEventWithinDisclosureTriangle(event) { | 1925 isEventWithinDisclosureTriangle(event) { |
1911 if (!this._hasChildren) | 1926 if (!this._hasChildren) |
1912 return false; | 1927 return false; |
1913 var cell = event.target.enclosingNodeOrSelfWithNodeName('td'); | 1928 var cell = event.target.enclosingNodeOrSelfWithNodeName('td'); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1949 this.wasDetached(); | 1964 this.wasDetached(); |
1950 } | 1965 } |
1951 | 1966 |
1952 wasDetached() { | 1967 wasDetached() { |
1953 } | 1968 } |
1954 | 1969 |
1955 savePosition() { | 1970 savePosition() { |
1956 if (this._savedPosition) | 1971 if (this._savedPosition) |
1957 return; | 1972 return; |
1958 | 1973 |
1959 if (!this.parent) | 1974 if (!this.parent()) |
1960 throw 'savePosition: Node must have a parent.'; | 1975 throw 'savePosition: Node must have a parent.'; |
1961 this._savedPosition = {parent: this.parent, index: this.parent.children.inde xOf(this)}; | 1976 this._savedPosition = {parent: this.parent(), index: this.parent().children. indexOf(this)}; |
1962 } | 1977 } |
1963 | 1978 |
1964 restorePosition() { | 1979 restorePosition() { |
1965 if (!this._savedPosition) | 1980 if (!this._savedPosition) |
1966 return; | 1981 return; |
1967 | 1982 |
1968 if (this.parent !== this._savedPosition.parent) | 1983 if (this.parent() !== this._savedPosition.parent()) |
1969 this._savedPosition.parent.insertChild(this, this._savedPosition.index); | 1984 this._savedPosition.parent().insertChild(this, this._savedPosition.index); |
1970 | 1985 |
1971 this._savedPosition = null; | 1986 this._savedPosition = null; |
1972 } | 1987 } |
1973 }; | 1988 }; |
1974 | 1989 |
1975 /** | 1990 /** |
1976 * @unrestricted | 1991 * @unrestricted |
1977 * @extends {DataGrid.DataGridNode<!NODE_TYPE>} | 1992 * @extends {DataGrid.DataGridNode<!NODE_TYPE>} |
1978 * @template NODE_TYPE | 1993 * @template NODE_TYPE |
1979 */ | 1994 */ |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2034 /** | 2049 /** |
2035 * @override | 2050 * @override |
2036 */ | 2051 */ |
2037 detachChildWidgets() { | 2052 detachChildWidgets() { |
2038 super.detachChildWidgets(); | 2053 super.detachChildWidgets(); |
2039 for (var dataGrid of this._dataGrids) | 2054 for (var dataGrid of this._dataGrids) |
2040 this.element.removeChild(dataGrid.element); | 2055 this.element.removeChild(dataGrid.element); |
2041 this._dataGrids = []; | 2056 this._dataGrids = []; |
2042 } | 2057 } |
2043 }; | 2058 }; |
OLD | NEW |