require(["core/pubsubhub"], (respecEvents) => {
"use strict";
respecEvents.sub('end-all', (documentElement) => {
const selfDfns = Array.from(document.querySelectorAll("dfn[data-cite^='__SPEC__#']"));
for (const dfn of selfDfns) {
const anchor = dfn.querySelector('a');
if (anchor) {
const anchorContent = anchor.textContent;
dfn.removeChild(anchor);
dfn.textContent = anchorContent;
}
delete dfn.dataset.cite;
}
const selfRefs = document.querySelectorAll("a[data-cite^='__SPEC__#']");
for (const anchor of selfRefs) {
anchor.href= anchor.dataset.cite.replace(/^.*#/,"#");
delete anchor.dataset.cite;
}
const remoteDfns = [];
document.querySelectorAll(".termlist dfn:not(.preserve)")
.forEach((item, index) => {
if (!selfDfns.includes(item)) {
remoteDfns[item.dataset["cite"]] = item;
}
});
const internalRefs = Array.from(document.querySelectorAll(".termlist a[data-cite]"));
const allRefs = Array.from(document.querySelectorAll("a[data-cite]"))
.filter(e => !internalRefs.includes(e));
for (const item of allRefs) {
const cite = item.dataset["cite"];
delete remoteDfns[cite];
}
for (const item of Object.values(remoteDfns)) {
const dt = item.closest("dt");
if(dt) {
const dd = dt.nextElementSibling;
dt.hidden = true;
dd.hidden = true;
}
}
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, '-->');
}