79 lines
2.7 KiB
JavaScript
79 lines
2.7 KiB
JavaScript
(async () => {
|
|
const data = await (await fetch('https://git.lix.systems/puck/testfudgethingy/raw/branch/main/database.json')).json();
|
|
|
|
document.querySelector('.code-view').addEventListener('click', (e) => {
|
|
let clicky = e.target;
|
|
let isLine = false;
|
|
if (clicky.classList.contains('code-inner')) {
|
|
isLine = true;
|
|
} else if (!clicky.parentNode.classList.contains('code-inner')) {
|
|
return;
|
|
}
|
|
|
|
// TODO: non-ASCII support
|
|
|
|
let index = 0;
|
|
if (isLine) { // mehhhh
|
|
index = ((e.clientX - clicky.getBoundingClientRect().x) / clicky.getBoundingClientRect().width) * clicky.textContent.length;
|
|
} else {
|
|
for (let node of Array.from(clicky.parentNode.children)) {
|
|
if (node !== clicky) {
|
|
index += node.textContent.length;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
index += ((e.clientX - clicky.getBoundingClientRect().x) / clicky.getBoundingClientRect().width) * clicky.textContent.length;
|
|
}
|
|
|
|
index = Math.floor(index);
|
|
|
|
let line = parseInt((isLine ? clicky : clicky.parentNode).parentNode.attributes.rel.nodeValue.substring(1), 10);
|
|
let file = window.config.pageData.branchDropdownDataList[0].treePath;
|
|
|
|
console.log(`clicked line ${line} char ${index}`);
|
|
|
|
let symbol;
|
|
|
|
for (let doc of data.documents) {
|
|
if (doc.relativePath !== file) {
|
|
continue;
|
|
}
|
|
|
|
console.log('found document');
|
|
|
|
for (let occurrence of doc.occurrences) {
|
|
let startLine = occurrence.range[0] + 1;
|
|
let startChar = occurrence.range[1];
|
|
let endLine = (occurrence.range.length === 3 ? occurrence.range[0] : occurrence.range[2]) + 1;
|
|
let endChar = occurrence.range.length === 3 ? occurrence.range[2] : occurrence.range[3];
|
|
|
|
if (startLine > line || endLine < line)
|
|
continue;
|
|
|
|
if (startChar > index || endChar < index)
|
|
continue;
|
|
|
|
symbol = occurrence.symbol;
|
|
}
|
|
}
|
|
|
|
if (!symbol) return;
|
|
|
|
for (let doc of data.documents) {
|
|
for (let occurrence of doc.occurrences) {
|
|
if ((occurrence.symbolRoles & 1) !== 1)
|
|
continue;
|
|
|
|
if (occurrence.symbol !== symbol)
|
|
continue;
|
|
|
|
let data = window.config.pageData.branchDropdownDataList[0];
|
|
|
|
window.location = `${data.repoLink}/src/${data.branchNameSubURL}/${doc.relativePath}#L${occurrence.range[0] + 1}`;
|
|
}
|
|
}
|
|
}, { capture: true });
|
|
})();
|