diff --git a/core/webdoc-default-template/src/app/index.js b/core/webdoc-default-template/src/app/index.js index 5ee1a417..b0798297 100644 --- a/core/webdoc-default-template/src/app/index.js +++ b/core/webdoc-default-template/src/app/index.js @@ -1,3 +1,4 @@ +import "./toc"; import Explorer from "./components/Explorer"; import Footer from "./components/Footer"; import Header from "./components/Header"; diff --git a/core/webdoc-default-template/src/app/toc.js b/core/webdoc-default-template/src/app/toc.js new file mode 100644 index 00000000..c0190f91 --- /dev/null +++ b/core/webdoc-default-template/src/app/toc.js @@ -0,0 +1,51 @@ +// @flow + +const toc /*: Map */ = new Map(); +const css = "page-members-explorer__item--current"; +let current /*: HTMLElement | null */ = null; + +function onIntersectionChange(entries /*: IntersectionObserverEntry[] */) { + for (let i = entries.length - 1; i >= 0; i--) { + const {target, isIntersecting} = entries[i]; + const id = target.getAttribute("data-id"); + const explorerItemElement = toc.get(id); + + explorerItemElement.setAttribute("data-visible", String(isIntersecting)); + } + + let next = null; + for (const [, explorerItemElement] of toc) { + if (explorerItemElement.getAttribute("data-visible") === "true") { + next = explorerItemElement; + } + } + + if (next !== current) { + if (next) next.classList.add(css); + if (current) current.classList.remove(css); + current = next; + } +} + +if (typeof IntersectionObserver !== "undefined") { + const observer = new IntersectionObserver(onIntersectionChange, { + root: null, + rootMargin: "0px", + threshold: [1], + }); + + document.addEventListener("DOMContentLoaded", function() { + for (const explorerItemElement of document.querySelectorAll(".page-members-explorer__item")) { + const targetId = explorerItemElement.getAttribute("data-id"); + const targetElement = document.querySelector(`.member__title[data-id="${targetId}"]`); + + if (!targetElement) { + console.warn(`${targetId} member not found in DOM!`); + continue; + } + + toc.set(targetId, explorerItemElement); + observer.observe(targetElement); + } + }); +} diff --git a/core/webdoc-default-template/src/styles/members-explorer.scss b/core/webdoc-default-template/src/styles/members-explorer.scss index f69afe3b..0e4c09e2 100644 --- a/core/webdoc-default-template/src/styles/members-explorer.scss +++ b/core/webdoc-default-template/src/styles/members-explorer.scss @@ -41,6 +41,13 @@ &:hover { background-color: rgba(0, 0, 0, 0.04); } + + &--current { + a { + /* See toc.js */ + color: $colorPrimary; + } + } } @media only screen and (max-width: 800px) { diff --git a/core/webdoc-default-template/static/styles/index.css b/core/webdoc-default-template/static/styles/index.css index 70f8e32f..15a399c8 100644 --- a/core/webdoc-default-template/static/styles/index.css +++ b/core/webdoc-default-template/static/styles/index.css @@ -1 +1 @@ -:root{-webkit-font-smoothing:subpixel-antialiased;-moz-osx-font-smoothing:grayscale}body,html{height:100%;margin:0;padding:0}a{color:#3f51b5;text-decoration:none}a:hover{color:#102ac0;text-decoration:underline}.docs{align-content:stretch;align-items:stretch;color:var(--color-primary-text);display:flex;flex-flow:column nowrap;font-family:system-ui,sans-serif;font-size:16px;height:100%;justify-content:flex-start;min-height:100vh}.docs .page{flex-basis:0;flex-grow:2;margin:0 auto;min-height:0;width:100%;word-break:break-word}.docs .page-explorer,.docs .page-members-explorer{grid-row:1;max-height:100%;max-width:400px;min-width:fit-content;overflow:auto}.docs .page-explorer{grid-column:1}.docs .page-members-explorer{grid-column:3;min-width:200px}.docs .page-members-explorer>:first-child{margin-top:68px}.docs .page-content>:first-child{margin-top:8px}.docs .page-content>:last-child,.docs .page-members-explorer>:last-child{margin-bottom:8px}.docs .page-content{-webkit-overflow-scrolling:touch;color:var(--color-text);display:flex;flex-direction:column;flex-grow:2;flex-shrink:1;font-family:system-ui,sans-serif;grid-column:2;grid-row:1;height:100%;max-height:100%;max-width:800px;min-width:0;overflow-x:hidden;overflow-y:scroll;padding-left:67px;padding-right:83px}@media only screen and (max-width:1025px){.docs .page-content{padding-left:34px;padding-right:42px}}@media only screen and (max-width:800px){.docs .page-content{padding-left:17px;padding-right:21px}}.docs .page-content>:first-child{margin-top:24px}.docs .page-r-divider{border:1px solid var(--color-primary-light);grid-column:3;grid-row:1;height:67vh;margin:68px 0 0;width:0}.search-container{margin-left:12px}.watermark{bottom:0;padding:4px;position:fixed;right:0}.watermark-text{font-size:.875em}.watermark-text>a{color:inherit;text-decoration:underline}h1{font-size:3em;margin:.75em 0}h2{font-size:2em}h2,h3{margin:1em 0 .5em}h3{font-size:1.5em}h4{border-bottom:1px solid rgba(0,0,0,.04);font-size:1.3em;margin:.1em 0;padding:.1em 0}table{border:1px solid var(--color-borders);border-collapse:collapse;margin:8px 0}table caption{font-weight:700;margin-bottom:8px;text-align:left}table th{border-bottom:1px solid var(--color-borders);font-weight:500;word-break:normal}table th,td{font-size:92%;padding:8px;text-align:left}table tr:nth-child(2n){background-color:#f6f8fa;border-bottom:1px solid #d8dee4;border-top:1px solid #d8dee4}table td{word-break:normal}table td p:first-child{margin-top:0}table td p:last-child{margin-bottom:0}.table-wrapper{display:block;overflow-x:scroll}.table-wrapper>table{min-width:100%}table.summary{padding:18px auto;table-layout:fixed;width:100%}table.summary tbody{margin:18px auto}table.summary td{vertical-align:top}table.summary td section:last-child{color:#333;margin-top:18px}table.summary td:first-child{width:36%}table.summary td:last-child{width:64%}table.summary .summary__signature a{text-decoration:underline}.header-content-container{display:flex;flex-direction:column;flex-grow:1;max-height:100%;min-width:0}.header-content-container__content{display:grid;grid-template-columns:fit-content(100%) minmax(0,max-content) fit-content(100%) minmax(0,1fr);grid-template-rows:100%;height:100vh;overflow:hidden}@media only screen and (max-width:800px){.header-content-container__content{grid-template-columns:fit-content(100%) minmax(0,max-content)}}.header{background-color:#fff;border-bottom:.5px solid rgba(0,0,0,.16);height:76px;top:0;width:100%;z-index:1}.header__container{justify-content:space-around}.header__container,.header__contents{align-items:center;backdrop-filter:blur(48px);display:flex;height:100%}.header__contents{flex-grow:1;justify-content:flex-end;padding-right:110px}@media only screen and (max-width:1025px){.header__contents>:last-child{margin-right:0}.header__contents{padding-right:10.7vw}}@media only screen and (max-width:768px){.header__contents{padding-right:5.3vw}}.header__link{color:#000;text-decoration:underline}.header__link--current,.header__link:hover{color:var(--color-primary)}.header__link--current{text-decoration:none}.header__title{margin:0;max-width:80%;padding:0;width:100%}.header__gap{flex-grow:1;max-width:42px}.document{font-size:1em;line-height:1.6em;width:100%}.document>.document__title{margin:18px 0}.document>.document__title>h1{font-size:3em;line-height:1.4em;margin:0}.document>.document__title_deprecated>h1{display:inline-block}.document>.document__title_deprecated>h1:first-child{color:#666;text-decoration:line-through}.document>.document__brief,.document>.document__description{margin-left:8px}.document>:not(h1,h2,h3,h4,h5,h6){margin:10px 0 15px}.breadcrumb a{color:var(--color-text);text-decoration:underline}.breadcrumb>:last-child{color:var(--color-primary)}.explorer{border-right:1px solid rgba(0,0,0,.04);display:flex;flex-direction:column;margin:0;max-height:100%;min-height:100%;min-width:270px}.explorer .MuiTreeView-root{overflow:auto;padding:0 8px}.explorer input{border:1px solid rgba(0,0,0,.04);border-radius:4px;font:12px Arial;margin:8px 24px 0;min-height:32px;padding:0 8px}.explorer input:focus{border:1px solid rgba(0,0,0,.4);outline:none}.explorer__tree>:first-child{margin-top:8px}.explorer__tree{margin-bottom:8px}.explorer__header{align-items:center;display:flex;flex-direction:row;height:76px;min-height:76px}.explorer__header__title{font-size:28px;font-weight:700;line-height:33px;margin-left:30px}.explorer__header-opened{border-bottom:.5px solid rgba(0,0,0,.16)}.explorer__header-closed{background-color:transparent}.members__category{font-size:1.5em;font-weight:700;line-height:1.4em;padding:8px}.members__subcategory{color:#333;font-size:1.125em;font-weight:400;line-height:1.4em;margin:14px 8px 14px 0}.members>hr{border:1px solid var(--color-sheet-secondary);margin-bottom:10px}.members>*{margin-bottom:10px;margin-top:10px}.member{padding-bottom:12px;position:relative;width:100%}.member__title{align-items:center;display:flex;margin-bottom:10px;margin-left:12px}.member__title>a{height:16px}.member__title_content{flex-grow:1;font-size:1.3em;line-height:1.4em;margin-left:8px}.member__title_deprecated>.member__title_content>span:first-child{color:#666;text-decoration:line-through}.member__tags{align-items:center;display:flex;margin-bottom:8px;margin-left:8px;margin-top:8px}.member__tag{border-radius:8px;font-size:.8em;margin-right:12px;padding:0 8px}.member__tag_red{background-color:#d73a49;color:#fff}.member__tag:last-child{margin-right:0}.member>.table-wrapper,.member__brief,.member__description,.member__see{margin-left:8px}.member__see>span:first-child{font-weight:700}.member__see>ul{margin-top:0}.tag--source{font-size:14px}.accordion__toggle{align-items:center;border-radius:8px;display:flex;transition-duration:.2s}.accordion__toggle button{background:transparent;border:none;height:40px;padding:0;width:40px}.accordion__toggle button .accordion__bg-active{display:none}.accordion__toggle button:focus{outline:none}.accordion__toggle:hover{background-color:rgba(0,0,0,.04)}.accordion__content{max-height:0;overflow:hidden;visibility:hidden}.accordion-active>.accordion__content{max-height:max-content;visibility:visible}.accordion-active .accordion__toggle button .accordion__bg-inactive{display:none}.accordion-active .accordion__toggle button .accordion__bg-active{display:inline}.page-members-explorer{font-family:system-ui,sans-serif;font-size:.875em;line-height:1.4em}.page-members-explorer-category{margin-bottom:7px;margin-left:16px}.page-members-explorer-category__title{font-weight:700;margin-bottom:7px}.page-members-explorer-category__items{list-style:none;margin-bottom:0;margin-left:12px;margin-top:0;padding:0}.page-members-explorer__item{align-items:center;border-radius:8px 0 0 8px;display:flex;font-weight:400;line-height:1.4em;padding-left:2px;vertical-align:middle}.page-members-explorer__item a{color:var(--color-text)}.page-members-explorer__item:hover{background-color:rgba(0,0,0,.04)}@media only screen and (max-width:800px){.page-members-explorer,.page-r-divider{display:none}}pre.hljs,pre.signature__container{align-items:center;border-color:1px solid var(--color-borders);display:flex;margin:0;overflow-x:auto;padding:4px 6px;width:100%}code,pre.hljs,pre.signature__container{border-radius:8px;font-family:Roboto Mono,monospace;font-size:14px;line-height:1.4em;vertical-align:baseline;word-break:keep-all}pre.hljs{padding:28px}.hljs,pre.hljs{background-color:var(--color-sheet-secondary)!important}.signature{border-radius:3px;padding:6px}.signature__container{background-color:#fff!important;min-height:42px;overflow-x:scroll;overflow-y:visible}.language-mermaid{background-color:var(--color-sheet-primary);text-align:center}.sources .page-content{max-width:100%}.sources .page-content .source{margin:24px 0!important}.source{border:1px solid #999;max-width:100%;overflow-x:auto;padding:8px 8px 48px}.source__split{display:flex;flex-direction:row}.source__split ul{font-size:14px;height:100%;line-height:24px;list-style:none;padding-top:24px;width:48px}.source pre,.source pre code{background-color:#fff!important}.source pre code{font-family:Source Code Pro,Roboto Mono,monospace;font-size:12px;line-height:24px}.footer{bottom:0;width:100%;z-index:10000}.footer__container{align-content:stretch;align-items:center;display:flex;flex-flow:row nowrap;justify-content:center}.footer__text{background:#fff;margin:0;padding:0}:root{--color-primary:#0066cd;--color-primary-light:#8ec4fb;--color-primary-dark:#c2c2c2;--color-primary-text:#212121;--color-text:#333;--color-secondary-text:#333;--color-secondary:#ffb74d;--color-secondary-light:#ffe97d;--color-secondary-dark:#c88719;--color-borders:#d9d9d9;--color-code-background:#f5f5f5;--color-sheet-primary:#fbfbfb;--color-sheet-secondary:#f7f7f7}.serial-navigation{color:var(--color-secondary-text);display:flex;margin-top:24px;padding-bottom:16px}.serial-navigation>a{color:var(--color-secondary-text);cursor:pointer}.serial-navigation>a:hover{text-decoration:none}.serial-navigation__previous{display:flex;transition:color .3s}.serial-navigation__previous>section:last-child{display:flex;flex-direction:column}.serial-navigation__previous>section:last-child>:first-child{margin-bottom:6px}.serial-navigation__previous svg{margin-right:14px}.serial-navigation__previous:hover{color:var(--color-primary-text)}.serial-navigation__next{display:block;transition:color .3s}.serial-navigation__next>section:first-child{display:flex;margin-bottom:6px}.serial-navigation__next svg{margin-left:14px}.serial-navigation__next:hover{color:var(--color-primary-text)}.serial-navigation>hr{border:1px solid var(--color-secondary-text);height:41px;margin:0 28px}.serial-navigation-arrow{stroke:currentColor;stroke-width:2px;height:14px;width:27px}.search-container>*{grid-column:1;grid-row:1}#search:focus{border:1px solid rgba(0,0,0,.4);outline:none} \ No newline at end of file +:root{-webkit-font-smoothing:subpixel-antialiased;-moz-osx-font-smoothing:grayscale}body,html{height:100%;margin:0;padding:0}a{color:#3f51b5;text-decoration:none}a:hover{color:#102ac0;text-decoration:underline}.docs{align-content:stretch;align-items:stretch;color:var(--color-primary-text);display:flex;flex-flow:column nowrap;font-family:system-ui,sans-serif;font-size:16px;height:100%;justify-content:flex-start;min-height:100vh}.docs .page{flex-basis:0;flex-grow:2;margin:0 auto;min-height:0;width:100%;word-break:break-word}.docs .page-explorer,.docs .page-members-explorer{grid-row:1;max-height:100%;max-width:400px;min-width:fit-content;overflow:auto}.docs .page-explorer{grid-column:1}.docs .page-members-explorer{grid-column:3;min-width:200px}.docs .page-members-explorer>:first-child{margin-top:68px}.docs .page-content>:first-child{margin-top:8px}.docs .page-content>:last-child,.docs .page-members-explorer>:last-child{margin-bottom:8px}.docs .page-content{-webkit-overflow-scrolling:touch;color:var(--color-text);display:flex;flex-direction:column;flex-grow:2;flex-shrink:1;font-family:system-ui,sans-serif;grid-column:2;grid-row:1;height:100%;max-height:100%;max-width:800px;min-width:0;overflow-x:hidden;overflow-y:scroll;padding-left:67px;padding-right:83px}@media only screen and (max-width:1025px){.docs .page-content{padding-left:34px;padding-right:42px}}@media only screen and (max-width:800px){.docs .page-content{padding-left:17px;padding-right:21px}}.docs .page-content>:first-child{margin-top:24px}.docs .page-r-divider{border:1px solid var(--color-primary-light);grid-column:3;grid-row:1;height:67vh;margin:68px 0 0;width:0}.search-container{margin-left:12px}.watermark{bottom:0;padding:4px;position:fixed;right:0}.watermark-text{font-size:.875em}.watermark-text>a{color:inherit;text-decoration:underline}h1{font-size:3em;margin:.75em 0}h2{font-size:2em}h2,h3{margin:1em 0 .5em}h3{font-size:1.5em}h4{border-bottom:1px solid rgba(0,0,0,.04);font-size:1.3em;margin:.1em 0;padding:.1em 0}table{border:1px solid var(--color-borders);border-collapse:collapse;margin:8px 0}table caption{font-weight:700;margin-bottom:8px;text-align:left}table th{border-bottom:1px solid var(--color-borders);font-weight:500;word-break:normal}table th,td{font-size:92%;padding:8px;text-align:left}table tr:nth-child(2n){background-color:#f6f8fa;border-bottom:1px solid #d8dee4;border-top:1px solid #d8dee4}table td{word-break:normal}table td p:first-child{margin-top:0}table td p:last-child{margin-bottom:0}.table-wrapper{display:block;overflow-x:scroll}.table-wrapper>table{min-width:100%}table.summary{padding:18px auto;table-layout:fixed;width:100%}table.summary tbody{margin:18px auto}table.summary td{vertical-align:top}table.summary td section:last-child{color:#333;margin-top:18px}table.summary td:first-child{width:36%}table.summary td:last-child{width:64%}table.summary .summary__signature a{text-decoration:underline}.header-content-container{display:flex;flex-direction:column;flex-grow:1;max-height:100%;min-width:0}.header-content-container__content{display:grid;grid-template-columns:fit-content(100%) minmax(0,max-content) fit-content(100%) minmax(0,1fr);grid-template-rows:100%;height:100vh;overflow:hidden}@media only screen and (max-width:800px){.header-content-container__content{grid-template-columns:fit-content(100%) minmax(0,max-content)}}.header{background-color:#fff;border-bottom:.5px solid rgba(0,0,0,.16);height:76px;top:0;width:100%;z-index:1}.header__container{justify-content:space-around}.header__container,.header__contents{align-items:center;backdrop-filter:blur(48px);display:flex;height:100%}.header__contents{flex-grow:1;justify-content:flex-end;padding-right:110px}@media only screen and (max-width:1025px){.header__contents>:last-child{margin-right:0}.header__contents{padding-right:10.7vw}}@media only screen and (max-width:768px){.header__contents{padding-right:5.3vw}}.header__link{color:#000;text-decoration:underline}.header__link--current,.header__link:hover{color:var(--color-primary)}.header__link--current{text-decoration:none}.header__title{margin:0;max-width:80%;padding:0;width:100%}.header__gap{flex-grow:1;max-width:42px}.document{font-size:1em;line-height:1.6em;width:100%}.document>.document__title{margin:18px 0}.document>.document__title>h1{font-size:3em;line-height:1.4em;margin:0}.document>.document__title_deprecated>h1{display:inline-block}.document>.document__title_deprecated>h1:first-child{color:#666;text-decoration:line-through}.document>.document__brief,.document>.document__description{margin-left:8px}.document>:not(h1,h2,h3,h4,h5,h6){margin:10px 0 15px}.breadcrumb a{color:var(--color-text);text-decoration:underline}.breadcrumb>:last-child{color:var(--color-primary)}.explorer{border-right:1px solid rgba(0,0,0,.04);display:flex;flex-direction:column;margin:0;max-height:100%;min-height:100%;min-width:270px}.explorer .MuiTreeView-root{overflow:auto;padding:0 8px}.explorer input{border:1px solid rgba(0,0,0,.04);border-radius:4px;font:12px Arial;margin:8px 24px 0;min-height:32px;padding:0 8px}.explorer input:focus{border:1px solid rgba(0,0,0,.4);outline:none}.explorer__tree>:first-child{margin-top:8px}.explorer__tree{margin-bottom:8px}.explorer__header{align-items:center;display:flex;flex-direction:row;height:76px;min-height:76px}.explorer__header__title{font-size:28px;font-weight:700;line-height:33px;margin-left:30px}.explorer__header-opened{border-bottom:.5px solid rgba(0,0,0,.16)}.explorer__header-closed{background-color:transparent}.members__category{font-size:1.5em;font-weight:700;line-height:1.4em;padding:8px}.members__subcategory{color:#333;font-size:1.125em;font-weight:400;line-height:1.4em;margin:14px 8px 14px 0}.members>hr{border:1px solid var(--color-sheet-secondary);margin-bottom:10px}.members>*{margin-bottom:10px;margin-top:10px}.member{padding-bottom:12px;position:relative;width:100%}.member__title{align-items:center;display:flex;margin-bottom:10px;margin-left:12px}.member__title>a{height:16px}.member__title_content{flex-grow:1;font-size:1.3em;line-height:1.4em;margin-left:8px}.member__title_deprecated>.member__title_content>span:first-child{color:#666;text-decoration:line-through}.member__tags{align-items:center;display:flex;margin-bottom:8px;margin-left:8px;margin-top:8px}.member__tag{border-radius:8px;font-size:.8em;margin-right:12px;padding:0 8px}.member__tag_red{background-color:#d73a49;color:#fff}.member__tag:last-child{margin-right:0}.member>.table-wrapper,.member__brief,.member__description,.member__see{margin-left:8px}.member__see>span:first-child{font-weight:700}.member__see>ul{margin-top:0}.tag--source{font-size:14px}.accordion__toggle{align-items:center;border-radius:8px;display:flex;transition-duration:.2s}.accordion__toggle button{background:transparent;border:none;height:40px;padding:0;width:40px}.accordion__toggle button .accordion__bg-active{display:none}.accordion__toggle button:focus{outline:none}.accordion__toggle:hover{background-color:rgba(0,0,0,.04)}.accordion__content{max-height:0;overflow:hidden;visibility:hidden}.accordion-active>.accordion__content{max-height:max-content;visibility:visible}.accordion-active .accordion__toggle button .accordion__bg-inactive{display:none}.accordion-active .accordion__toggle button .accordion__bg-active{display:inline}.page-members-explorer{font-family:system-ui,sans-serif;font-size:.875em;line-height:1.4em}.page-members-explorer-category{margin-bottom:7px;margin-left:16px}.page-members-explorer-category__title{font-weight:700;margin-bottom:7px}.page-members-explorer-category__items{list-style:none;margin-bottom:0;margin-left:12px;margin-top:0;padding:0}.page-members-explorer__item{align-items:center;border-radius:8px 0 0 8px;display:flex;font-weight:400;line-height:1.4em;padding-left:2px;vertical-align:middle}.page-members-explorer__item a{color:var(--color-text)}.page-members-explorer__item:hover{background-color:rgba(0,0,0,.04)}.page-members-explorer__item--current a{color:var(--color-primary)}@media only screen and (max-width:800px){.page-members-explorer,.page-r-divider{display:none}}pre.hljs,pre.signature__container{align-items:center;border-color:1px solid var(--color-borders);display:flex;margin:0;overflow-x:auto;padding:4px 6px;width:100%}code,pre.hljs,pre.signature__container{border-radius:8px;font-family:Roboto Mono,monospace;font-size:14px;line-height:1.4em;vertical-align:baseline;word-break:keep-all}pre.hljs{padding:28px}.hljs,pre.hljs{background-color:var(--color-sheet-secondary)!important}.signature{border-radius:3px;padding:6px}.signature__container{background-color:#fff!important;min-height:42px;overflow-x:scroll;overflow-y:visible}.language-mermaid{background-color:var(--color-sheet-primary);text-align:center}.sources .page-content{max-width:100%}.sources .page-content .source{margin:24px 0!important}.source{border:1px solid #999;max-width:100%;overflow-x:auto;padding:8px 8px 48px}.source__split{display:flex;flex-direction:row}.source__split ul{font-size:14px;height:100%;line-height:24px;list-style:none;padding-top:24px;width:48px}.source pre,.source pre code{background-color:#fff!important}.source pre code{font-family:Source Code Pro,Roboto Mono,monospace;font-size:12px;line-height:24px}.footer{bottom:0;width:100%;z-index:10000}.footer__container{align-content:stretch;align-items:center;display:flex;flex-flow:row nowrap;justify-content:center}.footer__text{background:#fff;margin:0;padding:0}:root{--color-primary:#0066cd;--color-primary-light:#8ec4fb;--color-primary-dark:#c2c2c2;--color-primary-text:#212121;--color-text:#333;--color-secondary-text:#333;--color-secondary:#ffb74d;--color-secondary-light:#ffe97d;--color-secondary-dark:#c88719;--color-borders:#d9d9d9;--color-code-background:#f5f5f5;--color-sheet-primary:#fbfbfb;--color-sheet-secondary:#f7f7f7}.serial-navigation{color:var(--color-secondary-text);display:flex;margin-top:24px;padding-bottom:16px}.serial-navigation>a{color:var(--color-secondary-text);cursor:pointer}.serial-navigation>a:hover{text-decoration:none}.serial-navigation__previous{display:flex;transition:color .3s}.serial-navigation__previous>section:last-child{display:flex;flex-direction:column}.serial-navigation__previous>section:last-child>:first-child{margin-bottom:6px}.serial-navigation__previous svg{margin-right:14px}.serial-navigation__previous:hover{color:var(--color-primary-text)}.serial-navigation__next{display:block;transition:color .3s}.serial-navigation__next>section:first-child{display:flex;margin-bottom:6px}.serial-navigation__next svg{margin-left:14px}.serial-navigation__next:hover{color:var(--color-primary-text)}.serial-navigation>hr{border:1px solid var(--color-secondary-text);height:41px;margin:0 28px}.serial-navigation-arrow{stroke:currentColor;stroke-width:2px;height:14px;width:27px}.search-container>*{grid-column:1;grid-row:1}#search:focus{border:1px solid rgba(0,0,0,.4);outline:none} \ No newline at end of file diff --git a/core/webdoc-default-template/tmpl/components/member/index.tmpl b/core/webdoc-default-template/tmpl/components/member/index.tmpl index 31195b4a..3cd368c6 100644 --- a/core/webdoc-default-template/tmpl/components/member/index.tmpl +++ b/core/webdoc-default-template/tmpl/components/member/index.tmpl @@ -18,10 +18,11 @@ const examples = doc.examples ? doc.examples : []; const modifiers = [ doc.deprecated ? "member__title_deprecated" : "" ].join(" "); +const uniqueId = this.mangled(doc); ?> -
+ diff --git a/core/webdoc-template-library/src/TemplateRenderer.js b/core/webdoc-template-library/src/TemplateRenderer.js index 32ee1025..138f6c1c 100644 --- a/core/webdoc-template-library/src/TemplateRenderer.js +++ b/core/webdoc-template-library/src/TemplateRenderer.js @@ -8,6 +8,7 @@ import type { import {tag, templateLogger} from "./Logger"; import {SymbolLinks} from "./SymbolLinks"; import fs from "fs"; +import {mangled} from "@webdoc/model"; import {merge} from "lodash"; import path from "path"; @@ -259,6 +260,10 @@ export class TemplateRenderer { return str.replace(/&/g, "&").replace(/