const termNames = [] ;
const termsReferencedByTerms = [] ;
function restrictReferences(utils, content) {
const base = document.createElement("div");
base.innerHTML = content;
const noPreserve = base.querySelectorAll("dfn:not(.preserve)");
for (const item of noPreserve) {
const $t = $(item);
const titles = $t.getDfnTitles();
const n = $t.makeID("dfn", titles[0]);
if (n) {
termNames[n] = $t.parent();
}
}
const $container = $(".termlist", base) ;
const containerID = $container.makeID("", "terms") ;
return (base.innerHTML);
}
require(["core/pubsubhub"], (respecEvents) => {
"use strict";
respecEvents.sub('end', (message) => {
const selfDfns = document.querySelectorAll("dfn[data-cite^='" + respecConfig.shortName.toUpperCase() + "#']");
for (const dfn of selfDfns) {
delete dfn.dataset.cite;
}
const selfRefs = document.querySelectorAll("a[data-cite^='" + respecConfig.shortName.toUpperCase() + "#']");
for (const anchor of selfRefs) {
anchor.href= anchor.dataset.cite.replace(/^.*#/,"#");
delete anchor.dataset.cite;
}
});
respecEvents.sub('end', (message) => {
if (message === 'core/link-to-dfn') {
const internalTerms = document.querySelectorAll(".termlist a.internalDFN");
for (const item of internalTerms) {
const idref = item.getAttribute('href').replace(/^#/,"") ;
if (termNames[idref]) {
const def = item.closest('dd');
if (def) {
const tid = def.previousElementSibling
.querySelector('dfn')
.getAttribute('id');
if (tid) {
if (termsReferencedByTerms[tid] === undefined) termsReferencedByTerms[tid] = [];
termsReferencedByTerms[tid].push(idref);
}
}
}
}
const clearRefs = (theTerm) => {
if (termsReferencedByTerms[theTerm] ) {
for (const item of termsReferencedByTerms[theTerm]) {
if (termNames[item]) {
delete termNames[item];
clearRefs(item);
}
}
};
if (termNames[theTerm]) {
delete termNames[theTerm];
}
};
const internalRefs = document.querySelectorAll("a[data-link-type='dfn']");
for (const item of internalRefs) {
const idref = item.getAttribute('href').replace(/^.*#/,"") ;
if (!item.closest('dl.termlist')) {
clearRefs(idref);
}
}
for (const term in termNames) {
const $p = $("#"+term);
if ($p === undefined) { continue; }
if (!$p.parent().is("dt")) { continue; }
if (($p.data("cite") || "").toLowerCase().startsWith(respecConfig.shortName)) { continue; }
const $dt = $p.parent();
const $dd = $dt.next();
if ($dd.children("dfn").length > 0) {
console.log(term + " definition contains definitions " + $dd.children("dfn").attr("id"))
}
console.log("drop term " + term);
const tList = $p.getDfnTitles();
$dd.remove(); $dt.remove(); }
}
});
});
require(["core/pubsubhub"], (respecEvents) => {
"use strict";
respecEvents.sub('end-all', (documentElement) => {
for (const link of document.querySelectorAll("a.playground")) {
let pre;
if (link.dataset.resultFor) {
pre = document.querySelector(link.dataset.resultFor + ' > pre');
} else {
pre = link.closest("aside").querySelector("pre");
}
const content = unComment(document, pre.textContent)
.replace(/\*\*\*\*/g, '')
.replace(/####([^#]*)####/g, '');
link.setAttribute('aria-label', 'playground link');
link.textContent = "Open in playground";
const linkQueryParams = {
startTab: "tab-expand",
"json-ld": content
}
if (link.dataset.compact !== undefined) {
linkQueryParams.startTab = "tab-" + "compacted";
linkQueryParams.context = '{}';
}
if (link.dataset.flatten !== undefined) {
linkQueryParams.startTab = "tab-" + "flattened";
linkQueryParams.context = '{}';
}
if (link.dataset.frame !== undefined) {
linkQueryParams.startTab = "tab-" + "framed";
const frameContent = unComment(document, document.querySelector(link.dataset.frame + ' > pre').textContent)
.replace(/\*\*\*\*/g, '')
.replace(/####([^#]*)####/g, '');
linkQueryParams.frame = frameContent;
}
if (link.dataset.context) {
const contextContent = unComment(document, document.querySelector(link.dataset.context + ' > pre').textContent)
.replace(/\*\*\*\*/g, '')
.replace(/####([^#]*)####/g, '');
linkQueryParams.context = contextContent;
}
link.setAttribute('href',
'https://json-ld.org/playground/#' +
Object.keys(linkQueryParams).map(k => `${encodeURIComponent(k)}=${encodeURIComponent(linkQueryParams[k])}`)
.join('&'));
}
for (const pre of document.querySelectorAll("pre")) {
const content = pre.innerHTML
.replace(/\*\*\*\*([^*]*)\*\*\*\*/g, '<span class="hl-bold">$1</span>')
.replace(/####([^#]*)####/g, '<span class="comment">$1</span>');
pre.innerHTML = content;
}
});
});
function _esc(s) {
return s.replace(/&/g,'&')
.replace(/>/g,'>')
.replace(/"/g,'"')
.replace(/</g,'<');
}
function reindent(text) {
const lines = text.trimRight().split("\n");
while (lines.length && !lines[0].trim()) {
lines.shift();
}
const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\s]/));
const leastIndent = Math.min(...indents);
return lines.map(s => s.slice(leastIndent)).join("\n");
}
function updateExample(doc, content) {
return _esc(reindent(unComment(doc, content)));
}
function unComment(doc, content) {
return content
.replace(/<!--/, '')
.replace(/-->/, '')
.replace(/< !\s*-\s*-/g, '<!--')
.replace(/-\s*- >/g, '-->')
.replace(/-\s*-\s*>/g, '-->');
}