vue-files-preview-inno
Version:
A tool for previewing files such as doc, excel, pdf, image, markdown, txt, audio, and video and so on.
129 lines (128 loc) • 3.52 kB
JavaScript
import { assign as b, escapeHtml as u, unescapeAll as m } from "./common/utils.mjs";
const o = {};
o.code_inline = function(n, r, i, l, t) {
const e = n[r];
return "<code" + t.renderAttrs(e) + ">" + u(e.content) + "</code>";
};
o.code_block = function(n, r, i, l, t) {
const e = n[r];
return "<pre" + t.renderAttrs(e) + "><code>" + u(n[r].content) + `</code></pre>
`;
};
o.fence = function(n, r, i, l, t) {
const e = n[r], s = e.info ? m(e.info).trim() : "";
let c = "", g = "";
if (s) {
const f = s.split(/(\s+)/g);
c = f[0], g = f.slice(2).join("");
}
let a;
if (i.highlight ? a = i.highlight(e.content, c, g) || u(e.content) : a = u(e.content), a.indexOf("<pre") === 0)
return a + `
`;
if (s) {
const f = e.attrIndex("class"), d = e.attrs ? e.attrs.slice() : [];
f < 0 ? d.push(["class", i.langPrefix + c]) : (d[f] = d[f].slice(), d[f][1] += " " + i.langPrefix + c);
const p = {
attrs: d
};
return `<pre><code${t.renderAttrs(p)}>${a}</code></pre>
`;
}
return `<pre><code${t.renderAttrs(e)}>${a}</code></pre>
`;
};
o.image = function(n, r, i, l, t) {
const e = n[r];
return e.attrs[e.attrIndex("alt")][1] = t.renderInlineAsText(e.children, i, l), t.renderToken(n, r, i);
};
o.hardbreak = function(n, r, i) {
return i.xhtmlOut ? `<br />
` : `<br>
`;
};
o.softbreak = function(n, r, i) {
return i.breaks ? i.xhtmlOut ? `<br />
` : `<br>
` : `
`;
};
o.text = function(n, r) {
return u(n[r].content);
};
o.html_block = function(n, r) {
return n[r].content;
};
o.html_inline = function(n, r) {
return n[r].content;
};
function h() {
this.rules = b({}, o);
}
h.prototype.renderAttrs = function(r) {
let i, l, t;
if (!r.attrs)
return "";
for (t = "", i = 0, l = r.attrs.length; i < l; i++)
t += " " + u(r.attrs[i][0]) + '="' + u(r.attrs[i][1]) + '"';
return t;
};
h.prototype.renderToken = function(r, i, l) {
const t = r[i];
let e = "";
if (t.hidden)
return "";
t.block && t.nesting !== -1 && i && r[i - 1].hidden && (e += `
`), e += (t.nesting === -1 ? "</" : "<") + t.tag, e += this.renderAttrs(t), t.nesting === 0 && l.xhtmlOut && (e += " /");
let s = !1;
if (t.block && (s = !0, t.nesting === 1 && i + 1 < r.length)) {
const c = r[i + 1];
(c.type === "inline" || c.hidden || c.nesting === -1 && c.tag === t.tag) && (s = !1);
}
return e += s ? `>
` : ">", e;
};
h.prototype.renderInline = function(n, r, i) {
let l = "";
const t = this.rules;
for (let e = 0, s = n.length; e < s; e++) {
const c = n[e].type;
typeof t[c] < "u" ? l += t[c](n, e, r, i, this) : l += this.renderToken(n, e, r);
}
return l;
};
h.prototype.renderInlineAsText = function(n, r, i) {
let l = "";
for (let t = 0, e = n.length; t < e; t++)
switch (n[t].type) {
case "text":
l += n[t].content;
break;
case "image":
l += this.renderInlineAsText(n[t].children, r, i);
break;
case "html_inline":
case "html_block":
l += n[t].content;
break;
case "softbreak":
case "hardbreak":
l += `
`;
break;
}
return l;
};
h.prototype.render = function(n, r, i) {
let l = "";
const t = this.rules;
for (let e = 0, s = n.length; e < s; e++) {
const c = n[e].type;
c === "inline" ? l += this.renderInline(n[e].children, r, i) : typeof t[c] < "u" ? l += t[c](n, e, r, i, this) : l += this.renderToken(n, e, r, i);
}
return l;
};
export {
h as default
};
//# sourceMappingURL=renderer.mjs.map