hellgate/sigils/gitlab.com

77 lines
3.3 KiB
Plaintext
Raw Permalink Normal View History

2021-04-23 23:43:02 +00:00
async function gen_gemtext() {
// wait for the page to actually finish loading
// ideally we would use a mutation observer here but i am lazy
await new Promise((resolve,reject) => {
setTimeout(resolve, 900)
});
var data = ""
var repo_node = document.getElementById("content-body")
if (repo_node !== null
&& repo_node.getAttribute("itemtype") === "http://schema.org/SoftwareSourceCode" ) {
var repo_title = repo_node
.querySelector("h1[data-qa-selector='project_name_content']")
if (repo_title !== null) {
data += "# " + repo_title.innerText + "\n\n"
}
var project_stats = repo_node.querySelector("nav.project-stats")
if (project_stats !== null) {
project_stats = project_stats.innerText.replaceAll("\n ", " ").replaceAll("\n", " | ")
data += project_stats + "\n"
}
var latest_commit = repo_node.querySelector("div.commit-detail.flex-list")
if (latest_commit !== null) {
latest_commit = latest_commit.innerText
data += "\n## Last updated: \n\n"
data += latest_commit + "\n"
}
file_node_list = repo_node.querySelectorAll("tr.tree-item")
if (file_node_list.length !== 0) {
data += "\n## Files\n\n"
for (let file_node of file_node_list) {
if (file_node.innerText === "..") { continue }
let file_link = file_node.querySelector("a.tree-item-link")
if (file_link !== null) {
file_link = window.electron.abs_href(file_link.getAttribute("href"))
}
let file_info = file_node.innerText.replace(/\t.*\t/, "\n* Last updated ")
data += "=> " + file_link + " " + file_info + "\n"
}
}
var readme_node = repo_node.querySelector("div.blob-viewer > div.file-content.md")
var code_node = repo_node.querySelector("div.blob-viewer > div.file-content.code")
if (readme_node !== null) {
data += "\n----------\n"
data += window.electron.md_parse("div.blob-viewer > div.file-content.md")
} else if (code_node !== null) {
var file_name = document.querySelector("div.file-header-content").innerText
var code_lines = code_node.querySelectorAll("span.line")
var num_lines = code_lines.length
var raw_link = document.querySelector("a[aria-label='Open raw'")
if (raw_link) {
raw_link = window.electron.abs_href(raw_link.getAttribute("href"))
data += "\n=> " + raw_link + " Raw"
}
if (num_lines !== 0) {
data += "\n\n# " + file_name.replace("\n", "").replace("\n", "|") + "\n\n"
data += "```\n"
for (let i = 0; i < code_lines.length; i++) {
let padding = String(num_lines).length - String(i + 1).length
let code_line = code_lines[i]
data += String(i + 1) + " ".repeat(padding) + "| " + code_line.innerText + "\n"
}
data += "```\n"
}
}
window.electron.send_gemtext(data)
} else {
window.electron.send_gemtext(window.electron.default_sigil())
}
}
gen_gemtext()