spec-up-t 0.11.12 β 0.11.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/compiled/body.js +2 -2
- package/assets/compiled/head.css +3 -2
- package/assets/css/bootstrap-parts.css +55 -0
- package/assets/css/edit-term-buttons.css +3 -15
- package/assets/js/edit-term-buttons.js +6 -6
- package/assets/js/show-commit-hashes.js +8 -8
- package/index.js +2 -6
- package/package.json +1 -1
- package/readme.md +32 -11
- package/src/asset-map.json +2 -1
- package/src/get-xrefs-data.js +17 -10
- package/docs/index.html +0 -2489
- package/src/fix-content.js +0 -59
package/assets/compiled/body.js
CHANGED
|
@@ -50,7 +50,7 @@ window.FontAwesomeKitConfig={asyncLoading:{enabled:!0},autoA11y:{enabled:!0},bas
|
|
|
50
50
|
* @license MIT
|
|
51
51
|
* @since 2024-06-09
|
|
52
52
|
*/
|
|
53
|
-
function editTermButtons(){const t=
|
|
53
|
+
function editTermButtons(){const t=((e=specConfig.spec_directory).startsWith("./")?e=e.substring(2):e.startsWith("/")&&(e=e.substring(1)),e.endsWith("/")&&(e=e.slice(0,-1)),e);var e;document.querySelectorAll('span[id^="term:"]').forEach(e=>{const s=e.getAttribute("id").split(":")[1];e.innerHTML+=`<sup class="edit-term-button-sup"><a target="_blank" rel="noopener" href="https://github.com/${specConfig.source.account}/${specConfig.source.repo}/blob/main/${t}/${specConfig.spec_terms_directory}/${s}.md" class="edit-term-button btn">Edit</a></sup><sup class="history-term-button-sup"><a target="_blank" rel="noopener" href="https://github.com/${specConfig.source.account}/${specConfig.source.repo}/commits/main/${t}/${specConfig.spec_terms_directory}/${s}.md" class="history-term-button btn">History</a></sup>`})}document.addEventListener("DOMContentLoaded",(function(){editTermButtons()}));
|
|
54
54
|
function inPageSearch(){const e=document.querySelector("span[issue-count]"),t=specConfig.searchHighlightStyle||"ssi",n="search-h7vc6omi2hr2880",i=document.querySelector("main article");let c=document.createElement("div");c.setAttribute("id","container-"+n),c.setAttribute("class","container-"+n),e.after(c);let o=document.createElement("input");o.setAttribute("type","text"),o.setAttribute("id",n),o.setAttribute("placeholder","π"),c.appendChild(o),setTimeout(()=>{o.focus()},1e3);const r=document.createElement("div");r.setAttribute("id","back-and-forth-buttons-container-"+n);const a=document.createElement("button");a.setAttribute("id","one-match-backward-"+n),a.setAttribute("disabled","disabled"),a.setAttribute("title","Go to previous match. Shortcut key: Left Arrow"),a.textContent="β²",r.appendChild(a);const s=document.createElement("button");s.setAttribute("id","one-match-forward-"+n),s.setAttribute("disabled","disabled"),s.setAttribute("title","Go to next match. Shortcut key: Right Arrow"),s.textContent="βΌ",r.appendChild(s),c.appendChild(r);const d=document.createElement("span");d.setAttribute("id","total-matches-"+n),d.innerHTML="0 matches",c.appendChild(d),o.addEventListener("input",(function(){f(o.value)}));const h="highlight-matches-"+n,l={dif:"highlight-matches-DIF-search-h7vc6omi2hr2880",toip:"highlight-matches-ToIP-search-h7vc6omi2hr2880",btc:"highlight-matches-BTC-search-h7vc6omi2hr2880",keri:"highlight-matches-KERI-search-h7vc6omi2hr2880",ssi:"highlight-matches-SSI-search-h7vc6omi2hr2880",gleif:"highlight-matches-GLEIF-search-h7vc6omi2hr2880"}[t.toLowerCase()];let u=0,m=-1;function b(e){e.scrollIntoView({behavior:"smooth",block:"start"});const t=e.getBoundingClientRect(),n=t.top+window.pageYOffset-(window.innerHeight-t.height)/2;window.scrollTo({top:n,behavior:"smooth"})}function p(){m<=0?document.getElementById("one-match-backward-"+n).setAttribute("disabled","disabled"):document.getElementById("one-match-backward-"+n).removeAttribute("disabled"),m>=u-1?document.getElementById("one-match-forward-"+n).setAttribute("disabled","disabled"):document.getElementById("one-match-forward-"+n).removeAttribute("disabled")}function g(){d.innerHTML=u+" matches"}const f=function(e,t){let n;return function(){const i=this,c=arguments;clearTimeout(n),n=setTimeout(()=>e.apply(i,c),t)}}((function(e){if(function(){document.querySelectorAll("span."+h).forEach(e=>{Array.from(e.childNodes).forEach(t=>{t.nodeType===Node.ELEMENT_NODE&&e.removeChild(t)}),e.classList.contains(h)&&(e.outerHTML=e.innerHTML)})}(),u=0,m=-1,""===e)return void g();let t=0;!function i(c){if(3===c.nodeType){const i=function(i){const c=i.nodeValue,o=new RegExp(e,"gi");let r,a=0,s=document.createDocumentFragment();for(;null!==(r=o.exec(c));){s.appendChild(document.createTextNode(c.substring(a,r.index)));const e=document.createElement("span");e.textContent=r[0],e.classList.add(h),e.classList.add(l),e.setAttribute("id",n+"-"+t),s.appendChild(e),u=t+1,t++,a=r.index+r[0].length}return s.appendChild(document.createTextNode(c.substring(a))),s}(c);i.childNodes.length>1&&c.parentNode.replaceChild(i,c)}else 1===c.nodeType&&Array.from(c.childNodes).forEach(i)}(i);let c=document.querySelector("."+l);null!==c&&b(c);g(),p(),m=-1}),600);a.addEventListener("click",(function(){m--;const e=document.querySelector("#"+n+"-"+m);e&&b(e),e.classList.add("active"),setTimeout(()=>{e.classList.remove("active")},3e3),p()})),s.addEventListener("click",(function(){m++;const e=document.querySelector("#"+n+"-"+m);e&&b(e),e.classList.add("active"),setTimeout(()=>{e.classList.remove("active")},3e3),p()})),document.addEventListener("keyup",e=>{switch(e.key){case"ArrowRight":s.click();break;case"ArrowLeft":a.click()}})}document.addEventListener("DOMContentLoaded",(function(){inPageSearch()}));
|
|
55
55
|
function highlightMenuItems(){let t=null;function e(t){document.querySelectorAll("#toc_list a").forEach(t=>{t.classList.remove("highlight-cfib41dyhcd99sm")});const e=document.querySelector(`#toc_list a[href="#${t.id}"]`);e&&(e.classList.add("highlight-cfib41dyhcd99sm"),e.scrollIntoView({behavior:"smooth",block:"center"}))}const o=new IntersectionObserver((o,n)=>{const c=o.filter(t=>t.isIntersecting).map(t=>t.target);c.length>0?(t=c[0],e(t)):t&&e(t)},{root:null,rootMargin:"0px",threshold:.1});document.querySelectorAll("h2, h3, h4, h5, h6").forEach(t=>o.observe(t))}document.addEventListener("DOMContentLoaded",(function(){highlightMenuItems()}));
|
|
56
56
|
function backToTop(){const n=document.createElement("a");n.id="back-to-top-a1zncgtqfpzsig8",n.href="#content",n.innerHTML="β",document.body.appendChild(n);const t=function(n,t){let e;return function(){const o=this,c=arguments;clearTimeout(e),e=setTimeout(()=>n.apply(o,c),t)}}((function(){window.scrollY>300?n.style.display="flex":n.style.display="none"}),600);window.addEventListener("scroll",(function(){t()}))}document.addEventListener("DOMContentLoaded",(function(){backToTop()}));
|
|
@@ -61,6 +61,6 @@ function backToTop(){const n=document.createElement("a");n.id="back-to-top-a1znc
|
|
|
61
61
|
* @license MIT
|
|
62
62
|
* @since 2024-06-09
|
|
63
63
|
*/
|
|
64
|
-
function fetchCommitHashes(){document.querySelectorAll("[data-local-href]").forEach(e=>{const t=e.getAttribute("data-local-href").split(":");allXrefs.xrefs.forEach(r=>{if(r.externalSpec===t[1]&&r.term.toLowerCase()===t[2].toLowerCase()){const t=r.commitHash&&r.commitHash[0]?r.commitHash[0].substring(0,7):"No
|
|
64
|
+
function fetchCommitHashes(){document.querySelectorAll("[data-local-href]").forEach(e=>{const t=e.getAttribute("data-local-href").split(":");allXrefs.xrefs.forEach(r=>{if(r.externalSpec===t[1]&&r.term.toLowerCase()===t[2].toLowerCase()){const t=r.commitHash&&r.commitHash[0]?r.commitHash[0].substring(0,7):"No hash",o=document.createElement("a");o.href="https://github.com/"+r.owner+"/"+r.repo+"/compare/"+r.commitHash+"..main/"+r.terms_dir+"/"+r.term.replace(/ /g," - ").toLowerCase()+".md",o.target="_blank",o.classList.add("diff","xref-info-links","btn"),o.innerHTML="Diff",e.parentNode.insertBefore(o,e.nextSibling);const n=document.createElement("a");n.href="https://github.com/"+r.owner+"/"+r.repo+"/blob/main/"+r.terms_dir+"/"+r.term.replace(/ /g,"-").toLowerCase()+".md",n.target="_blank",n.classList.add("latest-version","xref-info-links","btn"),n.innerHTML="Latest",o.parentNode.insertBefore(n,e.nextSibling);const a=document.createElement("a");a.href="https://github.com/"+r.owner+"/"+r.repo+"/blob/"+r.commitHash+"/"+r.terms_dir+"/"+r.term.replace(/ /g,"-").toLowerCase()+".md",a.target="_blank",a.classList.add("exact-commit-hash","xref-info-links","btn"),a.innerHTML=t,n.parentNode.insertBefore(a,e.nextSibling)}})})}document.addEventListener("DOMContentLoaded",(function(){fetchCommitHashes()}));
|
|
65
65
|
function addAnchorsToTerms(){document.querySelectorAll("dt > span").forEach(e=>{const t=e.getAttribute("id"),n=document.createElement("a");n.setAttribute("href","#"+t),n.setAttribute("class","toc-anchor"),n.innerHTML="Β§ ",e.parentNode.insertBefore(n,e)})}document.addEventListener("DOMContentLoaded",(function(){addAnchorsToTerms()}));
|
|
66
66
|
!function(){var e=window.markdownit();delegateEvent("pointerup","[panel-toggle]",(e,t)=>{slidepanels.toggle(t.getAttribute("panel-toggle"))},{passive:!0}),window.addEventListener("hashchange",e=>slidepanels.close());let t=specConfig.source;t&&"github"===t.host&&fetch(`https://api.github.com/repos/${t.account+"/"+t.repo}/issues`).then(e=>e.json()).then(t=>{let n=t.length;document.querySelectorAll("[issue-count]").forEach(e=>{e.setAttribute("issue-count",n)}),repo_issue_list.innerHTML=t.map(t=>`<li class="repo-issue">\n <detail-box>\n <section>${e.render(t.body||"")}</section>\n <header class="repo-issue-title">\n <span class="repo-issue-number">${t.number}</span>\n <span class="repo-issue-link">\n <a href="${t.html_url}" target="_blank">${t.title}</a>\n </span>\n <span detail-box-toggle></span>\n </header>\n </detail-box>\n </li>`).join(""),Prism.highlightAllUnder(repo_issue_list)}),mermaid.initialize({startOnLoad:!0,theme:"neutral"}),document.querySelectorAll(".chartjs").forEach(e=>{new Chart(e,JSON.parse(e.textContent))});let n=new WeakMap;delegateEvent("pointerover",".term-reference, .spec-reference",(e,t)=>{const s=t.getAttribute("data-local-href")||t.getAttribute("href")||"";let l=document.getElementById(s.replace("#",""));if(!l||n.has(t))return;let r=l.closest("dt, td:first-child");if(!r)return;let i={allowHTML:!0,inlinePositioning:!0};switch(r.tagName){case"DT":i.content=r.nextElementSibling.textContent;break;case"TD":let e=r.closest("table"),t=Array.from(r.closest("tr").children);if(t.shift(),e){let n=Array.from(e.querySelectorAll("thead th"));n.shift(),n.length&&(i.content=`\n <header>${r.textContent}</header>\n <table>\n ${n.map((e,n)=>`<tr><td>${e.textContent}:</td><td>${t[n]?t[n].textContent:""}</td></tr>`).join("")}\n </table>`)}}i.content&&n.set(t,tippy(t,i))},{passive:!0})}();
|
package/assets/compiled/head.css
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
slide-panels{position:fixed;top:0;left:0;height:100%;width:100%;pointer-events:none;z-index:100;contain:paint}slide-panels:before{content:" ";display:block;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.3);transition:opacity .35s ease;opacity:0;cursor:pointer;pointer-events:none}slide-panels[open]:before{opacity:1;pointer-events:all}slide-panel{display:flex;flex-direction:column;box-sizing:border-box;position:absolute;top:0;left:0;bottom:0;background:#fff;box-shadow:0 0 5px 1px rgba(0,0,0,.15);transform:translate3d(-100%,0,0);transition:transform .35s ease;z-index:1;pointer-events:all}slide-panel[options~=right]{left:auto;right:0;transform:translate3d(100%,0,0)}slide-panel[open]{transform:translate3d(0,0,0)}detail-box{display:block}detail-box>header [detail-box-toggle]{width:2em;height:2em;text-align:center;cursor:pointer}detail-box>header [detail-box-toggle]:before{content:" ";display:inline-block;width:0;height:0;border-left:.55em solid transparent;border-right:.55em solid transparent;border-top:.8em solid;vertical-align:sub;cursor:pointer}detail-box[open] header [detail-box-toggle]:before{border-top:none;border-bottom:.8em solid}detail-box>section{height:0;opacity:0;min-width:100%;transition:height .3s ease,opacity .3s;overflow:hidden}detail-box[open]>section{opacity:1}tab-panels>nav{display:flex}tab-panels>nav>*{margin-left:-2px;padding:.5em 1em;background:#e0e0e0;border:1px solid #aaa;border-radius:0;cursor:pointer}tab-panels>nav>:focus{outline:0;background:#ccc}tab-panels>nav>:first-child{border-top-left-radius:5px;border-bottom-left-radius:5px}tab-panels>nav>:last-child{border-top-right-radius:5px;border-bottom-right-radius:5px}tab-panels>nav>[selected]{color:var(--themed-element-text);background:var(--themed-element-bk);border:var(--themed-element-border);opacity:.9999}tab-panels>section{display:none}tab-panels>section[selected]{display:block}
|
|
2
2
|
code[class*=language-],pre[class*=language-]{color:#ccc;background:0 0;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}
|
|
3
3
|
@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}
|
|
4
|
-
|
|
4
|
+
.btn{font-size:.7em!important;margin:0 0 0 .5em!important}
|
|
5
5
|
#search-h7vc6omi2hr2880{margin:.1em .5em;padding:.2em;height:1.5em}#search-h7vc6omi2hr2880:active{font-size:16px}#back-and-forth-buttons-container-search-h7vc6omi2hr2880{padding:0}#back-and-forth-buttons-container-search-h7vc6omi2hr2880 button{margin-right:.5em}#total-matches-search-h7vc6omi2hr2880{font-size:.8em}.panel-header#header{flex-wrap:wrap;height:auto}#container-search-h7vc6omi2hr2880{flex-basis:100%;padding:.3em;background:#eceff1}#logo img{width:100px}@media (min-width:576px){#container-search-h7vc6omi2hr2880{flex-basis:auto;margin-bottom:0}.panel-header#header{flex-wrap:nowrap;height:var(--header-height)}#logo{width:auto}}.highlight-matches-search-h7vc6omi2hr2880{outline:3px solid #1d6dae39;outline-offset:5px;transition:outline .3s ease-in-out}.highlight-matches-search-h7vc6omi2hr2880.active{outline:3px solid #1d6dae;transition:outline .3s ease-in-out}#search-h7vc6omi2hr2880:active{font-size:16px}#back-and-forth-buttons-container-search-h7vc6omi2hr2880{padding:0}#back-and-forth-buttons-container-search-h7vc6omi2hr2880 button{margin-right:.5em}#total-matches-search-h7vc6omi2hr2880{font-size:.8em}.panel-header#header{flex-wrap:wrap;height:auto}#container-search-h7vc6omi2hr2880{flex-basis:100%;padding:.3em;background:#eceff1}#logo img{width:100px}@media (min-width:576px){#container-search-h7vc6omi2hr2880{flex-basis:auto;margin-bottom:0}.panel-header#header{flex-wrap:nowrap;height:var(--header-height)}#logo{width:auto}}.highlight-matches-search-h7vc6omi2hr2880{font-size:1em;outline:3px solid #1d6dae39;outline-offset:5px;transition:outline .3s ease-in-out}.highlight-matches-search-h7vc6omi2hr2880.active{outline:3px solid #1d6dae;transition:outline .3s ease-in-out}.highlight-matches-DIF-search-h7vc6omi2hr2880{background-color:#1d6dae11}.highlight-matches-ToIP-search-h7vc6omi2hr2880{background-color:#a9dde0b0}.highlight-matches-BTC-search-h7vc6omi2hr2880{background-color:#f19019a1}.highlight-matches-KERI-search-h7vc6omi2hr2880{background-color:#b5d070d5}.highlight-matches-SSI-search-h7vc6omi2hr2880{background-color:#ff0}.highlight-matches-GLEIF-search-h7vc6omi2hr2880{background-color:#52dac6a6}
|
|
6
6
|
.highlight-cfib41dyhcd99sm{background-color:#1d6dae11}
|
|
7
7
|
.xref-info-links{font-size:.8em;border:1px solid #1d6dae;padding:0 .3em;margin-left:.5em;border-radius:10px;display:inline-block;text-decoration:none}.xref-info-links:hover{background-color:#1d6dae;color:#fff;transition:all .3s ease-in-out}
|
|
8
8
|
#back-to-top-a1zncgtqfpzsig8{position:fixed;bottom:20px;text-decoration:none;left:calc(100% - 1.8em);width:1.5em;height:1.5em;margin:0;padding:0;background-color:#1e6eae;color:#222;border-radius:50px;text-align:center;font-size:30px;color:#fff;box-shadow:0 0 1.3px rgba(0,0,0,.07),0 0 3.6px rgba(0,0,0,.1),0 0 8.7px rgba(0,0,0,.13),0 0 29px rgba(0,0,0,.2);cursor:pointer;border:none;display:none;align-items:center;justify-content:center}
|
|
9
|
-
:root{--base-theme-color:207,71%;--themed-element-bk:hsl(var(--base-theme-color), 40%);--themed-element-text:#fff;--themed-element-border:1px solid hsl(var(--base-theme-color), 26%);--themed-heading-text:hsl(var(--base-theme-color), 30%);--no-color:255,255,255;--faint-color:245,245,245;--dim-color:225,225,225;--low-color:200,200,200;--mid-color:100,100,100;--high-color:50,50,50;--full-color:0,0,0;--active-color:#3aaaff;--visited-color:rgb(188, 129, 255);--green-status:rgb(0, 123, 9);--light-green-status:rgb(0, 194, 13);--page-bk:rgb(var(--no-color));--page-text:rgb(var(--full-color));--page-text-hover:rgb(var(--full-color));--element-bk:rgb(var(--no-color));--element-bk-hover:rgba(var(--low-color), 0.5);--element-bk-transparent:rgba(var(--dim-color), 0.92);--element-border:rgba(var(--high-color), 0.4);--element-border-focus:rgb(var(--full-color), 0.75);--element-border-radius:3px;--element-shadow-low:0 1px 3px 0px rgba(0,0,0, 0.25);--element-shadow-mid:0 1px 3px 0px rgba(0,0,0, 0.35);--element-shadow-high:0 1px 5px 0px rgba(0,0,0, 0.45);--code-bk:#1a1e23;--input-bk:rgba(var(--dim-color), 0.6);--input-border:rgba(var(--high-color), 0.4);--header-height:48px;--header-bk:rgba(var(--low-color), 0.985);--header-text:rgb(var(--full-color));--header-border:rgba(var(--full-color), 0.1);--header-border-inverse:rgba(var(--no-color), 0.3);--text-shadow:0 1px 2px rgba(0,0,0,0.8);--svg-size:2vw;--font-size:14px}:target{scroll-margin:calc(var(--header-height)/ .75) 0 0}body:not([hashscroll]) :target{animation:highlight 1.5s .25s ease}body{margin:0;padding:0;font-family:Heebo,san-serif;line-height:1.5em;widows:2;orphans:2;word-wrap:break-word;overflow-wrap:break-word;color:#000;word-spacing:1px;counter-reset:h2 toc1}h1{font-size:2em;font-weight:700;line-height:1.2em}h2{margin:1.5em 0 1em}blockquote{position:relative;padding:0;margin:1.75em .75em;color:rgb(var(--mid-color));background:rgb(var(--faint-color))}blockquote:after,blockquote:before{content:"β";position:absolute;top:.065em;left:.065em;font-size:3em;height:.34em;line-height:100%;color:rgb(var(--low-color))}blockquote:after{content:"β";top:auto;left:auto;bottom:.065em;right:.065em;text-align:center}blockquote>p{padding:.6em 1.8em .5em 1.8em}strong strong{font-size:.9em;color:#b30032;font-weight:400;text-transform:uppercase}main article>ol,main article>ul{padding:0 0 0 2em}main article h1,main article h2,main article h3,main article h4,main article h5,main article h6{color:var(--themed-heading-text)}main article h2,main article h3,main article h4{display:flex;font-weight:500}main article h2{counter-reset:h3 h4}main article h3{counter-reset:h4}main article h2:after{counter-increment:h2;content:counter(h2) ".";padding:0 .4em 0 .2em;order:-1}main article h3:after{counter-increment:h3;content:counter(h2) "." counter(h3);padding:0 .45em 0 .2em;order:-1}main article h4:after{counter-increment:h4;content:counter(h2) "." counter(h3) "." counter(h4);padding:0 .5em 0 .2em;order:-1}h1 .toc-anchor{display:none}.toc-anchor{margin:-.1em 0 0;font-size:.875em;color:inherit;text-decoration:none;opacity:.35;order:-1;transition:opacity .3s ease}.toc-anchor:hover{opacity:1}pre{overflow:auto}code{padding:.085em .3em .1em;font-size:1.075em;color:#c7001c;vertical-align:middle;background:#f0f0f0;border-radius:4px}pre code{background:unset;padding:unset;border-radius:unset}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{font-size:1.25em;margin:-.11em .3em 0 0;border-radius:3px}ol,ul{margin:0;padding:0 0 0 1.2em}dt{font-weight:700;margin:1em 0 0}dd{margin-left:1.5em}main{box-sizing:border-box;float:right;width:75%;min-width:calc(100% - 325px);max-width:calc(100% - 275px);padding:.5em 2em 1.5em 2em;background:#fff;box-shadow:0 0 5px -1px rgba(0,0,0,.3)}main table{display:block;width:-webkit-fill-available;width:fit-content;max-width:100%;margin:1.5em 0 1.75em;border-spacing:0;border-collapse:collapse;overflow-x:auto;word-wrap:normal;overflow-wrap:normal;hyphens:manual}main thead tr th{color:var(--themed-element-text);background:var(--themed-element-bk);border:var(--themed-element-border);text-shadow:0 1px 1px rgba(0,0,0,.5)}main tr{border-top:1px solid #ccc;background-color:#fff;margin:0;padding:0}main tr:nth-child(2n){background-color:#f0f0f0}main tr th{font-weight:400;border:1px solid #ccc;text-align:left;margin:0;padding:6px 13px}main td,main th{padding:9px 13px;border:1px solid #d8d8d8}main tr td{border:1px solid #ccc;text-align:left;margin:0;padding:.55em .75em .55em}main tr td :first-child,main tr th :first-child{margin-top:0}main tr td :last-child,main tr th :last-child{margin-bottom:0}table pre[class*=language-]{border:none;border-radius:0}table pre[class*=language-]:before{display:none}svg[icon]{width:1.25em;height:1.25em;vertical-align:text-top;pointer-events:none}article p>img{max-width:100%;margin:0 auto}article li{margin-top:.4em}slide-panel>:not(header):not(footer){flex:1}:not(pre)>code[class*=language-],pre[class*=language-]{padding:.65em .8em .8em;background:var(--code-bk)}.tippy-box{box-shadow:var(--element-shadow-mid)}.tippy-box a{color:var(--active-color)}.tippy-box a:visited{color:var(--visited-color)}.tippy-content{padding:.55em .55em .5em}.tippy-content header{margin:0 0 .4em;padding:.15em .3em .1em;border-radius:2px;background:rgba(255,255,255,.1);text-shadow:0 1px rgba(0,0,0,.9)}.tippy-content table,.tippy-content tbody,.tippy-content td,.tippy-content tr{margin:0;padding:0;border:none;border-spacing:0;border-collapse:collapse;background:0 0!important;background-color:transparent!important}.tippy-content table{margin:0 .3em}.tippy-content td{font-size:.9em;padding:.2em 0 0}.tippy-content td:first-child{padding-right:.5em}a[path-0$="github.com"]:before{content:"\f09b";color:var(--page-text);margin:0 .25em 0 0;font-family:FontAwesome;text-decoration:none;display:inline-block;vertical-align:bottom}a[path-0$="github.com"][path-3=issues][path-4],a[path-0$="github.com"][path-3=projects],a[path-0$="github.com"][path-3=pull],a[path-0$="github.com"][path-3=releases]{text-decoration:none}a[path-0$="github.com"][path-3=issues][path-4] span,a[path-0$="github.com"][path-3=projects] span,a[path-0$="github.com"][path-3=pull] span,a[path-0$="github.com"][path-3=releases] span{display:none}a[path-0$="github.com"][path-3=issues][path-4]:after{content:"Issue #" attr(path-4)}a[path-0$="github.com"][path-3=pull]:after{content:"Pull Request #" attr(path-4)}a[path-0$="github.com"][path-3=releases][path-5]:after{content:"Release " attr(path-5)}a[path-0$="github.com"][path-3=projects]:after{content:"Project #" attr(path-4)}[issue-count]:after{content:"Issues (" attr(issue-count) ")";margin:0 0 0 .3em;padding:.1em 0 0}[issue-count=""][animate]{display:none;opacity:0}[issue-count][animate]:not([issue-count=""]){animation:display-show 1s}[panel-toggle]{cursor:pointer}.panel-header{display:flex;align-items:center;height:var(--header-height)}.panel-header>*{display:flex;height:100%;padding:.1em .8em 0;align-items:center}.slide-panel{width:calc(100% - 1em);max-width:475px;transition:transform .35s ease}.slide-panel[panel-open]{transform:translateX(0)}.notice{margin:1em 0;padding:.5em .9em .55em .65em;border-left:.5em solid}.notice p{margin:.4em 0 0}.note{background:#e9fbe9;border-color:#52e052}.note .notice-link{display:block;color:#178217}.issue{background:#e9f0fb;border-color:#527fe0}.issue .notice-link:before{display:block;color:#1e4cae}.warning{background:#fbe9e9;border-color:#e05252}.warning .notice-link{display:block;color:#ae1e1e}.example{color:#cebe00;background:#1a1e23;border-left:.5em solid}.example .notice-link{display:block;color:inherit;font-size:1.1em;font-family:Heebo,san-serif}.example pre[class*=language-]{padding:0;border-radius:0}.todo{background:#fbe4ff;border-color:#9700e2}.todo .notice-link{display:block;color:#6d00a2}.mermaid{display:flex;align-items:center;justify-content:center;margin:1.5em 0 1.75em}.reference-list{margin:0;padding:0;list-style:none}.reference-list dd a,.reference-status{font-style:italic}.reference-status{color:var(--green-status)}.tippy-box .reference-status{color:var(--light-green-status)}code[class*=language-],pre,pre[class*=language-]{font-size:.9em;margin:1em 0 1.5em;border-radius:3px}.example code[class*=language-],.example pre,.example pre[class*=language-]{margin:0}#svg{display:none}#header{position:sticky;position:-webkit-sticky;padding:0;top:0;margin:-.5em -2em 0 -2em;background:rgba(255,255,255,.9);border-bottom:1px solid rgba(0,0,0,.175);box-shadow:0 1px 3px 1px rgba(0,0,0,.1);z-index:2}#logo{box-sizing:border-box;display:flex;align-items:center;height:100%;padding:.5em}#logo img{height:100%}#logo+span{margin-left:auto}#header #toc_toggle{display:none;padding:0 1em;border-right:1px solid rgba(0,0,0,.15)}#content{max-width:800px}#content h1:first-of-type{margin:1em 0 .5em}#content h1:first-of-type .markdownIt-Anchor{display:none}#repo_issues{width:calc(100% - 1.5em);max-width:450px;border-left:1px solid rgba(0,0,0,.15)}#repo_issues>header{background:#eee;border-bottom:1px solid #ddd}#repo_issues>header span:first-of-type{font-weight:700;padding-top:.1em}#repo_issues>header .repo-issue-toggle{margin-left:auto;color:inherit;font-weight:700;text-decoration:none}#repo_issue_list{list-style:none;margin:0;padding:0 1.25em 1.25em;font-size:.85em;overflow:auto;-ms-overflow-style:none;scrollbar-width:none}#repo_issue_list::-webkit-scrollbar{display:none}#repo_issue_list:empty:before{content:"No issues found";display:block;text-align:center;font-size:1.1em;color:#aaa;margin:1em 0 0}.repo-issue detail-box{display:flex;flex-direction:column;padding:1em 0;border-bottom:1px solid #ddd}.repo-issue detail-box>section{order:1}.repo-issue detail-box>section:empty+.repo-issue-title [detail-box-toggle]{display:none}.repo-issue-title{display:flex;align-items:center}.repo-issue-link{flex:1;margin:0 0 0 .5em}.repo-issue-number{height:1em;margin:0 .4em 0 0;padding:.3em .25em 0;border-radius:3px;font-weight:700;background:#eee;border:1px solid #ddd;text-align:center;line-height:1em}.repo-issue-number:before{content:"#";font-weight:400;margin:0 .1em 0 0}.repo-issue [detail-box-toggle]{margin:0 0 0 1em;opacity:.35;transition:opacity .4s}.repo-issue [detail-box-toggle]:hover,.repo-issue detail-box[open] [detail-box-toggle]{opacity:1}#toc{display:flex;flex-direction:column;width:25%;max-width:325px;min-width:275px;background:#eceff1}#toc header{color:var(--themed-element-text);background:var(--themed-element-bk);box-shadow:0 1px 3px 0 rgba(0,0,0,.3);border:var(--themed-element-border);border-top:none;border-left:none}#toc header [panel-toggle]{display:none;height:var(--header-height);line-height:var(--header-height);margin-left:auto;padding:0 1em;color:inherit;font-weight:700;text-decoration:none}#toc_list{flex:1;padding:1em .8em;overflow:auto}.toc{padding:0 0 1.75em;font-size:.85em}.toc,.toc ul{margin:0;list-style:none}.toc ul{padding:0 0 0 1em}.toc a{display:block;padding:.4em .3em .225em;text-decoration:none;border-radius:3px;color:#333}.toc a:before{color:#000;font-weight:700}.toc a:hover{text-shadow:0 1px 1px #fff;background:rgba(0,0,0,.1)}.toc>li a:before{counter-increment:toc1;content:counter(toc1) ".";padding:0 .4em 0 .2em}.toc>li>ul{counter-reset:toc2}.toc>li>ul>li a:before{counter-increment:toc2;content:counter(toc1) "." counter(toc2);padding:0 .45em 0 .2em}.toc>li>ul ul{counter-reset:toc3}.toc>li>ul ul li a:before{counter-increment:toc3;content:counter(toc1) "." counter(toc2) "." counter(toc3);padding:0 .5em 0 .2em}@media (min-width:900px){slide-panel{z-index:2}#slidepanels[open=sidebar]:before{opacity:0;transition:none;pointer-events:none}#slidepanels:before{z-index:1}#toc{transition:none;transform:translate3d(0,0,0);box-shadow:0 0 5px 1px rgba(0,0,0,.15) inset;z-index:0}}@media (max-width:900px){main{width:100%;min-width:auto;max-width:none;padding:.5em 1.25em 1.5em 1.25em}#header{margin:-.5em -1.25em 0 -1.25em}#toc header [panel-toggle]{display:block}#header #toc_toggle{display:flex}}@media (max-width:550px){td{font-size:.8em}}@keyframes display-show{0%{display:none;opacity:0}1%{display:block}100%{opacity:1}}@keyframes highlight{50%{background-color:#ff0}}
|
|
9
|
+
:root{--base-theme-color:207,71%;--themed-element-bk:hsl(var(--base-theme-color), 40%);--themed-element-text:#fff;--themed-element-border:1px solid hsl(var(--base-theme-color), 26%);--themed-heading-text:hsl(var(--base-theme-color), 30%);--no-color:255,255,255;--faint-color:245,245,245;--dim-color:225,225,225;--low-color:200,200,200;--mid-color:100,100,100;--high-color:50,50,50;--full-color:0,0,0;--active-color:#3aaaff;--visited-color:rgb(188, 129, 255);--green-status:rgb(0, 123, 9);--light-green-status:rgb(0, 194, 13);--page-bk:rgb(var(--no-color));--page-text:rgb(var(--full-color));--page-text-hover:rgb(var(--full-color));--element-bk:rgb(var(--no-color));--element-bk-hover:rgba(var(--low-color), 0.5);--element-bk-transparent:rgba(var(--dim-color), 0.92);--element-border:rgba(var(--high-color), 0.4);--element-border-focus:rgb(var(--full-color), 0.75);--element-border-radius:3px;--element-shadow-low:0 1px 3px 0px rgba(0,0,0, 0.25);--element-shadow-mid:0 1px 3px 0px rgba(0,0,0, 0.35);--element-shadow-high:0 1px 5px 0px rgba(0,0,0, 0.45);--code-bk:#1a1e23;--input-bk:rgba(var(--dim-color), 0.6);--input-border:rgba(var(--high-color), 0.4);--header-height:48px;--header-bk:rgba(var(--low-color), 0.985);--header-text:rgb(var(--full-color));--header-border:rgba(var(--full-color), 0.1);--header-border-inverse:rgba(var(--no-color), 0.3);--text-shadow:0 1px 2px rgba(0,0,0,0.8);--svg-size:2vw;--font-size:14px}:target{scroll-margin:calc(var(--header-height)/ .75) 0 0}body:not([hashscroll]) :target{animation:highlight 1.5s .25s ease}body{margin:0;padding:0;font-family:Heebo,san-serif;line-height:1.5em;widows:2;orphans:2;word-wrap:break-word;overflow-wrap:break-word;color:#000;word-spacing:1px;counter-reset:h2 toc1}h1{font-size:2em;font-weight:700;line-height:1.2em}h2{margin:1.5em 0 1em}blockquote{position:relative;padding:0;margin:1.75em .75em;color:rgb(var(--mid-color));background:rgb(var(--faint-color))}blockquote:after,blockquote:before{content:"β";position:absolute;top:.065em;left:.065em;font-size:3em;height:.34em;line-height:100%;color:rgb(var(--low-color))}blockquote:after{content:"β";top:auto;left:auto;bottom:.065em;right:.065em;text-align:center}blockquote>p{padding:.6em 1.8em .5em 1.8em}strong strong{font-size:.9em;color:#b30032;font-weight:400;text-transform:uppercase}main article>ol,main article>ul{padding:0 0 0 2em}main article h1,main article h2,main article h3,main article h4,main article h5,main article h6{color:var(--themed-heading-text)}main article h2,main article h3,main article h4{display:flex;font-weight:500}main article h2{counter-reset:h3 h4}main article h3{counter-reset:h4}main article h2:after{counter-increment:h2;content:counter(h2) ".";padding:0 .4em 0 .2em;order:-1}main article h3:after{counter-increment:h3;content:counter(h2) "." counter(h3);padding:0 .45em 0 .2em;order:-1}main article h4:after{counter-increment:h4;content:counter(h2) "." counter(h3) "." counter(h4);padding:0 .5em 0 .2em;order:-1}h1 .toc-anchor{display:none}.toc-anchor{margin:-.1em 0 0;font-size:.875em;color:inherit;text-decoration:none;opacity:.35;order:-1;transition:opacity .3s ease}.toc-anchor:hover{opacity:1}pre{overflow:auto}code{padding:.085em .3em .1em;font-size:1.075em;color:#c7001c;vertical-align:middle;background:#f0f0f0;border-radius:4px}pre code{background:unset;padding:unset;border-radius:unset}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{font-size:1.25em;margin:-.11em .3em 0 0;border-radius:3px}ol,ul{margin:0;padding:0 0 0 1.2em}dt{font-weight:700;margin:1em 0 0}dd{margin-left:1.5em}main{box-sizing:border-box;float:right;width:75%;min-width:calc(100% - 325px);max-width:calc(100% - 275px);padding:.5em 2em 1.5em 2em;background:#fff;box-shadow:0 0 5px -1px rgba(0,0,0,.3)}main table{display:block;width:-webkit-fill-available;width:fit-content;max-width:100%;margin:1.5em 0 1.75em;border-spacing:0;border-collapse:collapse;overflow-x:auto;word-wrap:normal;overflow-wrap:normal;hyphens:manual}main thead tr th{color:var(--themed-element-text);background:var(--themed-element-bk);border:var(--themed-element-border);text-shadow:0 1px 1px rgba(0,0,0,.5)}main tr{border-top:1px solid #ccc;background-color:#fff;margin:0;padding:0}main tr:nth-child(2n){background-color:#f0f0f0}main tr th{font-weight:400;border:1px solid #ccc;text-align:left;margin:0;padding:6px 13px}main td,main th{padding:9px 13px;border:1px solid #d8d8d8}main tr td{border:1px solid #ccc;text-align:left;margin:0;padding:.55em .75em .55em}main tr td :first-child,main tr th :first-child{margin-top:0}main tr td :last-child,main tr th :last-child{margin-bottom:0}table pre[class*=language-]{border:none;border-radius:0}table pre[class*=language-]:before{display:none}svg[icon]{width:1.25em;height:1.25em;vertical-align:text-top;pointer-events:none}article p>img{max-width:100%;margin:0 auto}article li{margin-top:.4em}slide-panel>:not(header):not(footer){flex:1}:not(pre)>code[class*=language-],pre[class*=language-]{padding:.65em .8em .8em;background:var(--code-bk)}.tippy-box{box-shadow:var(--element-shadow-mid)}.tippy-box a{color:var(--active-color)}.tippy-box a:visited{color:var(--visited-color)}.tippy-content{padding:.55em .55em .5em}.tippy-content header{margin:0 0 .4em;padding:.15em .3em .1em;border-radius:2px;background:rgba(255,255,255,.1);text-shadow:0 1px rgba(0,0,0,.9)}.tippy-content table,.tippy-content tbody,.tippy-content td,.tippy-content tr{margin:0;padding:0;border:none;border-spacing:0;border-collapse:collapse;background:0 0!important;background-color:transparent!important}.tippy-content table{margin:0 .3em}.tippy-content td{font-size:.9em;padding:.2em 0 0}.tippy-content td:first-child{padding-right:.5em}a[path-0$="github.com"]:before{content:"\f09b";color:var(--page-text);margin:0 .25em 0 0;font-family:FontAwesome;text-decoration:none;display:inline-block;vertical-align:bottom}a[path-0$="github.com"][path-3=issues][path-4],a[path-0$="github.com"][path-3=projects],a[path-0$="github.com"][path-3=pull],a[path-0$="github.com"][path-3=releases]{text-decoration:none}a[path-0$="github.com"][path-3=issues][path-4] span,a[path-0$="github.com"][path-3=projects] span,a[path-0$="github.com"][path-3=pull] span,a[path-0$="github.com"][path-3=releases] span{display:none}a[path-0$="github.com"][path-3=issues][path-4]:after{content:"Issue #" attr(path-4)}a[path-0$="github.com"][path-3=pull]:after{content:"Pull Request #" attr(path-4)}a[path-0$="github.com"][path-3=releases][path-5]:after{content:"Release " attr(path-5)}a[path-0$="github.com"][path-3=projects]:after{content:"Project #" attr(path-4)}[issue-count]:after{content:"Issues (" attr(issue-count) ")";margin:0 0 0 .3em;padding:.1em 0 0}[issue-count=""][animate]{display:none;opacity:0}[issue-count][animate]:not([issue-count=""]){animation:display-show 1s}[panel-toggle]{cursor:pointer}.panel-header{display:flex;align-items:center;height:var(--header-height)}.panel-header>*{display:flex;height:100%;padding:.1em .8em 0;align-items:center}.slide-panel{width:calc(100% - 1em);max-width:475px;transition:transform .35s ease}.slide-panel[panel-open]{transform:translateX(0)}.notice{margin:1em 0;padding:.5em .9em .55em .65em;border-left:.5em solid}.notice p{margin:.4em 0 0}.note{background:#e9fbe9;border-color:#52e052}.note .notice-link{display:block;color:#178217}.issue{background:#e9f0fb;border-color:#527fe0}.issue .notice-link:before{display:block;color:#1e4cae}.warning{background:#fbe9e9;border-color:#e05252}.warning .notice-link{display:block;color:#ae1e1e}.example{color:#cebe00;background:#1a1e23;border-left:.5em solid}.example .notice-link{display:block;color:inherit;font-size:1.1em;font-family:Heebo,san-serif}.example pre[class*=language-]{padding:0;border-radius:0}.todo{background:#fbe4ff;border-color:#9700e2}.todo .notice-link{display:block;color:#6d00a2}.mermaid{display:flex;align-items:center;justify-content:center;margin:1.5em 0 1.75em}.reference-list{margin:0;padding:0;list-style:none}.reference-list dd a,.reference-status{font-style:italic}.reference-status{color:var(--green-status)}.tippy-box .reference-status{color:var(--light-green-status)}code[class*=language-],pre,pre[class*=language-]{font-size:.9em;margin:1em 0 1.5em;border-radius:3px}.example code[class*=language-],.example pre,.example pre[class*=language-]{margin:0}#svg{display:none}#header{position:sticky;position:-webkit-sticky;padding:0;top:0;margin:-.5em -2em 0 -2em;background:rgba(255,255,255,.9);border-bottom:1px solid rgba(0,0,0,.175);box-shadow:0 1px 3px 1px rgba(0,0,0,.1);z-index:2}#logo{box-sizing:border-box;display:flex;align-items:center;height:100%;padding:.5em}#logo img{height:100%}#logo+span{margin-left:auto}#header #toc_toggle{display:none;padding:0 1em;border-right:1px solid rgba(0,0,0,.15)}#content{max-width:800px}#content h1:first-of-type{margin:1em 0 .5em}#content h1:first-of-type .markdownIt-Anchor{display:none}#repo_issues{width:calc(100% - 1.5em);max-width:450px;border-left:1px solid rgba(0,0,0,.15)}#repo_issues>header{background:#eee;border-bottom:1px solid #ddd}#repo_issues>header span:first-of-type{font-weight:700;padding-top:.1em}#repo_issues>header .repo-issue-toggle{margin-left:auto;color:inherit;font-weight:700;text-decoration:none}#repo_issue_list{list-style:none;margin:0;padding:0 1.25em 1.25em;font-size:.85em;overflow:auto;-ms-overflow-style:none;scrollbar-width:none}#repo_issue_list::-webkit-scrollbar{display:none}#repo_issue_list:empty:before{content:"No issues found";display:block;text-align:center;font-size:1.1em;color:#aaa;margin:1em 0 0}.repo-issue detail-box{display:flex;flex-direction:column;padding:1em 0;border-bottom:1px solid #ddd}.repo-issue detail-box>section{order:1}.repo-issue detail-box>section:empty+.repo-issue-title [detail-box-toggle]{display:none}.repo-issue-title{display:flex;align-items:center}.repo-issue-link{flex:1;margin:0 0 0 .5em}.repo-issue-number{height:1em;margin:0 .4em 0 0;padding:.3em .25em 0;border-radius:3px;font-weight:700;background:#eee;border:1px solid #ddd;text-align:center;line-height:1em}.repo-issue-number:before{content:"#";font-weight:400;margin:0 .1em 0 0}.repo-issue [detail-box-toggle]{margin:0 0 0 1em;opacity:.35;transition:opacity .4s}.repo-issue [detail-box-toggle]:hover,.repo-issue detail-box[open] [detail-box-toggle]{opacity:1}#toc{display:flex;flex-direction:column;width:25%;max-width:325px;min-width:275px;background:#eceff1}#toc header{color:var(--themed-element-text);background:var(--themed-element-bk);box-shadow:0 1px 3px 0 rgba(0,0,0,.3);border:var(--themed-element-border);border-top:none;border-left:none}#toc header [panel-toggle]{display:none;height:var(--header-height);line-height:var(--header-height);margin-left:auto;padding:0 1em;color:inherit;font-weight:700;text-decoration:none}#toc_list{flex:1;padding:1em .8em;overflow:auto}.toc{padding:0 0 1.75em;font-size:.85em}.toc,.toc ul{margin:0;list-style:none}.toc ul{padding:0 0 0 1em}.toc a{display:block;padding:.4em .3em .225em;text-decoration:none;border-radius:3px;color:#333}.toc a:before{color:#000;font-weight:700}.toc a:hover{text-shadow:0 1px 1px #fff;background:rgba(0,0,0,.1)}.toc>li a:before{counter-increment:toc1;content:counter(toc1) ".";padding:0 .4em 0 .2em}.toc>li>ul{counter-reset:toc2}.toc>li>ul>li a:before{counter-increment:toc2;content:counter(toc1) "." counter(toc2);padding:0 .45em 0 .2em}.toc>li>ul ul{counter-reset:toc3}.toc>li>ul ul li a:before{counter-increment:toc3;content:counter(toc1) "." counter(toc2) "." counter(toc3);padding:0 .5em 0 .2em}@media (min-width:900px){slide-panel{z-index:2}#slidepanels[open=sidebar]:before{opacity:0;transition:none;pointer-events:none}#slidepanels:before{z-index:1}#toc{transition:none;transform:translate3d(0,0,0);box-shadow:0 0 5px 1px rgba(0,0,0,.15) inset;z-index:0}}@media (max-width:900px){main{width:100%;min-width:auto;max-width:none;padding:.5em 1.25em 1.5em 1.25em}#header{margin:-.5em -1.25em 0 -1.25em}#toc header [panel-toggle]{display:block}#header #toc_toggle{display:flex}}@media (max-width:550px){td{font-size:.8em}}@keyframes display-show{0%{display:none;opacity:0}1%{display:block}100%{opacity:1}}@keyframes highlight{50%{background-color:#ff0}}
|
|
10
|
+
.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.2rem .4rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;color:#fff;background-color:#1d6daeb2;border-color:#1d6dae}.btn:focus,.btn:hover{text-decoration:none;outline:0;color:#fff;background-color:#0056b3;border-color:#004085;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn.disabled{opacity:.65;pointer-events:none;color:#fff;background-color:#1d6dae;border-color:#1d6dae}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active,.show>.btn.dropdown-toggle{color:#fff;background-color:#004085;border-color:#002752}.btn:not(:disabled):not(.disabled).active:focus,.btn:not(:disabled):not(.disabled):active:focus,.show>.btn.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* Basic Bootstrap Button Styles, edited by Kor Dwarshuis */
|
|
2
|
+
.btn {
|
|
3
|
+
display: inline-block;
|
|
4
|
+
font-weight: 400;
|
|
5
|
+
text-align: center;
|
|
6
|
+
white-space: nowrap;
|
|
7
|
+
vertical-align: middle;
|
|
8
|
+
-webkit-user-select: none;
|
|
9
|
+
-moz-user-select: none;
|
|
10
|
+
-ms-user-select: none;
|
|
11
|
+
user-select: none;
|
|
12
|
+
border: 1px solid transparent;
|
|
13
|
+
padding: 0.2rem 0.4rem;
|
|
14
|
+
font-size: 1rem;
|
|
15
|
+
line-height: 1.5;
|
|
16
|
+
border-radius: 0.25rem;
|
|
17
|
+
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
|
18
|
+
color: #fff;
|
|
19
|
+
background-color: #1d6daeb2;
|
|
20
|
+
border-color: #1D6DAE;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.btn:hover,
|
|
24
|
+
.btn:focus {
|
|
25
|
+
text-decoration: none;
|
|
26
|
+
outline: 0;
|
|
27
|
+
color: #fff;
|
|
28
|
+
background-color: #0056b3;
|
|
29
|
+
border-color: #004085;
|
|
30
|
+
box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.btn.disabled {
|
|
34
|
+
opacity: 0.65;
|
|
35
|
+
pointer-events: none;
|
|
36
|
+
color: #fff;
|
|
37
|
+
background-color: #1D6DAE;
|
|
38
|
+
border-color: #1D6DAE;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.btn:not(:disabled):not(.disabled):active,
|
|
42
|
+
.btn:not(:disabled):not(.disabled).active,
|
|
43
|
+
.show>.btn.dropdown-toggle {
|
|
44
|
+
color: #fff;
|
|
45
|
+
background-color: #004085;
|
|
46
|
+
border-color: #002752;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.btn:not(:disabled):not(.disabled):active:focus,
|
|
50
|
+
.btn:not(:disabled):not(.disabled).active:focus,
|
|
51
|
+
.show>.btn.dropdown-toggle:focus {
|
|
52
|
+
box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* End Basic Bootstrap Button Styles */
|
|
@@ -1,16 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
font-size: 0.
|
|
3
|
-
|
|
4
|
-
padding: 0 0.3em;
|
|
5
|
-
margin-left: 0.5em;
|
|
6
|
-
border-radius: 10px;
|
|
7
|
-
display: inline-block;
|
|
8
|
-
text-decoration: none;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
dt sup a:hover {
|
|
12
|
-
background-color: #1D6DAE;
|
|
13
|
-
color: white;
|
|
14
|
-
/* fade in and out */
|
|
15
|
-
transition: all 0.3s ease-in-out;
|
|
1
|
+
.btn {
|
|
2
|
+
font-size: 0.7em !important;
|
|
3
|
+
margin: 0 0 0 0.5em !important;
|
|
16
4
|
}
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
function editTermButtons() {
|
|
10
|
-
//
|
|
11
|
-
const termsDefinitions = document.querySelector('.terms-and-definitions-list');
|
|
10
|
+
// Find the definition list. This does not work ok. Disabled for now.
|
|
11
|
+
// const termsDefinitions = document.querySelector('.terms-and-definitions-list');
|
|
12
12
|
|
|
13
13
|
// Remove "./" or "/" from the beginning of a string and "/" at the end of the string
|
|
14
14
|
function cleanPath(path) {
|
|
@@ -30,15 +30,15 @@ function editTermButtons() {
|
|
|
30
30
|
// Example usage with the string from the file
|
|
31
31
|
|
|
32
32
|
const cleanedSpecDir = cleanPath(specConfig.spec_directory);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const url = term.
|
|
33
|
+
|
|
34
|
+
document.querySelectorAll('span[id^="term:"]').forEach(term => {
|
|
35
|
+
const url = term.getAttribute('id');
|
|
36
36
|
|
|
37
37
|
// cut βurlβ on the β:β and keep the second part
|
|
38
38
|
const fileName = url.split(":")[1];
|
|
39
39
|
|
|
40
40
|
// add edit and history buttons to term
|
|
41
|
-
term.innerHTML += `<sup class="edit-term-button-sup"><a target="_blank" rel="noopener" href="https://github.com/${specConfig.source.account}/
|
|
41
|
+
term.innerHTML += `<sup class="edit-term-button-sup"><a target="_blank" rel="noopener" href="https://github.com/${specConfig.source.account}/${specConfig.source.repo}/blob/main/${cleanedSpecDir}/${specConfig.spec_terms_directory}/${fileName}.md" class="edit-term-button btn">Edit</a></sup><sup class="history-term-button-sup"><a target="_blank" rel="noopener" href="https://github.com/${specConfig.source.account}/${specConfig.source.repo}/commits/main/${cleanedSpecDir}/${specConfig.spec_terms_directory}/${fileName}.md" class="history-term-button btn">History</a></sup>`;
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -28,14 +28,14 @@ function fetchCommitHashes() {
|
|
|
28
28
|
// allXrefs is an object that is available in the global scope
|
|
29
29
|
allXrefs.xrefs.forEach((match) => {
|
|
30
30
|
if (match.externalSpec === splitHref[1] && match.term.toLowerCase() === splitHref[2].toLowerCase()) {
|
|
31
|
-
const commitHashShort = match.commitHash && match.commitHash[0] ? match.commitHash[0].substring(0, 7) : 'No
|
|
31
|
+
const commitHashShort = match.commitHash && match.commitHash[0] ? match.commitHash[0].substring(0, 7) : 'No hash';
|
|
32
32
|
|
|
33
33
|
// Diff of the latest commit hash of a term-file and the referenced commit hash
|
|
34
34
|
const diff = document.createElement('a');
|
|
35
35
|
diff.href = 'https://github.com/' + match.owner + '/' + match.repo + '/compare/' + match.commitHash + '..main/' + match.terms_dir + '/' + match.term.replace(/ /g, ' - ').toLowerCase() + '.md';
|
|
36
36
|
diff.target = '_blank';
|
|
37
|
-
diff.classList.add('diff', 'xref-info-links');
|
|
38
|
-
diff.style.cssText = 'display: inline-block; margin-left: 5px; margin-right: 5px; ';
|
|
37
|
+
diff.classList.add('diff', 'xref-info-links', 'btn');
|
|
38
|
+
// diff.style.cssText = 'display: inline-block; margin-left: 5px; margin-right: 5px; ';
|
|
39
39
|
diff.innerHTML = 'Diff';
|
|
40
40
|
element.parentNode.insertBefore(diff, element.nextSibling);
|
|
41
41
|
|
|
@@ -44,9 +44,9 @@ function fetchCommitHashes() {
|
|
|
44
44
|
const latestVersion = document.createElement('a');
|
|
45
45
|
latestVersion.href = 'https://github.com/' + match.owner + '/' + match.repo + '/blob/main/' + match.terms_dir + '/' + match.term.replace(/ /g, '-').toLowerCase() + '.md';
|
|
46
46
|
latestVersion.target = '_blank';
|
|
47
|
-
latestVersion.classList.add('latest-version', 'xref-info-links');
|
|
48
|
-
latestVersion.style.cssText = 'display: inline-block; margin-left: 5px; margin-right: 5px; ';
|
|
49
|
-
latestVersion.innerHTML = 'Latest
|
|
47
|
+
latestVersion.classList.add('latest-version', 'xref-info-links', 'btn');
|
|
48
|
+
// latestVersion.style.cssText = 'display: inline-block; margin-left: 5px; margin-right: 5px; ';
|
|
49
|
+
latestVersion.innerHTML = 'Latest';
|
|
50
50
|
diff.parentNode.insertBefore(latestVersion, element.nextSibling);
|
|
51
51
|
|
|
52
52
|
|
|
@@ -56,8 +56,8 @@ function fetchCommitHashes() {
|
|
|
56
56
|
const exactCommitHash = document.createElement('a');
|
|
57
57
|
exactCommitHash.href = 'https://github.com/' + match.owner + '/' + match.repo + '/blob/' + match.commitHash + '/' + match.terms_dir + '/' + match.term.replace(/ /g, '-').toLowerCase() + '.md';
|
|
58
58
|
exactCommitHash.target = '_blank';
|
|
59
|
-
exactCommitHash.classList.add('exact-commit-hash', 'xref-info-links');
|
|
60
|
-
exactCommitHash.style.cssText = 'display: inline-block; margin-left: 5px; margin-right: 5px; ';
|
|
59
|
+
exactCommitHash.classList.add('exact-commit-hash', 'xref-info-links', 'btn');
|
|
60
|
+
// exactCommitHash.style.cssText = 'display: inline-block; margin-left: 5px; margin-right: 5px; ';
|
|
61
61
|
exactCommitHash.innerHTML = commitHashShort;
|
|
62
62
|
latestVersion.parentNode.insertBefore(exactCommitHash, element.nextSibling);
|
|
63
63
|
}
|
package/index.js
CHANGED
|
@@ -6,7 +6,6 @@ module.exports = function(options = {}) {
|
|
|
6
6
|
validateReferences,
|
|
7
7
|
findExternalSpecByKey
|
|
8
8
|
} = require('./references.js');
|
|
9
|
-
const {getXrefsData} = require('./src/get-xrefs-data.js');
|
|
10
9
|
const gulp = require('gulp');
|
|
11
10
|
const fs = require('fs-extra');
|
|
12
11
|
const path = require('path');
|
|
@@ -31,11 +30,8 @@ module.exports = function(options = {}) {
|
|
|
31
30
|
}
|
|
32
31
|
];
|
|
33
32
|
|
|
34
|
-
// Test if xrefs-data.js exists
|
|
35
|
-
|
|
36
|
-
const projectRoot = process.cwd();
|
|
37
|
-
// Create a path for the output file in the project root:
|
|
38
|
-
const inputPath = path.join(projectRoot, 'output/xrefs-data.js');
|
|
33
|
+
// Test if xrefs-data.js exists, else make it an empty string
|
|
34
|
+
const inputPath = 'output/xrefs-data.js';
|
|
39
35
|
let xrefsData = "";
|
|
40
36
|
|
|
41
37
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spec-up-t",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.14",
|
|
4
4
|
"description": "Technical specification drafting tool that generates rich specification documents from markdown. Forked from https://github.com/decentralized-identity/spec-up by Daniel Buchner (https://github.com/csuwildcat)",
|
|
5
5
|
"main": "./index",
|
|
6
6
|
"repository": {
|
package/readme.md
CHANGED
|
@@ -1,24 +1,46 @@
|
|
|
1
|
+
# Spec-Up-T
|
|
1
2
|
|
|
2
|
-
|
|
3
|
-
<p align="center">
|
|
3
|
+
<div align="center">
|
|
4
4
|
|
|
5
5
|
<img src="./specup_logo.png">
|
|
6
6
|
|
|
7
|
-
<
|
|
7
|
+
<h2 style="display: block; margin: 0 auto; text-align: center;">Markdown Β» Spec-Up</h2>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
## Intro
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
Spec-Up is a technical specification development tool that enables you to create rich specification documents for standards bodies and engineering projects by writing in an extended version of markdown that features all the bells and whistles - for example: advanced syntax highlighting, notice blocks, complex tables, charts, UML diagrams, and more.
|
|
10
13
|
|
|
14
|
+
Spec-Up-T is an expansion of [DIF's Spec-Up](https://github.com/decentralized-identity/spec-up) specifically for the needs of the Trust-over-IP foundation. Read more in the elaborate motivation in this technical article [Spec-Up-T, the ToIP Terms extension of Spec-Up](https://hackmd.io/s1TEBBluQBSL10ZT5yRVPw)
|
|
11
15
|
|
|
16
|
+
## Extension
|
|
12
17
|
|
|
13
|
-
Spec-Up
|
|
18
|
+
Spec-Up-T stays in sync with Spec-Up, and currently adds the following extra functionality:
|
|
19
|
+
1. Search & Find
|
|
20
|
+
2. Splitter for Terms and Definition section following the [Termininology Governance Guide](https://trustoverip.github.io/ctwg-terminology-governance-guide/) and various meeting report since [CTWG April 2024](https://wiki.trustoverip.org/display/HOME/2024-04-22+CTWG+Meeting+Notes).
|
|
14
21
|
|
|
15
22
|
## Setup
|
|
16
23
|
|
|
17
|
-
|
|
24
|
+
Install Spec-Up-T as follows:
|
|
25
|
+
|
|
26
|
+
- Open your terminal and go to the target directory
|
|
27
|
+
- Run `npx create-spec-up-starterpack@latest`
|
|
28
|
+
This will create a working Spec-Up-T installation in a new directory called `spec-up-t-starter-pack`
|
|
29
|
+
|
|
30
|
+
- Rename this directory to your liking, for example `my-new-specification`
|
|
31
|
+
- Go into this dir:
|
|
32
|
+
`cd my-new-specification`
|
|
33
|
+
You are now in this dir.
|
|
34
|
+
|
|
35
|
+
- Install all dependencies:
|
|
36
|
+
`npm run install`
|
|
37
|
+
|
|
38
|
+
Now you have a basic Spec-Up-T install with the following content:
|
|
39
|
+
- a `specs.json` file
|
|
40
|
+
- a `spec/` directory with a sample markdown files
|
|
41
|
+
- (and more)
|
|
18
42
|
|
|
19
|
-
|
|
20
|
-
1. Run `npm install spec-up` in the root directory of the repo to install all dependencies.
|
|
21
|
-
2. Create a `specs.json` file **in the root folder of your repository** to specify configuration values used in the generation of your spec documents. The values in your `specs.json` file include things like where your spec's markdown files are located, where to output the generated spec document, and various metadata values used in rendering, such as the title, logo, and repo links for each of your specs. The following are the required/optional fields supported in the `specs.json` config file:
|
|
43
|
+
The`specs.json` file **in the root folder of your repository** specifies configuration values used in the generation of your spec documents. The values in your `specs.json` file include things like where your spec's markdown files are located, where to output the generated spec document, and various metadata values used in rendering, such as the title, logo, and repo links for each of your specs. The following are the required/optional fields supported in the `specs.json` config file:
|
|
22
44
|
|
|
23
45
|
- **`public_root`** _(PATH STRING, optional)_ - For some platforms and services where you may want to output your rendered spec, the pathing may differ from the directory structure of your local project. To account for this, you can use the `public_root` property to specify the insertion of a path segment to account for the different in pathing between your local renders and wherever you publish your spec to.
|
|
24
46
|
- **`specs`** _(ARRAY, required)_ - the `specs` array contains descriptor objects for each of the specs you are generating in your project, and are composed of the following required and optional properties:
|
|
@@ -38,9 +60,8 @@ Installing Spec-Up is easy peasy lemon squeezy:
|
|
|
38
60
|
"repo": "sidetree"
|
|
39
61
|
}
|
|
40
62
|
```
|
|
41
|
-
3. In your main node.js file, or as a package.json script entry, use this invocation call: `require('spec-up')()`
|
|
42
63
|
|
|
43
|
-
|
|
64
|
+
You're ready to start rendering specs as HTML sites locally and/or pushing them to github pages however you see fit to automate.
|
|
44
65
|
|
|
45
66
|
## Running the scripts locally
|
|
46
67
|
|
package/src/asset-map.json
CHANGED
package/src/get-xrefs-data.js
CHANGED
|
@@ -6,19 +6,18 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
// Get the current working directory
|
|
9
|
-
|
|
10
|
-
const path = require('path');
|
|
9
|
+
|
|
11
10
|
const fs = require('fs-extra');
|
|
12
|
-
const config = fs.readJsonSync(
|
|
11
|
+
const config = fs.readJsonSync('specs.json');
|
|
13
12
|
const specDirectories = config.specs.map(spec => spec.spec_directory + '/' + spec.spec_terms_directory);
|
|
14
13
|
|
|
15
14
|
// Create directory named βoutputβ in the project root if it does not yet exist
|
|
16
|
-
if (!fs.existsSync(
|
|
17
|
-
fs.mkdirSync(
|
|
15
|
+
if (!fs.existsSync('output')) {
|
|
16
|
+
fs.mkdirSync('output');
|
|
18
17
|
}
|
|
19
18
|
|
|
20
19
|
// Create a path for the output file in the project root
|
|
21
|
-
const outputPath =
|
|
20
|
+
const outputPath = 'output/xrefs-data.js';
|
|
22
21
|
|
|
23
22
|
function getXrefsData() {
|
|
24
23
|
let allXrefs = {};
|
|
@@ -55,39 +54,47 @@ function getXrefsData() {
|
|
|
55
54
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
56
55
|
}
|
|
57
56
|
|
|
57
|
+
console.log(`Github API request for the term β${match.term}β was successful`);
|
|
58
|
+
|
|
58
59
|
// Extract JSON data from the response
|
|
59
60
|
const data = await response.json();
|
|
60
61
|
|
|
61
62
|
// Check if there are any commits
|
|
62
63
|
if (data.length === 0) {
|
|
63
|
-
console.log(
|
|
64
|
+
console.log(`No commit hash found for the term β${match.term}β`);
|
|
64
65
|
|
|
65
66
|
return;
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
// Process the last ten commits
|
|
69
70
|
const commits = data.slice(0, 1); // Get only the last commit
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
const commitHash = commits.map(commit => commit.sha);
|
|
72
|
+
|
|
73
|
+
console.log(`Commit hash found for the term β${match.term}β: `, commitHash);
|
|
74
|
+
return commitHash;
|
|
72
75
|
|
|
73
76
|
// return;
|
|
74
77
|
} catch (error) {
|
|
75
|
-
console.error(
|
|
78
|
+
console.error(`Failed to fetch commit hash for the term β${match.term}β:`, error);
|
|
76
79
|
}
|
|
77
80
|
}
|
|
78
81
|
|
|
79
82
|
// Go through all directories that contain files with a term and definition
|
|
83
|
+
console.log('All βspec_directoryβ found in specs.json: ', specDirectories);
|
|
80
84
|
specDirectories.forEach(specDirectory => {
|
|
85
|
+
console.log(`Current spec_directory: `, specDirectory);
|
|
81
86
|
// read directory
|
|
82
87
|
fs.readdirSync(specDirectory).forEach(file => {
|
|
83
88
|
// read file
|
|
84
89
|
if (file.endsWith('.md')) {
|
|
90
|
+
console.log(`Markdown file referenced in spec_directory: `, file);
|
|
85
91
|
const markdown = fs.readFileSync(`${specDirectory}/${file}`, 'utf8');
|
|
86
92
|
// create regex that finds β[[xref:.*]]β
|
|
87
93
|
const regex = /\[\[xref:.*?\]\]/g;
|
|
88
94
|
if (regex.test(markdown)) {
|
|
89
95
|
const xrefs = markdown.match(regex);
|
|
90
96
|
xrefs.forEach(xref => {
|
|
97
|
+
console.log(`Xref found in ${file}: `, xref);
|
|
91
98
|
// example of xref: [[xref: PE, Holder]]
|
|
92
99
|
allXrefs.xrefs.add(xref);
|
|
93
100
|
});
|