|
297 | 297 | document.onkeydown = handleShortcut; |
298 | 298 | document.onclick = function(ev) { |
299 | 299 | if (hasClass(ev.target, 'collapse-toggle')) { |
300 | | - collapseDocs(ev.target); |
| 300 | + collapseDocs(ev.target, "toggle"); |
301 | 301 | } else if (hasClass(ev.target.parentNode, 'collapse-toggle')) { |
302 | | - collapseDocs(ev.target.parentNode); |
| 302 | + collapseDocs(ev.target.parentNode, "toggle"); |
303 | 303 | } else if (ev.target.tagName === 'SPAN' && hasClass(ev.target.parentNode, 'line-numbers')) { |
304 | 304 | var prev_id = 0; |
305 | 305 |
|
|
1636 | 1636 | e.innerHTML = labelForToggleButton(false); |
1637 | 1637 | }); |
1638 | 1638 | toggle.title = "collapse all docs"; |
1639 | | - onEach(document.getElementsByClassName("docblock"), function(e) { |
1640 | | - e.style.display = 'block'; |
1641 | | - }); |
1642 | | - onEach(document.getElementsByClassName("toggle-label"), function(e) { |
1643 | | - e.style.display = 'none'; |
1644 | | - }); |
1645 | | - onEach(document.getElementsByClassName("toggle-wrapper"), function(e) { |
1646 | | - removeClass(e, "collapsed"); |
1647 | | - }); |
1648 | 1639 | onEach(document.getElementsByClassName("collapse-toggle"), function(e) { |
1649 | | - onEveryMatchingChild(e, "inner", function(i_e) { |
1650 | | - i_e.innerHTML = labelForToggleButton(false); |
1651 | | - }); |
| 1640 | + collapseDocs(e, "show"); |
1652 | 1641 | }); |
1653 | 1642 | } else { |
1654 | 1643 | addClass(toggle, "will-expand"); |
1655 | 1644 | onEveryMatchingChild(toggle, "inner", function(e) { |
1656 | 1645 | e.innerHTML = labelForToggleButton(true); |
1657 | 1646 | }); |
1658 | 1647 | toggle.title = "expand all docs"; |
1659 | | - onEach(document.getElementsByClassName("docblock"), function(e) { |
1660 | | - e.style.display = 'none'; |
1661 | | - }); |
1662 | | - onEach(document.getElementsByClassName("toggle-label"), function(e) { |
1663 | | - e.style.display = 'inline-block'; |
1664 | | - }); |
1665 | | - onEach(document.getElementsByClassName("toggle-wrapper"), function(e) { |
1666 | | - addClass(e, "collapsed"); |
1667 | | - }); |
| 1648 | + |
1668 | 1649 | onEach(document.getElementsByClassName("collapse-toggle"), function(e) { |
1669 | | - onEveryMatchingChild(e, "inner", function(i_e) { |
1670 | | - i_e.innerHTML = labelForToggleButton(true); |
1671 | | - }); |
| 1650 | + collapseDocs(e, "hide"); |
1672 | 1651 | }); |
1673 | 1652 | } |
1674 | 1653 | } |
1675 | 1654 |
|
1676 | | - function collapseDocs(toggle) { |
| 1655 | + function collapseDocs(toggle, mode) { |
1677 | 1656 | if (!toggle || !toggle.parentNode) { |
1678 | 1657 | return; |
1679 | 1658 | } |
1680 | | - var relatedDoc = toggle.parentNode.nextElementSibling; |
1681 | | - if (hasClass(relatedDoc, "stability")) { |
1682 | | - relatedDoc = relatedDoc.nextElementSibling; |
1683 | | - } |
1684 | | - if (hasClass(relatedDoc, "docblock")) { |
1685 | | - if (!isHidden(relatedDoc)) { |
1686 | | - relatedDoc.style.display = 'none'; |
1687 | | - onEach(toggle.childNodes, function(e) { |
1688 | | - if (hasClass(e, 'toggle-label')) { |
| 1659 | + |
| 1660 | + function adjustToggle(arg) { |
| 1661 | + return function(e) { |
| 1662 | + if (hasClass(e, 'toggle-label')) { |
| 1663 | + if (arg) { |
1689 | 1664 | e.style.display = 'inline-block'; |
| 1665 | + } else { |
| 1666 | + e.style.display = 'none'; |
1690 | 1667 | } |
1691 | | - if (hasClass(e, 'inner')) { |
1692 | | - e.innerHTML = labelForToggleButton(true); |
| 1668 | + } |
| 1669 | + if (hasClass(e, 'inner')) { |
| 1670 | + e.innerHTML = labelForToggleButton(arg); |
| 1671 | + } |
| 1672 | + }; |
| 1673 | + }; |
| 1674 | + |
| 1675 | + if (!hasClass(toggle.parentNode, "impl")) { |
| 1676 | + var relatedDoc = toggle.parentNode.nextElementSibling; |
| 1677 | + if (hasClass(relatedDoc, "stability")) { |
| 1678 | + relatedDoc = relatedDoc.nextElementSibling; |
| 1679 | + } |
| 1680 | + if (hasClass(relatedDoc, "docblock")) { |
| 1681 | + var action = mode; |
| 1682 | + if (action === "toggle") { |
| 1683 | + if (hasClass(relatedDoc, "hidden-by-usual-hider")) { |
| 1684 | + action = "show"; |
| 1685 | + } else { |
| 1686 | + action = "hide"; |
1693 | 1687 | } |
1694 | | - }); |
1695 | | - addClass(toggle.parentNode, 'collapsed'); |
1696 | | - } else { |
1697 | | - relatedDoc.style.display = 'block'; |
1698 | | - removeClass(toggle.parentNode, 'collapsed'); |
1699 | | - onEach(toggle.childNodes, function(e) { |
1700 | | - if (hasClass(e, 'toggle-label')) { |
1701 | | - e.style.display = 'none'; |
| 1688 | + } |
| 1689 | + if (action === "hide") { |
| 1690 | + addClass(relatedDoc, "hidden-by-usual-hider"); |
| 1691 | + onEach(toggle.childNodes, adjustToggle(true)); |
| 1692 | + addClass(toggle.parentNode, 'collapsed'); |
| 1693 | + } else if (action === "show") { |
| 1694 | + removeClass(relatedDoc, "hidden-by-usual-hider"); |
| 1695 | + removeClass(toggle.parentNode, 'collapsed'); |
| 1696 | + onEach(toggle.childNodes, adjustToggle(false)); |
| 1697 | + } |
| 1698 | + } |
| 1699 | + } else { |
| 1700 | + // we are collapsing the impl block |
| 1701 | + function implHider(addOrRemove) { |
| 1702 | + return function(n) { |
| 1703 | + if (hasClass(n, "method")) { |
| 1704 | + if (addOrRemove) { |
| 1705 | + addClass(n, "hidden-by-impl-hider"); |
| 1706 | + } else { |
| 1707 | + removeClass(n, "hidden-by-impl-hider"); |
| 1708 | + } |
| 1709 | + var ns = n.nextElementSibling; |
| 1710 | + while (true) { |
| 1711 | + if (ns && ( |
| 1712 | + hasClass(ns, "docblock") || |
| 1713 | + hasClass(ns, "stability") || |
| 1714 | + false |
| 1715 | + )) { |
| 1716 | + if (addOrRemove) { |
| 1717 | + addClass(ns, "hidden-by-impl-hider"); |
| 1718 | + } else { |
| 1719 | + removeClass(ns, "hidden-by-impl-hider"); |
| 1720 | + } |
| 1721 | + ns = ns.nextElementSibling; |
| 1722 | + continue; |
| 1723 | + } |
| 1724 | + break; |
| 1725 | + } |
1702 | 1726 | } |
1703 | | - if (hasClass(e, 'inner')) { |
1704 | | - e.innerHTML = labelForToggleButton(false); |
| 1727 | + } |
| 1728 | + } |
| 1729 | + |
| 1730 | + var relatedDoc = toggle.parentNode; |
| 1731 | + |
| 1732 | + while (!hasClass(relatedDoc, "impl-items")) { |
| 1733 | + relatedDoc = relatedDoc.nextElementSibling; |
| 1734 | + } |
| 1735 | + |
| 1736 | + if (!relatedDoc) { |
| 1737 | + return; |
| 1738 | + } |
| 1739 | + |
| 1740 | + // Hide all functions, but not associated types/consts |
| 1741 | + |
| 1742 | + var action = mode; |
| 1743 | + if (action === "toggle") { |
| 1744 | + if (hasClass(relatedDoc, "fns-now-collapsed")) { |
| 1745 | + action = "show"; |
| 1746 | + } else { |
| 1747 | + action = "hide"; |
| 1748 | + } |
| 1749 | + } |
| 1750 | + |
| 1751 | + if (action === "show") { |
| 1752 | + removeClass(relatedDoc, "fns-now-collapsed"); |
| 1753 | + onEach(toggle.childNodes, adjustToggle(false)); |
| 1754 | + onEach(relatedDoc.childNodes, implHider(false)); |
| 1755 | + } else if (action === "hide") { |
| 1756 | + addClass(relatedDoc, "fns-now-collapsed"); |
| 1757 | + onEach(toggle.childNodes, adjustToggle(true)); |
| 1758 | + onEach(relatedDoc.childNodes, implHider(true)); |
| 1759 | + } |
| 1760 | + } |
| 1761 | + } |
| 1762 | + |
| 1763 | + function autoCollapseAllImpls() { |
| 1764 | + // Automatically minimize all non-inherent impls |
| 1765 | + onEach(document.getElementsByClassName('impl'), function(n) { |
| 1766 | + // inherent impl ids are like 'impl' or impl-<number>' |
| 1767 | + var inherent = (n.id.match(/^impl(?:-\d+)?$/) !== null); |
| 1768 | + if (!inherent) { |
| 1769 | + onEach(n.childNodes, function(m) { |
| 1770 | + if (hasClass(m, "collapse-toggle")) { |
| 1771 | + collapseDocs(m, "hide"); |
1705 | 1772 | } |
1706 | 1773 | }); |
1707 | 1774 | } |
1708 | | - } |
| 1775 | + }); |
1709 | 1776 | } |
1710 | 1777 |
|
1711 | 1778 | var x = document.getElementById('toggle-all-docs'); |
|
1732 | 1799 | hasClass(next.nextElementSibling, 'docblock'))) { |
1733 | 1800 | insertAfter(toggle.cloneNode(true), e.childNodes[e.childNodes.length - 1]); |
1734 | 1801 | } |
| 1802 | + if (hasClass(e, 'impl')) { |
| 1803 | + insertAfter(toggle.cloneNode(true), e.childNodes[e.childNodes.length - 1]); |
| 1804 | + } |
1735 | 1805 | } |
1736 | 1806 | onEach(document.getElementsByClassName('method'), func); |
| 1807 | + onEach(document.getElementsByClassName('impl'), func); |
1737 | 1808 | onEach(document.getElementsByClassName('impl-items'), function(e) { |
1738 | 1809 | onEach(e.getElementsByClassName('associatedconstant'), func); |
1739 | 1810 | }); |
|
1781 | 1852 | } |
1782 | 1853 | }) |
1783 | 1854 |
|
| 1855 | + autoCollapseAllImpls(); |
| 1856 | + |
1784 | 1857 | function createToggleWrapper() { |
1785 | 1858 | var span = document.createElement('span'); |
1786 | 1859 | span.className = 'toggle-label'; |
|
1821 | 1894 | onEach(document.getElementById('main').getElementsByTagName('pre'), function(e) { |
1822 | 1895 | onEach(e.getElementsByClassName('attributes'), function(i_e) { |
1823 | 1896 | i_e.parentNode.insertBefore(createToggleWrapper(), i_e); |
1824 | | - collapseDocs(i_e.previousSibling.childNodes[0]); |
| 1897 | + collapseDocs(i_e.previousSibling.childNodes[0], "toggle"); |
1825 | 1898 | }); |
1826 | 1899 | }); |
1827 | 1900 |
|
|
0 commit comments