client/server: linkify headers and transform html entities in markdown

pull/40/head^2
Max Leiter 4 years ago
parent c0c18e5b61
commit f92d854336
No known key found for this signature in database
GPG Key ID: A3512F2F2F17EBDA

@ -8,21 +8,56 @@ delete defaultProps.theme
const renderer = new marked.Renderer() const renderer = new marked.Renderer()
// renderer.heading = (text, level, _, slugger) => { const convertHtmlEntities = (str: string) => {
// const id = slugger.slug(text) const quot = '"'
// const Component = `h${level}` const apos = '''
const amp = '&'
// return renderToStaticMarkup( const nbsp = ' '
// //@ts-ignore const lt = '<'
// <Component> const gt = '&gt;'
// <a href={`#${id}`} id={id} style={{ color: "inherit" }} > const code = '<code>'
// {text} const endCode = '</code>'
// </a> const combinedRegex = new RegExp(`${code}|${endCode}|${quot}|${apos}|${amp}|${nbsp}|${lt}|${gt}`, 'g')
// </Component>
// ) return str.replace(combinedRegex, (match) => {
// } switch (match) {
case quot:
return '"'
case apos:
return "'"
case amp:
return '&'
case nbsp:
return ' '
case lt:
return '<'
case gt:
return '>'
case code:
case endCode:
return '`'
default:
return match
}
})
}
renderer.heading = (text, level, _, slugger) => {
const id = slugger.slug(text)
const Component = `h${level}`
return renderToStaticMarkup(
//@ts-ignore
<Component>
<a href={`#${id}`} id={id} style={{ color: "inherit" }} >
{convertHtmlEntities(text)}
</a>
</Component>
)
}
// TODO: support elements inside link
// renderer.link = (href, _, text) => { // renderer.link = (href, _, text) => {
// const isHrefLocal = href?.startsWith('/') || href?.startsWith('#') // const isHrefLocal = href?.startsWith('/') || href?.startsWith('#')
// if (isHrefLocal) { // if (isHrefLocal) {
@ -32,9 +67,13 @@ const renderer = new marked.Renderer()
// </a> // </a>
// ) // )
// } // }
// return `<a href="${href}" target="_blank" rel="noopener noreferrer">${text}</a>`
// // dirty hack
// // if text contains elements, render as html
// return `<a href='${href}' target="_blank" rel="noopener noreferrer">${convertHtmlEntities(text)}</a>`
// } // }
renderer.image = function (href, _, text) { renderer.image = function (href, _, text) {
return `<Image loading="lazy" src="${href}" alt="${text}" layout="fill" />` return `<Image loading="lazy" src="${href}" alt="${text}" layout="fill" />`
} }

@ -8,21 +8,56 @@ delete defaultProps.theme
const renderer = new marked.Renderer() const renderer = new marked.Renderer()
// renderer.heading = (text, level, _, slugger) => { const convertHtmlEntities = (str: string) => {
// const id = slugger.slug(text) const quot = '&quot;'
// const Component = `h${level}` const apos = '&#39;'
const amp = '&amp;'
// return renderToStaticMarkup( const nbsp = '&nbsp;'
// //@ts-ignore const lt = '&lt;'
// <Component> const gt = '&gt;'
// <a href={`#${id}`} id={id} style={{ color: "inherit" }} > const code = '<code>'
// {text} const endCode = '</code>'
// </a> const combinedRegex = new RegExp(`${code}|${endCode}|${quot}|${apos}|${amp}|${nbsp}|${lt}|${gt}`, 'g')
// </Component>
// ) return str.replace(combinedRegex, (match) => {
// } switch (match) {
case quot:
return '"'
case apos:
return "'"
case amp:
return '&'
case nbsp:
return ' '
case lt:
return '<'
case gt:
return '>'
case code:
case endCode:
return '`'
default:
return match
}
})
}
renderer.heading = (text, level, _, slugger) => {
const id = slugger.slug(text)
const Component = `h${level}`
return renderToStaticMarkup(
//@ts-ignore
<Component>
<a href={`#${id}`} id={id} style={{ color: "inherit" }} >
{convertHtmlEntities(text)}
</a>
</Component>
)
}
// TODO: support elements inside link
// renderer.link = (href, _, text) => { // renderer.link = (href, _, text) => {
// const isHrefLocal = href?.startsWith('/') || href?.startsWith('#') // const isHrefLocal = href?.startsWith('/') || href?.startsWith('#')
// if (isHrefLocal) { // if (isHrefLocal) {
@ -32,9 +67,13 @@ const renderer = new marked.Renderer()
// </a> // </a>
// ) // )
// } // }
// return `<a href="${href}" target="_blank" rel="noopener noreferrer">${text}</a>`
// // dirty hack
// // if text contains elements, render as html
// return `<a href='${href}' target="_blank" rel="noopener noreferrer">${convertHtmlEntities(text)}</a>`
// } // }
renderer.image = function (href, _, text) { renderer.image = function (href, _, text) {
return `<Image loading="lazy" src="${href}" alt="${text}" layout="fill" />` return `<Image loading="lazy" src="${href}" alt="${text}" layout="fill" />`
} }

Loading…
Cancel
Save