84 lines
2.7 KiB
JavaScript
84 lines
2.7 KiB
JavaScript
const { contextBridge, ipcRenderer } = require("electron")
|
|
|
|
window.stop()
|
|
|
|
function md_parse(selector) {
|
|
var data = ""
|
|
var readme_elements = document.querySelector(selector).children
|
|
for (let i = 0; i < readme_elements.length; i++) {
|
|
let element = readme_elements[i]
|
|
|
|
let tag_name = element.tagName
|
|
if (tag_name.startsWith("H") && tag_name.length === 2) {
|
|
let header_lvl = tag_name[1]
|
|
data += "\n" + "#".repeat(header_lvl) + " " + element.innerText
|
|
} else if (tag_name === "P") {
|
|
data += element.innerText
|
|
} else if (tag_name === "UL") {
|
|
let list_items = element.children
|
|
for (let j = 0; j < list_items.length ; j++) {
|
|
list_item = list_items[j]
|
|
data += "\n* " + list_item.innerText.replaceAll("\n", "\n\t - ")
|
|
}
|
|
} else if (tag_name === "PRE") {
|
|
data += "```\n" + element.innerText + "\n```\n"
|
|
} else {
|
|
data += "```\n" + element.innerText + "\n```\n"
|
|
}
|
|
data += "\n"
|
|
}
|
|
return data
|
|
}
|
|
|
|
function escape_gemtext(string) {
|
|
return string.replaceAll(/\n\*/g, "\n *")
|
|
.replaceAll(/\n>/g, "\n >")
|
|
.replaceAll(/\n#/g, "\n #")
|
|
.replaceAll(/^```/g, " ```")
|
|
.replaceAll(/\n```/g, "\n ```")
|
|
}
|
|
|
|
function abs_href(href) {
|
|
var current_site = window.location.protocol + "//" + window.location.hostname
|
|
if (href.indexOf("http://") === 0 || href.indexOf("https://") === 0) {
|
|
return "?" + href
|
|
} else if (href.indexOf("gemini://") === 0) {
|
|
return href
|
|
} else if (href.startsWith("/")) {
|
|
return "?" + current_site + href
|
|
} else {
|
|
return "?" + window.location.href + href
|
|
}
|
|
}
|
|
|
|
function simple_convert() {
|
|
var title = window.document.title
|
|
var link_elements = document.getElementsByTagName("a")
|
|
var pre_elements = document.getElementsByTagName("pre")
|
|
var gemtext
|
|
if (title) { title = "# " + title + "\n\n" }
|
|
for (let link_element of link_elements) {
|
|
let href = link_element.getAttribute("href")
|
|
if (href === null) { continue }
|
|
link_element.innerText = "\n=> " + abs_href(href) + " " + link_element.innerText + "\n"
|
|
}
|
|
gemtext = escape_gemtext(document.getRootNode().children[0].innerText)
|
|
return title + gemtext
|
|
}
|
|
|
|
contextBridge.exposeInMainWorld(
|
|
"electron",
|
|
{
|
|
send_gemtext: (gemtext) => {
|
|
ipcRenderer.send("page-gemtext", gemtext)
|
|
},
|
|
request_sigil: (sigil_name) => {
|
|
return ipcRenderer.invoke("request-sigil", sigil_name)
|
|
},
|
|
default_sigil: simple_convert,
|
|
escape_gemtext: escape_gemtext,
|
|
abs_href: abs_href,
|
|
md_parse: md_parse,
|
|
}
|
|
)
|