spec-up-t 1.6.18 → 1.6.20
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 +1 -0
- package/assets/compiled/head.css +3 -2
- package/assets/compiled/head.js +1 -1
- package/assets/css/create-pdf.css +364 -121
- package/assets/css/custom-elements.css +2 -2
- package/assets/css/custom.css +2 -0
- package/assets/css/modal.css +23 -0
- package/assets/js/custom-elements.js +1 -1
- package/assets/js/tref-external-link-modal.js +199 -0
- package/config/asset-map.json +2 -0
- package/index.js +10 -1
- package/package.json +1 -1
- package/src/create-docx.js +14 -0
- package/src/create-pdf.js +56 -189
- package/src/install-from-boilerplate/boilerplate/assets/custom.css +40 -0
- package/src/install-from-boilerplate/boilerplate/spec/example-markup-in-markdown.md +4 -7
- package/src/install-from-boilerplate/boilerplate/spec/terms-definitions/composability.md +2 -4
- package/src/install-from-boilerplate/config-system-files.js +7 -1
- package/src/install-from-boilerplate/copy-boilerplate.js +1 -6
- package/src/install-from-boilerplate/copy-system-files.js +31 -18
- package/src/install-from-boilerplate/custom-update.js +2 -0
- package/src/install-from-boilerplate/migrate-versions-to-snapshots.js +1 -1
- package/src/install-from-boilerplate/rename-docs-to-legacy.js +96 -0
- package/src/parsers/template-tag-parser.js +12 -0
- package/src/pipeline/parsing/create-markdown-parser.test.js +52 -0
- package/src/pipeline/references/collect-external-references.js +0 -8
- package/src/pipeline/rendering/heading-hierarchy-validator.js +53 -0
- package/src/pipeline/rendering/render-spec-document.js +4 -0
- package/templates/template.html +6 -6
package/assets/compiled/body.js
CHANGED
|
@@ -113,6 +113,7 @@ function showModal(e){const n=document.createElement("div");n.className="spec-up
|
|
|
113
113
|
function tokenInput(){document.querySelector(".button-token-input").addEventListener("click",(()=>{const t=prompt("Please enter your GitHub token:");t?(localStorage.setItem("githubToken",t),console.log("GitHub token is set.")):alert("GitHub token is not set.")}))}document.addEventListener("DOMContentLoaded",(function(){tokenInput()}));
|
|
114
114
|
!function(){"use strict";const t=t=>document.querySelector(t);async function e(){const e=t(".service-menu");if(!e)return;const n=[{href:"./index.pdf",title:"Download this page as a PDF",cls:"button-pdf-download",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="currentColor" class="me-1"> <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z" fill="#e74c3c"/> <path d="M14 2v6h6" fill="none" stroke="#c0392b" stroke-width="1.5"/> <text x="12" y="17" font-size="6" font-weight="bold" text-anchor="middle" fill="white">PDF</text> </svg>',label:"PDF"},{href:"./index.docx",title:"Download this page as a DOCX",cls:"button-docx-download",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="currentColor" class="me-1"> <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z" fill="#2b579a"/> <path d="M14 2v6h6" fill="none" stroke="#1e4378" stroke-width="1.5"/> <text x="12" y="17" font-size="5" font-weight="bold" text-anchor="middle" fill="white">DOCX</text> </svg>',label:"DOCX"}],o=await Promise.all(n.map((t=>{return e=t.href,fetch(e,{method:"HEAD"}).then((t=>t.ok)).catch((()=>!1));var e})));let l=e.firstElementChild;n.forEach(((n,a)=>{if(!o[a])return;if(i=n.cls,t(`.service-menu .${i}`))return;var i;const s=function(t,e,n,o,l){const a=document.createElement("a");return a.classList.add(n,"btn","btn-sm"),a.target="_blank",a.rel="noopener noreferrer",a.href=t,a.title=e,a.setAttribute("aria-label",e),a.innerHTML=o+'<span class="button-label visually-hidden">'+l+"</span>",a}(n.href,n.title,n.cls,n.icon,n.label);e.insertBefore(s,l),l=s}))}window.SpecUpDownloads={addButtons:e},document.addEventListener("DOMContentLoaded",e,{once:!1});try{document.dispatchEvent(new CustomEvent("specup-downloads-ready"))}catch(t){}}();
|
|
115
115
|
function insertTrefs(e){!function(e){const n=[];document.querySelectorAll("dl.terms-and-definitions-list dt span.term-external").forEach((e=>{const t=e.dataset.originalTerm,r=e.closest("dt");if(r){const e=r.nextElementSibling;if(e?.classList.contains("term-external")&&e.classList.contains("meta-info-content-wrapper"))return}n.push({element:e,textContent:t,dt:r,parent:r?.parentNode})}));const t=n.map((n=>{const{textContent:t,dt:r,parent:o}=n;if(!r||!o)return null;const i=e.xtrefs.find((e=>e.term===t)),a=document.createDocumentFragment(),s=document.createElement("dd");if(s.classList.add("term-external","meta-info-content-wrapper","collapsed"),i){const e=i.avatarUrl?``:"",n=i.owner||"Unknown",r=i.repo&&i.repoUrl?`[${i.repo}](${i.repoUrl})`:"Unknown",o=i.commitHash||"Unknown",d=i.ghPageUrl?new URL(`#term:${i.term}`,i.ghPageUrl).href:"Unknown",l=`\n| Property | Value |\n| -------- | ----- |\n| Original Term | ${t} |\n| Link | ${d} |\n| Owner | ${e} ${n} |\n| Repo | ${r} |\n| Commit hash | ${o} |\n `;s.innerHTML=md.render(l),a.appendChild(s);let c=i.content.split("\n").map((e=>e.replace(/^\s*~\s*/,""))).join("\n").replace(/\]\]/g,"");const m=document.createElement("div");m.innerHTML=md.render(c),m.querySelectorAll("a").forEach((e=>{const n=e=>{try{return null!==document.getElementById(e)}catch{return!1}};try{const t=new URL(e.href);if(t.hostname!==window.location.hostname)return;if(t.hash&&n(t.hash.slice(1)))return;e.replaceWith(...e.childNodes)}catch{if(e.href.startsWith("#")&&n(e.href.slice(1)))return;e.replaceWith(...e.childNodes)}})),c=m.innerHTML;const f=document.createElement("div");f.innerHTML=md.render(c);const p=f.querySelectorAll("dd");if(p.length>0)Array.from(p).forEach((e=>{const n=e.cloneNode(!0);n.classList.add("term-external","term-external-embedded"),a.appendChild(n)}));else{const e=document.createElement("dd");e.classList.add("term-external","term-external-embedded"),e.innerHTML=f.innerHTML,a.appendChild(e)}}else{s.innerHTML=md.render("\n| Property | Value |\n| -------- | ----- |\n| Owner | Unknown |\n| Repo | Unknown |\n| Commit hash | not found |\n "),a.appendChild(s);const e=document.createElement("dd");e.innerHTML="<p>This term was not found in the external repository.</p>",a.appendChild(e)}return{dt:r,parent:o,fragment:a}})).filter(Boolean);requestAnimationFrame((()=>{t.forEach((e=>{const{dt:n,parent:t,fragment:r}=e;t.insertBefore(r,n.nextSibling)})),document.dispatchEvent(new CustomEvent("trefs-inserted",{detail:{count:t.length}}))}))}(e)}function initializeOnTrefsInserted(e){let n=!1;document.addEventListener("trefs-inserted",(function(t){n||(n=!0,e(),t.detail&&console.log(`Collapsible definitions initialized after ${t.detail.count} xrefs were inserted`))})),setTimeout((()=>{n||(console.warn("trefs-inserted event was not received, initializing collapsible definitions anyway"),e(),n=!0)}),1e3)}document.addEventListener("DOMContentLoaded",(()=>{"undefined"!=typeof allXTrefs&&allXTrefs?.xtrefs?insertTrefs(allXTrefs):(console.error("allXTrefs is undefined or missing xtrefs property"),document.dispatchEvent(new CustomEvent("trefs-inserted",{detail:{count:0,error:"Missing xtrefs data"}})))}));
|
|
116
|
+
!function(){"use strict";function e(e,t){const{overlay:n,countdownSpan:c}=function(e,t,n){const c=document.createElement("div");c.className="spec-up-t-modal-overlay";const a=document.createElement("div");a.className="spec-up-t-modal tref-nav-modal";const o=document.createElement("h2");o.textContent="Navigating to external specification";const r=document.createElement("p"),s=document.createElement("strong");s.textContent=t,r.append("",s);const l=document.createElement("p");l.className="tref-nav-url",l.textContent=e;const i=document.createElement("p");i.className="tref-nav-notice";const d=document.createElement("span");d.className="tref-nav-countdown",d.textContent=String(10),i.append("Navigating in ",d," s…");const u=document.createElement("div");u.className="tref-nav-actions";const m=document.createElement("a");m.className="btn btn-primary tref-nav-go-btn",m.href=e,m.textContent="Go now";const f=document.createElement("button");return f.className="btn btn-secondary tref-nav-cancel-btn",f.type="button",f.textContent="Cancel",f.addEventListener("click",n),u.append(m,f),a.append(o,r,l,i,u),c.appendChild(a),c.addEventListener("click",(function(e){e.target===c&&n()})),document.addEventListener("keydown",(function(e){"Escape"===e.key&&n()}),{once:!0}),{overlay:c,countdownSpan:d}}(e,t,(function(){clearTimeout(r),clearInterval(o),n.remove()}));document.body.appendChild(n);let a=10;const o=setInterval((function(){a-=1,c.textContent=String(a)}),1e3),r=setTimeout((function(){clearInterval(o),window.location.href=e}),1e4)}document.addEventListener("click",(function(t){const n=t.target,c=n.closest("a.x-term-reference")||n.closest("dd.meta-info-content-wrapper a");if(!c)return;const a=c.getAttribute("href");a&&function(e){try{return new URL(e,window.location.href).hostname!==window.location.hostname}catch{return!1}}(a)&&(t.preventDefault(),e(a,function(e){if("undefined"!=typeof allXTrefs&&Array.isArray(allXTrefs?.xtrefs)){const t=allXTrefs.xtrefs.find((t=>e.startsWith(t.ghPageUrl)));if(t?.externalSpec)return t.externalSpec}try{return new URL(e).hostname}catch{return e}}(a)))}))}();
|
|
116
117
|
function insertIrefs(){!function(){const e=document.querySelectorAll("span.iref-placeholder");if(0===e.length)return void document.dispatchEvent(new CustomEvent("irefs-inserted",{detail:{count:0}}));const t=[];e.forEach((e=>{const n=e.dataset.irefTerm,r=e.dataset.irefOriginal;if(!n)return void console.warn("iref placeholder missing data-iref-term attribute",e);const o=`term:${n}`,i=document.getElementById(o);if(!i){console.warn(`iref: term "${r}" (id: ${n}) not found in terms-and-definitions-list`);const o=document.createElement("div");o.className="iref-not-found",o.innerHTML=`<p class="text-warning"><em>[[iref: ${r}]] - Term not found in definitions list</em></p>`;const i=document.createDocumentFragment();return i.appendChild(o),void t.push({placeholder:e,fragment:i})}const d=i.closest("dt");if(!d)return void console.warn(`iref: could not find <dt> element for term "${r}"`);const l=document.createDocumentFragment(),s=document.createElement("div");s.className="iref-content";const c=document.createElement("dl");c.className="iref-definition-list";const a=d.cloneNode(!0);a.classList.add("iref-term"),a.classList.add("term-reference");const m=a.querySelector("a.toc-anchor");m&&m.remove();a.querySelectorAll("[id]").forEach((e=>{e.removeAttribute("id")}));a.querySelectorAll(".edit-term-buttons").forEach((e=>{e.remove()}));const f=d.querySelector('[id^="term:"]');if(f){const e=f.getAttribute("id"),t=document.createElement("a");t.href=`#${e}`,t.className="iref-go-to-glossary-button btn btn-sm btn-outline-secondary py-1",t.innerHTML="Glossary",t.title=`Go to original definition of ${r}`,a.appendChild(t)}c.appendChild(a);let u=d.nextElementSibling;for(;u&&"dd"===u.tagName.toLowerCase();){const e=u.cloneNode(!0);e.classList.add("iref-definition"),c.appendChild(e),u=u.nextElementSibling}s.appendChild(c),l.appendChild(s),t.push({placeholder:e,fragment:l})})),requestAnimationFrame((()=>{t.forEach((e=>{const{placeholder:t,fragment:n}=e;t.parentNode.replaceChild(n,t)})),document.dispatchEvent(new CustomEvent("irefs-inserted",{detail:{count:t.length}})),console.log(`Inserted ${t.length} inline reference(s)`)}))}()}document.addEventListener("DOMContentLoaded",(()=>{document.querySelectorAll("span.iref-placeholder").length>0&&document.querySelectorAll("dl.terms-and-definitions-list dt.term-external").length>0?document.addEventListener("trefs-inserted",(()=>{insertIrefs()}),{once:!0}):insertIrefs()}));
|
|
117
118
|
function getOrCreateButtonContainer(t){let n=t.querySelector(".definition-buttons-container");return n||(n=document.createElement("div"),n.classList.add("definition-buttons-container"),t.appendChild(n)),n}function addButtonToContainer(t,n,e=!1){const i=getOrCreateButtonContainer(t);return e?i.insertBefore(n,i.firstChild):i.appendChild(n),i}
|
|
118
119
|
function collapseDefinitions(){let{dds:t,dts:e,regularDds:s,specialDds:a}=function(){const t=document.querySelectorAll("#content dl.terms-and-definitions-list > dd");return{dds:t,dts:document.querySelectorAll("#content dl.terms-and-definitions-list > dt"),regularDds:Array.from(t).filter((t=>!i(t.textContent.trim()))),specialDds:Array.from(t).filter((t=>i(t.textContent.trim())))}}();function i(t){return["Source","See also","More in","Also see","See:","Mind you:","Explanation:","See also","See more","See more in","See more about","See more on","See more at","More:","Note:","Paraphrased by","Beware:","eSSIF-Lab: ","W3C VC:","NIST:","Supporting definitions:"].some((e=>t.startsWith(e)))}a.forEach((t=>{t.classList.add("terms-def-extra-info")})),e.forEach((t=>{if(t.querySelector(".collapse-all-defs-button"))return;const e=document.createElement("button");e.classList.add("collapse-all-defs-button","btn-outline-secondary","d-print-none","btn","p-0","fs-5","d-flex","align-items-center","justify-content-center"),e.innerHTML='<span class="state-indicator" data-state="0">①</span><span class="state-indicator" data-state="1">②</span><span class="state-indicator" data-state="2">③</span>',e.setAttribute("id","toggleButton"),e.setAttribute("title","Change how much info is shown"),e.setAttribute("data-state","2"),e.querySelector('.state-indicator[data-state="2"]').classList.add("active"),addButtonToContainer(t,e)})),document.addEventListener("click",(e=>{if(e.target.classList.contains("collapse-all-defs-button")||e.target.classList.contains("state-indicator")){const i=e.target.classList.contains("collapse-all-defs-button")?e.target:e.target.closest(".collapse-all-defs-button"),n=i.getBoundingClientRect();document.documentElement.classList.add("definitions-transitioning"),i.style.position="fixed",i.style.top=`${n.top}px`,i.style.right=window.innerWidth-n.right+"px",i.style.zIndex="1000",function(){const e=document.querySelectorAll(".collapse-all-defs-button");switch((parseInt(e[0].dataset.state||0)+1)%3){case 0:t.forEach((t=>{t.classList.add("hidden"),t.classList.remove("visible")})),e.forEach((t=>{t.dataset.state=0,t.title="Show basic definitions",t.querySelectorAll(".state-indicator").forEach((t=>{0===parseInt(t.dataset.state)?t.classList.add("active"):t.classList.remove("active")}))})),document.querySelector("html").classList.add("defs-hidden");break;case 1:s.forEach((t=>{t.classList.remove("hidden"),t.classList.add("visible")})),a.forEach((t=>{t.classList.add("hidden"),t.classList.remove("visible")})),e.forEach((t=>{t.dataset.state=1,t.title="Show all definitions",t.querySelectorAll(".state-indicator").forEach((t=>{1===parseInt(t.dataset.state)?t.classList.add("active"):t.classList.remove("active")}))})),document.querySelector("html").classList.remove("defs-hidden");break;case 2:t.forEach((t=>{t.classList.remove("hidden"),t.classList.add("visible")})),a.forEach((t=>{t.classList.add("terms-def-extra-info")})),e.forEach((t=>{t.dataset.state=2,t.title="Hide all definitions",t.querySelectorAll(".state-indicator").forEach((t=>{2===parseInt(t.dataset.state)?t.classList.add("active"):t.classList.remove("active")}))})),document.querySelector("html").classList.remove("defs-hidden")}}(),requestAnimationFrame((()=>{i.style.position="",i.style.top="",i.style.right="",i.style.zIndex="",document.documentElement.classList.remove("definitions-transitioning");const t=i.getBoundingClientRect();window.scrollTo({top:window.scrollY+(t.top-n.top),behavior:"instant"})}))}}))}document.addEventListener("DOMContentLoaded",(function(){initializeOnTrefsInserted(collapseDefinitions)}));
|