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, } )