77 lines
3.3 KiB
Plaintext
77 lines
3.3 KiB
Plaintext
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()
|