|
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