OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-editor-parser / src / segment / to-html.js

67 lines · javascript ref:
const { DISPLAY_TYPES: t } = require("../constants.js"),
  {
    MENTION: n,
    HTTP_LINK: e,
    PEAR_LINK: r,
    BOLD: o,
    ITALIC: c,
    CODE: s,
    EMOJI: a,
    CODE_BLOCK: i,
    STRIKE_THROUGH: u,
  } = t,
  l = { [o]: $, [c]: m, [u]: d, [s]: g, [i]: j, [a]: E, [n]: O, [r]: I, [e]: I }
function f(t, n, e = {}) {
  if (!n) return p(t) || ""
  let r = ""
  for (const { start: o, end: c, styles: s } of n) {
    let n = p(t.slice(o, c))
    for (const t of s) n = l[t.type](n, t, e)
    r += n
  }
  return r.replace(/\n/g, "<br />")
}
function p(t) {
  return t ? t.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;") : ""
}
function $(t) {
  return `<b>${t}</b>`
}
function m(t) {
  return `<i>${t}</i>`
}
function d(t) {
  return `<s>${t}</s>`
}
function g(t) {
  return `<code>${t}</code>`
}
function j(t) {
  return `<pre>${t}</pre>`
}
function E(t, n, e) {
  const { urlRiv: r, url: o, emoji: c } = e.getEmojiData(n.content) || {}
  let s
  return (
    (s = r || o ? `<img ${T({ class: "emoji-img", src: r || o, alt: `:${n.content}:` })} />` : t),
    `<span ${T({ class: "emoji", data: { shortcode: n.content, emoji: c } })}>${s}</span>`
  )
}
function O(t, n) {
  const [e, r] = n.content.split("/"),
    o = {
      class: "mention",
      data: { type: "mention", id: e, label: t.startsWith("@") ? t.slice(1) : t },
    }
  return (r && (o.data.role = r), `<span ${T(o)}>${t}</span>`)
}
function I(t, n) {
  return `<a href="${n.content}">${t}</a>`
}
function T(t) {
  const { data: n, ...e } = t,
    r = Object.keys(e).map((t) => `${t}="${e[t]}"`)
  return (n && Object.keys(n).forEach((t) => r.push(`data-${t}="${n[t]}"`)), r.join(" "))
}
module.exports = { segmentToHtml: f }